{"id":74,"date":"2023-10-26T15:24:37","date_gmt":"2023-10-26T15:24:37","guid":{"rendered":"https:\/\/sapabap.dwimansolution.com\/?p=74"},"modified":"2023-10-26T15:32:38","modified_gmt":"2023-10-26T15:32:38","slug":"sap-abap-posting-fbcj-using-bapi","status":"publish","type":"post","link":"https:\/\/sapabap.dwimansolution.com\/index.php\/2023\/10\/26\/sap-abap-posting-fbcj-using-bapi\/","title":{"rendered":"SAP ABAP &#8211; POSTING FBCJ using BAPI"},"content":{"rendered":"\n<p>ZFIT_UPL_CJ_LOG<\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1lhd5EwwuNh3L_OkXRRH-AmphiIjkcmmle1rsmLg7Fek\/edit?usp=sharing\">https:\/\/docs.google.com\/spreadsheets\/d\/1lhd5EwwuNh3L_OkXRRH-AmphiIjkcmmle1rsmLg7Fek\/edit?usp=sharing<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"594\" src=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/10\/image-1024x594.png\" alt=\"\" class=\"wp-image-76\" srcset=\"https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/10\/image-1024x594.png 1024w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/10\/image-300x174.png 300w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/10\/image-768x445.png 768w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/10\/image-850x493.png 850w, https:\/\/sapabap.dwimansolution.com\/wp-content\/uploads\/2023\/10\/image.png 1352w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>\nREPORT zfi_upload_cj MESSAGE-ID zfi.\n\n* -------------------------------------------------------------------- *\n*  G L O B A L   V A R I A B L E\n* -------------------------------------------------------------------- *\nTABLES: zfit_upl_cj_log.\n\nTYPES:\n  gty_data TYPE zfist0004,\n  gtt_data TYPE TABLE OF zfist0004,\n  gty_xlsx TYPE zfist0005,\n  gtt_xlsx TYPE TABLE OF zfist0005.\n\n\" &#91;START] JDS 08.03.2023 : balance validation\nTYPES:\n  BEGIN OF gty_balance,\n    cajo_number TYPE tcj_balance-cajo_number,\n    time_stamp  TYPE tcj_balance-time_stamp,\n    closing_sum TYPE tcj_balance-closing_sum,\n    currency    TYPE tcj_balance-currency,\n  END OF gty_balance,\n  gtt_balance TYPE TABLE OF gty_balance.\n\" &#91;END] JDS 08.03.2023 : balance validation\n\nTYPES:\n  BEGIN OF gty_trans,\n    comp_code       TYPE tcj_transactions-comp_code,\n    transact_number TYPE tcj_transactions-transact_number,\n    transact_type   TYPE tcj_transactions-transact_type,\n    gl_account      TYPE tcj_transactions-gl_account,\n    transact_name   TYPE tcj_trans_names-transact_name,\n  END OF gty_trans,\n  gtt_trans TYPE TABLE OF gty_trans.\n\nTYPES:\n  BEGIN OF gty_cardnum,\n    comp_code   TYPE zfit_upl_cj_map-comp_code,\n    cajo_number TYPE zfit_upl_cj_map-cajo_number,\n    cardnum     TYPE zfit_upl_cj_map-cardnum,\n  END OF gty_cardnum,\n  gtt_cardnum TYPE TABLE OF gty_cardnum.\n\n\" &#91;START] JDS 31.07.2023 : add validation\nTYPES: BEGIN OF gty_fmci,\n         bukrs TYPE t001-bukrs,\n         fipex TYPE fmci-fipex,\n       END OF gty_fmci,\n       gtt_fmci TYPE TABLE OF gty_fmci.\n\nTYPES: BEGIN OF gty_skb1,\n         bukrs TYPE skb1-bukrs,\n         saknr TYPE skb1-saknr,\n       END OF gty_skb1,\n       gtt_skb1 TYPE TABLE OF gty_skb1.\n\" &#91;END] JDS 31.07.2023 : add validation\nDATA:\n  gt_fmci      TYPE gtt_fmci, \" JDS 31.07.2023 : add cmmt_item validation\n  gt_skb1      TYPE gtt_skb1, \" JDS 31.07.2023 : add gl validation\n  gt_trans     TYPE gtt_trans,\n  gt_cardnum   TYPE gtt_cardnum,\n  gt_data      TYPE gtt_data,\n  go_alv_table TYPE REF TO cl_salv_table,\n  gt_log       TYPE TABLE OF zfit_upl_cj_log. \" repost\n\nCONSTANTS:\n  gc_icon_error   TYPE icon_d VALUE icon_red_light,\n  gc_icon_success TYPE icon_d VALUE icon_green_light.\n\n* -------------------------------------------------------------------- *\n*  S E L E C T I O N   S C R E E N\n* -------------------------------------------------------------------- *\nSELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-002.\n  PARAMETERS : rb_upl   RADIOBUTTON GROUP rad1 DEFAULT 'X' USER-COMMAND uc1,\n               rb_bgj   RADIOBUTTON GROUP rad1,\n               rb_repos RADIOBUTTON GROUP rad1, \" repost\n               rb_log   RADIOBUTTON GROUP rad1.\nSELECTION-SCREEN END OF BLOCK b1.\n\nSELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-001.\n  PARAMETERS: p_file TYPE string LOWER CASE MODIF ID upl. \"OBLIGATORY.\n\n  SELECT-OPTIONS: so_bukrs FOR zfit_upl_cj_log-comp_code MODIF ID log,\n                  so_cajon FOR zfit_upl_cj_log-cajo_number  MODIF ID log,\n                  so_ttype FOR zfit_upl_cj_log-transact_type  MODIF ID log,\n                  so_hkont FOR zfit_upl_cj_log-gl_account MODIF ID log,\n                  so_budat FOR zfit_upl_cj_log-pstng_date MODIF ID log,\n                  so_statu FOR zfit_upl_cj_log-status MODIF ID log,\n                  so_erdat FOR zfit_upl_cj_log-erdat MODIF ID log,\n                  so_erzet FOR zfit_upl_cj_log-erzet MODIF ID log,\n                  so_ernam FOR zfit_upl_cj_log-ernam MODIF ID log.\nSELECTION-SCREEN END OF BLOCK b2.\n\nAT SELECTION-SCREEN OUTPUT.\n  PERFORM f_sel_out.\n\n\nAT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.\n  \"Popup file open\n  PERFORM f_f4_file CHANGING p_file.\n\n* -------------------------------------------------------------------- *\n*  C L A S S\n* -------------------------------------------------------------------- *\nCLASS lcl_event_handler DEFINITION.\n  PUBLIC SECTION.\n    METHODS :\n      on_user_command FOR EVENT added_function OF cl_salv_events_table\n        IMPORTING e_salv_function,\n      on_link_click FOR EVENT link_click OF cl_salv_events_table\n        IMPORTING column row.\nENDCLASS.\n\nCLASS lcl_event_handler IMPLEMENTATION.\n*\n  METHOD on_user_command.\n    PERFORM f_handle_user_command USING e_salv_function.\n\n  ENDMETHOD.                    \" on_user_command\n*\n  METHOD on_link_click.\n    PERFORM f_handle_hotspot USING column row.\n  ENDMETHOD.                    \" on_link_click\n*\nENDCLASS.                    \"lcl_event_handler IMPLEMENTATION\n\n* -------------------------------------------------------------------- *\n*  S T A R T   O F    S E L E C T I O N\n* -------------------------------------------------------------------- *\nSTART-OF-SELECTION.\n  PERFORM f_validation_upload.\n  CASE 'X'.\n    WHEN rb_bgj.\n      PERFORM f_get_file_from_sap_server USING p_file\n                                          CHANGING gt_data.\n      PERFORM f_get_master_data.\n      PERFORM f_build_data.\n*      PERFORM f_balance_validation. \" JDS 08.03.2023 : add balance validation\n      PERFORM f_process_cjdoc.\n    WHEN rb_upl.\n      PERFORM f_get_upload_data_xlsx USING  p_file\n                                     CHANGING gt_data.\n      PERFORM f_get_master_data.\n      PERFORM f_build_data.\n*      PERFORM f_balance_validation. \" JDS 08.03.2023 : add balance validation\n    WHEN rb_repos. \" repost\n*      PERFORM f_get_repost_data CHANGING gt_data.\n      PERFORM f_get_log_data CHANGING gt_data.\n      PERFORM f_get_master_data.\n      PERFORM f_build_data.\n    WHEN rb_log.\n      PERFORM f_get_log_data CHANGING gt_data.\n  ENDCASE.\n\n\n* -------------------------------------------------------------------- *\n*  E N D   O F   S E L E C T I O N\n* -------------------------------------------------------------------- *\nEND-OF-SELECTION.\n  IF sy-batch NE 'X'.\n    PERFORM f_display_alv.\n  ENDIF.\n\n* -------------------------------------------------------------------- *\n*  S U B R O U T I N E S\n* -------------------------------------------------------------------- *\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_get_log_data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- GT_DATA\n*&amp;---------------------------------------------------------------------*\nFORM f_get_log_data  CHANGING pct_data TYPE gtt_data.\n\n  SELECT *\n    FROM zfit_upl_cj_log\n    INTO TABLE gt_log\n    WHERE comp_code IN so_bukrs\n      AND cajo_number IN so_cajon\n      AND transact_type IN so_ttype\n      AND gl_account IN so_hkont\n      AND pstng_date IN so_budat\n      AND status IN so_statu\n      AND erdat IN so_erdat\n      AND erzet IN so_erzet\n      AND ernam IN so_ernam.\n\n  IF sy-subrc EQ 0.\n    LOOP AT gt_log INTO DATA(ls_log).\n      APPEND INITIAL LINE TO pct_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>).\n      MOVE-CORRESPONDING ls_log TO &lt;lfs_data>.\n      CASE ls_log-status.\n        WHEN 'S'.\n          &lt;lfs_data>-icon = gc_icon_success.\n        WHEN 'E'.\n          &lt;lfs_data>-icon = gc_icon_error.\n      ENDCASE.\n    ENDLOOP.\n  ELSE.\n    \" No data exists\n    MESSAGE ID '\/ACCGO\/CAS_FLLW_MSG' TYPE 'S' NUMBER 338 DISPLAY LIKE 'E'.\n  ENDIF.\n\n  SORT pct_data BY cajo_number pstng_date seq subseq. \" JDS 09.03.2023 : repost\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_display_alv\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_display_alv .\n\n  CHECK gt_data IS NOT INITIAL.\n  IF rb_repos NE 'X' AND rb_log NE 'X'. \" JDS 09.03.2023 : repost\n    SORT gt_data BY sort_no.\n  ENDIF.\n\n  TRY .\n      cl_salv_table=>factory(\n        IMPORTING\n          r_salv_table = go_alv_table\n        CHANGING\n          t_table      = gt_data ).\n\n      PERFORM f_set_status.\n      PERFORM f_set_columns.\n      PERFORM f_set_events.\n\n      go_alv_table->display( ).\n\n    CATCH cx_salv_msg.\n  ENDTRY.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_set_status\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_set_status .\n\n  DATA: lv_pfstatus TYPE sypfkey.\n\n  IF rb_repos NE 'X'. \" JDS 09.03.2023 : repost\n    lv_pfstatus = 'STANDARD'.\n    LOOP AT gt_data INTO DATA(ls_data) WHERE icon IS NOT INITIAL.\n      lv_pfstatus = 'STANDARD2'.\n      EXIT.\n    ENDLOOP.\n  ELSE.\n    lv_pfstatus = 'STANDARD_REPOS'.\n  ENDIF.\n\n  go_alv_table->set_screen_status(\n   EXPORTING\n     pfstatus = lv_pfstatus\n     report   = sy-repid\n     set_functions = go_alv_table->c_functions_all ).\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_set_columns\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_set_columns .\n  DATA:\n    lo_columns TYPE REF TO cl_salv_columns_table,\n    lo_column  TYPE REF TO cl_salv_column_table.\n\n  DEFINE _set_text.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_short_text( '' ).\n        lo_column->set_medium_text( '' ).\n        lo_column->set_long_text( &amp;2 ).\n      CATCH cx_salv_not_found.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_hide.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_visible( value  = if_salv_c_bool_sap=>false ).\n      CATCH cx_salv_not_found.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_technical.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_technical( ).\n      CATCH cx_salv_not_found.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_icon.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_icon( ).\n      CATCH cx_salv_not_found.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_checkbox.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_cell_type( value = if_salv_c_cell_type=>checkbox_hotspot ).\n      CATCH cx_salv_not_found.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_hotspot.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_cell_type(\n            value = if_salv_c_cell_type=>hotspot\n        ).\n      CATCH cx_salv_not_found.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_curr_col.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_currency_column( value = &amp;2 ).\n      CATCH cx_salv_not_found.\n      CATCH cx_salv_data_error.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  DEFINE _set_key.\n    TRY.\n        lo_column ?= lo_columns->get_column( &amp;1 ).\n        lo_column->set_key( ).\n      CATCH cx_salv_not_found.\n      CATCH cx_salv_data_error.\n    ENDTRY.\n  END-OF-DEFINITION.\n\n  lo_columns =  go_alv_table->get_columns( ).\n  lo_columns->set_optimize( abap_true ).\n  lo_columns->set_key_fixation( ).\n\n  _set_icon 'ICON'.\n  _set_text 'ICON' 'Icon' ##NO_TEXT.\n  _set_text 'ALLOC_NMBR' 'Card Number' ##NO_TEXT.\n  _set_technical 'SORT_NO'.\n  _set_hotspot 'BELNR'.\n\n  _set_curr_col 'P_PAYMENTS' 'CURRENCY'.\n\n  IF rb_repos NE 'X'. \" JDS 09.03.2023 : repost\n    _set_technical 'CHECKBOX'.\n  ELSE.\n    _set_checkbox 'CHECKBOX'.\n    _set_key 'CHECKBOX'.\n    _set_key 'ICON'.\n    _set_key 'COMP_CODE'.\n    _set_key 'CAJO_NUMBER'.\n    _set_technical 'SEQ'.\n    _set_technical 'SUBSEQ'.\n  ENDIF.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_set_events\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_set_events .\n  DATA:\n    lo_events        TYPE REF TO cl_salv_events_table,\n    lo_event_handler TYPE REF TO lcl_event_handler.\n\n* Get the event object\n  lo_events = go_alv_table->get_event( ).\n\n* Event handler\n  CREATE OBJECT lo_event_handler.\n  SET HANDLER lo_event_handler->on_user_command FOR lo_events.\n  SET HANDLER lo_event_handler->on_link_click FOR lo_events.\n\nENDFORM.\n\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_validation_upload\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_validation_upload .\n\n  DATA: lv_ext      TYPE c LENGTH 10,\n        lv_filename TYPE c LENGTH 255.\n\n  CASE 'X'.\n    WHEN rb_bgj OR rb_upl.\n      IF p_file IS INITIAL.\n        MESSAGE 'Please choose file to upload' TYPE 'S' DISPLAY LIKE 'E' ##NO_TEXT.\n        LEAVE LIST-PROCESSING.\n      ENDIF.\n\n      lv_filename = p_file.\n      CALL FUNCTION 'TRINT_FILE_GET_EXTENSION'\n        EXPORTING\n          filename  = lv_filename\n        IMPORTING\n          extension = lv_ext.\n      IF lv_ext NE 'XLSX'.\n        MESSAGE 'Only XLSX file allowed' TYPE 'S' DISPLAY LIKE 'E' ##NO_TEXT.\n        LEAVE LIST-PROCESSING.\n      ENDIF.\n    WHEN rb_log.\n  ENDCASE.\n\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- P_FILE\n*&amp;---------------------------------------------------------------------*\nFORM f_f4_file  CHANGING pc_flupld TYPE string.\n\n  DATA: lt_filetable TYPE filetable,\n        ls_filetable TYPE file_table,\n        lv_subrc     TYPE i.\n\n  CALL METHOD cl_gui_frontend_services=>file_open_dialog\n    EXPORTING\n      file_filter             = 'Excel Files (*.XLSX)|*.XLSX|' ##NO_TEXT \" cl_gui_frontend_services=>filetype_excel \"\n    CHANGING\n      file_table              = lt_filetable\n      rc                      = lv_subrc\n    EXCEPTIONS\n      file_open_dialog_failed = 1\n      cntl_error              = 2\n      error_no_gui            = 3\n      not_supported_by_gui    = 4\n      OTHERS                  = 5.\n  IF sy-subrc &lt;> 0.\n    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno\n               WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.\n  ELSE.\n    READ TABLE lt_filetable INTO ls_filetable INDEX 1.\n    pc_flupld = ls_filetable-filename.\n  ENDIF.\nENDFORM.\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_get_file_from_sap_server\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> P_FILE\n*&amp;      &lt;-- GT_DATA\n*&amp;---------------------------------------------------------------------*\nFORM f_get_file_from_sap_server  USING    p_file\n                    CHANGING pct_data TYPE gtt_data.\n\n  DATA:\n        lv_xstring TYPE xstring.\n\n  \"1. Read excel from SAP Path Server (AL11)\n  OPEN DATASET p_file FOR INPUT IN BINARY MODE.\n  IF sy-subrc EQ 0.\n\n    \"2. Convert to XSTRING\n    READ DATASET p_file INTO lv_xstring.\n    IF sy-subrc NE 0.\n      RETURN.\n    ENDIF.\n  ENDIF.\n  CLOSE DATASET p_file.\n\n  PERFORM f_xstring2data USING lv_xstring CHANGING pct_data.\n  PERFORM f_validation_data CHANGING pct_data.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_get_upload_data_xlsx\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> P_FILE\n*&amp;      &lt;-- GT_OA\n*&amp;---------------------------------------------------------------------*\nFORM f_get_upload_data_xlsx  USING    p_file TYPE string\n                             CHANGING pct_data TYPE gtt_data.\n\n  PERFORM f_ac_xl_to_sap USING    p_file\n                         CHANGING pct_data.\n\n  IF pct_data IS INITIAL.\n    \"No data to upload\n    MESSAGE s611(cpe_ipc) DISPLAY LIKE fiehc_con_msgty_e.\n    LEAVE LIST-PROCESSING.\n  ENDIF.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_ac_xl_to_sap\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> P_FILE\n*&amp;      &lt;-- PCT_OA\n*&amp;---------------------------------------------------------------------*\nFORM f_ac_xl_to_sap  USING    p_file TYPE string\n                    CHANGING pct_data TYPE gtt_data.\n  DATA:\n    lv_filelength    TYPE i,\n    lv_headerxstring TYPE xstring,\n    lt_records       TYPE solix_tab.\n\n  PERFORM f_xlsx2itab USING p_file CHANGING lv_filelength lv_headerxstring lt_records.\n  PERFORM f_itab2xstring USING lv_filelength lt_records CHANGING lv_headerxstring .\n\n  PERFORM f_xstring2data USING lv_headerxstring CHANGING pct_data.\n  PERFORM f_validation_data CHANGING pct_data.\n\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_xlsx2itab\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> P_FILE\n*&amp;      &lt;-- LV_FILELENGTH\n*&amp;      &lt;-- LV_HEADERXSTRING\n*&amp;      &lt;-- LT_RECORDS\n*&amp;---------------------------------------------------------------------*\nFORM f_xlsx2itab  USING    p_file TYPE string\n                  CHANGING pc_filelength TYPE i\n                           pc_headerxstring TYPE xstring\n                           pct_records TYPE solix_tab.\n  CALL FUNCTION 'GUI_UPLOAD'\n    EXPORTING\n      filename                = p_file\n      filetype                = 'BIN'\n    IMPORTING\n      filelength              = pc_filelength\n      header                  = pc_headerxstring\n    TABLES\n      data_tab                = pct_records\n    EXCEPTIONS\n      file_open_error         = 1\n      file_read_error         = 2\n      no_batch                = 3\n      gui_refuse_filetransfer = 4\n      invalid_type            = 5\n      no_authority            = 6\n      unknown_error           = 7\n      bad_data_format         = 8\n      header_not_allowed      = 9\n      separator_not_allowed   = 10\n      header_too_long         = 11\n      unknown_dp_error        = 12\n      access_denied           = 13\n      dp_out_of_memory        = 14\n      disk_full               = 15\n      dp_timeout              = 16\n      OTHERS                  = 17.\n  IF sy-subrc &lt;> 0.\n    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'\n          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.\n    LEAVE LIST-PROCESSING.\n  ENDIF.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_itab2xstring\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- LV_FILELENGTH\n*&amp;      &lt;-- LV_HEADERXSTRING\n*&amp;      &lt;-- LT_RECORDS\n*&amp;---------------------------------------------------------------------*\nFORM f_itab2xstring  USING    p_filelength TYPE i\n                              pt_records TYPE solix_tab\n                     CHANGING pc_headerxstring TYPE xstring.\n\n  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'\n    EXPORTING\n      input_length = p_filelength\n    IMPORTING\n      buffer       = pc_headerxstring\n    TABLES\n      binary_tab   = pt_records\n    EXCEPTIONS\n      failed       = 1\n      OTHERS       = 2.\n  IF sy-subrc &lt;> 0.\n    MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'\n          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.\n    LEAVE LIST-PROCESSING.\n  ENDIF.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_xstring2data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- PCT_DATA\n*&amp;---------------------------------------------------------------------*\nFORM f_xstring2data USING    p_headerxstring TYPE xstring\n*                    CHANGING pct_data_p TYPE gtt_data\n*                             pct_data_r TYPE gtt_data.\n                    CHANGING pct_data TYPE gtt_data.\n  DATA:\n    lv_filename_str TYPE string,\n    lo_excel_ref    TYPE REF TO cl_fdt_xl_spreadsheet,\n    lt_worksheets   TYPE STANDARD TABLE OF string,\n    lv_err_msg      TYPE string,\n    lv_idx          TYPE sy-index,\n    lo_exc          TYPE REF TO cx_fdt_excel_core,\n    lo_data_raw     TYPE REF TO data,\n    ls_data         TYPE gty_data,\n    ls_xlsx         TYPE gty_xlsx,\n    lv_sort         TYPE i,\n    lv_char10       TYPE char10,\n    ls_item         TYPE zfist0006,\n    lv_worksheet_i  TYPE i. \" JDS 08.03.2023 : GL multi purpose (pay\/rec)\n\n  FIELD-SYMBOLS:\n    &lt;lft_data_raw> TYPE STANDARD TABLE.\n\n  TRY .\n      CREATE OBJECT lo_excel_ref\n        EXPORTING\n          document_name = lv_filename_str\n          xdocument     = p_headerxstring.\n\n      IF lo_excel_ref IS NOT INITIAL.\n        lo_excel_ref->if_fdt_doc_spreadsheet~get_worksheet_names(\n          IMPORTING\n            worksheet_names = lt_worksheets\n        ).\n      ENDIF.\n\n      DATA:\n        lr_descr TYPE REF TO cl_abap_structdescr,\n        ls_comp  TYPE abap_compdescr.\n      DATA: lv_lines TYPE i.\n      lr_descr ?= cl_abap_typedescr=>describe_by_data( ls_xlsx ).\n      DESCRIBE TABLE lr_descr->components LINES lv_lines.\n\n      IF lt_worksheets IS NOT INITIAL.\n        LOOP AT lt_worksheets INTO DATA(lv_worksheet).\n          \" &#91;START] JDS 08.03.2023 : GL multi purpose (pay\/rec)\n          lv_worksheet_i = sy-tabix.\n          IF lv_worksheet_i > 2.\n            EXIT.\n          ENDIF.\n          \" &#91;END] JDS 08.03.2023 : GL multi purpose (pay\/rec)\n          lv_idx = 2. \" first data row\n          lo_data_raw = lo_excel_ref->if_fdt_doc_spreadsheet~get_itab_from_worksheet( lv_worksheet ).\n          ASSIGN lo_data_raw->* TO &lt;lft_data_raw>.\n          IF sy-subrc EQ 0.\n            LOOP AT &lt;lft_data_raw> ASSIGNING FIELD-SYMBOL(&lt;lfs_data_raw>) FROM lv_idx.\n              lv_sort = lv_sort + 1.\n              APPEND INITIAL LINE TO pct_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>).\n              CLEAR: ls_xlsx.\n              DO.\n                ASSIGN COMPONENT sy-index OF STRUCTURE &lt;lfs_data_raw> TO FIELD-SYMBOL(&lt;lfs_raw>).\n                IF sy-subrc NE 0 OR sy-index > lv_lines.\n                  EXIT.\n                ELSE.\n                  ASSIGN COMPONENT sy-index OF STRUCTURE ls_xlsx TO FIELD-SYMBOL(&lt;lfs_dest>).\n                  CASE sy-index.\n                    WHEN 9 OR 10 OR 11. \" ALPHA = IN CHAR10 (HKONT, KOSTL, PRCTR)\n                      lv_char10 = |{ &lt;lfs_raw> ALPHA = IN }|.\n                      &lt;lfs_dest> = lv_char10.\n                    WHEN 3 OR 4. \" date\n                      PERFORM f_convert_date USING &lt;lfs_raw> CHANGING &lt;lfs_dest>.\n                    WHEN 8. \" Currency\n                      ASSIGN COMPONENT 5 OF STRUCTURE ls_xlsx TO FIELD-SYMBOL(&lt;lfs_waers>).\n                      PERFORM f_convert_curr_in USING &lt;lfs_raw> &lt;lfs_waers> CHANGING &lt;lfs_dest>.\n*                      PERFORM f_convert_curr_in USING &lt;lfs_raw> 'IDR' CHANGING &lt;lfs_dest>.\n                    WHEN 12. \" commitment item \/ fipos\n                      PERFORM f_convert_fipos_in USING &lt;lfs_raw> CHANGING &lt;lfs_dest>.\n                    WHEN OTHERS.\n                      &lt;lfs_dest> = &lt;lfs_raw>.\n                  ENDCASE.\n                ENDIF.\n              ENDDO.\n              MOVE-CORRESPONDING ls_xlsx TO ls_item.\n              IF ls_xlsx-comp_code IS INITIAL.\n                &lt;lfs_data> = ls_data.\n                MOVE-CORRESPONDING ls_item TO &lt;lfs_data>.\n              ELSE.\n                MOVE-CORRESPONDING ls_xlsx TO &lt;lfs_data>.\n                ls_data = &lt;lfs_data>.\n              ENDIF.\n              &lt;lfs_data>-sort_no = lv_sort.\n              \" &#91;START] JDS 08.03.2023 : GL multi purpose (pay\/rec)\n              CASE lv_worksheet_i.\n                WHEN 1.\n                  &lt;lfs_data>-transact_type = 'C'. \" receipt\n                WHEN 2.\n                  &lt;lfs_data>-transact_type = 'E'. \" payment\n              ENDCASE.\n              \" &#91;END] JDS 08.03.2023 : GL multi purpose (pay\/rec)\n            ENDLOOP.\n          ENDIF.\n        ENDLOOP.\n\n      ENDIF.\n\n\n    CATCH cx_fdt_excel_core INTO lo_exc.\n      lv_err_msg = lo_exc->get_text( ).\n      MESSAGE lv_err_msg TYPE 'S' DISPLAY LIKE 'E'.\n      LEAVE LIST-PROCESSING.\n  ENDTRY.\n\n*  SORT pct_data BY int_no ebelp tier_from.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_convert_curr_in\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> &lt;LFS_RAW>\n*&amp;      --> &lt;LFS_WAERS>\n*&amp;      &lt;-- &lt;LFS_DEST>\n*&amp;---------------------------------------------------------------------*\nFORM f_convert_curr_in  USING    p_in\n                                 p_waers\n                        CHANGING pc_out.\n  IF p_waers EQ 'IDR'.\n    pc_out = p_in \/ 100.\n  ELSE.\n    pc_out = p_in.\n  ENDIF.\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_convert_date\n*&amp;---------------------------------------------------------------------*\n*&amp; external to internal date\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> &lt;LFS_VALUE>\n*&amp;      &lt;-- YYYYMMDD\n*&amp;---------------------------------------------------------------------*\nFORM f_convert_date  USING p_date_string TYPE string CHANGING pc_date TYPE datum .\n\n  DATA: lv_convert_date(10) TYPE c.\n\n  CHECK p_date_string IS NOT INITIAL.\n\n  lv_convert_date = p_date_string .\n\n  \"date format YYYY\/MM\/DD\n  FIND REGEX '^\\d{4}&#91;\/|-]\\d{1,2}&#91;\/|-]\\d{1,2}$' IN lv_convert_date.\n  IF sy-subrc = 0.\n    CALL FUNCTION '\/SAPDMC\/LSM_DATE_CONVERT'\n      EXPORTING\n        date_in             = lv_convert_date\n        date_format_in      = 'DYMD'\n        to_output_format    = ' '\n        to_internal_format  = 'X'\n      IMPORTING\n        date_out            = lv_convert_date\n      EXCEPTIONS\n        illegal_date        = 1\n        illegal_date_format = 2\n        no_user_date_format = 3\n        OTHERS              = 4.\n  ELSE.\n\n    \" date format DD\/MM\/YYYY or DD-MM-YYYY or DD.MM.YYYY\n\n    FIND REGEX '^\\d{1,2}&#91;\/|-|.]\\d{1,2}&#91;\/|-|.]\\d{4}$' IN lv_convert_date.\n    IF sy-subrc = 0.\n      CALL FUNCTION '\/SAPDMC\/LSM_DATE_CONVERT'\n        EXPORTING\n          date_in             = lv_convert_date\n          date_format_in      = 'DDMY'\n          to_output_format    = ' '\n          to_internal_format  = 'X'\n        IMPORTING\n          date_out            = lv_convert_date\n        EXCEPTIONS\n          illegal_date        = 1\n          illegal_date_format = 2\n          no_user_date_format = 3\n          OTHERS              = 4.\n\n    ENDIF.\n  ENDIF.\n\n  IF sy-subrc = 0.\n    pc_date = lv_convert_date .\n  ELSE.\n    CLEAR pc_date.\n  ENDIF.\n\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_validation_data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- GT_DATA\n*&amp;---------------------------------------------------------------------*\nFORM f_validation_data  CHANGING pct_data TYPE gtt_data.\n\n*  DATA:\n*    lv_ematn   TYPE gty_data-ematn,\n*    lv_intno   TYPE gty_data-int_no,\n*    lt_log     TYPE gtt_log,\n*    lv_icon    TYPE icon_d,\n*    lv_remarks TYPE gty_data-remarks.\n\n*  PERFORM f_get_log  USING pct_data CHANGING lt_log .\n*  SORT lt_log BY int_no.\n\n*  LOOP AT pct_data INTO DATA(ls_grp_h) WHERE icon IS INITIAL GROUP BY ls_grp_h-int_no.\n*    READ TABLE lt_log INTO DATA(ls_log) WITH KEY int_no = ls_grp_h-int_no BINARY SEARCH.\n*    IF sy-subrc NE 0.\n*      CLEAR: ls_log.\n*    ENDIF.\n*    LOOP AT GROUP ls_grp_h INTO DATA(ls_grp_i) GROUP BY ls_grp_i-ebelp.\n*      LOOP AT GROUP ls_grp_i ASSIGNING FIELD-SYMBOL(&lt;lfs_data>).\n*      ENDLOOP.\n*    ENDLOOP.\n*\n*  ENDLOOP.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_sel_out\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_sel_out .  DATA: lv_upl TYPE char1,\nlv_log TYPE char1.\n\nCASE 'X'.\n  WHEN rb_log OR rb_repos.\n    lv_upl = 0.\n    lv_log = 1.\n  WHEN rb_upl OR rb_bgj.\n    lv_upl = 1.\n    lv_log = 0.\n  WHEN OTHERS.\nENDCASE.\n\nLOOP AT SCREEN.\n  CASE screen-name.\n    WHEN 'P_FILE'.\n      screen-required = 2.\n      MODIFY SCREEN.\n  ENDCASE.\n\n  CASE screen-group1.\n    WHEN 'UPL'.\n      screen-active = lv_upl.\n      MODIFY SCREEN.\n    WHEN 'LOG'.\n      screen-active = lv_log.\n      MODIFY SCREEN.\n    WHEN OTHERS.\n  ENDCASE.\nENDLOOP.\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_handle_user_command\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> E_SALV_FUNCTION\n*&amp;---------------------------------------------------------------------*\nFORM f_handle_user_command  USING p_ucomm TYPE salv_de_function.\n\n  DATA: lv_answer TYPE char4,\n        lv_subrc  LIKE sy-subrc.\n\n  CASE p_ucomm.\n    WHEN '&amp;POST'. \" Posting\n      IF rb_repos EQ 'X'. \" repost\n        PERFORM f_validation_repos CHANGING lv_subrc.\n        IF lv_subrc IS INITIAL.\n          PERFORM f_process_cjdoc_repost.\n          PERFORM f_refresh_table USING go_alv_table.\n        ENDIF.\n      ELSE.\n        PERFORM f_validation_post CHANGING lv_subrc.\n        IF lv_subrc IS INITIAL.\n          PERFORM f_process_cjdoc.\n          PERFORM f_grey_button.\n          PERFORM f_refresh_table USING go_alv_table.\n        ENDIF.\n      ENDIF.\n    WHEN '&amp;ZALL'. \" select all\n      PERFORM f_select_all USING 'X'.\n      PERFORM f_refresh_table USING go_alv_table.\n    WHEN '&amp;ZSAL'. \" deselect all\n      PERFORM f_select_all USING ''.\n      PERFORM f_refresh_table USING go_alv_table.\n    WHEN '&amp;DEL'. \" deselect all\n      PERFORM f_validation_delete CHANGING lv_subrc.\n      IF lv_subrc IS INITIAL.\n        PERFORM f_popup_confirm CHANGING lv_answer.\n        IF lv_answer EQ '1'.\n          PERFORM f_delete_data.\n          PERFORM f_refresh_table USING go_alv_table.\n        ENDIF.\n      ENDIF.\n  ENDCASE.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_refresh_table\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> GO_ALV_TABLE\n*&amp;---------------------------------------------------------------------*\nFORM f_refresh_table  USING    po_alv_table TYPE REF TO cl_salv_table.\n  DATA:\n    lo_columns TYPE REF TO cl_salv_columns_table,\n    ls_stable  TYPE lvc_s_stbl.\n\n  ls_stable-col = 'X'.\n  ls_stable-row = 'X'.\n\n  lo_columns =  po_alv_table->get_columns( ).\n  lo_columns->set_optimize( abap_true ).\n  po_alv_table->refresh(\n    EXPORTING\n      s_stable     = ls_stable\n*      refresh_mode = if_salv_c_refresh=>soft\n  ).\nENDFORM.\n\n\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_handle_hotspot\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> COLUMN\n*&amp;      --> ROW\n*&amp;---------------------------------------------------------------------*\nFORM f_handle_hotspot  USING    p_column TYPE salv_de_column\n                                p_row TYPE salv_de_row.\n\n  CASE p_column.\n    WHEN 'BELNR'.\n      PERFORM f_click_belnr USING p_row.\n    WHEN 'CHECKBOX'.\n      PERFORM f_click_checkbox USING p_row.\n      PERFORM f_refresh_table USING go_alv_table.\n  ENDCASE.\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_click_belnr\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> RS_SELFIELD_TABINDEX\n*&amp;---------------------------------------------------------------------*\nFORM f_click_belnr  USING    p_index.\n  READ TABLE gt_data INTO DATA(ls_data) INDEX p_index.\n  IF sy-subrc EQ 0.\n    CHECK ls_data-belnr IS NOT INITIAL.\n    IF ls_data-belnr CO '0123456789'.\n      PERFORM f_call_fb03 USING ls_data-comp_code ls_data-belnr ls_data-pstng_date(4).\n    ENDIF.\n  ENDIF.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_call_fb03\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> LS_DATA_BUKRS\n*&amp;      --> LS_DATA_BELNR\n*&amp;      --> LS_DATA_BUDAT(4)\n*&amp;---------------------------------------------------------------------*\nFORM f_call_fb03  USING    p_bukrs\n                           p_belnr\n                           p_gjahr.\n\n  SET PARAMETER ID 'BLN' FIELD p_belnr.\n  SET PARAMETER ID 'BUK' FIELD p_bukrs.\n  SET PARAMETER ID 'GJR' FIELD p_gjahr.\n  CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.\n\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_post_cjdoc\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_post_cjdoc USING    p_cjdocno TYPE bapi_cj_key-posting_number\n                  CHANGING pcs_data  TYPE gty_data.\n*FORM f_post_cjdoc  USING    ps_ujs    TYPE zsdt0018\n*                            ps_map    TYPE gty_map\n*                            p_cjdocno TYPE bapi_cj_key-posting_number\n*                            p_total   TYPE wrbtr\n*                   CHANGING pcs_result TYPE gty_result.\n\n  DATA: lt_itcj         TYPE TABLE OF iscj_postings WITH HEADER LINE,\n        lt_itcjcpd      TYPE TABLE OF tcj_cpd WITH HEADER LINE,\n        lt_itcjtax      TYPE TABLE OF tcj_wtax_items WITH HEADER LINE,\n        lt_itcjpos      TYPE TABLE OF iscj_postings WITH HEADER LINE,\n\n        lv_cajo_num     TYPE tcj_c_journals-cajo_number,\n        lv_begbal       TYPE cjamount,\n        lv_totrep       TYPE cjamount,\n        lv_totpay       TYPE cjamount,\n        lv_totcek       TYPE cjamount,\n        lv_runbal       TYPE cjamount,\n        lv_casbal       TYPE cjamount,\n        lv_num_rec      TYPE i,\n        lv_num_pay      TYPE i,\n        lv_num_cek      TYPE i,\n        lv_error_number TYPE cjbelnr,\n        lv_budat        TYPE budat,\n        lv_typ          TYPE cjtranstyp.\n  DATA: lv_awkey TYPE bkpf-awkey.\n\n  lt_itcj-cajo_number     = pcs_data-cajo_number.\n  lt_itcj-comp_code       = pcs_data-comp_code.\n  lt_itcj-fisc_year       = pcs_data-pstng_date(4).\n  lt_itcj-posting_number  = p_cjdocno.\n  lt_itcj-h_net_amount    = pcs_data-p_payments.\n  lt_itcj-h_net_payment_wt  = pcs_data-p_payments.\n  lt_itcj-h_total_amount  = pcs_data-p_payments.\n  lt_itcj-document_date   = pcs_data-doc_date.\n  lt_itcj-document_number = pcs_data-ref_doc_no.\n  lt_itcj-posting_date    = pcs_data-pstng_date.\n  lt_itcj-document_status = 'S'.\n  lt_itcj-transact_name   = pcs_data-transact_name.\n  lt_itcj-kostl           = pcs_data-costcenter.\n  lt_itcj-prctr           = pcs_data-profit_ctr.\n  lt_itcj-gl_account      = pcs_data-gl_account.\n  lt_itcj-fipos           = pcs_data-cmmt_item.\n  lt_itcj-position_text   = pcs_data-position_text.\n\n\n  CASE pcs_data-transact_type.\n    WHEN 'C'.\n      lv_typ = 'R'.\n      lt_itcj-h_receipts      = pcs_data-p_payments.\n      lt_itcj-alloc_nmbr      = pcs_data-alloc_nmbr.\n    WHEN 'E' OR 'B'. \" edited by JDS 06.02.2023 : trans type 'B'\n*      lv_typ = pcs_data-transact_type.\n      lv_typ = 'E'.\n      \" &#91;start] remarked by JDS 31.07.2023\n*      IF pcs_data-currency NE 'IDR'.\n*        lt_itcj-h_payments      = pcs_data-p_payments \/ 100.\n*      ELSE.\n*        lt_itcj-h_payments      = pcs_data-p_payments.\n*      ENDIF.\n      \" &#91;end] remarked by JDS 31.07.2023\n      lt_itcj-h_payments      = pcs_data-p_payments. \" remarked by JDS 31.07.2023\n  ENDCASE.\n\n  APPEND lt_itcj.\n\n  CALL FUNCTION 'FCJ_POST_ALL'\n    EXPORTING\n      i_comp_code         = pcs_data-comp_code\n      i_cajo_number       = pcs_data-cajo_number\n      i_currency          = pcs_data-currency\n      i_typ               = lv_typ\n      i_display_period_lo = pcs_data-pstng_date\n      i_display_period_hi = pcs_data-pstng_date\n    IMPORTING\n      e_error_number      = lv_error_number\n    TABLES\n      itcj_postings       = lt_itcj&#91;]\n      itcj_wtax_items     = lt_itcjtax&#91;]\n      itcj_split_postings = lt_itcjpos&#91;]\n      itcj_cpd            = lt_itcjcpd&#91;]\n    CHANGING\n      p_beg_balance       = lv_begbal\n      p_total_receipts    = lv_totrep\n      p_total_payments    = lv_totpay\n      p_total_checks      = lv_totcek\n      p_run_balance       = lv_runbal\n      p_run_cash_balance  = lv_casbal\n      p_numb_of_rec       = lv_num_rec\n      p_numb_of_paym      = lv_num_pay\n      p_numb_of_checks    = lv_num_cek.\n\n  IF lv_error_number IS INITIAL.\n    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'\n      EXPORTING\n        wait = 'X'.\n    pcs_data-icon = gc_icon_success.\n\n    CONCATENATE p_cjdocno pcs_data-cajo_number pcs_data-comp_code INTO lv_awkey.\n    SELECT SINGLE belnr\n      FROM bkpf\n      INTO pcs_data-belnr\n      WHERE bukrs = pcs_data-comp_code\n        AND gjahr = pcs_data-pstng_date(4)\n        AND awtyp = 'CAJO'\n        AND awkey = lv_awkey.\n\n  ELSE.\n    pcs_data-icon = gc_icon_error.\n  ENDIF.\n\nENDFORM.\n\n\nFORM f_create_cjdoc\n*FORM f_create_cjdoc  USING    ps_ujs TYPE zsdt0018\n*                              ps_map TYPE gty_map\n*                              p_total TYPE wrbtr\n                     CHANGING pc_cjdocno TYPE bapi_cj_key-posting_number\n                       pcs_data    TYPE gty_data.\n*                              pcs_result TYPE gty_result.\n\n\n  DATA: ls_header TYPE bapi_cj_header,\n        lt_item   TYPE TABLE OF bapi_cj_items WITH HEADER LINE,\n        lt_return TYPE TABLE OF bapiret2 WITH HEADER LINE.\n\n  \" header\n  ls_header-doc_date      = pcs_data-doc_date.\n  ls_header-pstng_date    = pcs_data-pstng_date.\n  ls_header-comp_code     = pcs_data-comp_code.\n  ls_header-cajo_number   = pcs_data-cajo_number.\n  ls_header-currency      = pcs_data-currency.\n  ls_header-currency_iso  = pcs_data-currency.\n  ls_header-ref_doc_no    = pcs_data-ref_doc_no.\n*  ls_header-text1         = pcs_data-text1.\n*  ls_header-text2         = pcs_data-text2.\n\n  \" item\n  lt_item-position_number = 900.\n  lt_item-transact_number = pcs_data-transact_number.\n\n  CASE pcs_data-transact_type.\n    WHEN 'C'.\n      IF pcs_data-currency NE 'IDR'.\n        lt_item-p_receipts      = pcs_data-p_payments.\n      ELSE.\n        lt_item-p_receipts      = pcs_data-p_payments * 100.\n      ENDIF.\n      ls_header-alloc_nmbr    = pcs_data-alloc_nmbr.\n    WHEN OTHERS.\n      IF pcs_data-currency NE 'IDR'.\n        lt_item-p_payments      = pcs_data-p_payments.\n      ELSE.\n        lt_item-p_payments      = pcs_data-p_payments * 100.\n      ENDIF.\n  ENDCASE.\n  lt_item-gl_account      = pcs_data-gl_account.\n  lt_item-costcenter      = pcs_data-costcenter.\n  lt_item-profit_ctr      = pcs_data-profit_ctr.\n  lt_item-cmmt_item       = pcs_data-cmmt_item.\n  lt_item-position_text   = pcs_data-position_text.\n  APPEND lt_item.\n\n  CALL FUNCTION 'BAPI_CASHJOURNALDOC_CREATE'\n    EXPORTING\n      header              = ls_header\n    IMPORTING\n      cash_journal_doc_no = pc_cjdocno\n    TABLES\n      items               = lt_item&#91;]\n      return              = lt_return&#91;].\n\n  IF pc_cjdocno IS NOT INITIAL.\n    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'\n      EXPORTING\n        wait = 'X'.\n\n    pcs_data-icon = gc_icon_success.\n    pcs_data-cjbelnr = pc_cjdocno.\n\n  ELSE.\n    \" E  FCJ 023 Document could not be saved; correct the errors listed\n    DELETE lt_return WHERE id = 'FCJ' AND number = '023'.\n    LOOP AT lt_return INTO DATA(ls_ret) WHERE type = 'E'.\n      IF pcs_data-remarks IS INITIAL.\n        pcs_data-remarks = ls_ret-message.\n      ELSE.\n        pcs_data-remarks = pcs_data-remarks &amp;&amp; ` ; ` &amp;&amp; ls_ret-message.\n      ENDIF.\n    ENDLOOP.\n    pcs_data-icon = gc_icon_error.\n\n  ENDIF.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_process_cjdoc\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_process_cjdoc .\n  DATA: lv_cjdocno    TYPE bapi_cj_key-posting_number,\n        lv_cannot_run TYPE flag.\n\n*  LOOP AT gt_data INTO DATA(ls_data) WHERE icon IS NOT INITIAL.\n*    lv_cannot_run = 'X'.\n*    EXIT.\n*  ENDLOOP.\n*\n*  IF lv_cannot_run EQ 'X'.\n*    \" Cannot run posting cash journal\n*    MESSAGE s003(zfi) DISPLAY LIKE 'E'.\n*    EXIT.\n*  ENDIF.\n\n  SORT gt_data BY transact_type.\n\n  LOOP AT gt_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>) WHERE icon IS INITIAL.\n    PERFORM f_create_cjdoc CHANGING lv_cjdocno &lt;lfs_data>.\n    IF lv_cjdocno IS NOT INITIAL.\n      PERFORM f_post_cjdoc USING lv_cjdocno &lt;lfs_data>.\n    ENDIF.\n  ENDLOOP.\n\n  SORT gt_data BY sort_no.\n\n  PERFORM f_update_log.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_process_cjdoc_repost\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_process_cjdoc_repost .\n  DATA: lv_cjdocno    TYPE bapi_cj_key-posting_number,\n        lv_cannot_run TYPE flag.\n\n  SORT gt_data BY transact_type.\n\n  LOOP AT gt_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>) WHERE checkbox EQ 'X'.\n    CLEAR: &lt;lfs_data>-remarks.\n    PERFORM f_create_cjdoc CHANGING lv_cjdocno &lt;lfs_data>.\n    IF lv_cjdocno IS NOT INITIAL.\n      PERFORM f_post_cjdoc USING lv_cjdocno &lt;lfs_data>.\n    ENDIF.\n  ENDLOOP.\n\n  SORT gt_data BY cajo_number pstng_date seq subseq.\n\n  PERFORM f_update_log_repost.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_grey_button\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_grey_button .\n\n  DATA: lv_pfstatus TYPE sypfkey.\n\n  lv_pfstatus = 'STANDARD2'.\n\n  go_alv_table->set_screen_status(\n   EXPORTING\n     pfstatus = lv_pfstatus\n     report   = sy-repid\n     set_functions = go_alv_table->c_functions_all ).\nENDFORM.\n\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_get_master_data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_get_master_data .\n  DATA(lt_data) = gt_data.\n  SORT lt_data BY comp_code gl_account.\n  DELETE ADJACENT DUPLICATES FROM lt_data COMPARING comp_code gl_account.\n\n  SELECT a~comp_code a~transact_number a~transact_type a~gl_account b~transact_name\n    FROM tcj_transactions AS a\n    INNER JOIN tcj_trans_names AS b ON a~comp_code = b~comp_code AND a~transact_number = b~transact_number\n    INTO TABLE gt_trans\n    FOR ALL ENTRIES IN lt_data\n    WHERE a~comp_code = lt_data-comp_code\n      AND a~gl_account = lt_data-gl_account\n      AND b~langu = 'E'.\n\n\n\n  lt_data = gt_data.\n  SORT lt_data BY comp_code cajo_number.\n  DELETE ADJACENT DUPLICATES FROM lt_data COMPARING comp_code cajo_number.\n\n  SELECT comp_code cajo_number cardnum\n    FROM zfit_upl_cj_map\n    INTO TABLE gt_cardnum\n    FOR ALL ENTRIES IN lt_data\n    WHERE comp_code = lt_data-comp_code\n      AND cajo_number = lt_data-cajo_number.\n\n\n  \" &#91;START] JDS 31.07.2023 : add validation\n  DATA: lt_fmci_tmp TYPE gtt_fmci.\n\n  lt_data = gt_data.\n  SORT lt_data BY comp_code cmmt_item.\n  DELETE ADJACENT DUPLICATES FROM lt_data COMPARING comp_code cmmt_item.\n\n  LOOP AT lt_data INTO DATA(ls_data).\n    APPEND INITIAL LINE TO lt_fmci_tmp ASSIGNING FIELD-SYMBOL(&lt;lfs_fmci>).\n    &lt;lfs_fmci>-bukrs = ls_data-comp_code.\n    &lt;lfs_fmci>-fipex = ls_data-cmmt_item.\n  ENDLOOP.\n\n  SELECT b~bukrs a~fipex\n    FROM fmci AS a\n    INNER JOIN t001 AS b ON a~fikrs = b~fikrs\n    INTO TABLE gt_fmci\n    FOR ALL ENTRIES IN lt_fmci_tmp\n    WHERE b~bukrs = lt_fmci_tmp-bukrs\n      AND a~fipex = lt_fmci_tmp-fipex.\n\n  lt_data = gt_data.\n  SORT lt_data BY comp_code gl_account.\n  DELETE ADJACENT DUPLICATES FROM lt_data COMPARING comp_code gl_account.\n\n  SELECT bukrs saknr\n    FROM skb1\n    INTO TABLE gt_skb1\n    FOR ALL ENTRIES IN lt_data\n    WHERE bukrs = lt_data-comp_code\n      AND saknr = lt_data-gl_account.\n  \" &#91;END] JDS 31.07.2023 : add validation\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_update_log\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_update_log .\n  DATA: lt_log    TYPE TABLE OF zfit_upl_cj_log,\n        lv_subseq TYPE zfit_upl_cj_log-subseq.\n\n  SELECT SINGLE MAX( seq )\n    FROM zfit_upl_cj_log\n    INTO @DATA(lv_seq).\n\n  lv_seq = lv_seq + 1.\n\n  LOOP AT gt_data INTO DATA(ls_data).\n    lv_subseq = lv_subseq + 1.\n    APPEND INITIAL LINE TO lt_log ASSIGNING FIELD-SYMBOL(&lt;lfs_log>).\n    &lt;lfs_log>-comp_code = ls_data-comp_code.\n    &lt;lfs_log>-cajo_number = ls_data-cajo_number.\n    &lt;lfs_log>-transact_type = ls_data-transact_type.\n    &lt;lfs_log>-gl_account = ls_data-gl_account.\n    &lt;lfs_log>-seq = lv_seq.\n    &lt;lfs_log>-subseq = lv_subseq.\n    &lt;lfs_log>-doc_date = ls_data-doc_date.\n    &lt;lfs_log>-pstng_date = ls_data-pstng_date.\n    &lt;lfs_log>-currency = ls_data-currency.\n    &lt;lfs_log>-alloc_nmbr = ls_data-alloc_nmbr.\n    &lt;lfs_log>-ref_doc_no = ls_data-ref_doc_no.\n    &lt;lfs_log>-position_text = ls_data-position_text.\n*    &lt;lfs_log>-text1 = ls_data-text1.\n*    &lt;lfs_log>-text2 = ls_data-text2.\n    &lt;lfs_log>-p_payments = ls_data-p_payments.\n    &lt;lfs_log>-costcenter = ls_data-costcenter.\n    &lt;lfs_log>-profit_ctr = ls_data-profit_ctr.\n    &lt;lfs_log>-cmmt_item = ls_data-cmmt_item.\n    &lt;lfs_log>-cjbelnr = ls_data-cjbelnr.\n    &lt;lfs_log>-remarks = ls_data-remarks.\n\n    CASE ls_data-icon.\n      WHEN gc_icon_success.\n        &lt;lfs_log>-status = 'S'.\n      WHEN gc_icon_error.\n        &lt;lfs_log>-status = 'E'.\n      WHEN OTHERS.\n    ENDCASE.\n\n    &lt;lfs_log>-erdat = sy-datum.\n    &lt;lfs_log>-erzet = sy-uzeit.\n    &lt;lfs_log>-ernam = sy-uname.\n  ENDLOOP.\n\n  MODIFY zfit_upl_cj_log FROM TABLE lt_log.\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_update_log_repost\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_update_log_repost .\n  DATA: lt_log    TYPE TABLE OF zfit_upl_cj_log,\n        lv_subseq TYPE zfit_upl_cj_log-subseq.\n\n  SORT gt_log BY comp_code cajo_number transact_type gl_account seq subseq.\n\n  LOOP AT gt_data INTO DATA(ls_data) WHERE checkbox = 'X'.\n    READ TABLE gt_log INTO DATA(ls_log) WITH KEY comp_code = ls_data-comp_code\n                                                 cajo_number = ls_data-cajo_number\n                                                 transact_type = ls_data-transact_type\n                                                 gl_account = ls_data-gl_account\n                                                 seq = ls_data-seq\n                                                 subseq = ls_data-subseq BINARY SEARCH.\n    IF sy-subrc EQ 0.\n      CASE ls_data-icon.\n        WHEN gc_icon_error.\n          ls_log-status = 'E'.\n        WHEN gc_icon_success.\n          ls_log-status = 'S'.\n      ENDCASE.\n      ls_log-cjbelnr = ls_data-cjbelnr.\n      ls_log-remarks = ls_data-remarks.\n      \" timestamps\n      ls_log-erdat = sy-datum.\n      ls_log-erzet = sy-uzeit.\n      ls_log-ernam = sy-uname.\n      APPEND ls_log TO lt_log.\n    ENDIF.\n  ENDLOOP.\n\n  MODIFY zfit_upl_cj_log FROM TABLE lt_log.\nENDFORM.\n\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_build_data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_build_data .\n\n  SORT gt_trans BY comp_code gl_account transact_type.\n  SORT gt_cardnum BY comp_code cajo_number.\n  SORT gt_fmci BY bukrs fipex. \" JDS 31.07.2023 : add validation\n  SORT gt_skb1 BY bukrs saknr. \" JDS 31.07.2023 : add validation\n\n  LOOP AT gt_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>).\n    READ TABLE gt_trans INTO DATA(ls_trans) WITH KEY comp_code = &lt;lfs_data>-comp_code\n                                                     gl_account = &lt;lfs_data>-gl_account\n                                                     transact_type = &lt;lfs_data>-transact_type BINARY SEARCH.\n    IF sy-subrc EQ 0.\n      &lt;lfs_data>-transact_type = ls_trans-transact_type.\n      &lt;lfs_data>-transact_number = ls_trans-transact_number.\n      &lt;lfs_data>-transact_name = ls_trans-transact_name.\n    ELSE.\n      READ TABLE gt_trans INTO ls_trans WITH KEY comp_code = &lt;lfs_data>-comp_code\n                                                       gl_account = &lt;lfs_data>-gl_account\n                                                       transact_type = 'B' BINARY SEARCH.\n      IF sy-subrc EQ 0.\n        &lt;lfs_data>-transact_type = ls_trans-transact_type.\n        &lt;lfs_data>-transact_number = ls_trans-transact_number.\n        &lt;lfs_data>-transact_name = ls_trans-transact_name.\n      ELSE.\n        &lt;lfs_data>-icon = gc_icon_error.\n        &lt;lfs_data>-remarks = TEXT-e02. \" invalid GL Account\n      ENDIF.\n    ENDIF.\n\n    READ TABLE gt_cardnum INTO DATA(ls_cardnum) WITH KEY comp_code = &lt;lfs_data>-comp_code cajo_number = &lt;lfs_data>-cajo_number BINARY SEARCH.\n    IF sy-subrc EQ 0.\n      &lt;lfs_data>-alloc_nmbr = ls_cardnum-cardnum.\n    ENDIF.\n\n    \" &#91;START] JDS 31.07.2023 : add validation\n    IF &lt;lfs_data>-cmmt_item IS NOT INITIAL.\n      READ TABLE gt_fmci INTO DATA(ls_fmci) WITH KEY bukrs = &lt;lfs_data>-comp_code fipex = &lt;lfs_data>-cmmt_item BINARY SEARCH.\n      IF sy-subrc NE 0.\n        &lt;lfs_data>-icon = gc_icon_error.\n        &lt;lfs_data>-remarks = TEXT-e03. \" invalid Commitment Item\n      ENDIF.\n    ENDIF.\n\n    READ TABLE gt_skb1 INTO DATA(ls_skb1) WITH KEY bukrs = &lt;lfs_data>-comp_code saknr = &lt;lfs_data>-gl_account BINARY SEARCH.\n    IF sy-subrc NE 0.\n      &lt;lfs_data>-icon = gc_icon_error.\n      &lt;lfs_data>-remarks = TEXT-e04. \" invalid GL Account\n    ENDIF.\n    \" &#91;END] JDS 31.07.2023 : add validation\n  ENDLOOP.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_convert_fipos_in\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> &lt;LFS_RAW>\n*&amp;      &lt;-- &lt;LFS_DEST>\n*&amp;---------------------------------------------------------------------*\nFORM f_convert_fipos_in  USING    p_in\n                      CHANGING pc_out.\n  CALL FUNCTION 'CONVERSION_EXIT_FMCIS_INPUT'\n    EXPORTING\n      input  = p_in\n    IMPORTING\n      output = pc_out.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_balance_validation\n*&amp;---------------------------------------------------------------------*\n*&amp; \" JDS 08.03.2023 : add balance validation\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_balance_validation .\n**  DATA: lt_balance TYPE gtt_balance.\n**\n**  \" get balance\n**  PERFORM f_get_balance CHANGING lt_balance.\n**\n**  \" calculate remaining cash on hand\n**  DATA(lt_data) = gt_data.\n**  SORT lt_data BY cajo_number .\n**\n**  LOOP AT lt_data INTO DATA(ls_data).\n**    \" at new\n**    AT NEW cajo_number.\n**      READ TABLE lt_balance ASSIGNING FIELD-SYMBOL(&lt;lfs_bal>) WITH KEY cajo_number = ls_data-cajo_number BINARY SEARCH.\n**      IF sy-subrc NE 0.\n**        \" error handling\n**        APPEND INITIAL LINE TO lt_balance ASSIGNING &lt;lfs_bal>.\n**        &lt;lfs_bal>-cajo_number = ls_data-cajo_number.\n**      ENDIF.\n**    ENDAT.\n**\n**    \" sequence\n**    CASE ls_data-transact_type.\n**      WHEN 'C'. \" receipt\n**        &lt;lfs_bal>-closing_sum += ls_data-p_payments.\n**      WHEN OTHERS. \" payment\n**        &lt;lfs_bal>-closing_sum -= ls_data-p_payments.\n**    ENDCASE.\n**\n**    \" at end\n**    AT END OF cajo_number.\n**    ENDAT.\n**\n**  ENDLOOP.\n\n**  \" validating..\n**  SORT gt_data BY cajo_number.\n**  LOOP AT lt_balance INTO DATA(ls_bal).\n**    IF ls_bal-closing_sum &lt; 0.\n**      IF sy-batch EQ 'X'.\n**        PERFORM f_write_error USING ls_bal.\n**      ENDIF.\n**      READ TABLE gt_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>) WITH KEY cajo_number = ls_bal-cajo_number BINARY SEARCH.\n**      IF sy-subrc EQ 0.\n**        LOOP AT gt_data ASSIGNING &lt;lfs_data> FROM sy-tabix.\n**          IF &lt;lfs_data>-cajo_number NE ls_bal-cajo_number.\n**            EXIT.\n**          ENDIF.\n**          &lt;lfs_data>-icon = gc_icon_error.\n**          &lt;lfs_data>-remarks = TEXT-e01.\n**        ENDLOOP.\n**      ENDIF.\n**    ENDIF.\n**  ENDLOOP.\n\n\n******\"     REFERENCE(I_AMOUNT) TYPE  CJAMOUNT\n******\"     REFERENCE(I_DOCUMENT_STATUS) TYPE  CJDOCSTAT\n******\"     REFERENCE(I_TYP) TYPE  CJTRANSTYP OPTIONAL\n******\"     REFERENCE(I_COMP_CODE) LIKE  TCJ_C_JOURNALS-COMP_CODE\n******\"     REFERENCE(I_CAJO_NUMBER) LIKE  TCJ_C_JOURNALS-CAJO_NUMBER\n******\"     REFERENCE(I_CHECK_STACK) LIKE  ISCJ_POSTINGS-CHECK_STACK\n******\"     REFERENCE(I_PROCESS_STATUS) TYPE  CJDOCSTAT\n******\"     REFERENCE(I_POSTING_DATE) LIKE  SY-DATUM\n******\"     REFERENCE(I_MEANS_OF_PAYMENT) TYPE  CJMOFPAYM OPTIONAL\n******\"     REFERENCE(I_XBAPI) TYPE  BOOLEAN OPTIONAL\n*****  DATA:\n*****    lv_amount          TYPE cjamount,\n*****    lv_document_status TYPE cjdocstat,\n*****    lv_comp_code       TYPE tcj_c_journals-comp_code,\n*****    lv_cajo_number     TYPE tcj_c_journals-cajo_number,\n*****    lv_check_stack     TYPE iscj_postings-check_stack,\n*****    lv_process_status  TYPE cjdocstat,\n*****    lv_datum           LIKE sy-datum.\n*****\n*****  DATA(lt_data) = gt_data.\n*****  SORT lt_data BY cajo_number .\n*****\n*****  CALL FUNCTION 'FCJ_CHECK_DOC_AMOUNT'\n*****    EXPORTING\n*****      i_amount          = lv_amount\n*****      i_document_status = lv_document_status\n******     I_TYP             =\n*****      i_comp_code       = lv_comp_code\n*****      i_cajo_number     = lv_cajo_number\n*****      i_check_stack     = lv_check_stack\n*****      i_process_status  = lv_process_status\n*****      i_posting_date    = lv_datum\n******     I_MEANS_OF_PAYMENT       =\n******     I_XBAPI           =\n*****    EXCEPTIONS\n*****      error_message     = 1\n*****      warning_message   = 2\n*****      OTHERS            = 3.\n*****  IF sy-subrc &lt;> 0.\n****** Implement suitable error handling here\n*****  ENDIF.\n\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_get_balance\n*&amp;---------------------------------------------------------------------*\n*&amp; \" JDS 08.03.2023 : add balance validation\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- LT_BALANCE\n*&amp;---------------------------------------------------------------------*\nFORM f_get_balance  CHANGING pct_balance TYPE gtt_balance.\n  DATA: lt_bal_tmp TYPE gtt_balance.\n\n  DATA(lt_data) = gt_data.\n  SORT lt_data BY cajo_number pstng_date DESCENDING.\n  DELETE ADJACENT DUPLICATES FROM lt_data COMPARING cajo_number.\n\n  LOOP AT lt_data INTO DATA(ls_data).\n    APPEND INITIAL LINE TO lt_bal_tmp ASSIGNING FIELD-SYMBOL(&lt;lfs_bal>).\n    &lt;lfs_bal>-cajo_number = ls_data-cajo_number.\n    &lt;lfs_bal>-time_stamp = ls_data-pstng_date &amp;&amp; '235959'.\n  ENDLOOP.\n\n  SELECT cajo_number time_stamp closing_sum currency\n    FROM tcj_balance\n    INTO TABLE pct_balance\n    FOR ALL ENTRIES IN lt_bal_tmp\n    WHERE cajo_number = lt_bal_tmp-cajo_number\n      AND rec_type = ''\n      AND time_stamp &lt;= lt_bal_tmp-time_stamp.\n\n  SORT pct_balance BY cajo_number time_stamp DESCENDING.\n  DELETE ADJACENT DUPLICATES FROM pct_balance COMPARING cajo_number.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_write_error\n*&amp;---------------------------------------------------------------------*\n*&amp; \" JDS 08.03.2023 : add balance validation\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> LS_BAL_CAJO_NUMBER\n*&amp;      --> LS_BAL_CLOSING_SUM\n*&amp;---------------------------------------------------------------------*\nFORM f_write_error  USING   ps_bal TYPE gty_balance.\n\n  DATA: lv_text_amt TYPE char30.\n\n  WRITE ps_bal-closing_sum TO lv_text_amt CURRENCY ps_bal-currency.\n  WRITE:\/ `&#91;ERROR] Insufficient balance: `, ps_bal-cajo_number, ` ` , lv_text_amt.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_get_repost_data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_get_repost_data CHANGING pct_data TYPE gtt_data.\n  DATA: lt_log TYPE TABLE OF zfit_upl_cj_log.\n\n  SELECT *\n    FROM zfit_upl_cj_log\n    INTO TABLE lt_log\n    WHERE comp_code IN so_bukrs\n      AND cajo_number IN so_cajon\n      AND transact_type IN so_ttype\n      AND gl_account IN so_hkont\n      AND pstng_date IN so_budat\n      AND status EQ 'E'\n      AND erdat IN so_erdat\n      AND erzet IN so_erzet\n      AND ernam IN so_ernam.\n\n  IF sy-subrc EQ 0.\n    LOOP AT lt_log INTO DATA(ls_log).\n      APPEND INITIAL LINE TO pct_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>).\n      MOVE-CORRESPONDING ls_log TO &lt;lfs_data>.\n      CASE ls_log-status.\n        WHEN 'S'.\n          &lt;lfs_data>-icon = gc_icon_success.\n        WHEN 'E'.\n          &lt;lfs_data>-icon = gc_icon_error.\n      ENDCASE.\n    ENDLOOP.\n  ELSE.\n    \" No data exists\n    MESSAGE ID '\/ACCGO\/CAS_FLLW_MSG' TYPE 'S' NUMBER 338 DISPLAY LIKE 'E'.\n  ENDIF.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_click_checkbox\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> P_ROW\n*&amp;---------------------------------------------------------------------*\nFORM f_click_checkbox  USING    p_index.\n\n  READ TABLE gt_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>) INDEX p_index.\n  IF sy-subrc EQ 0.\n    CASE &lt;lfs_data>-checkbox.\n      WHEN ''.\n        &lt;lfs_data>-checkbox = 'X'.\n      WHEN 'X'.\n        &lt;lfs_data>-checkbox = ''.\n    ENDCASE.\n  ENDIF.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_select_all\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      --> P_\n*&amp;---------------------------------------------------------------------*\nFORM f_select_all  USING  p_x.\n  LOOP AT gt_data ASSIGNING FIELD-SYMBOL(&lt;lfs_data>).\n    &lt;lfs_data>-checkbox = p_x.\n  ENDLOOP.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_popup_confirm\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- LV_ANSWER\n*&amp;---------------------------------------------------------------------*\nFORM f_popup_confirm  CHANGING pc_answer.\n  CALL FUNCTION 'POPUP_TO_CONFIRM'\n    EXPORTING\n*     TITLEBAR              = ' '\n*     DIAGNOSE_OBJECT       = ' '\n      text_question         = 'Are you sure?'\n      text_button_1         = TEXT-b01\n      icon_button_1         = 'ICON_OKAY'\n      text_button_2         = TEXT-b02\n      icon_button_2         = 'ICON_CANCEL'\n*     DEFAULT_BUTTON        = '1'\n      display_cancel_button = ''\n*     USERDEFINED_F1_HELP   = ' '\n*     START_COLUMN          = 25\n*     START_ROW             = 6\n*     POPUP_TYPE            =\n*     IV_QUICKINFO_BUTTON_1 = ' '\n*     IV_QUICKINFO_BUTTON_2 = ' '\n    IMPORTING\n      answer                = pc_answer\n* TABLES\n*     PARAMETER             =\n    EXCEPTIONS\n      text_not_found        = 1\n      OTHERS                = 2.\n  IF sy-subrc &lt;> 0.\n* Implement suitable error handling here\n  ENDIF.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_delete_data\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp; -->  p1        text\n*&amp; &lt;--  p2        text\n*&amp;---------------------------------------------------------------------*\nFORM f_delete_data .\n\n  DATA: lt_log LIKE gt_log.\n\n  SORT gt_log BY comp_code cajo_number transact_type gl_account seq subseq.\n\n  LOOP AT gt_data INTO DATA(ls_data) WHERE checkbox = 'X'.\n    READ TABLE gt_log INTO DATA(ls_log) WITH KEY comp_code = ls_data-comp_code\n                                                 cajo_number = ls_data-cajo_number\n                                                 transact_type = ls_data-transact_type\n                                                 gl_account = ls_data-gl_account\n                                                 seq = ls_data-seq\n                                                 subseq = ls_data-subseq BINARY SEARCH.\n    IF sy-subrc EQ 0.\n      APPEND ls_log TO lt_log.\n    ENDIF.\n  ENDLOOP.\n\n  DELETE zfit_upl_cj_log FROM TABLE lt_log.\n  DELETE gt_data WHERE checkbox = 'X'.\n\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_validation_delete\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- LV_SUBRC\n*&amp;---------------------------------------------------------------------*\nFORM f_validation_delete  CHANGING pc_subrc LIKE sy-subrc.\n  READ TABLE gt_data WITH KEY checkbox = 'X' icon = gc_icon_success TRANSPORTING NO FIELDS.\n  IF sy-subrc EQ 0.\n    pc_subrc = 4.\n    \" Cannot delete successed data\n    MESSAGE s002(zfi002) DISPLAY LIKE 'E'.\n    EXIT.\n  ENDIF.\n\n  READ TABLE gt_data WITH KEY checkbox = 'X' TRANSPORTING NO FIELDS.\n  IF sy-subrc NE 0.\n    pc_subrc = 4.\n    \" Please select data\n    MESSAGE s003(zfi002) DISPLAY LIKE 'E'.\n    EXIT.\n  ENDIF.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_validation_repos\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- LV_SUBRC\n*&amp;---------------------------------------------------------------------*\nFORM f_validation_repos  CHANGING pc_subrc.\n  READ TABLE gt_data WITH KEY checkbox = 'X' icon = gc_icon_success TRANSPORTING NO FIELDS.\n  IF sy-subrc EQ 0.\n    pc_subrc = 4.\n    \" Cannot post successed data\n    MESSAGE s001(zfi002) DISPLAY LIKE 'E'.\n    EXIT.\n  ENDIF.\n\n  READ TABLE gt_data WITH KEY checkbox = 'X' TRANSPORTING NO FIELDS.\n  IF sy-subrc NE 0.\n    pc_subrc = 4.\n    \" Please select data\n    MESSAGE s003(zfi002) DISPLAY LIKE 'E'.\n    EXIT.\n  ENDIF.\nENDFORM.\n\n\n*&amp;---------------------------------------------------------------------*\n*&amp; Form f_validation_post\n*&amp;---------------------------------------------------------------------*\n*&amp; text\n*&amp;---------------------------------------------------------------------*\n*&amp;      &lt;-- LV_SUBRC\n*&amp;---------------------------------------------------------------------*\nFORM f_validation_post  CHANGING pc_subrc.\n  LOOP AT gt_data INTO DATA(ls_data) WHERE icon IS NOT INITIAL.\n    \" Cannot run posting cash journal\n    pc_subrc = 4.\n    MESSAGE s003(zfi) DISPLAY LIKE 'E'.\n    EXIT.\n  ENDLOOP.\n  CHECK pc_subrc IS NOT INITIAL.\nENDFORM.<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ZFIT_UPL_CJ_LOG https:\/\/docs.google.com\/spreadsheets\/d\/1lhd5EwwuNh3L_OkXRRH-AmphiIjkcmmle1rsmLg7Fek\/edit?usp=sharing<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/74"}],"collection":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/comments?post=74"}],"version-history":[{"count":3,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/74\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/posts\/74\/revisions\/80"}],"wp:attachment":[{"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/media?parent=74"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/categories?post=74"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sapabap.dwimansolution.com\/index.php\/wp-json\/wp\/v2\/tags?post=74"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}