Как найти и программно прочитать дополнительные реквизиты контрагента в 1С:ERP?

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

В процессе работы с конфигурацией 1С:ERP Управление предприятием многие разработчики сталкиваются с ситуацией, когда при добавлении дополнительного реквизита к справочнику Контрагенты он успешно отображается в пользовательском интерфейсе, но при попытке программного доступа к табличной части КонтрагентыДополнительныеРеквизиты мы обнаруживаем, что она пуста. Давайте подробно разберем, почему это происходит и как правильно работать с такими данными.

Выясним причину проблемы: почему табличная часть пуста?

Основная причина кроется в настройке Независимо вести партнеров и контрагентов. В 1С:ERP существует тесная связь между справочниками Партнеры и Контрагенты. Когда эта опция отключена (значение Ложь), архитектура системы настроена таким образом, что данные контрагентов фактически «мигрируют» в структуру партнеров. В этом случае, даже если вы добавили реквизит в набор свойств Контрагенты, система может физически хранить значения этого реквизита в табличной части справочника Партнеры.

Поэтому прямые запросы к табличной части КонтрагентыДополнительныеРеквизиты в ряде случаев не приносят результата. Это архитектурная особенность подсистемы БСП (Библиотека стандартных подсистем), которую важно учитывать при написании кода.

Рассмотрим правильные способы доступа к значениям

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

Способ №1: Использование функции УправлениеСвойствами.ЗначениеСвойства

Это самый универсальный и правильный способ чтения данных. Функция УправлениеСвойствами.ЗначениеСвойства самостоятельно определит, где именно хранятся данные (в табличной части объекта или в регистре сведений ДополнительныеСведения), и вернет нужное значение.

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


// Получаем ссылку на контрагента
СсылкаКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "XXXXXXXXXX");

// Находим свойство (доп. реквизит)
ДопРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("НазваниеВашегоРеквизита");

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

Этот метод защищает ваш алгоритм от изменений в структуре хранения данных, которые могут произойти при смене настроек или обновлении конфигурации.

Способ №2: Анализ через консоль запросов (для аналитики)

Если ваша задача — получить выборку данных для отчета, используйте запросы к регистру сведений ДополнительныеСведения. Это актуально, если данные были сохранены именно как «Дополнительные сведения». Обратите внимание на следующий пример:


ВЫБРАТЬ
    ДополнительныеСведения.Объект КАК Объект
ИЗ
    РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ГДЕ
    ДополнительныеСведения.Свойство.Имя = "ИмяВашегоСвойства"
    И ДополнительныеСведения.Значение = ИСТИНА

При использовании этого метода помните, что ДополнительныеСведения — это независимый регистр. Если же вам нужно анализировать именно Дополнительные реквизиты, и они привязаны к объекту, убедитесь, что вы проверяете таблицу того объекта, в котором они физически хранятся (в данном случае, возможно, справочник Партнеры).

Практические рекомендации

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

Подводя итог, можно сказать, что ключ к решению проблемы лежит в понимании того, что 1С:ERP — это сложная система, где данные могут храниться динамически. Используя предложенные методы БСП, вы обеспечите стабильность работы ваших обработок и отчетов в долгосрочной перспективе.

← На главную