Поиск удаленных объектов (если была пометка, а не удаление)
Пересчет итогов
Упаковка таблиц еще раз
Пункты 1,2,5 будут отличаться от аналогичных для БУ. Разберем их подробно.
Перенос остатков
С переносом остатков в оперативном учете немного сложнее чем в БУ. Основная сложность — движения по регистрам создаются только документами, вторая сложность — раздельное хранение данных регистров. Поэтому во-первых для этого нужно сделать специальный документ, а во-вторых желательно сделать отдельный документ на каждый регистр. Если делать универсальный документ, то его хранение не будет оптимальным. Если информация по остаткам занимает немного места, то можно сделать универсальный документ. Есть еще один путь — создание документа, который не будет хранить данные для проведения (то есть дублировать их в своих таблицах). Он будет всего лишь формировать движения по регистрам в модуле проведения. Вот пример модуля такого документа (автор Шаров Алексей):
Для лчРегистр = 1 По Метаданные.Регистр() Цикл
лмРегистр = Метаданные.Регистр(лчРегистр);
лрПолучаемИз = СоздатьОбъект("Регистр." + лмРегистр.Идентификатор);
лрДвигаем = Регистр.ПолучитьАтрибут(лмРегистр.Идентификатор);
Если ИтогиАктуальны() = 0 Тогда
лрПолучаемИз.ВременныйРасчет();
РассчитатьРегистрыНа(ТекущийДокумент());
КонецЕсли;
лрПолучаемИз.ВыбратьИтоги();
Пока лрПолучаемИз.ПолучитьИтог() = 1 Цикл
Для лчИзмерение = 1 По лмРегистр.Измерение() Цикл
лмИзмерение = лмРегистр.Измерение(лчИзмерение);
лнЗначение = лрПолучаемИз.ПолучитьАтрибут(лмИзмерение.Идентификатор);
лрДвигаем.УстановитьАтрибут(лмИзмерение.Идентификатор, лнЗначение);
КонецЦикла;
Для лчРесурс = 1 По лмРегистр.Ресурс() Цикл
лмРесурс = лмРегистр.Ресурс(лчРесурс);
лнЗначение = лрПолучаемИз.ПолучитьАтрибут(лмРесурс.Идентификатор);
лрДвигаем.УстановитьАтрибут(лмРесурс.Идентификатор, лнЗначение);
КонецЦикла;
лрДвигаем.ДвижениеПриходВыполнить();
КонецЦикла;
КонецЦикла;
Минус этого подхода в том, что у такого документа уже нельзя отменять проведение. Кроме того если будут нарушены движения по регистрам, то их будет сложнее восстановить. Выбирайте сами. В отличие от предыдущей статьи, реализация данного пункта возлагается на ваши плечи.
Удаление итоговых данных
Под итоговыми данными в регистрах понимаются записи в таблицах остатков(сводных оборотов) rg*, и движений ra*. Поэтому удаление итоговых записей будет выглядеть достаточно просто:
Delete ra* r from 1sjourn j where r.iddoc = j.iddoc and j.date <= А
Если у регистра стоит галка быстрая обработка движений, то запрос упрощается:
Delete ra* where date <= А
Удаление файлов rg* можно произвести обычным образом (удалить как файлы или как таблицы на SQL Server). Все равно данные записи в этих файлах должны быть пересчитаны после переноса.
Перенос остатков на нужную дату
Для переноса остатков нужно перенести записи в таблице движений:
Update ra* set date = А from 1sjourn j where r.iddoc = .iddoc and j.date = Б + 1
Если у регистра стоит галка быстрая обработка движений, то запрос упрощается:
Update ra* set date = А where date = Б + 1
и записи в таблице документов:
Update 1sjourn set date = А where date = Б + 1
Данная методика реализована и опробована
. Здесь расположен архив со всеми наработками - обработка по удалению лишних данных, описание. В обработке используются библиотеки ODBCSQL и Rainbow - тоже в архиве. Большое спасибо Алексею!