Неправильно формируется строка табличный части в внешнюю печатную форму
Здравствуйте, помогите новичку)) уже несколько дней пытаюсь решит проблему неправильного формирования табличной части документа КоммерческоеПредложениеКлиенту, конфигурация объединенная "Объединенное решение: Модуль 1С:CRM 3 (3.1.24.6) +
1С:ERP Управление предприятием 2 (2.5.8.267)"
Сначала пытался создать внешнюю печатную форму с нуля, потом столкнулся с проблемой формирования табличной части если добавить разделитель, в табличной части вывел разделитель, но не смог вывести итог по разделителю
Потом скопировал код с модуль менеджера смог запустить ВПФ порадовался но не долго, даже с кодом модуль менеджера разделитель и итоги по разделителю не выводиться, потом начал искать в ОбщийМодуль, и нашел часть сформирование печатной формы с разделителем и итог по разделителю.
Помогите как можно вывести разделитель и итоги по разделителю, ниже выставлю коды и скриншоты
Код ВПФ скопированный с документа КоммерческоеПредложениеКлиенту
Результат ВНФ на скриншоте ниже
Типовая конфигурация выводить без проблем, и разделителем и с итогами по разделителю, не знаю почему)
Скриншот типовой конфигурации и печатной формы ниже
Ещё немного кода от CRM с общего модуля где формируется табличная часть с разделителем
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"));
ДанныеОбъекта.Вставить("Комментарий", Объект.Комментарий);
Возврат ДанныеОбъекта;
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Зачем бухгалтеру Инфостарт?
- Обработка "Командер 1С"
- Создание в 1С 7.7 XML в формате EnterpriseData (универсальный формат обмена), версия 1.5. Инструкции и примеры переноса данных из устаревшей конфигурации 1С 7.7 в любую современную 1С 8.3, поддерживающую EnterpriseData, через Конвертацию данных 3
- Не спеша, эффективно и правильно – путь разработки. Часть 2. Теория
- Акт приема-передачи товара для УТ 11.4
Свернуть все
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот