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

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

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

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

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

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

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

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

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

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

fixin

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

Читайте также:

комментариев 26

  1. naf2000:

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

    • bob:

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

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

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

        • Иван:

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

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

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

  2. тыц:

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

  3. Роман:

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

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

  4. Марина:

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

  5. Евгений:

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

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

      • Евгений:

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

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

      • Евгений:

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

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

  6. Евгений:

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

  7. Виталий:

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

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

  8. Андрей:

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

  9. Борис:

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

Добавить комментарий для Марина Отменить ответ

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