Разберем ситуацию, с которой часто сталкиваются разработчики и специалисты при работе с конфигурациями 1С:Комплексная автоматизация и 1С:ERP. Речь идет о странном, на первый взгляд, поведении системы: документ распроведен или помечен на удаление, но в регистре накопления РезервыТоваровОрганизаций записи остаются или даже появляются. Давайте выясним, почему так происходит и как с этим работать. Для этой задачи есть обработка очистки фантомных записей в регистрах.
Прежде всего, важно понять назначение этого объекта. Регистр РезервыТоваровОрганизаций является ключевым элементом механизма Интеркампани (межфирменные продажи). Его главная задача — оптимизация учета и «схлопывание» встречных оборотов между организациями внутри одной группы компаний.
Вместо того чтобы плодить огромное количество документов передачи товара при каждом перемещении, система использует этот регистр для накопления данных о необходимости передачи. Это позволяет в конце месяца сформировать минимально необходимый пакет документов для корректного отражения собственности товаров. Появление движений после распроведения документа зачастую связано с тем, что регламентные операции закрытия месяца уже «подхватили» данные для расчета, и система пытается сохранить целостность цепочки операций.
Рассмотрим основные причины, из-за которых эти записи становятся проблемой:
Разберем возможные методы исправления ситуации, двигаясь от самых безопасных к радикальным.
Прежде чем приступать к принудительной очистке, выполним следующие шаги:
Исправление ошибок в регистрах товаров организаций (доступна в некоторых версиях конфигураций в разделе Администрирование или Регламентные операции).Интеркампани. Часто «зависшие» движения — это следствие того, что цепочка документов не была закрыта до конца — для этого есть отчет для выявления ошибок в механизме Интеркампани.Закрытие месяца повторно, после того как удостоверимся, что все первичные документы оформлены верно. Система должна сама «пересчитать» регистр и исключить ненужные записи.Если штатные инструменты не помогают и записи в регистре откровенно блокируют закрытие периода, специалисты часто прибегают к созданию служебных обработок — поможет обработка для ручного редактирования и очистки регистров. Важно: делайте это с максимальной осторожностью.
При написании собственной обработки для удаления записей, учитывайте следующее:
НаборЗаписей, если вы не уверены в отсутствии ссылочной целостности с другими регистрами.
// Пример логики очистки регистра
НаборЗаписей = РегистрыНакопления.РезервыТоваровОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(СсылкаНаДокумент);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
КонецЕсли;
Помните, что удаление движений — это «неправославный» путь. Используя его, вы берете на себя ответственность за возможные расхождения в учете. Всегда выполняйте резервное копирование базы перед запуском подобных скриптов.
Ситуация, когда после распроведения документа движения остаются, свидетельствует о том, что механизм Интеркампани пытается «запомнить» состояние для будущих расчетов. Если это не мешает закрытию месяца и не искажает управленческую отчетность — лучше не трогать такие записи. Если же они становятся препятствием, начните с анализа цепочки Интеркампани и использования штатных обработок. В крайнем случае используйте написанные инструменты очистки, предварительно протестировав их на копии базы данных — удобнее через инструмент автоматизированного исправления ошибок в регистрах.