Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Удалить строку в которой заказать равно 0

Удалить строку в которой заказать равно 0
Я
   Privetanya
 
16.06.20 - 12:03
Нужно удалить строки в которых заказать равно 0. Не знаю как сделать,подскажите пожалуйста..

Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)

    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    
    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"
        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр]; // значение группировки по имени
            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда // последняя группировка ("ВариантИсполнения")
                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
                        
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                                        
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")
                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                            
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);

          // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"
        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;

        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;
                
                _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
                //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;
                
                _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
                Если _МинЗаказ < 0 Тогда
                    _МинЗаказ = 0;
                КонецЕсли;
                //Область.Параметры.МинЗаказ         = _МинЗаказ;
                
            КонецЕсли;

        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
        
            
                
            // "_ИмяСекции|ИтогоЗаказ"
            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если     // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку
                        (Есть.Раскрой()
                        И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                        И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                        )
                                            
                        //автозапускаемые позиции запускаются обработкой запуск заказа в производство
                    ИЛИ (_ИмяГр = "Номенклатура" //номенклатура с единственным вариантом (автозапускаемым в производство)
                        И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                        И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                        И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                        )
                        
                    ИЛИ (_ИмяГр = "ВариантИсполнения" //автозапускаемый в производство вариант исполнения
                        И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                        И _ВариантИсполнения.АвтоЗапускВПроизводство
                        ) Тогда
                        
                    _КолЗаказать = 0;    
                        
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака
                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            //Если _КолЗаказать>0   тогда    
            //    
            //    ВхТаблДок.Присоединить(Область);
            //КонецЕсли;
        КонецЕсли;
        
            
        
        // вывод след. группировки
        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                                
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения); // имя след. группировки
                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли;    
КонецЦикла;
    
    
КонецПроцедуры
   Ёпрст
 
1 - 16.06.20 - 12:05
(0) поставить условие в текст запроса и "оно само" удалится
   Privetanya
 
2 - 16.06.20 - 12:07
(1) _КолЗаказать рассчитываю в этом месте
 Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
        
            
                
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                        (Есть.Раскрой()
                        И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                        И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                        )
                                            
                        //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                        И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                        И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                        И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                        )
                        
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                        И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                        И _ВариантИсполнения.АвтоЗапускВПроизводство
                        ) Тогда
                        
                    _КолЗаказать = 0;    
                        
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
   Ёпрст
 
3 - 16.06.20 - 12:09
(2) очень интересно..
Ну и напиши
Если _КолЗаказать <>0 Тогда
   ТабДок.Вывести(НужнаяОбласть);
КонецЕсли;
   Ненавижу 1С
 
4 - 16.06.20 - 12:10
От идентификаторов переменных рябит в глазах
   DrZombi
 
5 - 16.06.20 - 12:11
Вау, вы еще не удалили эту ветку :)
   Злопчинский
 
6 - 16.06.20 - 12:12
блин.. восьмерка это трэш с восьмерочниками... ;-)
   Злопчинский
 
7 - 16.06.20 - 12:13
ну, кроме Ёпрста, жду когда он что-нить типа http://catalog.mista.ru/journal/news/mir-1s/nikita-zaytsev-a-k-a-wildhare-ya-universalnyy-soldat-v-mire-1s_1250753/ налабает
   DrZombi
 
8 - 16.06.20 - 12:15
(0) Попробуй рассчитать "_КолЗаказать ", до вывода его на печатную форму.

Не скупись, двойной цикл, но столь большая потеря... От того, что ты пытаешься удалять ячейки :)
   DrZombi
 
9 - 16.06.20 - 12:16
+ Помнится, давненько встретился с одним алгоритмом вывода печатных форм, он чем-то напоминает на СКД от 8-ки... Отчетики куда приятней получались... универсальными :)
   Ёпрст
 
10 - 16.06.20 - 12:17
Ну или так, если переделывать не охота:

             Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
       Если _КолЗаказать=0   тогда    
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);
           ВхТаблДок.УдалитьОбласть(Область,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);   
       КонецЕсли;
   Ёпрст
 
11 - 16.06.20 - 12:18
+10

           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);
           ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
   Privetanya
 
12 - 16.06.20 - 12:21
(3) вот так не получалось,пробовала. Все равно выводит всю номенклатуру
   Privetanya
 
13 - 16.06.20 - 12:22
(11)  Ошибка при вызове метода контекста (Область)
            УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);
по причине:
Область не найдена: 5
   Ёпрст
 
14 - 16.06.20 - 12:24
(13) ну блин, 
УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
   Privetanya
 
15 - 16.06.20 - 12:27
(14) удалить,то удалилось,но все группировки съехали
   Privetanya
 
16 - 16.06.20 - 12:33
(14) т.е. Например
Было
-Материал     0
  -Пленка     0
    -Лайм     122
    -Дуб      10

Стало
    -Лайм     122
    -Дуб      10

И соответственно другие друг на друга налезли
   Ёпрст
 
17 - 16.06.20 - 12:38
(15) че закзывала, то и получила
   Privetanya
 
18 - 16.06.20 - 12:40
(17) Ок,А можете и это помочь исправить? Пожалуйста..
   Ёпрст
 
19 - 16.06.20 - 12:42
(18) для начала, нужно определится, что "удалять":

только группировки самого нижнего уровня или, если вышестоящая, то не выводить все нижестоящие
   Ёпрст
 
20 - 16.06.20 - 12:43
Для начала, вот так:
    УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
    Продолжить;
   Privetanya
 
21 - 16.06.20 - 12:46
(19) Нужно удалять группировки нижнего уровня,но если вышестоящая группировка не содержит элементов,то ее тоже удаляем.
   Privetanya
 
22 - 16.06.20 - 12:50
(20) Выводит все основные группы
   Privetanya
 
23 - 16.06.20 - 12:57
(8) И так данные очень долго грузятся
   Ёпрст
 
24 - 16.06.20 - 13:05
Да блин..
    Если _КолЗаказать=0   тогда    
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);

           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);

Иначе


    // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                                
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли; 
КонецЕсли;

   Privetanya
 
25 - 16.06.20 - 13:12
(24) Не пойму что то не так. Выводятся основные группы только. Вот так ведь? Или что то не так?
ВхТаблДок.Присоединить(Область);
                        
    //          Если _КолЗаказать=0   тогда    

    //     УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);

    //Продолжить;

    //       ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);   

    //   КонецЕсли;

    //        

    //    КонецЕсли;

            
        
        // вывод след. группировки

        //Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда 

        //                         

        //    _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);

        //    ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);

        //    

        //Иначе

        //    

        //    Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда

        //        Продолжить;

        //    КонецЕсли;

        //    

        //    Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда

        //        _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения); // имя след. группировки

        //        ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);

        //    КонецЕсли;    

        //    

        //КонецЕсли;

         Если _КолЗаказать=0   тогда    
          // УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);


           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);

Иначе


    // вывод след. группировки


        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                                
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения)// имя след. группировки


                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли; 
    КонецЕсли;
    КонецЕсли;
        
 КонецЦикла;
   Ёпрст
 
26 - 16.06.20 - 13:21
(25)

Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    
    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        _КолЗаказать = 1;
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        Если _КолЗаказать=0   тогда    
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
        КонецЕсли;
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии И _КолЗаказать<>0 Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() и _КолЗаказать<>0 Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли;    
    КонецЦикла;
    
    
КонецПроцедуры

   Privetanya
 
27 - 16.06.20 - 13:24
(26) в этой строке ошибка - УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);
Я закомментила и выходят только первые основные группы
   Ёпрст
 
28 - 16.06.20 - 13:31
(26) ну поправь там
        Если _КолЗаказать=0   тогда    
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
           ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
        КонецЕсли;
   Privetanya
 
29 - 16.06.20 - 13:32
(28) так выводится только шапка макета...
   Ёпрст
 
30 - 16.06.20 - 13:35
(29) та ну ? Вставь целиком, огласи результат

Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    _КолЗаказать = 1;

    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        Если _КолЗаказать=0   тогда    
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
           ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
        КонецЕсли;
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии И _КолЗаказать<>0 Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() и _КолЗаказать<>0 Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли;    
    КонецЦикла;
    
    
КонецПроцедуры

 
 Рекламное место пустует
   Privetanya
 
31 - 16.06.20 - 13:39
(30) Вставила,вышла только шапочка макета и разделители.  А если вместо _КолЗаказать<>0 поставить _КолЗаказать=0,то выходит все так как в (16)
   Ёпрст
 
32 - 16.06.20 - 13:42
(31) И ?Если у тебя вышестоящая группировка = 0, то зачем выводить нежестоящие ?
   Ёпрст
 
33 - 16.06.20 - 13:42
Ты определись тогда, какие "строки" и на каком уровне нужно удалять
   Privetanya
 
34 - 16.06.20 - 13:43
(33) Это просто был тест,ради интереса  и все..
   Ёпрст
 
35 - 16.06.20 - 13:44
(34) аа.. ну тогда занимайся
   Privetanya
 
36 - 16.06.20 - 13:45
(35) вообще ничего не получается сделать, то что вы скинули почему то не работает..
   Ёпрст
 
37 - 16.06.20 - 13:46
(36) Всё работает
   Privetanya
 
38 - 16.06.20 - 13:46
(37) нет,я же вставила прям то что вы скинули, выводится шапочка
   Ёпрст
 
39 - 16.06.20 - 13:47
Еще раз, если у тебя так
Валенки   0
     Резина -20
     Кожа    20
     КожЗам   0

То мы группировку по "Валенки" не выводим
   Ёпрст
 
40 - 16.06.20 - 13:47
Если тебе нужно отсечь только группировку самого нижнего уровня, то там надо другое условие
   Privetanya
 
41 - 16.06.20 - 13:48
(39) выводим там же есть данные
   Ёпрст
 
42 - 16.06.20 - 13:48
(41) с какого хрена ? У тебя по ней ИТОГ =0
   Ёпрст
 
43 - 16.06.20 - 13:52
Давай так:


Валенки 0 
    Резина -20
        Красная 0
        Белая   100
        Черная  -120
    Кожа 20
        Красная 20
        Белая   0
        Черная  0
    КожЗам 0
        Красная 0
        Белая   -10
        Желтая  10


Чего надо оставить в итоге ?
   Privetanya
 
44 - 16.06.20 - 13:52
(39) Не Вы не правильно поняли... Это не итоговое значение.
Это просто группировка.
                      КолЗаказано
Номенклатура             0 (тут даже не 0 а просто пустота)
    ВарИсполнения        10

 Валенки        -
     Резина    30
     Кожа      20
     КожЗам    0
   Privetanya
 
45 - 16.06.20 - 13:54
(43) Валенки 0 
    Резина -20
        Красная 0 (убрать)
        Белая   100
        Черная  -120
    Кожа 20
        Красная 20
        Белая   0(убрать)
        Черная  0(убрать)
    КожЗам 0
        Красная 0(убрать)
        Белая   -10
        Желтая  10
 А если так то убрать все.
Валенки 0 
    Резина 0
        Красная 0 
        Белая   0
        Черная  0
   Ёпрст
 
46 - 16.06.20 - 14:01
(45)
Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    _КолЗаказать = 1;

    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            ИначеЕсли _КолЗаказать=0   тогда    
                   УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;
    
    
КонецПроцедуры

   Privetanya
 
47 - 16.06.20 - 14:10
(46) Так уже лучше,только не пропали вот такие моменты
 Валенки 0 
Без вариантов исполнения
   Ёпрст
 
48 - 16.06.20 - 14:14
(47) Я хз, что такое "варианты" исполнения.
   Ёпрст
 
49 - 16.06.20 - 14:15
В коде просто удаляется последняя группировка, если в ней колзакз=0
   Ёпрст
 
50 - 16.06.20 - 14:15
добавьте нужное условие туда и всё.. на ваш "вариант"
   Privetanya
 
51 - 16.06.20 - 14:19
(50)  у меня получается надо удалить группировку КолЗаказ=0 у которой нет нижней группировки =0
   Ёпрст
 
52 - 16.06.20 - 14:20
(51) в данный момент так и есть
   Privetanya
 
53 - 16.06.20 - 14:22
(52) сейчас удаляется только нижняя группировка,а верхняя остается
   Ёпрст
 
54 - 16.06.20 - 14:27
(53) еще раз, если ты не подсчитываешь ИТОГИ, то и удалять нечего
   Ёпрст
 
55 - 16.06.20 - 14:27
Если подсчитываешь, то выводить нечего
   Ёпрст
 
56 - 16.06.20 - 14:29
И по уму, нужно не удалять из выведенной таблицы, а не выводить по условию. И своё колзаказать вычислять в запросе
   Ёпрст
 
57 - 16.06.20 - 14:30
и там же, фильтровать
   Privetanya
 
58 - 16.06.20 - 14:36
(54) нужно удалить, если мы удалили у него строки с вариантами исполнения,то и саму номенклатуру надо удалить
И если у него нет Вариантов исполнения и у него пустота(0),то удалить
   Privetanya
 
59 - 16.06.20 - 14:37
(56) (57)  обработка была,готовой,просто надо было вывести печатную форму,а для этого не хочется все переделывать
   Ёпрст
 
60 - 16.06.20 - 14:39
(59) ну так, хотя бы

Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    _КолЗаказать = 1;

    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        НадоУдалить = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
        СтараяВысота = ВхТаблДок.ВысотаТаблицы; 
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                   ВхТаблДок.УдалитьОбласть(НадоУдалить ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;                
        Иначе
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
                Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                       ВхТаблДок.УдалитьОбласть(НадоУдалить ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
            ИначеЕсли _КолЗаказать=0   тогда    
                   УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры

 
 Рекламное место пустует
   Privetanya
 
61 - 16.06.20 - 14:49
(60) тоже самое
   Ёпрст
 
62 - 16.06.20 - 14:54
(61)
Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    _КолЗаказать = 1;

    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        НадоУдалить = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
        СтараяВысота = ВхТаблДок.ВысотаТаблицы; 
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                   ВхТаблДок.УдалитьОбласть(НадоУдалить ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;                
        Иначе
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Если _КолЗаказать=0   тогда    
                       УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                       ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
                Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                       ВхТаблДок.УдалитьОбласть(НадоУдалить ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
            ИначеЕсли _КолЗаказать=0   тогда    
                   УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры

   Privetanya
 
63 - 16.06.20 - 14:58
(62) Спасибо,получилось. Только Выводятся лишние горизонтальные разделители,ну то есть как бы пустые узкие строки
   Ёпрст
 
64 - 16.06.20 - 15:08
скриншот покажи
   Privetanya
 
65 - 16.06.20 - 15:11
   Ёпрст
 
66 - 16.06.20 - 15:23
(65) странно, в этой таблице поставь отображать заголовке в меню.. там есть нумера строк ?
   Ёпрст
 
67 - 16.06.20 - 15:23
и.. у тебя в макете, область состоит из одной строки ?
   Privetanya
 
68 - 16.06.20 - 15:28
(66) нажимаю,ничего не выходит. (67)макет  https://ibb.co/6bYW3Fg
   Ёпрст
 
69 - 16.06.20 - 15:32
Так пробуй
Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    _КолЗаказать = 1;

    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            УдаляемаяОбласть = ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
    //    НадоУдалить = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);

        СтараяВысота = ВхТаблДок.ВысотаТаблицы; 
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;                
        Иначе
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Если _КолЗаказать=0   тогда    
                   //    УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);

                       ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
                Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                       ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
            ИначеЕсли _КолЗаказать=0   тогда    
                   //УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);

                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры

   Ёпрст
 
70 - 16.06.20 - 15:34
У тя Гр0 из 2-х строк, поэтому через ВысотаТаблицы не корректно удаляет, вот верхний кусок и остаётся
   Ёпрст
 
71 - 16.06.20 - 15:34
там надо поправку на высоту выведенной области делать, если как в (69) не заработает
   Privetanya
 
72 - 16.06.20 - 15:37
(71) Как в (69) не работает.
   lEvGl
 
73 - 16.06.20 - 15:41
хренеть можно, даже читать эту писанину лень, не то что ответить, где косяк. универсальность на высоте ежже
   Ёпрст
 
74 - 16.06.20 - 15:42
(72)

Процедура ВывестиГруппировкуПечать(ВхМакет, ВхЗапрВыб, ВхТипГр, ВхНомГр, ВхТаблГр, ВхУровень, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику = Неопределено)
    
    
    _ДнейВМесяце = 30;
    
    _ИмяСекции                  = ?(ВхТипГр = "Строки", "Гр" + ВхУровень, "ГрИтоги");
    _ИмяГр                      = ВхТаблГр[ВхНомГр].ИмяИзмерения;
    _ВыводитьИтогиПоГруппировке = ВхТаблГр[ВхНомГр].ВыводитьИтоги;
    _ТипИзмерения               = ВхТаблГр[ВхНомГр].ТипИзмерения;
    _КолЗаказать = 1;

    Пока ВхЗапрВыб.Следующий() Цикл
        
        // "_ИмяСекции|Начало"

        Если ВхТипГр = "Итоги" Тогда
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            ВхТаблДок.Вывести(Область, ВхУровень);
            
        Иначе    
            
            _ЗначениеГр = ВхЗапрВыб[_ИмяГр];// значение группировки по имени

            
            Если ВхНомГр = (ВхТаблГр.Количество() - 1) И _ИмяГр = "ВариантИсполнения" Тогда// последняя группировка ("ВариантИсполнения")

                Если глПустоеЗначение(_ЗначениеГр) Тогда
                    Продолжить;    
                КонецЕсли;     
            КонецЕсли;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|Начало");
            Если ТипЗнч(_ЗначениеГр) = Тип("СправочникСсылка.Номенклатура") Тогда
                Если _ЗначениеГр.ЭтоГруппа Тогда
                    Область.Параметры.ЗначениеГрСтр = ВРЕГ(глНоменклатураСтр(_ЗначениеГр));
                Иначе
                    
                    
                    Область.Параметры.ЗначениеГрСтр = глНоменклатураСтр(_ЗначениеГр, Ложь) + ", " +  _ЗначениеГр[ИспользуемыеЕдиницыИзмерения];
                    
                    // для номенклатуры (элементов -> итоги будем выводить при условии, что тип измерения выбран как "Иерархия")

                    Если _ТипИзмерения = ТипИзмеренияПостроителяОтчета.Иерархия Тогда
                        _ВыводитьИтогиПоГруппировке = Истина;
                    КонецЕсли;
                    
                КонецЕсли;
            Иначе
                
                
                Область.Параметры.ЗначениеГрСтр = _ЗначениеГр;
                
            КонецЕсли;
            Область.Параметры.Расшифровка   = _ЗначениеГр;
            ВхТаблДок.Вывести(Область, ВхУровень);
        КонецЕсли;    
        
        Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ВертикальныйРазделитель1");
        ВхТаблДок.Присоединить(Область);
        
        // расшифровки работают только для группировок "Номенклатура" и "ВариантИсполнения"

        Если _ИмяГр = "Номенклатура" Тогда
            _Номенклатура   = _ЗначениеГр;
            _ВариантИсполнения = Справочники.ВариантыИсполнения.ПустаяСсылка();
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
            
        ИначеЕсли _ИмяГр = "ВариантИсполнения" Тогда
            _Номенклатура   = _ЗначениеГр.Владелец;
            _ВариантИсполнения = _ЗначениеГр;
            _ОснПоставщик     = ?(ГруппироватьПоОснПоставщику, ВхЗапрВыб.ОснПоставщик, Неопределено);
        КонецЕсли;
        _ЕдИзм = ?(_Номенклатура = Неопределено, Неопределено, _Номенклатура[ИспользуемыеЕдиницыИзмерения]);
        
        Если _ИмяГр = "Номенклатура"
            И НЕ _Номенклатура.ЭтоГруппа
            И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
            
            _ВариантИсполненияНоменклатуры = _Номенклатура.ОсновнойВариантИсполнения;
            
        КонецЕсли;
        
        Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
            ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
            
            //Область.Параметры.СрокПоставки     = ВхЗапрВыб.СрокПоставкиДней;

            
            _ТочкаЗаказа = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + ВхЗапрВыб.КолМинОстаток;
            //Область.Параметры.ТочкаЗаказа     = _ТочкаЗаказа;

            
            _МинЗаказ = ВхЗапрВыб.КолРасходЗаДень * ВхЗапрВыб.СрокПоставкиДней + (_ТочкаЗаказа - ВхЗапрВыб.КолОстаток);
            Если _МинЗаказ < 0 Тогда
                _МинЗаказ = 0;
            КонецЕсли;
            //Область.Параметры.МинЗаказ         = _МинЗаказ;

            
        КонецЕсли;
        
        
        
        Если НЕ ТолькоУтвержденныеЗаказыОбеспечение Тогда
            
            
            
            // "_ИмяСекции|ИтогоЗаказ"

            _КолЗаказать = 0;
            
            Область = ВхМакет.ПолучитьОбласть(_ИмяСекции + "|ИтогоЗаказ");
            Если _ИмяГр = "Номенклатура" И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                ИЛИ _ИмяГр = "ВариантИсполнения" Тогда
                
                
                _КолДефицит = -ВхЗапрВыб.КолПрофицит;
                
                Если    // Заготовки раскроя в производство не заказываем, т.к. не поддерживается ввод заказов на резку

                    (Есть.Раскрой()
                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _Номенклатура.НоменклатурнаяГруппа.ЯвляетсяВыходомРаскроя
                    )
                    
                    //автозапускаемые позиции запускаются обработкой запуск заказа в производство

                    ИЛИ (_ИмяГр = "Номенклатура"//номенклатура с единственным вариантом (автозапускаемым в производство)

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И НЕ ВхЗапрВыб.РазрешитьНесколькоВариантовИсполнения
                    И _ВариантИсполненияНоменклатуры.АвтоЗапускВПроизводство
                    )
                    
                    ИЛИ (_ИмяГр = "ВариантИсполнения"//автозапускаемый в производство вариант исполнения

                    И _Номенклатура.ОснСпособВоспроизводства = Перечисления.СпособыВоспроизводства.Производство
                    И _ВариантИсполнения.АвтоЗапускВПроизводство
                    ) Тогда
                    
                    _КолЗаказать = 0;    
                    
                Иначе
                    
                    Если _МинЗаказ > 0 ИЛИ _КолДефицит > 0 Тогда
                        
                        _КолЗаказать = Макс(_МинЗаказ, _КолДефицит,ВхЗапрВыб.НормаПополнения);
                        
                    КонецЕсли;
                    
                    Если _КолЗаказать > 0 И ВхЗапрВыб.МинПартияЗакупки > 0 Тогда
                        
                        _КолЗаказать = Окр((_КолЗаказать/ВхЗапрВыб.МинПартияЗакупки)+0.5)*ВхЗапрВыб.МинПартияЗакупки;
                        
                    КонецЕсли;
                    
                КонецЕсли;
                
                // точность количества материалов в производстве равна 6 знакам, а заказать можно только с точностью в 3 знака

                Если Окр(_КолЗаказать, 3) < _КолЗаказать Тогда
                    
                    _КолЗаказать = Окр(_КолЗаказать, 3) + 0.001;
                    
                КонецЕсли;
                
                
                Область.Параметры.НормаПополнения     = ВхЗапрВыб.НормаПополнения;
                Область.Параметры.КолЗаказать         = _КолЗаказать;
                
            КонецЕсли;
            ВхТаблДок.Присоединить(Область);
        КонецЕсли;
        УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы-Область.ВысотаТаблицы+1,,ВхТаблДок.ВысотаТаблицы,);
        СтараяВысота = ВхТаблДок.ВысотаТаблицы; 
        // вывод след. группировки

        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
            
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;                
        Иначе
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                
                Если _КолЗаказать=0   тогда    
                       ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
                
                
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения);// имя след. группировки

                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
                Если ВхТаблДок.ВысотаТаблицы = СтараяВысота Тогда
                       ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
                КонецЕсли;                
            ИначеЕсли _КолЗаказать=0   тогда    
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры

   Privetanya
 
75 - 16.06.20 - 15:45
(74) Все,спасибо огромное!!!!)))
   lEvGl
 
76 - 16.06.20 - 15:47
(74) давай, до свиданья ;)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.