Адресный классификатор раздул базу 1С: как его почистить без потери адресов

· 10 мин

Содержание

Очистить КЛАДР в 1С 8.3 проще всего штатно: откройте Администрирование → Общие настройки, перейдите по ссылке адресного классификатора и удалите загруженные регионы командой очистки. Затем переключите программу на веб-сервис 1С вместо локальных данных и сожмите базу: в файловом варианте — через Тестирование и исправление, в клиент-серверном — средствами СУБД.

Способов три, и выбирают их по ситуации. Штатная очистка подходит почти всем. Внешняя обработка нужна, когда команда в форме недоступна или конфигурация старая и переписанная. Полная замена КЛАДР на ФИАС через веб-сервис — правильный путь для любой базы, где интернет есть всегда: справочник адресов в базе тогда вообще не хранится.

Почему адресный справочник стоит держать в узде

Классификатор адресов — одна из самых тяжёлых частей типовой базы. Вся Россия в формате ФИАС с домами занимает несколько гигабайт. Если когда-то загрузили все регионы «на всякий случай», база выросла в разы, хотя работает организация в одном городе.

Чем это мешает на практике:

  • 💾 Размер резервных копий. Выгрузка .dt и бэкап SQL-базы растут вместе с регистрами адресов. Копия ночью идёт дольше, места на диске уходит больше.
  • 🐢 Скорость обновления. При обновлении конфигурации с реструктуризацией платформа может перестраивать и эти таблицы. Пара лишних гигабайт — плюс десятки минут простоя.
  • 🔁 Обмены и РИБ. В распределённой базе адресные данные могут уходить в узлы. Начальный образ узла становится огромным.
  • 📂 Файловая база. У файла 1Cv8.1CD есть практический предел комфортной работы. Чем он больше, тем чаще жалобы на медленный старт и тестирование.

В конфигурациях на БСП 2.3 и новее «КЛАДР» — уже бытовое название. Внутри хранятся адресные сведения в структуре ФИАС, но команды и регистры по привычке ищут именно как «КЛАДР».

Перед очисткой полезно понять, где лежат данные. Адреса, которые уже введены в карточки контрагентов, сотрудников, организаций, хранятся в самих объектах — в табличной части контактной информации. Классификатор нужен только для подсказок при вводе и проверки адреса. Поэтому удаление классификатора не стирает уже введённые адреса.

Сколько места занимает классификатор: проверка до очистки

Не чистите вслепую. Сначала убедитесь, что место съедают именно адреса.

Клиент-серверная база на MS SQL. Выполните в SQL Server Management Studio запрос по размерам таблиц:

SELECT TOP 20
    t.name AS table_name,
    SUM(a.total_pages) * 8 / 1024 AS size_mb
FROM sys.tables t
JOIN sys.indexes i ON t.object_id = i.object_id
JOIN sys.partitions p ON i.object_id = p.object_id AND i.index_id = p.index_id
JOIN sys.allocation_units a ON p.partition_id = a.container_id
GROUP BY t.name
ORDER BY size_mb DESC;

PostgreSQL:

SELECT relname AS table_name,
       pg_size_pretty(pg_total_relation_size(relid)) AS size
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;

Таблицы 1С называются служебно (_InfoRg1234), поэтому дальше сопоставьте их с объектами метаданных. Это делается встроенным методом ПолучитьСтруктуруХраненияБазыДанных() — ниже он есть в обработке.

Файловая база. Таблиц не видно, но косвенный признак простой: размер 1Cv8.1CD в несколько гигабайт у небольшой организации почти всегда означает загруженный классификатор или раздутый журнал регистрации.

Штатная очистка и сжатие адресного классификатора

Начните с типового механизма. Он корректно удаляет все связанные регистры и не трогает введённые адреса.

Шаг 1. Резервная копия

Перед очисткой сделайте резервную копию базы. Для файловой — выгрузка .dt через Конфигуратор или копия каталога при закрытой программе. Для SQL — полный бэкап средствами СУБД.

Шаг 2. Открыть настройки классификатора

  1. Зайдите под пользователем с полными правами.
  2. Откройте Администрирование → Общие настройки.
  3. Найдите группу про адресный классификатор и откройте ссылку на него. Откроется список регионов с отметкой, какие загружены.

Шаг 3. Удалить загруженные регионы

В форме классификатора есть команда очистки — в одних релизах кнопкой на панели, в других в меню Ещё. Отметьте регионы, которые не нужны, или все сразу, и запустите очистку.

Операция идёт в фоне. На полном классификаторе страны это может занять от нескольких минут до часа — в зависимости от диска и СУБД. Пользователи в это время работать могут, но подсказки адресов будут недоступны.

Шаг 4. Сжать базу

После удаления записей файл или база данных сами не уменьшаются. Место нужно вернуть отдельно.

Файловая база:

  1. Попросите всех выйти из программы — понадобится монопольный режим.
  2. Откройте Конфигуратор: Администрирование → Тестирование и исправление.
  3. Отметьте Сжатие таблиц информационной базы. Остальные флажки для этой задачи не нужны.
  4. Нажмите Выполнить.

Клиент-серверная база — см. раздел про СУБД ниже: штатное сжатие 1С там место на диске не вернёт.

Штатная очистка: контроль
Выполнено: 0 / 5

Очистка внешней обработкой

Обработка нужна в трёх случаях: старая конфигурация без команды очистки, сильно доработанная база или фоновое задание падает с ошибкой на середине.

Принцип простой: найти все регистры сведений, где хранятся адресные данные, и записать в каждый пустой набор записей. Для независимого регистра запись пустого набора без отбора удаляет все его записи.

Ниже — серверная процедура для внешней обработки. Сначала она только печатает список регистров с адресными данными и количеством записей. Очистку запускайте вторым проходом, когда проверили список глазами.

&НаСервере
Процедура ПоказатьИлиОчиститьНаСервере(Очищать)

    Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл

        Имя = Регистр.Имя;
        Если СтрНайти(НРег(Имя), "адрес") = 0 Тогда
            Продолжить;
        КонецЕсли;

        Запрос = Новый Запрос(СтрШаблон(
            "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество ИЗ РегистрСведений.%1", Имя));
        Количество = Запрос.Выполнить().Выгрузить()[0].Количество;

        Сообщить(СтрШаблон("%1: %2 записей", Имя, Формат(Количество, "ЧН=0; ЧГ=0")));

        Если Очищать И Регистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда
            Набор = РегистрыСведений[Имя].СоздатьНаборЗаписей();
            Набор.ОбменДанными.Загрузка = Истина;
            Набор.Записать(Истина);
            Сообщить("   очищен");
        КонецЕсли;

    КонецЦикла;

КонецПроцедуры

Как пользоваться:

  1. Создайте в Конфигураторе внешнюю обработку , добавьте форму и две команды: «Показать» вызывает процедуру с Ложь, «Очистить» — с Истина.
  2. Откройте обработку в режиме 1С:Предприятие через Файл → Открыть.
  3. Нажмите «Показать». Проверьте список: в него могут попасть регистры, где слово «адрес» есть в имени, но это не классификатор — например, адреса доставки или настройки почты.
  4. Если в списке есть лишнее, добавьте исключения по имени в начало цикла.
  5. Нажмите «Очистить», затем сожмите базу.

Отбор по подстроке «адрес» — грубый фильтр. Никогда не запускайте очистку без просмотра списка. В доработанной базе так легко снести регистр с адресами доставки клиентов.

Чтобы связать регистры с таблицами SQL из прошлого раздела, допишите вывод структуры хранения:

Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого Строка Из Структура Цикл
    Если СтрНайти(НРег(Строка.Метаданные), "адрес") > 0 Тогда
        Сообщить(Строка.Метаданные + " -> " + Строка.ИмяТаблицыХранения);
    КонецЕсли;
КонецЦикла;

Флаг ОбменДанными.Загрузка = Истина отключает обработчики подписок при записи. Это ускоряет удаление и не даёт событиям регистрации изменений плодить записи в планах обмена.

Переход с КЛАДР на ФИАС через веб-сервис

Самый радикальный и самый удобный вариант — не хранить классификатор в базе вовсе. Типовые конфигурации на БСП умеют брать адреса онлайн с сервиса 1С.

Почему это современный подход:

  • 📦 база не хранит гигабайты адресов;
  • 🔄 данные всегда свежие, загружать обновления ФИАС руками не нужно;
  • ✅ проверка адреса работает по актуальному государственному реестру.

КЛАДР как отдельный классификатор давно не развивается. Государственным адресным реестром по закону о ФИАС служит ФИАС (ГАР), поэтому новые релизы 1С работают именно с ним.

Как включить:

  1. Подключите интернет-поддержку: Администрирование → Интернет-поддержка и сервисы, войдите под логином портала 1С:ИТС.
  2. В настройках адресного классификатора выберите источник данных — веб-сервис вместо загруженных данных.
  3. Проверьте ввод: откройте карточку любого контрагента и начните вводить адрес — должны появиться подсказки.
  4. Только после этого очищайте локальный классификатор.

Сервис работает в рамках действующего договора 1С:ИТС. Если договора нет или сервер базы без интернета, веб-сервис не подойдёт — тогда оставьте загруженными только свои регионы.

Как поступить с классификатором в вашей базе?

Адреса в режиме предприятия после очистки

После очистки пользователи замечают изменения при вводе адресов. Объясните им заранее, что поменяется.

ЧтоС загруженным региономПосле очистки без веб-сервисаС веб-сервисом
Подсказки при вводеестьнетесть
Проверка адреса по ФИАСестьнетесть
Ранее введённые адресасохраняютсясохраняютсясохраняются
Ввод нового адресапо классификаторусвободной строкойпо классификатору
Коды ОКТМО, ИФНС по адресузаполняютсявручнуюзаполняются

Последняя строка важна для бухгалтера. Если в базе заполняют коды налоговой по адресу обособленного подразделения или физлица, без классификатора их придётся вводить руками.

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

Производительность СУБД после удаления адресов

Удалить записи — половина дела. Место на диске и скорость возвращаются только после обслуживания базы средствами СУБД.

MS SQL Server

  1. Пересоздайте индексы на таблицах, где были адреса, или по всей базе через план обслуживания.
  2. Обновите статистику.
  3. Если место на диске критично — сожмите файл данных.
-- в контексте нужной базы
DBCC SHRINKFILE (N'имя_логического_файла_данных', 0);

Сжатие файла данных фрагментирует индексы. Делайте его один раз после крупной очистки, а не по расписанию, и сразу после — перестроение индексов. Операция нагружает диск: запускайте вне рабочего времени.

PostgreSQL

Обычный VACUUM помечает место как свободное внутри таблиц, но файлы не уменьшает. Вернуть место на диск может только VACUUM FULL:

VACUUM FULL ANALYZE;

VACUUM FULL переписывает таблицы целиком и блокирует их на время работы. Пользователи на это время должны выйти из базы, иначе их запросы встанут в ожидание. Для большой базы лучше выполнять его по отдельным таблицам — тем, что нашли в разделе про проверку размера.

Порядок по шагам

ДействиеФайловая базаMS SQLPostgreSQL
Удаление записейштатно или обработкойштатно или обработкойштатно или обработкой
Возврат местаСжатие таблиц в КонфигуратореDBCC SHRINKFILEVACUUM FULL
Обслуживание—перестроение индексов, статистикаANALYZE
Нужен простойда, монопольный режимжелательнода, на время VACUUM FULL

После обслуживания сделайте новую полную резервную копию: старая, до очистки, ещё пригодится для отката, но размер новой покажет реальный эффект.

Ошибки при очистке КЛАДР и как их избежать

Диагностика: выберите симптом

Ещё одна частая промашка — очистка классификатора в узле РИБ без понимания, что будет в центре. Чистите в каждой базе отдельно и сначала на копии: так вы увидите, не тянет ли обмен адресные данные обратно.

Частые вопросы

Можно ли очистить классификатор, не выгоняя пользователей?
Удаление штатной командой идёт в фоне, работать можно. Монопольный режим нужен только на этапе сжатия файловой базы или VACUUM FULL в PostgreSQL.
Сколько места освободится?
Зависит от того, сколько регионов было загружено. Один регион обычно занимает от сотен мегабайт до гигабайта с домами, вся страна — несколько гигабайт. Точную цифру даёт запрос размеров таблиц до очистки.
Нужно ли чистить классификатор перед обновлением конфигурации?
Не обязательно, но в базе с полной Россией это заметно сокращает время реструктуризации и размер резервной копии перед обновлением.
Что будет с отчётами, где адрес выводится по частям?
Ранее введённые адреса хранят свою структуру — регион, город, улицу — в самих объектах. Отчёты и печатные формы продолжают их выводить.
Можно ли потом вернуть классификатор?
Да. Загрузите нужные регионы заново из той же формы классификатора — с сайта 1С или из файлов — либо включите веб-сервис.

Источники

  • Федеральный закон от 28.12.2013 № 443-ФЗ «О федеральной информационной адресной системе и о внесении изменений в Федеральный закон «Об общих принципах организации местного самоуправления в Российской Федерации»