Имя: Пароль:
1C
1С v8
В обработке проведения создать программно другой документ
0 Emercom
 
18.04.17
09:59
Как в обработке проведения документа в случае если ОТКАЗ = истина, создать программно другой документ(учитывая что транзакция при отказе откатывается) ?
1 Остап Сулейманович
 
18.04.17
10:03
(0) Не нужно так делать.
Нужно попытаться провести. Потом проверить результат. Потом браться за следующие действия.
2 lodger
 
18.04.17
10:06
проведение происходит в транзакции, отказ = истина приводит к откату транзакции что бы вы там не намутили.
надо ловить уже после проведения как то.
3 Emercom
 
18.04.17
10:09
(1) (2) как?)
4 lodger
 
18.04.17
10:12
зайдите под отладчиком в ПослеЗаписи, там откат уже произошел, проведение=ложь?
5 Остап Сулейманович
 
18.04.17
10:12
(3) У документа в случае удачного проведения обычно устанавливается фишка "Проведен". Вот ее и нужно проверить.
Например :
Об.Записать(РежимЗаписиДокумента.Проведение);
Если Об.Проведен Тогда
  //Как говороил Глохвастов - что-то одно
Иначе
  //Как говороил он же - что-то другое
КонецЕсли;
6 Emercom
 
18.04.17
10:17
(4) Если в обработке проведения отказ=истина, то в процедуру после записи незаходит
7 Emercom
 
18.04.17
10:20
(5) исходный документ проводится через форму, не программно. Поэтому все действия ограничены его процедурами.
8 DrShad
 
18.04.17
10:20
(7) Что!?
9 polosov
 
18.04.17
10:20
(6) Боюсь спрашивать, но спрошу. А в чем смысл сего действа?
10 Emercom
 
18.04.17
10:24
(9) есть документ внутренний заказ, на его основании делается документ перемещение, и вот в случае если у документа перемещение есть расхождение по позициям с внутренним заказом, то происходит отказ записи у документа перемещения. И в этот момент нужно программно создать документ корректировка внутреннего заказа.
11 Buster007
 
18.04.17
10:26
(10) до проведения это нельзя узнать что ли?
12 DrShad
 
18.04.17
10:28
(11) +100500
13 Dmitrii
 
гуру
18.04.17
10:30
(10) Бред какой-то...

>> расхождение по позициям с внутренним заказом

Выполняйте эту проверку ПередЗаписью документа перемещение, если РежимЗаписи = Проведение.
Если выявлены расхождения, создавайте документ Корректировка.
14 lodger
 
18.04.17
10:37
ну вот как всегда. узнали зачем - оказалось можно и не городить велосипед.
15 Emercom
 
18.04.17
11:51
(14) (13) (12) (11) это слишком просто), задача поставили имено после отказа создавать документ. Сделал в итоге велосипед. В форме в обработчике перед записью добавил в дополнительные свойства документа переменную (в случае удачной записи эта переменная обнуляется в обработке проведения), добавил обработчик ожидания в котором проверяю :
1. Наличие этой переменной
2. То что транзакция не активна
3. Модифированность

Если условия совпадают то уже тогда создаю документ.
16 Dmitrii
 
гуру
18.04.17
12:08
(15) Пользователь создал документ. В форме записал его (БЕЗ проведения). Закрыл форму. В форме списка нажал правую кнопку мыши на этом документе и выбрал пункт "Провести".
Ну или воспользовался любым другим способом провести ранее записанный документ перемещения, не открывая форму объекта.

Иными словами это костыль, который будет работать ровно до первого шибко умного пользователя.

Логика непрозрачна, алгоритм запутанный, корректный результат не гарантирован.
17 DrShad
 
18.04.17
12:13
(16) +1
18 Анютик
 
18.04.17
12:14
подписку на событие не предлагать?
19 2083
 
18.04.17
12:15
(15) да уж... нагородили...
ИМХО, когда один документ в результате своей работы должен автоматически родить некий другой документ, лучше всего проектировать это все через регл. задание.
То есть у тебя отрабатывает проведение первого документа (любым способом). Это первое событие дает тебе какой-то результат. Этот результат надо где-то зафиксировать. Через какое-то время фоновое задание собирает накопленные результаты и создает нужные другие документы. Копилка результатов очищается, и мы возвращаемся в начало.

Как это все сделать не спрашивай, думай сам.
20 Джинн
 
18.04.17
12:15
(0) За такую бизнес-логику нужно расстреливать.
21 catena
 
18.04.17
12:19
Вообще прикольная задача. У вас проведение может упасть только из-за расхождения по позициям?
22 Йохохо
 
18.04.17
12:20
(16) то есть если не проведется, то (15) нормально отработает? а если проведется, то тоже?
23 Dmitrii
 
гуру
18.04.17
12:29
(22) Смысл в том, что если пользователь проводит документ перемещения не из формы объекта, то долбанутый алгоритм из (15) вообще никак не отработает (вне зависимости от результатов проведения - успешно или неуспешно).
24 mehfk
 
18.04.17
12:32
(0) Стартануть фоновое задание, передав в него нужные данные, в нем сделать свои черные дела.
25 Dmitrii
 
гуру
18.04.17
12:38
(20) >> За такую бизнес-логику нужно расстреливать.

Согласен. Вопрос только кого?
Если я правильно понял автор ветки не является автором самой реализации этой задачи.

По большому счету мы даже саму бизнес-задачу не знаем. Автор ветки озвучил лишь дебилистическое решение (генерить документы корректировки), родившееся в больном воображении какого-нибудь менеджера. Менеджер этот не понимает всех последствий придуманного им решения, не знает никаких других возможных альтернативных способов.
26 Йохохо
 
18.04.17
12:42
(23) есть матрица истинности. Проводим из списка, проводим программно
ошибка проведения - правильный результат достигнут
успешное проведение - правильный результат достигнут
что не так то? А чтобы воспользоваться удобняшкой надо открыть форму. Человек сделал полезняшку, дуделку, свистелку ДЛЯ ИНТЕРАКТИВНОЙ РАБОТЫ, не порушив ничего