Уже не первый раз сталкиваюсь с ситуацией, когда надо обрезать базу, начиная с 1 января, но в старом периоде еще возможны правки документов.
Предложенная обработка только иллюстрирует приемы, как корректно перенести остатки, не претендуя на полноту реализации.
Общий алгоритм создания "новой" базы:
- Копируем старую базу и называем ее "Новая"
- Из новой базы запускаем обработку переноса остатков по состоянию, например, на 31 декабря 23:59:59, которая создаст документы "Корректировка записей регистров"
- Помечаем на удаление все документы, дата которых меньше даты переноса
- Работаем в новой базе
- В течении какого-то периода (например, месяц) в старой базе производятся манипуляции данными.
- После того как в старой базе все подогнано, удаляем созданные ранее документы "Корректировка записей регистров" и выполняем перенос остатков заново, опять таки по состоянию на 31 декабря 23:59:59.
- Физически удаляем в новой базе документы, помеченные на удаление. Те документы, которые засветились в регистрах, само собой, удалить не удастся. С этим придется смириться.
Как работает обработка.
Она подключается к старой базе, используя COMОбъект. Выполняются запросы к регистрам, получаются остатки.
Потом, перебирая результат запроса получаем уникальные идентификаторы объектов в старой базе, по которым потом ищем эти объекты в новой базе.
Есть, конечно, один нюанс. Если за время подгонки старой базы в ней будут созданы новые объекты (элементы справочников, документы), которые попадут в остатки, эти объекты, само собой, в новой базе найдены не будут. И соответственно в регистрах будут записи с полями <Объект не найден>. Исправить это можно будет проведением тестирования базы, указав, что несуществующие объекты надо создать.
Еще раз повторюсь, обработка не претендует на полноту реализации и предлагается только лишь в качестве иллюстрации методов работы с идентичными объектами в двух базах.