Почему после свертки базы 1С не удаляются старые документы и как решить эту проблему?

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

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

Выясним причину: логика типового механизма свертки

Для понимания происходящего проанализируем структуру бухгалтерского учета в типовых конфигурациях 1С. На счетах учета расчетов с контрагентами (например, 60 «Расчеты с поставщиками и подрядчиками» или 62 «Расчеты с покупателями и заказчиками») третьим субконто выступает «Документы расчетов с контрагентом».

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

Посмотрим на типовые факторы, приводящие к массовому зависанию ссылок:

  1. Несхлопнутое (развернутое) сальдо. Из-за нарушения хронологии проведения документов по одному и тому же договору могут одновременно числиться остатки по дебету 60.01 (долг перед поставщиком) и кредиту 60.02 (выданный аванс). Типовая свертка переносит оба остатка с точностью до расчетных документов, сохраняя оба первичных документа в базе.
  2. Партионный учет запасов. На счетах 10 или 41 при использовании метода списания ФИФО третьим субконто выступает документ партии (оприходования). До полного списания этой партии документ поступления удален быть не может.
  3. Требования учета НДС. Для зачета авансового НДС и формирования книги покупок и книги продаж системе требуются реквизиты исходных первичных документов.

Способ 1. Предварительная подготовка взаиморасчетов до свертки

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

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

Способ 2. Замена ссылок на документы расчетов с контрагентами

Если реальная задолженность существует, но старые тяжелые документы реализаций и поступлений необходимо удалить для очистки базы, применим методику подмены ссылок. Создадим облегченные объекты типа Документ расчетов с контрагентом (ручной учет), перенесем в них дату и номер исходного документа, после чего заменим субконто в операциях ввода остатков.

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


Выборка = Документы.ОперацияБух.Выбрать(НачалоПериодаСвертки, КонецПериодаСвертки);
Пока Выборка.Следующий() Цикл
    ОперацияОбъект = Выборка.ПолучитьОбъект();
    ТаблицаПроводок = ОперацияОбъект.Движения.Хозрасчетный;
    ТаблицаПроводок.Прочитать();
    
    БылИзменен = Ложь;
    Для Каждого Проводка Из ТаблицаПроводок Цикл
        // Проверяем третье субконто дебета и кредита
        Для НомерСубконто = 1 По 3 Цикл
            ЗначениеСубконтоДт = Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами];
            Если ЗначениеЗаполнено(ЗначениеСубконтоДт) И Не ТипЗнч(ЗначениеСубконтоДт) = Тип("ДокументСсылка.ДокументРасчетовСКонтрагентом") Тогда
                НовыйДокРасчетов = Документы.ДокументРасчетовСКонтрагентом.СоздатьДокумент();
                НовыйДокРасчетов.Дата = ЗначениеСубконтоДт.Дата;
                НовыйДокРасчетов.Номер = ЗначениеСубконтоДт.Номер;
                НовыйДокРасчетов.Организация = Проводка.Организация;
                НовыйДокРасчетов.Контрагент = Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты];
                НовыйДокРасчетов.ДоговорКонтрагента = Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры];
                НовыйДокРасчетов.Записать();
                
                Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами] = НовыйДокРасчетов.Ссылка;
                БылИзменен = Истина;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
    Если БылИзменен Тогда
        ТаблицаПроводок.Записать();
    КонецЕсли;
КонецЦикла;

Для ручной или полуавтоматической точечной корректировки можно также использовать универсальную обработку Поиск и замена значений, заменив ссылки на старые реализации ссылками на ручные расчетные документы.

Способ 3. Очистка вторичных связей и высвобождение места

Нередко даже после очистки субконто в проводках документы продолжают удерживаться базой. Проверим и устраним скрытые ссылки:

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

Альтернативное решение: перенос остатков в чистую базу

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

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

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

← На главную