Почему пропадают записи из регистра «Дополнительные сведения» в 1С и как правильно подключить к нему свои объекты?

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

При доработке типовых конфигураций (например, 1С:Управление нашей фирмой, 1С:ERP, КА, УТ, БП) разработчики иногда решают использовать типовой регистр сведений ДополнительныеСведения для хранения собственных произвольных данных, чтобы не создавать новые объекты метаданных. Однако на практике возникает неприятная ситуация: добавленные вручную или простой программной записью наборы строк спустя некоторое время бесследно исчезают из регистра. Разберем детально, почему это происходит и как штатно подключить произвольные объекты к подсистеме свойств БСП.

Выясним причину: почему очищается регистр «Дополнительные сведения»

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

  1. Регламентные задания очистки и обновления данных. В БСП работают фоновые процедуры (в частности, в служебных модулях вроде УправлениеСвойствамиСлужебный), которые отслеживают соответствие записей в регистре элементам справочника НаборыДополнительныхРеквизитовИСведений. Если в регистре обнаруживаются записи по объектам или свойствам, которые не зарегистрированы в действующих наборах или для которых флаг Используется равен Ложь, такие записи классифицируются системой как потерявшие актуальность («осиротевшие») и автоматически очищаются.
  2. Подписки на события ссылочных объектов. За контроль целостности данных отвечает подписка на события (например, СвойстваПередУдалениемСсылочногоОбъекта). При манипуляциях с объектами или при проверке целостности ссылочной структуры система программно удаляет «хвосты» в регистре сведений.
  3. Штатная перезапись объектов. Если пользователь или фоновый обмен перезаписывает объект, для которого не настроен набор свойств, типовой механизм считывания и записи свойств может синхронизировать данные и сбросить незарегистрированные записи регистра в пустое состояние.

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

Решение 1. Штатное подключение объектов метаданных к подсистеме «Свойства» через расширение

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

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

Для чего нужна вкладка «Характеристики» у объекта метаданных

Часто в документации встречается требование настроить состав характеристик объекта на вкладке «Данные» в дереве метаданных. Разберем, зачем это нужно и обязательно ли это делать в расширении:

  1. Назначение механизма: Данная настройка связывает реквизит объекта с планом видов характеристик ДополнительныеРеквизитыИСведения и регистром ДополнительныеСведения. Это необходимо исключительно для построителя отчетов, динамических списков и Системы компоновки данных (СКД), чтобы пользователь мог обращаться к свойствам объекта «через точку» (например, [Объект.МоеСвойство]) без написания ручных левых соединений в запросах.
  2. Ограничение расширений: Платформа не позволяет через расширение конфигурировать вкладку «Характеристики» у заимствованных объектов основной конфигурации. Если ваша цель — только программная или интерактивная запись и чтение сведений через типовые формы БСП, настраивать характеристики в метаданных не требуется: подсистема будет полностью работоспособна и без этого шага.

Работа с дополнительными сведениями через программный интерфейс (API БСП)

Не следует записывать данные в регистр прямым созданием набора записей в обход типовых модулей. Для чтения и сохранения значений используем штатные процедуры и функции общего модуля УправлениеСвойствами.

Посмотрим на пример правильного чтения свойства:


// Получение значения конкретного дополнительного сведения
Значение = УправлениеСвойствами.ЗначениеСвойства(СсылкаНаОбъект, СвойствоСсылка);

Рассмотрим пример правильной программной записи сведений:


ТаблицаСвойств = Новый ТаблицаЗначений;
ТаблицаСвойств.Колонки.Добавить("Свойство");
ТаблицаСвойств.Колонки.Добавить("Значение");

НоваяСтрока = ТаблицаСвойств.Добавить();
НоваяСтрока.Свойство = СвойствоСсылка;
НоваяСтрока.Значение = НовоеЗначение;

// Запись свойств через менеджер БСП исключает очистку регламентными процедурами
УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаОбъект, ТаблицаСвойств);

Решение 2. Создание собственного регистра сведений в расширении

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

Преимущества такого подхода:

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

Таким образом, для интеграции с типовыми формами и отчетами подключаем объект к БСП через модуль УправлениеСвойствамиПереопределяемый и определяемый тип ВладелецДополнительныхСведений. Если же данные носят технический характер — создаем собственный регистр сведений в расширении.

← На главную