Почему новый документ не попадает в список размещения дополнительной обработки и как это исправить

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

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

Проверка программного интерфейса в модуле обработки

Первым делом проанализируем код самой внешней обработки. В модуле объекта обязательно должна присутствовать экспортная функция СведенияОВнешнейОбработке. Именно она сообщает системе, к каким объектам привязывается обработка и какие команды она выполняет. Рассмотрим пример корректного заполнения структуры регистрации для создания связанных объектов — поможет автоматизация создания документов на основании для БСП.


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

Если в коде допущена ошибка в строке Документ.аг_Букинг (например, опечатка в имени), система не сможет сопоставить обработку с метаданными. Чтобы минимизировать ошибки в структуре, лучше использовать шаблон дополнительной обработки с системой хранения настроек. Однако, даже если код идеален, документ может не появиться в списке размещения из-за ограничений в самой конфигурации.

Настройка определяемых типов — ключевой этап

Проанализируем архитектуру БСП. Механизм дополнительных отчетов и обработок работает не со всеми объектами конфигурации подряд, а только с теми, которые включены в специальные Определяемые типы. Это сделано для оптимизации производительности системы. Если вы создали новый документ аг_Букинг, он «чужой» для системы БСП, пока вы не укажете обратное.

Выясним, в какие типы нужно добавить наш документ (для анализа зависимостей удобно использовать Analyzer 1C):

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

Важно: После внесения изменений в определяемые типы необходимо обновить конфигурацию базы данных (на этом этапе часто требуется отладка внешних обработок). Только после этого справочник назначений увидит новый объект.

Включение документа в подсистемы

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

Программный вызов в форме документа

Даже если мы успешно зарегистрировали обработку и указали размещение, кнопка в форме документа может не появиться. Посмотрим на причину: в управляемых формах БСП выводит команды динамически. Чтобы это произошло, в модуле формы документа должна быть прописана интеграция с подсистемой.

Разберем, какой код должен присутствовать в модуле формы документа:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    // Стандартные вызовы БСП для подключения команд
    ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
КонецПроцедуры

Без вызова ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма) система не просканирует доступные внешние команды для данного объекта при открытии формы, и командная панель останется пустой.

Обновление кэша и регистрация в реестре БСП

Иногда, даже после всех правок в метаданных, список размещения остается прежним. Это происходит из-за кэширования данных подсистемой. Выясним, как принудительно обновить информацию:

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

Управление отображением: перенос команды из подменю

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

По умолчанию БСП группирует все внешние команды одного вида. Чтобы команда выводилась в «корень» меню, можно попробовать изменить вид обработки на Печать (если это логически допустимо) — для печатных форм в БСП предусмотрено более гибкое управление видимостью. Также проверьте настройки в карточке обработки: нажмите кнопку Настроить видимость. Там можно вручную указать, должна ли команда отображаться в подменю или быть доступной сразу.

Резюмируем наши действия: сначала проверяем СведенияОВнешнейОбработке, затем обязательно добавляем документ в определяемый тип ОбъектСДополнительнымиКомандами, проверяем подсистемы и не забываем про вызов в процедуре ПриСозданииНаСервере модуля формы. Такой комплексный подход гарантирует успешное подключение внешнего функционала к любому новому объекту конфигурации.

← На главную