Как уменьшить объем регистра «Детализация себестоимости партий товаров, постатейные и прочие затраты» в 1С:УТ 11.5 и ERP 2.5

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

При долгой работе в программах 1С:Управление торговлей 11.5, 1С:Комплексная автоматизация 2.5 или 1С:ERP Управление предприятием 2.5 многие системные администраторы и программисты сталкиваются с лавинообразным ростом базы данных. При анализе физической структуры таблиц СУБД выясняется, что львиную долю объема (иногда до 50–70% от всей базы) занимает один единственный регистр сведений — Детализация себестоимости партий товаров, постатейные и прочие затраты (периодический).

В этой статье мы подробно разберем, почему растет этот регистр, как правильно перенастроить систему, чтобы остановить этот рост, и как безопасно очистить накопившиеся гигабайты устаревших данных без ущерба для учета.

Выясняем причину: зачем нужен этот регистр и почему он так разрастается?

Этот регистр появился в архитектуре прикладных решений 1С при переходе на новые механизмы распределения затрат в ERP/КА 2.5 и УТ 11.5. Он задействуется системой при использовании метода оценки стоимости ФИФО (взвешенная или скользящая оценка) и предназначен для решения следующих задач:

  1. Учет дополнительных расходов: хранение информации о затратах на доставку, пошлины и погрузку, которые распределяются на себестоимость товаров на конкретных складах.
  2. Транспортно-заготовительные расходы (ТЗР): отслеживание изменения стоимости дополнительных расходов при перемещении товаров между складами, так как при каждом перемещении стоимость единицы товара может трансформироваться.
  3. Раздельный учет НДС: обеспечение связи партий товаров с конкретными расходами для корректного выделения сумм НДС.

Почему регистр становится гигантским?

Рассмотрим механизм генерации записей. В розничной и оптовой торговле (особенно в таких сферах, как продажа одежды или обуви) номенклатура имеет множество характеристик (размер, цвет, рост). При проведении процедуры «Закрытие месяца» система строит сложнейший граф распределения затрат. Для каждой уникальной комбинации «Номенклатура + Характеристика + Партия + Склад + Статья расходов + Документ-источник» создается отдельная запись в регистре сведений на первое число каждого месяца.

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

Развенчиваем миф: «Очистка регистра влияет только на детализацию в отчетах»

Среди пользователей и некоторых ИТ-специалистов бытует мнение, что данные этого регистра нужны исключительно для построения красивых отчетов по валовой прибыли с расшифровкой до статей затрат, и их можно безболезненно удалять. Это опасное заблуждение. На самом деле данные этого регистра активно используются внутренними механизмами системы:

Разберем по шагам: как оптимизировать настройки и остановить рост регистра

Фирма «1С», признав эту проблему массовой, начиная с версий ERP 2.5.8.263 и УТ 11.5.8, существенно оптимизировала механизмы платформы. Рассмотрим настройки, которые необходимо выполнить прямо сейчас для прекращения избыточного наполнения базы.

Шаг 1. Отключение детализации в учетной политике

Ранее опция детализации жестко привязывалась к раздельному учету НДС. Теперь разработчики разделили эти настройки. Пройдем по следующему пути в интерфейсе:

  1. Перейдем в раздел НСИ и администрирование — Организации.
  2. Откроем карточку нашей организации и перейдем на вкладку Учетная политика и налоговый учет.
  3. Найдем настройки финансового учета.
  4. Проверим состояние флага «Детализировать материальные и постатейные затраты в себестоимости товаров». Если данный функционал глубокой аналитики не требуется руководству в ежедневных отчетах по валовой прибыли — снимем этот флаг.
  5. Если флаг снять полностью нельзя из-за требований учета, включим компромиссную опцию «Не вести детализацию до документов поступления». Это позволит системе не дробить себестоимость до конкретных документов закупки по тем позициям, по которым отсутствует движение НДС, что сократит количество новых записей на 80-90%.

Шаг 2. Анализ и исправление статей расходов

Часто программисты и бухгалтеры настраивают статьи расходов избыточно детально. Проанализируем справочник Статьи расходов:

  1. Перейдем в список статей расходов.
  2. Найдем статьи, у которых в поле Вариант распределения установлено значение На себестоимость товаров.
  3. Обратим внимание на поле Вид аналитики расходов. Если там выбрано Заказ поставщику, Поступление товаров услуг или Заказ на перемещение — это главный триггер для генерации сотен тысяч записей. Система вынуждена плодить комбинации под каждый документ.
  4. Если детальная аналитика до первичного документа закупки не является критически важной для бизнеса, сменим аналитику на более общую (например, Склад или Номенклатура) либо полностью очистим поле аналитики.

Если система ругается при попытке изменить аналитику в существующих статьях, рекомендуется создать новые элементы справочника с корректными настройками распределения (например, с направлением списания на Финансовый результат), а старые статьи закрыть для использования, перенаправив новые документы на созданные статьи.

Инструкция: как безопасно очистить старые периоды в регистре

Если регистр уже раздут до десятков гигабайт, простое удаление записей «напрямую» или через SQL-запросы может нарушить логику системы. Действовать нужно по строгому и безопасному регламенту. Для сокращения объёма накопленных исторических данных без ущерба для логики можно провести многопоточную свёртку 1С:ERP.

Этап 1. Установка даты запрета редактирования

Перед началом любых манипуляций с удалением данных обязательно зайдем в раздел НСИ и администрирование — Поддержка и обслуживание — Даты запрета изменения данных и установим дату запрета для всех пользователей (включая администраторов). Это предотвратит случайное перепроведение документов прошлых лет. Если кто-то случайно перепроведет старый документ поступления, система при очередном закрытии месяца попытается пересчитать себестоимость за тот период и заново сгенерирует миллионы записей в очищенной таблице.

Этап 2. Программное удаление устаревших данных

Для удаления записей регистра за прошлые года (например, старше 3-х лет) напишем внешнюю обработку. Напрямую очищать таблицы через СУБД крайне не рекомендуется во избежание нарушения ссылочной целостности базы. Будем использовать объектную модель 1С. В качестве альтернативы самостоятельному написанию кода можно использовать готовую обработку для очистки записей регистров по выбранному периоду.

Рассмотрим пример кода для выборочного удаления записей регистра сведений по периодам:


// Очистка записей регистра за определенный период
Процедура ОчиститьДетализациюСебестоимостиНаСервере(ДатаНачала, ДатаКонца)
    
    НаборЗаписей = РегистрыСведений.ДетализацияСебестоимостиПериодический.СоздатьНаборЗаписей();
    
    // Будем удалять данные порциями по месяцам для оптимизации транзакций и предотвращения блокировок
    ТекущийМесяц = НачалоМесяца(ДатаНачала);
    Пока ТекущийМесяц <= ДатаКонца Цикл
        
        НаборЗаписей.Отбор.Период.Установить(ТекущийМесяц);
        НаборЗаписей.Прочитать();
        
        Если НаборЗаписей.Количество() > 0 Тогда
            НаборЗаписей.Очистить();
            НаборЗаписей.Записать(Истина);
            ЗаписьЖурналаРегистрации("ОчисткаРегистраСебестоимости",
                УровеньЖурналаРегистрации.Информация, , ,
                "Успешно очищен период: " + Строка(ТекущийМесяц));
        КонецЕсли;
        
        ТекущийМесяц = ДобавитьМесяц(ТекущийМесяц, 1);
    КонецЦикла;
    
КонецПроцедуры

Этот код безопасно очищает регистр порциями. Запись пустого набора с установленным отбором по периоду полностью удаляет соответствующие строки из физической таблицы базы данных.

Этап 3. Физическое сжатие базы данных (Shrink)

После удаления миллионов строк из регистра физический размер файла базы данных (в случае файлового варианта 1Cv8.1CD) или файлов базы данных на MS SQL Server / PostgreSQL не уменьшится автоматически. СУБД просто пометит эти страницы как свободные для будущих записей.

Чтобы реально вернуть дисковое пространство операционной системе, выполним следующие действия: автоматизировать архивацию, обновление и тестирование баз 1С можно при помощи специализированной утилиты в «тихом» режиме.

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

← На главную