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