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