Показать сообщение отдельно
Старый 12.03.2003, 11:23   #1  
SlavaShevtsov is offline
SlavaShevtsov
Участник
 
9 / 10 (1) +
Регистрация: 25.02.2003
Трюки программирования (A->B->A)
В Codeunit 12404 есть такой фрагмент:

LOCAL PROCEDURE CheckTransaction@6();
BEGIN
{
Уничтожаются все записи во временной таблице "Фин. Корресп. Буфер Учета" [12402], для которых поля "Фин. Книга Сумма" и "Фин. Корресп. Сумма" не равны. Если были потерты все записи, то выход.
}
WITH DoubleEntryBufferTemp DO BEGIN
IF NOT FIND('-') THEN
EXIT;
REPEAT
IF "G/L Amount" = "G/L Corresp. Amount" THEN
DELETE;
UNTIL NEXT = 0;
IF NOT FIND('-') THEN
EXIT;
END;

// А вот что это за цирк:

WITH DoubleEntryBuffer DO BEGIN
LOCKTABLE();
REPEAT
DoubleEntryBuffer := DoubleEntryBufferTemp;
IF FIND THEN
DELETE;
DoubleEntryBuffer := DoubleEntryBufferTemp;
INSERT;
UNTIL DoubleEntryBufferTemp.NEXT = 0;
END;
END;

Кажется, что запись копируется, запись стирается и на ее место вставляется только что скопированная запись. Казалось бы, код совершенно лишний. В чём тонкость и что делает этот кусок кода?