Как организовать переход с КЛАДР на ФИАС в 1С 7.7

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

Переход с устаревшего классификатора КЛАДР на актуальный ФИАС (Федеральная информационная адресная система) или его современную итерацию ГАР (Государственный адресный реестр) — это задача, с которой рано или поздно сталкивается любой разработчик, поддерживающий конфигурации на платформе 1С:Предприятие 7.7. Несмотря на то что налоговая служба продолжает выпускать файлы в формате КЛАДР, они являются лишь ограниченной проекцией реальной адресной базы. Для полноценной работы с ЭДО, современными государственными порталами и интеграции с 1С 8.3 требуется поддержка уникальных идентификаторов GUID, которые в КЛАДР попросту отсутствуют.

В этой статье мы подробно разберем, как внедрить поддержку ФИАС в "семерку", проанализируем доступные методы и выберем наиболее эффективную стратегию реализации.

Зачем нужен переход: GUID против цифровых кодов

Разберем основную причину, по которой классический КЛАДР становится бесполезным. В КЛАДР адреса кодируются цифровыми последовательностями, которые могут меняться при переподчинении населенных пунктов или переименовании улиц. В ФИАС же за каждым объектом закреплен GUID (Globally Unique Identifier) — постоянный уникальный ключ. Если ваша 1С 7.7 выгружает данные в современные системы (например, в бухгалтерию на платформе 8.3 или через XML-пакеты электронного документооборота), принимающая сторона будет искать именно GUID. Без него проверка адреса может не пройти, даже если строка адреса написана верно.

Вариант 1: Подключение классификатора через DBF-файлы

Проанализируем самый очевидный путь — использование ФИАС в формате DBF. Налоговая долгое время предоставляла выгрузки ФИАС именно в этом формате, который "родной" для 1С 7.7. Однако здесь мы сталкиваемся с серьезным техническим ограничением.

Ограничение размера файла: Встроенный движок 1С 7.7 для работы с таблицами .dbf имеет жесткий лимит в 2 ГБ на один файл. Объем актуальной адресной базы ФИАС в распакованном виде уже давно превысил десятки гигабайт. Попытка открыть таблицу с домами (HOUSE.dbf) стандартными средствами 1С 7.7 приведет к ошибке.

Как решить эту проблему:

  1. Использовать разделение базы по регионам. Вместо загрузки всей России, можно скачивать и подключать только те регионы, с которыми работает ваше предприятие.
  2. Использовать внешние средства доступа к DBF (через ADODB), которые умеют обходить ограничение в 2 ГБ, если файл физически находится на диске, а не является частью метаданных 1С.

Вариант 2: Использование внешних компонент и 1С++

Для тех, кто хочет получить высокую скорость поиска и полноценную поддержку GUID, рассмотрим вариант использования внешней компоненты 1С++. Это позволяет подключать классификатор как внешнюю базу данных (например, через SQLite или MS SQL Server) и обращаться к ней с помощью прямых SQL-запросов.

Выясним преимущества этого метода:

Рассмотрим пример того, как может выглядеть структура хранения в 1С 7.7. Нам потребуется создать периодические реквизиты или просто строковые поля длиной 36 символов для хранения AOGUID (для улиц и населенных пунктов) и HOUSEGUID (для домов).

Вариант 3: Использование веб-сервисов (API) — рекомендуемый метод

Проанализируем наиболее современный подход, который избавляет от необходимости хранить гигабайты данных на локальном диске или сервере. Это использование HTTP API. Существуют сервисы, которые предоставляют актуальный поиск по ФИАС через интернет.

Рассмотрим по шагам, как реализовать такой запрос из 1С 7.7 с помощью объекта WinHttp.WinHttpRequest.5.1. Это позволит нам отправлять запрос с частью адреса и получать структурированный ответ с GUID и правильным написанием.


// Пример функции для обращения к внешнему сервису (псевдокод)
Функция ПолучитьДанныеФИАС(СтрокаАдреса)
    Сервис = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
    URL = "https://api.address-service.ru/suggest"; // пример URL
    Сервис.Open("POST", URL, 0);
    Сервис.SetRequestHeader("Content-Type", "application/json");
    Сервис.SetRequestHeader("Authorization", "Token " + ВашТокен);
    
    ТелоЗапроса = "{ ""query"": """ + СтрокаАдреса + """ }";
    Сервис.Send(ТелоЗапроса);
    
    Если Сервис.Status = 200 Тогда
        // Обрабатываем JSON ответ
        Ответ = Сервис.ResponseText;
        Возврат Ответ;
    КонецЕсли;
КонецФункции

Важный момент: 1С 7.7 не умеет штатно работать с форматом JSON. Для разбора ответа нам потребуется либо использовать внешнюю компоненту (например, JSONParser.dll), либо воспользоваться объектом ScriptControl для исполнения кода на JavaScript, который легко парсит JSON.

Переход на формат ГАР (Государственный адресный реестр)

С 2021 года формат ФИАС признан устаревшим, и ФНС перешла на ГАР. Главное отличие — иерархическая структура и хранение данных в XML. Для 1С 7.7 работа с XML большого объема является сложной задачей из-за нехватки оперативной памяти при использовании стандартной v7plus.dll.

Выясним, как эффективно обрабатывать XML в 7.7:

Практические рекомендации по изменению конфигурации

Чтобы ваша 1С 7.7 начала "понимать" ФИАС, выполните следующие действия:

  1. Модернизация справочников: Добавьте в справочник Контрагенты (и другие, где есть адрес) текстовые реквизиты: FiasCityID, FiasStreetID, FiasHouseID. Длина каждого — 36 символов.
  2. Изменение интерфейса: В форму ввода адреса добавьте кнопку "Проверить в ФИАС". При нажатии программа должна отправлять текущую строку адреса в API или выполнять SQL-запрос к локальной копии базы ФИАС.
  3. Связь с КЛАДР: Если вы продолжаете использовать стандартный классификатор 1С для выбора адреса, напишите обработку, которая по коду КЛАДР (13 или 15-19 цифр) будет искать соответствие в таблице AOID_KLADR.dbf (таблица перекодировки), чтобы получить нужный GUID.

Важно: При выгрузке в 1С 8.3 или для налоговой отчетности, обязательно используйте именно сохраненные GUID. Если GUID не заполнен, система-приемник может выдать ошибку, даже если все поля адреса (город, улица, дом) заполнены верно.

Таким образом, несмотря на почтенный возраст платформы 1С 7.7, переход на ФИАС вполне реализуем. Наиболее рациональным решением на сегодняшний день является использование внешних API-сервисов, так как это освобождает от необходимости администрирования огромных баз данных ГАР на устаревшем оборудовании.

← На главную