При проведении свертки информационной базы пользователи часто сталкиваются с неожиданной ситуацией: процедура завершена успешно, сформированы вводные операции и остатки, старые документы помечены на удаление, однако удалить их физически платформа не позволяет. При попытке контроля ссылочной целостности система сообщает, что документы используются в качестве субконто во вновь созданных операциях ввода остатков. Разберем подробно, почему так происходит и какие существуют практические способы решения этой проблемы.
Для понимания происходящего проанализируем структуру бухгалтерского учета в типовых конфигурациях 1С. На счетах учета расчетов с контрагентами (например, 60 «Расчеты с поставщиками и подрядчиками» или 62 «Расчеты с покупателями и заказчиками») третьим субконто выступает «Документы расчетов с контрагентом».
Когда на дату среза по договору контрагента имеется незакрытая задолженность, типовой механизм свертки формирует бухгалтерскую проводку по переносу остатка. Чтобы сохранить аналитику расчетов по срокам возникновения долга и обеспечить корректное закрытие сумм в будущем, в качестве третьего субконто подставляется исходный первичный документ (например, Реализация товаров и услуг или Поступление товаров и услуг). Соответственно, пока этот документ указан в субконто новой операции, удалить его из информационной базы невозможно по правилам ссылочной целостности.
Посмотрим на типовые факторы, приводящие к массовому зависанию ссылок:
60.01 (долг перед поставщиком) и кредиту 60.02 (выданный аванс). Типовая свертка переносит оба остатка с точностью до расчетных документов, сохраняя оба первичных документа в базе.10 или 41 при использовании метода списания ФИФО третьим субконто выступает документ партии (оприходования). До полного списания этой партии документ поступления удален быть не может.Прежде чем выполнять свертку рабочей базы, выполним предварительную подготовку данных, которая позволит минимизировать количество зависших документов:
Оборотно-сальдовая ведомость по счетам 60 и 62 с максимальной детализацией по всем субконто.Корректировка долга (вид операции «Зачет взаимных требований» или «Перенос задолженности»).Если реальная задолженность существует, но старые тяжелые документы реализаций и поступлений необходимо удалить для очистки базы, применим методику подмены ссылок. Создадим облегченные объекты типа Документ расчетов с контрагентом (ручной учет), перенесем в них дату и номер исходного документа, после чего заменим субконто в операциях ввода остатков.
Рассмотрим пример алгоритма на встроенном языке 1С для автоматической замены первичных документов в движениях ввода остатков:
Выборка = Документы.ОперацияБух.Выбрать(НачалоПериодаСвертки, КонецПериодаСвертки);
Пока Выборка.Следующий() Цикл
ОперацияОбъект = Выборка.ПолучитьОбъект();
ТаблицаПроводок = ОперацияОбъект.Движения.Хозрасчетный;
ТаблицаПроводок.Прочитать();
БылИзменен = Ложь;
Для Каждого Проводка Из ТаблицаПроводок Цикл
// Проверяем третье субконто дебета и кредита
Для НомерСубконто = 1 По 3 Цикл
ЗначениеСубконтоДт = Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами];
Если ЗначениеЗаполнено(ЗначениеСубконтоДт) И Не ТипЗнч(ЗначениеСубконтоДт) = Тип("ДокументСсылка.ДокументРасчетовСКонтрагентом") Тогда
НовыйДокРасчетов = Документы.ДокументРасчетовСКонтрагентом.СоздатьДокумент();
НовыйДокРасчетов.Дата = ЗначениеСубконтоДт.Дата;
НовыйДокРасчетов.Номер = ЗначениеСубконтоДт.Номер;
НовыйДокРасчетов.Организация = Проводка.Организация;
НовыйДокРасчетов.Контрагент = Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты];
НовыйДокРасчетов.ДоговорКонтрагента = Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры];
НовыйДокРасчетов.Записать();
Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ДокументыРасчетовСКонтрагентами] = НовыйДокРасчетов.Ссылка;
БылИзменен = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если БылИзменен Тогда
ТаблицаПроводок.Записать();
КонецЕсли;
КонецЦикла;
Для ручной или полуавтоматической точечной корректировки можно также использовать универсальную обработку Поиск и замена значений, заменив ссылки на старые реализации ссылками на ручные расчетные документы.
Нередко даже после очистки субконто в проводках документы продолжают удерживаться базой. Проверим и устраним скрытые ссылки:
Тестирование и исправление с установленным флажком «Сжатие таблиц информационной базы». В клиент-серверном варианте выполним процедуру Shrink средствами СУБД.Наиболее надежной практикой вместо стандартной свертки накопившей ошибки базы является перенос актуальных данных в новую конфигурацию:
Такой подход полностью исключает проблемы с битыми ссылками, гарантирует максимальную производительность новой базы и отсутствие устаревших регистров.