Неправильно формируется строка табличный части в внешнюю печатную форму

1. Gok9 17.11.22 11:50 Сейчас в теме
Здравствуйте, помогите новичку)) уже несколько дней пытаюсь решит проблему неправильного формирования табличной части документа КоммерческоеПредложениеКлиенту, конфигурация объединенная "Объединенное решение: Модуль 1С:CRM 3 (3.1.24.6) +
1С:ERP Управление предприятием 2 (2.5.8.267)"

Сначала пытался создать внешнюю печатную форму с нуля, потом столкнулся с проблемой формирования табличной части если добавить разделитель, в табличной части вывел разделитель, но не смог вывести итог по разделителю

Потом скопировал код с модуль менеджера смог запустить ВПФ порадовался но не долго, даже с кодом модуль менеджера разделитель и итоги по разделителю не выводиться, потом начал искать в ОбщийМодуль, и нашел часть сформирование печатной формы с разделителем и итог по разделителю.

Помогите как можно вывести разделитель и итоги по разделителю, ниже выставлю коды и скриншоты

Код ВПФ скопированный с документа КоммерческоеПредложениеКлиенту

Функция СведенияОВнешнейОбработке() Экспорт
    
ПараметрыРегистрации = Новый Структура;
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.КоммерческоеПредложениеКлиенту");//Указываем документ к которому делаем внешнюю печ. форму
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... 
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
ПараметрыРегистрации.Вставить("Наименование", "Коммерческое предложение клиенту доработка"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
ПараметрыРегистрации.Вставить("Версия", "1.0"); 
ПараметрыРегистрации.Вставить("Информация", "Коммерческое предложение клиенту внешняя доработка"); 
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд, "Коммерческое предложение клиенту доработка", "КоммерческоеПредложениеКлиентуВнешняя", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;    
    
КонецФункции

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление; 
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

КонецПроцедуры



Процедура Печать(Знач МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    ПараметрыПечати = Новый Структура;

    Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "КоммерческоеПредложениеКлиентуВнешняя") Тогда
        
        УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
            "КоммерческоеПредложениеКлиентуВнешняя",
            НСтр("ru = 'Коммерческое предложение клиенту';
                |en = 'Sales quotation for customer'"),
            ПечатнаяФормаКоммерческоеПредложениеКлиенту(МассивОбъектов, ОбъектыПечати, ПараметрыПечати));
        
    КонецЕсли;
    
КонецПроцедуры 

// Данные печати объектов.
// 
// Параметры:
//     МассивОбъектов  - Массив    - объекты печати.
//     ПараметрыПечати - Структура - параметры:
//       * ОтображатьСкидки - Булево - включить скидки.
// Возвращаемое значение:
//     Структура - описание:
//    * РезультатПоШапке   - ВыборкаИзРезультатаЗапроса.
//    * РезультатПоТоварам - ВыборкаИзРезультатаЗапроса.
Функция ДанныеДляПечати(МассивОбъектов, ПараметрыПечати)
    
    СтруктураДанныхДляПечати = Неопределено;
    СтандартнаяОбработка = Истина;
    КоммерческиеПредложенияДокументыПереопределяемый.КоммерческоеПредложениеКлиентуПриФормированииСтруктурыДанных­<wbr>Печати(
        МассивОбъектов,
        СтруктураДанныхДляПечати,
        ПараметрыПечати,
        СтандартнаяОбработка);
        
    Если Не СтандартнаяОбработка Тогда
        Возврат СтруктураДанныхДляПечати;
    КонецЕсли;
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
    
    ОтображатьСкидки = Истина;
    Если ПараметрыПечати.Свойство("ОтображатьСкидки")
        И Не ПараметрыПечати.ОтображатьСкидки Тогда
        ОтображатьСкидки = Ложь;
    КонецЕсли;
    
    Запрос.УстановитьПараметр("ОтображатьСкидки", ОтображатьСкидки);
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |    КоммерческоеПредложениеКлиенту.Ссылка                              КАК Ссылка,
    |    КоммерческоеПредложениеКлиенту.Дата                                КАК Дата,
    |    КоммерческоеПредложениеКлиенту.Номер                               КАК Номер,
    |    КоммерческоеПредложениеКлиенту.Менеджер                            КАК Менеджер,
    |    КоммерческоеПредложениеКлиенту.КонтактноеЛицо                      КАК КонтактноеЛицо,
    |    КоммерческоеПредложениеКлиенту.Организация                         КАК Организация,
    |    КоммерческоеПредложениеКлиенту.СрокДействия                        КАК СрокДействия,
    |    КоммерческоеПредложениеКлиенту.Валюта                              КАК Валюта,
    |    КоммерческоеПредложениеКлиенту.ЦенаВключаетНДС                     КАК ЦенаВключаетНДС,
    |    КоммерческоеПредложениеКлиенту.Налогообложение                     КАК УчитыватьНДС,
    |    КоммерческоеПредложениеКлиенту.УсловияДоставкиТекст                КАК УсловияДоставки,
    |    КоммерческоеПредложениеКлиенту.УсловияОплатыТекст                  КАК УсловияОплаты,
    |    КоммерческоеПредложениеКлиенту.ПрочаяДополнительнаяИнформацияТекст КАК ПрочиеУсловия,
    |    КоммерческоеПредложениеКлиенту.Клиент                              КАК Клиент,
    |    КоммерческоеПредложениеКлиенту.Контрагент                          КАК Контрагент,
    |    КоммерческоеПредложениеКлиенту.ВариантУказанияСрокаПоставки        КАК ВариантУказанияСрокаПоставки,
    |    КоммерческоеПредложениеКлиенту.МожетВыкупатьсяЧастично             КАК МожетВыкупатьсяЧастично
    |ИЗ
    |    Документ.КоммерческоеПредложениеКлиенту КАК КоммерческоеПредложениеКлиенту
    |ГДЕ
    |    КоммерческоеПредложениеКлиенту.Ссылка В(&МассивОбъектов)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    |    Товары.Ссылка                                                   КАК Ссылка,
    |    Товары.НомерСтроки                                              КАК НомерСтроки,
    |    Товары.Номенклатура                                             КАК Номенклатура,
    |    Товары.Характеристика                                           КАК Характеристика,
    |    Товары.СуммаРучнойСкидки + Товары.СуммаАвтоматическойСкидки     КАК СуммаСкидки,
    |    Товары.ПроцентРучнойСкидки + Товары.ПроцентАвтоматическойСкидки КАК ПроцентСкидки,
    |    &УсловияЕдиницыИзмерения                                        КАК ЕдиницаИзмерения,
    |    Товары.Количество                                               КАК Количество,
    |ВЫБОР
    |    КОГДА &ОтображатьСкидки
    |        ТОГДА Товары.Цена
    |    ИНАЧЕ ВЫБОР
    |            КОГДА Товары.Количество = 0
    |                ТОГДА 0
    |            ИНАЧЕ Товары.Сумма / Товары.Количество
    |        КОНЕЦ
    |КОНЕЦ                                                              КАК Цена,
    |    Товары.СуммаСНДС                                                КАК СуммаСНДС,
    |    Товары.Сумма                                                    КАК Сумма,
    |    Товары.СуммаНДС                                                 КАК СуммаНДС,
    |    Товары.СрокПоставки                                             КАК СрокПоставки
    |ИЗ
    |    Документ.КоммерческоеПредложениеКлиенту.Товары КАК Товары
    |ГДЕ
    |    Товары.Ссылка В(&МассивОбъектов)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Ссылка,
    |    НомерСтроки";
    
    УсловияЕдиницыИзмерения = "Товары.ЕдиницаИзмерения";
    КоммерческиеПредложенияДокументыПереопределяемый.ПолучитьТекстЗапросаПолученияЕдиницыИзмерения(УсловияЕдиницыИзмерения);
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловияЕдиницыИзмерения", УсловияЕдиницыИзмерения);
    
    ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет(); // Массив из ВыборкаИзРезультатаЗапроса
    
    СтруктураДанныхДляПечати = Новый Структура;
    СтруктураДанныхДляПечати.Вставить("РезультатПоШапке",   ПакетРезультатовЗапроса[0]);
    СтруктураДанныхДляПечати.Вставить("РезультатПоТоварам", ПакетРезультатовЗапроса[1]);
    
    Возврат СтруктураДанныхДляПечати;
    
КонецФункции

// Подготовка данных объекта по данным для печати.
// 
// Параметры:
//     ДанныеШапки - ВыборкаИзРезультатаЗапроса.
//     ТаблицаТовары - ТаблицаЗначений - товары:
//    * НомерСтроки - Число.
Функция ДанныеОбъектаПоДаннымДляПечати(ДанныеШапки, ТаблицаТовары)

    ДанныеОбъекта = Новый Структура;
    
#Область ДанныеОрганизации
    
    СведенияОрганизации = Новый Структура;
    СведенияОрганизации.Вставить("Наименование");
    СведенияОрганизации.Вставить("ПолноеНаименование");
    СведенияОрганизации.Вставить("Телефоны");
    СведенияОрганизации.Вставить("ЮридическийАдрес");
    СведенияОрганизации.Вставить("ЭлектроннаяПочта");
    
    КоммерческиеПредложенияДокументыПереопределяемый.ЗаполнитьДанныеОрганизации(ДанныеШапки.Организация, СведенияОрганизации);
    
    Если ЗначениеЗаполнено(СведенияОрганизации.ПолноеНаименование) Тогда
        ПредставлениеОрганизации = СведенияОрганизации.ПолноеНаименование;
    Иначе
        ПредставлениеОрганизации = СведенияОрганизации.Наименование;
    КонецЕсли;
    
#КонецОбласти
    
#Область КонтактнаяИнформация
    
    Если ЗначениеЗаполнено(ДанныеШапки.Менеджер) Тогда
        
        МассивСМенеджером = Новый Массив;
        МассивСМенеджером.Добавить(ДанныеШапки.Менеджер);
        
        ТребуемыеТипыКонтактнойИнформации = Новый Массив;
        ТребуемыеТипыКонтактнойИнформации.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
        
        ТаблицаКонтактнойИнформации = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(
                                           МассивСМенеджером,
                                           ТребуемыеТипыКонтактнойИнформации,,
                                           ДанныеШапки.Дата);
        
        АдресЭлектроннойПочтыМенеджера = КоммерческиеПредложенияДокументы.ПредставлениеКонтактнойИнформацииИзТаблицы(
                                           ТаблицаКонтактнойИнформации,
                                           Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
        
    Иначе
        ТелефонМенеджера = "";
        АдресЭлектроннойПочтыМенеджера   = "";
    КонецЕсли;
    
#КонецОбласти

#Область Товары

    ЕстьСкидки = Ложь;
    ДанныеОбъекта.Вставить("СуммаВсего", 0);
    ДанныеОбъекта.Вставить("СуммаВсегоНДС", 0);
    ДанныеОбъекта.Вставить("КоличествоТоваров", 0);
    ДанныеОбъекта.Вставить("Товары", Новый Массив);
    
    Для Каждого СтрокаТовары Из ТаблицаТовары Цикл
        
        Если СтрокаТовары.СуммаСкидки <> 0 Тогда
            ЕстьСкидки = Истина;
        КонецЕсли;
        
        ДанныеОбъекта.СуммаВсего        = ДанныеОбъекта.СуммаВсего + СтрокаТовары.Сумма;
        ДанныеОбъекта.СуммаВсегоНДС     = ДанныеОбъекта.СуммаВсегоНДС + СтрокаТовары.СуммаНДС;
        ДанныеОбъекта.КоличествоТоваров = ДанныеОбъекта.КоличествоТоваров + 1;
        
        СтрокаТаблицыТовары = Новый Структура;
        
        НаименованиеТовара = КоммерческиеПредложенияДокументыКлиентСервер.ПредставлениеНоменклатурыДляПечати(СтрокаТовары.Номенклатура, СтрокаТовары.Характеристика);
        
        СтрокаТаблицыТовары.Вставить("НомерСтроки",      СтрокаТовары.НомерСтроки);
        СтрокаТаблицыТовары.Вставить("Номенклатура",     НаименованиеТовара);
        СтрокаТаблицыТовары.Вставить("Количество",       СтрокаТовары.Количество);
        СтрокаТаблицыТовары.Вставить("ЕдиницаИзмерения", СтрокаТовары.ЕдиницаИзмерения);
        СтрокаТаблицыТовары.Вставить("Цена",             Формат(СтрокаТовары.Цена,"ЧДЦ=2; ЧРД=."));
        СтрокаТаблицыТовары.Вставить("СуммаСНДС",        Формат(СтрокаТовары.СуммаСНДС,"ЧДЦ=2; ЧРД=."));
        СтрокаТаблицыТовары.Вставить("СуммаСкидки",      Формат(СтрокаТовары.СуммаСкидки,"ЧДЦ=2; ЧРД=."));
        СтрокаТаблицыТовары.Вставить("СрокПоставки",     КоммерческиеПредложенияДокументыКлиентСервер.СрокПоставкиСтрокой(ДанныеШапки.ВариантУказанияСрокаПоставки, 
                                                                                                                          СтрокаТовары.СрокПоставки));
        
        КоммерческиеПредложенияДокументыПереопределяемый.ДополнитьДанныеОбъектаДляПечати(СтрокаТаблицыТовары, СтрокаТовары, ДанныеОбъекта);
        
        ДанныеОбъекта.Товары.Добавить(СтрокаТаблицыТовары);
        
    КонецЦикла;

#КонецОбласти

#Область ЗаполнениеДанныхОбъекта 

    ПредставлениеСуммДокумента = КоммерческиеПредложенияДокументы.ПредставлениеСуммДокументаДляПечати(ДанныеШапки,
                                                                                                      ДанныеОбъекта.СуммаВсего,
                                                                                                      ДанныеОбъекта.СуммаВсегоНДС,
                                                                                                      ДанныеОбъекта.КоличествоТоваров);
    
    ДанныеОбъекта.Вставить("Ссылка",                              ДанныеШапки.Ссылка);
    ДанныеОбъекта.Вставить("Организация",                         ДанныеШапки.Организация);
    ДанныеОбъекта.Вставить("ТелефонОрганизации",                  СведенияОрганизации.Телефоны);
    ДанныеОбъекта.Вставить("АдресОрганизации",                    СведенияОрганизации.ЮридическийАдрес);
    ДанныеОбъекта.Вставить("АдресЭлектроннойПочтыОрганизации",    ?(СведенияОрганизации.Свойство("ЭлектроннаяПочта"),СведенияОрганизации.ЭлектроннаяПочта, ""));
    ДанныеОбъекта.Вставить("Клиент",                              ДанныеШапки.Клиент);
    ДанныеОбъекта.Вставить("Контрагент",                          ДанныеШапки.Контрагент);
    ДанныеОбъекта.Вставить("ПредставлениеОрганизации",            ПредставлениеОрганизации);
    ДанныеОбъекта.Вставить("ПредставлениеКлиента",                ПредставлениеКлиента(ДанныеОбъекта.Клиент, ДанныеОбъекта.Контрагент));
    ДанныеОбъекта.Вставить("КонтактноеЛицо",                      ДанныеШапки.КонтактноеЛицо);
    ДанныеОбъекта.Вставить("Менеджер",                            ДанныеШапки.Менеджер);
    ДанныеОбъекта.Вставить("АдресЭлектроннойПочтыМенеджера",      АдресЭлектроннойПочтыМенеджера);
    ДанныеОбъекта.Вставить("ТелефонМенеджера",                    ТелефонМенеджера);
    ДанныеОбъекта.Вставить("Номер",                               ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеШапки.Номер, Ложь, Истина));
    ДанныеОбъекта.Вставить("Дата",                                Формат(ДанныеШапки.Дата,"ДЛФ=D"));
    ДанныеОбъекта.Вставить("ВариантУказанияСрокаПоставки",        ДанныеШапки.ВариантУказанияСрокаПоставки);
    ДанныеОбъекта.Вставить("УсловияОплаты",                       ДанныеШапки.УсловияОплаты);
    ДанныеОбъекта.Вставить("УсловияДоставки",                     ДанныеШапки.УсловияДоставки);
    ДанныеОбъекта.Вставить("ПрочиеУсловия",                       ДанныеШапки.ПрочиеУсловия);
    ДанныеОбъекта.Вставить("КонтактнаяИнформацияПредложения",     КонтактнаяИнформацияПредложения(ДанныеОбъекта));
    ДанныеОбъекта.Вставить("ИтоговаяСтрока",                      ПредставлениеСуммДокумента.ИтоговаяСтрока);
    ДанныеОбъекта.Вставить("СуммаПрописью",                       ПредставлениеСуммДокумента.СуммаПрописью);
    ДанныеОбъекта.Вставить("ЕстьСкидки",                          ЕстьСкидки);
    ДанныеОбъекта.Вставить("ПредставлениеСрокаДействия",          КоммерческиеПредложенияДокументы.ПредставлениеСрокаДействияДляПечати(ЕстьСкидки, ДанныеШапки.СрокДействия));
    ДанныеОбъекта.Вставить("ПредставлениеЧастичногоВыкупа",       КоммерческиеПредложенияДокументы.ПредставлениеЧастичногоВыкупаДляПечати(ДанныеШапки.МожетВыкупатьсяЧастично));
    ДанныеОбъекта.Вставить("УсловияПоставкиПредставление",        КоммерческиеПредложенияДокументы.ПредставлениеУсловийПоставкиДляПечати(ДанныеОбъекта.УсловияОплаты, 
                                                                                                                                         ДанныеОбъекта.УсловияДоставки, 
                                                                                                                                         ДанныеОбъекта.ПрочиеУсловия));
    
#КонецОбласти
    
    Возврат ДанныеОбъекта;
    
КонецФункции

Функция ПредставлениеКлиента(Клиент, Контрагент)
    
    Возврат КоммерческиеПредложенияДокументы.ПредставлениеПартнераКонтрагента(Клиент, Контрагент);
    
КонецФункции


Функция КонтактнаяИнформацияПредложения(ДанныеОбъекта)
    
    МассивСтрок = Новый Массив;
    
    Если Не ПустаяСтрока(ДанныеОбъекта.АдресОрганизации) Тогда
        МассивСтрок.Добавить(ДанныеОбъекта.АдресОрганизации);
    КонецЕсли;
    
    Если Не ПустаяСтрока(ДанныеОбъекта.ТелефонОрганизации) Тогда
        МассивСтрок.Добавить(ДанныеОбъекта.ТелефонОрганизации);
    КонецЕсли;
    
    Если Не ПустаяСтрока(ДанныеОбъекта.АдресЭлектроннойПочтыМенеджера) Тогда
        МассивСтрок.Добавить(ДанныеОбъекта.АдресЭлектроннойПочтыМенеджера);
    ИначеЕсли Не ПустаяСтрока(ДанныеОбъекта.АдресЭлектроннойПочтыОрганизации) Тогда
        МассивСтрок.Добавить(ДанныеОбъекта.АдресЭлектроннойПочтыОрганизации);
    КонецЕсли;
    
    Возврат СтрСоединить(МассивСтрок, Символы.ПС);
    
КонецФункции




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


// Заполнить табличный документ коммерческое предложение клиенту.
// 
// Параметры:
//  ТабличныйДокумент - ТабличныйДокумент - 
//  ДанныеОбъекта     - Структура -
//  ПараметрыПечати   - Структура - 
//
Процедура ЗаполнитьТабличныйДокументКоммерческоеПредложениеКлиенту(ТабличныйДокумент, ДанныеОбъекта, ПараметрыПечати)
    
    Макет = ПолучитьМакет("ПФ_MXL_КоммерческоеПредложениеКлиенту");
    
    Если ПараметрыПечати.Свойство("ОтображатьСкидки")
        И Не ПараметрыПечати.ОтображатьСкидки Тогда
        
        Если ДанныеОбъекта.ВариантУказанияСрокаПоставки = Перечисления.ВариантыСроковПоставкиКоммерческихПредложений.НеУказывается Тогда
            ИмяОбластиШапкаТаблицы             = "ШапкаТаблицыТовары";
            ИмяОбластиСтрокаТаблицы            = "СтрокаТаблицыТовары";
            ИмяИменованнойОбластиСтрокаТаблицы = "ОбластьТовары";
        Иначе
            ИмяОбластиШапкаТаблицы             = "ШапкаТаблицыТоварыСрокПоставки";
            ИмяОбластиСтрокаТаблицы            = "СтрокаТаблицыТоварыСрокПоставки";
            ИмяИменованнойОбластиСтрокаТаблицы = "ОбластьТоварыСрокПоставки";
        КонецЕсли;
        
    Иначе
        
        Если ДанныеОбъекта.ВариантУказанияСрокаПоставки = Перечисления.ВариантыСроковПоставкиКоммерческихПредложений.НеУказывается Тогда
            ИмяОбластиШапкаТаблицы             = "ШапкаТаблицыТоварыСкидка";
            ИмяОбластиСтрокаТаблицы            = "СтрокаТаблицыТоварыСкидка";
            ИмяИменованнойОбластиСтрокаТаблицы = "ОбластьТоварыСкидка";
        Иначе
            ИмяОбластиШапкаТаблицы             = "ШапкаТаблицыТоварыСрокПоставкиСкидка";
            ИмяОбластиСтрокаТаблицы            = "СтрокаТаблицыТоварыСрокПоставкиСкидка";
            ИмяИменованнойОбластиСтрокаТаблицы = "ОбластьТоварыСрокПоставкиСкидка";
        КонецЕсли;
        
    КонецЕсли;
    
    ОбластьШтрихкода                = Макет.ПолучитьОбласть("ОбластьШтрихкода");
    ОбластьЗаголовок                = Макет.ПолучитьОбласть("Заголовок");
    ОбластьКонтактноеЛицо           = Макет.ПолучитьОбласть("КонтактноеЛицо");
    ОбластьПредлагаемОзнакомиться   = Макет.ПолучитьОбласть("ПредлагаемОзнакомиться");
    ОбластьШапкаТаблицыТовары       = Макет.ПолучитьОбласть(ИмяОбластиШапкаТаблицы);
    ОбластьСтрокаТаблицыТовары      = Макет.ПолучитьОбласть(ИмяОбластиСтрокаТаблицы);
    ИменованнаяОбластьСтрокаТовары  = ИмяИменованнойОбластиСтрокаТаблицы;
    ОбластьПодвалТаблицыТовары      = Макет.ПолучитьОбласть("ПодвалТаблицыТовары");
    ОбластьМенеджер                 = Макет.ПолучитьОбласть("Менеджер");
    ОбластьПустаяСтрокаТонкая       = Макет.ПолучитьОбласть("ПустаяСтрокаТонкая");
    ОбластьДополнительнаяИнформация = Макет.ПолучитьОбласть("ДополнительнаяИнформация");
    ОбластьСрокДействия             = Макет.ПолучитьОбласть("СрокДействияЧастичныйВыкуп");
    
    КоммерческиеПредложенияДокументыПереопределяемый.ПриВыводеШтриховогоКодаВПечатныеФормы(ТабличныйДокумент, Макет, ОбластьШтрихкода, ДанныеОбъекта);
    
    КоммерческиеПредложенияДокументыПереопределяемый.ПриФормированииЗаголовкаПечатнойФормы(Макет, ОбластьЗаголовок, ДанныеОбъекта);
    
    ДополнительныеПараметрыВывода = Неопределено;
    
    ОбластьЗаголовок.Параметры.Заполнить(ДанныеОбъекта);
    ТабличныйДокумент.Вывести(ОбластьЗаголовок);
    
    Если ЗначениеЗаполнено(ДанныеОбъекта.КонтактноеЛицо) Тогда
        ОбластьКонтактноеЛицо.Параметры.Заполнить(ДанныеОбъекта);
        ТабличныйДокумент.Вывести(ОбластьКонтактноеЛицо);
    КонецЕсли;
    
    ОбластьПредлагаемОзнакомиться.Параметры.Заполнить(ДанныеОбъекта);
    ТабличныйДокумент.Вывести(ОбластьПредлагаемОзнакомиться);
    
    ТабличныйДокумент.Вывести(ОбластьШапкаТаблицыТовары);
    
    Для Каждого СтрокаТовары Из ДанныеОбъекта.Товары Цикл
        
        СтандартнаяОбработка = Истина;
        КоммерческиеПредложенияДокументыПереопределяемый.ПриВыводеСтрокиТоварыПечатнуюФорму(ТабличныйДокумент,
                                                                                            СтрокаТовары,
                                                                                            ОбластьСтрокаТаблицыТовары,
                                                                                            ИменованнаяОбластьСтрокаТовары,
                                                                                            ДополнительныеПараметрыВывода,
                                                                                            СтандартнаяОбработка);
        
        Если СтандартнаяОбработка Тогда
            ОбластьСтрокаТаблицыТовары.Параметры.Заполнить(СтрокаТовары);
            ТабличныйДокумент.Вывести(ОбластьСтрокаТаблицыТовары);
        КонецЕсли;
        
    КонецЦикла;
    
    ОбластьПодвалТаблицыТовары.Параметры.Заполнить(ДанныеОбъекта);
    ТабличныйДокумент.Вывести(ОбластьПодвалТаблицыТовары);
    
    ТабличныйДокумент.Вывести(ОбластьПустаяСтрокаТонкая);
    
    ОбластьСрокДействия.Параметры.Заполнить(ДанныеОбъекта);
    ТабличныйДокумент.Вывести(ОбластьСрокДействия);
    
    Если Не ПустаяСтрока(ДанныеОбъекта.УсловияПоставкиПредставление) Тогда
        
        ТабличныйДокумент.Вывести(ОбластьПустаяСтрокаТонкая);
        ОбластьДополнительнаяИнформация.Параметры.Заполнить(ДанныеОбъекта);
        ТабличныйДокумент.Вывести(ОбластьДополнительнаяИнформация);
        
    КонецЕсли;
    
    ОбластьМенеджер.Параметры.Заполнить(ДанныеОбъекта);
    ТабличныйДокумент.Вывести(ОбластьМенеджер);
    
КонецПроцедуры
Показать


Результат ВНФ на скриншоте ниже

Типовая конфигурация выводить без проблем, и разделителем и с итогами по разделителю, не знаю почему)

Скриншот типовой конфигурации и печатной формы ниже

Ещё немного кода от CRM с общего модуля где формируется табличная часть с разделителем

//ДанныеОбъекта.Вставить("Товары", Новый Массив);
		
	СписокВариантов = КППолучитьВарианты(СсылкаНаОбъект);
	
	Для Каждого ЭлементСписка Из СписокВариантов Цикл
		Если (Не НомерВарианта = 0) И НЕ ЭлементСписка.Значение = НомерВарианта Тогда
			Продолжить;
		КонецЕсли;
		
		ИтогоБезСкидки = 0;
		
		ИтоговаяСумма	 = 0;
		ИтоговаяСуммаНДС = 0;
		
		НомерСтрокиПоПорядку = 0;
		
		ЕстьРазделители = Ложь;
		
		ТекущийРазделитель = Неопределено;
		
		ИтогПоРазделу = 0;	
		
		СтруктураВарианта = Новый Структура;
		СтруктураВарианта.Вставить("идВарианта",ЭлементСписка.Значение);
		СтруктураВарианта.Вставить("Утвержден",ЭлементСписка.Пометка);
		СтруктураВарианта.Вставить("СтрокаВарианта","Вариант "+Строка(ЭлементСписка.Значение)+?(ЭлементСписка.Пометка," (Утвержден)",""));
		СтруктураВарианта.Вставить("Товары", Новый Массив);
		
		Для Каждого СтрокаТабличнойЧасти Из Объект.Товары Цикл
			
			Если СтрокаТабличнойЧасти.CRM_ИДВарианта = ЭлементСписка.Значение Тогда
				
				СтрокаТаблицыТовары = Новый Структура;
				
				Если СтрокаТабличнойЧасти.CRM_ЭтоРазделитель Тогда
					
					Если Не ТекущийРазделитель = Неопределено И ТекущийРазделитель.Итог Тогда
						
						// Если предусмотрен вывод итогов, добавим строку с итогами в массив.
						СтрокаТаблицыТовары.Вставить("НомерСтроки",		" ");
						СтрокаТаблицыТовары.Вставить("Номенклатура",	"Итого по " + ТекущийРазделитель + ":");
						СтрокаТаблицыТовары.Вставить("Количество",		" ");
						СтрокаТаблицыТовары.Вставить("Цена",			" ");
						СтрокаТаблицыТовары.Вставить("Единица",			" ");
						СтрокаТаблицыТовары.Вставить("Скидка",			" ");
						СтрокаТаблицыТовары.Вставить("Сумма",			Формат(ИтогПоРазделу, "ЧЦ=15; ЧДЦ=2"));
						СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "ИтогПоРазделу");
						
						СтруктураВарианта.Товары.Добавить(СтрокаТаблицыТовары);
								
						СтрокаТаблицыТовары = Новый Структура;
							
					КонецЕсли;	
					
					СтрокаТаблицыТовары.Вставить("НомерСтроки",		" ");
					СтрокаТаблицыТовары.Вставить("Номенклатура",	СтрокаТабличнойЧасти.Номенклатура);
					СтрокаТаблицыТовары.Вставить("Количество",		" ");
					СтрокаТаблицыТовары.Вставить("Цена",			" ");
					СтрокаТаблицыТовары.Вставить("Единица",			" ");
					СтрокаТаблицыТовары.Вставить("Скидка",			" ");
					СтрокаТаблицыТовары.Вставить("Сумма",			" ");
					СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "Разделитель");
					
					ЕстьРазделители = Истина;
							
					ТекущийРазделитель = СтрокаТабличнойЧасти.Номенклатура;
						
					ИтогПоРазделу = 0;
						
				Иначе
					
					НомерСтрокиПоПорядку = НомерСтрокиПоПорядку + 1;
					
					СтрокаТаблицыТовары.Вставить("НомерСтроки",		НомерСтрокиПоПорядку);
					СтрокаТаблицыТовары.Вставить("Номенклатура",	?(ЗначениеЗаполнено(СтрокаТабличнойЧасти.Содержание), СтрокаТабличнойЧасти.Содержание, СтрокаТабличнойЧасти.Номенклатура));
					СтрокаТаблицыТовары.Вставить("Количество",		Формат(СтрокаТабличнойЧасти.Количество,"ЧЦ=15; ЧДЦ=3"));
					СтрокаТаблицыТовары.Вставить("Цена",			Формат(СтрокаТабличнойЧасти.Цена,"ЧЦ=15; ЧДЦ=2"));
					СтрокаТаблицыТовары.Вставить("Единица",			СтрокаТабличнойЧасти.ЕдиницаИзмерения);				
					
					СуммаБезСкидки	= СтрокаТабличнойЧасти.Цена*СтрокаТабличнойЧасти.Количество;
					СкидкаНаценка	= ?(СуммаБезСкидки >= СтрокаТабличнойЧасти.Сумма, СуммаБезСкидки - СтрокаТабличнойЧасти.Сумма,СтрокаТабличнойЧасти.Сумма - СуммаБезСкидки);
					
					ИтогоБезСкидки = ИтогоБезСкидки + СуммаБезСкидки;
					
					СтрокаТаблицыТовары.Вставить("Скидка",			Формат(СкидкаНаценка,"ЧЦ=15; ЧДЦ=2"));
					СтрокаТаблицыТовары.Вставить("Сумма",			Формат(СтрокаТабличнойЧасти.Сумма,"ЧЦ=15; ЧДЦ=2"));
					
					ИтоговаяСумма    = ИтоговаяСумма    + СтрокаТабличнойЧасти.Сумма;
					ИтоговаяСуммаНДС = ИтоговаяСуммаНДС + СтрокаТабличнойЧасти.СуммаНДС;
					
					ИтогПоРазделу = ИтогПоРазделу + СтрокаТабличнойЧасти.Сумма;
					
					СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "Номенклатура");				
				КонецЕсли;
				
				СтруктураВарианта.Товары.Добавить(СтрокаТаблицыТовары);
				
			КонецЕсли;
			
		КонецЦикла;

		// Итоги по последнему разделителю не выведены в цикле
		// если предусмотрен вывод итогов, добавим строку с итогами в массив.
		Если Не ТекущийРазделитель = Неопределено И ТекущийРазделитель.Итог Тогда
			
			СтрокаТаблицыТовары = Новый Структура;		
			
			СтрокаТаблицыТовары.Вставить("НомерСтроки",		" ");
			СтрокаТаблицыТовары.Вставить("Номенклатура",	"Итого по " + ТекущийРазделитель + ":");
			СтрокаТаблицыТовары.Вставить("Количество",		" ");
			СтрокаТаблицыТовары.Вставить("Цена",			" ");
			СтрокаТаблицыТовары.Вставить("Единица",			" ");
			СтрокаТаблицыТовары.Вставить("Скидка",			" ");
			СтрокаТаблицыТовары.Вставить("Сумма",			Формат(ИтогПоРазделу, "ЧЦ=15; ЧДЦ=2"));
			СтрокаТаблицыТовары.Вставить("ТипСтроки",	    "ИтогПоРазделу");
			
			СтруктураВарианта.Товары.Добавить(СтрокаТаблицыТовары);		
				
		КонецЕсли;	

		СтруктураВарианта.Вставить("ЕстьРазделители", ЕстьРазделители);
		
		// выводим итоги
		
		СтруктураВарианта.Вставить("Всего",	Формат(ИтоговаяСумма,"ЧЦ=15; ЧДЦ=2"));
		
		Если ИтоговаяСуммаНДС = 0 Тогда
			СтруктураВарианта.Вставить("СтрокаНДС", НСтр("ru='без налога (НДС)';en='Without tax (VAT)'"));
			СтруктураВарианта.Вставить("ВсегоНДС", "");
		Иначе
			СтруктураВарианта.Вставить("СтрокаНДС", ?(Объект.ЦенаВключаетНДС, НСтр("ru='в том числе НДС:';en='Including VAT:'"), НСтр("ru='Сумма НДС:'")));
			СтруктураВарианта.Вставить("ВсегоНДС",  Формат(ИтоговаяСуммаНДС, "ЧЦ=15; ЧДЦ=2"));
		КонецЕсли; 
		
		СтруктураВарианта.Вставить("ВсегоКОплате",	Формат(ИтоговаяСумма + ?(Объект.ЦенаВключаетНДС, 0, ИтоговаяСуммаНДС),"ЧЦ=15; ЧДЦ=2"));
		
		СтруктураВарианта.Вставить("ТелефонОтвественного",	СтруктураДанных.Телефон);
		СтруктураВарианта.Вставить("EmailОтвественного",	СтруктураДанных.EmailПользователя);

		СтруктураВарианта.Вставить("СтоимостьПропись",	НРег(РаботаСКурсамиВалют.СформироватьСуммуПрописью(ИтоговаяСумма + ?(Объект.ЦенаВключаетНДС, 0, ИтоговаяСуммаНДС), Объект.Валюта)));
		ДанныеОбъекта.Варианты.Добавить(СтруктураВарианта);
	КонецЦикла;
	
	ДанныеОбъекта.Вставить("Валюта",		Объект.Валюта);
	ДанныеОбъекта.Вставить("Валюта_1",		Объект.Валюта);
	ДанныеОбъекта.Вставить("Курс",			Формат(Объект.Курс,"ЧЦ=10; ЧДЦ=4"));
	ДанныеОбъекта.Вставить("Кратность",		Формат(Объект.Кратность,"ЧЦ=10"));
	ДанныеОбъекта.Вставить("Комментарий",	Объект.Комментарий);
	
	Возврат ДанныеОбъекта;

Показать
Прикрепленные файлы:
По теме из базы знаний
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот