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