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