1с реквизит документа во внешнюю печатную форму

   AlexNF

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.*). В статье будут рассмотрены оба варианта.

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

Содержание

  1. Внешняя печатная форма в управляемом приложении
  2. Создание
  3. Подключение
  4. Внешняя печатная форма в обычном приложении
  5. Создание
  6. Подключение

Внешняя печатная форма в управляемом приложении

Начнем с того, что в настоящее время встречается чаще — с управляемого приложения. В тексте ниже будет приведен пример создания и подключения внешней печатной формы для документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 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».

Вкратце повторю основные этапы:

  1. Открываем вкладку «Администрирование» и переходим в раздел «Печатные формы, отчеты и обработки»;
  2. Устанавливаем галку «Дополнительные отчеты и обработки» и переходим в раздел «Дополнительные отчеты и обработки»;
  3. Жмем кнопку «Добавить из файла» и выбираем файл печатной формы;
  4. (Необязательно) Меняем наименование, комментарии, настраиваем видимость, изменяем размещение;
  5. Жмем кнопку «Записать и закрыть».

Внешняя печатная форма в обычном приложении

Теперь рассмотрим создание внешней печатной формы в обычном приложении — создадим печатную форму для  документа «Приходный кассовый ордер» (Бухгалтерия предприятия, редакция 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».

Основные этапы:

  1. Открываем справочник внешних печатных форм (Сервис->Дополнительные отчеты и обработки->Дополнительные внешние печатные формы);
  2. Добавляем новый элемент справочника и указываем файл печатной формы;
  3. Записываем элемент.
  4. (Необязательно) Меняем имеющиеся настройки — представления, отборы, дополнительные параметры и прочее.

На этом все, надеюсь, что эта статья была Вам полезна.

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Загрузка…

Рассмотрим написание простейшей внешней печатной формы в 1С 8.3 для управляемого приложения на примере конфигураций Бухгалтерия 3.0 и Управление торговлей 11 (данная печатная форма будет работать в обоих этих конфигурациях).

Например нам требуется написать внешнюю печатную форму к документу Реализация товаров и услуг: вывести основные данные документа, а так же из табличной части Товары: номенклатуру, цену, количество и сумму.

Создание внешней обработки

В конфигураторе 1C Предприятия 8 создаем внешнюю обработку (Файл->Новый->Внешняя обработка), задаем имя, добавляем реквизит Документ с типом ДокументСсылка.РеализацияТоваровУслуг, он не является обязательным для работы печатной формы, но пригодится нам для ее регистрации в базе.

создание пустой обработки в 1С 8.3

Создание макета печатной формы

Добавляем новый макет, тип макета оставляем Табличный документ. На макете создаем три области: Шапка, Данные и Подвал. Сделать это можно выделив нужное количество строк и нажав меню Таблица->Имена->Назначить имя (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). В параметры этой процедуры необходимо передать:

  • КоллекцияПечатныхФорм — таблица значений содержащая сформированные табличные документы;;
  • ИмяМакета — наименование команды печати;
  • СинонимМакета — наименование печатной формы;
  • ТабличныйДокумент — заполненный табличный документ.

Для параметров ИмяМакета и СинонимМакета используем уже созданные нами процедуры, которые использовались для заполнения сведений о внешней обработки. Таким образом процедура Печать будет выглядеть следующим образом:

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

    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
        КоллекцияПечатныхФорм,
        УказатьНаименованиеКомандыПечати(),
        УказатьНаименованиеВнешнейПечатнойФормы(),
        ПечатьФормы(МассивОбъектов));

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

Обратите внимание, что для заполнения параметра ТабличныйДокумент вызывается функция ПечатьФормы, которая описана выше.

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

Продолжение следует…

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

  1. Здравствуйте.

    Подскажите пожалуйста, как можно передать внешней печатной форме информацию, которая вводится пользователем на форме документа, но в самом документе при записи не сохраняется?

    Заранее благодарю.


  2. rshakiro

    Offline

    rshakiro
    Профессионал в 1С
    Команда форума

    Регистрация:
    17 мар 2011
    Сообщения:
    2.261
    Симпатии:
    145
    Баллы:
    104

    подробнее… Куда вводится? В реквизит документа!?


  3. bajiepka

    Offline

    bajiepka
    Профессионал в 1С

    Регистрация:
    26 сен 2014
    Сообщения:
    460
    Симпатии:
    31
    Баллы:
    54

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


  4. Ktyf

    Offline

    Ktyf
    Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    462
    Симпатии:
    12
    Баллы:
    29

    это если ВПФ видна только из формыОбъекта, Если же запускать из ФормыСписка — то по ссылке увидит только то, что сохранено в объекте.

  5. Вводится не в реквизит. На форме документа расположено поле ввода, данные там не из реквизита объекта, а свои так сказать

  6. Реквизиты формы.

    Работаете с «управляемыми формами» или с «обычными»
    Учетная система какая ? (УТ, УПП, БП…)

  7. Формы обычные, конфигурация УПП 1.2.14.1

  8. Если подключаете печатную форму как внешнюю, через справочник «Внешние печатные формы и обработки» то посмотрите «Help» по «F1» на этот справочник, там должно быть описание как подключить внешнюю пф, что должно быть в ее модуле

    — Объединение сообщений, 27 окт 2015

    В модуле должна быть процедурка :
    Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта)
    через табличное поле можно выйти на форму объекта из которой была вызвана ПФ, в случае когда владелец формы не доступен или не является формой

    Последнее редактирование: 27 окт 2015
  9. Либо я не то смотрю, либо одной из двух.

    Из справки для справочника «внешние обработки»:

    Внешняя печатная форма.

    Внешняя обработка, содержащая:

    • Необязательный реквизит «ДополнительныеПараметры» произвольного типа, которому будут передаваться дополнительные параметры примитивного типа в виде структуры.
    • Реквизит «СсылкаНаОбъект», в который при вызове будет передана ссылка на объект, для которого необходимо выполнить печать.
    • Функция «Печать()» — без параметров, возвращающая табличный документ.

    Также обработка может иметь в своем составе макет «Параметры_Авторегистрации», используемый для автоматического заполнения принадлежности печатной формы в справочнике «Внешние обработки» и состоящий из 2-х колонок («полное имя метаданного» и «имя табличной части»).

    А процедура Инициализировать(Объект,ИмяТабличнойЧасти,ТабличноеПолеОбъекта) — это вроде в обработке для заполнения ТЧ объекта, что не совсем то, что надо.

  10. Отлично, в функции Печать() получи владельца формы, если это форма то считай что добрался до реквизитов формы.
    Стоит полазить отладчиком по процедуре запуска печати, посмотреть на параметры доступные для обработки

  11. Глупый вопрос, но как получить владельца внешней печатной формы, если это внешняя обработка и экспортная функция Печать() находится в модуле объекта?

  12. Все проще, в обработке печати есть «СсылкаНаОбъект»
    далее получаете форму объекта, например форму документа «ФормаДокументаКОбработке = СсылкаНаОбъект.ПолучитьФорму(«ФормаДокумента»);»
    upload_2015-10-29_10-37-22.png

    во вложении простенький пример, форма документа была модифицирована (добавлены реквизиты формы)

    — Объединение сообщений, 29 окт 2015

    Есть прикол с реквизитами формы, если в форме нет алгоритма отслеживания изменения реквизитов формы, и они доступны для редактирования пользователям то в них можно «понавводить» всего, что угодно без изменения состояния объекта (документа).

    Вложения:

    Последнее редактирование: 29 окт 2015
  13. Благодарю

    Собственно ответ получен, можно закрывать.


1C-pro.ru - форум по 1С:Предприятию 7.7, 8.0, 8.1, 8.2, 8.3

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

В некоторых случаях перед печатью документа требуется вручную указать какие-либо значения или параметры и передать в процедуру Печать() обработки. Для конфигураций линии УТ 10.3, БП 2.0 есть возможность передачи параметров, а также возможность без особых ухищрений вызвать форму обработки перед печатью с последующим выводом результата печати в штатное окно. В конфигурациях на основе Библиотеки стандартных процедур (Управление торговлей 11, Розница 2, УНФ, Бухгалтерия предприятия 3 и прочие) предусмотрены способы вызова команды печати в виде «ОткрытиеФормы» или «ВызовКлиентскогоМетода», но в этом случае вывод сформированного табличного документа необходимо реализовывать самостоятельно.

Рассмотрим один из способов передачи параметров для печати, не претендующий на оригинальность, так как используются штатные процедуры БСП.

В качестве примера выбрана печать простой накладной для УТ 11.0.9.15 — УТ 11.3 с возможностью печати со скидками или без них.

Создадим внешнюю обработку с основной формой «Форма» и реквизитом, например, «ПечататьСкидки», значение которого требуется передать в процедуру Печать() модуля обработки.

Заготовка печатной формы.png

На вкладке «Параметры» укажем ключевые параметры «ДополнительнаяОбработкаСсылка» тип «СправочникСсылка.ДополнительныеОтчетыИОбработки», «ИдентификаторКоманды» тип «Строка», «ИмяФормы» тип «Строка», «ОбъектыНазначения» тип «Произвольный» (см. скриншот). Эти параметры передаются в обработку из конфигурации, а именно из диалога выбора внешних печатных форм, ключевыми в нашем случае они сделаны для упрощения обработки.

Параметры обработки

Ключевой параметр

Далее определяем команду для печати или вывода печатной формы, навешиваем кнопку на форму.

Команда Печать

Присваиваем команде обработчик действия (код следует поместить в модуль формы)

&НаСервереБезКонтекста
Функция ЕстьОбщийМодуль(НазваниеМодуля)
    Возврат
Метаданные.ОбщиеМодули.Найти(НазваниеМодуля) <> Неопределено;
КонецФункции

&НаСервереБезКонтекста
Функция ПолучитьВерсиюБСП()
    Возврат
СтандартныеПодсистемыСервер.ВерсияБиблиотеки();
КонецФункции

&НаКлиенте
Процедура ВыполнитьОткрытиеПечатнойФормы(Команда)

    ВыполняемаяКоманда = Параметры;

    СтандартнаяОбработка = Истина;
   
//Проверка на релиз БСП для универсальности.
    //Общий модуль ДополнительныеОтчетыИОбработкиКлиентПереопределяемый существует в версии БСП выше 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



Эксперт 1С

3051 / 1998 / 524

Регистрация: 25.06.2009

Сообщений: 6,964

12.03.2020, 07:40

2

Az18_01_1993, мало информации.
Добавьте

воды

1. описание конфигурации
2. код печатной формы или саму внешнюю обработку



0



Yulunga

1142 / 689 / 203

Регистрация: 22.04.2013

Сообщений: 5,160

Записей в блоге: 1

12.03.2020, 10:49

3

1C
1
этаформа.элементы.дата = объект.дата

тип такого



0



Понравилась статья? Поделить с друзьями:
  • Алабушевское кладбище часы работы администрации
  • 1с событие при изменении любого реквизита формы
  • Ак барс банк на ленинградском шоссе часы работы
  • Албо альфа банк бизнес онлайн телефон поддержки
  • 1с специалист решение задач по бизнес процессам