Как можно в регистре сохранить прошлые движения документа при проведении #21316


#0 by Diter
Как можно в регистре сохранить прошлые движения документа при проведении его с новыми параметрами. Есть очень простой регистр "Отменённые заявки", в котором нужно фиксировать все заявки, которые отменялись. Отменённой считается заявка, у которой удалили подчинённые документы (документы-продолжения) или просто разорвали связь с ними. Заявка потом может быть исполнена заново с заведением новых документов на её основании. Регистр этот нужен для отслеживания "ненадёжных" клиентов, которые "воду варят". При отмене заявки в регистр делается запись. При повторном исполнении заявки хочется, чтобы в регистр добавилась запись, противоположная первой (как бы сторнируя её). Так вот это то и не получается. Т.к. работать я могу только в модуле документа, сделал так. 1. проведение с параметром Провести(параметр) и обработкаПроведения(Параметр). В зависимости от его значения и решаю нужно делать запись в этот регистр (если идёт отмена) или не нужно (проводим новую заявку). 2. При проведении без параметра (исполнение заявки) .... вот тут то косяк и кроется. В регистре остаётся только последняя ("сторнирующая") запись. Первая - исчезает. Как быть? Посоветуйте пожалуйста. Заренее спасибо. Особая просьба доморошенным острякам - не напрягайтесь. Структура регистра : Измерения : ДатаОтмены - Дата Ресурс : Ключ - Число - длина 1 - точность 0 Поясню по ключу. При "сторнировании" отмены заявки делаю движение приход с ключом -1. В результате по остаткам 0, а информация о попытке отмены заявки есть. Может чего не так в регистре сделал?
#1 by NDV
Делаем два регистра и проводим по одному или другому в зависимости от надобности. Провести(<Режим>,<Знач>) - в процедуру ОбработкаПроведения передаем <Знач> и далее по обстоятельствам.
#2 by Мулька
галку снять в пофигураторе
#3 by NDV
Ах да, обязательно, в условии ОбработкиПроведения, еще и чистим движения документа в неиспользуемом регистре "ОчиститьДвижения("Регистр.ХХХ")".
#4 by Diter
Так не хотелось бы два регистра делать. А как тогда поступать при отмене проведения? В ОбработкаУдаленияПроведения ставить ОчиститьДвижения?
#5 by NDV
Примерно так: А два регистра... Ну в крайнем случае, если потребуется сделать отчет под названием "ВотЧтоБылоБыЕслиБыЗаказыНеОтменяли", можно получить движения или сразу остатки по двум рег-и и просуммировать их.
#6 by Diter
Это понятно. Как сделать отмену проведения документа с очисткой движений если : Синтаксис: ОчиститьДвижения(<ВидыДвижений>) Назначение: Удалить движения документа. ...... Замечание: Данный метод доступен только при отключенном в конфигурации флаге ''Автоматическое удаление движений''. Метод доступен только в Модуле документа в ПРЕДОПРЕДЕЛЁННОЙ ПРОЦЕДУРЕ ОбработкаПроведения.
#7 by Diter
Аууууу
#8 by 427
типовая задача из сертификации - режим допроведения. Ее и решай.
#9 by NDV
По-моему, непроведенный документ, ровно как и снятый с проведения документ не имеет имеет движений по регистрам. Если я ошибаюсь, тогда: В ОбработкаУдаленияПроведения собираем все регистры через метаданные и чистим их. Соответственно, непроведенный док, не двигает регистры, проведенный с условием только один из регистров. Только не понятно, зачем снимать док с проведения, если нужно учитывать все состояния заказов. Ведь достаточно перепровести его с другим условием...
#10 by Diter
Док нужно отменить вообще (пометить на удаление) при этом нужно очистить движения. Спасибо за содержательный совет. Вас не Билл Гейтс зовут? Может Нуралиев? Вы так всё знаете. Вы таким родились? Подскажите хоть один документ где это сделано.
#11 by Diter
Так в том то и дело, что ОчиститьДвижения работает только в процедуре ОбработкаПроведения
#12 by Diter
Всё вопрос снят. Спасибо NDV на толчок в нужном направлении.
#14 by NDV
Ну да... :) И все-таки, по-моему, еще непроведенный документ, ровно как и снятый с проведения документ (соответственно и помеченный на удаление) не имеет никаких движений по регистрам.
#15 by Diter
А если не умничать, а просто подсказать? Вопрос уже решён.
#16 by Diter
Тут ты совершенно прав. Даже при снятой галке "Автоматическое удаление движений" при распроведении документа регситры очишаются автоматом. А по поводу ОчиститьДвижение попробуй разместить где нибудь не в ОбработкаПроведенияи получишь "Недопустимая команда" сообщение 1С.
#17 by NiGMa
Diter, если ты хочешь иметь в регистре все старые движения - тебе нужно просто запретить удаление и отмену проведения этого документа. Ты же правильно пишешь, что при распроведении документа все его движения удаляются асолютно безусловно. А в ОбработкаПроведения до того, как напишешь ОчиститьДвижения можно их выбрать, проанализировать, сохранить - в общем все, что хочешь. Вот здесь и копай!
#18 by Дятел
мимо пролетал
#19 by Лошадка в пальто
Дитер-офигенный фантазер... Ответ правильный в 18.
#20 by 427
Специально для Дитеров - типовая российская ТиС почти вся так сделана. Признак АвтоУдаление Дитеров не установлен и в большинстве доков есть клавиша "провести" для "допроведения"...
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям