Почему в 1С пропадают улицы из адресного классификатора и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет IT и автоматизация бизнеса
← На главную

В процессе эксплуатации программных продуктов на платформе 1С:Предприятие 8.3 (например, УТ 11, БП 3.0 или ERP) технические специалисты часто сталкиваются с загадочным поведением адресного классификатора. Суть проблемы заключается в том, что после полной загрузки всех регионов адреса отображаются корректно лишь некоторое время. Спустя период (обычно около месяца) пользователи замечают, что при вводе адреса города доступны, а список улиц пуст, хотя физически данные из базы никуда не исчезали. Рассмотрим причины этого явления и разберем способы восстановления работоспособности системы.

Анализ программной причины: лимит 30 дней

Проанализируем ситуацию с точки зрения программного кода. Основная причина «исчезновения» улиц кроется в логике Библиотеки стандартных подсистем (БСП), которая управляет адресным классификатором. Разработчиками 1С заложен механизм, стимулирующий пользователей поддерживать данные в актуальном состоянии. Выясним, как это работает программно.

При выборе адреса система обращается к внутренним функциям для проверки состояния загруженных данных. В частности, анализируется дата последней загрузки каждого региона. Рассмотрим ключевой фрагмент логики, реализованный в модуле АдресныйКлассификаторСлужебный. Если с момента последней загрузки классификатора прошло более 30 дней, система присваивает региону статус Устарело.

Посмотрим на работу функции СведенияОЗагрузкеСубъектовРФ(). В ней проверяется условие:


Сведения.Вставить("ИспользоватьЗагруженные", СведенияОбСубъектеРФ.Загружено И НЕ СведенияОбСубъектеРФ.Устарело);

Если условие НЕ СведенияОбСубъектеРФ.Устарело не выполняется (то есть данные признаны устаревшими), переменная ИспользоватьЗагруженные принимает значение Ложь. В этом случае 1С пытается переключиться на режим работы через веб-сервис (онлайн-подбор). Если у клиента нет активной подписки ИТС (1С:Комплект поддержки) или отсутствует доступ к интернету, программный интерфейс просто не возвращает список улиц, хотя в таблицах базы данных (регистр сведений АдресныеОбъекты) эти записи присутствуют.

Влияние полнотекстового поиска (ПП)

Еще одна причина, которую стоит проанализировать — это состояние индекса полнотекстового поиска. В современных конфигурациях 1С поиск адреса в строке ввода осуществляется не прямым запросом к базе, а через механизм ПП. Рассмотрим ситуации, когда это становится проблемой:

  1. Неактуальный индекс: Если индекс полнотекстового поиска «протух» или не был обновлен после массовой загрузки регионов, система поиска может не выдавать результаты ниже уровня города.
  2. Фоновая индексация: В файловых базах регламентные задания по индексации могут прерываться или зависать, особенно если размер базы превышает 5 Гб.

Для проверки этой гипотезы рекомендуется запустить ручное обновление индекса через Управление полнотекстовым поиском (раздел Администрирование — Поддержка и обслуживание).

Особенности файлового режима и формата ГАР

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

Разберем, к чему это приводит:

Как решить проблему: пошаговая инструкция

Рассмотрим несколько вариантов решения проблемы, от простых до требующих вмешательства в код.

Способ 1: Использование расширения (для программистов)

Чтобы навсегда отключить блокировку «устаревших» данных без покупки ИТС, можно создать расширение. Нам необходимо переопределить поведение функции, которая отвечает за признак использования загруженных данных. Проанализируем функцию в модуле АдресныйКлассификаторПовтИсп.

В расширении следует применить метод &Вместо или &После для изменения значения флага Устарело. Пример логики, которую нужно скорректировать:


// В расширении принудительно устанавливаем актуальность
&После("СведенияОЗагрузкеСубъектовРФ")
Процедура Расш_СведенияОЗагрузкеСубъектовРФ(Результат)
    Для Каждого Строка Из Результат Цикл
        Строка.Устарело = Ложь;
        Строка.ИспользоватьЗагруженные = Строка.Загружено;
    КонецЦикла;
КонецПроцедуры

Способ 2: Переход на клиент-серверный вариант (SQL)

Если проблема вызвана объемом данных (база 5.5 Гб и более), переход на MS SQL или PostgreSQL снимет ограничение в 4 Гб на таблицу. Это повысит стабильность работы с адресными сведениями и ускорит работу полнотекстового поиска. Однако помните, что переход на SQL сам по себе не отменяет программную проверку актуальности (30 дней), описанную выше.

Способ 3: Обновление через «фиксацию» даты

Как обнаружил автор темы, для временного восстановления работы достаточно повторно загрузить любой (даже самый маленький) регион. Это обновляет общую дату актуальности классификатора в базе, и 1С снова «видит» улицы во всех регионах еще на 30 дней. Это решение подходит для тех, кто не хочет вносить изменения в конфигурацию, но готов раз в месяц тратить 5 минут на «подгрузку» данных.

Выводы

Подводя итог, можно сказать, что «слет» классификатора — это не технический сбой, а заложенная логика 1С. Для стабильной работы рекомендуем либо обеспечить базу активной интернет-поддержкой (ИТС), либо использовать расширение для обхода проверки даты загрузки, если автономность работы критична для вашего бизнеса.

← На главную