
头条新闻引人注目,但沸腾了。 我必须立即说我们将谈论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: , . , -.
();
();
();
()
();
;
;
;
, "" . "" ""? , : , , . , . . . , . . . "" . , , , "" .
-
, .
:
();
();
();
"" , .
:
()
()
. , . . , . . .
:
()
()
: — . ? , - ? .
:
()
.()
//
//
;
();
- deadlock
- "",
:
()
.()
.();
(" ");
;
;
();
. . , . .
, , , , , 1 . , , , Highload, , . ORM, GUI, -, Reporting, . , , — 1, — . , , , , , -, . 1 . 20 / -. , , . - 1 , , . - "()"....
— , . 1 - . , . " 1" — . .