Почему нельзя прикрепить внешнюю печатную форму к справочнику спецификаций в 1С 3.0 и как это обойти?

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

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

Выясним причину такого поведения платформы и типовой конфигурации, а также рассмотрим рабочие способы вывода спецификации на печать.

Причина проблемы: архитектура подсистемы печати БСП

Проанализируем, как устроен механизм подключения внешних печатных форм. В типовых решениях 1С объект конфигурации становится доступным для назначения ВПФ не автоматически по факту своего существования в метаданных, а только при выполнении ряда условий интеграции с подсистемой Печать:

  1. Объект должен быть явным образом зарегистрирован в перечне объектов с командами печати в процедуре ПриОпределенииОбъектовСКомандамиПечати общего модуля УправлениеПечатьюПереопределяемый.
  2. В модуле менеджера объекта должна присутствовать экспортная процедура ДобавитьКомандыПечати(КомандыПечати).
  3. В формах объекта и списка должны быть вызваны стандартные методы БСП для формирования динамических команд печати в командной панели.

Справочник СпецификацииНоменклатуры в типовой конфигурации «Бухгалтерия предприятия» не подключен к механизму печати БСП. По этой причине подсистема регистрации дополнительных обработок исключает его из диалога выбора назначения, и стандартная кнопка «Печать» на форме элемента не формируется.

Вариант 1. Размещение печатной формы в связанных объектах

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

  1. Справочник «Номенклатура»: регистрируем ВПФ для справочника Номенклатура. В коде формирования печатной формы по переданной ссылке на номенклатуру программно находим основную или действующую спецификацию и выводим её состав в табличный документ.
  2. Производственные документы: подключаем ВПФ к документам выпуска (например, Отчет производства за смену). В обработке получаем строки табличной части документа, извлекаем спецификации и формируем сводный печатный бланк.

Вариант 2. Использование типа «Дополнительная обработка»

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

  1. В модуле объекта внешней обработки в экспортной функции СведенияОВнешнейОбработке() указываем вид ДополнительнаяОбработка вместо ПечатнаяФорма.
  2. Создаем собственную форму обработки, на которой размещаем поле выбора спецификации (тип СправочникСсылка.СпецификацииНоменклатуры) и кнопку формирования макета.
  3. Регистрируем обработку в информационной базе с размещением в разделах Производство или Справочники. Пользователь сможет открывать форму и выводить на печать любую выбранную спецификацию.

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


Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Истина;
    ПараметрыРегистрации.Информация = "Печать спецификации номенклатуры";
    
    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = "Печать спецификации";
    Команда.Идентификатор = "ПечатьСпецификации";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
    Команда.ПоказыватьОповещение = Ложь;
    
    Возврат ПараметрыРегистрации;

КонецФункции

Вариант 3. Подключение справочника к БСП через расширение

Если принципиально важно получить стандартное выпадающее меню «Печать» непосредственно в карточке спецификации, применим механизм расширения конфигурации (без снятия основной базы с поддержки):

  1. Создаем расширение конфигурации и заимствуем общий модуль УправлениеПечатьюПереопределяемый.
  2. В расширении дополняем процедуру ПриОпределенииОбъектовСКомандамиПечати строкой добавления справочника спецификаций в массив объектов с командами печати:
    
    &Вместо("ПриОпределенииОбъектовСКомандамиПечати")
    Процедура Расш1_ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов)
        ПродолжитьВызов(СписокОбъектов);
        СписокОбъектов.Добавить(Метаданные.Справочники.СпецификацииНоменклатуры);
    КонецПроцедуры
    
  3. Заимствуем справочник СпецификацииНоменклатуры и в его модуле менеджера определяем экспортную процедуру ДобавитьКомандыПечати(КомандыПечати).
  4. Заимствуем формы справочника и внедряем вызов стандартных процедур БСП для формирования командной панели.

После применения такого расширения справочник СпецификацииНоменклатуры появится в списке назначения при добавлении внешних печатных форм через стандартный интерфейс БСП.

← На главную