Wednesday, July 29, 2015


                          To automate the process of submitting Monthly Reconciliation document 
                                     SAP FI GL (Bank) Scenario (Tcode: FS10N & FF63)
  • Closing balance received from the respective banks
  • If there are differences between House Bank main account balance and the statement closing balance received from the banks – A Memo record will be created in the system as part of record purpose.
  • Through workflow to the concerned manager for approval purpose. The form will send for each house bank account and currency separately and trigger a workflow to the respective managers for approval/rejection.
  • User will input the bank account on the initial screen and account ID and will input the closing balance of the house bank received by them from the bank.
  • Book Balance from FS10N will be taken into consideration for the month in Initial Screen
  • In The input screen:
·          Selection Screen
ü  Company Code – Required Entry
ü  Bank Account No 
ü  Currency
ü  Bank GL Account – Required Entry – Verify the field HKONT in the table T012K for a given company code.
ü  Once the GL account (HKONT) is available, it will fetch the details of Bank Account
ü  No. (BANKN), - Currency (WAERS) and will print in the output
ü  Balance as per Bank Statement – Required Entry – Manual Input by users.
ü  Period
ü  Year
·         There are two screens that will be sent printed or sent through email – one with zero balance and another with balance. 
  • The user will in input the amount manually the above rows and the break up.
  • The output screen for zero and variable balances – should be in the same format
  • If there is a balance arrived after extracting balances and input values
  • Whatever main account given in the input screen will reflect and also the balance should be reflected under uncleared in Bank with variance arrived after balance calculation.
  • If there is any balance, there should be a pop screen to create a Memo record, if click on yes, another screen will appear with the following fields to fill in memo record
ü Company code – BUKRS
ü Planning Type – DSART – Table - FDES
ü Planning Date – DATUM – Table - FDES
ü Expiry Date – AVDAT – Table – FDES
ü Account Name – DISKB – Table – T035D – check the input GL code in the field and input the
     value of DISKB
ü Amount – take the variance arrived from the input balances and same amount
ü Currency – Input GL account currency taken from T012K
ü Planning Group
ü Text – SGTXT – Table - FDES

  • After the above inputs fields, the program should call transaction FF63 and feed the above values and post the Memo record in the system and after verification, the system will generate memo record number
  • After this step, the output in PDF form will be sent for approvals for first and second approvers maintained in Z table
  • Work flow process:
  • Based on table maintenance – the document will be sent to SAP inbox as attachment and approval.
  • Once the Approver 1 approves, it will go to Approver 2 SAP inbox and wait for his approval.
  • After getting final approval, the mail will be sent to FI department user id that is maintained in the Z table
  • If any stage it is rejected, the mail will be returned back to originator.
  • In the OutPut :
  • The Bank account balances are based on input fields provided in the selection. For a given GL account, Company code, The balances are calculated as follows
  • Pass the values – BUKRS & HKONT and fiscal year (GJHAR) to get periodic values
  • Calculation – Previous balance + Current period Debits – Current period Credits = Accounting Balance
  • The above statement has zero difference, still it will sent for approval to Manager and then forward
#Development:
Table, Report, Module-Pool, BDC, Smartform, FM, and Workflow - Template, Single Tasks, Rule, Business Object #Development:

Table Creation:
Transparent Table  ZFI_GL_RECONCILE    Active
Short Description  Bank Reconciliation For The Month


MANDT MANDT CLNT 3 0 Client
WF_KEY ZWFKEY CHAR 18 0 WF Key
ZWFDATE DATUM DATS 8 0 Date
ZWFTIME ZWFTIME TIMS 6 0 WF Time
BUKRS BUKRS CHAR 4 0 Company Code
FLAG ABC_ACTFLG CHAR 1 0 Active Indicator
FYEAR GJAHR NUMC 4 0 Fiscal Year
PERIOD KMONA_FI NUMC 2 0 Calendar Month
POST_DATE BUDAT DATS 8 0 Posting Date in the Document
WAERS WAERS CUKY 5 0 Currency Key
GLACC SAKNR CHAR 10 0 G/L Account Number
SKAT TXT50 CHAR 50 0 Text
BANKN BANKN CHAR 18 0 Bank account number
BANK_BALANCE DMBTR CURR 13 2 Amount in Local Currency
BALANCE DMBTR CURR 13 2 Amount in Local Currency
BALANCE DMBTR CURR 13 2 Amount in Local Currency
CREATED_ON ERDAT DATS 8 0 Date on Which Record Was Created
APPROVERBY1 UNAME CHAR 12 0 User Name
APPROVERNAME1 EMNAM CHAR 40 0 Formatted Name of Employee or Applicant
APPROVERPOS1 PLANS NUMC 8 0 Position
APPROVALDATE1 DATUM DATS 8 0 Date
APPROVERBY2 UNAME CHAR 12 0 User Name
APPROVERNAME2 EMNAM CHAR 40 0 Formatted Name of Employee or Applicant
APPROVERPOS2 PLANS NUMC 8 0 Position
APPROVALDATE2 DATUM DATS 8 0 Date
WF_STATUS ZWFSTATUS CHAR 10 0 Workflow Status
WI_ID SWW_WIID NUMC 12 0 Work item ID
COMMENTS CHAR 255 0 Comments

*********************************************************************************
Report:
REPORT  ZFI_GL_RECONCILIATION_ACCOUNTS.

*********************************************************************************

INCLUDE ZFI_GL_RECONCILIATION_ACCOUTOP.

*********************************************************************************

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.


PARAMETERS:
               P_HKONT TYPE BSIS-HKONT OBLIGATORY,
               P_BUDAT TYPE BSIS-BUDAT NO-DISPLAY,
               P_BUKRS TYPE  BUKRS OBLIGATORY,
               P_GJAHR TYPE  GJAHR OBLIGATORY,
               P_KEY   TYPE  BUDAT OBLIGATORY,
               P_DMBTR TYPE DMBTR OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK B1 .

*********************************************************************************

AT SELECTION-SCREEN ON  P_GJAHR.
  PERFORM VALIDATION.               "FORM ZFI_GL_RECONCILIATION_ACCOUF04

START-OF-SELECTION.
  PERFORM AUTHORITY_CHECK.          "FORM ZFI_GL_RECONCILIATION_ACCOUF05
  PERFORM GET_DATA.                 "FORM ZFI_GL_RECONCILIATION_ACCOUF01
  PERFORM PREPARE_FINAL_TABLE.      "FORM ZFI_GL_RECONCILIATION_ACCOUF02

END-OF-SELECTION.
  PERFORM DISPLAY.                  "FORM ZFI_GL_RECONCILIATION_ACCOUF03
*********************************************************************************

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUO01.   "STATUS_0100  OUTPUT

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUI01.   "USER_COMMAND_0100  INPUT

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUO02.   "STATUS_0200  OUTPUT

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUI02.   "USER_COMMAND_0200  INPUT

*********************************************************************************

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF01.   "Form  GET_DATA

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF02.   "Form  PREPARE_FINAL_TABLE

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF03.   "Form  DISPLAY

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF04.   "Form  VALIDATION

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF05.   "Form  AUTHORITY_CHECK

*********************************************************************************

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF06.   "Form BDC_FF63

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF07.   "Form F_FILL_BDC

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF08.   "Form CALL_TRNC

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUF09.   "Form GET_MESSTAB

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUI03.   "Module Values  PAI INPUT

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUO03.   "Module INIT  PBO OUTPUT

  INCLUDE ZFI_GL_RECONCILIATION_ACCOUO04.   "Module  VALUE PBO OUTPUT
*********************************************************************************

*&---------------------------------------------------------------------*
*&  Include           ZFI_GL_RECONCILIATION_ACCOUTOP
*&---------------------------------------------------------------------*


DATA : FM_NAME TYPE RS38L_FNAM.

DATA : JOB_OUTPUT_INFO TYPE SSFCRESCL, " Smart Forms: Return value at end of form printing
       DOCUMENT_OUTPUT_INFO     TYPE SSFCRESPD,   " Smart Forms: Return Document Information
       JOB_OUTPUT_OPTIONS       TYPE SSFCRESOP,   " Smart Forms: Return value at start of form
       OUTPUT_OPTIONS           TYPE SSFCOMPOP,   " spool device printer name "LP01"
       CONTROL_PARAMETERS       TYPE SSFCTRLOP,   " Smart Forms: Control structure
       V_LANGUAGE               TYPE SFLANGU VALUE 'E',
       V_E_DEVTYPE              TYPE RSPOPTYPE,   " Spool: Device type name
       V_BIN_FILESIZE           TYPE I,
       V_BIN_FILE               TYPE XSTRING.

DATA: CONTROL TYPE REF TO CL_GUI_HTML_VIEWER,
      CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER,
      PDF_ALIGNMENT    TYPE I,
      PDF_DATA         TYPE XSTRING,
      PDF_SIZE         TYPE I.

DATA: PRINTER_HAS_OPTIONS TYPE C VALUE '',
      JT_TAB              TYPE POSS_JOBTICKETTAB,
      CUR_PRINTER         TYPE RSPOPNAME VALUE '',
      NEW_PRINT_OPTIONS   TYPE C VALUE 'X'.

DATA: IT_OTF TYPE STANDARD TABLE OF ITCOO, " OTF Structure
       IT_DOCS     TYPE STANDARD TABLE OF DOCS,   " Stored document
       IT_LINES    TYPE STANDARD TABLE OF TLINE.  " SAPscript: Text Lines

FIELD-SYMBOLS  TYPE X.

DATA : T_OTF TYPE ITCOO OCCURS 0 WITH HEADER LINE,

* Internal table to hold OTF data recd from the SMARTFORM

       T_OTF_FROM_FM TYPE SSFCRESCL ,

* Internal table to hold the data from the FM CONVERT_OTF

       T_PDF_TAB LIKE TLINE OCCURS 0 WITH HEADER LINE,
       LS_PDF LIKE LINE OF T_PDF_TAB,
       DOCS LIKE DOCS OCCURS 0  WITH HEADER LINE,
       LV_CONTENT  TYPE XSTRING,
       LV_URL TYPE CHAR255,
       LT_DATA TYPE STANDARD TABLE OF X255.

DATA : CUST_CON TYPE REF TO CL_GUI_CUSTOM_CONTAINER.

*       control TYPE REF TO cl_gui_html_viewer.

DATA: OBJ_ID TYPE SWR_STRUCT-OBJECT_KEY.

DATA : RETURN TYPE TABLE OF BAPIRETURN1 WITH HEADER LINE.

TABLES: T012K,
        WBRP,
        T001,
        SKAT,
        SKA1,
        SKB1,
        BSIS,
        BSAS,
        BSIK,
        BSAK,
        BSID,
        BSAD,
        BKPF,
        ZFI_GL_RECONCILE,
        ZFI_GL_MEMO.

TYPES:  BEGIN OF T_T012K,
        BUKRS TYPE BUKRS,
        HKONT TYPE HKONT,
        BANKN TYPE BANKN,
        END OF T_T012K.

TYPES : BEGIN OF T_SKB1,
        BUKRS TYPE BUKRS,
        SAKNR TYPE SAKNR,
        MITKZ TYPE MITKZ,
        END OF T_SKB1.

TYPES : BEGIN OF T_SKA1,
        SAKNR TYPE SAKNR,
        XB1LK TYPE XBILK,
        END OF T_SKA1.

TYPES : BEGIN OF T_STR,
*        zwfdate TYPE datum,
*        zwftime TYPE uzeit,
        BUKRS TYPE BUKRS,
        HKONT TYPE HKONT,
        GJAHR TYPE GJAHR,
        BELNR TYPE BELNR_D,
        BUZEI TYPE BUZEI,
        WAERS TYPE WAERS,
        SHKZG TYPE SHKZG,
        DMBTR TYPE DMBTR,
        WRBTR TYPE WRBTR,
        DMBE2 TYPE DMBE2,
        DMBE3 TYPE DMBE3,
*        bankn TYPE bankn,
*        balance TYPE wrbtr,
        END OF T_STR.

TYPES : BEGIN OF T_FINAL,
        WF_KEY TYPE ZFI_GL_RECONCILE-WF_KEY,
        ZWFDATE TYPE ZFI_GL_RECONCILE-ZWFDATE,
        ZWFTIME TYPE ZFI_GL_RECONCILE-ZWFTIME,
        BUKRS TYPE BUKRS,
        FYEAR TYPE GJAHR,
        PERIOD TYPE KMONA_FI,
        POST_DATE TYPE BUDAT,
        WAERS TYPE WAERS,
        HKONT TYPE HKONT,
        SKAT TYPE TXT50,
        WRBTR TYPE WRBTR,
        WAERS_DC TYPE WAERS,
        DMBTR TYPE DMBTR,
        WAERS_LC TYPE WAERS,
        DMBE2 TYPE DMBE2,
        HWAE2 TYPE HWAE2,
        DMBE3 TYPE DMBE3,
        HWAE3 TYPE HWAE3,
        BANKN TYPE BANKN,
        BALANCE TYPE WRBTR,
        INITIATOR TYPE UNAME,
        END OF T_FINAL.

DATA : IT_SKA1 TYPE TABLE OF T_SKA1,
       IT_NON_BS TYPE TABLE OF T_SKA1,
       IT_BS_ACC TYPE TABLE OF T_SKA1,
       IT_RECON_VEN TYPE TABLE OF T_SKA1,
       IT_RECON_CUS TYPE TABLE OF T_SKA1,
       IT_SKB1 TYPE TABLE OF T_SKB1,
       IT_BSIS_NON_BS TYPE TABLE OF T_STR,
       IT_BSIS TYPE TABLE OF T_STR,
       IT_BSAS TYPE TABLE OF T_STR,
       IT_BSIK TYPE TABLE OF T_STR,
       IT_BSAK TYPE TABLE OF T_STR,
       IT_BSID TYPE TABLE OF T_STR,
       IT_BSAD TYPE TABLE OF T_STR,
       IT_T012K TYPE TABLE OF T_T012K,
       IT_STR TYPE TABLE OF T_STR,
       IT_FINAL TYPE TABLE OF T_FINAL,
       IS_FINAL TYPE T_FINAL," OCCURS 0 WITH HEADER LINE,
       IT_FINAL2 TYPE TABLE OF T_FINAL.

DATA : IS_SKA1 TYPE T_SKA1,
       IS_NON_BS TYPE T_SKA1,
       IS_BS_ACC TYPE T_SKA1,
       IS_RECON_VEN TYPE T_SKA1,
       IS_RECON_CUS TYPE T_SKA1,
       IS_SKB1 TYPE T_SKB1,
       IS_BSIS_NON_BS TYPE T_STR,
       IS_BSIS TYPE T_STR,
       IS_BSAS TYPE T_STR,
       IS_BSIK TYPE T_STR,
       IS_BSAK TYPE T_STR,
       IS_BSID TYPE T_STR,
       IS_BSAD TYPE T_STR,
       IS_T012K TYPE T_T012K,
       IS_STR  TYPE T_STR.
*       is_final TYPE t_final.

DATA: IT_TEXT TYPE CHAR255.
DATA: BALANCE TYPE WRBTR,
      IS_DATE TYPE SY-DATUM,
      IS_TIME TYPE SY-UZEIT,
      IS_OBJ_KEY TYPE ZFI_GL_RECONCILE-WF_KEY,
      LV_OBJ_KEY TYPE SWR_STRUCT-OBJECT_KEY.
DATA: GC_ZFI_GL_RECONCILE TYPE INRI-OBJECT VALUE 'ZRECONCILE',
      GC_01 TYPE INRI-NRRANGENR VALUE '01'.

DATA: IT_ZFI_GL_RECONCILE TYPE ZFI_GL_RECONCILE OCCURS 0 WITH HEADER LINE.

DATA: IT_FLDCAT TYPE  SLIS_T_FIELDCAT_ALV,
      IS_FLDCAT TYPE  SLIS_FIELDCAT_ALV,
      IS_LAYOUT TYPE  SLIS_LAYOUT_ALV,
      IT_SORT   TYPE  SLIS_T_SORTINFO_ALV,
      IS_SORT   TYPE  SLIS_SORTINFO_ALV,
      LV_YEAR   TYPE  GJAHR.

DATA: IT_BDCDATA LIKE  BDCDATA    OCCURS 0 WITH HEADER LINE.
DATA: IT_MESSAGES LIKE  BDCMSGCOLL OCCURS 0 WITH HEADER LINE,
      IS_MESSAGES LIKE  BDCMSGCOLL.

DATA: FLAG TYPE C,
      VAR1 TYPE C.

DATA: IT_ZFI_GL_MEMO TYPE ZFI_GL_MEMO OCCURS 0 WITH HEADER LINE.
DATA: IS_ZFI_GL_MEMO TYPE ZFI_GL_MEMO.
*DATA: IS_ZFI_GL_MEMO-DATUM TYPE WORKFLDS-GKDAY.
*DATA: IS_ZFI_GL_MEMO-AVDAT TYPE WORKFLDS-GKDAY.

DATA: LOC_TRN LIKE SY-TCODE.
DATA: LOC_MODE.
DATA:WF_RETURNCODE,
     WF_ERROR_TEXT(200),
     WG_ERROR_FLAG.
DATA: WFKEY1 LIKE ZFI_GL_RECONCILE-WF_KEY.
TYPES: BEGIN OF VALUES,
         CARRID TYPE SPFLI-CARRID,
         CONNID TYPE SPFLI-CONNID,
       END OF VALUES.

DATA: PROGNAME TYPE SY-REPID,
      DYNNUM   TYPE SY-DYNNR,
      DYNPRO_VALUES TYPE TABLE OF DYNPREAD,
      FIELD_VALUE LIKE LINE OF DYNPRO_VALUES,
      VALUES_TAB TYPE TABLE OF VALUES.
*      DYNFIELDS TYPE  HELP_INFO OCCURS 0 WITH HEADER LINE.

DATA: BEGIN OF DYNFIELDS OCCURS 0.
        INCLUDE STRUCTURE DYNPREAD.
DATA: END OF DYNFIELDS.

DATA : LS_WRSHB(30) TYPE C,
      LS_DATUM(10) TYPE C,
      LS_AVDAT(10) TYPE C,
      LS_DISPW TYPE TCURC-WAERS,
      EXT_AMT TYPE BAPICURR-BAPICURR.
*********************************************************************************
Text Symbols:
Select Data for Bank Reconciliation for Month
Selection Texts:
P_BUKRS Company Code
P_DMBTR Amount
P_GJAHR Fiscal Year
P_HKONT G/L Account
P_KEY Posting Date Of that Month

*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF04.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  VALIDATION
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM VALIDATION .
* Validate Year
  IF P_KEY IS NOT INITIAL.
    LV_YEAR = P_KEY+0(4).

    IF P_GJAHR NE LV_YEAR.
      MESSAGE E000(ZFI_GL) WITH LV_YEAR.
    ENDIF.
  ENDIF.
*Validate Company Code
  IF P_BUKRS IS NOT INITIAL.

    SELECT SINGLE * FROM BSIS
      WHERE  BUKRS = P_BUKRS.
    IF SY-SUBRC <> 0.
      MESSAGE E002(ZFI_GL) WITH P_BUKRS .
    ENDIF.
  ENDIF.

* Validate G/L Account
  IF P_HKONT IS NOT INITIAL.

    SELECT SINGLE * FROM BSIS
      WHERE  HKONT = P_HKONT.
    IF SY-SUBRC <> 0.
      MESSAGE E001(ZFI_GL) WITH P_HKONT .
    ENDIF.
  ENDIF.

ENDFORM.                    " VALIDATION
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF05.
*----------------------------------------------------------------------*

*&---------------------------------------------------------------------*
*&      Form  AUTHORITY_CHECK
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM AUTHORITY_CHECK .
  AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
        ID 'ACTVT' FIELD '03'
        ID 'BUKRS' FIELD P_BUKRS.
  IF SY-SUBRC NE 0.
    MESSAGE E000(ZFI)
     WITH 'No authorization to Company code' P_BUKRS.
  ENDIF .

ENDFORM.                    " AUTHORITY_CHECK
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM GET_DATA .

  IF P_HKONT IS INITIAL.
    SELECT BUKRS SAKNR MITKZ FROM SKB1 INTO TABLE IT_SKB1
    WHERE BUKRS = P_BUKRS.
  ELSE.
    SELECT BUKRS SAKNR MITKZ FROM SKB1 INTO TABLE IT_SKB1
    WHERE BUKRS = P_BUKRS
    AND   SAKNR = P_HKONT.
  ENDIF.

  IF IT_SKB1[] IS NOT INITIAL.
    SELECT SAKNR XBILK FROM SKA1 INTO TABLE IT_SKA1
    FOR ALL ENTRIES IN IT_SKB1
    WHERE SAKNR = IT_SKB1-SAKNR.
  ENDIF.


  LOOP AT  IT_SKA1 INTO IS_SKA1.

*-----Non-Balance sheet accounts
    IF IS_SKA1-XB1LK IS INITIAL.
      MOVE IS_SKA1 TO IS_NON_BS .
      APPEND IS_NON_BS TO IT_NON_BS.
    ENDIF.

    READ TABLE IT_SKB1 INTO IS_SKB1
    WITH KEY SAKNR = IS_SKA1-SAKNR.

    IF SY-SUBRC = 0 .

*-----Purely Balance sheet accounts
      IF IS_SKA1-XB1LK = 'X' AND IS_SKB1-MITKZ IS INITIAL.
        MOVE IS_SKA1 TO IS_BS_ACC .
        APPEND IS_BS_ACC TO IT_BS_ACC.

*-----Reconciliation accounts
      ELSEIF IS_SKA1-XB1LK = 'X' AND IS_SKB1-MITKZ = 'K'.
        MOVE IS_SKA1 TO IS_RECON_VEN .
        APPEND IS_RECON_VEN TO IT_RECON_VEN.
      ELSEIF IS_SKA1-XB1LK = 'X' AND IS_SKB1-MITKZ = 'D'.
        MOVE IS_SKA1 TO IS_RECON_CUS .
        APPEND IS_RECON_CUS TO IT_RECON_CUS.
      ENDIF.

    ENDIF.

    CLEAR : IS_SKA1, IS_SKB1, IS_NON_BS, IS_BS_ACC, IS_RECON_VEN, IS_RECON_CUS.

  ENDLOOP.

  IF IT_NON_BS[] IS NOT INITIAL.
    DATA :  LV_KEY TYPE BUDAT.
    CONCATENATE P_GJAHR  '0101' INTO LV_KEY.

*    p_budat-low = lv_key.
*    p_budat-high = p_key.
*    p_budat-sign = 'I'.
*    p_budat-option = 'BT'.
*    APPEND s_budat.

    SELECT BUKRS HKONT GJAHR BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSIS INTO TABLE IT_BSIS_NON_BS
    FOR ALL ENTRIES IN IT_NON_BS
    WHERE BUKRS = P_BUKRS
    AND HKONT = IT_NON_BS-SAKNR
    AND   GJAHR = P_GJAHR
    AND   BUDAT = P_BUDAT.

  ENDIF.

  IF  IT_BS_ACC[] IS NOT INITIAL .

    SELECT BUKRS HKONT GJAHR BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSIS INTO TABLE IT_BSIS
    FOR ALL ENTRIES IN IT_BS_ACC
    WHERE BUKRS = P_BUKRS
    AND   HKONT = IT_BS_ACC-SAKNR
    AND   BUDAT LE P_KEY.

    SELECT BUKRS HKONT GJAHR  BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSAS INTO TABLE IT_BSAS
    FOR ALL ENTRIES IN IT_BS_ACC
    WHERE BUKRS = P_BUKRS
    AND   HKONT = IT_BS_ACC-SAKNR
    AND   AUGDT GT P_KEY
    AND   BUDAT LE P_KEY.

  ENDIF.

  IF  IT_RECON_VEN[] IS NOT INITIAL.

    SELECT BUKRS HKONT GJAHR BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSIK INTO TABLE IT_BSIK
    FOR ALL ENTRIES IN IT_RECON_VEN
    WHERE BUKRS = P_BUKRS
    AND   HKONT = IT_RECON_VEN-SAKNR
    AND   BUDAT LE P_KEY.

    SELECT BUKRS HKONT GJAHR BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSAK INTO TABLE IT_BSAK
    FOR ALL ENTRIES IN IT_RECON_VEN
    WHERE BUKRS = P_BUKRS
    AND   HKONT = IT_RECON_VEN-SAKNR
    AND   AUGDT GT P_KEY
    AND   BUDAT LE P_KEY.

  ENDIF.

  IF  IT_RECON_CUS[] IS NOT INITIAL.

    SELECT BUKRS HKONT GJAHR BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSID INTO TABLE IT_BSID
    FOR ALL ENTRIES IN IT_RECON_CUS
    WHERE BUKRS = P_BUKRS
    AND   HKONT = IT_RECON_CUS-SAKNR
    AND   BUDAT LE P_KEY.

    SELECT BUKRS HKONT GJAHR BELNR BUZEI WAERS SHKZG DMBTR WRBTR DMBE2 DMBE3 FROM BSAD INTO TABLE IT_BSAD
    FOR ALL ENTRIES IN IT_RECON_CUS
    WHERE BUKRS = P_BUKRS
    AND   HKONT = IT_RECON_CUS-SAKNR
    AND   AUGDT GT P_KEY
    AND   BUDAT LE P_KEY.

  ENDIF.

ENDFORM.                    " GET_DATA
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF02.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  PREPARE_FINAL_TABLE
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM PREPARE_FINAL_TABLE .

  SELECT SINGLE * FROM BKPF WHERE BUKRS = P_BUKRS.

  IF IT_BSIS_NON_BS[] IS NOT INITIAL.
    LOOP AT IT_BSIS_NON_BS INTO IS_BSIS_NON_BS.
      IS_FINAL-BUKRS = IS_BSIS_NON_BS-BUKRS.
      IS_FINAL-HKONT = IS_BSIS_NON_BS-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSIS_NON_BS-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.

      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSIS_NON_BS-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
        AND SAKNR = IS_BSIS_NON_BS-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSIS_NON_BS-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSIS_NON_BS-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSIS_NON_BS-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSIS_NON_BS-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSIS_NON_BS-DMBE3 * -1 ).
      ELSEIF IS_BSIS_NON_BS-SHKZG = 'S'.
        IS_FINAL-DMBTR =   IS_BSIS_NON_BS-DMBTR .
        IS_FINAL-WRBTR =   IS_BSIS_NON_BS-WRBTR .
        IS_FINAL-DMBE2 =   IS_BSIS_NON_BS-DMBE2 .
        IS_FINAL-DMBE3 =   IS_BSIS_NON_BS-DMBE3 .
      ENDIF .

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSIS_NON_BS,T001,SKAT.
    ENDLOOP.
  ENDIF.

  IF IT_BSIS[] IS NOT INITIAL.
    LOOP AT IT_BSIS INTO IS_BSIS.
      IS_FINAL-BUKRS = IS_BSIS-BUKRS.
      IS_FINAL-HKONT = IS_BSIS-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSIS-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.


      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSIS-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
        AND   SAKNR = IS_BSIS-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSIS-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSIS-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSIS-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSIS-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSIS-DMBE3 * -1 ).
      ELSEIF IS_BSIS-SHKZG = 'S'.
        IS_FINAL-DMBTR =  IS_BSIS-DMBTR .
        IS_FINAL-WRBTR =  IS_BSIS-WRBTR .
        IS_FINAL-DMBE2 =  IS_BSIS-DMBE2 .
        IS_FINAL-DMBE3 =  IS_BSIS-DMBE3 .
      ENDIF.

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSIS,T001,SKAT.
    ENDLOOP.
  ENDIF.

  IF IT_BSAS[] IS NOT INITIAL.
    LOOP AT IT_BSAS INTO IS_BSAS.
      IS_FINAL-BUKRS = IS_BSAS-BUKRS.
      IS_FINAL-HKONT = IS_BSAS-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSAS-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.


      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSAS-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
        AND   SAKNR = IS_BSAS-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSAS-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSAS-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSAS-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSAS-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSAS-DMBE3 * -1 ).
      ELSEIF IS_BSAS-SHKZG = 'S'.
        IS_FINAL-DMBTR =  IS_BSAS-DMBTR .
        IS_FINAL-WRBTR =  IS_BSAS-WRBTR .
        IS_FINAL-DMBE2 =  IS_BSAS-DMBE2 .
        IS_FINAL-DMBE3 =  IS_BSAS-DMBE3 .
      ENDIF.

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSAS,T001,SKAT.
    ENDLOOP.
  ENDIF.


  IF IT_BSIK[] IS NOT INITIAL.
    LOOP AT IT_BSIK INTO IS_BSIK.
      IS_FINAL-BUKRS = IS_BSIK-BUKRS.
      IS_FINAL-HKONT = IS_BSIK-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSIK-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.


      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSIK-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
          AND SAKNR = IS_BSIK-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSIK-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSIK-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSIK-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSIK-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSIK-DMBE3 * -1 ).
      ELSEIF IS_BSIK-SHKZG = 'S'.
        IS_FINAL-DMBTR =  IS_BSIK-DMBTR .
        IS_FINAL-WRBTR =  IS_BSIK-WRBTR .
        IS_FINAL-DMBE2 =  IS_BSIK-DMBE2 .
        IS_FINAL-DMBE3 =  IS_BSIK-DMBE3 .
      ENDIF.

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSIK,T001,SKAT.
    ENDLOOP.
  ENDIF.

  IF IT_BSAK[] IS NOT INITIAL.
    LOOP AT IT_BSAK INTO IS_BSAK.
      IS_FINAL-BUKRS = IS_BSAK-BUKRS.
      IS_FINAL-HKONT = IS_BSAK-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSAK-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.


      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSAK-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
          AND SAKNR = IS_BSAK-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSAK-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSAK-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSAK-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSAK-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSAK-DMBE3 * -1 ).
      ELSEIF IS_BSAK-SHKZG = 'S'.
        IS_FINAL-DMBTR =  IS_BSAK-DMBTR .
        IS_FINAL-WRBTR =  IS_BSAK-WRBTR .
        IS_FINAL-DMBE2 =  IS_BSAK-DMBE2 .
        IS_FINAL-DMBE3 =  IS_BSAK-DMBE3 .
      ENDIF.

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSAK,T001,SKAT.
    ENDLOOP.
  ENDIF.

  IF IT_BSID[] IS NOT INITIAL.
    LOOP AT IT_BSID INTO IS_BSID.
      IS_FINAL-BUKRS = IS_BSID-BUKRS.
      IS_FINAL-HKONT = IS_BSID-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSID-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.


      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSID-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
          AND SAKNR = IS_BSID-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSID-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSID-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSID-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSID-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSID-DMBE3 * -1 ).
      ELSEIF IS_BSID-SHKZG = 'S'.
        IS_FINAL-DMBTR =  IS_BSID-DMBTR .
        IS_FINAL-WRBTR =  IS_BSID-WRBTR .
        IS_FINAL-DMBE2 =  IS_BSID-DMBE2 .
        IS_FINAL-DMBE3 =  IS_BSID-DMBE3 .
      ENDIF.

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSID,T001,SKAT.
    ENDLOOP.
  ENDIF.

  IF IT_BSAD[] IS NOT INITIAL.
    LOOP AT IT_BSAD INTO IS_BSAD.
      IS_FINAL-BUKRS = IS_BSAD-BUKRS.
      IS_FINAL-HKONT = IS_BSAD-HKONT.
      IS_FINAL-FYEAR = P_KEY.
      IS_FINAL-WAERS_DC = IS_BSAD-WAERS.
      IS_FINAL-HWAE2 = BKPF-HWAE2.
      IS_FINAL-HWAE3 = BKPF-HWAE3.


      SELECT SINGLE WAERS KTOPL FROM T001 INTO (T001-WAERS,T001-KTOPL)
      WHERE BUKRS = IS_BSAD-BUKRS.

      IF SY-SUBRC = 0.

        IS_FINAL-WAERS_LC = T001-WAERS.

        SELECT SINGLE TXT50 FROM SKAT
        INTO SKAT-TXT50
        WHERE KTOPL = T001-KTOPL
        AND   SPRAS = SY-LANGU
          AND SAKNR = IS_BSAD-HKONT.

        IF SY-SUBRC = 0.
          IS_FINAL-SKAT = SKAT-TXT50.
        ENDIF.

      ENDIF.

      IF IS_BSAD-SHKZG = 'H'.
        IS_FINAL-DMBTR =  ( IS_BSAD-DMBTR * -1 ).
        IS_FINAL-WRBTR =  ( IS_BSAD-WRBTR * -1 ).
        IS_FINAL-DMBE2 =  ( IS_BSAD-DMBE2 * -1 ).
        IS_FINAL-DMBE3 =  ( IS_BSAD-DMBE3 * -1 ).
      ELSEIF IS_BSAD-SHKZG = 'S'.
        IS_FINAL-DMBTR =  IS_BSAD-DMBTR .
        IS_FINAL-WRBTR =  IS_BSAD-WRBTR .
        IS_FINAL-DMBE2 =  IS_BSAD-DMBE2 .
        IS_FINAL-DMBE3 =  IS_BSAD-DMBE3 .
      ENDIF.

      APPEND IS_FINAL TO IT_FINAL.
      CLEAR : IS_FINAL,IS_BSAD,T001,SKAT.
    ENDLOOP.
  ENDIF.

  IF IT_FINAL[] IS NOT INITIAL.
    SORT IT_FINAL BY BUKRS HKONT WAERS_DC .
    LOOP AT  IT_FINAL INTO IS_FINAL.

      COLLECT IS_FINAL INTO IT_FINAL2.

      CLEAR : IS_FINAL.
    ENDLOOP.


  ENDIF.
ENDFORM.                    " PREPARE_FINAL_TABLE
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  DISPLAY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM DISPLAY .
  IF NOT IT_FINAL[] IS INITIAL.

    READ TABLE IT_FINAL2 INTO IS_FINAL INDEX 1.
* Get Balance Amount
    IS_FINAL-BALANCE = IS_FINAL-WRBTR - P_DMBTR.
* Get Bank Account Number
    SELECT BUKRS HKONT BANKN FROM T012K INTO TABLE IT_T012K
      WHERE BUKRS = P_BUKRS
      AND HKONT = P_HKONT.
    IF IT_T012K IS NOT INITIAL.
      READ TABLE IT_T012K INTO IS_T012K INDEX 1.
      IS_FINAL-BANKN = IS_T012K-BANKN.
    ENDIF.

*******************************
    IF SY-SUBRC = 0.
****
      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          FORMNAME = 'ZFI_RECONCILIATION'
        IMPORTING
          FM_NAME  = FM_NAME.

      CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
        EXPORTING
          I_LANGUAGE    = V_LANGUAGE
          I_APPLICATION = 'SAPDEFAULT'
        IMPORTING
          E_DEVTYPE     = V_E_DEVTYPE.
      OUTPUT_OPTIONS-TDPRINTER = V_E_DEVTYPE.

***********popup of the smartform printer blocking logic

      OUTPUT_OPTIONS-TDNOPREV      = 'X'.
      CONTROL_PARAMETERS-NO_DIALOG = 'X'.

      OUTPUT_OPTIONS-TDDEST = 'LP01'.

      CONTROL_PARAMETERS-GETOTF    = 'X'.

      CALL FUNCTION FM_NAME
        EXPORTING
*         ARCHIVE_INDEX        =
*         ARCHIVE_INDEX_TAB    =
*         ARCHIVE_PARAMETERS   =
          CONTROL_PARAMETERS   = CONTROL_PARAMETERS
*         MAIL_APPL_OBJ        =
*         MAIL_RECIPIENT       =
*         MAIL_SENDER          =
          OUTPUT_OPTIONS       = OUTPUT_OPTIONS
          USER_SETTINGS        = 'X'
          BUDAT                = P_KEY
          BUKRS                = IS_FINAL-BUKRS
          GJAHR                = IS_FINAL-FYEAR
          HKONT                = IS_FINAL-HKONT
          SKAT                 = IS_FINAL-SKAT
          P_DMBTR              = P_DMBTR
          BANKN                = IS_FINAL-BANKN
          WRBTR                = IS_FINAL-WRBTR
          WAERS                = IS_FINAL-WAERS_DC
*         dmbtr                = is_final-dmbtr
*         waers_lc             = is_final-waers_lc
*         dmbe2                = is_final-dmbe2
*         hwae2                = is_final-hwae2
*         dmbe3                = is_final-dmbe3
*         hwae3                = is_final-hwae3
          BANLANCE             = IS_FINAL-BALANCE
        IMPORTING
          DOCUMENT_OUTPUT_INFO = DOCUMENT_OUTPUT_INFO
          JOB_OUTPUT_INFO      = JOB_OUTPUT_INFO
          JOB_OUTPUT_OPTIONS   = JOB_OUTPUT_OPTIONS
        EXCEPTIONS
          FORMATTING_ERROR     = 1
          INTERNAL_ERROR       = 2
          SEND_ERROR           = 3
          USER_CANCELED        = 4
*         OTHERS               = 5
        .
      IF SY-SUBRC <> 0.
* Implement suitable error handling here
      ENDIF.

      CALL FUNCTION 'CONVERT_OTF'
        EXPORTING
          FORMAT                = 'PDF'
        IMPORTING
          BIN_FILESIZE          = V_BIN_FILESIZE
*         BIN_FILE              = V_BIN_FILE
        TABLES
          OTF                   = JOB_OUTPUT_INFO-OTFDATA
          LINES                 = T_PDF_TAB
        EXCEPTIONS
          ERR_MAX_LINEWIDTH     = 1
          ERR_FORMAT            = 2
          ERR_CONV_NOT_POSSIBLE = 3
          ERR_BAD_OTF           = 4
          OTHERS                = 5.
      IF SY-SUBRC <> 0.
****
***** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*****         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
****
      ENDIF.

      LOOP AT T_PDF_TAB INTO LS_PDF.
        ASSIGN LS_PDF TO  CASTING.
        CONCATENATE LV_CONTENT  INTO LV_CONTENT IN BYTE MODE.
      ENDLOOP.
****
      CALL SCREEN 0100.
****
    ENDIF.

  ENDIF.
ENDFORM.                    " DISPLAY
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUO01.
*----------------------------------------------------------------------*
****
*****&---------------------------------------------------------------------*
*****&      Module  STATUS_0100  OUTPUT
*****&---------------------------------------------------------------------*
*****       text
*****----------------------------------------------------------------------*
****
MODULE STATUS_0100 OUTPUT.
  SET PF-STATUS 'HTML'.
  SET TITLEBAR 'HTML'.
****
****
  CREATE OBJECT CONTAINER
    EXPORTING
      CONTAINER_NAME = 'CUST_CONT'.

  CREATE OBJECT CONTROL
    EXPORTING
      PARENT = CONTAINER.

* Convert xstring to binary table to pass to the LOAD_DATA method
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      BUFFER     = LV_CONTENT
    TABLES
      BINARY_TAB = LT_DATA.

* Load the HTML
  CALL METHOD CONTROL->LOAD_DATA(
    EXPORTING
      TYPE                 = 'application'
      SUBTYPE              = 'pdf'
    IMPORTING
      ASSIGNED_URL         = LV_URL
    CHANGING
      DATA_TABLE           = LT_DATA
    EXCEPTIONS
      DP_INVALID_PARAMETER = 1
      DP_ERROR_GENERAL     = 2
      CNTL_ERROR           = 3
      OTHERS               = 4 ).

* Show it
  CALL METHOD CONTROL->SHOW_URL(
      URL      = LV_URL
      IN_PLACE = 'X' ).

ENDMODULE. " STATUS_0100 OUTPUT
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*

MODULE USER_COMMAND_0100 INPUT.
  DATA : FCODE      LIKE SY-UCOMM,
  FCODE_CANCEL     LIKE SY-TCODE  VALUE 'CANC',
  RETURN1 TYPE BAPIRETURN1.
  FCODE = SY-UCOMM.

  CASE FCODE.
    WHEN 'STOP' OR 'CANCEL' OR 'EXIT' OR 'BACK'.
      CLEAR SY-UCOMM.
****
      LEAVE TO SCREEN 0.
*      CALL TRANSACTION 'SBWP' AND SKIP FIRST SCREEN.
****
    WHEN FCODE_CANCEL.
      IF NOT CONTROL IS INITIAL.
        CALL METHOD CONTROL->FREE.
        IF SY-SUBRC <> 0.
          RAISE CNTL_ERROR.
        ENDIF.
        FREE CONTROL.
      ENDIF.
      IF NOT CONTAINER IS INITIAL.
        CALL METHOD CONTAINER->FREE.
        IF SY-SUBRC <> 0.
          RAISE CNTL_ERROR.
        ENDIF.
        FREE CONTAINER.
      ENDIF.
      LEAVE TO SCREEN 0.

    WHEN 'SUBMIT'.

* Get Object Key Company Code, Date and Time

      IS_FINAL-ZWFDATE     = SY-DATUM.
      IS_FINAL-ZWFTIME     = SY-UZEIT.
      IS_FINAL-DMBTR       = P_DMBTR.
      IS_FINAL-POST_DATE   = P_KEY.
      IS_FINAL-PERIOD      = P_KEY+4(2).

      CONCATENATE IS_FINAL-BUKRS IS_FINAL-ZWFDATE IS_FINAL-ZWFTIME INTO IS_FINAL-WF_KEY.
      SHIFT IS_FINAL-WF_KEY LEFT DELETING LEADING SPACE.


      WFKEY1 = IS_FINAL-WF_KEY.

      SET PARAMETER ID 'WFKEY1' FIELD WFKEY1.
      CLEAR WFKEY1.

      IF IS_FINAL-BALANCE = '0'.

* Insert values in the table ZFI_GL_RECONCILE

        IT_ZFI_GL_RECONCILE-WF_KEY               = IS_FINAL-WF_KEY.
        IT_ZFI_GL_RECONCILE-ZWFDATE              = IS_FINAL-ZWFDATE.
        IT_ZFI_GL_RECONCILE-POST_DATE            = IS_FINAL-POST_DATE.
        IT_ZFI_GL_RECONCILE-PERIOD               = IS_FINAL-PERIOD.
        IT_ZFI_GL_RECONCILE-WAERS                = IS_FINAL-WAERS_DC.
        IT_ZFI_GL_RECONCILE-ZWFTIME              = IS_FINAL-ZWFTIME.
        IT_ZFI_GL_RECONCILE-BUKRS                = IS_FINAL-BUKRS.
        IT_ZFI_GL_RECONCILE-FYEAR                = IS_FINAL-FYEAR.
        IT_ZFI_GL_RECONCILE-GLACC                = IS_FINAL-HKONT.
        IT_ZFI_GL_RECONCILE-SKAT                 = IS_FINAL-SKAT.
        IT_ZFI_GL_RECONCILE-BANK_BALANCE         = IS_FINAL-DMBTR.
        IT_ZFI_GL_RECONCILE-BANKN                = IS_FINAL-BANKN.
        IT_ZFI_GL_RECONCILE-BOOK_BALANCE         = IS_FINAL-WRBTR.
        IT_ZFI_GL_RECONCILE-BALANCE              = IS_FINAL-BALANCE.

        INSERT ZFI_GL_RECONCILE FROM IT_ZFI_GL_RECONCILE.

        ZFI_GL_RECONCILE-WF_KEY               = IS_FINAL-WF_KEY.
        ZFI_GL_RECONCILE-ZWFDATE              = IS_FINAL-ZWFDATE.
        ZFI_GL_RECONCILE-ZWFTIME              = IS_FINAL-ZWFTIME.
        ZFI_GL_RECONCILE-BUKRS                = IS_FINAL-BUKRS.
        ZFI_GL_RECONCILE-FYEAR                = IS_FINAL-FYEAR.
        ZFI_GL_RECONCILE-POST_DATE            = IS_FINAL-POST_DATE.
        ZFI_GL_RECONCILE-PERIOD               = IS_FINAL-PERIOD.
        ZFI_GL_RECONCILE-WAERS                = IS_FINAL-WAERS_DC.
        ZFI_GL_RECONCILE-GLACC                = IS_FINAL-HKONT.
        ZFI_GL_RECONCILE-SKAT                 = IS_FINAL-SKAT.
        ZFI_GL_RECONCILE-BANK_BALANCE         = IS_FINAL-DMBTR.
        ZFI_GL_RECONCILE-BANKN                = IS_FINAL-BANKN.
        ZFI_GL_RECONCILE-BOOK_BALANCE         = IS_FINAL-WRBTR.
        ZFI_GL_RECONCILE-BALANCE              = IS_FINAL-BALANCE.

        LV_OBJ_KEY = IS_FINAL-WF_KEY.

        CLEAR: IS_FINAL. ", IT_ZFI_GL_RECONCILE.

* Triggering Workflow when Zero Balance

        CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
          EXPORTING
            OBJECT_TYPE = 'ZFI_GL_REC'
            OBJECT_KEY  = LV_OBJ_KEY
            EVENT       = 'Submitted'
            COMMIT_WORK = 'X'.

        LEAVE TO SCREEN 0.

      ELSE.
* Insert values in the table ZFI_GL_MEMO
        IS_FINAL-INITIATOR                  = SY-UNAME.

        IT_ZFI_GL_MEMO-WF_KEY               = IS_FINAL-WF_KEY.
        IT_ZFI_GL_MEMO-ZWFDATE              = IS_FINAL-ZWFDATE.
        IT_ZFI_GL_MEMO-POST_DATE            = IS_FINAL-POST_DATE.
        IT_ZFI_GL_MEMO-PERIOD               = IS_FINAL-PERIOD.
        IT_ZFI_GL_MEMO-WAERS                = IS_FINAL-WAERS_DC.
        IT_ZFI_GL_MEMO-DISPW                = IS_FINAL-WAERS_DC.
        IT_ZFI_GL_MEMO-ZWFTIME              = IS_FINAL-ZWFTIME.
        IT_ZFI_GL_MEMO-BUKRS                = IS_FINAL-BUKRS.
        IT_ZFI_GL_MEMO-FYEAR                = IS_FINAL-FYEAR.
        IT_ZFI_GL_MEMO-GLACC                = IS_FINAL-HKONT.
        IT_ZFI_GL_MEMO-SKAT                 = IS_FINAL-SKAT.
        IT_ZFI_GL_MEMO-BANK_BALANCE         = IS_FINAL-DMBTR.
        IT_ZFI_GL_MEMO-BANKN                = IS_FINAL-BANKN.
        IT_ZFI_GL_MEMO-BOOK_BALANCE         = IS_FINAL-WRBTR.
        IT_ZFI_GL_MEMO-BALANCE              = IS_FINAL-BALANCE.
        IT_ZFI_GL_MEMO-INITIATOR            = IS_FINAL-INITIATOR.

        INSERT ZFI_GL_MEMO FROM IT_ZFI_GL_MEMO.

        ZFI_GL_MEMO-WF_KEY               = IS_FINAL-WF_KEY.
        ZFI_GL_MEMO-ZWFDATE              = IS_FINAL-ZWFDATE.
        ZFI_GL_MEMO-POST_DATE            = IS_FINAL-POST_DATE.
        ZFI_GL_MEMO-PERIOD               = IS_FINAL-PERIOD.
        ZFI_GL_MEMO-WAERS                = IS_FINAL-WAERS_DC.
        ZFI_GL_MEMO-DISPW                = IS_FINAL-WAERS_DC.
        ZFI_GL_MEMO-ZWFTIME              = IS_FINAL-ZWFTIME.
        ZFI_GL_MEMO-BUKRS                = IS_FINAL-BUKRS.
        ZFI_GL_MEMO-FYEAR                = IS_FINAL-FYEAR.
        ZFI_GL_MEMO-GLACC                = IS_FINAL-HKONT.
        ZFI_GL_MEMO-SKAT                 = IS_FINAL-SKAT.
        ZFI_GL_MEMO-BANK_BALANCE         = IS_FINAL-DMBTR.
        ZFI_GL_MEMO-BANKN                = IS_FINAL-BANKN.
        ZFI_GL_MEMO-BOOK_BALANCE         = IS_FINAL-WRBTR.
        ZFI_GL_MEMO-BALANCE              = IS_FINAL-BALANCE.

        CALL SCREEN 0200.

        LEAVE TO SCREEN 0.

      ENDIF.

    WHEN OTHERS.
      CALL METHOD CL_GUI_CFW=>DISPATCH.
      IF SY-SUBRC <> 0.
        RAISE CNTL_ERROR.
      ENDIF.
  ENDCASE.

  CLEAR FCODE.
ENDMODULE. " USER_COMMAND_0100 INPUT
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUO02.
*----------------------------------------------------------------------*
* Sub Screen for Create Memo Record
*****&---------------------------------------------------------------------*
*****&      Module  STATUS_0200  OUTPUT
*****&---------------------------------------------------------------------*
*****       text
*****----------------------------------------------------------------------*
MODULE STATUS_0200 OUTPUT.
  SET PF-STATUS 'MEMO'.
  SET TITLEBAR 'MEMO'.
ENDMODULE. "status_0200 OUTPUT.
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI02.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0200  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0200 INPUT.
*  DATA : fcode      LIKE sy-ucomm,
*   fcode_cancel     LIKE sy-tcode  VALUE 'CANC',
*   return1 TYPE bapireturn1.

  FCODE = SY-UCOMM.

  CASE FCODE.
    WHEN 'STOP' OR 'CANCEL' OR 'EXIT' OR 'BACK'.
      CLEAR SY-UCOMM.
****
      LEAVE TO SCREEN 0.
      LEAVE PROGRAM.
*      CALL TRANSACTION 'SBWP' AND SKIP FIRST SCREEN.
****
    WHEN FCODE_CANCEL.
      IF NOT CONTROL IS INITIAL.
        CALL METHOD CONTROL->FREE.
        IF SY-SUBRC <> 0.
          RAISE CNTL_ERROR.
        ENDIF.
        FREE CONTROL.
      ENDIF.
      IF NOT CONTAINER IS INITIAL.
        CALL METHOD CONTAINER->FREE.
        IF SY-SUBRC <> 0.
          RAISE CNTL_ERROR.
        ENDIF.
        FREE CONTAINER.
      ENDIF.
      LEAVE TO SCREEN 0.
      LEAVE PROGRAM.

    WHEN 'MEMO'.

* Update Values in the table ZFI_GL_MEMO

      GET PARAMETER ID 'WFKEY1' FIELD WFKEY1.

      SELECT SINGLE * FROM ZFI_GL_MEMO INTO IT_ZFI_GL_MEMO
               WHERE WF_KEY = WFKEY1.
      IF SY-SUBRC = 0.
        IS_ZFI_GL_MEMO-WRSHB = IT_ZFI_GL_MEMO-BALANCE.
        IS_ZFI_GL_MEMO-DISPW = IT_ZFI_GL_MEMO-DISPW.
*
      ENDIF.
      UPDATE ZFI_GL_MEMO SET

      BUKRS   = IS_ZFI_GL_MEMO-BUKRS
      DSART   = IS_ZFI_GL_MEMO-DSART
      DATUM   = IS_ZFI_GL_MEMO-DATUM
      AVDAT   = IS_ZFI_GL_MEMO-AVDAT
      DISKB   = IS_ZFI_GL_MEMO-DISKB
      WRSHB   = IS_ZFI_GL_MEMO-WRSHB "Amount
      DISPW   = IS_ZFI_GL_MEMO-DISPW "Currency
*     DMSHB   = IS_ZFI_GL_MEMO-DMSHB
*     GSBER   = IS_ZFI_GL_MEMO-GSBER
      REFER   = IS_ZFI_GL_MEMO-REFER
      BNKKO   = IS_ZFI_GL_MEMO-BNKKO
      GRUPP   = IS_ZFI_GL_MEMO-GRUPP
*     WAERS   = IS_ZFI_GL_MEMO-WAERS

      WHERE WF_KEY = WFKEY1.

* Call BDC for Create Memo Record in FF63.
*****************************************
      PERFORM BDC_FF63.
      PERFORM CALL_TRNC.
      LEAVE TO SCREEN 0.
*****************************************

    WHEN OTHERS.
      CALL METHOD CL_GUI_CFW=>DISPATCH.
      IF SY-SUBRC <> 0.
        RAISE CNTL_ERROR.
      ENDIF.
  ENDCASE.

  CLEAR FCODE.

ENDMODULE. " USER_COMMAND_0200 INPUT
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF06.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  BDC_FF63
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM BDC_FF63 .
* First Screen Company Code and Planning type Update
  PERFORM F_FILL_BDC USING 'X' 'SAPMF40E'     '0100'.
  PERFORM F_FILL_BDC USING ' ' 'BDC_CURSOR'   'FDES-BUKRS'.
* PERFORM F_FILL_BDC USING ' ' 'BDC_OKCODE'   '=ONE'.
  PERFORM F_FILL_BDC USING ' ' 'FDES-BUKRS'   IS_ZFI_GL_MEMO-BUKRS.
  PERFORM F_FILL_BDC USING ' ' 'FDES-DSART'   IS_ZFI_GL_MEMO-DSART.
* Second Screen Update
  PERFORM F_FILL_BDC USING 'X' 'SAPMF40E'     '0101'.
* Date Convert to External


  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      DATE_INTERNAL            = IS_ZFI_GL_MEMO-DATUM
    IMPORTING
      DATE_EXTERNAL            = LS_DATUM
    EXCEPTIONS
      DATE_INTERNAL_IS_INVALID = 1
      OTHERS                   = 2.

*********

  CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
    EXPORTING
      DATE_INTERNAL            = IS_ZFI_GL_MEMO-AVDAT
    IMPORTING
      DATE_EXTERNAL            = LS_AVDAT
    EXCEPTIONS
      DATE_INTERNAL_IS_INVALID = 1
      OTHERS                   = 2.

*********

  LS_DISPW = IS_ZFI_GL_MEMO-DISPW.
  LS_WRSHB = IS_ZFI_GL_MEMO-WRSHB.

  CONDENSE LS_WRSHB.
*Convert Amount to Char

  WRITE IS_ZFI_GL_MEMO-WRSHB TO LS_WRSHB.

  CONDENSE LS_WRSHB.
*********
  PERFORM F_FILL_BDC USING ' ' 'FDES-DATUM'   LS_DATUM.
  PERFORM F_FILL_BDC USING ' ' 'FDES-AVDAT'   LS_AVDAT.
  PERFORM F_FILL_BDC USING ' ' 'RF40L-DISKB'  IS_ZFI_GL_MEMO-DISKB.
  PERFORM F_FILL_BDC USING ' ' 'FDES-WRSHB'   LS_WRSHB.            "Amount
  PERFORM F_FILL_BDC USING ' ' 'FDES-DISPW'   IS_ZFI_GL_MEMO-DISPW."CurrenY
  PERFORM F_FILL_BDC USING ' ' 'FDES-REFER'   IS_ZFI_GL_MEMO-REFER.
  PERFORM F_FILL_BDC USING ' ' 'FDES-SGTXT'   IS_ZFI_GL_MEMO-SGTXT.
  PERFORM F_FILL_BDC USING ' ' 'BDC_OKCODE'   '=UPD'.

ENDFORM.                    " BDC_FF63
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF07.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  F_FILL_BDC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_0006   text
*      -->P_0007   text
*      -->P_0008   text
*----------------------------------------------------------------------*
FORM F_FILL_BDC USING    LOC_FLAG
                         LOC_NAME
                         LOC_VALUE.

  CLEAR IT_BDCDATA.
  IF LOC_FLAG EQ SPACE.
    IT_BDCDATA-FNAM = LOC_NAME.
    IT_BDCDATA-FVAL = LOC_VALUE.
    CONDENSE IT_BDCDATA-FVAL.
  ELSE.
    IT_BDCDATA-PROGRAM  = LOC_NAME.
    IT_BDCDATA-DYNPRO   = LOC_VALUE.
    CONDENSE IT_BDCDATA-FVAL.
    IT_BDCDATA-DYNBEGIN = 'X'.
  ENDIF.

  APPEND IT_BDCDATA.

ENDFORM.                               " F_FILL_BDC
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF08.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  CALL_TRNC
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <-- nbsp="" p2="" span="" text="">
*----------------------------------------------------------------------*
FORM CALL_TRNC .
  REFRESH:
           IT_MESSAGES.

  CLEAR:
         IT_MESSAGES,
         WF_ERROR_TEXT,
         WG_ERROR_FLAG.

  CALL TRANSACTION 'FF63'  USING IT_BDCDATA  MODE 'N'
                   UPDATE 'S'  MESSAGES INTO IT_MESSAGES.
    IF SY-SUBRC NE 0.

    IF SY-BATCH NE SPACE.
      WRITE: / 'Transaction:', 'FF63'.
    ENDIF.
    PERFORM GET_MESSTAB USING WF_ERROR_TEXT.
    IF SY-BATCH NE SPACE.
      WRITE:/ WF_ERROR_TEXT.
      ULINE.
    ELSE.
      MESSAGE S000(ZWF1) WITH WF_ERROR_TEXT.
    ENDIF.

    WG_ERROR_FLAG = 'Y'.

  ELSE.

    WRITE:/ 'Memo Record has been created'.
    IS_ZFI_GL_MEMO-WF_KEY = IT_ZFI_GL_MEMO-WF_KEY.
* Triggering Workflow when Zero Balance

    LV_OBJ_KEY = IS_ZFI_GL_MEMO-WF_KEY.

* Memo Record Update in Table ZFI_GL_MEMO
    READ TABLE IT_MESSAGES INTO IS_MESSAGES INDEX 1.

    IS_ZFI_GL_MEMO-IDENR = IS_MESSAGES-MSGV1.

    UPDATE ZFI_GL_MEMO SET

    IDENR = IS_ZFI_GL_MEMO-IDENR

    WHERE WF_KEY = IS_ZFI_GL_MEMO-WF_KEY.
* Trigger Workflow After Memo Record Created

    CALL FUNCTION 'SAP_WAPI_CREATE_EVENT'
      EXPORTING
        OBJECT_TYPE = 'ZFI_GL_REC'
        OBJECT_KEY  = LV_OBJ_KEY
        EVENT       = 'APPR_MEMO'
        COMMIT_WORK = 'X'.

    LEAVE TO SCREEN 0.

  ENDIF.
ENDFORM.                    " CALL_TRNC
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUF09.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  GET_MESSTAB
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_WF_ERROR_TEXT  text
*----------------------------------------------------------------------*
FORM GET_MESSTAB  USING    P_WF_ERROR_TEXT.

  DATA: LOC_ERRMSG(80) TYPE C.
  CLEAR wg_error_flag.
  LOOP AT IT_MESSAGES.
    CHECK IT_MESSAGES-MSGTYP EQ 'E' OR
          IT_MESSAGES-MSGTYP EQ 'A'.
    IF IT_MESSAGES-MSGID EQ 'F5' AND
       IT_MESSAGES-MSGNR EQ '308' AND
       IT_MESSAGES-MSGTYP EQ 'E'.
      wg_error_flag = 'Y'.
    ENDIF.
    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID        = IT_MESSAGES-MSGID
        LANG      = 'EN'
        NO        = IT_MESSAGES-MSGNR
        V1        = IT_MESSAGES-MSGV1
        V2        = IT_MESSAGES-MSGV2
        V3        = IT_MESSAGES-MSGV3
        V4        = IT_MESSAGES-MSGV4
      IMPORTING
        MSG       = LOC_ERRMSG
      EXCEPTIONS
        NOT_FOUND = 1
        OTHERS    = 2.

    IF SY-SUBRC EQ 0.
      MOVE LOC_ERRMSG TO P_WF_ERROR_TEXT.
    ENDIF.
    EXIT.
  ENDLOOP.
  IF P_WF_ERROR_TEXT EQ SPACE.

    CALL FUNCTION 'FORMAT_MESSAGE'
      EXPORTING
        ID        = SY-MSGID
        LANG      = 'EN'
        NO        = SY-MSGNO
        V1        = SY-MSGV1
        V2        = SY-MSGV2
        V3        = SY-MSGV3
        V4        = SY-MSGV4
      IMPORTING
        MSG       = LOC_ERRMSG
      EXCEPTIONS
        NOT_FOUND = 1
        OTHERS    = 2.

    IF SY-SUBRC EQ 0.
      MOVE LOC_ERRMSG TO P_WF_ERROR_TEXT.
    ENDIF.

  ENDIF.

ENDFORM.                    " GET_MESSTAB
*********************************************************************************

*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  F4_DATUM  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE F4_DATUM INPUT.
  CALL FUNCTION 'F4_DATE'
    EXPORTING
      DATE_FOR_FIRST_MONTH = IS_ZFI_GL_MEMO-DATUM
*     DISPLAY              = ' '
*     FACTORY_CALENDAR_ID  = ' '
*     GREGORIAN_CALENDAR_FLAG            = ' '
*     HOLIDAY_CALENDAR_ID  = ' '
*     PROGNAME_FOR_FIRST_MONTH           = ' '
    IMPORTING
      SELECT_DATE          = IS_ZFI_GL_MEMO-DATUM
*     SELECT_WEEK          =
*     SELECT_WEEK_BEGIN    =
*     SELECT_WEEK_END      =
    EXCEPTIONS
*     CALENDAR_BUFFER_NOT_LOADABLE       = 1
*     DATE_AFTER_RANGE     = 2
*     DATE_BEFORE_RANGE    = 3
      DATE_INVALID         = 4
*     FACTORY_CALENDAR_NOT_FOUND         = 5
*     HOLIDAY_CALENDAR_NOT_FOUND         = 6
*     PARAMETER_CONFLICT   = 7
*     OTHERS               = 8
    .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDMODULE.                 " F4_DATUM  INPUT

*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  F4_AVDAT  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE F4_AVDAT INPUT.
  CALL FUNCTION 'F4_DATE'
    EXPORTING
      DATE_FOR_FIRST_MONTH = IS_ZFI_GL_MEMO-AVDAT
*     DISPLAY              = ' '
*     FACTORY_CALENDAR_ID  = ' '
*     GREGORIAN_CALENDAR_FLAG            = ' '
*     HOLIDAY_CALENDAR_ID  = ' '
*     PROGNAME_FOR_FIRST_MONTH           = ' '
    IMPORTING
      SELECT_DATE          = IS_ZFI_GL_MEMO-AVDAT
*     SELECT_WEEK          =
*     SELECT_WEEK_BEGIN    =
*     SELECT_WEEK_END      =
    EXCEPTIONS
*     CALENDAR_BUFFER_NOT_LOADABLE       = 1
*     DATE_AFTER_RANGE     = 2
*     DATE_BEFORE_RANGE    = 3
      DATE_INVALID         = 4
*     FACTORY_CALENDAR_NOT_FOUND         = 5
*     HOLIDAY_CALENDAR_NOT_FOUND         = 6
*     PARAMETER_CONFLICT   = 7
*     OTHERS               = 8
    .
  IF SY-SUBRC <> 0.
* Implement suitable error handling here
  ENDIF.

ENDMODULE.                 " F4_AVDAT  INPUT
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  VALUE_DSART  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE VALUE_DSART INPUT.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME     = 'FDES'
      FIELDNAME   = 'DSART'
      DYNPPROG    = PROGNAME
      DYNPNR      = DYNNUM
      DYNPROFIELD = 'IS_ZFI_GL_MEMO-DSART'.

ENDMODULE.                 " VALUE_DSART  INPUT

*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  VALUE_GRUPP  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE VALUE_GRUPP INPUT.

  CALL FUNCTION 'F4IF_FIELD_VALUE_REQUEST'
    EXPORTING
      TABNAME     = 'FDES'
      FIELDNAME   = 'GRUPP'
      DYNPPROG    = PROGNAME
      DYNPNR      = DYNNUM
      DYNPROFIELD = 'IS_ZFI_GL_MEMO-GRUPP'.

ENDMODULE.                 " VALUE_GRUPP  INPUT
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUI03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  VALUE_DISKB INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE VALUE_DISKB INPUT.

  GET PARAMETER ID 'WFKEY1' FIELD WFKEY1.

  SELECT SINGLE * FROM ZFI_GL_MEMO INTO IT_ZFI_GL_MEMO
           WHERE WF_KEY = WFKEY1.
  IF SY-SUBRC = 0.
    IS_ZFI_GL_MEMO-BUKRS = IT_ZFI_GL_MEMO-BUKRS.

    CALL FUNCTION 'CASH_FORECAST_DISKB_F4_HELP'
      EXPORTING
        I_BUKRS         = IS_ZFI_GL_MEMO-BUKRS
        I_XDISPLAY_ONLY = ' '
      IMPORTING
        E_DISKB         = IS_ZFI_GL_MEMO-DISKB.
  ENDIF.

ENDMODULE.                 " VALUE_DISKB  INPUT
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUO03.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  INIT  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE INIT OUTPUT.

  PROGNAME = SY-REPID.
  DYNNUM   = SY-DYNNR.
  CLEAR: FIELD_VALUE, DYNPRO_VALUES.
  FIELD_VALUE-FIELDNAME = 'IS_ZFI_GL_MEMO-DSART'.
  FIELD_VALUE-FIELDNAME = 'IS_ZFI_GL_MEMO-GRUPP'.
  FIELD_VALUE-FIELDNAME = 'IS_ZFI_GL_MEMO-DISPW'."Currency
*  FIELD_VALUE-FIELDNAME = 'IS_ZFI_GL_MEMO-WAERS'.
  FIELD_VALUE-FIELDNAME = 'IS_ZFI_GL_MEMO-WRSHB'."Amount
*  FIELD_VALUE-FIELDNAME = 'IS_ZFI_GL_MEMO-GSBER'.
  APPEND FIELD_VALUE TO DYNPRO_VALUES.

ENDMODULE.                 " INIT  OUTPUT
*********************************************************************************
*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUO04.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  VALUE_WRSHB  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE VALUE_WRSHB OUTPUT.

  GET PARAMETER ID 'WFKEY1' FIELD WFKEY1.

  SELECT SINGLE * FROM ZFI_GL_MEMO INTO IT_ZFI_GL_MEMO
           WHERE WF_KEY = WFKEY1.
  IF SY-SUBRC = 0.
    IS_ZFI_GL_MEMO-WRSHB = IT_ZFI_GL_MEMO-BALANCE.
*        IS_ZFI_GL_MEMO-DISPW = IT_ZFI_GL_MEMO-DISPW.

***
*        REFRESH DYNFIELDS.
*        DYNFIELDS-FIELDNAME = 'IS_ZFI_GL_MEMO-DISPW'.
*        DYNFIELDS-FLDVALUE = IS_ZFI_GL_MEMO-DISPW.

    DYNFIELDS-FIELDNAME = 'IS_ZFI_GL_MEMO-WRSHB'.
    DYNFIELDS-FIELDVALUE = IS_ZFI_GL_MEMO-WRSHB.
    APPEND DYNFIELDS.
* UPDATE THE DYNPRO VALUES.
    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        DYNAME     = PROGNAME
        DYNUMB     = DYNNUM
      TABLES
        DYNPFIELDS = DYNFIELDS
      EXCEPTIONS
        OTHERS     = 8.
  ENDIF.
*  IS_ZFI_GL_MEMO-WRSHB = IS_ZFI_GL_MEMO-WRSHB.

ENDMODULE.                 " VALUE_WRSHB  OUTPUT

*----------------------------------------------------------------------*
***INCLUDE ZFI_GL_RECONCILIATION_ACCOUO04.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  VALUE_DISPW  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE VALUE_DISPW OUTPUT.

  GET PARAMETER ID 'WFKEY1' FIELD WFKEY1.

  SELECT SINGLE * FROM ZFI_GL_MEMO INTO IT_ZFI_GL_MEMO
           WHERE WF_KEY = WFKEY1.
  IF SY-SUBRC = 0.
*        IS_ZFI_GL_MEMO-WRSHB = IT_ZFI_GL_MEMO-BALANCE.
    IS_ZFI_GL_MEMO-DISPW = IT_ZFI_GL_MEMO-DISPW.

***
*        REFRESH DYNFIELDS.
    DYNFIELDS-FIELDNAME = 'IS_ZFI_GL_MEMO-DISPW'.
    DYNFIELDS-FIELDVALUE = IS_ZFI_GL_MEMO-DISPW.

*        DYNFIELDS-FIELDNAME = 'IS_ZFI_GL_MEMO-WRSHB'.
*        DYNFIELDS-FLDVALUE = IS_ZFI_GL_MEMO-WRSHB.
*        APPEND DYNFIELDS.
* UPDATE THE DYNPRO VALUES.
    CALL FUNCTION 'DYNP_VALUES_UPDATE'
      EXPORTING
        DYNAME     = PROGNAME
        DYNUMB     = DYNNUM
      TABLES
        DYNPFIELDS = DYNFIELDS
      EXCEPTIONS
        OTHERS     = 8.
*  IS_ZFI_GL_MEMO-DISPW = IS_ZFI_GL_MEMO-DISPW.
  ENDIF.
ENDMODULE.                 " VALUE_DISPW  OUTPUT
*********************************************************************************


Input Screen:
Input Screen
Input Screen


*********************************************************************************
After Execute Output Screen:
OutPut Submit Screen

*********************************************************************************
Differences in Bank 0,00: -  Balance is ZERO
Once Submit then Workflow Approval will be started in this Scenario:

*********************************************************************************
Input Screen:Input Screen

*********************************************************************************
Out Put Screen:
*********************************************************************************
Differences in Bank 100.000.000,00-: -  Balance is Varies

Once Submit then Below Input Screen Will be displayed in this Scenario:
*********************************************************************************Create Memo Input ScreenMemo Input Screen


*********************************************************************************
Background FF63 Creates Memo Record by BDC program.
*********************************************************************************
And then Workflow also will be triggered for Approval
*********************************************************************************

Business Object: ZFI_GL_REC

Object type  ZFI_GL_REC FI GL Bank Reconciliation For The Month

       Interfaces
       Key fields

           ZFI_GL_RECONCILE.ZWF_KEY                        Workflow Key

       Attributes
       Methods

           ZFI_GL_RECONCILE.ExistenceCheck                 Check existence of object
           ZFI_GL_RECONCILE.Display                        Display object
           ZFI_GL_RECONCILE.Method_Reconciliation_1        FI GL Bank Reconciliation For The Month
           ZFI_GL_RECONCILE.Method_Reconciliation_2        Method_Reconciliation_2
           ZFI_GL_RECONCILE.Initiatoremail                 Initiator Email MEMO
           ZFI_GL_RECONCILE.Method_MemoRecord_1            FI GL Memo Record
           ZFI_GL_RECONCILE.Method_MemoRecord_2            Method_MemoRecord_2

       Events

           ZFI_GL_RECONCILE.Submitted                      Submitted
           ZFI_GL_RECONCILE.APPR_MEMO                      APPROVE MEMO


*********************************************************************
Key field             ZWF_KEY
Object type           ZFI_GL_REC
Release               740
Status                implemented


 Name                 Workflow Key
 Description          Workflow Key


 Reference table      ZFI_GL_RECONCILE

 Reference field      WF_KEY

*********************************************************************

*****           Implementation of object type      *****
INCLUDE .
BEGIN_DATA OBJECT
" Do not change.. DATA is generated
* only private members may be inserted into structure private
DATA:
" begin of private,
"   to declare private attributes remove comments and
"   insert private attributes here ...
" end of private,
  
BEGIN OF KEY,
      ZWF_KEY 
LIKE ZFI_GL_RECONCILE-WF_KEY,
  
END OF KEY.
END_DATA OBJECT
" Do not change.. DATA is generated
TABLESZFI_GL_RECONCILE,
        ZFI_GL_MEMO
.
*

*****************************************************************************************************
* Method for Get Initiator Email ID
BEGIN_METHOD INITIATOREMAIL 
CHANGING CONTAINER.

DATAUSRID TYPE SYUNAME,
      E_ADDRESSSTRINGS 
TYPE  AD_SMTPADR,
      TMP_ADDRESSSTRINGS 
TYPE SOXNA-FULLNAME,
      INITIATOR 
TYPE SY-UNAME.

DATABEGIN OF ADDRESSSTRINGS OCCURS 0,
      ADDRESSSTRINGS 
TYPE SOXNA-FULLNAME,
      
END OF ADDRESSSTRINGS.
DATALT_ZFI_GL_MEMO LIKE  ZFI_GL_MEMO OCCURS WITH HEADER LINE.

SELECT SINGLE FROM ZFI_GL_MEMO INTO LT_ZFI_GL_MEMO
               
WHERE WF_KEY OBJECT-KEY-ZWF_KEY.

USRID 
LT_ZFI_GL_MEMO-INITIATOR.

IF SY-SUBRC 0.

  
CALL FUNCTION 'FTR_CORR_CHECK_EMAIL_SAP_USER'
    
EXPORTING
      I_USER              
USRID
    
IMPORTING
      E_EMAIL_ADDRESS     
E_ADDRESSSTRINGS
    
EXCEPTIONS
      MAIL_ADDRESS        
1
      DETERMINATION_ERROR 
2
      
OTHERS              3.
  
IF SY-SUBRC <> 0.
    
CLEAR E_ADDRESSSTRINGS.
  
ELSE.
    
IF SY-SYSID EQ 'SEP' OR SY-SYSID EQ 'SED' OR SY-SYSID EQ 'SEQ'.
      TMP_ADDRESSSTRINGS 
E_ADDRESSSTRINGS.
      ADDRESSSTRINGS
-ADDRESSSTRINGS TMP_ADDRESSSTRINGS.
      
APPEND ADDRESSSTRINGS.
      
CLEAR:ADDRESSSTRINGS.
    
ENDIF.
  
ENDIF.

  SWC_SET_TABLE CONTAINER 
'AddressStrings' ADDRESSSTRINGS.
ENDIF.

END_METHOD
.

*****************************************************************************************************
* Method for Reconc Approval
BEGIN_METHOD METHOD_RECONCILIATION_1 
CHANGING CONTAINER.
DATAWF_STATUS TYPE ZFI_GL_RECONCILE-WF_STATUS.
DATALT_ZFI_GL_RECONCILE LIKE ZFI_GL_RECONCILE OCCURS WITH HEADER LINE.

CALL FUNCTION 'ZFI_GL_RECONCILIATION'
  
EXPORTING
    WF_KEY              
OBJECT-KEY-ZWF_KEY
  
IMPORTING
    LT_ZFI_GL_RECONCILE 
LT_ZFI_GL_RECONCILE
  
EXCEPTIONS
    EXIT_CANCELLED      
1
    ABORT               
2
    INVALID_NUMBER      
3
    
OTHERS              4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LT_ZFI_GL_RECONCILE.
SWC_SET_TABLE CONTAINER 
'LT_ZFI_GL_RECONCILE' LT_ZFI_GL_RECONCILE.

DATALV_WIID  TYPE SWW_WIID.

IF LT_ZFI_GL_RECONCILE-WF_STATUS IS INITIAL.

  
CALL FUNCTION 'SAP_WAPI_PUT_BACK_WORKITEM'
    
EXPORTING
      WORKITEM_ID 
LV_WIID.
  
SET SCREEN 0.
  
LEAVE SCREEN.
ENDIF.

END_METHOD
.

*****************************************************************************************************
* Method for Memo Record Approval
BEGIN_METHOD METHOD_MEMORECORD_1 
CHANGING CONTAINER.

DATAWIID  TYPE SWW_WIID.

SWC_GET_ELEMENT CONTAINER 
'WIID' WIID.

*GET PARAMETER ID 'WFKEY' FIELD WFKEY.

DATAWF_STATUS TYPE ZFI_GL_MEMO-WF_STATUS.
DATALT_ZFI_GL_MEMO LIKE ZFI_GL_MEMO OCCURS WITH HEADER LINE.

CALL FUNCTION 'ZFI_GL_MEMO_RECORD'
  
EXPORTING
    WF_KEY         
OBJECT-KEY-ZWF_KEY
  
IMPORTING
    LT_ZFI_GL_MEMO 
LT_ZFI_GL_MEMO
  
EXCEPTIONS
    EXIT_CANCELLED 
1
    ABORT          
2
    INVALID_NUMBER 
3
    
OTHERS         4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LT_ZFI_GL_MEMO.
SWC_SET_TABLE CONTAINER 
'LT_ZFI_GL_MEMO' LT_ZFI_GL_MEMO.
BREAK-POINT.
IF LT_ZFI_GL_MEMO-WF_STATUS IS INITIAL.

  
CALL FUNCTION 'SAP_WAPI_PUT_BACK_WORKITEM'
    
EXPORTING
      WORKITEM_ID 
WIID.
  
SET SCREEN 0.
  
LEAVE SCREEN.

ENDIF.

END_METHOD
.
******************************************************************************************************
* 2ND LEVEL WF APPROVAL
******************************************************************************************************
* Method for Reconc Approval
BEGIN_METHOD METHOD_RECONCILIATION_2 
CHANGING CONTAINER.
DATAWF_STATUS TYPE ZFI_GL_RECONCILE-WF_STATUS.
DATALT_ZFI_GL_RECONCILE LIKE ZFI_GL_RECONCILE OCCURS WITH HEADER LINE.

CALL FUNCTION 'ZFI_GL_RECONCILIATION'
  
EXPORTING
    WF_KEY              
OBJECT-KEY-ZWF_KEY
  
IMPORTING
    LT_ZFI_GL_RECONCILE 
LT_ZFI_GL_RECONCILE
  
EXCEPTIONS
    EXIT_CANCELLED      
1
    ABORT               
2
    INVALID_NUMBER      
3
    
OTHERS              4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LT_ZFI_GL_RECONCILE.
SWC_SET_TABLE CONTAINER 
'LT_ZFI_GL_RECONCILE' LT_ZFI_GL_RECONCILE.

DATALV_WIID  TYPE SWW_WIID.

IF LT_ZFI_GL_RECONCILE-WF_STATUS NE '2APPROVED' OR LT_ZFI_GL_RECONCILE-WF_STATUS NE '2REJECTED'.

  
CALL FUNCTION 'SAP_WAPI_PUT_BACK_WORKITEM'
    
EXPORTING
      WORKITEM_ID 
LV_WIID.
  
SET SCREEN 0.
  
LEAVE SCREEN.
ENDIF.

END_METHOD
.

*****************************************************************************************************
* Method for Memo Record Approval
BEGIN_METHOD METHOD_MEMORECORD_2 
CHANGING CONTAINER.

DATAWIID  TYPE SWW_WIID.

SWC_GET_ELEMENT CONTAINER 
'WIID' WIID.

*GET PARAMETER ID 'WFKEY' FIELD WFKEY.

DATAWF_STATUS TYPE ZFI_GL_MEMO-WF_STATUS.
DATALT_ZFI_GL_MEMO LIKE ZFI_GL_MEMO OCCURS WITH HEADER LINE.

CALL FUNCTION 'ZFI_GL_MEMO_RECORD'
  
EXPORTING
    WF_KEY         
OBJECT-KEY-ZWF_KEY
  
IMPORTING
    LT_ZFI_GL_MEMO 
LT_ZFI_GL_MEMO
  
EXCEPTIONS
    EXIT_CANCELLED 
1
    ABORT          
2
    INVALID_NUMBER 
3
    
OTHERS         4.
IF SY-SUBRC <> 0.
* Implement suitable error handling here
ENDIF.
APPEND LT_ZFI_GL_MEMO.
SWC_SET_TABLE CONTAINER 
'LT_ZFI_GL_MEMO' LT_ZFI_GL_MEMO.

IF LT_ZFI_GL_MEMO-WF_STATUS NE '2APPROVED' OR LT_ZFI_GL_MEMO-WF_STATUS NE '2REJECTED'.

  
CALL FUNCTION 'SAP_WAPI_PUT_BACK_WORKITEM'
    
EXPORTING
      WORKITEM_ID 
WIID.
  
SET SCREEN 0.
  
LEAVE SCREEN.

ENDIF.

END_METHOD
.
************************************************************************************************

FUNCTION ZFI_GL_RECONCILIATION.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(WF_KEY) TYPE  ZFI_GL_RECONCILE-WF_KEY
*"  EXPORTING
*"     REFERENCE(LT_ZFI_GL_RECONCILE) LIKE  ZFI_GL_RECONCILE STRUCTURE
*"        ZFI_GL_RECONCILE
*"  EXCEPTIONS
*"      EXIT_CANCELLED
*"      ABORT
*"      INVALID_NUMBER
*"----------------------------------------------------------------------
  TABLES: ZFI_GL_RECONCILE.


  SELECT SINGLE * FROM ZFI_GL_RECONCILE INTO LT_ZFI_GL_RECONCILE
                 WHERE WF_KEY = WF_KEY.
  WFKEY = WF_KEY.
  SET PARAMETER ID 'WFKEY' FIELD WFKEY.
  CLEAR WFKEY.

  IF SY-SUBRC = 0.
*    READ TABLE LT_ZFI_GL_RECONCILE INTO IS_ZFI_GL_RECONCILE WITH TABLE KEY WF_KEY = WF_KEY.
  ENDIF.


* Call Smartform
***************************
  IF SY-SUBRC = 0.
****
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        FORMNAME = 'ZFI_RECONCILIATION'
      IMPORTING
        FM_NAME  = FM_NAME.

    CALL FUNCTION 'SSF_GET_DEVICE_TYPE'
      EXPORTING
        I_LANGUAGE    = V_LANGUAGE
        I_APPLICATION = 'SAPDEFAULT'
      IMPORTING
        E_DEVTYPE     = V_E_DEVTYPE.
    OUTPUT_OPTIONS-TDPRINTER = V_E_DEVTYPE.

***********popup of the smartform printer blocking logic

    OUTPUT_OPTIONS-TDNOPREV      = 'X'.
    CONTROL_PARAMETERS-NO_DIALOG = 'X'.

    OUTPUT_OPTIONS-TDDEST = 'LP01'.

    CONTROL_PARAMETERS-GETOTF    = 'X'.

    CALL FUNCTION FM_NAME
      EXPORTING
*       ARCHIVE_INDEX        =
*       ARCHIVE_INDEX_TAB    =
*       ARCHIVE_PARAMETERS   =
        CONTROL_PARAMETERS   = CONTROL_PARAMETERS
*       MAIL_APPL_OBJ        =
*       MAIL_RECIPIENT       =
*       MAIL_SENDER          =
        OUTPUT_OPTIONS       = OUTPUT_OPTIONS
        USER_SETTINGS        = 'X'
        BUDAT                = LT_ZFI_GL_RECONCILE-POST_DATE
        BUKRS                = LT_ZFI_GL_RECONCILE-BUKRS
        GJAHR                = LT_ZFI_GL_RECONCILE-FYEAR
        HKONT                = LT_ZFI_GL_RECONCILE-GLACC
        SKAT                 = LT_ZFI_GL_RECONCILE-SKAT
        P_DMBTR              = LT_ZFI_GL_RECONCILE-BANK_BALANCE
        BANKN                = LT_ZFI_GL_RECONCILE-BANKN
        WRBTR                = LT_ZFI_GL_RECONCILE-BOOK_BALANCE
        WAERS                = LT_ZFI_GL_RECONCILE-WAERS
*       dmbtr                = is_final-dmbtr
*       waers_lc             = is_final-waers_lc
*       dmbe2                = is_final-dmbe2
*       hwae2                = is_final-hwae2
*       dmbe3                = is_final-dmbe3
*       hwae3                = is_final-hwae3
        BANLANCE             = LT_ZFI_GL_RECONCILE-BALANCE
      IMPORTING
        DOCUMENT_OUTPUT_INFO = DOCUMENT_OUTPUT_INFO
        JOB_OUTPUT_INFO      = JOB_OUTPUT_INFO
        JOB_OUTPUT_OPTIONS   = JOB_OUTPUT_OPTIONS
      EXCEPTIONS
        FORMATTING_ERROR     = 1
        INTERNAL_ERROR       = 2
        SEND_ERROR           = 3
        USER_CANCELED        = 4
*       OTHERS               = 5
      .
    IF SY-SUBRC <> 0.
* Implement suitable error handling here
    ENDIF.

    CALL FUNCTION 'CONVERT_OTF'
      EXPORTING
        FORMAT                = 'PDF'
      IMPORTING
        BIN_FILESIZE          = V_BIN_FILESIZE
*       BIN_FILE              = V_BIN_FILE
      TABLES
        OTF                   = JOB_OUTPUT_INFO-OTFDATA
        LINES                 = T_PDF_TAB
      EXCEPTIONS
        ERR_MAX_LINEWIDTH     = 1
        ERR_FORMAT            = 2
        ERR_CONV_NOT_POSSIBLE = 3
        ERR_BAD_OTF           = 4
        OTHERS                = 5.
    IF SY-SUBRC <> 0.
****
***** MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
*****         WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
****
    ENDIF.

    LOOP AT T_PDF_TAB INTO LS_PDF.
      ASSIGN LS_PDF TO  CASTING.
      CONCATENATE LV_CONTENT  INTO LV_CONTENT IN BYTE MODE.
    ENDLOOP.
****
    CALL SCREEN 0100.

    SELECT SINGLE * FROM ZFI_GL_RECONCILE INTO LT_ZFI_GL_RECONCILE
                   WHERE WF_KEY = WF_KEY.
****
  ENDIF.

***************************

ENDFUNCTION.


*********************************************************************
InboxInbox


*********************************************************************
Approval ScreenApproval Screen


*********************************************************************

PROCESS BEFORE OUTPUT.
  MODULE STATUS_0100.

PROCESS AFTER INPUT.
MODULE USER_COMMAND_0100.


*********************************************************************


*----------------------------------------------------------------------*
***INCLUDE LZFI_GL_MEMOO01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  STATUS_0100  OUTPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE status_0100 OUTPUT.
  SET PF-STATUS 'WF-STATUS'.
  SET TITLEBAR 'WF-STATUS'.

  CREATE OBJECT container
    EXPORTING
      container_name = 'CUST_CONT'.

  CREATE OBJECT control
    EXPORTING
      parent = container.

* Convert xstring to binary table to pass to the LOAD_DATA method
  CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
    EXPORTING
      buffer     = lv_content
    TABLES
      binary_tab = lt_data.

* Load the HTML
  CALL METHOD control->load_data(
    EXPORTING
      type                 = 'application'
      subtype              = 'pdf'
    IMPORTING
      assigned_url         = lv_url
    CHANGING
      data_table           = lt_data
    EXCEPTIONS
      dp_invalid_parameter = 1
      dp_error_general     = 2
      cntl_error           = 3
      OTHERS               = 4 ).

* Show it
  CALL METHOD control->show_url(
      url      = lv_url
      in_place = 'X' ).

ENDMODULE.                 " STATUS_0100  OUTPUT




*********************************************************************

*----------------------------------------------------------------------*
***INCLUDE LZFI_GL_MEMOI01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Module  USER_COMMAND_0100  INPUT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.

  GET PARAMETER ID 'WFKEY' FIELD WFKEY.

  FCODE = SY-UCOMM.
  CASE FCODE.
    WHEN 'STOP' OR 'CANCEL' OR 'EXIT' OR 'BACK'.
      CLEAR SY-UCOMM.
****
      LEAVE TO SCREEN 0.
*      CALL TRANSACTION 'SBWP' AND SKIP FIRST SCREEN.
****
    WHEN FCODE_CANCEL.
      IF NOT CONTROL IS INITIAL.
        CALL METHOD CONTROL->FREE.
        IF SY-SUBRC <> 0.
          RAISE CNTL_ERROR.
        ENDIF.
        FREE CONTROL.
      ENDIF.
      IF NOT CONTAINER IS INITIAL.
        CALL METHOD CONTAINER->FREE.
        IF SY-SUBRC <> 0.
          RAISE CNTL_ERROR.
        ENDIF.
        FREE CONTAINER.
      ENDIF.
      LEAVE TO SCREEN 0.

    WHEN 'APPROVE'.

      SELECT SINGLE * FROM ZFI_GL_MEMO INTO LT_ZFI_GL_MEMO
                   WHERE WF_KEY = WFKEY.
      IF SY-SUBRC = 0.

        IF LT_ZFI_GL_MEMO-APPROVERBY1 IS INITIAL AND LT_ZFI_GL_MEMO-APPROVERNAME1 IS INITIAL.

          LS_USER-SAPNAME = SY-UNAME.

          CALL FUNCTION 'SO_USER_READ_API1'
            EXPORTING
              USER            = LS_USER
*             PREPARE_FOR_FOLDER_ACCESS = ' '
            IMPORTING
              USER_DATA       = LS_USERDATA
            EXCEPTIONS
              USER_NOT_EXIST  = 1
              PARAMETER_ERROR = 2
              X_ERROR         = 3
              OTHERS          = 4.

          UPDATE ZFI_GL_MEMO SET WF_STATUS = '1APPROVED'
                                      APPROVERBY1   = SY-UNAME
                                      APPROVERNAME1 = LS_USERDATA-FULLNAME
                                      APPROVALDATE1 = SY-DATUM
                                  WHERE WF_KEY = WFKEY.
          COMMIT WORK.
          LT_ZFI_GL_MEMO-APPROVERBY1    = SY-UNAME.
          LT_ZFI_GL_MEMO-APPROVERNAME1  = LS_USERDATA-FULLNAME.
          LT_ZFI_GL_MEMO-APPROVALDATE1  = SY-DATUM.
          LT_ZFI_GL_MEMO-WF_STATUS      = '1APPROVED'.
          APPEND LT_ZFI_GL_MEMO.
          COMMIT WORK.
        ELSEIF
          LT_ZFI_GL_MEMO-APPROVERBY1 IS NOT INITIAL AND LT_ZFI_GL_MEMO-APPROVERNAME1 IS NOT INITIAL AND
          LT_ZFI_GL_MEMO-APPROVERBY2 IS INITIAL AND LT_ZFI_GL_MEMO-APPROVERNAME2 IS INITIAL.

          LS_USER-SAPNAME = SY-UNAME.

          CALL FUNCTION 'SO_USER_READ_API1'
            EXPORTING
              USER            = LS_USER
            IMPORTING
              USER_DATA       = LS_USERDATA
            EXCEPTIONS
              USER_NOT_EXIST  = 1
              PARAMETER_ERROR = 2
              X_ERROR         = 3
              OTHERS          = 4.

          UPDATE ZFI_GL_MEMO SET WF_STATUS  = '2APPROVED'
                              APPROVERBY2   = SY-UNAME
                              APPROVERNAME2 = LS_USERDATA-FULLNAME
                              APPROVALDATE2 = SY-DATUM
                          WHERE WF_KEY = WFKEY.
          COMMIT WORK.

          LT_ZFI_GL_MEMO-APPROVERBY2    = SY-UNAME.
          LT_ZFI_GL_MEMO-APPROVERNAME2  = LS_USERDATA-FULLNAME.
          LT_ZFI_GL_MEMO-APPROVALDATE2  = SY-DATUM.
          LT_ZFI_GL_MEMO-WF_STATUS      = '2APPROVED'.
          APPEND LT_ZFI_GL_MEMO.
          COMMIT WORK.
        ENDIF.
      ENDIF.
      LEAVE TO SCREEN 0.

    WHEN 'REJECT'.

      SELECT SINGLE * FROM ZFI_GL_MEMO INTO LT_ZFI_GL_MEMO
             WHERE WF_KEY = WFKEY.
      IF SY-SUBRC = 0.

        IF LT_ZFI_GL_MEMO-APPROVERBY1 IS INITIAL AND LT_ZFI_GL_MEMO-APPROVERNAME1 IS INITIAL.

* Pop-up editor for Reject comments

*-- Calling Text Editor for getting User Comments
          CLEAR CH_TEXT.
          CALL FUNCTION 'CATSXT_SIMPLE_TEXT_EDITOR'
            EXPORTING
              IM_TITLE        = 'Rejection Reason'
              IM_DISPLAY_MODE = SPACE
              IM_START_COLUMN = 10
              IM_START_ROW    = 10
            CHANGING
              CH_TEXT         = CH_TEXT
            EXCEPTIONS
              OTHERS          = 01.
          CASE SY-SUBRC.
            WHEN 0.            " OK
            WHEN OTHERS.       " to be implemented
          ENDCASE.
          GIT_TEXT[] = CH_TEXT[].

          LOOP AT GIT_TEXT[] INTO LIT_TEXT.

            IF SY-TABIX = 1.
              IT_TEXT = LIT_TEXT.
            ELSE.
              CONCATENATE IT_TEXT LIT_TEXT INTO IT_TEXT.
            ENDIF.

          ENDLOOP.
          LT_ZFI_GL_MEMO-COMMENTS = IT_TEXT.
          CLEAR IT_TEXT.

* Update data in the table ZFI_GL_MEMO
          LS_USER-SAPNAME = SY-UNAME.

          CALL FUNCTION 'SO_USER_READ_API1'
            EXPORTING
              USER            = LS_USER
            IMPORTING
              USER_DATA       = LS_USERDATA
            EXCEPTIONS
              USER_NOT_EXIST  = 1
              PARAMETER_ERROR = 2
              X_ERROR         = 3
              OTHERS          = 4.

          UPDATE ZFI_GL_MEMO SET WF_STATUS = '1REJECTED'
                                      APPROVERBY1   = SY-UNAME
                                      APPROVERNAME1 = LS_USERDATA-FULLNAME
                                      APPROVALDATE1 = SY-DATUM
                                      COMMENTS      = LT_ZFI_GL_MEMO-COMMENTS
                                  WHERE WF_KEY = WFKEY.
          COMMIT WORK.

          LT_ZFI_GL_MEMO-APPROVERBY1    = SY-UNAME.
          LT_ZFI_GL_MEMO-APPROVERNAME1  = LS_USERDATA-FULLNAME.
          LT_ZFI_GL_MEMO-APPROVALDATE1  = SY-DATUM.
          LT_ZFI_GL_MEMO-WF_STATUS      = '1REJECTED'.
          LT_ZFI_GL_MEMO-COMMENTS       = LT_ZFI_GL_MEMO-COMMENTS.
          APPEND LT_ZFI_GL_MEMO.
          COMMIT WORK.
        ELSEIF
          LT_ZFI_GL_MEMO-APPROVERBY1 IS NOT INITIAL AND LT_ZFI_GL_MEMO-APPROVERNAME1 IS NOT INITIAL AND
          LT_ZFI_GL_MEMO-APPROVERBY2 IS INITIAL AND LT_ZFI_GL_MEMO-APPROVERNAME2 IS INITIAL.

          LS_USER-SAPNAME = SY-UNAME.
* Pop-up editor for Reject comments

*-- Calling Text Editor for getting User Comments
          CLEAR CH_TEXT.
          CALL FUNCTION 'CATSXT_SIMPLE_TEXT_EDITOR'
            EXPORTING
              IM_TITLE        = 'Rejection Reason'
              IM_DISPLAY_MODE = SPACE
              IM_START_COLUMN = 10
              IM_START_ROW    = 10
            CHANGING
              CH_TEXT         = CH_TEXT
            EXCEPTIONS
              OTHERS          = 01.
          CASE SY-SUBRC.
            WHEN 0.            " OK
            WHEN OTHERS.       " to be implemented
          ENDCASE.
          GIT_TEXT[] = CH_TEXT[].

          LOOP AT GIT_TEXT[] INTO LIT_TEXT.

            IF SY-TABIX = 1.
              IT_TEXT = LIT_TEXT.
            ELSE.
              CONCATENATE IT_TEXT LIT_TEXT INTO IT_TEXT.
            ENDIF.

          ENDLOOP.
          LT_ZFI_GL_MEMO-COMMENTS = IT_TEXT.
          CLEAR IT_TEXT.

* Update data in the table  ZFI_GL_MEMO
          CALL FUNCTION 'SO_USER_READ_API1'
            EXPORTING
              USER            = LS_USER
            IMPORTING
              USER_DATA       = LS_USERDATA
            EXCEPTIONS
              USER_NOT_EXIST  = 1
              PARAMETER_ERROR = 2
              X_ERROR         = 3
              OTHERS          = 4.

          UPDATE ZFI_GL_MEMO SET WF_STATUS  = '2REJECTED'
                              APPROVERBY2   = SY-UNAME
                              APPROVERNAME2 = LS_USERDATA-FULLNAME
                              APPROVALDATE2 = SY-DATUM
                             COMMENTS       = LT_ZFI_GL_MEMO-COMMENTS
                         WHERE WF_KEY = WFKEY.
          COMMIT WORK.

          LT_ZFI_GL_MEMO-APPROVERBY2    = SY-UNAME.
          LT_ZFI_GL_MEMO-APPROVERNAME2  = LS_USERDATA-FULLNAME.
          LT_ZFI_GL_MEMO-APPROVALDATE2  = SY-DATUM.
          LT_ZFI_GL_MEMO-WF_STATUS      = '2REJECTED'.
          LT_ZFI_GL_MEMO-COMMENTS       = LT_ZFI_GL_MEMO-COMMENTS.
          APPEND LT_ZFI_GL_MEMO.
          COMMIT WORK.
        ENDIF.
      ENDIF.
      LEAVE TO SCREEN 0.

    WHEN OTHERS.
      CALL METHOD CL_GUI_CFW=>DISPATCH.
      IF SY-SUBRC <> 0.
        RAISE CNTL_ERROR.
      ENDIF.
  ENDCASE.

  CLEAR FCODE.
  SELECT SINGLE * FROM ZFI_GL_MEMO INTO LT_ZFI_GL_MEMO
     WHERE WF_KEY = WFKEY.

ENDMODULE.                 " USER_COMMAND_0100  INPUT


*********************************************************************

Smartforms

ZFI_RECONCILIATION

Import:
ARCHIVE_INDEX      TYPE      TOA_DARA
ARCHIVE_INDEX_TAB  TYPE      TSFDARA
ARCHIVE_PARAMETERS TYPE      ARC_PARAMS
CONTROL_PARAMETERS         TYPE      SSFCTRLOP
MAIL_APPL_OBJ      TYPE      SWOTOBJID
MAIL_RECIPIENT      TYPE      SWOTOBJID
MAIL_SENDER        TYPE      SWOTOBJID
OUTPUT_OPTIONS     TYPE      SSFCOMPOP
USER_SETTINGS      TYPE      TDBOOL
BUDAT    TYPE      BUDAT
BUKRS    TYPE      BUKRS
GJAHR    TYPE      GJAHR
HKONT    TYPE      HKONT
SKAT      TYPE      TXT50
P_DMBTR  TYPE      DMBTR
BANKN    TYPE      BANKN
WRBTR    TYPE      WRBTR
WAERS    TYPE      WAERS
BANLANCE TYPE      WRBTR

Export:
DOCUMENT_OUTPUT_INFO       TYPE      SSFCRESPD
JOB_OUTPUT_INFO    TYPE      SSFCRESCL
JOB_OUTPUT_OPTIONS TYPE      SSFCRESOP

Exceptions:
FORMATTING_ERROR
INTERNAL_ERROR
SEND_ERROR
USER_CANCELED

Global Data:
ST_BAL_SHT         TYPE      ZST_GLT0
AMT_CURRENT       TYPE      STRING
AMT_PREVIOUS       TYPE      STRING
FORM_NAME         TYPE      STRING
GV_COUNT TYPE      INT4
IT_LINE    TYPE      INT4
PAGE_BREAK         TYPE      C1
Currency Fields:
ST_BAL_SHT-TSLVT                                                                                                                                                 CURR
ST_BAL_SHT-TSL01                                                                                                                                                 CURR
ST_BAL_SHT-TSL02                                                                                                                                                 CURR
ST_BAL_SHT-HSLVT                                                                                                                                                 CURR
ST_BAL_SHT-HSL01                                                                                                                                                 CURR
ST_BAL_SHT-HSL02                                                                                                                                                 CURR



*********************************************************************

ZFI_MEMO_RECORD

Import:
BANKN TYPE BANKN
WRBTR TYPE WRBTR
WAERS TYPE WAERS
BANLANCE TYPE WRBTR
IDENR TYPE IDENR

                                                                                                                                    
                       
*********************************************************************

RULE:


FM: ZFI_GL_RECON_MEMO_RULE_AGENT

FUNCTION ZFI_GL_RECON_MEMO_RULE_AGENT.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  TABLES
*"      AC_CONTAINER STRUCTURE  SWCONT
*"      ACTOR_TAB STRUCTURE  SWHACTOR
*"  EXCEPTIONS
*"      NOBODY_FOUND
*"----------------------------------------------------------------------
  TABLES: ZFI_GL_REC_AGENT.

  INCLUDE .

  DATA: BUKRS TYPE ZFI_GL_REC_AGENT-BUKRS,
        LEVEL2 TYPE ZFI_GL_REC_AGENT-LEVEL2.


  SWC_GET_ELEMENT AC_CONTAINER 'BUKRS' BUKRS.
  SWC_GET_ELEMENT AC_CONTAINER 'LEVEL2' LEVEL2.

  SELECT SINGLE *
    FROM ZFI_GL_REC_AGENT
    WHERE BUKRS = BUKRS
    AND LEVEL2 = LEVEL2.

  IF SY-SUBRC EQ 0.
    ACTOR_TAB-OTYPE = 'US'.
    ACTOR_TAB-OBJID = ZFI_GL_REC_AGENT-BNAME.
    APPEND ACTOR_TAB.
    CLEAR ACTOR_TAB.
  ELSE.
    RAISE NOBODY_FOUND.
  ENDIF.

ENDFUNCTION.


*********************************************************************Rule Rule
*********************************************************************

Workflow Template


*********************************************************************