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