× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.




Here's my shot. Recently worked a year on inquiry screens and reports from a 
historical database, from which the company had migrated to a different package.

The code is NOT guaranteed, as it is off the top of my head while waiting for 
my next program to work on... :) and I don't have the actual code  used with 
me...And this was with variations, but usually was about it.. And you get more 
flexibility of course than you do within the cycle..as a side benefit...

I found it easiest (least thought-wracking) to emulate the cycle itself. 

I set up two data structures for the purpose, one is a "look-ahead" to be able 
to kick off total time while still inside the last record in the group. 

D FileRecdDS   E DS  extname('FILE1')
D NextRecdDS   E DS  extname('FILE1') prefix(next_) 
D LevelBreaks    DS 
D   L1                N
D   L2                N
D   L3                N
.....
D   L9                N
D   Lbrks             N  overlay(LevelBreaks) dim(9)

Then in the code, as follows: 

// Subroutine SR_READNEXT does the FETCH of the next record into 
// the NEXTRECDDS data structure. 
// It also sets on LR (or your program equivalent substitution)
//    if no record is returned, or SQLCOD <> 0 (which matches also 
//    other unexpected conditions, really...(I like to name my 
//    indicator EOF or some such...


exsr sr_readnext ;

if LR ; 
  exsr Sr_LR_Totals ;
Else ;

  // Set on all the level breaks...L1 through L9
  Lbrks = *all'1' ;  // or equivalent...
  // Set on an indicator for the first record in case..
  FirstRecd = *on ; 

  dow not LR; 
    FileRecdDS = nextRecdDS ;

    if FirstRecd ; // Check for 1st record...
      exsr Sr_FirstRecd ; // Leave FirstRecd=*on for this
      FirstRecd = *off ;  // in case needed for other subr's etc.
    endif ;

    exsr Sr_GroupHeaders ;  // Check level breaks and process...

    exsr sr_Detail ;  // :)

    exsr sr_ReadNext ; // Same pre-read as above...
                       // Fetches into NEXTRECDDS, and sets breaks..

    exsr sr_Totals ;  // Checks breaks from sr_ReadNext and processes..

  Enddo ;    // dow not LR...

//======================
begsr sr_FirstRecd ;
....
endsr ;
//======================
begsr sr_GroupHeaders ; 
  if L1 ; 
    exsr sr_L1processing ;
  endif ;
  .....
  if L9 ; 
    exsr sr_L9processing ;
  endif ;
endsr ;
//======================
begsr sr_Detail ;
  ....
endsr ;
//======================
begsr sr_ReadNext ;

  // I like to put my SQL into subroutines 
  //   at the bottom of the source file...
  exsr sr_FetchNext ; 

    // Next a trick learned from the late Mr. Guthrie, 
    //   he of the iSeriesNetwork IIRC, 
    //   of making indicators part of the equation...
    // Set for company, division, branch, and cust#, L8, L6, L4, L2
  LR = (SqlCode <> 0) ;
  L8 = Co# <> Next_Co# or LR ;
  L6 = Division <> Next_Division or L8 ;
  L4 = Branch <> Next_Branch or L6 ;
  L2 = Customer# <> Next_Customer# or L4 ;

endsr ;
//======================
begsr sr_Totals ;
  if L1 ;
    exsr sr_L1_Totals ;
  endif ;
  if L2 ;
    exsr sr_L2_Totals ;
  endif ;
  ...........
  if L9 ;
    exsr sr_L9_Totals ;
  endif ;
  if LR ;
    exsr sr_LR_Totals ;
  endif ;
endsr ;
//======================

....FYI.....

--Alan


As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.