| 
    
            
         
         | 
    
  | 
Версионирование и проведение | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        ДядяМитяй    
     24.01.22 
            ✎
    17:01 
 | 
         
        С удивлением обнаружил, что при включенном версионировании к моменту захода в обработку проведения уже и реквизит Проведен = истина и Ссылка.Проведен тоже. Хотел проверять на проведение непроведенного документа, а тут такая неожиданность. Пришлось проверку выносить в ПередЗаписью.
 
        Это нормальное поведение или изъ... доставшейся мне самописки на БСП? И как грамотно выполнить проверку, что документ "не перепроводится", а проводится из непроведенного состояния. Ну кроме объявления переменной БулоПроведено в модуле объекта...  | 
|||
| 
    1
    
        DrShad    
     24.01.22 
            ✎
    17:09 
 | 
         
        так все проверки и делаются перед записью     
         | 
|||
| 
    2
    
        RetardedToBoot    
     24.01.22 
            ✎
    17:10 
 | 
         
        Поставь брекпоинт в обработку проведенич и при записи и смотри откуда вызываются.     
         | 
|||
| 
    3
    
        Dmitrii    
     гуру 
    24.01.22 
            ✎
    17:18 
 | 
         
        (0) Это нормальное поведение. Чем вызвано твоё удивление - непонятно. Когда документ проводится, он должен быть уже записан в базу данных. Т.к. запись и проведение выполняются в одной транзакции, если проведение обломится, то и запись вместе со всей транзакцией откатится.
 
        Все подобные проверки выполняются ПередЗаписью. Типа "Если НЕ Ссылка.Проведен и РежимЗаписиДокумента.Проведение". При необходимости можно сохранить что-то в ДополнительныеСвойства. Но сама идея - вешать какую-то логику на то проводится ли документ повторно - как правило не самая лучшая.  | 
|||
| 
    4
    
        ДядяМитяй    
     25.01.22 
            ✎
    12:04 
 | 
         
        (3) Например, при проведении надо сделать проверку с громоздкими запросами к другим таблицам - документам, регистрам ... - а, скажем, если практикуется групповое перепроведение - этого делать не надо, потому что дико долго будет.     
         | 
|||
| 
    5
    
        DrShad    
     25.01.22 
            ✎
    12:15 
 | 
         
        (4) при групповом проведении пиши в ДопСвойства и на него проверяй     
         | 
|||
| 
    6
    
        ДядяМитяй    
     25.01.22 
            ✎
    12:17 
 | 
         
        (3) удивление вызвано тем, что Ссылка.Проведен = Истина. При обычном проведении такого не должно быть. А при версионировании видимо происходит запись перед тем, как начнется обработка проведения.     
         | 
|||
| 
    7
    
        DrShad    
     25.01.22 
            ✎
    12:18 
 | 
         
        тебе же сказали что запись происходит до проведения и не зависит от версионирования     
         | 
|||
| 
    8
    
        Dmitrii    
     гуру 
    25.01.22 
            ✎
    12:19 
 | 
         
        (4) Например, в типовой БП 3.0 это уже реализовано.
 
        В модуле документа. 
     | 
|||
| 
    9
    
        Dmitrii    
     гуру 
    25.01.22 
            ✎
    12:22 
 | 
         
        (6) >> При обычном проведении такого не должно быть.
 
        Наоборот. В момент поведения (ОбработкаПроведения) документ уже записан. Поэтому при обращении к БД уже Ссылка.Проведен = Истина. ПередЗаписью Ссылка.Проведен = Ложь. Если проводится не проведенный документ.  | 
|||
| 
    10
    
        ДядяМитяй    
     25.01.22 
            ✎
    12:24 
 | 
         
        (8) Спасибо, не знал 
 
        (9) Выглядит довольно дико. Все равно, что отправить отчет о сделанной работе и после этого приступить к ее выполнению. ))  | 
|||
| 
    11
    
        Dmitrii    
     гуру 
    25.01.22 
            ✎
    12:24 
 | 
         
        + к (8).
 
        Аналогичный код можно встретить и в ОбработкаПроведения. Наример. 
     | 
|||
| 
    12
    
        Dmitrii    
     гуру 
    25.01.22 
            ✎
    12:26 
 | 
         
        (10) >> Выглядит довольно дико.
 
        Наоборот. Выглядит абсолютно логично. При проведении мы должны оперировать текущими данными документа, а не тем что в нём было до записи. Странным было бы проводить документ с данными, которые были ДО того как пользователь что-то в нём поменял.  | 
|||
| 
    13
    
        Kassern    
     25.01.22 
            ✎
    12:26 
 | 
         
        (10) а как вы по другому это реализуете? Ведь проведен или нет, это всего лишь типовой реквизит документа. Такой же как дата и номер. Чтобы сделать проводки с этим регистратором, надо, чтобы документ уже был в базе. Вы предлагаете записывать документ в базу без пометки проведения, потом делать проводки, а потом еще раз записывать документ, чтобы поставить пометку проведен?     
         | 
|||
| 
    14
    
        pechkin    
     25.01.22 
            ✎
    12:27 
 | 
         
        (10) а ты предлагаешь несколько раз записывать документ?     
         | 
|||
| 
    15
    
        Kassern    
     25.01.22 
            ✎
    12:28 
 | 
         
        (14) видимо так, либо метку проведения хранить не в документе, а в отдельном регистре)     
         | 
|||
| 
    16
    
        pechkin    
     25.01.22 
            ✎
    12:29 
 | 
         
        если нужно состояние до записи, то сохрани его в процедуре ПередЗаписью     
         | 
|||
| 
    17
    
        pechkin    
     25.01.22 
            ✎
    12:30 
 | 
         
        ну а проверки воообще лучше делать в процедуре ОбработкаПроверкиЗаполнения     
         | 
|||
| 
    18
    
        ДядяМитяй    
     25.01.22 
            ✎
    12:34 
 | 
         
        (14) а фактически так и получается - если проведение обломилось, то записывается еще раз уже без "проведен"     
         | 
|||
| 
    19
    
        Kassern    
     25.01.22 
            ✎
    12:35 
 | 
         
        (18) "то записывается еще раз уже без "проведен"" самостоятельно типовые документы так не записываются. Только если вы сами в попытку не пропишите, мол если не провелось, то просто записать.     
         | 
|||
| 
    20
    
        Kassern    
     25.01.22 
            ✎
    12:36 
 | 
         
        (18) попробуйте любой типовой документ без записи сразу провести. Если будут ошибки, то он у вас не запишется в базу, транзакция будет отменена     
         | 
|||
| 
    21
    
        DrShad    
     25.01.22 
            ✎
    12:40 
 | 
         
        (19) +1     
         | 
|||
| 
    22
    
        ДядяМитяй    
     25.01.22 
            ✎
    12:40 
 | 
         
        (19) мы заходим в обработку проведения. документ уже записан с проведен = истина, при проведении случается отказ = истина. по вашей же логике записывается еще раз с проведен = ложь. 
 
        (20) "транзакция будет отменена". а почему же ссылка.проведен = истина? разные транзакции? одна после записи другая после проведения?  | 
|||
| 
    23
    
        pechkin    
     25.01.22 
            ✎
    12:41 
 | 
         
        (22) это называется отмена транзакции. Советую поизучать что такое транзакции     
         | 
|||
| 
    24
    
        DrShad    
     25.01.22 
            ✎
    12:42 
 | 
         
        (22) потому что ты в транзакции смотришь     
         | 
|||
| 
    25
    
        Kassern    
     25.01.22 
            ✎
    12:46 
 | 
         
        (22) Почитайте про работу с транзакциями и у вас множество вопросов отпадет     
         | 
|||
| 
    26
    
        Dmitrii    
     гуру 
    25.01.22 
            ✎
    12:51 
 | 
         
        (22) >> при проведении случается отказ = истина, по вашей же логике, записывается еще раз.
 
        Это по твоей логике. По логике СУБД и 1С происходит откат транзакции к предыдущему состоянию объектов базы данных, где документ не записывали и не проводили. Никто дважды ничего не записывает. Даже если ты принудительно в обработке проведения понавтыкаешь ЭтотОбъект.Записать(), при отмене транзакции всё просто откатиться назад.  | 
|||
| 
    27
    
        Жан Пердежон    
     25.01.22 
            ✎
    12:54 
 | 
         
        (22) Проведен - реквизит документа, документ 1 раз в базу записывается     
         | 
|||
| 
    28
    
        Dmitrii    
     гуру 
    25.01.22 
            ✎
    12:54 
 | 
         
        ОФФ. Вообще странно, что такие очевидные вещи приходится рассказывать коллеге с семилетнем стажем на форуме.     
         | 
|||
| 
    29
    
        Жан Пердежон    
     26.01.22 
            ✎
    14:17 
 | 
         
        (28) да, должно быть странно; 
 
        с другой стороны из опыта собеседований 5-7 лет и более стажа не гарантируют знаний и по факту может оказаться слабее джуна с 1,5 годами на большом проекте  | 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |