Имя: Пароль:
1C
1C 7.7
v7: Запись при проведении...?
0 Злопчинский
 
27.06.18
12:15
Вот задумался... без теста даже не могу однозначно сказать... (тупой, старый, склеротик, ногами не пинайте)

Программный код обработки:

Док.НайтиДокумент(КакойТоДокумент);
Док.Реквизит1 = КакоеТоНовоеЗначение1; //было какое-то старое значение, присваиваем новое
Док.Провести();

Вопрос1: при проведении документа выполняется запись документа?
Вопрос2: при УСпешном проведении что будет в Реквизит1 - новое значение или старое?
Вопрос3: при НЕуспешном проведении что будет в Реквизит1 - новое значение или старое?
1 1Сергей
 
27.06.18
12:17
1: Да
2: Новое
3: Старое

Зы Я тоже тупой, старый, склеротик. Могу ошибаться
2 Cool_Profi
 
27.06.18
12:24
Злоп, ты чего????
3 HawkEye
 
27.06.18
12:38
(2) мундиаль отвлекает )))
4 Эльниньо
 
27.06.18
12:40
На всякий случай сделать:

Док.НайтиДокумент(КакойТоДокумент);
Док.Реквизит1 = КакоеТоНовоеЗначение1;//было какое-то старое значение, присваиваем новое
Док.Записать();
Док.Провести();

склероз запрещает или старость?
5 HawkEye
 
27.06.18
12:43
(4) запрещает понимание того, что одно записать лучше двух записать с точки зрения оптимальности выполнения кода....
6 nysyssimara
 
27.06.18
13:05
а по-моему
1) нет
2) старое
3) старое

Обязательно:
Док.Записать();
Док.Провести();
7 Масянька
 
27.06.18
13:07
(6) Еще голосовалку потребуй...
(2) И на старуху бывает проруха (С) В данном случае, Злоп попался...
8 Эльниньо
 
27.06.18
13:14
(5) "Лучше перебздеть, чем недобздеть" © народное
9 Diman_Kr
 
27.06.18
13:23
Достаточно провести()
10 HawkEye
 
27.06.18
13:26
(8) тогда предлагаю так:
Записать
провести
записать
и контрольный
Провести!
)))
11 Масянька
 
27.06.18
13:31
(10) В голову...
(8) А если посмотреть вооруженным глазом... Можно увидеть 2 звездочки... (С)
12 Эльниньо
 
27.06.18
13:50
Ну да. И совершенно наплювать, что там понаписано ПриЗаписи()

Программисты, мля
13 Карст
 
27.06.18
14:15
а есть - при записи перепроводить ...
14 Злопчинский
 
27.06.18
20:51
(4) Запрещает нагрузка на общий журнал.
15 Злопчинский
 
27.06.18
20:53
(13) нету. Документом манипулирую программно. ПриЗаписиПерепроводить - метод интерактивной формы документа.
16 Злопчинский
 
27.06.18
20:53
(12) Пофиг что там написано призаписи. документом манмипулируется программно.
17 Злопчинский
 
27.06.18
20:54
В итоге - кто-то может сказать однозначно? ибо мнения - разделились...
18 HawkEye
 
27.06.18
21:13
(17)
да
старое
старое
т.к. записать выполниться перед проведением...
19 HawkEye
 
27.06.18
21:14
(18) блин.... наоборот конечно..
да
новое
новое...

)))
20 GreyK
 
27.06.18
22:01
(17) При проведении документ записывается, и в модуле проведения документа можно менять его реквизиты.
21 Сияющий в темноте
 
27.06.18
22:22
То,что документ при проведении записывается,не означает того,что запишется обьект документа.При проведении модуль документа заново открывается и компиллируется,и,очень возможно,что обьект документа будет прочитан из памяти,кроме того,если документ новый,и будет вызван метод провести,то документ получит ссылку,но в случае ошибки проведения будет откат-вопрос,что будет со ссылкой и не получится ли два склеенных документа?
22 Злопчинский
 
27.06.18
22:49
(21) похожую хрень мы рассматривали с Ходжиком - здесь же относительно недавно. Возможно при Провести() записывается в базу в журнал только признак проведения и выполняется модуль проведения...
23 Cthulhu
 
27.06.18
22:52
(22): нет.
24 Злопчинский
 
27.06.18
22:55
А вот спецы говорят что будет
Да.
Новое.
Старое.

итого уже три мнения....
25 Cthulhu
 
27.06.18
23:01
(22)
точнее - полу-нет.
да, выполняется только модуль документа.
нет - если в модуле документа изменяются реквизиты документа - эти изменения сохраняются. вне зависимости от успешности проведения.
прим.: там еще такой прикол есть. попробуй провести несколько документов подряд с вот таким кодом модуля документа:
Перем глПерМод;
Процедура ОбработкаПроведения()
  глПерМод=глПерМод+1;
  Сообщить("гдПерМод = "+глПерМод,"");
КонецПроцедуры
глПерМод=0
// как думаешь - что в окне сообщений получишь если программно провести три таких документа подряд?
26 Cthulhu
 
27.06.18
23:02
(24): т.е. (19) - не спец. Ок.
27 Вася Теркин
 
28.06.18
06:19
1.Да
2.Везде новое
3. Док.Реквизит1 = Новое
Док.Ссылка.Реквизит1 = старое
28 Вася Теркин
 
28.06.18
06:20
(ё17) См 27
29 Вася Теркин
 
28.06.18
06:22
(20) А если в модуль проведения поставить

Реквизит1 = Ссылка.Реквизит1

Это надежно защитит реквизит от любой записи в проведенном документе
30 Web00001
 
28.06.18
06:34
Мне одному непонятно, почему ТС тупо не проверит, прежде чем ветку создавать?
31 HawkEye
 
28.06.18
08:50
(30) ты не одинок )) написать проверочный тест у меня заняло 2 минуты ))
32 serpentt
 
28.06.18
09:08
(6) Поддерживаю

если программно изменить реквизит в документе и Провести()
Нового значения в реквизите не будет... обязательно использовать Записать()
33 Эльниньо
 
28.06.18
10:04
Самому стало интересно.
А ежели в модуле есть строчка типа:

Если Рекизит1 = ЧёТаТам Тогда
34 Сияющий Асинхраль
 
28.06.18
10:45
Проверил :-) , Результаты неожиданные :-) Получается так:

1 - Да;
2 - Да;
3 - Да;

Пункт 3 меня удивил, но делал такое. Документ с парой реквизитов - Контрагент (справочник.Контрагенты) и галкой "Ошибка". В модуле проведения написал:

    Если Ошибка = 1 Тогда
        СоздатьОбъект("Справочник.Труляля"); // Нет такого справочника...
    КонецЕсли;

И сделал обработку с реквизитами "ТекДок", текКонтр и "Ошибка" с кодом:

    БегомПоДокам = СоздатьОбъект("Документ.Новый1");
    Если БегомПоДокам.НайтиДокумент(ТекДок) = 1 Тогда
        БегомПоДокам.Контрагент = текКонтр;
        БегомПоДокам.Ошибка = Ошибка;
        БегомПоДокам.Провести();
    КонецЕсли;

Оказалось, что при генерации ошибки в документе реквизит Контрагент в любом случае записывается...
35 Cthulhu
 
28.06.18
11:32
спасибо за "лакмус", кстати.
(всегда полезно узнавать - кто дает советы, разбираясь в вопросе, а кто - и не разбираясь, и не потратив предварительно пару минут чтобы проверить)))
36 serpentt
 
28.06.18
12:36
(34)
второй и третий вопрос... ЧТО значит ДА. Ответ непонятен
37 Сияющий Асинхраль
 
28.06.18
12:57
(36) Если непонятно, замени слово "Да" на слово "Новое". Так будет понятней...
38 Злопчинский
 
28.06.18
18:48
Читаю...
интересно.. и весело...
39 HawkEye
 
28.06.18
20:53
(32) не трынди...
(36) да - значит новое
запись (не вызываемая явно) выполняется до начала транзакции провести, поэтому если провести прерывается, запись уже проведена и отката не происходит...
40 vova1122
 
29.06.18
09:46
а есть еще один пункт который не разбирали. Если документ проведен. И после изменения реквизита будет неуспешное проведение. что тогда будет в реквизите?
41 Эльниньо
 
29.06.18
12:20
(38) Клюшки это вообще всегда весело

Ты знал, что при удалении помеченного на удаление документа, отрабатывает ОбработкаУдаленияПроведения()?
42 Cthulhu
 
29.06.18
15:44
(40): разбирали. новое значение.
(41): неоднозначность формулировки детектев - 1) при пометке на удаление (программно или в дивлоге) или при удалении программном или при удалении через "удаление помеченных"?....
43 Эльниньо
 
29.06.18
15:59
(42) При программном удалении помеченных
44 Cthulhu
 
30.06.18
00:14
(43) ухты, класс, что обработкаудаленияпроведения хитрая xpeнь с "двойным дном" - знал, но вот до одотудова не добрался. спасибо, пригодится.
и тогда такой вопрос: обнуление статуса возврата как-то влияет на процесс?
45 Cthulhu
 
30.06.18
00:15
(43): так стоп. программное(!) удаление помеченных = это как?
знаю встроенное удаление помеченных. знаю программное удаление. что за зверь "программное удалени помеченных"???
46 Cthulhu
 
30.06.18
00:17
(45)+ прогаммное удаление - в смысле метод ".Удалить()", помеченное оно или нет - как-то побоку...
2 + 2 = 3.9999999999999999999999999999999...