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

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

В современных конфигурациях 1С, таких как Управление торговлей 11, ERP 2 или Комплексная автоматизация 2, работа с адресными сведениями может вызвать затруднения у начинающих разработчиков. Часто при попытке найти реквизит ЮридическийАдрес непосредственно в карточке справочника Партнеры, мы обнаруживаем пустую вкладку или отсутствие нужных полей. Разберем подробно, где хранятся эти данные и как правильно к ним обращаться из программного кода.

Различие архитектуры: Партнер против Контрагента

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

  1. Партнеры — это объекты управленческого учета. Это может быть группа компаний или холдинг. В карточке партнера чаще всего хранится фактический адрес (где реально находится офис или склад).
  2. Контрагенты — это юридические лица (ООО, ИП). Именно к этому объекту привязаны юридический и почтовый адреса, необходимые для оформления официальных документов.

В документе Заказ клиента обычно присутствуют оба реквизита. Если нам требуется вывести адрес в печатную форму, сначала выясним, какой именно тип адреса нам нужен, и от какого объекта мы его будем получать.

Способ 1. Получение адреса через перебор табличной части

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


// Предположим, у нас есть ссылка на Контрагента
СсылкаНаОбъект = Объект.Контрагент;

Для Каждого СтрокаКИ Из СсылкаНаОбъект.КонтактнаяИнформация Цикл
    Если СтрокаКИ.Вид = Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента Тогда
        ЮридическийАдрес = СтрокаКИ.Представление;
        Прервать;
    КонецЕсли;
КонецЦикла;

В данном примере мы используем поле Представление, которое содержит уже сформированную строку адреса. Однако важно помнить, что обращение к предопределенным элементам справочника ВидыКонтактнойИнформации является "правилом хорошего тона", так как поиск по строковому наименованию вида адреса может привести к ошибкам при смене языка интерфейса или изменении наименования пользователем.

Способ 2. Использование запроса для получения данных

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	КонтрагентыКонтактнаяИнформация.Представление КАК ЮрАдрес
    |ИЗ
    |	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
    |ГДЕ
    |	КонтрагентыКонтактнаяИнформация.Ссылка = &Контрагент
    |	И КонтрагентыКонтактнаяИнформация.Вид = &ВидКИ";

Запрос.УстановитьПараметр("Контрагент", СсылкаНаКонтрагента);
Запрос.УстановитьПараметр("ВидКИ", Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);

РезультатЗапроса = Запрос.Выполнить();

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

Способ 3. Программный интерфейс (API) Библиотеки стандартных подсистем

Наиболее надежный и современный способ — использование функций общего модуля УправлениеКонтактнойИнформацией. Этот метод позволяет не задумываться о том, где именно в данной версии конфигурации лежат данные — в табличной части или в регистре. Рассмотрим пример получения представления адреса:


// Получаем фактический адрес партнера
ВидКИ = Справочники.ВидыКонтактнойИнформации.ФактАдресПартнера;
ОбъектСсылка = СсылкаНаПартнера;

АдресТекстом = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(ОбъектСсылка, ВидКИ);

Если нам нужно получить не просто строку, а разобранный адрес (индекс, город, улица отдельно), мы можем воспользоваться функцией, которая возвращает структуру или данные в формате JSON. Выясним, как получить структуру данных:


ДанныеАдреса = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(ОбъектСсылка, ВидКИ);
// Теперь в ДанныеАдреса содержатся поля, такие как Город, Улица, НомерДома и т.д.

Работа с форматом JSON в поле ЗначенияПолей

Проанализируем поле ЗначенияПолей, которое присутствует в табличной части КонтактнаяИнформация. В современных версиях 1С:Предприятие 8.3 представление адреса является лишь производным полем. Первичные данные хранятся в виде структурированного JSON. Если вам нужно вытащить только индекс или только регион, использование функций парсинга этого поля через УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВФорматеJSON() будет самым правильным решением.

Важные рекомендации

Таким образом, мы рассмотрели все основные способы получения адресных данных. Выбор конкретного метода зависит от вашей задачи: для разового получения адреса в форме документа подойдет API общего модуля, а для сложных отчетов лучше использовать прямые запросы к табличным частям или регистрам.

← На главную