|
Вопрос на засыпку: Может ли документ быть не записанным в обработке проведения | ☑ | ||
---|---|---|---|---|
0
mzelensky
26.03.14
✎
13:06
|
Доброго всем. Вопрос. как и сказано в теме, на засыпку...хоть на собеседованиях задавай..
Итак, ковыряюсь в УТ 10.3 (естественно модифицированной) и вижу в ОБРАБОТКЕ ПРОВЕДЕНИЯ документе РТиУ следующий код: Если ЭтоНовый() Тогда //Объект еще ни разу не проводился ...БЛА-БЛА-БЛА Иначе //Если Реализация или Поступление уже созданы Тогда Если Не Отказ Тогда НовыйОбъект = Ложь; ЭтотОбъект.Записать(); КонецЕсли; КонецЕсли; Иначе ...БЛА-БЛА-БЛА КонецЕсли; А теперь внимание вопрос - Может ли документ быть НОВЫМ (т.е. НЕ ЗАПИСАННЫМ) в ОБРАБОТКЕ ПРОВЕДЕНИЯ ??? |
|||
1
H A D G E H O G s
26.03.14
✎
13:08
|
(0) Взять и проверить.
|
|||
2
mzelensky
26.03.14
✎
13:09
|
(1) Я проверял - у меня не получается, чтобы он был новым.
Может как-то не так проверяю? |
|||
3
H A D G E H O G s
26.03.14
✎
13:09
|
НОВЫМ (ЭтоНовый()) и (НЕ ЗАПИСАННЫЙ) - это могут быть разные сущности.
Ты должен это проверить. |
|||
4
Господин ПЖ
26.03.14
✎
13:10
|
ЭтоНовый() разве ловится ниже ПередЗаписью() ?
упоротые... |
|||
5
Maxus43
26.03.14
✎
13:10
|
а теперь внимание ответ!
Не может он быть не записанным в обработке проведения |
|||
6
Maxus43
26.03.14
✎
13:11
|
вопрос со смыслом темы не связан вобще
|
|||
7
PuhUfa
26.03.14
✎
13:13
|
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>)
ОбработкаПроведения (Posting) Описание: Возникает при проведении документа. Основное назначение процедуры-обработчика данного события - генерация движений по документу. Выполняется в транзакции записи. |
|||
8
GROOVY
26.03.14
✎
13:13
|
Чисто теоретически в обработке проведения документ может быть не записан, если обработку проведения вызвали программно, а не событийно. Но это изврат.
Если нужно в обработке проведения проверить проводится ли документ или перепроводится, то подобную штуку можно провернуть с помощью "ДополнительныеСвойства" в которые перед записью помещать признак проведенности (или нового) документа, а в обработке проведения уже проверять что там. |
|||
9
DexterMorgan
26.03.14
✎
13:15
|
(8) Опередил) конечно доп свойства
|
|||
10
mzelensky
26.03.14
✎
13:15
|
(3) меня конкретно вот это интересует:
Если ЭтоНовый() Тогда |
|||
11
mzelensky
26.03.14
✎
13:16
|
(4) Самы ты упоротый. Открой отладчик и проверь!
|
|||
12
vmv
26.03.14
✎
13:16
|
а если новому документу ссылка назначена посредством ПолучитьСсылкуНового(), то он ведь может быть и не записан, но уже "иметь" ссылку.
может в этом сакральный смысл (0) |
|||
13
DexterMorgan
26.03.14
✎
13:17
|
(12) Все гораздо банальнее)
|
|||
14
mzelensky
26.03.14
✎
13:18
|
(8) Т.е., теоретически, если я программно создаю документ, а потом аишу
Док.Записать(РежимЗаписиДокумента.Проведение); то обработка проведения вызовится без записи? |
|||
15
mzelensky
26.03.14
✎
13:19
|
(12) Ссылка тут не причем.
Меня интересует свойство ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) ЭтоНовый (IsNew) Синтаксис: ЭтоНовый() Возвращаемое значение: Тип: Булево. Истина - изменяется еще ни разу не записанный документ; Ложь - документ уже записан. Описание: Определяет, записан ли документ в базу данных. И может ли оно отрабатывать в ЛОЖЬ в обработке проведения. |
|||
16
PuhUfa
26.03.14
✎
13:20
|
(14) и тогда ты должен будешь получить проведенный документ которого нет в базе -)) Прям как с сусликом -)
|
|||
17
Maxus43
26.03.14
✎
13:21
|
>>И может ли оно отрабатывать в ЛОЖЬ в обработке проведения
не должен, это просто проверить |
|||
18
mzelensky
26.03.14
✎
13:21
|
(16) Чет мне кажется бред.
|
|||
19
vmv
26.03.14
✎
13:22
|
(15) если найдеться мозг, который напомнит мне ЧТО влияет на результат ЭтоНовый(), то буду благодарен
|
|||
20
GROOVY
26.03.14
✎
13:24
|
(14) Нет. Это вызовет событие записи и проведения.
(15) Может, я писал выше. |
|||
21
Defender aka LINN
26.03.14
✎
13:24
|
(19) Записан ли документ в базу
|
|||
22
GROOVY
26.03.14
✎
13:24
|
(19) ДокументОбъект.<Имя документа>.ЭтоНовый (DocumentObject.<Имя документа>.IsNew)
ДокументОбъект.<Имя документа> (DocumentObject.<Имя документа>) ЭтоНовый (IsNew) Синтаксис: ЭтоНовый() Возвращаемое значение: Тип: Булево. Истина - изменяется еще ни разу не записанный документ; Ложь - документ уже записан. Описание: Определяет, записан ли документ в базу данных. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер). Пример: Если РасходнаяНакладная.ЭтоНовый() Тогда РасходнаяНакладная.Записать(); КонецЕсли; |
|||
23
mzelensky
26.03.14
✎
13:26
|
(20) Т.е. это возможно если:
Создать документ, а потом просто вызвать процедуру "ОбработкаПроведения()" (предварительно сделав ее Экспортной) ? так? |
|||
24
Maxus43
26.03.14
✎
13:26
|
(22) если следовать букве СП - в обработке проведения документ записан, отсюда и ЭтоНовый() должен быть Ложь.
Хотя показывает видимо Истина (что правильно, неправильно что в СП написано) :) |
|||
25
StanleyMarsh
26.03.14
✎
13:27
|
(0) Вирусный вопрос))
|
|||
26
mzelensky
26.03.14
✎
13:28
|
(21)(22) я думаю он имел ввиду как система определяет записан объект в базу или нет.
Например создан новый объект и ему нахрапом присвоена ссылка какого-то объекта (ну допустим). Тогда получается, что ссылка у объекта есть, но в базу он фактически еще не записан. |
|||
27
Maxus43
26.03.14
✎
13:29
|
(26) платформа не создаёт ссылку новому документу, это можно сделать только программно
|
|||
28
GROOVY
26.03.14
✎
13:29
|
(23) Да, а если вызывать ее из модуля объекта, то и экспортной делать не надо.
|
|||
29
mzelensky
26.03.14
✎
13:30
|
(27) Что значит не создает? А Гуид кто формирует?
|
|||
30
Maxus43
26.03.14
✎
13:34
|
(29) он при записи формируется, а не при создании документа
|
|||
31
StanleyMarsh
26.03.14
✎
13:34
|
Если интересно ответ такой: запись и проведение происходят в рамках 1 транзакции. ЭтоНовый() даст ложь (для нового документа),но если в обработке проведения стоит отказ, то транзакция отменится и как бы записанный документ перестанет быть записанным))
|
|||
32
GROOVY
26.03.14
✎
13:34
|
(26) Это возможно, особенно при переносе данных, к примеру КД или РБД.
|
|||
33
GROOVY
26.03.14
✎
13:35
|
(31) В том случае если транзакция проведения вложена в транзакцию записи.
|
|||
34
StanleyMarsh
26.03.14
✎
13:37
|
(33) очевидно, что если документ был записан то ЭтоНовый() всегда даст ложь. В вопросе (0) этот случай (33) только и подразумевается.
|
|||
35
mzelensky
26.03.14
✎
13:38
|
(30)ну так в том и фишка. Что платформа сама еще ГУИД не сфоррмировала, а ты его уже присвоил объекту (сам).
Вот в этом случае, пока ты еше не записал этот объект, платформа будет думатЬ .что объект новый или уже нет (т.к. гуид по факту ей присвоен) |
|||
36
MaxS
26.03.14
✎
13:40
|
Если РежимЗаписиДокумента.Проведение, то логично предположить, что документ может быть новым в момент проведения. И если при проведении произойдёт отказ, то произойдёт откат транзакции записи.
|
|||
37
Maxus43
26.03.14
✎
13:40
|
(35) Новый - Не новый от гуида не зависит... Корое первый раз записываешь = ЭтоНовый() Иначе ЛОЖЬ
|
|||
38
vmv
26.03.14
✎
13:49
|
тут нужно мнение создателя метода "это новый" с описанием внутренней условной логики - все остальное только фантазии.
А само описание метода в СП ущербно, конеш, и аппелирует опять же к фантазиям в расчете на то, что "тупым и жадным" достаточно отписки. |
|||
39
Defender aka LINN
26.03.14
✎
20:18
|
рукалицо...
|
|||
40
Леша1с
27.03.14
✎
09:06
|
что за беспредел....
если ОбработкаПроведения "попала" как-либо программно, а не через ок-провести, то ЭтоНовый может быть Истина (не записан объект). И какое отношение получение ссылки (выдача каких-либо ссылок из пула) имеет к тождествености к записи объекта? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |