При свертке информационных баз 1С:Управление торговлей (редакция 10.3) часто возникает задача полностью удалить документы прошлых периодов, чтобы уменьшить размер базы и скрыть историю закупщиков или поставщиков. Однако прямое удаление документов, на которые ссылаются записи в регистрах (например, в партионном учете), влечет за собой ряд серьезных проблем. Разберем подробнее, к каким последствиям это приводит и какие существуют безопасные варианты решения этой задачи.
Если выполнить непосредственное удаление документов за прошлые годы в обход проверки ссылочной целостности (платформенным методом Удалить()), в системе остаются битые ссылки вид <Объект не найден>. Проанализируем, к какому функциональному сбою это приведет:
Последовательность.ПартионныйУчет. Наличие битых ссылок в границах последовательности делает невозможным штатное восстановление последовательности партионного учета.Неопределено или пустые ссылки, из-за чего в регистрах накопления навсегда зависнут неуправляемые остатки.Рассмотрим безопасный метод очистки истории без физического удаления самих документов. Суть подхода заключается в том, что сами документы-регистраторы сохраняются в базе, но их табличные части очищаются, а реквизиты заполняются значениями по умолчанию. В результате ссылочная целостность регистра ПартииТоваровНаСкладах не нарушается, но коммерческие данные (номенклатура, цены, контрагенты прошлых лет) полностью удаляются.
Проанализируем пример кода для программной очистки реквизитов и табличных частей выбранных документов:
// Создаем экземпляр нового документа для получения значений по умолчанию
ПустойДок = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент();
// ТекОбъект — полученный для редактирования документ прошлого периода
ЗаполнитьЗначенияСвойств(ТекОбъект, ПустойДок, "Номер, Дата");
// Очищаем табличные части документа
ТекОбъект.Товары.Очистить();
ТекОбъект.Услуги.Очистить();
ТекОбъект.ВозвратнаяТара.Очистить();
// Записываем объект без проведения
ТекОбъект.Записать(РежимЗаписиДокумента.Запись);
После очистки реквизитов и табличных частей проведенная свертка сформирует документ ввода остатков, который перекроет старые движения, а старые документы останутся лишь пустыми ссылочными каркасами.
Если требуется сохранить текущий рабочий год (например, 2017 год) и полностью избавиться от «мусора» прошлых лет (2016 год и ранее), наиболее правильным техническим решением будет создание чистой базы.
Разберем по шагам алгоритм создания свертанной базы:
ВыгрузкаЗагрузкаДанныхXML82.epf из исходной базы выгружаются:
При использовании этого метода база избавится от всех ненужных записей прошлых лет, а партионный учет по методу FIFO будет опираться на вновь созданный документ ввода остатков, что полностью исключит появление битых ссылок.