Как программно получить адрес магазина (город, улицу, дом) в 1С:Розница 2.3?

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

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

Почему адрес не виден как обычный реквизит?

Если мы откроем справочник Магазины в Конфигураторе, мы не увидим полей «Город» или «Улица». Это связано с тем, что в 1С используется универсальный механизм хранения контактной информации. Все адреса, телефоны и email-адреса хранятся в табличной части объекта (обычно она называется КонтактнаяИнформация) или в отдельном регистре сведений. Это позволяет хранить неограниченное количество видов информации для одного объекта.

Разберем по шагам, как получить доступ к этим данным, если мы знаем ссылку на магазин.

Шаг 1. Поиск данных в объекте

Для начала нам необходимо понять, где именно хранятся данные. В 1С:Розница 2.3 информация о фактическом адресе магазина находится в табличной части КонтактнаяИнформация справочника Магазины. Основная сложность заключается в том, что адрес там записан в виде специальной строки (формат JSON или XML), а не разложен по полям.

Проанализируем структуру строки JSON, которая хранится в поле Значение (или ЗначенияПолей в старых версиях):


{
  "value": "Москва г, бульвар Симферопольский, д. 34, к. 34",
  "type": "Адрес",
  "country": "РОССИЯ",
  "city": "Москва",
  "street": "Симферопольский",
  "houseNumber": "34"
}

Шаг 2. Получение строки контактной информации через БСП

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

Рассмотрим пример получения данных:


// Определим магазин, адрес которого нам нужен
МагазинСсылка = Справочники.Магазины.НайтиПоНаименованию("Магазин №1");

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

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

Шаг 3. Разбор (парсинг) адреса на составляющие

Теперь, когда у нас есть строка в формате JSON, нам нужно «выколоть» из нее нужные поля: город, улицу и дом. В последних версиях 1С для этого предусмотрены встроенные средства работы с JSON.

Выясним, как это сделать правильно:


Если ЗначениеЗаполнено(КонтактнаяИнформацияJSON) Тогда
    // Используем стандартный парсер JSON
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(КонтактнаяИнформацияJSON);
    АдресСтруктура = ПрочитатьJSON(Чтение);

    // Извлекаем данные из структуры
    Страна    = АдресСтруктура.country;
    Город     = АдресСтруктура.city; // В некоторых случаях может быть в поле area
    Улица     = АдресСтруктура.street;
    ТипУлицы  = АдресСтруктура.streetType;
    НомерДома = АдресСтруктура.houseNumber;
    
    // Выведем результат для проверки
    Сообщить("Город: " + Город + ", Улица: " + Улица + ", Дом: " + НомерДома);
КонецЕсли;

Важные нюансы при работе с классификатором ГАР (ФИАС)

Проанализируем ситуацию более глубоко. С переходом 1С на новый формат адресов (ГАР), структура JSON может стать сложнее. Поле city может быть пустым, если магазин находится в небольшом населенном пункте (деревне или селе). В этом случае данные будут в поле settlement.

Для максимально корректного получения адреса в современном стиле БСП, рекомендуется использовать функцию УправлениеКонтактнойИнформацией.АдресИзJSON(). Она автоматически преобразует строку в удобную структуру 1С, учитывая все особенности классификатора.

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


// Современный и безопасный способ разбора через БСП
СтруктураАдреса = УправлениеКонтактнойИнформацией.АдресИзJSON(КонтактнаяИнформацияJSON);

// Теперь мы можем обращаться к полям через точку
НазваниеГорода = СтруктураАдреса.Город;
НазваниеУлицы  = СтруктураАдреса.Улица;
Дом            = СтруктураАдреса.Дом;

Итоги и рекомендации

Подведем итог нашей совместной работы по разбору адресов:

  1. Не ищите поля адреса в реквизитах справочника. Они спрятаны в табличной части КонтактнаяИнформация.
  2. Используйте функции общего модуля УправлениеКонтактнойИнформацией. Это стандарт де-факто для профессиональной разработки на платформе 1С 8.3.
  3. Всегда проверяйте формат хранения. Если вы работаете с очень старой базой, данные могут быть в XML. Если база современная — это JSON.
  4. Помните об иерархии ГАР. При программном получении «Города» всегда делайте проверку: если поле Город пустое, возможно, нужно взять данные из поля НаселенныйПункт.

Применяя эти шаги, вы сможете корректно выводить адреса магазинов в печатные формы, отчеты или передавать их во внешние системы через API.

← На главную