Привет всем форумчанам.

Вопрос такой (без жира).

Допустим есть документ с табличной частью, скажем накладная.

Логика ввода нового документа:
Пишем в NAKLS шапку.
Пишем в NAKLS_T табличную часть, (с сылкой на шапку).
Документ "проводится", т.е. формируются "операции"

Логика изменения проведенного документа:
Изменяем в NAKLS шапку.
Изменяем в NAKLS_T табличную часть, (с сылкой на шапку)
добовляем строки удаляем строки.
Отмена проводки (т.е. отмена операций по предыдущей редакции)
Документ "проводится", т.е. формируются "операции".

Как видно принципиальна возможность изменения и "перепроводки" уже 
"проведенного" документа.
Но по идее у пользователя не должно быть возможности изменить документ не скоректировав проводки, что бы содержание "проведенного" документа всегда соответствовало его "операциям".
Пример:
Вводим Расход 10 изделий, проводим, меняем на 5 изделий и !!! не перепроводим, 
хотя документ имеет флаг проводки.

Теперь собственно сам вопрос:
Как можно гарантировать, что "документ" и его "операции" всегда согласуются?

Проблема возникает от того, что клиент всегда может закомитить 
последовательность операций.
Можно, конечно, создать хранимку, но как в ней совместить "запись" шапки и 
табличной части?
С проводкой (и отменой проводки) проще она легко реализуется через хранимку.

Конечно можно триггер на шапку и список поставить, но иметь в тригере функции 
"расчетного" характера, - не то.

К тому же клиент может и неиметь права "отменять" проводку, а только 
"перепровести".

Как кто решает подобные вопросы?

PS. Просьба не концентрироваться на приведенном примере. Вопрос должен решаться обшим подходом, так как разных документов (и других "многострочных" объектов) много.

Заранее спасибо.

Ответить