В процессе эксплуатации конфигурации 1С:Розница, особенно в крупных торговых сетях с распределенными информационными базами (РИБ), системные администраторы часто сталкиваются с проблемой стремительного роста размера базы данных. Файловые базы начинают тормозить при достижении объема 5–10 Гб, а серверные — нагружают дисковую подсистему и замедляют выполнение регламентных операций. В данной статье мы разберем, какие данные можно безболезненно удалять, зачем нужны технические регистры и как оптимизировать обмен данными между магазинами.
Проанализируем роль регистра ФискальныеОперации. Многие пользователи ошибочно полагают, что это дубль таблицы чеков. На самом деле этот регистр является частью Библиотеки подключаемого оборудования (БПО) и служит связующим звеном между 1С и фискальным накопителем (ФН) кассового аппарата. Рассмотрим основные функции этого объекта:
ХранилищеЗначения сохраняется полная структура чека в формате XML. Именно эти данные используются программой для формирования QR-кода при просмотре старого чека или для отправки электронной копии чека покупателю по SMS или Email.Важный вывод: Данные в этом регистре нужны только для оперативного контроля и сервисных функций (печать копий, отправка чеков). Для ведения складского и финансового учета они не используются. Если вашему магазину не требуется печатать копии чеков за прошлый год, этот регистр можно смело очищать.
Разберем ситуацию со справочником ШтрихкодыУпаковокТоваров. С введением обязательной маркировки (сигареты, обувь, одежда) этот справочник стал одним из самых «тяжелых». В нем хранится каждый уникальный код DataMatrix, который был считан на кассе. Выясним, почему это становится проблемой:
В типовых правилах обмена 1С:Розница часто настроена миграция всех штрихкодов по всем узлам РИБ. В результате касса в одном магазине «знает» о каждой пачке сигарет, проданной в другом магазине на другом конце города. Это приводит к раздуванию таблицы и замедлению поиска при подборе товара.
Для оптимизации этого узла рекомендуем выполнить следующие действия:
Аналогичная проблема наблюдается в регистре АкцизныеМаркиЕгаис. В нем хранятся сведения о каждой бутылке крепкого алкоголя. Рассмотрим практический совет по очистке: в данном регистре можно удалять записи о реализованной продукции, ориентируясь на дату продажи. Оставим глубину хранения в 2-4 недели на случай возврата покупателем, остальное можно удалять.
Также обратим внимание на регистр ЗамерыВремени. Часто он остается включенным после внедрения системы, генерируя тысячи записей ежедневно. Проверим настройки в разделе Администрирование — Обслуживание — Оценка производительности и отключим сбор данных, если он не используется для анализа узких мест.
Простое удаление записей из интерфейса 1С может вызвать ошибку "Нехватка памяти", если записей слишком много (сотни тысяч или миллионы). Разберем по шагам, как правильно организовать очистку регистра ФискальныеОперации программным способом, используя удаление порциями.
Посмотрим на пример кода обработки для удаления записей:
// Пример очистки регистра ФискальныеОперации порциями
Процедура ОчиститьРегистрПорциями()
РегистрИмя = "ФискальныеОперации";
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 10000
| ФискальныеОперации.Период КАК Период,
| ФискальныеОперации.Регистратор КАК Регистратор
|ИЗ
| РегистрСведений.ФискальныеОперации КАК ФискальныеОперации
|ГДЕ
| ФискальныеОперации.Период < &ДатаОчистки";
Запрос.УстановитьПараметр("ДатаОчистки", ДобавитьМесяц(ТекущаяДата(), -1)); // Удаляем старше месяца
Пока Истина Цикл
Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда Прервать; КонецЕсли;
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Набор = РегистрыСведений[РегистрИмя].СоздатьНаборЗаписей();
Набор.Отбор.Регистратор.Установить(Выборка.Регистратор);
Набор.Записать(); // Записываем пустой набор, тем самым удаляя записи
КонецЦикла;
// Для файловой базы желательно вызывать фиксацию транзакции или паузу
ОбработкаПрерыванияПользователя();
КонецЦикла;
КонецПроцедуры
Использование метода СоздатьНаборЗаписей() с установленным отбором и последующей записью без добавления строк — это самый быстрый и надежный способ очистки движений в 1С. Это минимизирует рост лога транзакций в SQL-версии и предотвращает зависание файловой базы.
Проанализируем еще один скрытый источник роста базы — двоичные данные. В 1С:Розница при обмене с ЕГАИС и Честным Знаком все входящие и исходящие XML-пакеты сохраняются в справочниках присоединенных файлов или специальных технических регистрах (например, очереди сообщений).
Выясним причину: 1С хранит историю обмена для возможности повторной отправки или разбора конфликтных ситуаций. Однако за 2-3 года объем этих логов может превысить объем всех учетных данных в несколько раз. Рекомендуем использовать типовую обработку "Очистка ненужных файлов", где можно настроить удаление файлов, связанных с документами ЕГАИС, старше определенного периода.
Если вы работаете в файловом режиме (файл 1Cv8.1CD), помните важный нюанс: после программного удаления записей физический размер файла на диске не уменьшится. 1С просто пометит эти блоки данных как свободные для будущих записей. Чтобы реально вернуть место на диске и ускорить работу, необходимо выполнить Сжатие таблиц. Для этого:
Резюме: Регулярная очистка регистра ФискальныеОперации и справочника ШтрихкодыУпаковокТоваров (особенно на кассовых узлах в РИБ) позволяет поддерживать высокую скорость пробития чеков и предотвращает критическое разрастание базы данных. Оптимальный период хранения таких данных — от 1 до 3 месяцев.