Имя: Пароль:
1C
1С v8
Запись документа без перепровдения.
0 jamesgold
 
20.09.22
19:19
Добрый день, прошу помочь.

Имеется документ на поддержке с возможностью редактирования. Необходимо при проведении документа выполнять алгоритм, однако при записи документа срабатывает проведение и алгоритм:
1. срабатывает когда не должен т.е. при записи.
2. при проведении он срабатывает еще раз.

Каким образом при проведении можно различить что инициатор запись. Свойство на форме "ПриЗаписиПерепроводить" менять нельзя.
1 OldCondom
 
20.09.22
19:32
убрать лишний обработчик призаписи/после записи
2 OldCondom
 
20.09.22
19:33
а лучше снять возможность редактирования и подписку сделать
3 ejikbeznojek
 
20.09.22
19:39
А если провели, распровели а потом опять провели, алгоритм должен отработать 2 раза или 1?
4 ejikbeznojek
 
20.09.22
19:43
Ну или добавь в перед записью чтение ряда реквизитов в глобальную переменную. В том числе и реквизит проведен.
А в проведении смотри, если сейчас проведён, а был не проведён, то запуская свой алгоритм.
5 jamesgold
 
20.09.22
19:53
(3) один раз
6 ejikbeznojek
 
20.09.22
20:00
(5) Тогда 4 не подойдёт))
Наверное тогда нужен 2й алгоритм, который проверит выполнялся ли 1й))
7 jamesgold
 
20.09.22
20:03
(6) Проблема в том что алгоритм выполняется лишний раз уже при записи в результате данные которые сформированы когда документ еще не проведен.
8 ejikbeznojek
 
20.09.22
20:06
Может быть перенести из ПриЗаписи в Обработку проведения?
9 jamesgold
 
20.09.22
20:07
(8) Там на клинете алгоритм выполняется
10 ejikbeznojek
 
20.09.22
20:13
Это плохо))
Есть ещё ПослеЗаписи, которое после проведения выполняется, но это уже вроде не транзакция. И в случае ошибки алгоритма, обратно документ не откатится.
11 OldCondom
 
20.09.22
20:27
что так все сложно то. Пиши реквизит или регистр сведений с признаком "АлгоритмВыполнен", на него же проверку делать/не делать.
Призаписиперепроводить не просто так было придумано.
12 jamesgold
 
20.09.22
20:31
(11) Проблема в том что при записи и при проведении алгоритм выполняется в процедуре ПриПроведении, но при этом при записи он не должен выполнятся даже если алгоритм еще не выполнен.
13 jamesgold
 
20.09.22
20:32
Я не могу понять как в модуле объекта в обработке проведения различить проводится сейчас документ или записывается.
14 jamesgold
 
20.09.22
20:33
В этой процедуре нет параметра РежимЗаписи
15 jamesgold
 
20.09.22
20:35
Пробовал подписку на событие при проведении, но она также 2 раза срабатывает ведь процедура обработк проведения по факту срабатывает 2 раза при записи и при проведении.
16 jamesgold
 
20.09.22
20:36
(10) ПослеЗаписи выполняется также после обычной записи, поэтому это событие не подходит.
17 1snik_d
 
20.09.22
20:40
Перенести алгоритм на сервер с клиента
18 OldCondom
 
20.09.22
20:43
1 раз пиши признак при проведении. Второй раз проверяй и уже не важно, проводится или записывается. В (5) сказано, что выполняется 1 раз.
(17) - это. Проверяешь проведен/не проведен в обработчике проведения
19 jamesgold
 
20.09.22
21:34
(17) Только на клинете алгоритм выполняется
20 jamesgold
 
20.09.22
21:50
1 раз пиши признак при проведении - как понять что сейчас проведение? В момент первого проведения у реквизита "проведен" уже значение истина.
21 OldCondom
 
20.09.22
22:50
(19) а что за алгоритм? В чем суть задачи?
22 Serg_1960
 
21.09.22
08:32
А чем автору не нравится классика жанра - ДополнительныеСвойства объекта? Если объект редактируется, то всегда туда можно записать, например, имена обработчиков и не париться с вопросами "Где я? Кто я?"(с)
23 Serg_1960
 
21.09.22
08:49
PS: если заголовок темы прочитать дословно, как желание автора записать документ без проведения тогда, когда религия запрещает изменять свойство на форме "ПриЗаписиПерепроводить", то:

Процедура ЗаписатьПрограммноНаСервере()
   ПерепроведениеПриЗаписи = ПриЗаписиПерепроводить;
   ПриЗаписиПерепроводить = Ложь;
   ПараметрыЗаписи = Новый Структура;
   ПараметрыЗаписи.Вставить("РежимЗаписи", РежимЗаписиДокумента.Запись);
   Попытка
      Записать(ПараметрыЗаписи);
   Исключение
      Сообщить(ОписаниеОшибки());
   КонецПопытки;
   ПриЗаписиПерепроводить = ПерепроведениеПриЗаписи;
КонецПроцедуры