| 
    
            
         
         | 
    
    
  | 
Вопрос на засыпку: Может ли документ быть не записанным в обработке проведения | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        что за беспредел....
 
        если ОбработкаПроведения "попала" как-либо программно, а не через ок-провести, то ЭтоНовый может быть Истина (не записан объект). И какое отношение получение ссылки (выдача каких-либо ссылок из пула) имеет к тождествености к записи объекта?  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |