Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Запись при проведении...?

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

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

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

Док.Провести();

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

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

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

Док.Записать();
Док.Провести();

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

Обязательно:
Док.Записать();
Док.Провести();
   Масянька
 
7 - 27.06.18 - 13:07
(6) Еще голосовалку потребуй...
(2) И на старуху бывает проруха (С) В данном случае, Злоп попался...
   Эльниньо
 
8 - 27.06.18 - 13:14
(5) "Лучше перебздеть, чем недобздеть" © народное
   Diman_Kr
 
9 - 27.06.18 - 13:23
Достаточно провести()
   HawkEye
 
10 - 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
В итоге - кто-то может сказать однозначно? ибо мнения - разделились...
   HawkEye
 
18 - 27.06.18 - 21:13
(17)
да
старое
старое
т.к. записать выполниться перед проведением...
   HawkEye
 
19 - 27.06.18 - 21:14
(18) блин.... наоборот конечно..
да
новое
новое...

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

итого уже три мнения....
   Cthulhu
 
25 - 27.06.18 - 23:01
(22)
точнее - полу-нет.
да, выполняется только модуль документа.
нет - если в модуле документа изменяются реквизиты документа - эти изменения сохраняются. вне зависимости от успешности проведения.
прим.: там еще такой прикол есть. попробуй провести несколько документов подряд с вот таким кодом модуля документа:
Перем глПерМод;
Процедура ОбработкаПроведения()
  глПерМод=глПерМод+1;
  Сообщить("гдПерМод = "+глПерМод,"");
КонецПроцедуры
глПерМод=0
// как думаешь - что в окне сообщений получишь если программно провести три таких документа подряд?
   Cthulhu
 
26 - 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

Это надежно защитит реквизит от любой записи в проведенном документе
   Web00001
 
30 - 28.06.18 - 06:34
Мне одному непонятно, почему ТС тупо не проверит, прежде чем ветку создавать?
   HawkEye
 
31 - 28.06.18 - 08:50
(30) ты не одинок )) написать проверочный тест у меня заняло 2 минуты ))
   serpentt
 
32 - 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 Тогда
        БегомПоДокам.Контрагент = текКонтр;
        БегомПоДокам.Ошибка = Ошибка;
        БегомПоДокам.Провести();
    КонецЕсли;

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует