Имя: Пароль:
1C
1С v8
Создание движений после отмены проведения документа
0 Родом из детства
 
26.11.21
11:25
Доброе утро, форумчане. Столкнулся с довольно стрёмным механизмом. В общем имеется р/с статусов Сборного груза со следующими измерениями:
- Груз
- Пакет
- Статус
Груз может быть, как разделенный на пакеты, так и не разделенный. В первом случае измерение "Пакет" всегда пустое. Во втором немного сложнее -> Заполняются оба измерения для идентификации статуса определенного пакета И заполняется только "Груз" для идентификации общего статуса груза(например, если груз разделен на два пакета, один из которых находится в более позднем статусе, общий статус груза будет равен самому раннему статусу его пакетов). То есть при каждом проведении документа, регистрирующего сборные грузы с пакетами, программно дописываются движения статуса самого груза(без пакета) и всё бы норм, однако при следующем кейсе система отрабатывает неправильно:
Было:
Общий статус Груза: Принят на склад (регистратор Прием груза на склад N2)
Статус 1ого пакета груза: Принят на склад (регистратор Прием груза на склад N1)
Статус 2ого пакета груза: Принят на склад (регистратор Прием груза на склад N2)
Прием груза на склад N2 - провели последним, поэтому он и явился регистратором нового общего статуса Груза.
Предыдущий статус груза = "В пути" (по логике, если отменить проведение одного из регистраторов пакетов, общий статус груза поменяется на этот статус)
Если мы отменяем проведение документа "Прием груза на склад N2", то всё норм. Однако, если отменить проведение документа Прием груза на склад N1, то общий статус груза останется "Принят на склад", тк регистратор у него останется прежним.
Документов, которые меняют статусы груза несколько типов - штук 5.
Была идея создать подписку на событие проведения/отмены проведения этих документов, где после завершения транзакции я буду корректировать движения - удалять общий статус груза и устанавливать заново, исходя из минимального статуса пакета. Однако, эти подписки работают в теле транзакции записи в бд. Есть какие-нибудь варианты перехватить обработчик события после транзакции записи в бд?
1 pechkin
 
26.11.21
11:33
при записи регистра пересчитывай зависимые регистры.
а ля свободные остатки в ут11
2 Фрэнки
 
26.11.21
11:36
(0) // Есть какие-нибудь варианты перехватить обработчик события после транзакции записи в бд?

А чего не указал в какой конфиге эти варианты хочешь найти? Они вообще-то разные :-) и подходят не во всех базах одинаково
3 Родом из детства
 
26.11.21
11:37
(2) Сорян, Транспортная логистика и экспедирование, редакция 2.1 (2.1.10.1)
4 Asmody
 
26.11.21
11:51
Тут скорее вопрос в логике: насколько корректно отменять проведение предыдущего документа? И что делать с последующими?
Напрашивается механизм последовательности
5 Родом из детства
 
26.11.21
11:55
(4) С логикой тут большие траблы. Изначально архитектура не подразумевала разделение сборного груза. По логике, нельзя было отменять проведение именно самого сборного груза, при условии, что документ регистратор его текущего статуса <> документом, у которого желаем отменить проведение.
С пакетами, по идее, мы можем отменять регистраторы статусов этих пакетов, если они являются регистраторами их текущего, а не прошлого статуса(кривовато объяснил, конечно)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн