При автоматизации учета часто возникает задача классификации контрагентов по регионам. Однако накопленная за долгие годы база данных содержит адреса в разном формате: от старых записей КЛАДР до произвольно введенных строк. Попытки парсить эти данные с помощью строковых функций Найти или ПСТР неэффективны из-за сокращений и различий в наименованиях. Рассмотрим, как решить эту задачу правильно с помощью механизмов 1С.
В современных конфигурациях, включая 1С:Бухгалтерию 3.0, адреса не хранятся в виде простой строки. Они записываются в регистр сведений КонтактнаяИнформация. Сам адрес представляет собой Хранилище значений, внутри которого данные упакованы в XML-формат. Этот формат строго структурирован и содержит все элементы адреса: индекс, регион, район, город и т.д.
Важно: Не пытайтесь анализировать текстовое представление адреса. Чтобы получить регион, нужно работать с данными внутри XML-структуры, которые уже сопоставлены с актуальным адресным классификатором (ФИАС).
Прежде чем приступать к написанию обработки, необходимо привести данные к единому стандарту. Если адреса вводились давно, система может содержать ошибки. В типовом функционале 1С:Бухгалтерии 3.0 предусмотрены инструменты обновления и проверки контактной информации по ФИАС. Используйте их, чтобы привести «РТ», «Респ. Татарстан» и «Республика Татарстан» к единому стандарту.
Поскольку конфигурация построена на Библиотеке стандартных подсистем (БСП), нам не нужно вручную разбирать XML-файл. Мы можем воспользоваться функционалом модуля УправлениеКонтактнойИнформацией.
Разберем алгоритм действий:
КонтактнаяИнформация для нужных контрагентов.Адрес можно превратить в структуру или структуру-массив с помощью штатных методов БСП.Пример логики обращения к контактной информации:
// Примерный алгоритм получения региона
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ОбъектыКонтактнойИнформации.ЗначениеПоля КАК АдресXML
|ИЗ РегистрСведений.КонтактнаяИнформация КАК ОбъектыКонтактнойИнформации
|ГДЕ ОбъектыКонтактнойИнформации.Объект = &СсылкаНаКонтрагента";
// ... выполнение запроса
// Полученный XML разбирается функциями БСП
После того как вы извлекли регион из XML-структуры, у вас на руках будет либо ссылка на элемент справочника (если регионы у вас хранятся справочником), либо строка, которую нужно сопоставить с вашим набором значений доп. реквизита.
Для записи данных в доп. реквизит воспользуйтесь методом УправлениеСвойствами.ЗаписатьСвойство или прямым обращением к плану видов характеристик ДополнительныеРеквизитыИСведения, если это предусмотрено архитектурой вашей задачи.
Если автоматическое заполнение через код кажется слишком сложным или требует разового действия, можно поступить иначе:
ВПР или ЛЕВСИМВ) или специализированных скриптов приведите адреса к названиям регионов.Контрагент и Регион.ЗагрузкаДанныхИзТабличногоДокумента, которая встроена в БСП.Этот метод предпочтительнее «Группового изменения объектов», так как он позволяет предварительно проверить корректность сопоставления регионов в Excel, исключив ошибки человеческого фактора.
Проанализировав ситуацию, мы пришли к выводу, что использование XML-структуры контактной информации — единственный надежный способ. Использование БСП позволяет избежать проблем с вариативностью написания адресов. Рекомендуем начать с приведения базы к актуальному классификатору, после чего выполнение задачи по заполнению доп. реквизитов станет технически простой операцией.