Как программно вывести документ на печать во внешнюю печатную форму из списка?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

Часто при разработке дополнительных возможностей в конфигурациях 1С, работающих на платформе 1С:Предприятие 8.3, возникает задача программного вызова печатной формы. Если у вас есть список ссылок на документы и зарегистрированная в системе внешняя печатная форма, вы можете вывести её на печать, не открывая форму самого документа. Давайте разберем, как это реализовать с помощью механизмов Библиотеки стандартных подсистем (БСП).

Основные принципы работы с печатью через БСП

Современные конфигурации 1С используют подсистему Печать. Если ваша внешняя печатная форма (ВПФ) корректно зарегистрирована в справочнике Дополнительные отчеты и обработки, она уже интегрирована в общую систему печати. Чтобы программно вызвать печать такой формы, нам не нужно обращаться к ней напрямую или пытаться копировать её код. Мы воспользуемся стандартной формой ОбщаяФорма.ПечатьДокументов.

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

Реализация вызова печатной формы: пошаговое руководство

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

Рассмотрим пример кода, который необходимо разместить в обработчике команды (например, по нажатию кнопки в форме списка):


&НаКлиенте
Процедура БланкПриемки(Команда)
    // Проверяем, что в списке есть выбранная строка
    Если НЕ Элементы.Заказы.ТекущиеДанные = Неопределено Тогда
        // Указываем идентификатор вашей ВПФ, заданный при регистрации
        Идентификатор = "682963d6-523b-11ea-82f3-a4bf01020939"; 
        
        СтруктураВнешнейПечатнойФормы = НайтиВнешнююПечатнуюФорму(Идентификатор);
        
        ОбъектыНазначения = Новый Массив;
        ОбъектыНазначения.Добавить(Элементы.Заказы.ТекущиеДанные.Ссылка);
        
        // Подготавливаем параметры для открытия общей формы печати
        ПараметрыОткрытия = Новый Структура("ИсточникДанных, ПараметрыИсточника");
        ПараметрыОткрытия.ИсточникДанных = СтруктураВнешнейПечатнойФормы.Ссылка;
        
        // Заполняем параметры источника: Идентификатор команды и массив объектов
        ПараметрыОткрытия.ПараметрыИсточника = Новый Структура("ИдентификаторКоманды, ОбъектыНазначения");
        ПараметрыОткрытия.ПараметрыИсточника.ИдентификаторКоманды = "БланкПриемкиЗаказаПоставщика";
        ПараметрыОткрытия.ПараметрыИсточника.ОбъектыНазначения = ОбъектыНазначения;
        
        // Открываем стандартную форму печати
        ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ПараметрыОткрытия);
    КонецЕсли;
КонецПроцедуры

Теперь рассмотрим серверную функцию, которая поможет нам получить ссылку на внешнюю обработку:


&НаСервереБезКонтекста
Функция НайтиВнешнююПечатнуюФорму(Идентификатор)
    // Получаем ссылку из справочника дополнительных отчетов и обработок
    СсылкаВнешнейПечатнойФормы = Справочники.ДополнительныеОтчетыИОбработки.ПолучитьСсылку(New УникальныйИдентификатор(Идентификатор));
    
    СтруктураВнешнейПечатнойФормы = Новый Структура;
    СтруктураВнешнейПечатнойФормы.Вставить("Ссылка", СсылкаВнешнейПечатнойФормы);
    СтруктураВнешнейПечатнойФормы.Вставить("Наименование", СсылкаВнешнейПечатнойФормы.Наименование);
    
    Возврат СтруктураВнешнейПечатнойФормы;
КонецФункции

Ключевые моменты, на которые стоит обратить внимание

  1. Массив объектов: Всегда передавайте документы в виде массива (ОбъектыНазначения). Даже если у вас всего один документ, БСП ожидает коллекцию, что позволяет системе корректно обрабатывать пакетную печать.
  2. Идентификатор команды: Это критически важный параметр. Он должен в точности совпадать со строкой, указанной в функции СведенияОВнешнейОбработке внутри модуля вашей внешней печатной формы.
  3. Инкапсуляция: Использование стандартного метода ОткрытьФорму("ОбщаяФорма.ПечатьДокументов", ...) является лучшей практикой. Это позволяет не зависеть от внутренней реализации печати внутри самой обработки и гарантирует поддержку функционала БСП (печать на принтер, сохранение в PDF, отправка по почте).
  4. Настройка ВПФ: Убедитесь, что внешняя печатная форма в справочнике Дополнительные отчеты и обработки настроена для использования в списке документов нужного типа. Если она там не отображается, возможно, в настройках обработки не указаны объекты назначения.

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

← На главную