Subfile - relative-record number error - attemp to write a duplicate record to file

Posted on 2005-04-28
Last Modified: 2012-06-27
I want to create a subfile that has its records populated from a screen(ie)
display screen and not from reading a input file.

From the Add_record_screen once all fields are populated
It adds a record to the subfile from which the add_ record_screen was called from.
when writing to the subfile I get the following error
write a duplicate record to file
Question by:Philip_Lang
    LVL 14

    Accepted Solution

    there are two RRN associated with subfiles
    in the DDS defined by SFLRCDNDR
    and in the RLG in the KSFILE F spec extension

    I always make these unique for each sub file and keep the names the same to avoide confusion.

    When adding records you must always increamet the last rrn used - you will not be doing this.

    the general logic is.

    Clear Formats
    Initialise subfile
    build first page
    save last RRN
    then when adding new records use the last RRN + 1.

    I can supply a simple example you you need code - please specify RPG or RPGLE


    Author Comment

    It's RPGLE

    LVL 14

    Expert Comment

    Name - EESFL
    Type - DSPF
    SrcFile QDDSSRC

    A                                      DSPSIZ(24 80 *DS3)          
    A          R F01SFL                    SFL                          
    A            SELS1          1A  B  6  4CHECK(ER)                    
    A            CODES1         5A  O  6  7                            
    A            DESCS1        30A  O  6 14                            
    A          R F01CTL                    SFLCTL(F01SFL)              
    A                                      OVERLAY                      
    A                                      CF03(03 'EXIT')              
    A  31                                  SFLDSP                      
    A                                      SFLDSPCTL                    
    A N31                                  SFLCLR                      
    A  31                                  SFLEND(*MORE)                
    A                                      SFLSIZ(0014)                
    A                                      SFLPAG(0013)                
    A            RRN1           4  0H      SFLRCDNBR                    
    A                                  1  3'Simple subfile entry'      
    A                                  3  3'Code....'                  
    A            CODEC1         5A  B  3 12CHGINPDFT                    
    A  50                                  DSPATR(PR)                  
    A N50                                  DSPATR(UL)                          
    A                                  3 19'Description....'                    
    A            DESCC1        30   B  3 35                                    
    A                                  5  3'Sel  Code  Description'            
    A                                      DSPATR(UL)                          
    A          R F01FTR                                                        
    A                                      OVERLAY                              
    A                                 22  3'                                  -
    A                                                                         -
    A                                              '                            
    A                                      DSPATR(UL)                          
    A                                 23  3'F3=Exit'                            
    LVL 14

    Expert Comment

    Name -anything
    Type - RPGLE

     ** Simple subfile test                                                                          
     ** Note RRN in SFile is the same as RRN in display file                                        
    FEESFL     cf   E             workstn Sfile(F01SFL:RRn1)                                        
     ** variables to store first and last record                                                    
    D RRN1l           s                   Like(RRN1)                           Last RRN              
    D RRN1f           s                   Like(RRN1)                           First RRN            
     ** Loop to Free                                                                                
    C                   DO        *HIVAL                                                            
     ** Show subfile? *in31 = Yes or ease not *in31 = Clear subfile                                  
    C                   EVAL      *IN31 = RRN1L > 0                            Records to show      
     ** Show screens                                                                                
    C                   write     F01Ftr                                                            
    C                   Exfmt     F01Ctl                                                            
     ** exit on F3                                                                                  
    C                   If        *in03                                                              
    C                   Eval      *inlr = *on                                                        
    C                   Return                                                                      
    C                   Endif                                                                        
     ** Check for selection - ignore if selection already made                        
    C                   if        *in31 and Not *In50                                  
     ** Record selected with a value                                                  
    C                   Readc     F01sfl                                              
    C                   If        Not %eof and Sels1 <> ' '                            
     ** *in50 = Protect code - move subfile fields to control fields                  
    C                   Eval      *in50 = *on                                          
    C                   Eval      CodeC1 =Codes1                                      
    C                   Eval      DescC1 = Descs1                                      
     ** save RRN number & re-display                                                  
    c                   eval      RRN1f=rrn1                                          
    C                   Iter                                                          
    C                   Endif                                                          
    C                   Endif                                                          
     ** Add or update subfile                                                          
    C                   If        *in50                                                
     ** Access exisitied RRN to update description                                    
    c     rrn1f         chain     F01Sfl                                              
    c                   clear                   Sels1                                  
    C                   Eval      Descs1 = Descc1                        
    C                   Update    F01Sfl                                  
    C                   else                                              
     ** Add new record to the end of the sub file                        
    C                   eval      RRN1 = RRN1L + 1                        
    C                   Eval      Codes1 =Codec1                          
    C                   Eval      Descs1 = Descc1                        
    C                   write     F01Sfl                                  
    c                   Eval      RRN1l = RRN1                            
    c                   eval      RRN1f=rrn1                              
    C                   Endif                                            
     ** Clear control fields                                              
    C                   clear                   CodeC1                    
    C                   clear                   DescC1                    
    C                   clear                   *in50                    
    C                   enddo                                            

    Have fun


    Featured Post

    IT, Stop Being Called Into Every Meeting

    Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

    Join & Write a Comment

    This is an issue that we can get adding / removing permissions in the vCSA 6.0. We can also have issues searching for users / groups in the AD (using your identify sources). This is how one of the ways to handle this issues and fix it.
    Read about the 3 stages of the buyer's journey: awareness, consideration, and decision.
    Hi everyone! This is Experts Exchange customer support.  This quick video will show you how to change your primary email address.  If you have any questions, then please Write a Comment below!
    Illustrator's Shape Builder tool will let you combine shapes visually and interactively. This video shows the Mac version, but the tool works the same way in Windows. To follow along with this video, you can draw your own shapes or download the file…

    745 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    18 Experts available now in Live!

    Get 1:1 Help Now