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