Почему не получается выбрать справочник при добавлении внешней обработки в 1С?

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

Часто при разработке дополнительных обработок для конфигураций на базе 1С:Комплексная автоматизация или Управление торговлей разработчики сталкиваются с тем, что нужный справочник отсутствует в списке выбора «Назначение» в справочнике Дополнительные отчеты и обработки. Давайте разберем, почему это происходит и как исправить ситуацию, не нарушая работу типовой конфигурации.

Понимание архитектуры механизмов БСП

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

Если справочника нет в выпадающем списке, значит, он не зарегистрирован в специальных Определяемых типах конфигурации. Именно эти типы определяют, какие объекты системы могут участвовать в подсистеме подключаемых команд.

Как система определяет объекты для команд

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

  1. Объекты, поддерживающие дополнительные команды, должны быть включены в Определяемый тип с именем, похожим на ОбъектСДополнительнымиКомандами.
  2. Для команд печати используется процедура ПриОпределенииОбъектовСКомандамиПечати в модуле УправлениеПечатьюПереопределяемый.

Если справочник Характеристики номенклатуры не был изначально заложен разработчиками 1С как объект, поддерживающий дополнительные команды, система его просто «не увидит» в стандартном интерфейсе настройки.

Разбор вариантов решения проблемы

Рассмотрим несколько подходов, которые помогут нам решить данную задачу, опираясь на лучшие практики 1С-разработки:

Вариант 1: Использование расширений конфигурации (Рекомендуемый)

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

В расширении мы можем переопределить соответствующие методы. Рассмотрим структуру действий:

  1. Создайте новое расширение с режимом совместимости, соответствующим основной конфигурации.
  2. Добавьте в расширение Определяемые типы, которые отвечают за дополнительные команды, и включите в них ваш справочник (например, Характеристики номенклатуры).
  3. В модуле УправлениеПечатьюПереопределяемый создайте обработчик события ПриОпределенииОбъектовСКомандамиПечати.

Пример логики, которую мы можем использовать в модуле расширения:


Процедура ПриОпределенииОбъектовСКомандамиПечати(СписокОбъектов) Экспорт
    // Добавляем наш справочник в список доступных для печати
    СписокОбъектов.Добавить(Метаданные.Справочники.ХарактеристикиНоменклатуры);
КонецПроцедуры

Вариант 2: Использование внешней обработки «по месту»

Если вы не хотите вносить изменения в структуру конфигурации даже через расширения, можно реализовать логику «Внешней обработки» без привязки к механизму Дополнительных отчетов и обработок. В этом случае:

Подводим итоги

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

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

← На главную