Программно получить печатную форму документа БП 3.0 (БСП)

Каждый раз это настоящий квест! Потому что система БСП — это что-то анти-человеческое.

Приходится опираться не на логику, а брать в руки отладчик и искать точку, к которой можно привязаться:

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

В итоге функция для программной печати документа получилась такой:

Функция ПолучитьПечатнуюФормуДокумента(ТекДокумент) Экспорт
   
МД = Метаданные.НайтиПоТипу(ТипЗнч(ТекДокумент));
   
ТекВид = МД.Имя;

   
МассивОбъектов = Новый Массив();
   
МассивОбъектов.Добавить(ТекДокумент);
   
ПараметрыПечати = Новый Структура(); //»ДополнитьКомплектВнешнимиПечатнымиФормами» = ложь
   
ДопустимыеТипыОбъектовПечати = Неопределено;

    Если
ТекВид = «СчетНаОплатуПокупателю» Тогда
       
ИмяМенеджераПечати = «Обработка.ПечатьСчетаНаОплату»;
       
ИменаМакетов = «СчетЗаказ»;
    ИначеЕсли
ТекВид = «АктСверкиВзаиморасчетов» Тогда
       
ИмяМенеджераПечати = «Документ.АктСверкиВзаиморасчетов»;
       
ИменаМакетов = «АктСверки»;
    ИначеЕсли
ТекВид = «РеализацияТоваровУслуг» Тогда
       
ИмяМенеджераПечати = «Документ.РеализацияТоваровУслуг»;
       
ИменаМакетов = «Накладная»;
       
//ИменаМакетов = «Акт»;//Для акта
   
Иначе
        Возврат Неопределено;
    КонецЕсли;

   
ПечатныеФормы = УправлениеПечатью.СформироватьПечатныеФормы(ИмяМенеджераПечати, ИменаМакетов, МассивОбъектов, ПараметрыПечати, ДопустимыеТипыОбъектовПечати);

    Возврат
ПечатныеФормы.КоллекцияПечатныхФорм[0].ТабличныйДокумент;
КонецФункции

image_pdfimage_print

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Вам может также понравиться...

комментария 33

  1. naf2000:

    Непонятна ни постановка задачи, ни вывод

    • bob:

      Т.к кода несколько строк, то ни задача ни вывод пользы никому никакой не принесут. Если все 1С программирование это оперирование подобным обьемом кода, то информация ходящая про 1С программистов не далека от истины.

      В мире большого IT несколько строк это либо красивое решение алгоритмической проблемы, либо ответ на вопрос на stackoverflow.

      • Я пишу эти заметки о своей деятельности. Полезны они или нет? Не знаю. Если бы я загуглил и нашел способ печати из БП3, это сэкономило бы мне 15 минут. Я искал, не нашел ничего свежего, пришлось выяснять самому.

        • Иван:

          Очень полезно. Спасибо!

          А вышестоящему комментатору из «большого IT» хочется заметить, что и там бывает такооое, что ни в сказке сказать, ни пером описать.

      • Владимир:

        В мире 1С иногда, чтобы написать несколько работающих строк, приходится изучать несколько тысяч строк уже написанного кода разбросанного по множеству разных модулей. Ибо писали всё это такие же любители «настоящего» программирования… И да, польза этого кода в том, что он экономит кому час, а кому и пол дня работы…

        • да. верно…
          продуктивность 1сника надо измерять не в количестве написанных строк, а в количестве проанализированных строк.

          • Владимир:

            Именно. Кстати, спасибо! Мне тоже сэкономили немало времени…

          • я и себе этим экономлю много времени. Задачи часто повторяются. Тут заметки полезные как мне, так и другим.

    • Что именно не понятно в постановке и выводе.

  2. тыц:

    у нас в за конструкции вида [0] ругают

  3. Роман:

    подскажите как получить печатную форму документа ТранспортнаяНакладная? ут11.4
    Если ТекВид = «ТранспортнаяНакладная» Тогда
    ИмяМенеджераПечати = «Обработка.ПечатьТранспортнойНакладной»;
    //Макет = УправлениеПечатью.МакетПечатнойФормы(«Обработка.ПечатьТранспортнойНакладной.ПФ_MXL_ТранспортнаяНакладная_ru»);
    ИменаМакетов = «ПФ_MXL_ТранспортнаяНакладная_ru»;

    но чет не взлетает
    Спасибо

  4. Марина:

    Спасибо! Очень помогло, сэкономило время.

  5. Евгений:

    Очень помогло, спасибо.
    Подскажите , как сделать чтобы подпись и печать отображались ?
    Делаю отправку по почте и прилетает без подписи.

    • А если вручную печатную форму формируете, подпись и печать ставится?
      Думаю, надо отлаживать…

      • Евгений:

        Да, при ручном формировании ставится и отправляется,
        когда делаю массовую отправку , то в pdf попадает только макет.
        Читал где то, что необходимо использовать процедуру УправлениеПечатьюБП.ДополнитьДокументПодписьюИПечатью()
        а также УправлениеПечатьюБП.ДобавитьФаксимилеПриОтправке(),
        но не понял как это прикрутить.

        • Да. Наверное нужно. Поставьте точку останова в этих процедурах, посмотрите заходит ли в них 1С при печати.
          Только запускайте с ключом РежимОтладки или ловите фоновые задания. Если заходит, посмотрите с какими параметрами и передавайте такие же.
          Обратный инжиниринг — наше все.

      • Евгений:

        Подсказка:
        ИменаМакетов = «УниверсальныйПередаточныйДокументКомплект»

        так печатает УПД

  6. Евгений:

    И еще вопрос , при формировании акта реализации необходимо вместо накладной формировать АКТ УПД,
    попытался ставить Обработку.ПечатьУПД и соответственно макеты от туда, не идет.
    Какая то возможность существует это реализовать ?

  7. Виталий:

    А как получить печатную форму с печатью и подписью?

    • Вооружиться отладчиком. При формировании печатных форм переданные параметры указывают, что нужно вставлять печать и подпись. Их придется выявить и передавать в процедуру печати.

    • Владимир:

      Подпись и печать, если я правильно понимаю логику 1С, в типовых конфигурациях накладывается не в момент формирования макета :-(, а в момент показа макета пользователю. С одной стороны это позволяет не переформировывая макет показывать и скрывать в нем подписи в момент изменения значения галочки «Показать подписи». С другой после формирования макета для автоматической отправки печатных форм надо накладывать на него те самые подписи самому. Основной код по добавлению подписей и печати у 1С находится в общей форме «ПечатьДокументов», процедура «ДобавитьПодписьИПечать()» этот же код используется в общем модуле «УправлениеПечатьюБП» процедура «ДобавитьФаксимилеВПечатнуюФорму» в обоих случаях надо разбираться с передаваемыми параметрами. Мне показалось проще взять кусок процедуры «ДобавитьПодписьИПечать» (последние строки), передать туда уже сформированный макет и добавить пару дополнительных параметров: список значений «ОбъектыПечати» и структуру «ПараметрыВывода»…

  8. Андрей:

    Спасибо за подсказку. Очень помогло при печати документа из внешней обработки

  9. Борис:

    Спасибо. Хорошая подсказка.

  1. 08.08.2025

    […] Типовые печатные формы документов формирую по отработанной у меня методике. […]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *