Переход с устаревшего классификатора КЛАДР на Федеральную информационную адресную систему (ФИАС/ГАР) создал ряд серьезных технических трудностей для пользователей и разработчиков конфигураций на платформе 1С:Предприятие 7.7. В типовых конфигурациях (например, в «1С:Бухгалтерия 7.7», ред. 4.5) механизм ввода адресов изначально проектировался под плоскую структуру классификатора КЛАДР и не был рассчитан на колоссальные объемы данных ФИАС и иерархическую структуру с GUID-идентификаторами.
Разберем основные варианты реализации ввода и хранения адресов по стандарту ФИАС в 1С 7.7, технические ограничения устаревшей платформы и практические решения для корректного формирования печатных форм (в частности, строки 2а и 6а счетов-фактур).
Проанализируем технические проблемы, с которыми сталкивается разработчик при попытке прямой загрузки классификатора ФИАС в базу 1С 7.7:
ADDROB, HOUSE, ROOM) многократно превышает лимит файловой системы, с которой работает платформа 7.7. Попытка загрузить или проиндексировать полные таблицы приводит к повреждению базы и критическим сбоям.MSXML.DOMDocument вызывает ошибку нехватки памяти (Out of memory), так как модель DOM пытается загрузить весь документ целиком в адресное пространство процесса 1С.Рассмотрим наиболее производительный подход при необходимости иметь локальный классификатор без жесткой привязки к облачным сервисам. Для обхода ограничений платформы данные выносятся во внешнюю базу данных (например, SQLite, MS SQL Server или PostgreSQL), а взаимодействие с 1С 7.7 настраивается через внешние компоненты.
Разберем по шагам логику этого решения:
ODBCRecordset для прямого выполнения быстрых SQL-запросов в обход файлового движка 1С.Посмотрим на пример выполнения запроса к внешней адресной базе SQLite через объект 1С++:
БазаДанных = СоздатьОбъект("ODBCRecordset");
БазаДанных.УстТекстЗапроса("
| SELECT
| A.FORMALNAME,
| A.SHORTNAME,
| A.POSTALCODE,
| A.AOGUID
| FROM ADDROBJ A
| WHERE A.LIVESTATUS = 1
| AND A.FORMALNAME LIKE :ТекстПоиска || '%'
| ORDER BY A.AOLEVEL, A.FORMALNAME
|");
БазаДанных.УстановитьТекстовыйПараметр("ТекстПоиска", СокрЛП(ВведеннаяСтрока));
ТаблицаРезультатов = БазаДанных.ВыполнитьИнструкцию();
Рассмотрим альтернативное решение, не требующее хранения и регулярного обновления локальных адресных баз объемом в десятки гигабайт. Поиск адресов организуется через внешние облачные сервисы стандартизации адресов по протоколу HTTP/REST.
Разберем последовательность действий:
MSXML2.ServerXMLHTTP или WinHttp.WinHttpRequest.5.1.MSScriptControl.ScriptControl).Посмотрим на пример функции отправки запроса к веб-сервису из 1С 7.7:
Функция ОтправитьЗапросАдреса(ТекстАдреса, ТокенАвторизации)
Перем HTTPЗапрос, ОтветJSON;
HTTPЗапрос = СоздатьОбъект("MSXML2.ServerXMLHTTP");
HTTPЗапрос.Open("POST", "https://api.service.ru/suggestions/api/4_1/rs/suggest/address", 0);
HTTPЗапрос.SetRequestHeader("Content-Type", "application/json");
HTTPЗапрос.SetRequestHeader("Accept", "application/json");
HTTPЗапрос.SetRequestHeader("Authorization", "Token " + ТокенАвторизации);
ТелоЗапроса = "{ ""query"": """ + ТекстАдреса + """, ""count"": 5 }";
HTTPЗапрос.Send(ТелоЗапроса);
Если HTTPЗапрос.Status = 200 Тогда
ОтветJSON = HTTPЗапрос.ResponseText;
Возврат ОтветJSON;
Иначе
Предупреждение("Ошибка сервиса: " + HTTPЗапрос.Status + " " + HTTPЗапрос.StatusText);
Возврат "";
КонецЕсли;
КонецФункции
Проанализируем практический подход, который часто применяют бухгалтеры на практике: отказ от локального классификатора в пользу фиксации официального адреса из выписки ЕГРЮЛ.
Для реализации этого метода:
Контрагенты создается дополнительный реквизит строкового типа (например, АдресИзЕГРЮЛ) достаточной длины (250–500 символов).Разберем требования к заполнению строки 2а («Адрес продавца») и строки 6а («Адрес покупателя») в счетах-фактурах:
Таким образом, для целей бухгалтерского и налогового учета в 1С 7.7 наиболее стабильными и безопасными решениями являются либо интеграция с облачными сервисами подсказок через внешние HTTP-запросы, либо использование внешней базы SQLite с доступом через 1С++, либо ручной ввод официального адреса по данным реестров ФНС.