Адресный классификатор раздул базу 1С: как его почистить без потери адресов
Содержание
Очистить КЛАДР в 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. Открыть настройки классификатора
- Зайдите под пользователем с полными правами.
- Откройте
Администрирование → Общие настройки. - Найдите группу про адресный классификатор и откройте ссылку на него. Откроется список регионов с отметкой, какие загружены.
Шаг 3. Удалить загруженные регионы
В форме классификатора есть команда очистки — в одних релизах кнопкой на панели, в других в меню Ещё. Отметьте регионы, которые не нужны, или все сразу, и запустите очистку.
Операция идёт в фоне. На полном классификаторе страны это может занять от нескольких минут до часа — в зависимости от диска и СУБД. Пользователи в это время работать могут, но подсказки адресов будут недоступны.
Шаг 4. Сжать базу
После удаления записей файл или база данных сами не уменьшаются. Место нужно вернуть отдельно.
Файловая база:
- Попросите всех выйти из программы — понадобится монопольный режим.
- Откройте Конфигуратор:
Администрирование → Тестирование и исправление. - Отметьте
Сжатие таблиц информационной базы. Остальные флажки для этой задачи не нужны. - Нажмите
Выполнить.
Клиент-серверная база — см. раздел про СУБД ниже: штатное сжатие 1С там место на диске не вернёт.
Очистка внешней обработкой
Обработка нужна в трёх случаях: старая конфигурация без команды очистки, сильно доработанная база или фоновое задание падает с ошибкой на середине.
Принцип простой: найти все регистры сведений, где хранятся адресные данные, и записать в каждый пустой набор записей. Для независимого регистра запись пустого набора без отбора удаляет все его записи.
Ниже — серверная процедура для внешней обработки. Сначала она только печатает список регистров с адресными данными и количеством записей. Очистку запускайте вторым проходом, когда проверили список глазами.
&НаСервере
Процедура ПоказатьИлиОчиститьНаСервере(Очищать)
Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
Имя = Регистр.Имя;
Если СтрНайти(НРег(Имя), "адрес") = 0 Тогда
Продолжить;
КонецЕсли;
Запрос = Новый Запрос(СтрШаблон(
"ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество ИЗ РегистрСведений.%1", Имя));
Количество = Запрос.Выполнить().Выгрузить()[0].Количество;
Сообщить(СтрШаблон("%1: %2 записей", Имя, Формат(Количество, "ЧН=0; ЧГ=0")));
Если Очищать И Регистр.РежимЗаписи = Метаданные.СвойстваОбъектов.РежимЗаписиРегистра.Независимый Тогда
Набор = РегистрыСведений[Имя].СоздатьНаборЗаписей();
Набор.ОбменДанными.Загрузка = Истина;
Набор.Записать(Истина);
Сообщить(" очищен");
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как пользоваться:
- Создайте в Конфигураторе внешнюю обработку
, добавьте форму и две команды: «Показать» вызывает процедуру с
Ложь, «Очистить» — сИстина. - Откройте обработку в режиме 1С:Предприятие через
Файл → Открыть. - Нажмите «Показать». Проверьте список: в него могут попасть регистры, где слово «адрес» есть в имени, но это не классификатор — например, адреса доставки или настройки почты.
- Если в списке есть лишнее, добавьте исключения по имени в начало цикла.
- Нажмите «Очистить», затем сожмите базу.
Отбор по подстроке «адрес» — грубый фильтр. Никогда не запускайте очистку без просмотра списка. В доработанной базе так легко снести регистр с адресами доставки клиентов.
Чтобы связать регистры с таблицами SQL из прошлого раздела, допишите вывод структуры хранения:
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Для Каждого Строка Из Структура Цикл
Если СтрНайти(НРег(Строка.Метаданные), "адрес") > 0 Тогда
Сообщить(Строка.Метаданные + " -> " + Строка.ИмяТаблицыХранения);
КонецЕсли;
КонецЦикла;
Флаг ОбменДанными.Загрузка = Истина отключает обработчики подписок при записи. Это ускоряет удаление и не даёт событиям регистрации изменений плодить записи в планах обмена.
Переход с КЛАДР на ФИАС через веб-сервис
Самый радикальный и самый удобный вариант — не хранить классификатор в базе вовсе. Типовые конфигурации на БСП умеют брать адреса онлайн с сервиса 1С.
Почему это современный подход:
- 📦 база не хранит гигабайты адресов;
- 🔄 данные всегда свежие, загружать обновления ФИАС руками не нужно;
- ✅ проверка адреса работает по актуальному государственному реестру.
КЛАДР как отдельный классификатор давно не развивается. Государственным адресным реестром по закону о ФИАС служит ФИАС (ГАР), поэтому новые релизы 1С работают именно с ним.
Как включить:
- Подключите интернет-поддержку:
Администрирование → Интернет-поддержка и сервисы, войдите под логином портала 1С:ИТС. - В настройках адресного классификатора выберите источник данных — веб-сервис вместо загруженных данных.
- Проверьте ввод: откройте карточку любого контрагента и начните вводить адрес — должны появиться подсказки.
- Только после этого очищайте локальный классификатор.
Сервис работает в рамках действующего договора 1С:ИТС. Если договора нет или сервер базы без интернета, веб-сервис не подойдёт — тогда оставьте загруженными только свои регионы.
Адреса в режиме предприятия после очистки
После очистки пользователи замечают изменения при вводе адресов. Объясните им заранее, что поменяется.
| Что | С загруженным регионом | После очистки без веб-сервиса | С веб-сервисом |
|---|---|---|---|
| Подсказки при вводе | есть | нет | есть |
| Проверка адреса по ФИАС | есть | нет | есть |
| Ранее введённые адреса | сохраняются | сохраняются | сохраняются |
| Ввод нового адреса | по классификатору | свободной строкой | по классификатору |
| Коды ОКТМО, ИФНС по адресу | заполняются | вручную | заполняются |
Последняя строка важна для бухгалтера. Если в базе заполняют коды налоговой по адресу обособленного подразделения или физлица, без классификатора их придётся вводить руками.
Если адрес после очистки показывается с пометкой, что он не соответствует классификатору, — это нормально. Адрес не испорчен: программе просто не с чем его сверить. После включения веб-сервиса пометка уходит при следующем редактировании.
Производительность СУБД после удаления адресов
Удалить записи — половина дела. Место на диске и скорость возвращаются только после обслуживания базы средствами СУБД.
MS SQL Server
- Пересоздайте индексы на таблицах, где были адреса, или по всей базе через план обслуживания.
- Обновите статистику.
- Если место на диске критично — сожмите файл данных.
-- в контексте нужной базы
DBCC SHRINKFILE (N'имя_логического_файла_данных', 0);
Сжатие файла данных фрагментирует индексы. Делайте его один раз после крупной очистки, а не по расписанию, и сразу после — перестроение индексов. Операция нагружает диск: запускайте вне рабочего времени.
PostgreSQL
Обычный VACUUM помечает место как свободное внутри таблиц, но файлы не уменьшает. Вернуть место на диск может только VACUUM FULL:
VACUUM FULL ANALYZE;
VACUUM FULL переписывает таблицы целиком и блокирует их на время работы. Пользователи на это время должны выйти из базы, иначе их запросы встанут в ожидание. Для большой базы лучше выполнять его по отдельным таблицам — тем, что нашли в разделе про проверку размера.
Порядок по шагам
| Действие | Файловая база | MS SQL | PostgreSQL |
|---|---|---|---|
| Удаление записей | штатно или обработкой | штатно или обработкой | штатно или обработкой |
| Возврат места | Сжатие таблиц в Конфигураторе | DBCC SHRINKFILE | VACUUM FULL |
| Обслуживание | — | перестроение индексов, статистика | ANALYZE |
| Нужен простой | да, монопольный режим | желательно | да, на время VACUUM FULL |
После обслуживания сделайте новую полную резервную копию: старая, до очистки, ещё пригодится для отката, но размер новой покажет реальный эффект.
Ошибки при очистке КЛАДР и как их избежать
Ещё одна частая промашка — очистка классификатора в узле РИБ без понимания, что будет в центре. Чистите в каждой базе отдельно и сначала на копии: так вы увидите, не тянет ли обмен адресные данные обратно.
Частые вопросы
Можно ли очистить классификатор, не выгоняя пользователей?
VACUUM FULL в PostgreSQL.Сколько места освободится?
Нужно ли чистить классификатор перед обновлением конфигурации?
Что будет с отчётами, где адрес выводится по частям?
Можно ли потом вернуть классификатор?
Источники
- Федеральный закон от 28.12.2013 № 443-ФЗ «О федеральной информационной адресной системе и о внесении изменений в Федеральный закон «Об общих принципах организации местного самоуправления в Российской Федерации»