您不知道如何进行交易


头条新闻引人注目,但沸腾了。 我必须立即说我们将谈论1C。 亲爱的1C昵称,您不知道如何处理事务,也不了解什么是例外。 通过查看大量的1C代码得出了这个结论,这些代码诞生于国内企业的狂热中。 在典型的配置中,这是相当不错的,但是对于使用数据库而言,编写的定制代码非常少。 您是否看到过错误“此事务中已经发生错误”? 如果是这样,则文章标题适用于您。 最后,让我们来看一下什么是事务以及在使用1C时如何正确处理它们。


为什么需要发出警报


首先,让我们弄清楚错误的构成因素“此交易中已经发生了错误。” 实际上,这是一件非常简单的事情:您试图在一个已经被抽出(取消)的事务中使用数据库。 例如,在某处调用了Cancel Transaction方法,而您正在尝试提交它。


为什么这样不好? 因为此错误不会告诉您任何问题实际发生的位置。 当带有这样文本的屏幕截图得到用户的支持时,特别是对于人们不进行交互交互的服务器代码,这……我想写一个“严重错误”,但认为这是一个时髦的词,没人关注……。 这是一个屁股。 这是编程错误。 这不是偶然的故障。 这是一个门框,需要立即重做。 因为当您的后台服务器进程在夜间起床并且公司开始迅速亏损时,您想要在诊断日志中看到的最后一件事是“此事务中已经发生错误”。


当然,服务器的技术日志(包括在生产环境中,对吗?)有可能以某种方式帮助诊断问题,但是现在我无法立即猜测如何找到所指示错误的真正原因。 但是真正的原因是一个-程序员Vasya在交易中遇到了异常,并决定 一次-不是karabas “想,错,让我们继续前进。”


什么是1C交易


写基本真理真令人尴尬,但是显然,这是必须的。 1C中的事务与DBMS中的事务相同。 这些不是一些特殊的“ 1C”事务,而是DBMS中的事务。 根据交易的一般思想,它们可以全部执行,也可以完全不执行。 事务中对数据库表所做的所有更改都可以立即撤消,就好像什么都没有。


接下来,您需要了解1C不支持嵌套事务。 实际上,不“在1C中”不支持它们,但根本不支持它们。 至少,那些1C可以使用的DBMS。 例如,嵌套事务在MS SQL和Postgres中不存在。 对“开始事务”的每个“嵌套”调用只会增加事务计数器,而对“提交事务”的每个调用都会减小该计数器。 许多书籍和文章中都描述了这种行为,但是显然并不能很好地理解这种行为的结论。 严格来说,在SQL中有一个所谓的 SAVEPOINT,但是1C不使用它们,而且事情很具体。


在下文中,特别是对于相信真道的勇士,他们认为代码应该只用英语编写,在剧透情况下,将以英语语法1C提供类似的代码。


 ()

    ();

         
         = .();
        . = "    ";
        .();
    ;

    ();



, . , .


, ? . , . ? , . — . — deadlock, , , , . : deadlock .


, . 1- . , , 3 . , , 1 :)



, . 1 , "" "". , , :). , . , IT- .


, , ( ), . " ". , , . , . , , , ELK- 1 … (, , , :))


, , . , , ".()". ( ) , .



, .


, (, "()") . "" , , - -, . , : , , .



. 1 SonarQube . , 1, , …


? 90% . , 1 . , 1, .


:


 ()

      = ();
     ();


, . - , . — - . — … , ? "" , . , . , , , " -…"



"-" : . . , , , - , . .


:


 ()

      = ();
     ();

     ();

     //   ,         .


— . , ( — ) , . -, , .


, 3- . — .



. , , , .


1-


1 , . , . , :


 ()

    ();

         
         = .();

        . = "    ";
        
              .();
        
              .("    %1", );
              ;
        ;
    ;

    ();


, , ? , . . — , , " ", . , .


, 1- , , . , . "()" 1 , . 1 (, -), "" . , " ".


, , , - "" . , - . , , .


, , . . .


1


, 1 . :


  • ()
  • ()
  • ()
  • ()

3 , . — , .


. ( ) , . , , .


? : : , , .


? :


();
();
();

, — . - , "" . , :


();

    ();

    //     ?
;
();

, , ? ? , , . ? ? , . "" . - throw.


();

    ();

    ;
;
();

, … , ? : .


();

    ();

    ();
    ;
;
();

, , . , , (). , ? , , ? , , . , , . - .



, , "-" . :


**UPD: , . , -.


();

    ();
    ();

     () 
        ();
    ;
    ;
;

, "" . "" ""? , : , , . , . . . , . . . "" . , , , "" .


-


, .


:


();
();
();

"" , .


:


  () 
    ()

. , . . , . . .


:


 () 
    ()

: — . ? , - ? .


:


()
 .() 

    //    
    //  

;
();

  1. deadlock
  2. "",

:


()
 .() 

    
    .();
    
           ("  ");
    ;

;
();

. . , . .



, , , , , 1 . , , , Highload, , . ORM, GUI, -, Reporting, . , , — 1, — . , , , , , -, . 1 . 20 / -. , , . - 1 , , . - "()"....


— , . 1 - . , . " 1" — . .

Source: https://habr.com/ru/post/zh-CN419715/


All Articles