Как добавить новый справочник в 1С без изменения основной конфигурации?

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

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

Понятие расширения конфигурации

Разберем, что же такое расширение. Это специальный объект метаданных, который подключается к основной конфигурации «сверху», не внося в неё физических изменений. Вы создаете отдельный слой, в котором описываете свои объекты, изменяете формы или дополняете логику программных модулей. Основная конфигурация при этом остается девственно чистой и продолжает числиться на полной поддержке.

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

Пошаговое создание справочника в расширении

Рассмотрим по шагам процесс добавления нового справочника в расширение:

  1. Откроем Конфигуратор и перейдем в меню Конфигурация — Расширения конфигурации.
  2. Создадим новое расширение (кнопка «Добавить»). При создании укажем имя (например, ДоработкаУчета) и назначение (обычно выбирается «Дополнение»).
  3. После создания расширения откроем его дерево объектов (двойным кликом по строке в списке расширений).
  4. Найдем в дереве расширения ветку Справочники, нажмем правую кнопку мыши и выберем Добавить.
  5. Зададим имя справочника. Обратите внимание, что платформа автоматически добавит префикс расширения к имени (например, прф_НовыйСправочник). Это критически важно для предотвращения конфликтов имен, если в будущем в основной конфигурации появится объект с таким же названием.
  6. Настроим реквизиты, табличные части и формы справочника точно так же, как в обычной конфигурации.

Особенности хранения данных и безопасный режим

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

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

Программное обращение к справочнику из расширения

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

Обращение к справочнику в коде выглядит стандартно:


НовыйЭлемент = Справочники.прф_НовыйСправочник.СоздатьЭлемент();
НовыйЭлемент.Наименование = "Тестовая запись";
НовыйЭлемент.Записать();

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

Использование заимствованных объектов

Часто новый справочник должен быть связан с существующими объектами основной конфигурации. В этом случае мы используем заимствование. Разберем пример: ваш новый справочник прф_ДополнительныеДанные должен иметь реквизит Контрагент, ссылающийся на стандартный справочник Контрагенты.

  1. В дереве основной конфигурации найдем справочник Контрагенты.
  2. Нажмем правую кнопку мыши и выберем Добавить в расширение.
  3. Теперь в дереве расширения появится ссылка на этот справочник.
  4. В своем новом справочнике в расширении создаем реквизит и указываем ему тип СправочникСсылка.Контрагенты.

Альтернативные способы (без расширений)

Если по каким-то причинам (например, из-за старой версии платформы) использование расширений невозможно, рассмотрим альтернативные пути реализации хранения данных без изменения структуры метаданных:

1. Дополнительные реквизиты и сведения (БСП)

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

2. Внешние источники данных

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

3. Использование универсальных справочников

В некоторых конфигурациях существуют справочники-контейнеры, такие как ЗначенияСвойствОбъектов или Классификаторы. Иногда программисты используют их для хранения произвольных списков данных, фильтруя их по определенным признакам (например, по владельцу или по специально выделенному «родителю»). Это не самый изящный способ с точки зрения архитектуры, но он рабочий, если конфигурация закрыта для изменений полностью.

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

← На главную