[Okta Webinar] Learn how to a build a cloud-first strategyRegister Now


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

Posted on 2005-04-28
Medium Priority
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
  • 3
LVL 14

Accepted Solution

daveslater earned 500 total points
ID: 13884232
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

ID: 13884249

LVL 14

Expert Comment

ID: 13884513
Name - EESFL
Type - DSPF

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

ID: 13884554
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

Get quick recovery of individual SharePoint items

Free tool – Veeam Explorer for Microsoft SharePoint, enables fast, easy restores of SharePoint sites, documents, libraries and lists — all with no agents to manage and no additional licenses to buy.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Strategic internal linking is often considered an SEO power technique, especially for content marketing. Do you need to hire an SEO agency to optimize you internal linking? No, this article will help you understand the basics of internal linking and…
Last month Marc Laliberte, WatchGuard’s Senior Threat Analyst, contributed reviewed the three major email authentication anti-phishing technology standards: SPF, DKIM, and DMARC. Learn more in part 2 of the series originally posted in Cyber Defense …
We’ve all felt that sense of false security before—locking down external access to a database or component and feeling like we’ve done all we need to do to secure company data. But that feeling is fleeting. Attacks these days can happen in many w…
Whether it be Exchange Server Crash Issues, Dirty Shutdown Errors or Failed to mount error, Stellar Phoenix Mailbox Exchange Recovery has always got your back. With the help of its easy to understand user interface and 3 simple steps recovery proced…
Suggested Courses

873 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