При разработке универсальных интеграционных решений, внешних обработок и веб-сервисов часто возникает задача сохранять пользовательские параметры объектов, не снимая конфигурацию с типовой поддержки. Рассмотрим, в каких конфигурациях 1С присутствует механизм дополнительных реквизитов и сведений, как устроена эта подсистема в разных поколениях программ и как программно проверить ее доступность для конкретного документа или справочника.
Возможность добавления пользовательских свойств напрямую зависит от того, на какой архитектурной базе создано прикладное решение:
1С:ERP Управление предприятием, Комплексная автоматизация 2, Управление торговлей 11, Бухгалтерия предприятия 3.0, Управление нашей фирмой, Зарплата и управление персоналом 3.1. В них задействован план видов характеристик ДополнительныеРеквизитыИСведения.Управление торговлей 10.3, Управление производственным предприятием 1.3, Комплексная автоматизация 1.1, Бухгалтерия предприятия 2.0. В них подсистема БСП отсутствует, а механизм реализован через план видов характеристик СвойстваОбъектов и регистр сведений ЗначенияСвойствОбъектов. Для номенклатуры этот механизм присутствует практически во всех решениях, однако для документов состав доступных типов в измерении Объект регистра был существенно ограничен разработчиками типовых решений.В подсистеме свойств БСП реализовано два механизма, выбор между которыми критичен для универсальных обработок и сервисов обмена данными:
Хранятся непосредственно внутри самого объекта в его табличной части ДополнительныеРеквизиты (колонки Свойство, Значение, ТекстоваяСтрока). Запись реквизита требует модификации и перезаписи самого документа или элемента справочника. При этом срабатывают обработчики событий объекта, обновляется версия данных, а также проверяются даты запрета изменения. Если период документа закрыт, записать дополнительный реквизит без временного отключения запрета невозможно.
Хранятся вне объекта — в независимом непериодическом регистре сведений ДополнительныеСведения (измерения Объект, Свойство, ресурс Значение). Их можно считывать и записывать автономно, не перезаписывая сам документ или элемент справочника. Это исключает блокировки по дате запрета изменения документов и не увеличивает версию данных объекта, что делает дополнительные сведения предпочтительными для фоновых интеграций и веб-сервисов.
Важный нюанс: даже в конфигурациях на БСП состав реквизитов отличается. Например, в 1С:ERP и УТ 11 табличная часть ДополнительныеРеквизиты добавлена практически во все ключевые документы. В Бухгалтерии предприятия 3.0 для многих документов табличная часть доп. реквизитов отсутствует, и для них штатно поддерживаются только дополнительные сведения через независимый регистр.
Если требуется написать внешнюю обработку или коннектор, работающий на множестве клиентских баз без привязки к конкретному релизу, необходимо динамически проверять метаданные перед обращением к ним.
Разберем программную проверку доступности обоих механизмов:
// 1. Проверяем наличие табличной части доп. реквизитов у конкретного объекта
МетаданныеОбъекта = СсылкаНаОбъект.Метаданные();
ЕстьТабличнаяЧасть = (МетаданныеОбъекта.ТабличныеЧасти.Найти("ДополнительныеРеквизиты") <> Неопределено);
// 2. Проверяем поддержку механизма дополнительных сведений (БСП)
РегистрДопСведения = Метаданные.РегистрыСведений.Найти("ДополнительныеСведения");
ПоддерживаетДопСведения = (РегистрДопСведения <> Неопределено)
И РегистрДопСведения.Измерения.Объект.Тип.СодержитТип(ТипЗнч(СсылкаНаОбъект));
// 3. Проверяем поддержку старого механизма свойств (УТ 10.3 / УПП 1.3)
РегистрСтарыхСвойств = Метаданные.РегистрыСведений.Найти("ЗначенияСвойствОбъектов");
ПоддерживаетСтарыеСвойства = (РегистрСтарыхСвойств <> Неопределено)
И РегистрСтарыхСвойств.Измерения.Объект.Тип.СодержитТип(ТипЗнч(СсылкаНаОбъект));
В БСП за работу со свойствами отвечает общий модуль УправлениеСвойствами. Однако сигнатуры его процедур и состав параметров менялись между версиями подсистемы (1.x, 2.x, 3.x). Чтобы обеспечить максимальную совместимость, запись дополнительных сведений надежнее выполнять через прямое обращение к набору записей регистра сведений:
НаборЗаписей = РегистрыСведений.ДополнительныеСведения.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(СсылкаНаОбъект);
НаборЗаписей.Отбор.Свойство.Установить(ПланВидовХарактеристикСвойство);
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Объект = СсылкаНаОбъект;
НоваяЗапись.Свойство = ПланВидовХарактеристикСвойство;
НоваяЗапись.Значение = ТребуемоеЗначение;
НаборЗаписей.Записать();
Если клиентская база не содержит нужных типов в метаданных и конфигурацию нельзя изменять, проанализируем доступные альтернативы:
УникальныйИдентификатор документа 1С — Пользовательские реквизиты рекомендуется хранить на стороне внешней СУБД или интеграционного сервиса.