0

このコードはパージ プログラムです。何も注文していない顧客をパージしたい (会社では、誰かが「潜在的な」顧客であるかどうかを記録しています)。

これは最初にテスト環境で実行されますが、最終的には本番環境に対して実行されます。作成した一時ファイルをバックアップとして保持します。削除の仕方がわかりません。その時点で必要だと思います:注文エンティティが見つからない場合は、レコードをTRCMASACファイル に書き込みます

C                   IF        NOT %FOUND(OEORH4)
C                   WRITE     TRCMASRR
 * Delete? file name or format name

コードは次のとおりです。

FXRCMASAC  IF   E             DISK                            
  * Order Header file - Keyed by Company and entity number     
FOEORH4    IF   E           K DISK                            
FTRCMA1    UF A E           K DISK                                 
 * Customer Keycode BI file                                        
FZRCST1    IF   E           K DISK                                 
 * Output file - Customers who have no Keycode  - VRCSTKBI PF      
FVRCST1    UF A E           K DISK                                 
 * Address  Master file - xDRESSAD PF                              
FXDRES1    IF   E           K DISK                                 
 * Output file - Address  - ZDRESSAD PF                            
FZDRES1    UF A E           K DISK                                 

 *-----------------------------------------------------------------
 * Calculation Specification                                       
 *-----------------------------------------------------------------
 * Step 1                                                          
C                   READ      xRCMASAC                             
C                   DOW       NOT %EOF                             
 *                                                                 
 * Check the record does not exist in order header file            
C                   EXSR      CHKORH_SR                            
C                   READ      xRCMASAC                           
C                   ENDDO                                        

 * Step 2 and 3                                                  
C     *LOVAL        SETLL     TRCMA1                             
C                   READ(N)   TRCMA1                             
C                   DOW       NOT %EOF                           
 * limit number of records for test                              
c     counta        ifge      9000                               
C                   EVAL      *INLR = *ON                        
c                   leave                                        
c                   endif                                        
c     countz        ifge      9000                               
C                   EVAL      *INLR = *ON                        
c                   leave                                        
c                   endif                                        
 * Check the record does not exist in stock header file          
C                   EXSR      CHKCUS_SR                          
 *                                                               
C                   EXSR      CHKADR_SR                               
 *                                                                    
 * Read the next record                                               
C                   READ(N)   TRCMA1                                  
C                   ENDDO                                             

 *-----------------------------------------------------------------   
 * End of the Program                                                 
 *-----------------------------------------------------------------   
C                   EVAL      *INLR = *ON                             

 *-----------------------------------------------------------------   
 * Check the order header entity                                      
 *-----------------------------------------------------------------   
C     CHKORH_SR     BEGSR                                             
 *                                                                    
C     ORHKEY        CHAIN     OEORH4                                  
 * If the order entity is notfound, write the rec into TRCMASAC file  
C                   IF        NOT %FOUND(OEORH4)                      
C                   WRITE     TRCMASRR                           
C                   ENDIF                                           
 *                                                                  
C                   ENDSR                                           
 *----------------------------------------------------------------- 
 * Check the customer keycode entity                                
 *----------------------------------------------------------------- 
C     CHKCUS_SR     BEGSR                                           
 *                                                                  
C     ORHKEY        CHAIN     ZRCST1                                
 * If the order entity is found, write the rec into VRCSTKBI file   
C                   IF        %FOUND(ZRCST1)                        
C                   WRITE     VRCSTKRR                              
c                   add       1             countz            500   
C                   ENDIF                                           
 *                                                                  
C                   ENDSR                                           

 *----------------------------------------------------------------- 
 * Check the address entity for records of never ordered            
C     CHKADR_SR     BEGSR                                         
 *                                                                
C     ACENT#        CHAIN     ADRES1                              
 * If the order entity is found, write the rec into ZDRESSRR file 
C                   IF        %FOUND(ADRES1)                      
C                   WRITE     ZDRESSRR                            
c                   add       1             counta            500 
C                   ENDIF                                         
 *                                                                
C                   ENDSR                                         

 *----------------------------------------------------------------
 * Program Initialization Subroutine                              
 *----------------------------------------------------------------
C     *INZSR        BEGSR                                         
 *                                                                
 * ORDER HEADER KEYLIST                                           
C     ORHKEY        KLIST                                         
C                   KFLD                    ACCOM#                
C                   KFLD                    ACENT#                

c                   z-add     0             counta               
c                   z-add     0             countz               
 *                                                               
 * Clear TRCMASAC file data                                      
C     *LOVAL        SETLL     TRCMA1                             
C                   READ      TRCMA1                             
C                   DOW       NOT %EOF                           
C                   DELETE    TRCMASRR                           
 * Read the next record                                          
C                   READ      TRCMA1                             
C                   ENDDO                                        
 *                                                               
 * Clear VRCSTKBI file data                                      
C     *LOVAL        SETLL     VRCST1                             
C                   READ      VRCST1                             
C                   DOW       NOT %EOF                           
C                   DELETE    VRCSTKRR                           
 * Read the next record                                          
C                   READ      VRCST1                             

C                   ENDDO                      
 *                                             
 * Clear ZDRESSAD file data                    
C     *LOVAL        SETLL     ZDRES1           
C                   READ      ZDRES1           
C                   DOW       NOT %EOF         
C                   DELETE    ZDRESSRR         
 * Read the next record                        
C                   READ      ZDRES1           
C                   ENDDO
 *
C                   ENDSR
4

1 に答える 1

2

はい、次の場所にコピーを書き込んだ後、レコードを削除しますTRCMASRR:

C                   DELETE    OEORH4R

ファイル名ではなく、レコード様式名を削除する必要があります。上記のコードでは、 のレコード形式名OEORH4OEORH4R.

私の推測では、削除する顧客レコードに関連するすべての住所なども削除したいと思うでしょう。そうしないと、「孤児」になってしまいます...

また、*INZSRより効率的な方法でファイルを消去することをお勧めします。Make TRCMA1VRCST1およびZDRES1 USROPN次のようなファイル:

FTRCMA1    UF A E           K DISK  USROPN
FVRCST1    UF A E           K DISK  USROPN
FZDRES1    UF A E           K DISK  USROPN

を使用して、 、およびQCMDEXCを実行します。そしてもちろん、後で 3 つのファイルすべてにアクセスする必要があります。CLRPFM *LIBL/TRCMA1CLRPFM *LIBL/VRCST1CLRPFM *LIBL/ZDRES1OPEN

これは、各レコードを個別に削除するよりも高速であり、ファイルの設定方法によっては他の利点もあります。

于 2013-08-11T06:39:11.837 に答える