Корректировка существующих движений при изменении
структуры регистров
В процессе развития конфигураций разработанных на основе
компоненты "Оперативный учет" достаточно часто
возникает потребность в изменении структуры регистров.
При этом в некоторых случаях встает необходимость внесения
определенных значений в движения регистров уже проведенных
документов.
В процессе изменения метаданных и реструктуризации
информационной базы новые данные регистра (измерения,
ресурсы и реквизиты) в существующих движениях будут
заполнены пустыми значениями. Для того чтобы в них были
проставлены определенные значения, необходимо выполнить
перепроведение всех существующих документов, так как
движения регистров записываются только в процессе проведения.
В случае если конфигурация работает уже достаточно давно
полное перепроведение документов является достаточно
ответственной и небезопасной операцией. Заметим, что
перепроведение документов является существенно более
сложной и операцией чем пересчет итогов по существующим
движениям, так как в процессе перепроведения заново
отрабатывает алгоритм формирования движения, а при пересчете
итогов используются записанные движения. Необходимо
чтобы полное перепроведение документов точно воспроизвело
все существующие движения и соответственно остатки на
текущий момент. Зачастую это может не произойти. Например,
аппаратная или программная ошибка в одном из предыдущих
периодов привела к неправильному формированию движения
документа. В последствии эта ошибка была скомпенсирована
введенными данными инвентаризации или другими документами.
Таким образом существующие остатки соответствуют реальным
данным и удовлетворяют пользователей. При перепроведении
"сбойный" документ будет проведен правильно,
и текущие остатки изменятся. Другой причиной того, что
документы при перепроведении запишут движения отличные
от существующих, может быть некорректное изменение конфигурации
сделанное в некоторый момент и не учитывающее необходимость
правильного перепроведения существующих документов.
Кроме того, если документ при проведении использует
данные справочников, то в некоторых случаях изменения
справочников пользователями также может привести к тому
что, при перепроведении изменятся движения и соответственно
текущие остатки. Поиск причин таких коллизий может отнять
очень много времени. Таким образом, существует необходимость
внести изменения в существующие движения, не отрабатывая
заново алгоритм проведения.
В методической конфигурации предлагается методика,
реализующая заполнение необходимых данных движений регистров
таким образом, что сами движения воспроизводятся полностью.
Для этого в конфигурацию включена обработка "ПерепроведениеДокументов".
Обработка обходит все проведенные документы и выполняет
их перепроведение. Перед проведением документа обработка
запоминает все его движения регистров в таблицах значений.
В процессе проведения документов вместо обычного алгоритма
формирования движений выполняется процедура глобального
модуля ("глТехнологическоеПерепроведение"),
которая записывает движения, запомненные в таблицах
значений. Для реализации данной методики в модуле каждого
документа в начале процедуры "ОбработкаПроведения"
включен однотипный фрагмент, выполняющий анализ переданного
при вызове метода "Провести" параметра и вызов
при необходимости процедуры глобального модуля. Для
того, чтобы вносить в записываемые движения необходимые
изменения, при запоминании каждого движения вызывается
процедура "КорректировкаДвижения", в которой
выполняется заполнение новых данных регистра (измерений,
ресурсов, реквизитов). В приведенном примере в регистр
"ТовЗап" введен новый реквизит "Внутреннее",
в котором предполагается отмечать движения, отражающие
внутренние перемещения товаров. В процедуре "КорректировкаДвижения"
значение этого реквизита заполняется числом "1"
для документов "Перемещение".
Данная методика может использоваться совместно с методикой
временного отключения автоматического удаления движения.
Это может быть целесообразно если необходимо минимизировать
выполняемые действия при больших объемах движений. Временное
отключение автоматического удаления движений позволит
в процессе перепроведения удалять и записывать движения
только по тем регистрам, структура которых изменилась.
Однако реализация этой технологии более сложна, чем
описанная полная перезапись движений.
Приведенная методика реализует перепроведение для конфигураций,
у которых используется только оперативный учет и не
используются другие виды движений (бухгалтерские проводки
операции, записи журналов расчетов, изменения периодических
реквизитов справочников). Для тех конфигураций, которые
используют данные механизмы, методика должна быть дополнена
соответствующими алгоритмами или использована совместно
с методикой временного отключения автоматического удаления
движений. В последнем случае при перепроведении документов
могут удаляться и записываться только движения регистров,
а все остальные движения оставаться неизменными.
|