22 — 15.03.19 — 14:27
вот от куда они берутся:
Функция ПолучитьДанныеДляПечатнойФормыЗаказаНаТоварыУслуги(МассивОбъектов, ПараметрыПечати) Экспорт
Если ПараметрыПечати <> Неопределено И ПараметрыПечати.Свойство(«ОтображатьСкидки») Тогда
ОтображатьСкидки = ПараметрыПечати.ОтображатьСкидки;
Иначе
ОтображатьСкидки = (Константы.ОтображениеСкидокВПечатныхФормахДокументовПродажи.Получить()
<> Перечисления.ВариантыВыводаСкидокВПечатныхФормах.НеВыводитьСкидки);
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ
| Документы.Ссылка КАК Ссылка,
| Документы.Номер КАК Номер,
| Документы.Дата КАК Дата,
| Документы.АдресДоставки КАК АдресДоставки,
| Документы.Организация КАК Организация,
| Документы.Организация КАК Исполнитель,
| ВЫБОР КОГДА Документы.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС)
| ИЛИ Документы.НалогообложениеНДС = ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД) ТОГДА
| ЛОЖЬ
| ИНАЧЕ
| ИСТИНА
| КОНЕЦ КАК УчитыватьНДС,
| ИСТИНА КАК ПоказыватьНДС,
| ИСТИНА КАК ИспользоватьАвтоСкидки,
| &ВыводитьДопКолонкиНДС КАК ПоказыватьНДСВСтроках,
| «»»» КАК Тип,
| &ПредставлениеДокумента КАК ПредставлениеДокумента,
| &ПредставлениеВОшибке КАК ПредставлениеВОшибке,
| Документы.Организация.Префикс КАК Префикс,
| Документы.Контрагент КАК Контрагент,
| Документы.Контрагент КАК Заказчик,
| Документы.БанковскийСчет КАК БанковскийСчет,
| Документы.БанковскийСчет.ТекстКорреспондента КАК БанковскийСчетТекстКорреспондента,
| Документы.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| Документы.Валюта КАК Валюта,
| Документы.Менеджер.ФизическоеЛицо КАК Менеджер,
| Документы.ДополнительнаяИнформация КАК ДополнительнаяИнформация,
| Документы.Грузоотправитель КАК Грузоотправитель,
| Документы.Грузополучатель КАК Грузополучатель
|ИЗ
| Документ.ЗаказКлиента КАК Документы
|ГДЕ
| Документы.Ссылка В(&МассивОбъектов)
|
|УПОРЯДОЧИТЬ ПО
| Документы.МоментВремени
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| 1 КАК Порядок,
| ЭтапыГрафикаОплаты.Ссылка КАК Ссылка,
| ЭтапыГрафикаОплаты.НомерСтроки КАК НомерСтроки,
| ЭтапыГрафикаОплаты.ДатаПлатежа КАК ДатаПлатежа,
| ЭтапыГрафикаОплаты.ВариантОплаты КАК ВариантОплаты,
| ЭтапыГрафикаОплаты.ПроцентПлатежа КАК ПроцентПлатежа,
| ЭтапыГрафикаОплаты.СуммаПлатежа КАК СуммаПлатежа,
| ЛОЖЬ КАК ЭтоЗалогЗаТару
|ИЗ
| Документ.ЗаказКлиента.ЭтапыГрафикаОплаты КАК ЭтапыГрафикаОплаты
|ГДЕ
| ЭтапыГрафикаОплаты.Ссылка В(&МассивОбъектов)
| И ЭтапыГрафикаОплаты.СуммаПлатежа <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2 КАК Порядок,
| ЭтапыГрафикаОплаты.Ссылка КАК Ссылка,
| ЭтапыГрафикаОплаты.НомерСтроки КАК НомерСтроки,
| ЭтапыГрафикаОплаты.ДатаПлатежа КАК ДатаПлатежа,
| ЭтапыГрафикаОплаты.ВариантОплаты КАК ВариантОплаты,
| ЭтапыГрафикаОплаты.ПроцентЗалогаЗаТару КАК ПроцентПлатежа,
| ЭтапыГрафикаОплаты.СуммаЗалогаЗаТару КАК СуммаПлатежа,
| ИСТИНА КАК ЭтоЗалогЗаТару
|ИЗ
| Документ.ЗаказКлиента.ЭтапыГрафикаОплаты КАК ЭтапыГрафикаОплаты
|ГДЕ
| ЭтапыГрафикаОплаты.Ссылка В(&МассивОбъектов)
| И ЭтапыГрафикаОплаты.Ссылка.ТребуетсяЗалогЗаТару
| И ЭтапыГрафикаОплаты.СуммаЗалогаЗаТару <> 0
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| Порядок
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка,
|
| ВариантыКомплектацииНоменклатуры.Ссылка КАК ВариантКомплектацииНоменклатуры,
| ВариантыКомплектацииНоменклатуры.ВариантПредставленияНабораВПечатныхФормах КАК ВариантПредставленияНабораВПечатныхФормах,
| ВариантыКомплектацииНоменклатуры.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| Таблица.НоменклатураНабора КАК НоменклатураНабора,
| Таблица.ХарактеристикаНабора КАК ХарактеристикаНабора,
|
| Таблица.НомерСтроки КАК НомерСтроки,
| Таблица.Номенклатура КАК Номенклатура,
| Таблица.Упаковка КАК Упаковка,
|
| Таблица.Количество КАК Количество,
| Таблица.КоличествоУпаковок КАК КоличествоУпаковок,
|
| ВЫБОР КОГДА &ОтображатьСкидки ТОГДА
| Таблица.Цена
| ИНАЧЕ
| Таблица.Сумма/Таблица.КоличествоУпаковок
| КОНЕЦ КАК Цена,
|
| Таблица.Сумма КАК Сумма,
| Таблица.СтавкаНДС КАК СтавкаНДС,
| Таблица.СуммаНДС КАК СуммаНДС,
| Таблица.ДатаОтгрузки КАК ДатаОтгрузки,
| Таблица.Характеристика КАК Характеристика,
|
| ВЫБОР КОГДА &ОтображатьСкидки ТОГДА
| Таблица.СуммаРучнойСкидки + Таблица.СуммаАвтоматическойСкидки
| ИНАЧЕ
| 0
| КОНЕЦ КАК СуммаСкидки,
|
| Таблица.Сумма + Таблица.СуммаРучнойСкидки + Таблица.СуммаАвтоматическойСкидки КАК СуммаБезСкидки,
| Таблица.Содержание КАК Содержание,
|
| ВЫБОР КОГДА Таблица.Ссылка.ВернутьМногооборотнуюТару
| И Таблица.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ЭтоВозвратнаяТара
|
|ПОМЕСТИТЬ Товары
|ИЗ
| Документ.ЗаказКлиента.Товары КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК ВариантыКомплектацииНоменклатуры
| ПО ВариантыКомплектацииНоменклатуры.Владелец = Таблица.НоменклатураНабора
| И ВариантыКомплектацииНоменклатуры.Характеристика = Таблица.ХарактеристикаНабора
| И ВариантыКомплектацииНоменклатуры.Основной
|
|ГДЕ
| Таблица.Ссылка В(&МассивОбъектов)
| И Таблица.Отменено = ЛОЖЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.Ссылка КАК Ссылка,
| Таблица.НоменклатураНабора КАК НоменклатураНабора,
| Таблица.ХарактеристикаНабора КАК ХарактеристикаНабора,
| МИНИМУМ(Таблица.НомерСтроки) КАК НомерСтроки,
| СУММА(Таблица.Сумма) КАК Сумма,
| СУММА(Таблица.СуммаНДС) КАК СуммаНДС,
| МАКСИМУМ(Таблица.ДатаОтгрузки) КАК ДатаОтгрузки,
| СУММА(Таблица.СуммаСкидки) КАК СуммаСкидки,
| СУММА(Таблица.СуммаБезСкидки) КАК СуммаБезСкидки
|ПОМЕСТИТЬ ВременнаяТаблицаНаборыПодготовка
|ИЗ
| Товары КАК Таблица
|
|ГДЕ
| Таблица.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|СГРУППИРОВАТЬ ПО
| Таблица.Ссылка,
| Таблица.НоменклатураНабора,
| Таблица.ХарактеристикаНабора
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Товары.Ссылка КАК Ссылка,
| Товары.ВариантКомплектацииНоменклатуры КАК ВариантКомплектацииНоменклатуры,
| Товары.ВариантПредставленияНабораВПечатныхФормах КАК ВариантПредставленияНабораВПечатныхФормах,
| Товары.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| Товары.НоменклатураНабора,
| Товары.ХарактеристикаНабора,
| Товары.Номенклатура,
| Товары.Характеристика,
| ВЫБОР КОГДА Товары.ВариантКомплектацииНоменклатуры.НоменклатураОсновногоКомпонента = Товары.Номенклатура
| И Товары.ВариантКомплектацииНоменклатуры.ХарактеристикаОсновногоКомпонента = Товары.Характеристика ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ОсновнаяКомплектующая,
| Товары.СтавкаНДС КАК СтавкаНДС,
| 0 КАК КоличествоПоУмолчанию,
| Товары.Количество КАК Количество
|ПОМЕСТИТЬ ВременнаяТаблицаНаборыДополнительноЧастьПервая
|ИЗ
| Товары КАК Товары
|ГДЕ
| Товары.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Т.Ссылка КАК Ссылка,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка КАК ВариантКомплектацииНоменклатуры,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка.ВариантПредставленияНабораВПечатныхФормах КАК ВариантПредставленияНабораВПечатныхФормах,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка.Владелец КАК НоменклатураНабора,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка.Характеристика КАК ХарактеристикаНабора,
| ВариантыКомплектацииНоменклатурыТовары.Номенклатура КАК Номенклатура,
| ВариантыКомплектацииНоменклатурыТовары.Характеристика КАК Характеристика,
| ЛОЖЬ КАК ОсновнаяКомплектующая,
| NULL КАК СтавкаНДС,
| СУММА(ВариантыКомплектацииНоменклатурыТовары.Количество) КАК КоличествоПоУмолчанию,
| 0 КАК Количество
|ИЗ
| Справочник.ВариантыКомплектацииНоменклатуры.Товары КАК ВариантыКомплектацииНоменклатурыТовары
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ Т.Ссылка ИЗ Товары КАК Т) КАК Т
| ПО ИСТИНА
|ГДЕ
| ВариантыКомплектацииНоменклатурыТовары.Ссылка В (ВЫБРАТЬ РАЗЛИЧНЫЕ Т.ВариантКомплектацииНоменклатуры ИЗ Товары КАК Т)
|
|СГРУППИРОВАТЬ ПО
| Т.Ссылка,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка.Владелец,
| ВариантыКомплектацииНоменклатурыТовары.Ссылка.Характеристика,
| ВариантыКомплектацииНоменклатурыТовары.Номенклатура,
| ВариантыКомплектацииНоменклатурыТовары.Характеристика,
| ВариантыКомплектацииНоменклатурыТовары.Упаковка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Таблица.Ссылка,
| Таблица.ВариантКомплектацииНоменклатуры,
| Таблица.ВариантРасчетаЦеныНабора,
| Таблица.ВариантПредставленияНабораВПечатныхФормах,
| Таблица.НоменклатураНабора,
| Таблица.ХарактеристикаНабора,
| Таблица.Номенклатура,
| Таблица.Характеристика,
| МАКСИМУМ(Таблица.СтавкаНДС) КАК СтавкаНДС,
| МАКСИМУМ(Таблица.ОсновнаяКомплектующая) КАК ОсновнаяКомплектующая,
| СУММА(Таблица.КоличествоПоУмолчанию) КАК КоличествоПоУмолчанию,
| СУММА(Таблица.Количество) КАК Количество
|ПОМЕСТИТЬ ВременнаяТаблицаНаборыДополнительноЧастьВторая
|ИЗ
| ВременнаяТаблицаНаборыДополнительноЧастьПервая КАК Таблица
|
|СГРУППИРОВАТЬ ПО
| Таблица.Ссылка,
| Таблица.ВариантКомплектацииНоменклатуры,
| Таблица.ВариантРасчетаЦеныНабора,
| Таблица.ВариантПредставленияНабораВПечатныхФормах,
| Таблица.НоменклатураНабора,
| Таблица.ХарактеристикаНабора,
| Таблица.Номенклатура,
| Таблица.Характеристика
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Результат.Ссылка,
| Результат.ВариантКомплектацииНоменклатуры,
| Результат.ВариантРасчетаЦеныНабора,
| Результат.ВариантПредставленияНабораВПечатныхФормах,
| Результат.НоменклатураНабора,
| Результат.ХарактеристикаНабора,
| МАКСИМУМ(ВЫБОР
| КОГДА Результат.ОсновнаяКомплектующая
| ТОГДА Результат.СтавкаНДС
| ИНАЧЕ null
| КОНЕЦ) КАК СтавкаНДС,
| ВЫРАЗИТЬ(МИНИМУМ(ВЫБОР
| КОГДА Результат.КоличествоПоУмолчанию <> 0 И Результат.ОсновнаяКомплектующая
| ТОГДА Результат.Количество / Результат.КоличествоПоУмолчанию
| ИНАЧЕ null
| КОНЕЦ) + 0.5 КАК Число(10,0)) — 1 КАК Количество
|ПОМЕСТИТЬ ВременнаяТаблицаНаборыДополнительно
|ИЗ
| ВременнаяТаблицаНаборыДополнительноЧастьВторая КАК Результат
|СГРУППИРОВАТЬ ПО
| Результат.Ссылка,
| Результат.ВариантКомплектацииНоменклатуры,
| Результат.ВариантРасчетаЦеныНабора,
| Результат.ВариантПредставленияНабораВПечатныхФормах,
| Результат.НоменклатураНабора,
| Результат.ХарактеристикаНабора
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВременнаяТаблицаНаборыДополнительно.ВариантКомплектацииНоменклатуры,
| ВЫБОР КОГДА Таблица.Ссылка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию) ТОГДА
| ВЫБОР КОГДА ВременнаяТаблицаНаборыДополнительно.ВариантПредставленияНабораВПечатныхФормах = ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.ТолькоНабор) ТОГДА
| ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие)
| ИНАЧЕ
| ВременнаяТаблицаНаборыДополнительно.ВариантПредставленияНабораВПечатныхФормах
| КОНЕЦ
| ИНАЧЕ
| ВременнаяТаблицаНаборыДополнительно.ВариантПредставленияНабораВПечатныхФормах
| КОНЕЦ КАК ВариантПредставленияНабораВПечатныхФормах,
| ВЫБОР КОГДА Таблица.Ссылка.ХозяйственнаяОперация = ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию) ТОГДА
| ВЫБОР КОГДА
| ВЫБОР КОГДА ВременнаяТаблицаНаборыДополнительно.ВариантПредставленияНабораВПечатныхФормах = ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.ТолькоНабор) ТОГДА
| ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие)
| ИНАЧЕ
| ВременнаяТаблицаНаборыДополнительно.ВариантПредставленияНабораВПечатныхФормах
| КОНЕЦ = ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие)
| И ВременнаяТаблицаНаборыДополнительно.ВариантРасчетаЦеныНабора В (ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоЦенам),ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ЦенаЗадаетсяЗаНаборРаспределяетсяПоДолям)) ТОГДА
| ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.РассчитываетсяИзЦенКомплектующих)
| ИНАЧЕ
| ВременнаяТаблицаНаборыДополнительно.ВариантРасчетаЦеныНабора
| КОНЕЦ
| ИНАЧЕ
| ВременнаяТаблицаНаборыДополнительно.ВариантРасчетаЦеныНабора
| КОНЕЦ КАК ВариантРасчетаЦеныНабора,
| Таблица.Ссылка КАК Ссылка,
| Таблица.НоменклатураНабора КАК НоменклатураНабора,
| Таблица.ХарактеристикаНабора КАК ХарактеристикаНабора,
| Таблица.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ВременнаяТаблицаНаборыДополнительно.Количество, 1) КАК КоличествоУпаковок,
| ЕСТЬNULL(ВременнаяТаблицаНаборыДополнительно.Количество, 1) КАК Количество,
| Таблица.Сумма КАК Сумма,
| Таблица.СуммаНДС КАК СуммаНДС,
| Таблица.ДатаОтгрузки КАК ДатаОтгрузки,
| Таблица.СуммаСкидки КАК СуммаСкидки,
| Таблица.СуммаБезСкидки КАК СуммаБезСкидки,
| ВременнаяТаблицаНаборыДополнительно.СтавкаНДС КАК СтавкаНДС
|ПОМЕСТИТЬ ВременнаяТаблицаНаборы
|ИЗ
| ВременнаяТаблицаНаборыПодготовка КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаНаборыДополнительно КАК ВременнаяТаблицаНаборыДополнительно
| ПО Таблица.НоменклатураНабора = ВременнаяТаблицаНаборыДополнительно.НоменклатураНабора
| И Таблица.ХарактеристикаНабора = ВременнаяТаблицаНаборыДополнительно.ХарактеристикаНабора
| И Таблица.Ссылка = ВременнаяТаблицаНаборыДополнительно.Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|
| Товары.Ссылка КАК Ссылка,
| Товары.ВариантПредставленияНабораВПечатныхФормах КАК ВариантПредставленияНабораВПечатныхФормах,
| Товары.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| Товары.НоменклатураНабора КАК НоменклатураНабора,
| Товары.ХарактеристикаНабора КАК ХарактеристикаНабора,
| Товары.ЭтоНабор КАК ЭтоНабор,
| Товары.ЭтоКомплектующие КАК ЭтоКомплектующие,
|
| Товары.НомерСтроки КАК НомерСтроки,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Номенклатура.Код КАК Код,
| Товары.Номенклатура.Артикул КАК Артикул,
| Товары.Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
|
| ВЫБОР КОГДА Товары.Упаковка = ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) ТОГДА
| ПРЕДСТАВЛЕНИЕ(Товары.Номенклатура.ЕдиницаИзмерения)
| ИНАЧЕ
| Товары.Упаковка.Наименование
| КОНЕЦ КАК ЕдиницаИзмерения,
|
| Товары.КоличествоУпаковок КАК Количество,
|
| Товары.Цена КАК Цена,
|
| Товары.Сумма КАК Сумма,
| Товары.СтавкаНДС КАК СтавкаНДС,
| Товары.СуммаНДС КАК СуммаНДС,
| НЕОПРЕДЕЛЕНО КАК ВидЦеныИсполнителя,
| Товары.ДатаОтгрузки КАК ДатаОтгрузки,
| ЕСТЬNULL(Товары.Характеристика.НаименованиеПолное, «»»») КАК Характеристика,
|
| ВЫБОР КОГДА ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) = 1 ТОГДА
| НЕОПРЕДЕЛЕНО
| ИНАЧЕ
| Товары.Упаковка.Наименование
| КОНЕЦ КАК Упаковка,
|
| Товары.СуммаСкидки КАК СуммаСкидки,
|
| Товары.СуммаБезСкидки КАК СуммаБезСкидки,
| Товары.Содержание КАК Содержание,
|
| Товары.ЭтоВозвратнаяТара КАК ЭтоВозвратнаяТара
|
|ИЗ (
|
| ВЫБРАТЬ
| Таблица.Ссылка,
| ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаНаборы.НомерСтроки, 0) <> 0 ТОГДА
| ВременнаяТаблицаНаборы.ВариантПредставленияНабораВПечатныхФормах
| ИНАЧЕ
| ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.ПустаяСсылка)
| КОНЕЦ КАК ВариантПредставленияНабораВПечатныхФормах,
| ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаНаборы.НомерСтроки, 0) <> 0 ТОГДА
| ВременнаяТаблицаНаборы.ВариантРасчетаЦеныНабора
| ИНАЧЕ
| ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка)
| КОНЕЦ КАК ВариантРасчетаЦеныНабора,
| Таблица.НоменклатураНабора,
| Таблица.ХарактеристикаНабора,
| ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаНаборы.НомерСтроки, 0) <> 0 ТОГДА
| ИСТИНА
| ИНАЧЕ
| ЛОЖЬ
| КОНЕЦ КАК ЭтоКомплектующие,
| ЛОЖЬ КАК ЭтоНабор,
| ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаНаборы.НомерСтроки, 0) <> 0 ТОГДА
| ВременнаяТаблицаНаборы.НомерСтроки
| ИНАЧЕ
| Таблица.НомерСтроки
| КОНЕЦ КАК НомерСтроки,
| Таблица.Номенклатура,
| Таблица.Количество,
| Таблица.КоличествоУпаковок,
| Таблица.Цена,
| Таблица.Сумма,
| Таблица.СтавкаНДС,
| Таблица.СуммаНДС,
| Таблица.ДатаОтгрузки,
| Таблица.Характеристика,
| Таблица.Упаковка,
| Таблица.СуммаСкидки,
| Таблица.СуммаБезСкидки,
| Таблица.Содержание,
| Таблица.ЭтоВозвратнаяТара
| ИЗ
| Товары КАК Таблица
| ЛЕВОЕ СОЕДИНЕНИЕ ВременнаяТаблицаНаборы КАК ВременнаяТаблицаНаборы
| ПО ВременнаяТаблицаНаборы.НоменклатураНабора = Таблица.НоменклатураНабора
| И ВременнаяТаблицаНаборы.ХарактеристикаНабора = Таблица.ХарактеристикаНабора
| И ВременнаяТаблицаНаборы.Ссылка = Таблица.Ссылка
|
| ГДЕ
| Таблица.НоменклатураНабора = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| ИЛИ (Таблица.НоменклатураНабора <> ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
| И ВременнаяТаблицаНаборы.ВариантПредставленияНабораВПечатныхФормах В (ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.ТолькоКомплектующие),
| ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие)))
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВременнаяТаблицаНаборы.Ссылка,
| ВременнаяТаблицаНаборы.ВариантПредставленияНабораВПечатныхФормах,
| ВременнаяТаблицаНаборы.ВариантРасчетаЦеныНабора КАК ВариантРасчетаЦеныНабора,
| ВременнаяТаблицаНаборы.НоменклатураНабора,
| ВременнаяТаблицаНаборы.ХарактеристикаНабора,
| ЛОЖЬ КАК ЭтоКомплектующие,
| ИСТИНА КАК ЭтоНабор,
| ВременнаяТаблицаНаборы.НомерСтроки,
| ВременнаяТаблицаНаборы.НоменклатураНабора,
| ВременнаяТаблицаНаборы.Количество,
| ВременнаяТаблицаНаборы.КоличествоУпаковок,
| ВЫБОР
| КОГДА &ОтображатьСкидки ТОГДА
| ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаНаборы.КоличествоУпаковок, 1) <> 0 ТОГДА
| (ВременнаяТаблицаНаборы.СуммаБезСкидки) / ЕСТЬNULL(ВременнаяТаблицаНаборы.КоличествоУпаковок, 1)
| ИНАЧЕ
| 0
| КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА ЕСТЬNULL(ВременнаяТаблицаНаборы.КоличествоУпаковок, 1) <> 0 ТОГДА
| (ВременнаяТаблицаНаборы.Сумма) / ЕСТЬNULL(ВременнаяТаблицаНаборы.КоличествоУпаковок, 1)
| ИНАЧЕ
| 0
| КОНЕЦ
| КОНЕЦ КАК Цена,
| ВременнаяТаблицаНаборы.Сумма КАК Сумма,
| ВременнаяТаблицаНаборы.СтавкаНДС,
| ВременнаяТаблицаНаборы.СуммаНДС,
| ВременнаяТаблицаНаборы.ДатаОтгрузки,
| ВременнаяТаблицаНаборы.ХарактеристикаНабора,
| ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
| ВременнаяТаблицаНаборы.СуммаСкидки,
| ВременнаяТаблицаНаборы.СуммаБезСкидки,
| «»»»,
| ЛОЖЬ
| ИЗ
| ВременнаяТаблицаНаборы КАК ВременнаяТаблицаНаборы
| ГДЕ
| ВременнаяТаблицаНаборы.ВариантПредставленияНабораВПечатныхФормах В (ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.ТолькоНабор),
| ЗНАЧЕНИЕ(Перечисление.ВариантыПредставленияНаборовВПечатныхФормах.НаборИКомплектующие))
|) КАК Товары
|
|УПОРЯДОЧИТЬ ПО
| Товары.НомерСтроки,
| ЭтоНабор УБЫВ
|»;
Запрос.Текст = СтрЗаменить(Запрос.Текст,
«&ТекстЗапросаКоэффициентУпаковки»,
Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки(
«Товары.Упаковка»,
«Товары.Номенклатура»));
Запрос.УстановитьПараметр(«МассивОбъектов», МассивОбъектов);
Запрос.УстановитьПараметр(«ОтображатьСкидки», ОтображатьСкидки);
Запрос.УстановитьПараметр(«ПредставлениеДокумента», НСтр(«ru = ‘Заказ клиента'»));
Запрос.УстановитьПараметр(«ПредставлениеВОшибке», НСтр(«ru = ‘заказа клиента'»));
Запрос.УстановитьПараметр(«ВыводитьДопКолонкиНДС», Константы.ВыводитьДопКолонкиНДС.Получить());
ПакетРезультатовЗапроса = Запрос.ВыполнитьПакет();
СтруктураДанныхДляПечати = Новый Структура;
СтруктураДанныхДляПечати.Вставить(«РезультатПоШапке», ПакетРезультатовЗапроса[0]);
СтруктураДанныхДляПечати.Вставить(«РезультатПоЭтапамОплаты», ПакетРезультатовЗапроса[1]);
СтруктураДанныхДляПечати.Вставить(«РезультатПоТабличнойЧасти», ПакетРезультатовЗапроса[ПакетРезультатовЗапроса.Количество() — 1]);
Возврат СтруктураДанныхДляПечати;
КонецФункции
Изменение встроенных в типовые конфигурации печатных форм — это, вероятно, одна из наиболее распространенных доработок типовых конфигураций. Чтобы каждый раз не изменять саму конфигурацию, компания «1С» создала механизм внешних печатных форм.
Внешняя печатная форма — это обычная внешняя обработка, соответствующая определенным требованиям. Такую обработку можно подключить к какой-либо типовой конфигурации и тем самым добавить новую печатную форму и/или заменить существующую.
Кроме этого, нужно отметить, что создание внешних печатных форм различается для обычного приложения (Бухгалтерия 2.0.*, ЗиУП 2.5.*, УТ 10.3.*) и управляемого приложения (Бухгалтерия 3.0.*, ЗиУП 3.*, УТ 11.*). В статье будут рассмотрены оба варианта.
Также нужно сказать, что вопросы отладки внешних печатных форм и для управляемого и для обычного приложения рассматриваются в отдельной статье.
Содержание
- Внешняя печатная форма в управляемом приложении
- Создание
- Подключение
- Внешняя печатная форма в обычном приложении
- Создание
- Подключение
Внешняя печатная форма в управляемом приложении
Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 3.0).
Создание
Как уже было сказано выше, внешняя печатная форма — это просто-напросто внешняя обработка соответствующая некоторым требованиям. Первым требованием является реализация в модуле печатной формы экспортной функции СведенияОВнешнейОбработке().
Итак, создаем новую внешнюю обработку и в модуле объекта этой обработки размещаем примерно такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; //указываем сведения о внешней печатной форме ПараметрыРегистрации.Вставить(«Вид», «ПечатнаяФорма»); ПараметрыРегистрации.Вставить(«Версия», «1.2»); ПараметрыРегистрации.Вставить(«ВерсияБСП», «3.0.1.287»); ПараметрыРегистрации.Вставить(«Наименование», «Печатная форма для ПКО»); ПараметрыРегистрации.Вставить(«Информация», «Внешняя печатная форма для документов»); //используем безопасный режим, это накладывает некоторые ограничения ПараметрыРегистрации.Вставить(«БезопасныйРежим», Истина); //определим документы и/или справочники //в которых будет использоваться эта печатная форма ПараметрыРегистрации.Вставить(«Назначение», Новый Массив); ПараметрыРегистрации.Назначение.Добавить(«Документ.ПриходныйКассовыйОрдер»); //используется для дополнительных отчетов //подключенных к подсистеме «Варианты отчетов» ПараметрыРегистрации.Вставить(«ОпределитьНастройкиФормы», Ложь); //если требуются исключения из безопасного режима, их можно запросить ПараметрыРегистрации.Вставить(«Разрешения», Новый Массив); ПараметрыРегистрации.Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(«https»,»yandex.ru»,80,»очень надо»)); //определяем таблицу команд ПараметрыРегистрации.Вставить(«Команды», ПолучитьТаблицуКоманд()); //добавляем команду Команда = ПараметрыРегистрации.Команды.Добавить(); Команда.Представление = «Печатная форма для ПКО (внешняя)»; Команда.Идентификатор = «ПечатнаяФормаДляПКО»; Команда.Использование = «ВызовСерверногоМетода»; Команда.ПоказыватьОповещение = Истина; Команда.Модификатор = «ПечатьMXL»; Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; Команды.Колонки.Добавить(«Представление», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Идентификатор», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«Использование», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«ПоказыватьОповещение», Новый ОписаниеТипов(«Булево»)); Команды.Колонки.Добавить(«Модификатор», Новый ОписаниеТипов(«Строка»)); Команды.Колонки.Добавить(«ЗаменяемыеКоманды», Новый ОписаниеТипов(«Строка»)); Возврат Команды; КонецФункции |
Код в основном прокомментирован, но некоторые моменты нужно обговорить отдельно. Функция СведенияОВнешнейОбработке() является общей для всех внешних объектов. Вид внешнего объекта указывается в параметре «Вид» (у нас указана «ПечатнаяФорма»).
Большинство параметров не являются обязательными для заполнения. В нашем случае обязательно указать параметры «Вид», «Версия» и «Команды» — это обязательные параметры для всех видов внешних объектов («Команды» необязательны для отчетов). Кроме этого будет полезно указать параметры «Назначение». Но вообще, желательно указывать как можно больше информации — это поможет не запутаться как Вашим клиентам так и Вам самим.
Параметр «БезопасныйРежим» со значением «Истина» накладывает следующие ограничения:
- игнорируется привилегированный режим;
- запрещена работа с COM;
- запрещена загрузка внешних компонент;
- запрещен запуск внешних приложений и команд ОС;
- запрещен доступ к файловой системе (кроме временных файлов);
- запрещен доступ к интернету.
Параметру «БезопасныйРежим» рекомендуется присваивать значение «Истина». Если необходима какая-либо функциональность, запрещаемая безопасным режимом, то можно получить дополнительное разрешения на эту функциональность (как в примере выше).
Кроме функции СведенияОВнешнейОбработке() необходимо реализовать еще одну экспортную функцию — Печать(). Эта функция должна иметь следующие параметры:
- МассивОбъектов — массив ссылок на объекты, для которых требуется сформировать табличные документы;
- КоллекцияПечатныхФорм — служебная таблица значений, через нее передаются имена макетов для которых могут быть сформированы табличные документы, а также возвращаются синонимы (представления) макетов, сформированные табличные документы и другая информация;
- ОбъектыПечати — список значений, к котором устанавливается соответствие между объектами и именами областей печати табличного документа (нужно для возможности печати комплектов документов);
- ПараметрыВывода — структура с предопределенными ключами, через которую можно вернуть некоторые параметры.
Пример реализации функции Печать():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт ПечатнаяФорма = УправлениеПечатью.СведенияОПечатнойФорме(КоллекцияПечатныхФорм, «ПечатнаяФормаДляПКО»); Если ПечатнаяФорма <> Неопределено Тогда ПечатнаяФорма.ТабличныйДокумент = СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати); ПечатнаяФорма.СинонимМакета = «Печатная форма для ПКО»; КонецЕсли; КонецПроцедуры Функция СформироватьТабличныйДокумент(МассивОбъектов, ОбъектыПечати) ТабДок = Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет(«Макет»); ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»); ПервыйДокумент = Истина; Для Каждого ОбъектСсылка Из МассивОбъектов Цикл Если Не ПервыйДокумент Тогда //выводим документы на разных страницах ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1; ОбластьСтрока.Параметры.Документ = ОбъектСсылка; ТабДок.Вывести(ОбластьСтрока); //зададим область печати объекта в табличном документе УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок, НомерСтрокиНачало, ОбъектыПечати, ОбъектСсылка); КонецЦикла; Возврат ТабДок; КонецФункции |
В коде выше мы находим нашу печатную форму по идентификатору и формируем для нее табличный документ.
Подключение
Подключение нашей внешней печатной формы на примере «Бухгалтерии предприятия, редакция 3.0».
Вкратце повторю основные этапы:
- Открываем вкладку «Администрирование» и переходим в раздел «Печатные формы, отчеты и обработки»;
- Устанавливаем галку «Дополнительные отчеты и обработки» и переходим в раздел «Дополнительные отчеты и обработки»;
- Жмем кнопку «Добавить из файла» и выбираем файл печатной формы;
- (Необязательно) Меняем наименование, комментарии, настраиваем видимость, изменяем размещение;
- Жмем кнопку «Записать и закрыть».
Внешняя печатная форма в обычном приложении
Теперь рассмотрим создание внешней печатной формы в обычном приложении — создадим печатную форму для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 2.0). Несмотря на то, что задача та же, решается она по другому.
Создание
Внешняя печатная форма в обычном приложении — это внешняя обработка, в которой имеется реквизит «СсылкаНаОбъект» произвольного типа, в который будет передана ссылка на объект, для которого требуется выполнить печать, и экспортной функции Печать() в модуле объекта, которая вызывается без параметров и возвращает табличный документ.
Кроме этого может присутствовать реквизит «ДополнительныеПараметры» произвольного типа, через который, в виде структуры, будут передаваться дополнительные параметры примитивного типа.
Также во внешней печатной форме может присутствовать макет с названием «Параметры_Авторегистрации» в первой колонке которого можно перечислить объекты метаданных, к которым принадлежит печатная форма. Используется этот макет для автоматического заполнения принадлежности печатной формы.
Такой же макет (но с указанием табличной части) используется во внешних обработках табличных частей, о которых имеется отдельная статья.
Пример реализации функции Печать():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Функция Печать() Экспорт ТабДок = Новый ТабличныйДокумент; Макет = ЭтотОбъект.ПолучитьМакет(«Макет»); ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»); ОбластьСтрока.Параметры.Документ = СсылкаНаОбъект; ТабДок.Вывести(ОбластьСтрока); //обращение к дополнительным параметрам рекомендуется снабдить //соответствующими проверками Если ЗначениеЗаполнено(ДополнительныеПараметры) Тогда Если ДополнительныеПараметры.Свойство(«ТестПараметр») Тогда ОбластьСтрока.Параметры.Документ = ДополнительныеПараметры.ТестПараметр; ТабДок.Вывести(ОбластьСтрока); КонецЕсли; КонецЕсли; Возврат ТабДок; КонецФункции |
Подключение
Подключим нашу внешнюю печатную форму на примере «Бухгалтерии предприятия, редакция 2.0».
Основные этапы:
- Открываем справочник внешних печатных форм (Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы);
- Добавляем новый элемент справочника и указываем файл печатной формы;
- Записываем элемент.
- (Необязательно) Меняем имеющиеся настройки — представления, отборы, дополнительные параметры и прочее.
На этом все, надеюсь, что эта статья была Вам полезна.
Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Загрузка…
Рассмотрим написание простейшей внешней печатной формы в 1С 8.3 для управляемого приложения на примере конфигураций Бухгалтерия 3.0 и Управление торговлей 11 (данная печатная форма будет работать в обоих этих конфигурациях).
Например нам требуется написать внешнюю печатную форму к документу Реализация товаров и услуг: вывести основные данные документа, а так же из табличной части Товары: номенклатуру, цену, количество и сумму.
Создание внешней обработки
В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя, добавляем реквизит Документ с типом ДокументСсылка.РеализацияТоваровУслуг, он не является обязательным для работы печатной формы, но пригодится нам для ее регистрации в базе.
Создание макета печатной формы
Добавляем новый макет, тип макета оставляем Табличный документ. На макете создаем три области: Шапка, Данные и Подвал. Сделать это можно выделив нужное количество строк и нажав меню Таблица->Имена->Назначить имя (Ctrl+Shift+N).
Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по ссылке.
Будем рады помочь Вам!
После этого начинаем располагать в областях текст и параметры. В шапку выведем название печатной формы, номер документа и организацию, а также нарисуем границы шапки таблицы и напишем имена колонок. При создании параметра в свойствах ячейки, на закладке макет следует установить свойство Заполнение в значение Параметр.
В области Данные создадим параметры для вывода строк табличной части(Номенклатура, цена и т.д.), а в области Подвал для итогов по количеству и сумме.
Программирование
Зайдем в модуль объекта печатной формы Действия->Открыть модуль объекта.
Теперь в модуле объекта следует создать обязательную функцию СведенияОВнешнейОбработке(). Она необходима для регистрации печатной формы в справочнике ДополнительныеОтчетыИОбработки, в ней собирается структура с данными для подключения формы. Эта функция, а также ряд сопутствующих ей, практически одинаковы для всех печатных форм, поэтому их можно просто копировать в новую печатную форму ничего не меняя.
Рассмотрим содержание функции СведенияОВнешнейОбработке(). Для начала создадим ее в модуле:
Функция СведенияОВнешнейОбработке() Экспорт КонецФункции
Создадим структуру ПараметрыРегистрации в которой и будут храниться все данные необходимые для регистрации.
ПараметрыРегистрации = Новый Структура;
Создадим массив МассивНазначений в котором будут храниться наименования документов и справочников из которых будет производиться печать.
МассивНазначений = Новый Массив;
Наименование нашей печатной формы запишем в переменную Наименование, для того что бы не прописывать его в ручную вынесем получение наименования в отдельную функцию, которая будет получать его из представления внешней обработки.
Функция УказатьНаименованиеВнешнейПечатнойФормы() Наименование = ЭтотОбъект.Метаданные().Представление(); Возврат Наименование; КонецФункции
А теперь заполним переменную.
Наименование = УказатьНаименованиеВнешнейПечатнойФормы();
Заполним МассивНазначений используя реквизит внешней обработки Документ. Также вынесем получение элемента массива в отдельную функцию.
Функция ПолучитьМетаданныеДокументаПечати() ПолноеИмя = Документ.Метаданные().ПолноеИмя(); Возврат ПолноеИмя; КонецФункции
А теперь добавим полученные данные в массив.
МассивНазначений.Добавить(ПолучитьМетаданныеДокументаПечати());
Конечно этот метод не является правильным для случая, когда у вас несколько назначений, но для одного вполне годится.
Приступим к заполнению структуры ПараметрыРегистрации.
Вид внешней обработки, может быть: ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов, ПечатнаяФорма и т.д.
ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма");
Назначение заполним уже полученным массивом:
ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
Наименование из уже заполненной переменной:
ПараметрыРегистрации.Вставить("Наименование", Наименование);
Номер версии можно поставить любой по желанию:
ПараметрыРегистрации.Вставить("Версия", "1.1");
Безопасный режим не даст печатной форме вносить изменения в базу данных. Но она у нас вполне безобидна =), поэтому ставим значение Ложь.
ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь);
В поле Информация вносим описание печатной формы для пользователя. Запишем туда Наименование.
ПараметрыРегистрации.Вставить("Информация", Наименование);
Приступим к созданию команды, которая необходима для вывода на печать нашей печатной формы. Опишем колонки ТаблицыКоманд, вынеся это в отдельную функцию.
Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; //как будет выглядеть описание печ.формы для пользователя Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); //имя макета печ.формы Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции
Вызовем сознанную функцию.
ТаблицаКоманд = ПолучитьТаблицуКоманд();
Добавим команду печати, вынеся этот процесс в отдельную функцию:
Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда. Представление = Представление; НоваяКоманда. Идентификатор= Идентификатор; НоваяКоманда. Использование= Использование; НоваяКоманда. ПоказыватьОповещение= ПоказыватьОповещение; НоваяКоманда. Модификатор= Модификатор; КонецФункции
Параметры функции ДобавитьКоманду:
- ТаблицаКоманд — созданная в предыдущей функции Таблица значений с типовым набором полей;
- Представление — передадим в параметр Наименование печатной формы;
- Идентификатор — передадим в параметр полное наименование внешней обработки. Вынесем процесс получения в отдельную функцию:
Функция УказатьНаименованиеКомандыПечати() Наименование = ЭтотОбъект.Метаданные().ПолноеИмя(); Возврат Наименование; КонецФункции
- Использование * — здесь возможны два значения:
- ВызовСерверногоМетода — если обязательная функция Печать() будет находиться в модуле объекта печатной формы и выполняться на стороне сервера(в нашем примере будем использовать именно это значение);
- ВызовКлиентскогоМетода — если обязательная функция Печать() будет находиться в модуле основной формы внешней обработки и выполняться на стороне клиента;
- ПоказыватьОповещение — параметр отвечает за вывод оповещения о печати;
- Модификатор — для печатных форм используется значение ПечатьMXL.
Вызов функции выглядит так:
ДобавитьКоманду(ТаблицаКоманд, Наименование, УказатьНаименованиеКомандыПечати(), "ВызовСерверногоМетода", Истина, "ПечатьMXL");
Осталось передать заполненную таблицу команд в ПараметрыРегистрации:
ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
И возвратить их из функции:
Возврат ПараметрыРегистрации;
На этом создание функции СведенияОВнешнейОбработке() завершено, все параметры необходимые для регистрации печатной формы собраны. Вот полный код этой и сопутствующих функций:
Функция СведенияОВнешнейОбработке() Экспорт ПараметрыРегистрации = Новый Структура; МассивНазначений = Новый Массив; Наименование = УказатьНаименованиеВнешнейПечатнойФормы(); МассивНазначений.Добавить(ПолучитьМетаданныеДокументаПечати()); //может быть - ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); ПараметрыРегистрации.Вставить("Назначение", МассивНазначений); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок ПараметрыРегистрации.Вставить("Наименование", Наименование); ПараметрыРегистрации.Вставить("Версия", "1.1"); ПараметрыРегистрации.Вставить("БезопасныйРежим", Ложь); //так будет выглядеть описание печ.формы для пользователя ПараметрыРегистрации.Вставить("Информация", Наименование); ТаблицаКоманд = ПолучитьТаблицуКоманд(); ДобавитьКоманду(ТаблицаКоманд, Наименование, УказатьНаименованиеКомандыПечати(), "ВызовСерверногоМетода", Истина, "ПечатьMXL"); ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд); Возврат ПараметрыРегистрации; КонецФункции Функция ПолучитьТаблицуКоманд() Команды = Новый ТаблицаЗначений; //как будет выглядеть описание печ.формы для пользователя Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка")); //имя макета печ.формы Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево")); Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка")); Возврат Команды; КонецФункции Функция УказатьНаименованиеВнешнейПечатнойФормы() Наименование = ЭтотОбъект.Метаданные().Представление(); Возврат Наименование; КонецФункции Функция УказатьНаименованиеКомандыПечати() Наименование = ЭтотОбъект.Метаданные().ПолноеИмя(); Возврат Наименование; КонецФункции Функция ПолучитьМетаданныеДокументаПечати() ПолноеИмя = Документ.Метаданные().ПолноеИмя(); Возврат ПолноеИмя; КонецФункции Функция ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "") НоваяКоманда = ТаблицаКоманд.Добавить(); НоваяКоманда. Представление = Представление; НоваяКоманда. Идентификатор= Идентификатор; НоваяКоманда. Использование= Использование; НоваяКоманда. ПоказыватьОповещение= ПоказыватьОповещение; НоваяКоманда. Модификатор= Модификатор; КонецФункции
Приступим к написанию кода, который будет формировать нашу печатную форму. Так как при создании команды печати мы использовали параметр ВызовСерверногоМетода, то в модуле объекта создаем обязательную серверную процедуру Печать(если использовать ВызовКлиентскогоМетода, то процедура Печать должна быть клиентской и располагаться в модуле основной формы обработки).
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт КонецПроцедуры
- МассивОбъектов — массив содержащий ссылки на печатаемые документы или справочники(аналог СсылкаНаОбъект в обычном приложении);
- КоллекцияПечатныхФорм — таблица значений содержащая сформированные табличные документы;
- ОбъектыПечати — строковой параметр, в котором передаются имена макетов печатных форм перечисленные через запятую;
- ПараметрыВывода – параметры вывода табличных документов на печать.
В процедуре Печать нам следует сформировать табличный документ с данными нашей печатной формы и добавить его в Коллекцию печатных форм. Для заполнения табличного документа создадим в модуле объекта серверную функцию ПечатьФормы, передадим в параметр массив со ссылками на печатаемые документы(МассивОбъектов).
Функция ПечатьФормы(МассивОбъектов) КонецФункции
В функции создадим переменную для табличного документа, в который будет выводится печатная форма, получим макет и области макета.
ТабДок = новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); ОбластьШапки = Макет.ПолучитьОбласть("Шапка"); ОбластьДанные = Макет.ПолучитьОбласть("Данные"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
Для того чтобы получить строки табличной части Товары всех печатаемых документов используем запрос.
Запрос = новый запрос; Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.Сумма, | РеализацияТоваровУслугТовары.Цена, | РеализацияТоваровУслугТовары.Количество, | РеализацияТоваровУслугТовары.Ссылка |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)";
В параметр запроса передаем МассивОбъектов, что бы указать в условии ГДЕ, что нам нужны данные только тех документов из которых выводим печатную форму. Чтобы получить выборку запроса, сначала выполняем его, а затем выгружаем.
ОбщаяВыборка = Запрос.Выполнить().Выгрузить();
Теперь при помощи цикла обойдем все ссылки из массива объектов и в одном табличном документесформируем печатные формы для всех выбранных документов.
Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл КонецЦикла;
В данном цикле начнем формирование печатных форм каждого из документов.
Заполним параметры шапки и выведем ее в табличный документ.
ОбластьШапки.Параметры.ТекстЗаголовка = "Печатная форма "+СсылкаНаОбъект.Номер; ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация; ТабДок.Вывести(ОбластьШапки);
Из полученной запросом таблицы значений ОбщаяВыборка выберем строки только по текущему документу, для этого сформируем структуру отбора. Поле структуры должно называться также, как и поле таблицы по которому осуществляется поиск.
Отбор = Новый Структура; Отбор.Вставить("Ссылка",СсылкаНаОбъект);
Теперь отберем нужные строки используя метод НайтиСтроки(<Структура отбора>) и получим выборку по документу.
Выборка = ОбщаяВыборка.НайтиСтроки(Отбор);
Далее в цикле заполняем параметры области Данные для каждой строки выборки документа и выводим их в табличный документ. Также в цикле считаем итоговые значения количества и суммы. Заполнять каждый параметр в отдельности мы не будем, а используем процедуру ЗаполнитьЗначенияСвойств((<Приемник>, <Источник>) из глобального контекста, она копирует значения свойств <Источника> в свойства <Приемника>. Сопоставление производится по именам свойств. Подробнее об этом можно прочитать в синтаксис-помощнике 1С Предприятия 8.
ИтогоСумма = 0; ИтогоКоличество = 0; Для Каждого Стр из Выборка Цикл ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Стр); ИтогоСумма = ИтогоСумма + Стр.Сумма; ИтогоКоличество = ИтогоКоличество + Стр.Количество; ТабДок.Вывести(ОбластьДанные); КонецЦикла;
Заполним и выведем область Подвал.
ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество; ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма; ТабДок.Вывести(ОбластьПодвал);
Для того что бы печатная форма каждого документа выводилась на отдельном листе, поставим горизонтальный разделитель.
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
Возвращаем заполненный табличный документ из функции ПечатьФормы.
Возврат ТабДок;
Код функции ПечатьФормы целиком:
Функция ПечатьФормы(МассивОбъектов) Экспорт ТабДок = новый ТабличныйДокумент; Макет = ПолучитьМакет("Макет"); ОбластьШапки = Макет.ПолучитьОбласть("Шапка"); ОбластьДанные = Макет.ПолучитьОбласть("Данные"); ОбластьПодвал = Макет.ПолучитьОбласть("Подвал"); Запрос = новый запрос; Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов); Запрос.Текст = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура, | РеализацияТоваровУслугТовары.Сумма, | РеализацияТоваровУслугТовары.Цена, | РеализацияТоваровУслугТовары.Количество, | РеализацияТоваровУслугТовары.Ссылка |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов)"; ОбщаяВыборка = Запрос.Выполнить().Выгрузить(); Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл ОбластьШапки.Параметры.ТекстЗаголовка = "Печатная форма "+СсылкаНаОбъект.Номер; ОбластьШапки.Параметры.Организация = СсылкаНаОбъект.Организация; ТабДок.Вывести(ОбластьШапки); Отбор = Новый Структура; Отбор.Вставить("Ссылка",СсылкаНаОбъект); Выборка = ОбщаяВыборка.НайтиСтроки(Отбор); ИтогоСумма = 0; ИтогоКоличество = 0; Для Каждого Стр из Выборка Цикл ЗаполнитьЗначенияСвойств(ОбластьДанные.Параметры,Стр); ИтогоСумма = ИтогоСумма + Стр.Сумма; ИтогоКоличество = ИтогоКоличество + Стр.Количество; ТабДок.Вывести(ОбластьДанные); КонецЦикла; ОбластьПодвал.Параметры.ИтогоКоличество = ИтогоКоличество; ОбластьПодвал.Параметры.ИтогоСумма = ИтогоСумма; ТабДок.Вывести(ОбластьПодвал); ТабДок.ВывестиГоризонтальныйРазделительСтраниц(); КонецЦикла; возврат ТабДок; КонецФункции
Теперь осталось добавить сформированный табличный документ Коллекцию печатных форм. Для добавления табличного документа в коллекцию можно воспользоваться типовой процедурой ВывестиТабличныйДокументВКоллекцию из модуля УправлениеПечатью(процедура есть и в Бухгалтерии 3.0и в Управление торговлей 11). В параметры этой процедуры необходимо передать:
- КоллекцияПечатныхФорм — таблица значений содержащая сформированные табличные документы;;
- ИмяМакета — наименование команды печати;
- СинонимМакета — наименование печатной формы;
- ТабличныйДокумент — заполненный табличный документ.
Для параметров ИмяМакета и СинонимМакета используем уже созданные нами процедуры, которые использовались для заполнения сведений о внешней обработки. Таким образом процедура Печать будет выглядеть следующим образом:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию( КоллекцияПечатныхФорм, УказатьНаименованиеКомандыПечати(), УказатьНаименованиеВнешнейПечатнойФормы(), ПечатьФормы(МассивОбъектов)); КонецПроцедуры
Обратите внимание, что для заполнения параметра ТабличныйДокумент вызывается функция ПечатьФормы, которая описана выше.
На этом создание печатной формы в управляемом приложении завершено, файл с ней доступен можно скачать по ссылке. О том, как подключить печатную форму к документу будет рассказано в следующей статье.
Продолжение следует…
Смотрите видео по созданию внешней печатной формы для управляемого приложения:
-
Здравствуйте.
Подскажите пожалуйста, как можно передать внешней печатной форме информацию, которая вводится пользователем на форме документа, но в самом документе при записи не сохраняется?
Заранее благодарю.
-
Offline
rshakiro
Профессионал в 1С
Команда форума- Регистрация:
- 17 мар 2011
- Сообщения:
- 2.261
- Симпатии:
- 145
- Баллы:
- 104
подробнее… Куда вводится? В реквизит документа!?
-
Offline
bajiepka
Профессионал в 1С- Регистрация:
- 26 сен 2014
- Сообщения:
- 460
- Симпатии:
- 31
- Баллы:
- 54
поидее всё, что есть на форме документа, вытягивается соответствующим запросом или через реквизит внешней обработки СсылкаНаОбъект
-
Offline
Ktyf
Опытный в 1С- Регистрация:
- 16 янв 2013
- Сообщения:
- 462
- Симпатии:
- 12
- Баллы:
- 29
это если ВПФ видна только из формыОбъекта, Если же запускать из ФормыСписка — то по ссылке увидит только то, что сохранено в объекте.
-
Вводится не в реквизит. На форме документа расположено поле ввода, данные там не из реквизита объекта, а свои так сказать
-
Реквизиты формы.
Работаете с «управляемыми формами» или с «обычными»
Учетная система какая ? (УТ, УПП, БП…) -
Формы обычные, конфигурация УПП 1.2.14.1
-
Если подключаете печатную форму как внешнюю, через справочник «Внешние печатные формы и обработки» то посмотрите «Help» по «F1» на этот справочник, там должно быть описание как подключить внешнюю пф, что должно быть в ее модуле
— Объединение сообщений, 27 окт 2015 —
В модуле должна быть процедурка :
Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта)
через табличное поле можно выйти на форму объекта из которой была вызвана ПФ, в случае когда владелец формы не доступен или не является формойПоследнее редактирование: 27 окт 2015 -
Либо я не то смотрю, либо одной из двух.
Из справки для справочника «внешние обработки»:
Внешняя печатная форма.
Внешняя обработка, содержащая:
- Необязательный реквизит «ДополнительныеПараметры» произвольного типа, которому будут передаваться дополнительные параметры примитивного типа в виде структуры.
- Реквизит «СсылкаНаОбъект», в который при вызове будет передана ссылка на объект, для которого необходимо выполнить печать.
- Функция «Печать()» — без параметров, возвращающая табличный документ.
Также обработка может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки» и состоящий из 2-х колонок («полное имя метаданного» и «имя табличной части»).
А процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) — это вроде в обработке для заполнения ТЧ объекта, что не совсем то, что надо.
-
Отлично, в функции Печать() получи владельца формы, если это форма то считай что добрался до реквизитов формы.
Стоит полазить отладчиком по процедуре запуска печати, посмотреть на параметры доступные для обработки -
Глупый вопрос, но как получить владельца внешней печатной формы, если это внешняя обработка и экспортная функция Печать() находится в модуле объекта?
-
Все проще, в обработке печати есть «СсылкаНаОбъект»
далее получаете форму объекта, например форму документа «ФормаДокументаКОбработке = СсылкаНаОбъект.ПолучитьФорму(«ФормаДокумента»);»
во вложении простенький пример, форма документа была модифицирована (добавлены реквизиты формы)
— Объединение сообщений, 29 окт 2015 —
Есть прикол с реквизитами формы, если в форме нет алгоритма отслеживания изменения реквизитов формы, и они доступны для редактирования пользователям то в них можно «понавводить» всего, что угодно без изменения состояния объекта (документа).
Вложения:
Последнее редактирование: 29 окт 2015 -
Благодарю
Собственно ответ получен, можно закрывать.
В статье описан один из способов интерактивной передачи параметров во внешнюю печатную форму для конфигураций на БСП
В некоторых случаях перед печатью документа требуется вручную указать какие-либо значения или параметры и передать в процедуру Печать() обработки. Для конфигураций линии УТ 10.3, БП 2.0 есть возможность передачи параметров, а также возможность без особых ухищрений вызвать форму обработки перед печатью с последующим выводом результата печати в штатное окно. В конфигурациях на основе Библиотеки стандартных процедур (Управление торговлей 11, Розница 2, УНФ, Бухгалтерия предприятия 3 и прочие) предусмотрены способы вызова команды печати в виде «ОткрытиеФормы» или «ВызовКлиентскогоМетода», но в этом случае вывод сформированного табличного документа необходимо реализовывать самостоятельно.
Рассмотрим один из способов передачи параметров для печати, не претендующий на оригинальность, так как используются штатные процедуры БСП.
В качестве примера выбрана печать простой накладной для УТ 11.0.9.15 — УТ 11.3 с возможностью печати со скидками или без них.
Создадим внешнюю обработку с основной формой «Форма» и реквизитом, например, «ПечататьСкидки», значение которого требуется передать в процедуру Печать() модуля обработки.
На вкладке «Параметры» укажем ключевые параметры «ДополнительнаяОбработкаСсылка» тип «СправочникСсылка.ДополнительныеОтчетыИОбработки», «ИдентификаторКоманды» тип «Строка», «ИмяФормы» тип «Строка», «ОбъектыНазначения» тип «Произвольный» (см. скриншот). Эти параметры передаются в обработку из конфигурации, а именно из диалога выбора внешних печатных форм, ключевыми в нашем случае они сделаны для упрощения обработки.
Далее определяем команду для печати или вывода печатной формы, навешиваем кнопку на форму.
Присваиваем команде обработчик действия (код следует поместить в модуль формы)
&НаСервереБезКонтекста
Функция ЕстьОбщийМодуль(НазваниеМодуля)
Возврат Метаданные.ОбщиеМодули.Найти(НазваниеМодуля) <> Неопределено;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьВерсиюБСП()
Возврат СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
КонецФункции
&НаКлиенте
Процедура ВыполнитьОткрытиеПечатнойФормы(Команда)
ВыполняемаяКоманда = Параметры;
СтандартнаяОбработка = Истина;
//Проверка на релиз БСП для универсальности.
//Общий модуль ДополнительныеОтчетыИОбработкиКлиентПереопределяемый существует в версии БСП выше 2.0.1.19
Если ЕстьОбщийМодуль(«ДополнительныеОтчетыИОбработкиКлиентПереопределяемый») Тогда
Выполнить(«ДополнительныеОтчетыИОбработкиКлиентПереопределяемый.ПередВыполнениемКомандыПечатиВнешнейПечатнойФормы(ВыполняемаяКоманда.ОбъектыНазначения, СтандартнаяОбработка);»);
КонецЕсли;
Отказ = Ложь;
//Проверка на релиз БСП для универсальности.
//Если необходимо печатать из непроведённых документов, удалите этот фрагмент
ВерсияБСП = ПолучитьВерсиюБСП();
Если СравнитьВерсии(ВерсияБСП, «2.2.3») >= 0 Тогда
Выполнить(«СписокДокументов = ВыполняемаяКоманда.ОбъектыНазначения;
|НепроведенныеДокументы = ОбщегоНазначенияВызовСервера.ПроверитьПроведенностьДокументов(СписокДокументов);
|Если СтандартнаяОбработка И НепроведенныеДокументы.Количество() > 0 Тогда Отказ = Истина; КонецЕсли;
|»);
Иначе
Выполнить(«Если СтандартнаяОбработка И Не УправлениеПечатьюКлиент.ПроверитьДокументыПроведены(ВыполняемаяКоманда.ОбъектыНазначения) Тогда Отказ = Истина; КонецЕсли;»);
КонецЕсли;
Если Не Отказ Тогда
//Определение и заполнение штатных параметров для общей формы ПечатьДокументов
ПараметрыОткрытия = Новый Структура(«ИсточникДанных, ПараметрыИсточника»);
ПараметрыОткрытия.ИсточникДанных = ВыполняемаяКоманда.ДополнительнаяОбработкаСсылка;
ПараметрыОткрытия.ПараметрыИсточника = Новый Структура(«ИдентификаторКоманды, ОбъектыНазначения»);
ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = ВыполняемаяКоманда.ИдентификаторКоманды;
//Здесь передаём наши значения в модуль обработки.
//Структура для передачи параметров или значений в процедуру Печать обработки
//В процедуре печати она будет доступна в качестве первого элемента массива МассивОбъектовНазначения
ДополнительныеПараметры = Новый Структура();
//Значения для передачи
ДополнительныеПараметры.Вставить(«ПечататьСкидки», ЭтаФорма.ПечататьСкидки);
//Еще какие-то значения
//ДополнительныеПараметры.Вставить(«РеквизитФормы1», РеквизитФормы1);
//ДополнительныеПараметры.Вставить(«РеквизитФормы2», РеквизитФормы2);
//В массиве ОбъектыНазначения будут содержаться ссылки на вызвавший форму объект (документ, справочник)
// и наши значения из реквизитов формы или обработки
ОбъектыНазначения = Новый СписокЗначений;
ОбъектыНазначения.Добавить(ДополнительныеПараметры);
//Ссылки на вызвавшие форму объекты
Для каждого ОбъектНазначения Из ВыполняемаяКоманда.ОбъектыНазначения Цикл
ОбъектыНазначения.Добавить(ОбъектНазначения);
КонецЦикла; //Для каждого ОбъектНазначения Из
ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
//Вывод сформированного табличного документа в штатную форму.
ОткрытьФорму(«ОбщаяФорма.ПечатьДокументов», ПараметрыОткрытия);
КонецЕсли;
ЭтаФорма.Закрыть();
КонецПроцедуры
В модуле обработки создаём экспортную процедуру Печать(), с параметрами согласно стандартам БСП для печати с использованием серверной процедуры примерно такого вида
// Экспортная процедура печати, вызываемая из основной программы
//
// Параметры:
// ВХОДЯЩИЕ:
// МассивОбъектовНазначения — Массив — список объектов ссылочного типа для печати документа
// Как правило, содержит один элемент с ссылкой на вызвавший форму объект (документ, справочник)
//
// ИСХОДЯЩИЕ:
// КоллекцияПечатныхФорм — ТаблицаЗначений — таблица сформированных табличных документов.
// Как правило, содержит одну строку с именем текущей печатной формы
// ОбъектыПечати — СписокЗначений — список объектов печати.
// ПараметрыВывода — Структура — Параметры сформированных табличных документов. Содержит поля:
// ДоступнаПечатьПоКомплектно — булево — по умолчанию Ложь
// ПолучательЭлектронногоПисьма
// ОтправительЭлектронногоПисьма
//
Процедура Печать(МассивОбъектовНазначения, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыВывода.ДоступнаПечатьПоКомплектно = Истина;
//Получаем переданные из формы параметры для печати документа
//Из формы МассивОбъектовНазначения передаётся как список значений, поэтому преобразуем его в массив
Если ТипЗнч(МассивОбъектовНазначения) = Тип(«СписокЗначений») Тогда
МассивОбъектовНазначения = МассивОбъектовНазначения.ВыгрузитьЗначения();
КонецЕсли;
//Присваиваем значение по умолчанию нашему параметру, переданному из формы
ПечататьСкидки = Истина;
//Смотрим, что содержится в первом элементе массива МассивОбъектовНазначения
//Если это структура, значит есть дополнительные параметры, почти как в прежних конфигурациях
Если ТипЗнч(МассивОбъектовНазначения[0]) = Тип(«Структура») Тогда
ДополнительныеПараметры = МассивОбъектовНазначения[0];
Если ДополнительныеПараметры.Свойство(«ПечататьСкидки») Тогда
ПечататьСкидки = ДополнительныеПараметры.ПечататьСкидки;
КонецЕсли;
//А теперь структуру из массива объектов можно удалить, больше она там не нужна
МассивОбъектовНазначения.Удалить(0);
КонецЕсли;
//Дальше используем штатный функционал БСП
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, «РасходнаяНакладнаяСДиалогомВыбора») Тогда
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, «РасходнаяНакладнаяСДиалогомВыбора», «Расходная накладная», СформироватьПечатнуюФормуНакладная(МассивОбъектовНазначения, ОбъектыПечати, ПечататьСкидки));
КонецЕсли;
Реализация функции СформироватьПечатнуюФормуНакладная() зависит от конкретной задачи и здесь не рассматривается.
В экспортной функции СведенияОВнешнейОбработке() необходимо указать использование команды печати «ОткрытиеФормы» с модификатором «ПечатьMXL».
Подробнее смотрите статью Внешние обработки и отчеты 1С:Предприятие 8.2 или прилагаемый пример обработки.
//Определяем команды для печати формы
ТаблицаКоманд = ПолучитьТаблицуКоманд();
ДобавитьКоманду(ТаблицаКоманд,
«Расходная накладная (с диалогом выбора)», // Представление команды в пользовательском интерфейсе
«РасходнаяНакладнаяСДиалогомВыбора», // Уникальный идентификатор команды
«ОткрытиеФормы», // Использование команды
Истина, // Показывать оповещение.
«ПечатьMXL» // Дополнительный модификатор команды.
);
В
Если всё сделано правильно, после регистрации внешней печатной формы в справочнике «ДополнительныеОбработки» она будет доступна из формы списка или документа в меню «Дополнительные печатные формы». После выбора из списка ВПФ на экране появится форма обработки.
Всё описанное выше изложено и прокомментировано в прилагаемой обработке.
Другой пример обработки можно скачать в Cпецификация на товар к договору с контрагентом — Бухгалтерия предприятия 3.0
Функция ПечатьСпецификации()
// выполняем запрос для получения данных о продавце и покупателе
ЗапросШапкаПодвал = Новый Запрос;
ЗапросШапкаПодвал.УстановитьПараметр(«ТекущийДокумент», СсылкаНаОбъект);
ЗапросШапкаПодвал.Текст =
«ВЫБРАТЬ
| РеализацияТоваровУслуг.Дата,
| РеализацияТоваровУслуг.ДоговорКонтрагента,
| РеализацияТоваровУслуг.Контрагент КАК Покупатель,
| РеализацияТоваровУслуг.Организация КАК Поставщик,
| РеализацияТоваровУслуг.СуммаДокумента,
| РеализацияТоваровУслуг.СуммаВключаетНДС,
| РеализацияТоваровУслуг.Сделка,
| ВЫБОР
| КОГДА РеализацияТоваровУслуг.БанковскийСчетОрганизации.Ссылка ЕСТЬ NULL
| ТОГДА РеализацияТоваровУслуг.Организация.ОсновнойБанковскийСчет
| ИНАЧЕ РеализацияТоваровУслуг.БанковскийСчетОрганизации
| КОНЕЦ КАК БанковскийСчетОрганизации,
| РеализацияТоваровУслуг.ДоговорКонтрагента.Дата КАК ДатаДоговора,
| РеализацияТоваровУслуг.Контрагент.ОсновноеКонтактноеЛицо как ДиректорП,
| РеализацияТоваровУслуг.Контрагент.ОсновноеКонтактноеЛицо.Должность как ДолжностьП
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ТекущийДокумент»;
Шапка = ЗапросШапкаПодвал.Выполнить().Выбрать();
Шапка.Следующий();
ДанныеПокупателя=УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Покупатель, Шапка.Дата);
ДанныеПоставщика=УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Поставщик, Шапка.Дата,, Шапка.БанковскийСчетОрганизации);
ТабДокумент = Новый ТабличныйДокумент;
//подключаем макет и области
Макет = ПолучитьМакет(«Макет»);
ОбластьШапкаОтчета = Макет.ПолучитьОбласть(«ШапкаОтчета»);
ОбластьСтрокиТаблицы = Макет.ПолучитьОбласть(«СтрокиТаблицы»);
ОбластьПодвалОтчета = Макет.ПолучитьОбласть(«ПодвалОтчета»);
// указываем значения параметров в шапке и выводим область шапки
ОбластьШапкаОтчета.параметры.ДатаДоговора=«от «+формат(шапка.ДатаДоговора,«ДЛФ=DD»);
ОбластьШапкаОтчета.параметры.ДатаПоставки=» «+формат(Шапка.Дата,«ДЛФ=DD»);
ТабДокумент.Вывести(ОбластьШапкаОтчета);
//выводими строки таблицы спецификации
//нас интересуют только товары , без услуг
товары = СсылкаНаОбъект.Товары;
н = 0;
//пробегаем по строкам табличной части товары документа Реализация товаров и услуг
Для каждого т Из товары Цикл
н=н+1;
//на всякий случай включим обработку на исключение ошибки (некорректные данные, деление на 0 итп)
попытка
ОбластьСтрокиТаблицы.параметры.номер=н;
ОбластьСтрокиТаблицы.параметры.продукция=т.Номенклатура;
ОбластьСтрокиТаблицы.параметры.ЕдИзм=т.ЕдиницаИзмерения;
ОбластьСтрокиТаблицы.параметры.КолВо=т.Количество;
ОбластьСтрокиТаблицы.параметры.Цена=окр((т.СуммаНДС+т.Сумма)/т.Количество,2);
ОбластьСтрокиТаблицы.параметры.Сумма=т.СуммаНДС+т.Сумма;
Исключение
Сообщить(ОписаниеОшибки())
КонецПопытки;
ТабДокумент.Вывести(ОбластьСтрокиТаблицы);
КонецЦикла;
// вывод подвала документа
ОбластьПодвалОтчета.параметры.ДатаПоставки=» «+формат(Шапка.Дата,«ДФ=dd.MM.yyyy»);
// данные поставщика
ОбластьПодвалОтчета.Параметры.НазваниеП=«»+ДанныеПоставщика.ПолноеНаименование;
ОбластьПодвалОтчета.Параметры.АдресП=«»+ДанныеПоставщика.ЮридическийАдрес;
ОбластьПодвалОтчета.Параметры.ИННП=«ИНН «+ДанныеПоставщика.ИНН+» КПП «+ ДанныеПоставщика.КПП;
ОбластьПодвалОтчета.Параметры.РСП=«р/с «+ДанныеПоставщика.НомерСчета;
ОбластьПодвалОтчета.Параметры.БанкП=«»+ДанныеПоставщика.Банк;
ОбластьПодвалОтчета.Параметры.БИКП=«БИК»+ДанныеПоставщика.Бик;
Руководители = РегламентированнаяОтчетность.ОтветственныеЛицаОрганизаций(Шапка.Поставщик, шапка.Дата,);
ОбластьПодвалОтчета.Параметры.ДолжностьП=«Генеральный директор «;
ОбластьПодвалОтчета.Параметры.ФИОП = «»+Руководители.Руководитель;
//данные покупателя
ОбластьПодвалОтчета.Параметры.Название=«»+ДанныеПокупателя.ПолноеНаименование;
ОбластьПодвалОтчета.Параметры.Адрес=«»+ДанныеПокупателя.ЮридическийАдрес;
ОбластьПодвалОтчета.Параметры.ИНН=«ИНН «+ДанныеПокупателя.ИНН+» КПП «+ ДанныеПоставщика.КПП;
ОбластьПодвалОтчета.Параметры.РС=«р/с «+ДанныеПокупателя.НомерСчета;
ОбластьПодвалОтчета.Параметры.Банк=«»+ДанныеПокупателя.Банк;
ОбластьПодвалОтчета.Параметры.БИК=«БИК «+ДанныеПокупателя.Бик;
ОбластьПодвалОтчета.Параметры.Должность=» «+Шапка.ДолжностьП;
ОбластьПодвалОтчета.Параметры.ФИО=» «+Шапка.ДиректорП;
ТабДокумент.Вывести(ОбластьПодвалОтчета);
//
УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, , , «Спецификация»);
КонецФункции
0 / 0 / 0 Регистрация: 07.10.2016 Сообщений: 29 |
|
1 |
|
Добавление реквизитов во внешнюю печатную форму10.03.2020, 14:57. Показов 683. Ответов 2
Добрый вечер!
0 |
3051 / 1998 / 524 Регистрация: 25.06.2009 Сообщений: 6,964 |
|
12.03.2020, 07:40 |
2 |
Az18_01_1993, мало информации.
1. описание конфигурации
0 |
Yulunga 1142 / 689 / 203 Регистрация: 22.04.2013 Сообщений: 5,160 Записей в блоге: 1 |
||||
12.03.2020, 10:49 |
3 |
|||
тип такого
0 |