|
Версионирование и проведение | ☑ | ||
---|---|---|---|---|
0
ДядяМитяй
24.01.22
✎
17:01
|
С удивлением обнаружил, что при включенном версионировании к моменту захода в обработку проведения уже и реквизит Проведен = истина и Ссылка.Проведен тоже. Хотел проверять на проведение непроведенного документа, а тут такая неожиданность. Пришлось проверку выносить в ПередЗаписью.
Это нормальное поведение или изъ... доставшейся мне самописки на БСП? И как грамотно выполнить проверку, что документ "не перепроводится", а проводится из непроведенного состояния. Ну кроме объявления переменной БулоПроведено в модуле объекта... |
|||
1
DrShad
24.01.22
✎
17:09
|
так все проверки и делаются перед записью
|
|||
2
RetardedToBoot
24.01.22
✎
17:10
|
Поставь брекпоинт в обработку проведенич и при записи и смотри откуда вызываются.
|
|||
3
Dmitrii
гуру
24.01.22
✎
17:18
|
(0) Это нормальное поведение. Чем вызвано твоё удивление - непонятно. Когда документ проводится, он должен быть уже записан в базу данных. Т.к. запись и проведение выполняются в одной транзакции, если проведение обломится, то и запись вместе со всей транзакцией откатится.
Все подобные проверки выполняются ПередЗаписью. Типа "Если НЕ Ссылка.Проведен и РежимЗаписиДокумента.Проведение". При необходимости можно сохранить что-то в ДополнительныеСвойства. Но сама идея - вешать какую-то логику на то проводится ли документ повторно - как правило не самая лучшая. |
|||
4
ДядяМитяй
25.01.22
✎
12:04
|
(3) Например, при проведении надо сделать проверку с громоздкими запросами к другим таблицам - документам, регистрам ... - а, скажем, если практикуется групповое перепроведение - этого делать не надо, потому что дико долго будет.
|
|||
5
DrShad
25.01.22
✎
12:15
|
(4) при групповом проведении пиши в ДопСвойства и на него проверяй
|
|||
6
ДядяМитяй
25.01.22
✎
12:17
|
(3) удивление вызвано тем, что Ссылка.Проведен = Истина. При обычном проведении такого не должно быть. А при версионировании видимо происходит запись перед тем, как начнется обработка проведения.
|
|||
7
DrShad
25.01.22
✎
12:18
|
тебе же сказали что запись происходит до проведения и не зависит от версионирования
|
|||
8
Dmitrii
гуру
25.01.22
✎
12:19
|
(4) Например, в типовой БП 3.0 это уже реализовано.
В модуле документа.
|
|||
9
Dmitrii
гуру
25.01.22
✎
12:22
|
(6) >> При обычном проведении такого не должно быть.
Наоборот. В момент поведения (ОбработкаПроведения) документ уже записан. Поэтому при обращении к БД уже Ссылка.Проведен = Истина. ПередЗаписью Ссылка.Проведен = Ложь. Если проводится не проведенный документ. |
|||
10
ДядяМитяй
25.01.22
✎
12:24
|
(8) Спасибо, не знал
(9) Выглядит довольно дико. Все равно, что отправить отчет о сделанной работе и после этого приступить к ее выполнению. )) |
|||
11
Dmitrii
гуру
25.01.22
✎
12:24
|
+ к (8).
Аналогичный код можно встретить и в ОбработкаПроведения. Наример.
|
|||
12
Dmitrii
гуру
25.01.22
✎
12:26
|
(10) >> Выглядит довольно дико.
Наоборот. Выглядит абсолютно логично. При проведении мы должны оперировать текущими данными документа, а не тем что в нём было до записи. Странным было бы проводить документ с данными, которые были ДО того как пользователь что-то в нём поменял. |
|||
13
Kassern
25.01.22
✎
12:26
|
(10) а как вы по другому это реализуете? Ведь проведен или нет, это всего лишь типовой реквизит документа. Такой же как дата и номер. Чтобы сделать проводки с этим регистратором, надо, чтобы документ уже был в базе. Вы предлагаете записывать документ в базу без пометки проведения, потом делать проводки, а потом еще раз записывать документ, чтобы поставить пометку проведен?
|
|||
14
pechkin
25.01.22
✎
12:27
|
(10) а ты предлагаешь несколько раз записывать документ?
|
|||
15
Kassern
25.01.22
✎
12:28
|
(14) видимо так, либо метку проведения хранить не в документе, а в отдельном регистре)
|
|||
16
pechkin
25.01.22
✎
12:29
|
если нужно состояние до записи, то сохрани его в процедуре ПередЗаписью
|
|||
17
pechkin
25.01.22
✎
12:30
|
ну а проверки воообще лучше делать в процедуре ОбработкаПроверкиЗаполнения
|
|||
18
ДядяМитяй
25.01.22
✎
12:34
|
(14) а фактически так и получается - если проведение обломилось, то записывается еще раз уже без "проведен"
|
|||
19
Kassern
25.01.22
✎
12:35
|
(18) "то записывается еще раз уже без "проведен"" самостоятельно типовые документы так не записываются. Только если вы сами в попытку не пропишите, мол если не провелось, то просто записать.
|
|||
20
Kassern
25.01.22
✎
12:36
|
(18) попробуйте любой типовой документ без записи сразу провести. Если будут ошибки, то он у вас не запишется в базу, транзакция будет отменена
|
|||
21
DrShad
25.01.22
✎
12:40
|
(19) +1
|
|||
22
ДядяМитяй
25.01.22
✎
12:40
|
(19) мы заходим в обработку проведения. документ уже записан с проведен = истина, при проведении случается отказ = истина. по вашей же логике записывается еще раз с проведен = ложь.
(20) "транзакция будет отменена". а почему же ссылка.проведен = истина? разные транзакции? одна после записи другая после проведения? |
|||
23
pechkin
25.01.22
✎
12:41
|
(22) это называется отмена транзакции. Советую поизучать что такое транзакции
|
|||
24
DrShad
25.01.22
✎
12:42
|
(22) потому что ты в транзакции смотришь
|
|||
25
Kassern
25.01.22
✎
12:46
|
(22) Почитайте про работу с транзакциями и у вас множество вопросов отпадет
|
|||
26
Dmitrii
гуру
25.01.22
✎
12:51
|
(22) >> при проведении случается отказ = истина, по вашей же логике, записывается еще раз.
Это по твоей логике. По логике СУБД и 1С происходит откат транзакции к предыдущему состоянию объектов базы данных, где документ не записывали и не проводили. Никто дважды ничего не записывает. Даже если ты принудительно в обработке проведения понавтыкаешь ЭтотОбъект.Записать(), при отмене транзакции всё просто откатиться назад. |
|||
27
Жан Пердежон
25.01.22
✎
12:54
|
(22) Проведен - реквизит документа, документ 1 раз в базу записывается
|
|||
28
Dmitrii
гуру
25.01.22
✎
12:54
|
ОФФ. Вообще странно, что такие очевидные вещи приходится рассказывать коллеге с семилетнем стажем на форуме.
|
|||
29
Жан Пердежон
26.01.22
✎
14:17
|
(28) да, должно быть странно;
с другой стороны из опыта собеседований 5-7 лет и более стажа не гарантируют знаний и по факту может оказаться слабее джуна с 1,5 годами на большом проекте |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |