*----------------------------------------------------------------------FUNCTIONzbw_itesoft_invoice2.*----------------------------------------------------------------------*Local Interface:* IMPORTING* VALUE(I_REQUNR) TYPE SRSC_S_IF_SIMPLE-REQUNR* VALUE(I_DSOURCE) TYPE SRSC_S_IF_SIMPLE-DSOURCE OPTIONAL* VALUE(I_MAXSIZE) TYPE SRSC_S_IF_SIMPLE-MAXSIZE OPTIONAL* VALUE(I_INITFLAG) TYPE SRSC_S_IF_SIMPLE-INITFLAG OPTIONAL* VALUE(I_READ_ONLY) TYPE SRSC_S_IF_SIMPLE-READONLY OPTIONAL* VALUE(I_REMOTE_CALL) TYPE SBIWA_FLAG DEFAULT SBIWA_C_FLAG_OFF* TABLES* I_T_SELECT TYPE SRSC_S_IF_SIMPLE-T_SELECT OPTIONAL* I_T_FIELDS TYPE SRSC_S_IF_SIMPLE-T_FIELDS OPTIONAL* E_T_DATA STRUCTURE ZBW_STR_ITE_INV OPTIONAL* EXCEPTIONS* NO_MORE_DATA* ERROR_PASSED_TO_MESS_HANDLER*----------------------------------------------------------------------STATICS:s_s_ifTYPE srsc_s_if_simple,s_counter_datapakidLIKE sy-tabix,s_cursorTYPE cursor.*----------------------------------------------*I. Initialization mode (1st call by SAPI)* ----------------------------------------------IFi_initflag=sbiwa_c_flag_on.* I.1 - Check DataSource validityIFi_dsource<>'ZBW_ITESOFT_INVOICE2'.log_write'E''R3''009'i_dsource' '.RAISEerror_passed_to_mess_handler.ENDIF.* I.2 - Load s_s_if variable.APPEND LINES OFi_t_selectTOs_s_if-t_select.s_s_if-requnr=i_requnr.s_s_if-dsource=i_dsource.s_s_if-maxsize=i_maxsize.APPEND LINES OFi_t_fieldsTOs_s_if-t_fields.* ----------------------------------------------* II. 2nd Call* ----------------------------------------------ELSE.* ----------------------------------------------* II.1 - First Datapackage* ----------------------------------------------IFs_counter_datapakid=0.*----------------------------------------------* II.1.1 - Prepare variable for execution* ----------------------------------------------* Creation DateREFRESHs_date.LOOP AT s_s_if-t_selectINTOl_s_selectWHEREfieldnm='CREDAT'.MOVE-CORRESPONDINGl_s_selectTOs_date.IFl_s_select-sign='I'ANDl_s_select-option='EQ'ANDl_s_select-low<>''.s_date-sign='I'.s_date-option='BT'.s_date-high=l_s_select-low.APPENDs_date.ELSE.APPENDs_date.ENDIF.ENDLOOP.IFs_date[]IS INITIAL.s_date-low='00010101'." It specifies the range starting value.s_date-high='99991231'." It specifies the range ending value.s_date-option='BT'." specifies ranges value is in between.s_date-sign='I'."specifies both inclussive.APPENDs_date.ENDIF.-StatusREFRESHs_status.LOOP AT s_s_if-t_selectINTOl_s_selectWHEREfieldnm='ZZSTATUT'.MOVE-CORRESPONDINGl_s_selectTOs_status.APPENDs_status.ENDLOOP.* ----------------------------------------------* II.1.2 - Execution of ZRM03 transaction* and copy result in internal table*----------------------------------------------* Important to set display = abap_false so the standard program won’t display the ALVcl_salv_bs_runtime_info=>set(EXPORTINGdisplay=abap_falsemetadata=abap_falsedata=abap_true).SUBMIT/itesoft/zbalancer_rapprman_01WITHs_datselINs_dateWITHs_invstINs_statusWITHcb_typmm='X'WITHcb_typfi='X'AND RETURN.TRY.cl_salv_bs_runtime_info=>get_data_ref(IMPORTINGr_data=lr_data).ASSIGNlr_data->*TO<lt_data>.IFNOTlr_dataIS INITIAL.LOOPAT<lt_data>ASSIGNING<l_data>.CLEARwa_listfact.MOVE-CORRESPONDING<l_data>TOwa_listfact.* Update ZZSTATUT field (don't exist in ALV grid)SELECTinvstatINTOwa_listfact-zzstatutFROM/itesoft/statustUPTO1ROWSWHERElangu=sy-languANDstatxt=wa_listfact-msgsta.ENDSELECT.APPENDwa_listfactTOit_listfact.ENDLOOP.ENDIF.CATCHcx_salv_bs_sc_runtime_info.MESSAGE'Unable to retrieve ALV data'TYPE'E'.ENDTRY.*----------------------------------------------* II.1.3 - Calculate nb of rows and* Init datapackage size*----------------------------------------------DESCRIBE TABLEit_listfactLINESw_nb_lignes.IFw_nb_lignes=0.RAISEno_more_data.ELSE.w_first_record=1.IFs_s_if-maxsize>=w_nb_lignes.w_last_record=w_nb_lignes.ELSE.w_last_record=s_s_if-maxsize.ENDIF.ENDIF.*----------------------------------------------* II.1.4 - Clear variable and field symbols*----------------------------------------------cl_salv_bs_runtime_info=>clear_all().UNASSIGN:<lt_data>,<l_data>.FREE lr_data.ENDIF.*----------------------------------------------* II.2 - For each package* ----------------------------------------------* ----------------------------------------------* Copy data in e_t_data by datapackage size* ----------------------------------------------IFw_first_record>w_nb_lignes.RAISEno_more_data.ENDIF.IFw_last_record>w_nb_lignes.w_last_record=w_nb_lignes.ENDIF.LOOP AT it_listfactINTOwa_listfactFROMw_first_recordTOw_last_record.APPENDwa_listfactTOe_t_data.ENDLOOP.*----------------------------------------------* Calculate next datapackage interval* ----------------------------------------------w_first_record=w_last_record+1.w_last_record=w_first_record+s_s_if-maxsize-1.s_counter_datapakid=s_counter_datapakid+1.ENDIF.ENDFUNCTION.