Как правильно выполнить свертку информационной базы УПП 1.3 и устранить ошибки

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

Свертка крупной информационной базы в конфигурации «1С:Управление производственным предприятием 1.3» — одна из наиболее ресурсоемких и ответственных административных задач. Основная цель процедуры заключается в уменьшении физического размера базы данных, удалении неактуальных исторических документов и ускорении работы системы при сохранении корректных остатков на выбранную дату. Разберем по шагам ключевые подходы к свертке УПП 1.3, типовые проблемы, с которыми можно столкнуться, и проверенные способы их решения.

Основные подходы к свертке базы УПП 1.3

На практике применяются два основных сценария:

  1. Использование внешней обработки свертки базы: алгоритм выполняет расчет остатков по регистрам на дату свертки, формирует корректирующие документы (например, ввод остатков по регистрам и бухгалтерские операции), после чего очищает движения и удаляет старые документы.
  2. Перенос остатков и НСИ в новую чистую базу через «1С:Конвертация данных»: создается пустая база той же конфигурации, куда с помощью правил обмена выгружаются нормативно-справочная информация (справочники), кадровая история, зарплатные данные и остатки по регистрам на дату среза. Этот подход позволяет гарантированно избавиться от накопившегося мусора в справочниках и избежать многодневных блокировок базы при удалении миллионов строк.

Подготовка базы данных перед выполнением свертки

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

  1. Создание полной резервной копии: перед любыми манипуляциями создаем дамп базы данных средствами СУБД (SQL) или выгрузку в файл .dt.
  2. Закрытие периода: убедимся, что по дату свертки включительно выполнены все регламентные операции (полное закрытие месяца, расчет себестоимости по РАУЗ или списание партий, восстановление последовательностей расчетов по договорам, формирование книг покупок и продаж).
  3. Очистка вспомогательных таблиц: удалим устаревшие записи версионирования из регистра сведений ВерсииОбъектов, а также очистим таблицы регистрации изменений планов обмена.
  4. Распроведение будущих документов: если обработка выдает ошибки при формировании движений, рекомендуется временно снять с проведения документы, дата которых позже даты свертки.
  5. Отключение регламентных процедур: временно отключим полнотекстовый поиск и регламентные фоновые задания на сервере «1С:Предприятия».

Устранение ошибки «Запись с такими ключевыми полями существует»

Выясним причину частой ошибки, возникающей при обработке регистров сведений:


{ВнешняяОбработка.СверткаБазы.МодульОбъекта(658)}: Ошибка при вызове метода контекста (Записать)
    НаборЗаписей.Записать();
по причине:
Запись с такими ключевыми полями существует!

Эта ошибка появляется в периодических или непериодических регистрах сведений (например, ЖурналУчетаСчетовФактур, СоответствиеСчетовБУиНУ и др.), когда несколько записей за разные исторические даты принудительно сводятся обработкой к одной дате среза. В результате формируются строки с абсолютно одинаковым набором измерений, что нарушает уникальность ключа записи.

Для устранения ошибки применим следующие решения:

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

Особенности свертки ключевых разделов учета в УПП 1.3

Рассмотрим специфику учета, которую критически важно учитывать при настройке правил и обработок:

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

Оптимизация производительности и предотвращение утечек памяти

При свертке крупных баз стандартная обработка может завершиться аварийно с ошибкой «Недостаточно памяти». Посмотрим на пример кода, позволяющего оптимизировать удаление данных порциями с явной фиксацией транзакций:


// Отключение пересчета итогов на время массовой записи остатков
РегистрыНакопления.УчетЗатрат.УстановитьИспользованиеИтогов(Ложь);

// Пакетная очистка движений и удаление документов
РазмерПакета = 1000;
Счетчик = 0;

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

Если ТранзакцияАктивна() Тогда
    ЗафиксироватьТранзакцию();
КонецЕсли;

// Включение и пересчет итогов после завершения обработки
РегистрыНакопления.УчетЗатрат.УстановитьИспользованиеИтогов(Истина);
РегистрыНакопления.УчетЗатрат.ПересчитатьИтоги();

Финальные действия после завершения свертки

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

  1. Контроль сходимости учета: сформируем оборотно-сальдовую ведомость (БУ и НУ), ведомость по взаиморасчетам и материальные отчеты на дату свертки в исходной и свернутой базах. Все итоговые остатки должны полностью совпадать.
  2. Тестирование и исправление: запустим в Конфигураторе операцию «Тестирование и исправление» с флагами «Реиндексация таблиц», «Пересчет итогов» и «Проверка логической целостности».
  3. Сжатие базы данных на сервере СУБД: удаление строк из таблиц 1С не уменьшает размер файла базы автоматически. На сервере MS SQL Server выполним перестроение индексов (REBUILD INDEX) и сжатие базы данных (SHRINKDATABASE / SHRINKFILE), чтобы освободить место на диске.
← На главную