!*********************************************************************** !* * !* [TAG_GEN_SYS] Demo System * !* [TAG_GEN_APP] Demo Application * !* [TAG_SQR_SRC] DEMO06.EDS * !* [TAG_SQR_NAME] Demo Program 06 * !* [TAG_SQR_DESC] Program that demonstrates Event Driven * !* Sqr's (EDS) capability of SqrPlus product. * !* Program produces MAIN Report on Pay Data * !* and SUB report on leave data for employees.* !* [TAG_SQR_AUTH] Scott M * !*********************************************************************** !* * !*********************************************************************** ! [TAG_GEN_CPY] Confidentiality Information: * !

* ! This module is the confidential and proprietary information of * ! SRI Technologies Pty Ltd; it is not to be copied, reproduced * ! in any form, or by any means, in whole or in part * ! for any purpose other than that for which it is expressly provided * ! without the written permission of Company.
* !

* ! Copyright (c) 1999 SRI Technologies Pty Ltd. All Rights Reserved * ! * ! [TAG_EOT] * !*********************************************************************** !* * !*********************************************************************** !* * !*[TAG_SQR_LOG] * !* * !* Sl.NO Date Author Remark * !* * !* 1. 02-Sep-2005 Scott.M Initial Coding * !* * !*[TAG_EOT] * !* * !*********************************************************************** !*********************************************************************** !*[TAG_SQR_INP] none.png * ! * !*********************************************************************** !* * !*[TAG_SQR_SEE_ALSO] * !* * !* Demo05.sqr * !*[TAG_EOT] * !* * !*********************************************************************** !* * !*********************************************************************** !* * !*[TAG_SQR_OUT] demo06.pdf * ! * !*********************************************************************** !* * !*********************************************************************** !* * !*[TAG_SQR_IO] * !* Sl.NO File Mode Remarks * !* 1. c:\temp\demo05.csv Input Data file for input stream * !* [TAG_cont] that contains pay data for * !* [TAG_cont] employees. Data file has * !* [TAG_cont] multiple rows for given * !* [TAG_cont] employee. Data is pre sorted * !* [TAG_cont] on Company, PayGroup and Dept. * !*[TAG_EOT] * !* * !*********************************************************************** #include 'sqrp-eds.sqc' !include eds standard procedures #define ALL '*' #define AMT_MSK 999,999,999.99 #define NUM_MSK 999999 #define AMT_MSK_WID 14 #define NUM_MSK_WID 6 #Define RightMostCol 97 !last Column # referenced by Standard Heading #define Emplid_Col 5 #define EmplName_Col 15 #define Basic_Col 55 #define Allow_Col 70 #define Ded_Col 85 #define Tax_Col 100 #define Net_Col 115 #define EMPLID_FLD_POS 4 !emplid field position in csv file !*[TAG_SQR_INIT] Initialise Printer: ! - Initialise printer as line printer in portrait mode. begin-setup page-size 66 120 declare printer type = LINEPRINTER orientation = portrait end-setup begin-heading 10 !*!*! print ' ' (1,1) print 'SRI Technologies' () center print 'Report ID: ' (+1,1) print $ReportID () let #tmp_Col = {RightMostCol} - 2 page-number (0,#tmp_Col) 'Page No. ' print 'Run Date: ' (+1,#tmp_Col) print $ReportDate () print $ReportTitle () center print ' Time:' (+1,#tmp_Col) print $ReportTime (,+1,) print 'Company:' (+1,1, 15) print $sel.Company_name (,+2,) print 'Pay Register' (,,) center print 'Paygroup:' (+1,1, 15) print $sel.paygroup_name (,+2,) let $tmp_str = 'As Of Date : ' || $CurrDate print $tmp_str (,,) center print 'Department:' (+1,1, 15) print $sel.dept_name (,+2,) print 'EmplId' (+2, {Emplid_Col},) print 'Employee Name' (, {EmplName_Col},) do SQRP-EDS-print-txt-RJust ({Basic_Col}, {AMT_MSK_WID}, 'Basic', {SQRP_EDS_BOLD}) do SQRP-EDS-print-txt-RJust ({Allow_Col}, {AMT_MSK_WID}, 'Allowances', {SQRP_EDS_BOLD}) do SQRP-EDS-print-txt-RJust ({Ded_Col}, {AMT_MSK_WID}, 'Deductions', {SQRP_EDS_BOLD}) do SQRP-EDS-print-txt-RJust ({Tax_Col}, {AMT_MSK_WID}, 'Tax', {SQRP_EDS_BOLD}) do SQRP-EDS-print-txt-RJust ({Net_Col}, {AMT_MSK_WID}, 'Net', {SQRP_EDS_BOLD}) print '-----------------------------------------------------------' (+1,1,) print '--------------------------------------------------------' () end-heading begin-footing 1 if $End_of_Report = 'Y' print 'End of Report' (+0,1) center end-if end-footing begin-program do Init-Report do Report do Terminate end-program !*********************************************************************** !* * !* [TAG_PRC_DESC] Initialize Report * !* * !*[TAG_SQR_INIT],[TAG_PRC_MAIN] Init Report: * !* * !* - Set Current Date and Time. * !* - Get Report Parameters, RunControl values. * !* * !*********************************************************************** begin-procedure Init-Report #define dim $CurrDate, $CurrTime, $REPORTDATE, $REPORTTIME, #tmp_Col, $tmp_str #define dim $End_of_Report, $ReportID, $ReportTitle #define dim $sel.Company, $sel.Company_name, $sel.paygroup, $sel.paygroup_name #define dim $sel.dept, $sel.dept_name let $CurrDate = edit($current-date, 'DD/MM/YYYY') let $CurrTime = edit($current-date, 'HH:MI') let $REPORTDATE = $CurrDate let $REPORTTIME = $CurrTime let $sel.Company = {ALL} let $sel.Company_name = 'All' let $sel.paygroup = {ALL} let $sel.paygroup_name = 'All' let $sel.dept = {ALL} let $sel.dept_name = 'All' move $sqr-program to $ReportID let $ReportTitle = 'Sample Main and Sub Report Using EDS Methodology' show 'SQR: ' $sqr-program ' - ' $ReportTitle show 'Date Time: ' $currDate ' - ' $CurrTime end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Generate Main Report * !* * !*[TAG_SQR_MAIN]100,[TAG_PRC_MAIN] Generate Main Report using EDS: * !* * !* - Generate report using EDS (Event Driven Sqr's) Methodology. * !* - Open Input file, abort if unsucessful. * !* - Ignore employees with tax less than 700. * !* - Do not ignore if leave data is found for the employee. * !* - If leave data is found, report them as sub-report after * !* printing pay data for that employee. * !* - Initialise EDS system with MAIN Report Type as 'Pay'. * !* - Read each record from input stream (pay csv file). * !* - Submit each record to EDS System. * !* - Exit EDS system on end of input stream data. * !* * !*********************************************************************** #define FILE_FD 1 #define REC_LEN 1024 begin-procedure Report #define dim $company, $paygroup, $dept, $emplid, $Effdt, $ErnDedCd, $amt, #basic #define dim #allow, #ded, #tax, #net, #rec_cnt, #amt, #no_data, $empl_name #define dim $SqrPlus_dir, $InpFile, #filestat, $rec, $errmsg, $emplid_detail do Load-Leave-Data !load leave data into array let $SqrPlus_dir = getenv('SQRPLUS_DIR') let $InpFile = $SqrPlus_dir || '\sqr\demo05.csv' open $InpFile as {FILE_FD} for-reading record={REC_LEN}:vary status=#filestat if #filestat != 0 let $errmsg = 'Unable to Open Input File: ' || $InpFile || ', Program aborted.' show $errmsg stop else show 'Input File: ' $InpFile end-if !let #SRIT_EDS_NO_SHOW = 1 do not show EDS messages in the sqr log file !Initialise EDS system for 'pay' data input stream. Parameters must be string literats without {} do SRIT-EDS-begin-pay ( 'key1=company, key2=paygroup, key3=dept', !key fields in the input stream on which EDS !break events will be raised and processed 'my-pay-detail-section', !procedure that does the detail section of the report 'my-pay-init-variables', !procedure that resets variables after completing detail section 'my-pay-accum-totals', !procedure that accumulates totals required in after-break events 'my-pay-skip') !procedure that tests if a particular detail do SRIT-EDS-set-pagebreak('my-page-break' , 60) !set page break procedure ! Let #SRIT_EDS_pay_no_lf = {SRIT_EDS_TRUE} !trun off line feed that EDS inserts !while processing before and after breaks let #rec_cnt = 0 while 1 ! Infinite loop, breaks when end of file is detected. read {FILE_FD} into $rec:{REC_LEN} if #end-file break ! End of file reached. end-if add 1 to #rec_cnt do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 1, $company) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 2, $paygroup) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 3, $dept) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 4, $emplid) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 5, $effdt) if #rec_cnt > 1 !ignore header record !submit record to EDS system do SRIT-EDS-process-pay ( $company, !first key field $paygroup, !second key field $dept, !third key field $emplid, !field on which further aggregation/groupings whould be done $effdt) !effdate from input stream that break events may require !Note: All non key fields from input stream that are required in detail section ! should be saved/computed before reading next data. ! Key fields are preserved by EDS as cur and lst e.g. for company field EDS ! maintains $SRIT_EDS_pay_cur_company, $SRIT_EDS_pay_lst_company global variables. !save/compute fields that are required in printing detail section let $emplid_detail = $emplid do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 6, $ErnDedCd) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 7, $Amt) let #amt = to_number($amt) EVALUATE $ErnDedCd when = 'E01' let #basic = #basic + #amt break when = 'E02' let #allow = #allow + #amt break when = 'D01' let #ded = #ded + #amt break when = 'D02' let #tax = #tax + #amt break WHEN-OTHER let $errmsg = 'Invalid Earning/Deduction Code: ' || $ErnDedCd || ' - input ignored at record number: ' || to_char(#rec_cnt) show $errmsg break END-EVALUATE let #net = #basic + #allow - #ded - #tax !compute net end-if end-while close {FILE_FD} do SRIT-EDS-end-pay (#no_data) !indicate end of pay data input stream to EDS system to finalise last bit if #no_data = {SRIT_EDS_TRUE} do SRIT-EDS-new-line (1) print 'No Data found to print' (,1) else do End-of-report end-if end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Initialise variables * !* * !* [TAG_PRC_MAIN] Initialise variables: * !* * !* - Called by EDS System. * !* - Initialise variables used in detail section. This is * !* required as detail section reports data that is built * !* from multiple records from the input stream. * !* * !*********************************************************************** begin-procedure my-pay-init-variables !no print should be done in this procedure directly or indirectly !init variables let #net = 0 let #basic = 0 let #allow = 0 let #ded = 0 let #tax = 0 end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Skip Input * !* * !* [TAG_PRC_MAIN] Skip Test: * !* * !* - Called by EDS System. * !* - Tell EDS to include qualified employees in the report. * !* Include if tax is >= 700 * !* or leave data is found for the employee. * !* * !*********************************************************************** begin-procedure my-pay-skip (:#skip) !no print should be done in this procedure directly or indirectly #define dim #found let #skip = {SRIT_EDS_FALSE} !default value if #_tax < 700 let #skip = {SRIT_EDS_TRUE} end-if do leave-data-found ($_emplid_detail, #found) if #found = {SRIT_EDS_TRUE} let #skip = {SRIT_EDS_FALSE} end-if end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Report Page Break * !* * !* [TAG_PRC_MAIN] Process Page Break: * !* * !* - Called by EDS System when page overflow is detected. * !* - Start new page. * !* - Print ' Contd...' on top of each page for current * !* detail section based on break level which * !* may be 1 , 2 or 3 as there are three key fields * !* e.g. company, paygroup, department. * !* * !*********************************************************************** begin-procedure my-page-break !* Note: Should not call any EDS event procedure that might be called to !* EDS system as this can result into recursion. #define dim $descr new-page if #SRIT_EDS_pay_before_brk_lvl > 1 do get-descr ('Company', $SRIT_EDS_pay_cur_company, $SRIT_EDS_pay_cur_effdt, $descr) let $descr = 'Company: ' || $SRIT_EDS_pay_cur_company || ' - ' || $descr || ' Contd...' do SRIT-EDS-new-line (1) print $descr (, 1, ) end-if if #SRIT_EDS_pay_before_brk_lvl > 2 do get-descr ('Paygroup', $SRIT_EDS_pay_cur_paygroup, $SRIT_EDS_pay_cur_effdt, $descr) let $descr = 'Paygroup: ' || $SRIT_EDS_pay_cur_paygroup || ' - ' || $descr || ' Contd...' do SRIT-EDS-new-line (1) print $descr (, 1, ) end-if if #SRIT_EDS_pay_before_brk_lvl > 3 do get-descr ('Department', $SRIT_EDS_pay_cur_dept, $SRIT_EDS_pay_cur_effdt, $descr) let $descr = 'Department: ' || $SRIT_EDS_pay_cur_dept || ' - ' || $descr || ' Contd...' do SRIT-EDS-new-line (1) print $descr (, 1, ) do SRIT-EDS-new-line (1) end-if end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Company Before Event * !* * !* [TAG_PRC_MAIN] Company Before Event: * !* * !* - Called by EDS System when Value in company changes. * !* - Force new page but not first time. * !* - Print Company code and Description. * !* * !*********************************************************************** begin-procedure pay-before-company ($company, $effdt) #define dim $descr !start company from new page if #_SRIT_EDS_pay_first_detail = {SRIT_EDS_FALSE} new-page end-if if $_sel.Company = {ALL} do get-descr ('Company', $company, $effdt, $descr) do print-before (1, 'Company', $company, $descr, 1) end-if end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Paygroup Before Event * !* * !* [TAG_PRC_MAIN] Paygroup Before Event: * !* * !* - Called by EDS System when Value in Paygroup changes. * !* - Print Paygroup Code and Description. * !* * !*********************************************************************** begin-procedure pay-before-paygroup ($company, $paygroup, $effdt) #define dim $descr if $_sel.paygroup = {ALL} do get-descr ('Paygroup', $paygroup, $effdt, $descr) do print-before (3, 'Paygroup', $paygroup, $descr, 1) end-if end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Department Before Event * !* * !* [TAG_PRC_MAIN] Department Before Event: * !* * !* - Called by EDS System when Value in Department changes. * !* - Print Department Code and Description. * !* * !*********************************************************************** begin-procedure pay-before-dept ($company, $paygroup, $dept, $effdt) #define dim $descr if $_sel.dept = {ALL} do get-descr ('Department', $dept, $effdt, $descr) do print-before (2, 'Department', $dept, $descr, 1) end-if end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Print Detail Section * !* * !* [TAG_PRC_MAIN] Print Detail Section: * !* * !* - Called by EDS System to print detail section. * !* - Print detail section fields. * !* - Call Leave Sub Report to report leave data. * !* * !*********************************************************************** begin-procedure my-pay-detail-section do SRIT-EDS-new-line (1) !standard procedure that moves current line to next line !and if page break procedure is specified in the, !it calls new-page if page overflow is found !based of max lines allowed in the page. This is a soft !page break that occurs before SQRW finds page overflow !based on page-size declaration in begin-setup print $emplid_detail (, {Emplid_Col},) let $empl_name = 'name of emplid ' || $emplid_detail print $empl_name (, {EmplName_Col},) do SQRP-EDS-print-num-RJust ({Basic_Col}, '{AMT_MSK}', #basic) do SQRP-EDS-print-num-RJust ({Allow_Col}, '{AMT_MSK}', #allow) do SQRP-EDS-print-num-RJust ({Ded_Col}, '{AMT_MSK}', #ded) do SQRP-EDS-print-num-RJust ({Tax_Col}, '{AMT_MSK}', #tax) do SQRP-EDS-print-num-RJust ({Net_Col}, '{AMT_MSK}', #net) do leave-report ($emplid_detail) !do a sub report end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Company After Event * !* * !* [TAG_PRC_MAIN] Company After Event: * !* * !* - Called by EDS System after Value in Company changes. * !* - Print Company Totals and reset after printing. * !* * !*********************************************************************** begin-procedure pay-after-company ($company, $effdt) do print-totals-and-reset (1, 'Company', $company, #_company_total_basic, #_company_total_allow, #_company_total_ded, #_company_total_tax, #_company_total_net) end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Paygroup After Event * !* * !* [TAG_PRC_MAIN] Paygroup After Event: * !* * !* - Called by EDS System after Value in Paygroup changes. * !* - Print PayGroup Totals and reset after printing. * !* * !*********************************************************************** begin-procedure pay-after-paygroup ($company, $paygroup, $effdt) do print-totals-and-reset (2, 'PayGroup', $paygroup, #_paygroup_total_basic, #_paygroup_total_allow, #_paygroup_total_ded, #_paygroup_total_tax, #_paygroup_total_net) end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Department After Event * !* * !* [TAG_PRC_MAIN] Department After Event: * !* * !* - Called by EDS System after Value in Department changes. * !* - Print Department Totals and reset after printing. * !* * !*********************************************************************** begin-procedure pay-after-dept ($company, $paygroup, $dept, $effdt) do print-totals-and-reset (3, 'Department', $dept, #_dept_total_basic, #_dept_total_allow, #_dept_total_ded, #_dept_total_tax, #_dept_total_net) end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] End Of Report Event * !* * !* [TAG_SQR_TERM],[TAG_PRC_MAIN] End Of Report Event: * !* * !* - Print Grand Totals and number of records processed from * !* input stream. * !* * !*********************************************************************** begin-procedure End-of-report local do SRIT-EDS-new-line (0) do print-totals-and-reset (1, 'Grand', '', #_grand_total_basic, #_grand_total_allow, #_grand_total_ded, #_grand_total_tax, #_grand_total_net) do SRIT-EDS-new-line (0) do SRIT-EDS-new-line (0) print 'Total Rows Processed : ' (,19,) print #_rec_cnt (,,) edit {NUM_MSK} show 'End of Report' end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Accumulate totals * !* * !* [TAG_PRC_MAIN] Accumulate Totals: * !* * !* - Called by EDS * !* - Compute key totals that are required to print when * !* breaks are detected by EDS system. * !* * !*********************************************************************** begin-procedure my-pay-accum-totals #define dim #company_total_basic, #company_total_allow, #company_total_ded, #company_total_tax, #company_total_net #define dim #paygroup_total_basic, #paygroup_total_allow, #paygroup_total_ded, #paygroup_total_tax, #paygroup_total_net #define dim #dept_total_basic, #dept_total_allow, #dept_total_ded, #dept_total_tax, #dept_total_net #define dim #grand_total_basic, #grand_total_allow, #grand_total_ded, #grand_total_tax, #grand_total_net let #company_total_basic = #company_total_basic + #basic let #company_total_allow = #company_total_allow + #allow let #company_total_ded = #company_total_ded + #ded let #company_total_tax = #company_total_tax + #tax let #company_total_net = #company_total_net + #net let #paygroup_total_basic = #paygroup_total_basic + #basic let #paygroup_total_allow = #paygroup_total_allow + #allow let #paygroup_total_ded = #paygroup_total_ded + #ded let #paygroup_total_tax = #paygroup_total_tax + #tax let #paygroup_total_net = #paygroup_total_net + #net let #dept_total_basic = #dept_total_basic + #basic let #dept_total_allow = #dept_total_allow + #allow let #dept_total_ded = #dept_total_ded + #ded let #dept_total_tax = #dept_total_tax + #tax let #dept_total_net = #dept_total_net + #net let #grand_total_basic = #grand_total_basic + #basic let #grand_total_allow = #grand_total_allow + #allow let #grand_total_ded = #grand_total_ded + #ded let #grand_total_tax = #grand_total_tax + #tax let #grand_total_net = #grand_total_net + #net end-procedure !*********************************************************************** !* supporting procedures: * !* - print totals etc * !*********************************************************************** begin-procedure print-totals-and-reset (#need, $key_desc, $key_val, :#Val1, :#Val2, :#Val3, :#Val4, :#Val5) #define dim $tmp_str do SRIT-EDS-new-line (#need) let $tmp_str = $key_desc || ' ' || $key_val || ' - Totals :' do SQRP-EDS-print-txt-RJust (40, 30, $tmp_str, 0) do SQRP-EDS-print-num-RJust ({Basic_Col}, '{AMT_MSK}', #Val1) do SQRP-EDS-print-num-RJust ({Allow_Col}, '{AMT_MSK}', #Val2) do SQRP-EDS-print-num-RJust ({Ded_Col}, '{AMT_MSK}', #Val3) do SQRP-EDS-print-num-RJust ({Tax_Col}, '{AMT_MSK}', #Val4) do SQRP-EDS-print-num-RJust ({Net_Col}, '{AMT_MSK}', #Val5) !initialise after printing let #Val1 = 0 let #Val2 = 0 let #Val3 = 0 let #Val4 = 0 let #Val5 = 0 end-procedure begin-procedure print-before (#need, $key_fld, $key, $key_desc, #col) #define dim $line let $line = $key_fld || ': ' || $key || ' - ' || $key_desc do SRIT-EDS-new-line (#need) print $line (, #col,) end-procedure begin-procedure get-descr ($key_fld, $key, $effdt, :$key_desc) let $key_desc = $key_fld || ' - ' || $key || ' Descr Not Found for EffDt: ' || $effdt uppercase $key_fld uppercase $key EVALUATE $key_fld when = 'COMPANY' if $key = 'C001' let $key_desc = 'ABC Limited' end-if if $key = 'K023' let $key_desc = 'Kate Limited' end-if break when = 'PAYGROUP' if $key = 'FN1' let $key_desc = 'Fortnightly Employees' end-if if $key = 'MT1' let $key_desc = 'Monthly Employees' end-if if $key = 'WK1' let $key_desc = 'Weekly Employees' end-if if $key = 'WK2' let $key_desc = 'Weekly Casuals' end-if break when = 'DEPARTMENT' if $key = 'HR01' let $key_desc = 'Human Resource Head Office' end-if if $key = 'HR02' let $key_desc = 'Human Resource Liverpool' end-if if $key = 'SR01' let $key_desc = 'Head Office Security' end-if if $key = 'SR02' let $key_desc = 'Liverpool Security' end-if if $key = 'SR03' let $key_desc = 'Warehouse Security' end-if break END-EVALUATE end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Terminate * !* * !*[TAG_SQR_TERM],[TAG_PRC_MAIN] Terminate: * !* * !* - Set end of report flag. * !* * !*********************************************************************** begin-procedure Terminate let $End_of_Report = 'Y' end-procedure !select following procedures in documentation. !*[TAG_SELP] my-pay-detail-section, my-pay-init-variables, my-pay-skip, my-page-break !*[TAG_SELP] pay-before-company, pay-before-paygroup, pay-before-dept !*[TAG_SELP] pay-after-company, pay-after-paygroup, pay-after-dept !*********************************************************************** !* * !* [TAG_PRC_DESC] Generate Leave Sub Report * !* * !*[TAG_SQR_MAIN]200,[TAG_PRC_MAIN] Generate Sub Report using EDS: * !* * !* - Initialise EDS system with SUB Report Type as 'leave'. * !* - Read each record from input stream (pre-loaded array) * !* for current employee. * !* - Submit each record to EDS System. * !* - Exit EDS system on end of data for current employee. * !* * !*********************************************************************** begin-procedure leave-report ($emplid) #define dim #ind, $tmp, $Leave_emplid, $Leave_date, $Leave_reason, #no_data #define dim $_Detail_Leave_date, $_Detail_Leave_reason, #empl_found do SRIT-EDS-begin-leave ( 'key1=emplid', !key fields in the input stream on !which break events will be processed 'my-leave-detail-section', !procedure that does the detail section !of the report '', !procedure that resets variables after !completing detail section '', !procedure that accumulates totals required !in after-break events '') !procedure that tests if a particular detail !data section should be skipped let #_SRIT_EDS_leave_no_lf = {SRIT_EDS_TRUE} !turn of lf by EDS system let #empl_found = {SRIT_EDS_FALSE} let #ind = 0 while 1 ! Infinite loop, breaks when end of loaded array is detected. add 1 to #ind if #ind > #_arr_counter break ! End of array reached. end-if let $Leave_emplid = LeaveArray.emplid(#ind) let $Leave_date = LeaveArray.Leave_date(#ind) let $Leave_reason = LeaveArray.Leave_reason(#ind) if $emplid = $Leave_emplid let #empl_found = {SRIT_EDS_TRUE} let $tmp = to_char(#ind) do SRIT-EDS-process-leave ( $emplid, !first key field $tmp, !field on which further aggregation/groupings would be done. !no aggregation is required and every row should be reported and hence a !running counter is passed so that every row results into break to invoke detail section '') !effdate from input stream that break events may require !save data required in detail section let $_Detail_Leave_date = $Leave_date let $_Detail_Leave_reason = $Leave_reason else if #empl_found = {SRIT_EDS_TRUE} break ! do not scan the array any further as data is pre sorted on emplid. end-if end-if end-while do SRIT-EDS-end-leave (#no_data) !indicate end of leave data input stream to EDS system to finalise last bit if #no_data = {SRIT_EDS_FALSE} do SRIT-EDS-new-line (1) !do a line feed if data was found to print end-if end-procedure begin-procedure leave-before-emplid ($emplid, $effdt) do SRIT-EDS-new-line (4) print 'Leave Date' (,{Allow_Col},) print 'Leave Reason' (,{Ded_Col},) do SRIT-EDS-new-line (1) print '----------------------------------' (,{Allow_Col}) end-procedure begin-procedure my-leave-detail-section do SRIT-EDS-new-line (1) print $Detail_Leave_date (,{Allow_Col},) print $Detail_Leave_reason (,{Ded_Col},) end-procedure !*********************************************************************** !* * !* [TAG_PRC_DESC] Load Leave Data * !* * !* [TAG_PRC_MAIN] Load Leave Data: * !* * !* - Load leave data into array to prepare input stream for * !* sub report. * !* * !*********************************************************************** begin-procedure Load-Leave-Data local #define dim $SqrPlus_dir, $InpFile, #filestat, $emplid, $Leave_date, $Leave_reason #define dim #_arr_counter, #rec_cnt, $errmsg, $rec #define ARR_SIZE 200 !4000 #define LEAVE_FD 2 create-array name = LeaveArray size={ARR_SIZE} field = Emplid:char field = Leave_date:char field = Leave_reason:char let $SqrPlus_dir = getenv('SQRPLUS_DIR') let $InpFile = $SqrPlus_dir || '\sqr\demo05.csv' open $InpFile as {LEAVE_FD} for-reading record={REC_LEN}:vary status=#filestat if #filestat != 0 let $errmsg = 'Unable to Open Input File: ' || $InpFile || ', Program aborted.' show $errmsg stop else show 'Input File: ' $InpFile end-if show 'Loading Leave Data into Array' let #_arr_counter = 0 let #rec_cnt = 0 while 1 ! Infinite loop, breaks when end of file is detected. read {LEAVE_FD} into $rec:{REC_LEN} if #_end-file break ! End of file reached. end-if add 1 to #rec_cnt if #rec_cnt > 1 !ignore header line do SQRP-EDS-Get-Fld-By-Num ($rec, ',', {EMPLID_FLD_POS},$emplid) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 8, $Leave_date) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 9, $Leave_reason) let $Leave_date = ltrim($Leave_date, ' ') let $Leave_date = rtrim($Leave_date, ' ') let $Leave_reason = ltrim($Leave_reason, ' ') let $Leave_reason = rtrim($Leave_reason, ' ') if $Leave_date <> '' or $Leave_reason <> '' if $Leave_date = '' let $Leave_date = '2005-JAN-01' !default date if missing end-if if $Leave_reason = '' let $Leave_reason = 'Unknown1' !default date if missing end-if do add-to-array ($emplid, $Leave_date, $Leave_reason) end-if do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 10, $Leave_date) do SQRP-EDS-Get-Fld-By-Num ($rec, ',', 11, $Leave_reason) let $Leave_date = ltrim($Leave_date, ' ') let $Leave_date = rtrim($Leave_date, ' ') let $Leave_reason = ltrim($Leave_reason, ' ') let $Leave_reason = rtrim($Leave_reason, ' ') if $Leave_date <> '' or $Leave_reason <> '' if $Leave_date = '' let $Leave_date = '2005-JAN-02' !default date if missing end-if if $Leave_reason = '' let $Leave_reason = 'Unknown2' !default date if missing end-if do add-to-array ($emplid, $Leave_date, $Leave_reason) end-if end-if end-while close {LEAVE_FD} show 'Leave Data loaded, row count: ' #_arr_counter edit 9999 end-procedure begin-procedure add-to-array ($emplid, $Leave_date, $Leave_reason) #define dim #first if #_arr_counter < {ARR_SIZE} - 1 add 1 to #_arr_counter let LeaveArray.emplid(#_arr_counter) = $emplid let LeaveArray.Leave_date(#_arr_counter) = $Leave_date let LeaveArray.Leave_reason(#_arr_counter) = $Leave_reason show 'Data loaded: ' $emplid ' : ' $Leave_date ' : ' $Leave_reason else if #first = 0 let #first = 1 show 'Array full, Data after ' #_arr_counter ' ignored.' end-if end-if end-procedure begin-procedure leave-data-found ($emplid, :#found) #define dim #ind, $Leave_emplid let #found = {SRIT_EDS_FALSE} let #ind = 0 while 1 ! Infinite loop, breaks when end of loaded array is detected. add 1 to #ind if #ind > #_arr_counter break ! End of array reached. end-if let $Leave_emplid = LeaveArray.emplid(#ind) if $emplid = $Leave_emplid let #found = {SRIT_EDS_TRUE} break end-if end-while end-procedure !*[TAG_SELP] leave-report