Имя: Пароль:
1C
1С v8
Групповая печать капризничает
🠗 (Волшебник 24.08.2022 17:50)
0 04Karik
 
24.08.22
16:45
Здравствуйте. Суть задачи: Разработать печатную форму документа Оказание услуг по образцу...Задача должна решаться силами ОБХОДА ИТОГОВ В ЗАПРОСЕ...
Т.е. макет разбит на Товары и Услуги, всё работает, однако при групповой печати все данные рассовываются по этим таблицам, однако для каждого документа должна создаваться своя печатная форма. Куда бы ни засовывал ВставлятьРазделительСтраниц, ведёт себя двумя способами: либо не отражает этот разделитель, либо ставит его между таблиц.
Подскажите пожалуйста, что не так делаю.

модуль менеджера:

Процедура Печать(ТабДок, Ссылка) Экспорт
    
    Макет = Документы.ОказаниеУслуги.ПолучитьМакет("Печать");
    
    Запрос = Новый Запрос;    
    Запрос.Текст = ("ВЫБРАТЬ
    |    ОказаниеУслуги.Дата КАК Дата,
    |    ОказаниеУслуги.Номер КАК Номер
    |ИЗ
    |    Документ.ОказаниеУслуги КАК ОказаниеУслуги
    |ГДЕ
    |    ОказаниеУслуги.Ссылка В(&Ссылка)
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура КАК Номенклатура,
    |    ОказаниеУслугиПереченьНоменклатуры.Количество КАК Количество,
    |    ОказаниеУслугиПереченьНоменклатуры.Цена КАК Цена,
    |    ОказаниеУслугиПереченьНоменклатуры.Сумма КАК Сумма,
    |    ОказаниеУслугиПереченьНоменклатуры.Номенклатура.ВидНоменклатуры КАК ВидНоменклатуры
    |ИЗ
    |    Документ.ОказаниеУслуги.ПереченьНоменклатуры КАК ОказаниеУслугиПереченьНоменклатуры
    |ГДЕ
    |    ОказаниеУслугиПереченьНоменклатуры.Ссылка В(&Ссылка)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура
    |ИТОГИ ПО
    |    ВидНоменклатуры КАК ВидНоменклатуры");  
    Запрос.Параметры.Вставить("Ссылка", Ссылка);
    
    Пакет = Запрос.ВыполнитьПакет();
    
    ВыборкаГруппировок = Пакет[1].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    Данные = Пакет[0].Выбрать();
    Данные.Следующий();
    
    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    
    ШапкаТовары = Макет.ПолучитьОбласть("ШапкаТовары");
    НоменклатураТовары = Макет.ПолучитьОбласть("НоменклатураТовары");
    ОбластьИтогТовары = Макет.ПолучитьОбласть("ВсегоТовары");
    
    ШапкаУслуги = Макет.ПолучитьОбласть("ШапкаУслуги");
    НоменклатураУслуги = Макет.ПолучитьОбласть("НоменклатураУслуги");
    ОбластьИтогУслуги = Макет.ПолучитьОбласть("ВсегоУслуги");
    
    Шапка.Параметры.Заполнить(Данные);
    
    ТабДок.Очистить();
    
    ТабДок.Вывести(ОбластьЗаголовок);    
    ТабДок.Вывести(Шапка);
    
    ВставлятьРазделительСтраниц = Ложь;
    
    Пока ВыборкаГруппировок.Следующий() Цикл     
        
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;                                          
        //ВставлятьРазделительСтраниц = Истина; разделитель посередине
        СуммаПоТоварам = 0;
        СуммаПоУслугам = 0;
        
        Если ВыборкаГруппировок.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Товар Тогда    
            
            ВыборкаТовары = ВыборкаГруппировок.Выбрать();
            ТабДок.Вывести(ШапкаТовары, ВыборкаТовары.Уровень());
            
            Пока ВыборкаТовары.Следующий() Цикл
                
                НоменклатураТовары.Параметры.Заполнить(ВыборкаТовары);
                ТабДок.Вывести(НоменклатураТовары, ВыборкаТовары.Номенклатура.Уровень());
                СуммаПоТоварам = СуммаПоТоварам + ВыборкаТовары.Сумма;
                //ВставлятьРазделительСтраниц = Истина; разделитель посередине
            КонецЦикла;        
            
            ОбластьИтогТовары.Параметры.ВсегоПоТоварам = СуммаПоТоварам;
            ТабДок.Вывести(ОбластьИтогТовары);
            //ВставлятьРазделительСтраниц = Истина; разделитель между таблицами
        Иначе
            
            ВыборкаУслуги = ВыборкаГруппировок.Выбрать();
            ТабДок.Вывести(ШапкаУслуги, ВыборкаУслуги.Уровень());
            
            Пока ВыборкаУслуги.Следующий() Цикл
                
                НоменклатураУслуги.Параметры.Заполнить(ВыборкаУслуги);
                ТабДок.Вывести(НоменклатураУслуги, ВыборкаУслуги.Номенклатура.Уровень());
                СуммаПоУслугам = СуммаПоУслугам + ВыборкаУслуги.Сумма;
                
            КонецЦикла;
            
            ОбластьИтогУслуги.Параметры.ВсегоПоУслугам = СуммаПоУслугам;
            ТабДок.Вывести(ОбластьИтогУслуги);
        //ВставлятьРазделительСтраниц = Истина; нет разделителя
        КонецЕсли;
        
    //ВставлятьРазделительСтраниц = Истина; разделитель между таблицами
        
    КонецЦикла;
    
//ВставлятьРазделительСтраниц = Истина;    нет разделителя
КонецПроцедуры
1 Волшебник
 
24.08.22
17:02
Вместо "ВставлятьРазделительСтраниц = Истина"
надо
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
2 04Karik
 
24.08.22
17:27
(1) В конце кода, перед КонецПроцедуры? разделитель появился, но проблему групповой печати это не решает.
3 Йохохо
 
24.08.22
17:43
есть еще ВозвратнаяТара, переписывайте с 0, логика где то близко
4 Kassern
 
24.08.22
17:49
(0) Вам самим нравится с такими портянками в процедуре работать? Разбейте код на блоки, тогда, возможно сами догадаетесь, как правильно сделать.
Что вы понимаете под термином "Групповая печать"? Для меня это печать сразу нескольких печатных форм. Где это у вас в коде?
"Задача должна решаться силами ОБХОДА ИТОГОВ В ЗАПРОСЕ" - Я так понимаю, это учебная задача, в этом случае спросите у своего наставника.
5 04Karik
 
24.08.22
17:57
(4) печать нескольких документов по одной форме.
6 04Karik
 
24.08.22
17:58
(3) и безвозвратная, если логика верна
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс