2017-07-06 8 views
0

私は100行というレコードを持っています。レコードの一部を別のレコードにコピーします。Dynamics NAV

CurrPage.SETSELECTIONFILTER(recSelection); 
recSelection.FINDSET; 

は今、私は別のレコード変数に一度に選択の20行をコピーし、機能にそれを渡したい:私はこのようなレコードを取得します。

レコードをステップごとに処理するにはどうすればよいですか?このような 何か:

batchSize := 20; 
currSize := 0; 
totalSize := recSelection.COUNT; 
totalProcessed := 0; 
recSelection.FINDSET; 
REPEAT 
    IF (currSize = 0) THEN BEGIN 
    tmpRec.INIT; 
    END; 

    // how can I add the current to the tmp? 
    // tmpRec.INSERT -> recSelection 

    currSize += 1; 
    totalProcessed += 1; 

    IF (currSize = batchSize) OR (totalProcessed = totalSize) THEN BEGIN 
    SomeHeavyFunction(tmpRec); 
    currSize := 0; 
    END; 

UNTIL recSelection.NEXT = 0; 

答えて

0

私はそれがこれで動作するようになった:

(一時レコードをDELETEALLが私のために、常に少し怖いです:P)、recTempは一時記録

です
CURR_BATCH_SIZE := 0; 
TOTAL_ITEMS := recSelected.COUNT; 
BATCH_SIZE := 20; 
TOTAL_PROCESSED := 0; 
IF recSelected.FIND('-') THEN 
REPEAT 

    IF (CURR_BATCH_SIZE = 0) THEN BEGIN 
    recTemp.RESET; 
    recTemp.DELETEALL; 
    recTemp.INIT; 
    END; 

    // copy over 
    recTemp := recSelected; 
    recTemp.INSERT; 

    // store state 
    CURR_BATCH_SIZE := CURR_BATCH_SIZE + 1; 
    TOTAL_PROCESSED := TOTAL_PROCESSED + 1; 

    // did we reach batch limit or end? 
    IF (CURR_BATCH_SIZE = BATCH_SIZE) OR (TOTAL_PROCESSED = TOTAL_ITEMS) THEN BEGIN 
    // process batch 
    MESSAGE('Processing next %1. total processed %2/%3', FORMAT(recTemp.COUNT), FORMAT(TOTAL_PROCESSED), FORMAT(TOTAL_ITEMS)); 

    // reset counters 
    CURR_BATCH_SIZE := 0;  
    END; 


UNTIL recSelected.NEXT = 0; 
0

バージョンによっては、recTemp.ISTEMPORARYを確認できます。

詳細については、documentationを参照してください。

関連する問題