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