Имя: Пароль:
1C
1С v8
Удалить строку в которой заказать равно 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) поставить условие в текст запроса и "оно само" удалится
2 Privetanya
 
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 Тогда
   ТабДок.Вывести(НужнаяОбласть);
КонецЕсли;
4 Ненавижу 1С
 
гуру
16.06.20
12:10
От идентификаторов переменных рябит в глазах
5 DrZombi
 
гуру
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/ налабает
8 DrZombi
 
гуру
16.06.20
12:15
(0) Попробуй рассчитать "_КолЗаказать ", до вывода его на печатную форму.

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

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

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

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

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

только группировки самого нижнего уровня или, если вышестоящая, то не выводить все нижестоящие
20 Ёпрст
 
16.06.20
12:43
Для начала, вот так:

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

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

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

Иначе


    // вывод след. группировки
        Если ВхЗапрВыб.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                                
            _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр].ИмяИзмерения);
            ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхТаблГр, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            
        Иначе
            
            Если _ИмяГр = "Номенклатура" И НЕ _Номенклатура.РазрешитьНесколькоВариантовИсполнения Тогда
                Продолжить;
            КонецЕсли;
            
            Если ВхНомГр + 1 < ВхТаблГр.Количество() Тогда
                _ЗапрВыб         = ВхЗапрВыб.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией, ВхТаблГр[ВхНомГр + 1].ИмяИзмерения); // имя след. группировки
                ВывестиГруппировкуПечать(ВхМакет, _ЗапрВыб, "Строки", ВхНомГр + 1, ВхТаблГр, ВхУровень + 1, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли;
КонецЕсли;
25 Privetanya
 
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, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли;    
    КонецЦикла;
    
    
КонецПроцедуры
27 Privetanya
 
16.06.20
13:24
(26) в этой строке ошибка - УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,,);
Я закомментила и выходят только первые основные группы
28 Ёпрст
 
16.06.20
13:31
(26) ну поправь там
        Если _КолЗаказать=0   тогда    
           УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
           ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
        КонецЕсли;
29 Privetanya
 
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, ВхТаблДок, ВхТаблПакетныйЗаказПоставщику);
            КонецЕсли;    
            
        КонецЕсли;    
    КонецЦикла;
    
    
КонецПроцедуры
31 Privetanya
 
16.06.20
13:39
(30) Вставила,вышла только шапочка макета и разделители.  А если вместо _КолЗаказать<>0 поставить _КолЗаказать=0,то выходит все так как в (16)
32 Ёпрст
 
16.06.20
13:42
(31) И ?Если у тебя вышестоящая группировка = 0, то зачем выводить нежестоящие ?
33 Ёпрст
 
16.06.20
13:42
Ты определись тогда, какие "строки" и на каком уровне нужно удалять
34 Privetanya
 
16.06.20
13:43
(33) Это просто был тест,ради интереса  и все..
35 Ёпрст
 
16.06.20
13:44
(34) аа.. ну тогда занимайся
36 Privetanya
 
16.06.20
13:45
(35) вообще ничего не получается сделать, то что вы скинули почему то не работает..
37 Ёпрст
 
16.06.20
13:46
(36) Всё работает
38 Privetanya
 
16.06.20
13:46
(37) нет,я же вставила прям то что вы скинули, выводится шапочка
39 Ёпрст
 
16.06.20
13:47
Еще раз, если у тебя так
Валенки   0
     Резина -20
     Кожа    20
     КожЗам   0

То мы группировку по "Валенки" не выводим
40 Ёпрст
 
16.06.20
13:47
Если тебе нужно отсечь только группировку самого нижнего уровня, то там надо другое условие
41 Privetanya
 
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


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

Валенки        -
     Резина    30
     Кожа      20
     КожЗам    0
45 Privetanya
 
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   тогда    
                   УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
    КонецЦикла;
    
    
КонецПроцедуры
47 Privetanya
 
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
добавьте нужное условие туда и всё.. на ваш "вариант"
51 Privetanya
 
16.06.20
14:19
(50)  у меня получается надо удалить группировку КолЗаказ=0 у которой нет нижней группировки =0
52 Ёпрст
 
16.06.20
14:20
(51) в данный момент так и есть
53 Privetanya
 
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
и там же, фильтровать
58 Privetanya
 
16.06.20
14:36
(54) нужно удалить, если мы удалили у него строки с вариантами исполнения,то и саму номенклатуру надо удалить
И если у него нет Вариантов исполнения и у него пустота(0),то удалить
59 Privetanya
 
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   тогда    
                   УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры
61 Privetanya
 
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   тогда    
                   УдаляемаяОбласть = ВхТаблДок.Область(ВхТаблДок.ВысотаТаблицы,,ВхТаблДок.ВысотаТаблицы,);
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры
63 Privetanya
 
16.06.20
14:58
(62) Спасибо,получилось. Только Выводятся лишние горизонтальные разделители,ну то есть как бы пустые узкие строки
64 Ёпрст
 
16.06.20
15:08
скриншот покажи
65 Privetanya
 
16.06.20
15:11
66 Ёпрст
 
16.06.20
15:23
(65) странно, в этой таблице поставь отображать заголовке в меню.. там есть нумера строк ?
67 Ёпрст
 
16.06.20
15:23
и.. у тебя в макете, область состоит из одной строки ?
68 Privetanya
 
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) не заработает
72 Privetanya
 
16.06.20
15:37
(71) Как в (69) не работает.
73 lEvGl
 
гуру
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   тогда    
                   ВхТаблДок.УдалитьОбласть(УдаляемаяОбласть ,  ТипСмещенияТабличногоДокумента.ПоГоризонтали);
            КонецЕсли;    
        КонецЕсли;    
        
    КонецЦикла;
    
    
КонецПроцедуры
75 Privetanya
 
16.06.20
15:45
(74) Все,спасибо огромное!!!!)))
76 lEvGl
 
гуру
16.06.20
15:47
(74) давай, до свиданья ;)