Как программно получить адрес контрагента в 1С:Бухгалтерия 8.3

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

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

Способ 1: Использование специализированных модулей Бухгалтерии предприятия

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

Проанализируем ситуацию: нам необходимо получить текстовое представление адреса, имея ссылку на контрагента и дату, на которую этот адрес актуален. Для этого мы можем воспользоваться функциями общего модуля БухгалтерскийУчетПереопределяемый и ОбщегоНазначенияБПВызовСервера.

Разберем по шагам пример кода:


// Сначала получаем структуру сведений о контрагенте (Юр/Физ лице)
// Реквизиты.Контрагент - это ссылка на объект СправочникСсылка.Контрагенты
// Реквизиты.Дата - дата, на которую запрашиваются сведения
СведенияОПокупателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(Реквизиты.Контрагент, Реквизиты.Дата);

// Теперь извлекаем конкретную строку адреса с помощью описания организации
// Второй параметр указывает, какой именно вид информации нам нужен (через запятую)
АдресСтрокой = ОбщегоНазначенияБПВызовСервера.ОписаниеОрганизации(СведенияОПокупателе, "ЮридическийАдрес,");

Выясним причину, почему этот метод хорош. Функция СведенияОЮрФизЛице собирает в одну структуру (объект Структура) все ключевые данные: ИНН, КПП, наименование и, конечно, адреса. Это избавляет нас от необходимости писать сложные запросы вручную. Для поиска других готовых функций конфигурации можно использовать справочник с примерами и описанием методов Бухгалтерии предприятия 3.0.

Способ 2: Универсальный метод БСП через «УправлениеКонтактнойИнформацией»

Современные конфигурации 1С строятся на БСП, и самым правильным с точки зрения архитектуры является использование модуля УправлениеКонтактнойИнформацией. Этот метод универсален и будет работать не только в Бухгалтерии, но и в ЗУП, УТ или ERP.

Рассмотрим подробнее получение текстового представления адреса. Допустим, нам нужен юридический адрес. В системе он представлен предопределенным элементом справочника ВидыКонтактнойИнформации.


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

// Если нужно получить адрес на конкретную дату (с учетом истории)
АдресНаДату = УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта(Контрагент, ВидИнформации, ТекущаяДата());

Важный момент: если вам нужен не юридический, а, например, почтовый или фактический адрес, достаточно просто заменить ссылку на вид контактной информации:

Способ 3: Получение структурированного адреса (разбор на составляющие)

Иногда простой строки недостаточно. Представим ситуацию, когда нам нужно отдельно извлечь индекс, город или улицу. В платформе 8.3 адрес хранится в виде XML или JSON внутри поля ЗначенияПолей. Вручную парсить эти строки — плохая практика. Посмотрим, как это сделать правильно.

Проанализируем работу с функциями, возвращающими структуру:


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

// Теперь мы можем обращаться к конкретным полям, если они заполнены
Индекс = ДанныеАдреса.Индекс;
Город = ДанныеАдреса.Город;
Улица = ДанныеАдреса.Улица;
Представление = ДанныеАдреса.Представление; // Это та самая полная строка

Этот способ позволяет гибко управлять данными, например, если вы создаете выгрузку в стороннюю систему, где требуется строгое разделение по полям.

Способ 4: Прямой запрос к регистру сведений

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

Рассмотрим пример запроса, который эффективно соберет данные:


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

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

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

Почему это важно: прямой запрос выполняется на сервере БД за один проход, в то время как обращение к общему модулю в цикле заставит систему выполнять сотни или тысячи отдельных запросов, что может "подвесить" сеанс пользователя.

Рекомендации по выбору метода

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

  1. Если задача стоит в выводе данных в печатную форму счета или акта в Бухгалтерии 3.0 — используйте методы из первого способа (ОбщегоНазначенияБП). Они гарантируют соблюдение всех бухгалтерских стандартов заполнения реквизитов.
  2. Для быстрого получения строки адреса в коде любой современной конфигурации используйте УправлениеКонтактнойИнформацией.ПредставлениеКонтактнойИнформацииОбъекта.
  3. Для интеграций и детального разбора адреса по полям — используйте функцию КонтактнаяИнформацияОбъекта.
  4. Для массовой обработки данных и отчетов — только прямой запрос к регистру сведений КонтактнаяИнформация.

Помните, что в 1С 8.3 адрес — это не просто строка, а сложный объект. Правильное использование встроенных инструментов БСП не только сокращает объем вашего кода, но и делает его более устойчивым к обновлениям конфигурации. Для быстрого изучения и подбора функций библиотеки подойдёт справочник по методам БСП с примерами использования.

← На главную