Проблема избыточного веса базы данных из-за загруженного адресного классификатора знакома многим администраторам и программистам 1С. Часто по ошибке или «на всякий случай» в систему загружаются данные по всей стране, хотя деятельность ведется лишь в нескольких регионах. Это приводит к раздуванию таблиц, увеличению времени создания резервных копий и общей деградации производительности. В этой статье мы разберем по шагам, как выявить действительно нужные данные и корректно очистить классификатор.
Прежде чем приступать к удалению, нам необходимо четко определить «белый список» регионов. Если мы просто удалим всё подряд, записи в справочниках Контрагенты, ФизическиеЛица или Организации потеряют связь с классификатором, что приведет к невозможности корректного формирования отчетности. Наша цель — найти все уникальные регионы, которые уже задействованы в базе.
Проанализируем структуру хранения. В типовых конфигурациях данные об адресах хранятся в табличных частях КонтактнаяИнформация. В старых редакциях (на обычных формах) адрес мог храниться в виде строк, а в современных (на БСП) он хранится в виде XML или JSON в поле Значение.
Для начала рассмотрим метод, предложенный участниками обсуждения. Мы можем обратиться к регистру сведений АдресныйКлассификатор (в старых версиях) или проанализировать данные контактной информации. Рассмотрим пример запроса, который поможет нам понять, какие элементы классификатора вообще присутствуют в системе и имеют определенный уровень иерархии.
Процедура ОпределитьИспользуемыеРегионы()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АдресныйКлассификатор.КодРегионаВКоде КАК Код
|ИЗ
| РегистрСведений.АдресныйКлассификатор КАК АдресныйКлассификатор
|ГДЕ
| АдресныйКлассификатор.ТипАдресногоЭлемента = &УровеньРегиона";
Запрос.УстановитьПараметр("УровеньРегиона", 1); // 1 — это уровень субъекта РФ
РезультатЗапроса = Запрос.Выполнить();
ТаблицаРегионов = РезультатЗапроса.Выгрузить();
Для Каждого Строка Из ТаблицаРегионов Цикл
Сообщить("В базе найдены данные по региону с кодом: " + Строка.Код);
КонецЦикла;
КонецПроцедуры
Однако простого наличия в классификаторе недостаточно. Нам нужно прошерстить все справочники, где есть контактная информация. Проанализируем ситуацию: регион может быть зашит внутри строки адреса. Если база современная, мы рекомендуем использовать функции программного интерфейса БСП для разбора адреса.
Если вы работаете в современной конфигурации (например, Бухгалтерия предприятия 3.0, ERP 2.5 или ЗУП 3.1), задача значительно упрощается. Разработчики 1С уже предусмотрели штатные механизмы для управления объемом адресных сведений. Вместо написания сложных запросов, мы можем воспользоваться встроенной обработкой.
Выясним, где найти этот инструмент:
В открывшемся окне система позволит выбрать конкретные регионы, данные по которым больше не нужны. Важный момент: программа сама проанализирует зависимости. Но мы рекомендуем предварительно убедиться, что вы не удаляете регионы основных поставщиков или удаленных филиалов.
Рассмотрим еще один эффективный способ борьбы с раздуванием базы — полный отказ от хранения классификатора внутри 1С. В настройках адресного классификатора можно выбрать вариант Использовать веб-сервис 1С для проверки адресов.
Проанализируем преимущества этого подхода:
Нужно понимать, что простое удаление записей из таблиц (через НаборЗаписей или стандартную обработку) не уменьшает физический размер файла базы данных мгновенно. СУБД (будь то PostgreSQL, MS SQL или файловая .1CD) просто помечает это место как свободное для будущих записей.
Чтобы реально вернуть место операционной системе, выполним следующие действия:
Конфигуратор, далее Администрирование — Тестирование и исправление. Обязательно установим флаг Сжатие таблиц.Shrink (сжатие) базы данных средствами SQL Server Management Studio.Перед любыми манипуляциями с адресным классификатором обязательно создайте резервную копию. Очистка адресных сведений — необратимая операция в плане связей объектов, если вы случайно удалите используемый регион. Также помните о «историчности» данных в формате ФИАС (ГАР): некоторые регионы могут менять коды или названия, и удаление старых версий может затруднить работу с архивными документами.
Таким образом, мы выяснили, что наиболее эффективный путь — это использование штатных средств БСП для очистки и последующее сжатие базы данных, либо полный переход на облачную проверку адресов через сервисы 1С.