В процессе эксплуатации программных продуктов на платформе 1С:Предприятие 8.3 (например, УТ 11, БП 3.0 или ERP) технические специалисты часто сталкиваются с загадочным поведением адресного классификатора. Суть проблемы заключается в том, что после полной загрузки всех регионов адреса отображаются корректно лишь некоторое время. Спустя период (обычно около месяца) пользователи замечают, что при вводе адреса города доступны, а список улиц пуст, хотя физически данные из базы никуда не исчезали. Рассмотрим причины этого явления и разберем способы восстановления работоспособности системы.
Проанализируем ситуацию с точки зрения программного кода. Основная причина «исчезновения» улиц кроется в логике Библиотеки стандартных подсистем (БСП), которая управляет адресным классификатором. Разработчиками 1С заложен механизм, стимулирующий пользователей поддерживать данные в актуальном состоянии. Выясним, как это работает программно.
При выборе адреса система обращается к внутренним функциям для проверки состояния загруженных данных. В частности, анализируется дата последней загрузки каждого региона. Рассмотрим ключевой фрагмент логики, реализованный в модуле АдресныйКлассификаторСлужебный. Если с момента последней загрузки классификатора прошло более 30 дней, система присваивает региону статус Устарело.
Посмотрим на работу функции СведенияОЗагрузкеСубъектовРФ(). В ней проверяется условие:
Сведения.Вставить("ИспользоватьЗагруженные", СведенияОбСубъектеРФ.Загружено И НЕ СведенияОбСубъектеРФ.Устарело);
Если условие НЕ СведенияОбСубъектеРФ.Устарело не выполняется (то есть данные признаны устаревшими), переменная ИспользоватьЗагруженные принимает значение Ложь. В этом случае 1С пытается переключиться на режим работы через веб-сервис (онлайн-подбор). Если у клиента нет активной подписки ИТС (1С:Комплект поддержки) или отсутствует доступ к интернету, программный интерфейс просто не возвращает список улиц, хотя в таблицах базы данных (регистр сведений АдресныеОбъекты) эти записи присутствуют.
Еще одна причина, которую стоит проанализировать — это состояние индекса полнотекстового поиска. В современных конфигурациях 1С поиск адреса в строке ввода осуществляется не прямым запросом к базе, а через механизм ПП. Рассмотрим ситуации, когда это становится проблемой:
Для проверки этой гипотезы рекомендуется запустить ручное обновление индекса через Управление полнотекстовым поиском (раздел Администрирование — Поддержка и обслуживание).
Проанализируем технические ограничения файловой базы. Как известно, в формате .1CD существует жесткий лимит — размер одной таблицы не может превышать 4 Гб. При загрузке классификатора всех регионов России (особенно в новом формате ГАР, который пришел на смену ФИАС) объем данных в регистре АдресныеОбъекты и сопутствующих индексах может приблизиться к этому порогу.
Разберем, к чему это приводит:
Рассмотрим несколько вариантов решения проблемы, от простых до требующих вмешательства в код.
Чтобы навсегда отключить блокировку «устаревших» данных без покупки ИТС, можно создать расширение. Нам необходимо переопределить поведение функции, которая отвечает за признак использования загруженных данных. Проанализируем функцию в модуле АдресныйКлассификаторПовтИсп.
В расширении следует применить метод &Вместо или &После для изменения значения флага Устарело. Пример логики, которую нужно скорректировать:
// В расширении принудительно устанавливаем актуальность
&После("СведенияОЗагрузкеСубъектовРФ")
Процедура Расш_СведенияОЗагрузкеСубъектовРФ(Результат)
Для Каждого Строка Из Результат Цикл
Строка.Устарело = Ложь;
Строка.ИспользоватьЗагруженные = Строка.Загружено;
КонецЦикла;
КонецПроцедуры
Если проблема вызвана объемом данных (база 5.5 Гб и более), переход на MS SQL или PostgreSQL снимет ограничение в 4 Гб на таблицу. Это повысит стабильность работы с адресными сведениями и ускорит работу полнотекстового поиска. Однако помните, что переход на SQL сам по себе не отменяет программную проверку актуальности (30 дней), описанную выше.
Как обнаружил автор темы, для временного восстановления работы достаточно повторно загрузить любой (даже самый маленький) регион. Это обновляет общую дату актуальности классификатора в базе, и 1С снова «видит» улицы во всех регионах еще на 30 дней. Это решение подходит для тех, кто не хочет вносить изменения в конфигурацию, но готов раз в месяц тратить 5 минут на «подгрузку» данных.
Подводя итог, можно сказать, что «слет» классификатора — это не технический сбой, а заложенная логика 1С. Для стабильной работы рекомендуем либо обеспечить базу активной интернет-поддержкой (ИТС), либо использовать расширение для обхода проверки даты загрузки, если автономность работы критична для вашего бизнеса.