При программном создании или обновлении контрагентов в 1С:УНФ часто возникает задача добавить адрес. Многие начинающие разработчики сталкиваются с проблемой: простая запись адреса в виде строки в соответствующее поле не работает или работает некорректно. Давайте вместе разберемся, почему так происходит и как правильно решить эту задачу, используя стандартные механизмы платформы.
Выясним причину проблемы. Ключевая особенность хранения контактной информации в типовых конфигурациях 1С, включая УНФ, заключается в том, что она хранится не в виде простой строки, а в структурированном формате XML. Это позволяет системе корректно разбирать адрес на составные части (индекс, город, улица) и использовать его в печатных формах и отчетах. Прямая запись строки "г. Москва, ул. Ленина, д. 1" в поле адреса приведет к ошибке, так как система ожидает XML-данные.
Рассмотрим несколько подходов к решению этой задачи.
Это самый правильный и рекомендуемый способ, который обеспечивает совместимость и корректность данных. Он заключается в использовании готовых функций и процедур из общего модуля УправлениеКонтактнойИнформацией. Разберем по шагам, как это сделать.
Подготовка структуры с данными адреса.
Сначала нам нужно создать структуру, которая будет содержать все части адреса. Для этого идеально подходит функция ОписаниеНовойКонтактнойИнформации, которой мы сообщаем, что хотим создать именно "Адрес".
// Создаем структуру для нового адреса
СтруктураАдреса = УправлениеКонтактнойИнформацией.ОписаниеНовойКонтактнойИнформации("Адрес");
Заполнение полей структуры.
Теперь, когда у нас есть "шаблон" адреса, заполним его конкретными значениями. Поля структуры интуитивно понятны.
// Заполняем поля адреса
ЗаполнитьЗначенияСвойств(СтруктураАдреса, Новый Структура(
"Страна, Регион, Город, Улица, Дом, Корпус",
"РОССИЯ", "77 г. Москва", "Москва", "Лесная", "10", "1"
));
// Также можно заполнять поля по отдельности
СтруктураАдреса.Индекс = "125047";
Преобразование структуры в XML.
Система не может напрямую записать структуру. Ее нужно преобразовать в текстовое представление XML. Для этого в БСП есть специальная служебная функция КонтактнаяИнформацияXDTOВXML.
// Преобразуем заполненную структуру в XML-строку
АдресXML = УправлениеКонтактнойИнформациейСлужебный.КонтактнаяИнформацияXDTOВXML(СтруктураАдреса);
Запись контактной информации.
Наконец, мы используем основную процедуру ДобавитьКонтактнуюИнформацию. Она сама найдет нужный справочник, создаст запись и свяжет ее с нашим контрагентом.
// Получаем ссылку на нашего контрагента
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
// Добавляем адрес
УправлениеКонтактнойИнформацией.ДобавитьКонтактнуюИнформацию(
СсылкаНаКонтрагента,
АдресXML,
Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента // Указываем вид адреса
);
Важный момент: убедитесь, что вид контактной информации (в примере это ЮрАдресКонтрагента) существует в вашем справочнике ВидыКонтактнойИнформации и имеет тип "Адрес".
Иногда бывает полезно посмотреть, как система хранит уже существующий, корректно введенный адрес. Этот метод поможет лучше понять структуру данных и может быть полезен для отладки.
Найдите контрагента с уже заполненным адресом через пользовательский интерфейс.
Получите его контактную информацию программно. Используйте функцию КонтактнаяИнформацияОбъекта, чтобы выгрузить все данные в таблицу.
СсылкаНаКонтрагента = Справочники.Контрагенты.НайтиПоНаименованию("ООО Лютик");
ТаблицаКИ = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(СсылкаНаКонтрагента);
// Теперь можно проанализировать содержимое таблицы в отладчике
// Нас интересует колонка "Представление" и "ЗначениеXML" (или похожее название)
Проанализируйте полученную XML-строку. Вы увидите структуру, которую 1С использует для хранения адреса. На основе этого анализа вы сможете формировать свои XML-строки для записи, хотя подход из первого решения является более надежным, так как он не зависит от возможных изменений в формате XML в будущих версиях конфигурации.
Для автоматизации и повышения точности ввода адресов можно интегрировать 1С с внешними сервисами, такими как "DaData.ru". Такие сервисы по ИНН или названию компании могут вернуть не только реквизиты, но и адрес, уже приведенный к стандартному формату ФИАС/КЛАДР.
Преимущество этого подхода в том, что сервис берет на себя всю работу по стандартизации и разбору адреса. Существуют готовые расширения и обработки для интеграции, которые после получения данных от сервиса сами вызовут нужные процедуры БСП (как в Решении 1) для корректной записи адреса в систему. Это избавляет вас от необходимости вручную разбирать и подготавливать данные.
← К списку