Как правильно программно заполнинить адрес в 1С:ЗУП 3.1 при переносе данных?

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

При переносе данных из старых конфигураций (например, 1С:УПП 1.3) в современные решения на базе БСП (1С:ЗУП 3.1, 1С:ERP, 1С:КА) разработчики часто сталкиваются с проблемой: адрес записывается в базу, но в интерфейсе отображается некорректно или "горит красным". Разберем подробно, как решить эту задачу правильно.

Почему старый подход к заполнению адреса больше не работает?

В старых конфигурациях адрес хранился в виде простой строки или набора полей (Поле1...Поле9) в регистре сведений КонтактнаяИнформация. В современных версиях ЗУП 3.1 используется сложная структура JSON (ранее XML), которая жестко привязана к классификатору ФИАС (ГАР). Если вы просто запишете строку в поле представления, система не сможет "разобрать" её на составляющие (город, улица, дом), и такой адрес не будет приниматься регламентированной отчетностью.

Рассмотрим основные причины, по которым адрес в карточке физического лица может отображаться как ошибочный:

  1. Несоответствие формату JSON: Система ожидает строго определенную структуру полей.
  2. Отсутствие идентификаторов ФИАС: Если адрес не сопоставлен с уникальными GUID классификатора, он считается "введенным вручную".
  3. Устаревшие названия полей: Вместо привычных "Дом" и "Квартира" теперь используются более универсальные "Здание" и "Помещение".
  4. Регистр и кодировка: Система чувствительна к написанию страны (например, "РОССИЯ" вместо "Россия") и наличию обязательных полей.

Шаг 1: Подготовка структуры адреса

Для начала проанализируем, как правильно сформировать структуру для современного адреса. Вместо ручного перечисления полей 1, 2, 3, как это было в УПП, нам необходимо создать структуру, которую понимает общий модуль УправлениеКонтактнойИнформацией. Предварительно полезно изучить справочник методов конфигурации Зарплата и кадры 3.1, чтобы понимать принципы работы с объектами системы.

Посмотрим на пример формирования структуры, которая в дальнейшем будет преобразована в JSON:


мАдрес = Новый Структура();
мАдрес.Вставить("Страна", "Россия");
мАдрес.Вставить("Индекс", СокрЛП(Выборка.Поле1));
мАдрес.Вставить("СубъектРФ", СокрЛП(Выборка.Поле2));
мАдрес.Вставить("Город", СокрЛП(Выборка.Поле4));
мАдрес.Вставить("Улица", СокрЛП(Выборка.Поле6));
// В современных конфигурациях используем Здание и Помещение
мАдрес.Вставить("Здание", СокрЛП(Выборка.Поле7)); 
мАдрес.Вставить("Помещение", СокрЛП(Выборка.Поле9));

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

Шаг 2: Использование программных методов БСП

Самый надежный способ заполнить адрес — это использовать встроенные функции общего модуля УправлениеКонтактнойИнформацией. Чтобы быстрее сориентироваться в синтаксисе и доступных инструментах, можно использовать справочник по методам БСП (с примерами использования).

Проанализируем алгоритм записи:

  1. Используем функцию АдресИзПредставления, чтобы система попыталась сопоставить текстовую строку с ФИАС.
  2. Преобразуем полученную структуру в формат JSON.
  3. Записываем данные в объект или напрямую в регистр.

Рассмотрим пример кода, который автоматизирует этот процесс:


// 1. Формируем текстовое представление из старых полей
ТекстАдреса = "123456, " + Выборка.Поле2 + " г, " + Выборка.Поле4 + " г, " + Выборка.Поле6 + " ул, дом " + Выборка.Поле7;

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

// 3. Преобразуем в JSON для записи в поле "ЗначенияПолей"
АдресJSON = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(РезультатРазбора, ТекстАдреса, ТипАдреса);

// 4. Определяем вид контактной информации (например, Адрес по прописке)
ВидКИ = Справочники.ВидыКонтактнойИнформации.АдресПоПропискеФизическиеЛица;

// 5. Записываем информацию
УправлениеКонтактнойИнформацией.ЗаписатьКонтактнуюИнформацию(мФизЛицоСсылка, АдресJSON, ВидКИ, ТипАдреса);

Шаг 3: Тонкости работы с JSON и XML

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

Полезный совет: Для того чтобы понять эталонную структуру JSON, введите один адрес в ЗУП вручную через интерфейс, сохраните его, а затем посмотрите значение в регистре через консоль запросов. Это даст вам точный образец того, как должны называться ключи в структуре.

Разбор типичных ошибок при программном заполнении

Разберем ситуацию, когда адрес заполнен, но поля "Дом" или "Улица" пустые в форме. Это часто случается, если в структуре передаются пустые значения для типов строений. Для визуализации и проверки корректности данных удобно использовать адреса физических лиц по колонкам (город, улица, дом, квартира) для ЗУП, что позволит быстро увидеть, какие поля не "подцепились" системой.

В БСП для каждого элемента адреса (дом, корпус, квартира) существует два поля: Тип и Значение. Например:

Если вы просто передадите мАдрес.Вставить("Дом", "10"), система может не понять, что это именно "дом", а не "владение" или "строение". Поэтому рекомендуется использовать метод УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML (или JSON), передавая туда максимально полную структуру, либо доверять разбор функции АдресИзПредставления.

Итоговый алгоритм для переноса из УПП

Для эффективного переноса из УПП в ЗУП 3.1 мы рекомендуем следующий подход:

  1. Запрос к УПП: Получаем не только представление, но и все 9 полей контактной информации.
  2. Создание объекта Физлицо: Сначала записываем само физическое лицо, получаем его ссылку.
  3. Вызов модуля КИ: Используем метод ЗаписатьКонтактнуюИнформацию, передавая в него подготовленный JSON.
  4. Валидация: Если адрес критически важен для отчетности, после программной загрузки рекомендуется запустить регламентное задание по проверке адресов на соответствие ФИАС. При необходимости передать эти данные далее в бухгалтерию, используйте проверенный перенос данных физических лиц из ЗУП в БП.

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

← На главную