Внедрение подсистемы печати Библиотеки Стандартных Подсистем (БСП) в конфигурацию 1С:Управление нашей фирмой (УНФ) имеет ряд существенных отличий от стандартных инструкций, представленных на портале ИТС. Это связано с тем, что в УНФ механизмы печати тесно переплетены с подсистемой ПодключаемыеКоманды и имеют специфические модули-обертки. В этой статье мы разберем по шагам, как корректно подключить печать для нового документа, учитывая особенности этой конфигурации.
Разберем типичную ситуацию: вы создали новый документ, прописали в нем необходимые процедуры, но кнопка Печать так и не появилась в форме. Проанализируем причину. В УНФ механизм формирования команд печати жестко завязан на определяемые типы. Пока ваш документ не будет в них включен, ядро системы просто не будет «опрашивать» модуль менеджера вашего документа на предмет наличия команд печати.
Необходимо добавить ваш новый документ в следующие ОпределяемыеТипы:
Рассмотрим структуру модуля менеджера. В отличие от базовой БСП, где достаточно процедуры ДобавитьКомандыПечати, в УНФ важно соблюдать сигнатуру вызовов. Основная задача здесь — зарегистрировать команду и описать алгоритм формирования табличного документа. Для быстрого поиска и изучения процедур подсистем пригодится справочник по методам БСП с примерами использования.
Создадим процедуру регистрации команды. Обратите внимание на параметр УсловиеВидимости. В УНФ он часто используется для управления отображением кнопок в зависимости от состояния документа (например, только для проведенных):
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
КомандаПечати = КомандыПечати.Добавить();
КомандаПечати.Менеджер = "Документ.ВашНовыйДокумент";
КомандаПечати.Идентификатор = "ОсновнаяПечатнаяФорма";
КомандаПечати.Представление = НСтр("ru = 'Печать документа'");
КомандаПечати.ПроверкаПроведенияПередПечатью = Истина;
КомандаПечати.Порядок = 1;
КонецПроцедуры
Далее реализуем саму процедуру Печать, которая вызывается системой автоматически. Выясним, как правильно организовать формирование макета:
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ОсновнаяПечатнаяФорма") Тогда
ТабличныйДокумент = СформироватьПечатнуюФорму(МассивОбъектов, ОбъектыПечати);
УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
КоллекцияПечатныхФорм,
"ОсновнаяПечатнаяФорма",
НСтр("ru = 'Печать документа'"),
ТабличныйДокумент);
КонецЕсли;
КонецПроцедуры
Теперь проанализируем, почему в УНФ часто не работают стандартные вызовы ПриСозданииНаСервере из примеров ИТС. В УНФ работа с командами максимально автоматизирована через модуль ПодключаемыеКоманды. Посмотрим на обязательный код в модуле формы документа.
В процедуре ПриСозданииНаСервере необходимо добавить инициализацию команд:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Подключаемые команды
ПараметрыПодключенияКоманд = ПодключаемыеКоманды.ПараметрыПодключенияКоманд();
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПодключенияКоманд);
КонецПроцедуры
Для того чтобы команды печати отобразились в интерфейсе, на форме должна присутствовать группа (обычно это командная панель), в которую система будет динамически добавлять кнопки. Также критически важно добавить обработчик клиентского события для выполнения команды:
&НаКлиенте
Процедура ПодключаемыеКомандыВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
Выясним причину, по которой поиск некоторых процедур из документации БСП в коде УНФ не дает результатов. Дело в том, что УНФ использует собственные «прослойки» для управления печатью. Например, за общую логику печати в малом бизнесе отвечает общий модуль УправлениеПечатьюУНФ.
Если вам требуется добавить возможность отправки печатной формы по почте (что является стандартом для УНФ), вам придется интегрироваться с подсистемой РаботаСПочтовымиСообщениями. В типовой БСП это настраивается отдельно, но в УНФ это часто происходит через переопределяемые модули конфигурации.
Также стоит обратить внимание на модуль УправлениеПечатьюУНФПереопределяемый. Если вы планируете использовать общие макеты или специфические настройки факсимиле, регистрацию документа нужно проводить именно там.
После того как код написан и определяемые типы обновлены, система может всё равно не увидеть новую печатную форму. Проанализируем, почему так происходит. УНФ кэширует список доступных команд в справочнике Идентификаторы объектов метаданных.
Чтобы обновить кэш и заставить систему увидеть новые команды печати, рекомендуется выполнить одно из следующих действий:
/С ЗапуститьОбновлениеИнформационнойБазы.Если вы внедряете печать через расширение, помните, что аннотация &После для процедуры ДобавитьКомандыПечати в модуле менеджера — наиболее безопасный вариант. Рассмотрим пример:
&После("ДобавитьКомандыПечати")
Процедура Расш1_ДобавитьКомандыПечати(КомандыПечати)
// Добавление вашей команды
КонецПроцедуры
Важно помнить: если ваш документ полностью создан в расширении, убедитесь, что в свойствах расширения не стоит флаг Использовать основные роли, иначе могут возникнуть проблемы с правами доступа к объектам БСП, отвечающим за хранение настроек печати.
Следуя этой структуре, вы сможете успешно интегрировать печать в УНФ, избежав мучительного рефакторинга и поиска «пропавших» процедур. Если же требуется настроить вывод макетов без программирования и доработки метаданных, можно использовать конструктор печатных форм для объектов базы 1С.