При переносе данных из старых конфигураций (например, 1С:УПП 1.3) в современные решения на базе БСП (1С:ЗУП 3.1, 1С:ERP, 1С:КА) разработчики часто сталкиваются с проблемой: адрес записывается в базу, но в интерфейсе отображается некорректно или "горит красным". Разберем подробно, как решить эту задачу правильно.
В старых конфигурациях адрес хранился в виде простой строки или набора полей (Поле1...Поле9) в регистре сведений КонтактнаяИнформация. В современных версиях ЗУП 3.1 используется сложная структура JSON (ранее XML), которая жестко привязана к классификатору ФИАС (ГАР). Если вы просто запишете строку в поле представления, система не сможет "разобрать" её на составляющие (город, улица, дом), и такой адрес не будет приниматься регламентированной отчетностью.
Рассмотрим основные причины, по которым адрес в карточке физического лица может отображаться как ошибочный:
Для начала проанализируем, как правильно сформировать структуру для современного адреса. Вместо ручного перечисления полей 1, 2, 3, как это было в УПП, нам необходимо создать структуру, которую понимает общий модуль УправлениеКонтактнойИнформацией. Предварительно полезно изучить справочник методов конфигурации Зарплата и кадры 3.1, чтобы понимать принципы работы с объектами системы.
Посмотрим на пример формирования структуры, которая в дальнейшем будет преобразована в JSON:
мАдрес = Новый Структура();
мАдрес.Вставить("Страна", "Россия");
мАдрес.Вставить("Индекс", СокрЛП(Выборка.Поле1));
мАдрес.Вставить("СубъектРФ", СокрЛП(Выборка.Поле2));
мАдрес.Вставить("Город", СокрЛП(Выборка.Поле4));
мАдрес.Вставить("Улица", СокрЛП(Выборка.Поле6));
// В современных конфигурациях используем Здание и Помещение
мАдрес.Вставить("Здание", СокрЛП(Выборка.Поле7));
мАдрес.Вставить("Помещение", СокрЛП(Выборка.Поле9));
Важно помнить, что если вы переносите данные из УПП, где адрес уже разложен по полям, лучше использовать эти поля для создания Представления, а затем позволить системе самой попробовать распознать их через классификатор.
Самый надежный способ заполнить адрес — это использовать встроенные функции общего модуля УправлениеКонтактнойИнформацией. Чтобы быстрее сориентироваться в синтаксисе и доступных инструментах, можно использовать справочник по методам БСП (с примерами использования).
Проанализируем алгоритм записи:
АдресИзПредставления, чтобы система попыталась сопоставить текстовую строку с ФИАС.Рассмотрим пример кода, который автоматизирует этот процесс:
// 1. Формируем текстовое представление из старых полей
ТекстАдреса = "123456, " + Выборка.Поле2 + " г, " + Выборка.Поле4 + " г, " + Выборка.Поле6 + " ул, дом " + Выборка.Поле7;
// 2. Пытаемся получить структуру адреса по ФИАС
// Функция вернет структуру, заполненную по правилам БСП
ТипАдреса = Перечисления.ТипыКонтактнойИнформации.Адрес;
РезультатРазбора = УправлениеКонтактнойИнформацией.АдресИзПредставления(ТекстАдреса, , ТипАдреса);
// 3. Преобразуем в JSON для записи в поле "ЗначенияПолей"
АдресJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(РезультатРазбора, ТекстАдреса, ТипАдреса);
// 4. Определяем вид контактной информации (например, Адрес по прописке)
ВидКИ = Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица;
// 5. Записываем информацию
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(мФизЛицоСсылка, АдресJSON, ВидКИ, ТипАдреса);
В актуальных версиях ЗУП 3.1 основным форматом является JSON. Хотя методы работы с XML все еще присутствуют в коде для обратной совместимости, при сохранении в базу система все равно конвертирует их во внутреннее представление. Если в вашем коде адрес получается "красным", проверьте содержимое колонки ЗначенияПолей в регистре сведений КонтактнаяИнформация.
Полезный совет: Для того чтобы понять эталонную структуру JSON, введите один адрес в ЗУП вручную через интерфейс, сохраните его, а затем посмотрите значение в регистре через консоль запросов. Это даст вам точный образец того, как должны называться ключи в структуре.
Разберем ситуацию, когда адрес заполнен, но поля "Дом" или "Улица" пустые в форме. Это часто случается, если в структуре передаются пустые значения для типов строений. Для визуализации и проверки корректности данных удобно использовать адреса физических лиц по колонкам (город, улица, дом, квартира) для ЗУП, что позволит быстро увидеть, какие поля не "подцепились" системой.
В БСП для каждого элемента адреса (дом, корпус, квартира) существует два поля: Тип и Значение. Например:
ТипЗдания — "д" (или идентификатор из классификатора)НомерЗдания — "10"ТипПомещения — "кв"НомерПомещения — "15"Если вы просто передадите мАдрес.Вставить("Дом", "10"), система может не понять, что это именно "дом", а не "владение" или "строение". Поэтому рекомендуется использовать метод УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML (или JSON), передавая туда максимально полную структуру, либо доверять разбор функции АдресИзПредставления.
Для эффективного переноса из УПП в ЗУП 3.1 мы рекомендуем следующий подход:
ЗаписатьКонтактнуюИнформацию, передавая в него подготовленный JSON.Помните, что использование метода ДобавитьКонтактнуюИнформацию совместно с ЗаписатьКонтактнуюИнформацию (как в исходном вопросе) избыточно и может привести к ошибкам блокировок. Достаточно одного вызова Записать..., так как он берет на себя всю логику обновления существующих записей или добавления новых.