При разработке в среде 1С:Предприятие начинающие специалисты часто сталкиваются с ситуацией, когда данные, видимые пользователю в интерфейсе, «исчезают» при попытке найти их в Конфигураторе. Одной из таких классических задач является получение составляющих адреса торговой точки (магазина). В современных конфигурациях, таких как 1С:Розница 2.3, работающих на базе Библиотеки стандартных подсистем (БСП), адреса хранятся не в обычных реквизитах, а в специализированных структурах. Рассмотрим подробно, как «добыть» эти данные программным путем.
Если мы откроем справочник Магазины в Конфигураторе, мы не увидим полей «Город» или «Улица». Это связано с тем, что в 1С используется универсальный механизм хранения контактной информации. Все адреса, телефоны и email-адреса хранятся в табличной части объекта (обычно она называется КонтактнаяИнформация) или в отдельном регистре сведений. Это позволяет хранить неограниченное количество видов информации для одного объекта.
Разберем по шагам, как получить доступ к этим данным, если мы знаем ссылку на магазин.
Для начала нам необходимо понять, где именно хранятся данные. В 1С:Розница 2.3 информация о фактическом адресе магазина находится в табличной части КонтактнаяИнформация справочника Магазины. Основная сложность заключается в том, что адрес там записан в виде специальной строки (формат JSON или XML), а не разложен по полям.
Проанализируем структуру строки JSON, которая хранится в поле Значение (или ЗначенияПолей в старых версиях):
{
"value": "Москва г, бульвар Симферопольский, д. 34, к. 34",
"type": "Адрес",
"country": "РОССИЯ",
"city": "Москва",
"street": "Симферопольский",
"houseNumber": "34"
}
Вместо того чтобы писать сложные запросы к табличным частям вручную, правильно будет использовать программный интерфейс БСП. Это гарантирует, что ваш код не сломается при обновлении программы. Для этого в системе существует общий модуль УправлениеКонтактнойИнформацией.
Рассмотрим пример получения данных:
// Определим магазин, адрес которого нам нужен
МагазинСсылка = Справочники.Магазины.НайтиПоНаименованию("Магазин №1");
// Подготовим отбор для получения конкретного вида адреса
Отбор = УправлениеКонтактнойИнформацией.ОтборКонтактнойИнформации();
Отбор.ТипыКонтактнойИнформации = Перечисления.ТипыКонтактнойИнформации.Адрес;
Отбор.ВидыКонтактнойИнформации = Справочники.ВидыКонтактнойИнформации.ФактАдресМагазина;
// Получаем строку с данными (она будет в формате JSON)
КонтактнаяИнформацияJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформация(МагазинСсылка, Отбор);
Теперь, когда у нас есть строка в формате JSON, нам нужно «выколоть» из нее нужные поля: город, улицу и дом. В последних версиях 1С для этого предусмотрены встроенные средства работы с JSON.
Выясним, как это сделать правильно:
Если ЗначениеЗаполнено(КонтактнаяИнформацияJSON) Тогда
// Используем стандартный парсер JSON
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(КонтактнаяИнформацияJSON);
АдресСтруктура = ПрочитатьJSON(Чтение);
// Извлекаем данные из структуры
Страна = АдресСтруктура.country;
Город = АдресСтруктура.city; // В некоторых случаях может быть в поле area
Улица = АдресСтруктура.street;
ТипУлицы = АдресСтруктура.streetType;
НомерДома = АдресСтруктура.houseNumber;
// Выведем результат для проверки
Сообщить("Город: " + Город + ", Улица: " + Улица + ", Дом: " + НомерДома);
КонецЕсли;
Проанализируем ситуацию более глубоко. С переходом 1С на новый формат адресов (ГАР), структура JSON может стать сложнее. Поле city может быть пустым, если магазин находится в небольшом населенном пункте (деревне или селе). В этом случае данные будут в поле settlement.
Для максимально корректного получения адреса в современном стиле БСП, рекомендуется использовать функцию УправлениеКонтактнойИнформацией.АдресИзJSON(). Она автоматически преобразует строку в удобную структуру 1С, учитывая все особенности классификатора.
Посмотрим на пример правильного вызова:
// Современный и безопасный способ разбора через БСП
СтруктураАдреса = УправлениеКонтактнойИнформацией.АдресИзJSON(КонтактнаяИнформацияJSON);
// Теперь мы можем обращаться к полям через точку
НазваниеГорода = СтруктураАдреса.Город;
НазваниеУлицы = СтруктураАдреса.Улица;
Дом = СтруктураАдреса.Дом;
Подведем итог нашей совместной работы по разбору адресов:
КонтактнаяИнформация.УправлениеКонтактнойИнформацией. Это стандарт де-факто для профессиональной разработки на платформе 1С 8.3.Город пустое, возможно, нужно взять данные из поля НаселенныйПункт.Применяя эти шаги, вы сможете корректно выводить адреса магазинов в печатные формы, отчеты или передавать их во внешние системы через API.