Skip to Content
0
Former Member
Sep 10, 2007 at 04:16 AM

Urgent Plsseeeeeeeeeeeee Currency Feild

375 Views

Hi Experts,

I need to display Output in ALV when i press print button a spool need to be generated.

I am having two currency feilds one i am getting from database and the other i am calulating in the program which is multipled with percent feild.

In my program if i comment the caluclated currency feild feild catlog every thing is fine the spool is generated. But if i un comment the program is going to DUMP.

i am attching the code below . I bold code is the caluclated currency field.

&----


*& Report ZAFGU070

*&

&----


REPORT ZAFGU070 NO STANDARD PAGE HEADING

  • line-size 132 V05

  • line-count 65 V05

LINE-SIZE 170 "V05

LINE-COUNT 58 "V05

MESSAGE-ID ZF.

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

  • CONSTANTS *

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

CONSTANTS : C_COMP_CODE TYPE BUKRS VALUE '0001', " constant fields

C_SPL_PURP_ACCT TYPE HKONT VALUE '710000',

C_NET_AMT TYPE P DECIMALS 2 VALUE '1.00'.

CONSTANTS : C_CHECK TYPE C VALUE 'X', " constant fields

C_PROJ_REPOST TYPE BLART VALUE 'IL',

C_GI_OR_GD TYPE BLART VALUE 'WL',

C_DEBIT TYPE SHKZG VALUE 'S',

C_DEBIT_IND TYPE BSCHL VALUE '40',

C_CREDIT_IND TYPE BSCHL VALUE '50',

C_LANG TYPE SPRAS VALUE 'E'.

CONSTANTS : C_TCODE1(03) TYPE C VALUE 'VL%',

C_CON_LAND1 TYPE LAND1 VALUE 'US',

C_REC_TYPE TYPE RRCTY VALUE '0'.

CONSTANTS : BEGIN OF IS_CONST, " constant fields

PROG_HEAD(08) TYPE C VALUE 'SAPMF05A', " header prog

PROG_CODG(08) TYPE C VALUE 'SAPLKACB', " coding block

DYN_0002(04) TYPE C VALUE '0002', " dynpro 0002

DYN_0100(04) TYPE C VALUE '0100', " dynpro 0100

DYN_0300(04) TYPE C VALUE '0300', " dynpro 0300

MKOAR(01) TYPE C VALUE 'D', " account type

PERIV TYPE PERIV VALUE 'AM', " fisc yr variant

CURRENCY TYPE WAERS VALUE 'USD', " currency

RATE(09) TYPE C VALUE '0' , " exchange rate

DOC_TYPE(02) TYPE C VALUE 'SA', " Doc Type

  • Begin of change (D08k900809)

  • BUS_AREA(04) TYPE C VALUE '0106', " bus area

PROFIT_CENTRE(10) TYPE C VALUE 'C_110601', " Profit Center

  • End of change (D08k900809)

TEXT_HEAD(25) TYPE C VALUE 'Tax Calc. for CC consump.',

END OF IS_CONST.

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

  • P A R A M E T E R S

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

*PARAMETERS:

  • P_BUKRS LIKE BSIS-BUKRS DEFAULT '0001', " Company Code

  • P_HKONT LIKE BSIS-HKONT DEFAULT '0070685001', " GL Accounts

  • P_NETAMT(4) TYPE P DECIMALS 2 DEFAULT '0.84'. " Net amount

*

*

*SELECT-OPTIONS:

  • S_BUDAT FOR BSIS-BUDAT.

*

*

**selection-screen begin of line. " 3.0 syntax change v02

*SELECTION-SCREEN ULINE.

**selection-screen end of line. " 3.0 syntax change v02

*

*PARAMETERS: " Parameters for BDC stuff

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

  • P_BDCNM LIKE APQI-GROUPID " UPG45B

  • DEFAULT SY-REPID OBLIGATORY, " BDC name for combined file

  • P_DEVICE LIKE USR01-SPLD,

  • P_ERRLP AS CHECKBOX DEFAULT 'X'.

DATA : BUDAT TYPE BUDAT.

PARAMETERS:

P_BUKRS TYPE BUKRS DEFAULT C_COMP_CODE, " Company Code

P_HKONT TYPE HKONT DEFAULT C_SPL_PURP_ACCT, " GL Accounts

P_NETAMT(4) TYPE P DECIMALS 2 DEFAULT C_NET_AMT. " Net amount

SELECT-OPTIONS:

S_BUDAT FOR BUDAT.

SELECTION-SCREEN BEGIN OF LINE. " 3.0 syntax change v02

SELECTION-SCREEN ULINE 1(80).

SELECTION-SCREEN END OF LINE. " 3.0 syntax change v02

PARAMETERS: " Parameters for BDC stuff

P_BDCNM TYPE APQ_GRPN " UPG45B

DEFAULT SY-REPID OBLIGATORY, " BDC name for combined file

P_DEVICE TYPE RSPOPNAME,

P_ERRLP AS CHECKBOX DEFAULT C_CHECK.

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

  • TYPE-POOLS

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

TYPE-POOLS : SLIS.

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

  • D A T A

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

**DATA: BEGIN OF t_bsis OCCURS 2000, V05

*DATA: BEGIN OF T_BSIS OCCURS 0, "V05

  • KOSTL LIKE BSIS-KOSTL, " Cost Center

  • BELNR LIKE BSIS-BELNR, "FI document V05

  • GJAHR LIKE BSIS-GJAHR, "Fiscal year V05

  • AMOUNT LIKE BSIS-DMBTR, " amount

  • WAERS LIKE BSIS-WAERS, " Currency key UPG45B

  • END OF T_BSIS.

*

TYPES : BEGIN OF TY_BSIS ,

GJAHR TYPE GJAHR, " Fiscal year V05

BELNR TYPE BELNR_D, " FI document V05

WAERS TYPE WAERS, " Currency key UPG45B

AMOUNT TYPE DMBTR, " amount

KOSTL TYPE KOSTL, " Cost Center

END OF TY_BSIS.

DATA : BEGIN OF IS1_BSIS,

GJAHR TYPE GJAHR,

BELNR TYPE BELNR_D,

WAERS TYPE KOSTL,

SHKZG TYPE SHKZG,

DMBTR TYPE DMBTR,

KOSTL TYPE KOSTL,

END OF IS1_BSIS.

DATA : IS2_BSIS TYPE TY_BSIS,

IT_BSIS TYPE STANDARD TABLE OF TY_BSIS.

*DATA: BEGIN OF T_JV_ITEM OCCURS 2000,

  • POST_KEY(2) TYPE C, " post_key

  • ACCOUNT(10) TYPE C, " account

  • amount(16) TYPE c, " amount V05

  • COST_CENTER(10) TYPE C, " cost_center

  • BUS_AREA(4) TYPE C, " business area

  • AMOUNT LIKE BSIS-DMBTR, " amount "V05

  • *

    • END OF T_JV_ITEM.

    TYPES : BEGIN OF TY_JV_ITEM,

    POST_KEY(2) TYPE C, " post_key

    ACCOUNT(10) TYPE C, " account

    • amount(16) TYPE c, " amount "V05

    COST_CENTER(10) TYPE C, " cost_center

    PROFIT_CENTRE(10) TYPE C, " Profit Centre

    AMOUNT TYPE DMBTR, " amount "V05

    END OF TY_JV_ITEM.

    DATA : IS_JV_ITEM TYPE TY_JV_ITEM,

    IT_JV_ITEM TYPE STANDARD TABLE OF TY_JV_ITEM.

    *DATA: BEGIN OF T_ERROR OCCURS 500,

    • COST_CENTER(10) TYPE C, " cost center

    • ACCOUNT(10) TYPE C, " account

    • AMOUNT LIKE BSIS-DMBTR, " amount

    • BUKRS LIKE BSIS-BUKRS, " company code V05

    • BELNR LIKE BSIS-BELNR, " document number V05

    • GJAHR LIKE BSIS-GJAHR, " fiscal year V05

    • KUNNR LIKE KNA1-KUNNR, " customer V05

    • COUNTRY(3) TYPE C, " country

    • REGION(3) TYPE C, " region/state

    • WAERS LIKE BSIS-WAERS, " CURRENCY KEY UPG45B

    • message(50) type c, " message V05

  • MESSAGE(60) TYPE C, " message V05

  • END OF T_ERROR.

  • TYPES : BEGIN OF TY_ERROR,

    COST_CENTER(10) TYPE C, " cost center

    ACCOUNT(10) TYPE C, " account

    AMOUNT TYPE DMBTR, " amount

    BUKRS TYPE BUKRS, " company code V05

    BELNR TYPE BELNR_D, " document number V05

    GJAHR TYPE GJAHR, " fiscal year V05

    KUNNR TYPE KUNNR, " customer V05

    COUNTRY(3) TYPE C, " country

    REGION(3) TYPE C, " region/state

    WAERS TYPE WAERS, " CURRENCY KEY UPG45B

    • message(50) type c, " message V05

    MESSAGE(60) TYPE C, " message V05

    END OF TY_ERROR.

    DATA : IS_ERROR TYPE TY_ERROR,

    IT_ERROR TYPE STANDARD TABLE OF TY_ERROR.

    *DATA: BEGIN OF CONST, " constant fields

    • PROG_HEAD(08) VALUE 'SAPMF05A', " header prog

    • PROG_CODG(08) VALUE 'SAPLKACB', " coding block

    • DYN_0002(04) VALUE '0002', " dynpro 0002

    • DYN_0100(04) VALUE '0100', " dynpro 0100

    • DYN_0300(04) VALUE '0300', " dynpro 0300

    • MKOAR(01) VALUE 'G', " account type

    • PERIV LIKE T009B-PERIV VALUE 'AM', " fisc yr variant

    • CURRENCY LIKE BKPF-WAERS VALUE 'USD', " currency

    • RATE(09) TYPE C VALUE '0' , " exchange rate

    • DOC_TYPE(02) TYPE C VALUE 'SA', " Doc Type

    • BUS_AREA(04) TYPE C VALUE '0106', " bus area

    • TEXT_HEAD(25) TYPE C VALUE 'Tax Calc. for CC consump.',

    • "#EC NOTEXT V05

    • END OF CONST.

    *DATA: BEGIN OF IS_CONST, " constant fields

    *

    • PROG_HEAD(08) TYPE C VALUE 'SAPMF05A', " header prog

    • PROG_CODG(08) TYPE C VALUE 'SAPLKACB', " coding block

    • DYN_0002(04) TYPE C VALUE '0002', " dynpro 0002

    • DYN_0100(04) TYPE C VALUE '0100', " dynpro 0100

    • DYN_0300(04) TYPE C VALUE '0300', " dynpro 0300

    • MKOAR(01) TYPE C VALUE 'D', " account type

    • PERIV TYPE PERIV VALUE 'AM', " fisc yr variant

    • CURRENCY TYPE WAERS VALUE 'USD', " currency

    • RATE(09) TYPE C VALUE '0' , " exchange rate

    • DOC_TYPE(02) TYPE C VALUE 'SA', " Doc Type

    *

    • BUS_AREA(04) TYPE C VALUE '0106', " bus area

    *

    • TEXT_HEAD(25) TYPE C VALUE 'Tax Calc. for CC consump.',

    • "#EC NOTEXT V05

    • END OF IS_CONST.

    • for holding data of the table T900X.

    DATA : IS_ZAFGTCR001 TYPE ZAFGTCR001.

    *DATA: BEGIN OF BDC OCCURS 1000. " BDC table

    • INCLUDE STRUCTURE BDCDATA. " structure for BDC file

    *DATA: END OF BDC. " end of BDC table

    DATA : IS_BDC TYPE BDCDATA,

    IT_BDC LIKE STANDARD TABLE OF IS_BDC.

    *DATA:

    • W_BUKRS LIKE BSIS-BUKRS VALUE '0001',

    • W_KOSTL LIKE BSIS-KOSTL,

    • W_VALID_DATA TYPE C,

    • W_TAX_AMOUNT LIKE BSIS-MWSTS," Tax amount

    • W_CR_ACCOUNT LIKE BSIS-HKONT," Credit Account #

    • W_REC_COUNT TYPE I,

    • W_POST_DATE(8) TYPE C,

    • W_PRE_ACCOUNT(10) TYPE C.

    • w_rpt_type TYPE c.

    • W_PRE_AMOUNT(16) TYPE C.

    DATA:

    W_BUKRS TYPE BUKRS VALUE C_COMP_CODE,

    W_KOSTL TYPE KOSTL,

    W_VALID_DATA TYPE C,

    W_TAX_AMOUNT TYPE MWSTS, " Tax amount

    W_CR_ACCOUNT TYPE HKONT, " Credit Account #

    W_REC_COUNT TYPE I,

    W_POST_DATE(8) TYPE C,

    W_PRE_ACCOUNT(10) TYPE C.

    • w_rpt_type type c.

    • W_PRE_AMOUNT(16) TYPE C.

    • Data declarations for finding shipt-customer state tax rate

    *DATA: MSEG_WEMPF LIKE KNA1-KUNNR, "V05

    • T3(80). "V05

    • Data declarations for finding shipt-customer state tax rate

    DATA: MSEG_WEMPF TYPE KUNNR, "V05

    T3(80) TYPE C. "V05

    **begin V07

    *CONSTANTS: c_TCODE1(03) VALUE 'VL%',

    *

    **CONSTANTS: TCODE1(04) VALUE 'VL01', "V05

    • TCODE2(04) VALUE 'VL02', "V05

    **end V07

    *begin V07

    *CONSTANTS: C_TCODE1(03) TYPE C VALUE 'VL%',

    *CONSTANTS: TCODE1(04) VALUE 'VL01', "V05

    • TCODE2(04) VALUE 'VL02', "V05

    *end V07

    **start of pcr 9558

    • CON_LAND1 LIKE KNA1-LAND1 VALUE 'US'.

    **end of pcr 9558

    *start of pcr 9558

    • CON_LAND1 TYPE LAND1 VALUE 'US'.

    *end of pcr 9558

    • Internal table for KNA1 records V05

    *DATA : BEGIN OF T_KNA1 OCCURS 0, "V05

    • KUNNR LIKE KNA1-KUNNR, "V05

    • LAND1 LIKE KNA1-LAND1, "V05

    • REGIO LIKE KNA1-REGIO, "V05

    • END OF T_KNA1. "V05

    • Internal table for KNA1 records V05

    DATA : IS_KNA1 TYPE KNA1,

    IT_KNA1 LIKE STANDARD TABLE OF IS_KNA1.

    • For holding data for tables T001B,CSKT.

    DATA : IS_T001B TYPE T001B,

    IS_CSKT TYPE CSKT.

    • For holding Error Data

    DATA : BEGIN OF IS_FINAL_ERROR ,

    COST_CENTER(10) TYPE C,

    KTEXT TYPE KTEXT,

    AMOUNT TYPE DMBTR, " amount

    EXT_AMOUNT TYPE DMBTR,

    BUKRS TYPE BUKRS, " company code V05

    BELNR TYPE BELNR_D, " document number V05

    GJAHR TYPE GJAHR, " fiscal year V05

    KUNNR TYPE KUNNR, " customer V05

    COUNTRY(3) TYPE C, " country

    REGION(3) TYPE C, " region/state

    WAERS TYPE WAERS, " CURRENCY KEY UPG45B

    MESSAGE(60) TYPE C, " message V05

    END OF IS_FINAL_ERROR,

    IT_FINAL_ERROR LIKE STANDARD TABLE OF IS_FINAL_ERROR.

    • For ALV Gird

    DATA : IT_FIELDCATALOG TYPE SLIS_T_FIELDCAT_ALV,

    IS_FIELDCATALOG TYPE SLIS_FIELDCAT_ALV,

    GD_REPID TYPE SY-REPID,

    TIME TYPE SY-UZEIT.

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

    • INITIALIZATION

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

    INITIALIZATION.

    PERFORM INIT_POST_DATE. " Initial posting date for open

    " fiscal period

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

    • AT SELECTION-SCREEN

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

    AT SELECTION-SCREEN ON P_NETAMT. " Validate Net amount is > 0

    IF P_NETAMT < 0 OR P_NETAMT > 1. " and < 1.

    MESSAGE E999 WITH TEXT-003.

    ENDIF.

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

    • START-OF-SELECTION.

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

    START-OF-SELECTION.

    PERFORM AUTH_CHECK.

    PERFORM RETRIEVE_DATA.

    PERFORM TAX_CALCULATION.

    DESCRIBE TABLE IT_JV_ITEM LINES W_REC_COUNT.

    IF W_REC_COUNT > 0.

    PERFORM PROCESS_BDC.

    ELSE.

    • WRITE: / TEXT-014.

    ENDIF.

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

    • end of selection

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

    END-OF-SELECTION.

    PERFORM ERROR_REPORT.

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

    • Subroutines

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

    FORM INIT_POST_DATE. " find allowable (open) fiscal period

    *----


    • Find last day of first open period determined from t001b

    • fill key fields with : fy variant = 'AM'

    • : fiscal year = fiscal year from t001b

    • : fiscal per = fiscal per from t001b

    *----


    *DATA: W_OPEN_PERIOD LIKE BKPF-MONAT.

    DATA : L_OPEN_PERIOD TYPE MONAT,

    L_BUDAT_LOW TYPE BUDAT,

    L_BUDAT_HIGH TYPE BUDAT.

    • SELECT * FROM T001B WHERE

    • RRCTY EQ '0' AND

    • BUKRS EQ W_BUKRS AND

    • MKOAR EQ CONST-MKOAR.

    • ENDSELECT.

    • IF SY-SUBRC NE 0.

    • MESSAGE E999 WITH TEXT-001 W_BUKRS CONST-MKOAR.

    • ENDIF.

    • W_OPEN_PERIOD = T001B-FRPE1.

    SELECT * FROM T001B

    INTO IS_T001B

    WHERE RRCTY EQ C_REC_TYPE AND

    BUKRS EQ W_BUKRS AND

    MKOAR EQ IS_CONST-MKOAR.

    ENDSELECT.

    IF SY-SUBRC NE 0.

    MESSAGE E999 WITH TEXT-001 W_BUKRS IS_CONST-MKOAR.

    ENDIF.

    L_OPEN_PERIOD = IS_T001B-FRPE1.

    • CALL FUNCTION 'PERIOD_DAY_DETERMINE'

    • EXPORTING

    • I_GJAHR = T001B-FRYE1

    • I_MONAT = W_OPEN_PERIOD

    • I_PERIV = CONST-PERIV

    • IMPORTING

    • E_FDAY = S_BUDAT-LOW " First day

    • E_LDAY = S_BUDAT-HIGH " Last day

    • EXCEPTIONS

    • ERROR_PERIOD = 01

    • ERROR_PERIOD_VERSION = 02

    • FIRSTDAY_NOT_DEFINED = 03

    • PERIOD_NOT_DEFINED = 04.

    • IF SY-SUBRC <> 0.

    • MESSAGE E999 WITH TEXT-002 : CONST-PERIV W_OPEN_PERIOD T001B-FRYE1.

    • ENDIF.

    *

    CALL FUNCTION 'PERIOD_DAY_DETERMINE'

    EXPORTING

    I_GJAHR = IS_T001B-FRYE1

    I_MONAT = L_OPEN_PERIOD

    I_PERIV = IS_CONST-PERIV

    IMPORTING

    E_FDAY = S_BUDAT-LOW " First day

    E_LDAY = S_BUDAT-HIGH " Last day

    EXCEPTIONS

    ERROR_PERIOD = 01

    ERROR_PERIOD_VERSION = 02

    FIRSTDAY_NOT_DEFINED = 03

    PERIOD_NOT_DEFINED = 04.

    IF SY-SUBRC <> 0.

    MESSAGE E999 WITH TEXT-002 : IS_CONST-PERIV L_OPEN_PERIOD IS_T001B-FRYE1.

    ENDIF.

    APPEND S_BUDAT.

    ENDFORM. "INIT_POST_DATE

    &----


    *& Form AUTH_CHECK

    &----


    FORM AUTH_CHECK.

    • AUTHORITY-CHECK OBJECT 'ZAZBATCH'

    • ID 'P_GROUP' FIELD '*'

    • ID 'P_ACTION' FIELD '*'

    • ID 'ACTVT' FIELD '*'.

    *

    • IF SY-SUBRC <> 0.

    *

    • MESSAGE E999 WITH TEXT-990 SY-REPID.

    *

    • ENDIF.

    ENDFORM. "AUTH_CHECK

    ----


    • FORM RETRIEVE_DATA *

    ----


    • retrieves data frome BSIS *

    ----


    FORM RETRIEVE_DATA.

    • select * from bsis client specified

    • where hkont = p_hkont and

    • bukrs = p_bukrs and

    • mandt = sy-mandt and

    • budat in s_budat and

    • ( blart = 'IL' or blart = 'WL' ). " v01

    • 04/06/98 YTAI change select where clause V02

    • select * from bsis V05

  • SELECT BELNR GJAHR SHKZG DMBTR KOSTL WAERS "V05

  • INTO (BSIS-BELNR, BSIS-GJAHR, BSIS-SHKZG, BSIS-DMBTR, "V05

  • BSIS-KOSTL, BSIS-WAERS) "V05

  • FROM BSIS "V05

  • WHERE HKONT = P_HKONT AND

  • BUKRS = P_BUKRS AND

  • BUDAT IN S_BUDAT AND

  • ( BLART = 'IL' OR BLART = 'WL' ).

    • end of changes

    SELECT GJAHR BELNR WAERS SHKZG DMBTR KOSTL "V05

    INTO CORRESPONDING FIELDS OF IS1_BSIS "V05

    FROM BSIS "V05

    WHERE HKONT = P_HKONT AND

    BUKRS = P_BUKRS AND

    BUDAT IN S_BUDAT AND

    ( BLART = C_PROJ_REPOST OR BLART = C_GI_OR_GD ).

    PERFORM POPULATE_DATA.

    ENDSELECT.

    ENDFORM. "RETRIEVE_DATA

    ----


    • FORM POPULATE_DATA *

    ----


    • Populate data *

    ----


    FORM POPULATE_DATA.

    • W_KOSTL = BSIS-KOSTL.

    • READ TABLE t_bsis WITH KEY w_kostl BINARY SEARCH. V05

  • READ TABLE T_BSIS WITH KEY KOSTL = W_KOSTL "V05

  • BELNR = BSIS-BELNR "V05

  • GJAHR = BSIS-GJAHR "V05

  • BINARY SEARCH. "V05

  • IF SY-SUBRC <> 0. " record not exists

  • T_BSIS-KOSTL = W_KOSTL.

  • T_BSIS-BELNR = BSIS-BELNR. "V05

  • T_BSIS-GJAHR = BSIS-GJAHR. "V05

  • IF BSIS-SHKZG = 'S'.

  • T_BSIS-AMOUNT = BSIS-DMBTR.

  • ELSE.

  • T_BSIS-AMOUNT = BSIS-DMBTR * -1.

  • ENDIF.

  • T_BSIS-WAERS = BSIS-WAERS. " UPG45B

  • INSERT T_BSIS INDEX SY-TABIX. " Create new record

  • ELSE. " record exists

  • IF BSIS-SHKZG = 'S'. " Debit

  • T_BSIS-AMOUNT = T_BSIS-AMOUNT + BSIS-DMBTR.

  • ELSE. " Credit

  • T_BSIS-AMOUNT = T_BSIS-AMOUNT - BSIS-DMBTR.

  • ENDIF.

  • MODIFY T_BSIS INDEX SY-TABIX. " update amount

  • ENDIF.

  • W_KOSTL = IS1_BSIS-KOSTL.

    • READ TABLE t_bsis WITH KEY w_kostl BINARY SEARCH. V05

    READ TABLE IT_BSIS INTO IS2_BSIS WITH KEY KOSTL = W_KOSTL "V05

    BELNR = IS1_BSIS-BELNR "V05

    GJAHR = IS1_BSIS-GJAHR "V05

    BINARY SEARCH. "V05

    IF SY-SUBRC <> 0. " record not exists

    IS2_BSIS-KOSTL = W_KOSTL.

    IS2_BSIS-BELNR = IS1_BSIS-BELNR. "V05

    IS2_BSIS-GJAHR = IS1_BSIS-GJAHR. "V05

    IF IS1_BSIS-SHKZG = C_DEBIT.

    IS2_BSIS-AMOUNT = IS1_BSIS-DMBTR.

    ELSE.

    IS2_BSIS-AMOUNT = IS1_BSIS-DMBTR * -1.

    ENDIF.

    IS2_BSIS-WAERS = IS1_BSIS-WAERS. " UPG45B

    INSERT IS2_BSIS INTO IT_BSIS INDEX SY-TABIX. " Create new record

    ELSE. " record exists

    IF IS1_BSIS-SHKZG = C_DEBIT. " Debit

    IS2_BSIS-AMOUNT = IS2_BSIS-AMOUNT + IS1_BSIS-DMBTR.

    ELSE. " Credit

    IS2_BSIS-AMOUNT = IS2_BSIS-AMOUNT - IS1_BSIS-DMBTR.

    ENDIF.

    MODIFY IT_BSIS FROM IS2_BSIS INDEX SY-TABIX. " update amount

    ENDIF.

    ENDFORM. "POPULATE_DATA

    ----


    • FORM TAX_CALCULATION *

    ----


    *- OLD -1. validate cost center against table CSKS *

    • V05 1. find originating material document and shipt-to in FI doc. *

    • 2. retrieve tax rate which is based on table T900x which is *

    • derived by country and region *

    • 3. calculate tax amount

    ----


    FORM TAX_CALCULATION.

    *CLEAR T_BSIS.

    • LOOP AT T_BSIS.

    • PERFORM VALIDATE_LINE_ITEM.

    • IF W_VALID_DATA = 'X'. " Valid data

    • subtotal of each cost center, times net amount % and times tax rate

  • W_TAX_AMOUNT = T_BSIS-AMOUNT * P_NETAMT

  • * ( T900X-TAX_RATE / 100 ).

  • IF W_TAX_AMOUNT > 0.

  • PERFORM SAVE_JV_ITEM USING '40' '50'. " JV Line item

  • ELSE.

  • W_TAX_AMOUNT = W_TAX_AMOUNT * -1.

  • PERFORM SAVE_JV_ITEM USING '50' '40'. " JV Line item

  • ENDIF.

  • ENDIF.

  • ENDLOOP.

  • CLEAR IS2_BSIS.

    LOOP AT IT_BSIS INTO IS2_BSIS.

    PERFORM VALIDATE_LINE_ITEM.

    IF W_VALID_DATA = C_CHECK. " Valid data

    • subtotal of each cost center, times net amount % and times tax rate

    W_TAX_AMOUNT = IS2_BSIS-AMOUNT * P_NETAMT

    • ( IS_ZAFGTCR001-TAX_RATE / 100 ).

    IF W_TAX_AMOUNT > 0.

    PERFORM SAVE_JV_ITEM USING C_DEBIT_IND C_CREDIT_IND. " JV Line item

    ELSE.

    W_TAX_AMOUNT = W_TAX_AMOUNT * -1.

    PERFORM SAVE_JV_ITEM USING C_CREDIT_IND C_CREDIT_IND. " JV Line item

    ENDIF.

    ENDIF.

    ENDLOOP.

    ENDFORM. "TAX_CALCULATION

    ----


    • FORM VALIDATE_LINE_ITEM *

    ----


    • validate cost center and retrieve tax rate from table t900x *

    ----


    FORM VALIDATE_LINE_ITEM.

    • DATA: BKPF_AWKEY LIKE BKPF-AWKEY. "V05

    *

    • CLEAR W_CR_ACCOUNT.

    • V05 - start of deletion

    • SELECT * FROM CSKS " Validate cost center

    • WHERE KOKRS = P_BUKRS AND

    • KOSTL = T_BSIS-KOSTL AND

    • ( DATBI >= SY-DATUM AND DATAB <= SY-DATUM ) AND

    • BKZKP = ' ' AND

    • BKZKS = ' ' AND

    • BKZER = ' '.

    • EXIT.

    • ENDSELECT.

    • V05 - end of deletion

    *

    • V05 - start of insertion

  • CLEAR MSEG_WEMPF.

  • CLEAR T_KNA1.

  • *

    • Read BKPF ( FI document header ) to find reference material document.

    • Check original transaction was delivery create or change (VL01/VL02)

  • SELECT SINGLE AWKEY INTO BKPF_AWKEY FROM BKPF

  • WHERE BUKRS = P_BUKRS

  • AND BELNR = T_BSIS-BELNR

  • AND GJAHR = T_BSIS-GJAHR

  • **Begin V07

    • AND ( TCODE = TCODE1 OR TCODE = TCODE2 ).

  • AND TCODE like c_tcode1.

  • **END V07

    • IF SY-SUBRC NE 0.

    • PERFORM ERROR_LOG USING TEXT-015. " not originated from SD

    • EXIT.

    • ENDIF.

    • Read material document - only first item because the goods recipient

    • will be the same even if there are multiple items - because the

    • originating document was a delivery doc.

  • SELECT WEMPF INTO MSEG_WEMPF FROM MSEG UP TO 1 ROWS

  • WHERE MBLNR = BKPF_AWKEY(10)

  • AND MJAHR = BKPF_AWKEY+10(4)

  • AND WEMPF NE SPACE.

  • ENDSELECT.

  • IF SY-SUBRC NE 0.

  • PERFORM ERROR_LOG USING TEXT-016. "no goods recipient

  • EXIT.

  • ENDIF.

    • Find ship-to customer and country, state - use internal table to

    • prevent redundant reads from database

  • READ TABLE T_KNA1 WITH KEY KUNNR = MSEG_WEMPF BINARY SEARCH.

    • if not stored yet collect and save in table

  • IF SY-SUBRC NE 0.

  • SELECT SINGLE KUNNR LAND1 REGIO INTO T_KNA1

  • FROM KNA1

  • WHERE KUNNR = MSEG_WEMPF

  • AND LAND1 NE SPACE

  • AND REGIO NE SPACE.

  • IF SY-SUBRC NE 0.

  • PERFORM ERROR_LOG USING TEXT-017. " No ship-to address

  • EXIT.

  • ELSE.

  • INSERT T_KNA1 INDEX SY-TABIX.

  • ENDIF.

  • ENDIF.

    • V05 - end of insertion

    *

    • V05 - start of deletion

    • if sy-subrc = 0.

    • if csks-land1 = space or csks-regio = space. " check cost center

    • perform error_log using text-004." address

    • else.

    • select single * from t900x " retrieve tax rate

    • where land1 = csks-land1 and

    • regio = csks-regio.

    • V05 - end of deletion

    *

    • V05 - start of insertion

    • Retrieve tax rate

  • SELECT SINGLE * FROM T900X

  • WHERE LAND1 = T_KNA1-LAND1

  • AND REGIO = T_KNA1-REGIO.

    • V05 - end of inserting

  • IF SY-SUBRC = 0.

  • W_VALID_DATA = 'X'.

  • W_CR_ACCOUNT = T900X-HKONT.

  • ELSE.

  • PERFORM ERROR_LOG USING TEXT-006.

  • ENDIF.

    • endif. V05

    • else. V05

    • perform error_log using text-005. V05

    • endif. V05

    DATA: BKPF_AWKEY TYPE AWKEY. "V05

    CLEAR W_CR_ACCOUNT.

    • V05 - start of deletion

    • SELECT * FROM CSKS " Validate cost center

    • WHERE KOKRS = P_BUKRS AND

    • KOSTL = T_BSIS-KOSTL AND

    • ( DATBI >= SY-DATUM AND DATAB <= SY-DATUM ) AND

    • BKZKP = ' ' AND

    • BKZKS = ' ' AND

    • BKZER = ' '.

    • EXIT.

    • ENDSELECT.

    • V05 - end of deletion

    • V05 - start of insertion

    CLEAR MSEG_WEMPF.

    CLEAR IS_KNA1.

    • Read BKPF ( FI document header ) to find reference material document.

    • Check original transaction was delivery create or change (VL01/VL02)

    SELECT SINGLE AWKEY INTO BKPF_AWKEY FROM BKPF

    WHERE BUKRS = P_BUKRS

    AND BELNR = IS2_BSIS-BELNR

    AND GJAHR = IS2_BSIS-GJAHR

    *Begin V07

    • AND ( TCODE = TCODE1 OR TCODE = TCODE2 ).

    AND TCODE LIKE C_TCODE1.

    *END V07

    IF SY-SUBRC NE 0.

    PERFORM ERROR_LOG USING TEXT-015. " not originated from SD

    EXIT.

    ENDIF.

    • Read material document - only first item because the goods recipient

    • will be the same even if there are multiple items - because the

    • originating document was a delivery doc.

    SELECT WEMPF INTO MSEG_WEMPF FROM MSEG UP TO 1 ROWS

    WHERE MBLNR = BKPF_AWKEY(10)

    AND MJAHR = BKPF_AWKEY+10(4)

    AND WEMPF NE SPACE.

    ENDSELECT.

    IF SY-SUBRC NE 0.

    PERFORM ERROR_LOG USING TEXT-016. "no goods recipient

    EXIT.

    ENDIF.

    • Find ship-to customer and country, state - use internal table to

    • prevent redundant reads from database

    READ TABLE IT_KNA1 INTO IS_KNA1

    WITH KEY KUNNR = MSEG_WEMPF BINARY SEARCH.

    • if not stored yet collect and save in table

    IF SY-SUBRC NE 0.

    SELECT SINGLE KUNNR LAND1 REGIO

    INTO CORRESPONDING FIELDS OF IS_KNA1

    FROM KNA1

    WHERE KUNNR = MSEG_WEMPF AND

    LAND1 NE SPACE AND

    REGIO NE SPACE.

    IF SY-SUBRC NE 0.

    PERFORM ERROR_LOG USING TEXT-017. " No ship-to address

    EXIT.

    ELSE.

    INSERT IS_KNA1 INTO IT_KNA1 INDEX SY-TABIX.

    ENDIF.

    ENDIF.

    • V05 - end of insertion

    • V05 - start of deletion

    • if sy-subrc = 0.

    • if csks-land1 = space or csks-regio = space. " check cost center

    • perform error_log using text-004." address

    • else.

    • select single * from t900x " retrieve tax rate

    • where land1 = csks-land1 and

    • regio = csks-regio.

    • V05 - end of deletion

    • V05 - start of insertion

    • Retrieve tax rate

    SELECT SINGLE * FROM ZAFGTCR001 INTO IS_ZAFGTCR001

    WHERE LAND1 = IS_KNA1-LAND1 AND

    REGIO = IS_KNA1-REGIO.

    *

    • V05 - end of inserting

    *

    IF SY-SUBRC = 0.

    W_VALID_DATA = C_CHECK.

    W_CR_ACCOUNT = IS_ZAFGTCR001-HKONT.

    ELSE.

    PERFORM ERROR_LOG USING TEXT-006.

    ENDIF.

    • endif. V05

    • else. V05

    • perform error_log using text-005. V05

    • endif. V05

    ENDFORM. "VALIDATE_LINE_ITEM

    ----


    • FORM ERROR_LOG *

    ----


    • Error log *

    ----


    • --> ERR_MESSAGE : Error message *

    ----


    FORM ERROR_LOG USING ERR_MESSAGE. "#EC

    • W_VALID_DATA = ' '.

    **start of pcr 9558

    • CHECK T_KNA1-LAND1 = CON_LAND1.

    **end of pcr 9558

    • T_ERROR-COST_CENTER = T_BSIS-KOSTL.

    • T_ERROR-AMOUNT = T_BSIS-AMOUNT.

    • t_error-account = w_cr_account. V05

    • t_error-country = csks-land1. V05

    • t_error-region = csks-regio. V05

  • T_ERROR-COUNTRY = T_KNA1-LAND1. "V05

  • T_ERROR-REGION = T_KNA1-REGIO. "V05

  • T_ERROR-BUKRS = P_BUKRS. "V05

  • T_ERROR-BELNR = T_BSIS-BELNR. "V05

  • T_ERROR-GJAHR = T_BSIS-GJAHR. "V05

  • T_ERROR-KUNNR = MSEG_WEMPF. "V05

  • T_ERROR-WAERS = T_BSIS-WAERS. " UPG45B

  • T_ERROR-MESSAGE = ERR_MESSAGE.

  • APPEND T_ERROR.

  • W_VALID_DATA = SPACE.

    *start of pcr 9558

    CHECK IS_KNA1-LAND1 = C_CON_LAND1.

    *end of pcr 9558

    IS_ERROR-COST_CENTER = IS2_BSIS-KOSTL.

    IS_ERROR-AMOUNT = IS2_BSIS-AMOUNT.

    • t_error-account = w_cr_account. V05

    • t_error-country = csks-land1. V05

    • t_error-region = csks-regio. V05

    IS_ERROR-COUNTRY = IS_KNA1-LAND1. "V05

    IS_ERROR-REGION = IS_KNA1-REGIO. "V05

    IS_ERROR-BUKRS = P_BUKRS. "V05

    IS_ERROR-BELNR = IS2_BSIS-BELNR. "V05

    IS_ERROR-GJAHR = IS2_BSIS-GJAHR. "V05

    IS_ERROR-KUNNR = MSEG_WEMPF. "V05

    IS_ERROR-WAERS = IS2_BSIS-WAERS. " UPG45B

    IS_ERROR-MESSAGE = ERR_MESSAGE.

    APPEND IS_ERROR TO IT_ERROR.

    ENDFORM. "ERROR_LOG

    ----


    • FORM SAVE_JV_ITEM *

    ----


    FORM SAVE_JV_ITEM USING POSTKEY_1 POSTKEY_2.

    • CLEAR T_JV_ITEM.

    • T_JV_ITEM-POST_KEY = POSTKEY_1.

    • T_JV_ITEM-ACCOUNT = P_HKONT.

    • T_JV_ITEM-AMOUNT = W_TAX_AMOUNT.

    • T_JV_ITEM-COST_CENTER = T_BSIS-KOSTL.

    • T_JV_ITEM-BUS_AREA = CONST-BUS_AREA.

    • APPEND t_jv_item. V05

  • COLLECT T_JV_ITEM. "V05

  • *

    • CLEAR T_JV_ITEM.

    • T_JV_ITEM-POST_KEY = POSTKEY_2.

    • T_JV_ITEM-ACCOUNT = W_CR_ACCOUNT.

    • T_JV_ITEM-AMOUNT = W_TAX_AMOUNT.

    • T_JV_ITEM-COST_CENTER = T_BSIS-KOSTL.

    • T_JV_ITEM-BUS_AREA = CONST-BUS_AREA.

    • APPEND t_jv_item. V05

  • COLLECT T_JV_ITEM. "V05

  • CLEAR IS_JV_ITEM.

    IS_JV_ITEM-POST_KEY = POSTKEY_1.

    IS_JV_ITEM-ACCOUNT = P_HKONT.

    IS_JV_ITEM-AMOUNT = W_TAX_AMOUNT.

    IS_JV_ITEM-COST_CENTER = IS2_BSIS-KOSTL.

    *begin of change (D08k900809)

    • T_JV_ITEM-BUS_AREA = CONST-BUS_AREA

    IS_JV_ITEM-PROFIT_CENTRE = IS_CONST-PROFIT_CENTRE.

    • APPEND t_jv_item. " V05

    *end of change (D08k900809)

    COLLECT IS_JV_ITEM INTO IT_JV_ITEM. " V05

    CLEAR IS_JV_ITEM.

    IS_JV_ITEM-POST_KEY = POSTKEY_2.

    IS_JV_ITEM-ACCOUNT = W_CR_ACCOUNT.

    IS_JV_ITEM-AMOUNT = W_TAX_AMOUNT.

    IS_JV_ITEM-COST_CENTER = IS2_BSIS-KOSTL.

    *begin of change (D08k900809)

    • T_JV_ITEM-BUS_AREA = CONST-BUS_AREA

    IS_JV_ITEM-PROFIT_CENTRE = IS_CONST-PROFIT_CENTRE.

    • APPEND t_jv_item. V05

    *end of change (D08k900809)

    COLLECT IS_JV_ITEM INTO IT_JV_ITEM. "V05

    ENDFORM. "SAVE_JV_ITEM

    ----


    • FORM PROCESS_BDC *

    ----


    • Process BDC session *

    ----


    FORM PROCESS_BDC.

    • DATA: W_FIRST TYPE C.

    *

    • CLEAR T_JV_ITEM.

    • convert date to MMDDYYYY format

  • MOVE S_BUDAT-HIGH+4(4) TO W_POST_DATE.

  • MOVE S_BUDAT-HIGH0(4) TO W_POST_DATE4(4).

    • store BDC data

  • PERFORM OPEN_BDC_SESSION.

  • PERFORM DYNPRO_0100_HEADER.

  • W_PRE_ACCOUNT = P_HKONT.

  • W_FIRST = 'T'.

  • LOOP AT T_JV_ITEM.

  • PERFORM DYNPRO_ACCOUNT.

  • IF W_FIRST = 'T'. " First record

  • W_FIRST = 'F'.

  • ELSE.

  • PERFORM DYNPRO_CODING_BLOCK.

  • ENDIF.

  • PERFORM DYNPRO_AMOUNT.

  • W_PRE_ACCOUNT = T_JV_ITEM-ACCOUNT.

    • W_PRE_AMOUNT = T_JV_ITEM-AMOUNT.

  • ENDLOOP.

  • PERFORM SAVE_JV. " save JV

  • PERFORM INSERT_BDC. " permanent document

  • PERFORM CLOSE_BDC_SESSION.

    • end of BDC.

    DATA: W_FIRST TYPE C.

    CLEAR IS_JV_ITEM.

    • convert date to MMDDYYYY format

    MOVE S_BUDAT-HIGH+4(4) TO W_POST_DATE.

    MOVE S_BUDAT-HIGH0(4) TO W_POST_DATE4(4).

    • store BDC data

    PERFORM OPEN_BDC_SESSION.

    PERFORM DYNPRO_0100_HEADER.

    W_PRE_ACCOUNT = P_HKONT.

    W_FIRST = 'T'.

    LOOP AT IT_JV_ITEM INTO IS_JV_ITEM.

    PERFORM DYNPRO_ACCOUNT.

    IF W_FIRST = 'T'. " First record

    W_FIRST = 'F'.

    ELSE.

    PERFORM DYNPRO_CODING_BLOCK.

    ENDIF.

    PERFORM DYNPRO_AMOUNT.

    W_PRE_ACCOUNT = IS_JV_ITEM-ACCOUNT.

    • W_PRE_AMOUNT = T_JV_ITEM-AMOUNT.

    ENDLOOP.

    PERFORM SAVE_JV. " save JV

    PERFORM INSERT_BDC. " permanent document

    PERFORM CLOSE_BDC_SESSION.

    • end of BDC.

    ENDFORM. "PROCESS_BDC

    ----


    • FORM SAVE_JV *

    ----


    FORM SAVE_JV.

    • PERFORM DYNPRO_AMOUNT.

    PERFORM APPEND_BDC_TABLE USING:

    ' ' 'BDC_OKCODE' '/11'. " Save

    • PERFORM APPEND_BDC_TABLE USING:

    • 'X' CONST-PROG_CODG CONST-DYN_0002, " popup sc 0002

    • ' ' 'COBL-GSBER' '0106', " bus area

    • ' ' 'BDC_OKCODE' '/8'.

    PERFORM APPEND_BDC_TABLE USING:

    'X' IS_CONST-PROG_CODG IS_CONST-DYN_0002, " popup sc 0002

    ' ' 'COBL-GSBER' '0106', " bus area

    ' ' 'BDC_OKCODE' '/8'.

    ENDFORM. "SAVE_JV

    ----


    • FORM OPEN_BDC_SESSION *

    ----


    FORM OPEN_BDC_SESSION.

    • DATA: W_USER LIKE APQI-USERID. " UPG45B

    DATA: W_USER TYPE APQ_MAPN. " UPG45B

    MOVE SY-DATUM4(4) TO P_BDCNM8(4).

    W_USER = SY-UNAME. " UPG45B

    CALL FUNCTION 'BDC_OPEN_GROUP'

    EXPORTING

    CLIENT = SY-MANDT

    GROUP = P_BDCNM

    • KEEP = 'X'

    USER = W_USER. " UPG45B

    ENDFORM. "OPEN_BDC_SESSION

    *----


    FORM DYNPRO_0100_HEADER. " SAPMV05A, Screen 0100, BKPF

    *----


    • Initialize most BKPF variables in header screen

    • PERFORM APPEND_BDC_TABLE USING:

    • 'X' CONST-PROG_HEAD CONST-DYN_0100,

    • ' ' 'BKPF-BLDAT' W_POST_DATE, " Document date

    • ' ' 'BKPF-BUDAT' W_POST_DATE, " posting date

    • ' ' 'BKPF-BLART' CONST-DOC_TYPE," document type

    • ' ' 'BKPF-BUKRS' P_BUKRS, " company code

    • ' ' 'BKPF-WAERS' CONST-CURRENCY," currency

    • ' ' 'BKPF-KURSF' CONST-RATE, " rate

    • ' ' 'BKPF-BKTXT' CONST-TEXT_HEAD. " header text

    *

    • Initialize most BKPF variables in header screen

    PERFORM APPEND_BDC_TABLE USING:

    'X' IS_CONST-PROG_HEAD IS_CONST-DYN_0100,

    ' ' 'BKPF-BLDAT' W_POST_DATE, " Document date

    ' ' 'BKPF-BUDAT' W_POST_DATE, " posting date

    ' ' 'BKPF-BLART' IS_CONST-DOC_TYPE, " document type

    ' ' 'BKPF-BUKRS' P_BUKRS, " company code

    ' ' 'BKPF-WAERS' IS_CONST-CURRENCY, " currency

    ' ' 'BKPF-KURSF' IS_CONST-RATE, " rate

    ' ' 'BKPF-BKTXT' IS_CONST-TEXT_HEAD. " header text

    ENDFORM. "DYNPRO_0100_HEADER

    *----


    FORM DYNPRO_AMOUNT. " SAPMF05A, Screen 0300, for current item

    *----


    • DATA AMOUNT(16). "V05

    • AMOUNT = T_JV_ITEM-AMOUNT. "V05

    *

    • PERFORM APPEND_BDC_TABLE USING:

    • 'X' CONST-PROG_HEAD CONST-DYN_0300,

    • ' ' 'BSEG-WRBTR' t_jv_item-amount. " amount V05

  • ' ' 'BSEG-WRBTR' AMOUNT. " amount V05

  • *

    DATA AMOUNT(16) TYPE C. "V05

    AMOUNT = IS_JV_ITEM-AMOUNT. "V05

    PERFORM APPEND_BDC_TABLE USING:

    'X' IS_CONST-PROG_HEAD IS_CONST-DYN_0300,

    • ' ' 'BSEG-WRBTR' t_jv_item-amount. " amount V05

    ' ' 'BSEG-WRBTR' AMOUNT. " amount V05

    ENDFORM. "DYNPRO_AMOUNT

    *----


    FORM DYNPRO_ACCOUNT.

    *----


    • PERFORM APPEND_BDC_TABLE USING:

    • ' ' 'RF05A-NEWBS' T_JV_ITEM-POST_KEY, " post key

    • ' ' 'RF05A-NEWKO' T_JV_ITEM-ACCOUNT. " account no

    *

    PERFORM APPEND_BDC_TABLE USING:

    ' ' 'RF05A-NEWBS' IS_JV_ITEM-POST_KEY, " post key

    ' ' 'RF05A-NEWKO' IS_JV_ITEM-ACCOUNT. " account no

    ENDFORM. "DYNPRO_ACCOUNT

    ----


    • FORM DYNPRO_CODING_BLOCK *

    ----


    • for previous line item account coding block info *

    ----


    FORM DYNPRO_CODING_BLOCK.

    • IF W_PRE_ACCOUNT+2(1) = '7'.

    • PERFORM APPEND_BDC_TABLE USING:

    • 'X' CONST-PROG_CODG CONST-DYN_0002, " popup sc 0002

    • ' ' 'COBL-KOSTL' T_JV_ITEM-COST_CENTER. " bus area

    • ELSE.

    • PERFORM APPEND_BDC_TABLE USING:

    • 'X' CONST-PROG_CODG CONST-DYN_0002, " popup sc 0002

    • ' ' 'COBL-GSBER' '0106'. " bus area

    • ENDIF.

    • PERFORM APPEND_BDC_TABLE USING:

    • ' ' 'BDC_OKCODE' '/8'.

    IF W_PRE_ACCOUNT+2(1) = '7'.

    PERFORM APPEND_BDC_TABLE USING:

    'X' IS_CONST-PROG_CODG IS_CONST-DYN_0002, " popup sc 0002

    ' ' 'COBL-KOSTL' IS_JV_ITEM-COST_CENTER. " bus area

    ELSE.

    PERFORM APPEND_BDC_TABLE USING:

    'X' IS_CONST-PROG_CODG IS_CONST-DYN_0002, " popup sc 0002

    ' ' 'COBL-GSBER' '0106'. " bus area

    ENDIF.

    PERFORM APPEND_BDC_TABLE USING:

    ' ' 'BDC_OKCODE' '/8'.

    ENDFORM. "DYNPRO_CODING_BLOCK

    *----


    FORM APPEND_BDC_TABLE USING BDC_TAB_DYNBEGIN " append to BDC table

    BDC_TAB_NAME

    BDC_TAB_VALUE.

    *----


    • IF BDC_TAB_DYNBEGIN = 'X'.

    • CLEAR BDC.

    • MOVE : BDC_TAB_DYNBEGIN TO BDC-DYNBEGIN,

    • BDC_TAB_NAME TO BDC-PROGRAM,

    • BDC_TAB_VALUE TO BDC-DYNPRO.

    • APPEND BDC.

    • ELSE.

    • CLEAR BDC.

    • MOVE : BDC_TAB_NAME TO BDC-FNAM,

    • BDC_TAB_VALUE TO BDC-FVAL.

    • APPEND BDC.

    • ENDIF.

    IF BDC_TAB_DYNBEGIN = 'X'.

    CLEAR IS_BDC.

    MOVE : BDC_TAB_DYNBEGIN TO IS_BDC-DYNBEGIN,

    BDC_TAB_NAME TO IS_BDC-PROGRAM,

    BDC_TAB_VALUE TO IS_BDC-DYNPRO.

    APPEND IS_BDC TO IT_BDC.

    ELSE.

    CLEAR IS_BDC.

    MOVE : BDC_TAB_NAME TO IS_BDC-FNAM,

    BDC_TAB_VALUE TO IS_BDC-FVAL.

    APPEND IS_BDC TO IT_BDC.

    ENDIF.

    ENDFORM. "APPEND_BDC_TABLE

    *----


    FORM CLOSE_BDC_SESSION. " close BDC session

    *----


    CALL FUNCTION 'BDC_CLOSE_GROUP'.

    ENDFORM. "CLOSE_BDC_SESSION

    *----


    FORM INSERT_BDC. " process for transaction FB01

    *----


    CALL FUNCTION 'BDC_INSERT'

    EXPORTING

    TCODE = 'FB01'

    TABLES

    DYNPROTAB = IT_BDC.

    REFRESH IT_BDC.

    ENDFORM. "INSERT_BDC

    ----


    • FORM ERROR_REPORT *

    ----


    • ........ *

    ----


    FORM ERROR_REPORT.

    • DATA: W_EXT_AMOUNT LIKE T_BSIS-AMOUNT.

    DATA: W_EXT_AMOUNT TYPE DMBTR.

    • NEW-PAGE PRINT ON

    • NO DIALOG

    • line-count 65 V05

    • line-size 132 V05

    • layout 'X_65_132' V05

  • LINE-COUNT 58 "V05

  • LINE-SIZE 170 "V05

  • LAYOUT 'X_58_170' "V05

  • NEW LIST IDENTIFICATION 'X'

  • KEEP IN SPOOL 'X'

  • NEW-SECTION

  • IMMEDIATELY P_ERRLP

  • DESTINATION P_DEVICE

  • SAP COVER PAGE 'X'

  • LIST NAME 'ZFGU070'.

  • *

    • CALL FUNCTION 'GET_PRINT_PARAMETERS'

    • EXPORTING

    • DESTINATION = P_DEVICE

    • IMMEDIATELY = 'X'

    • LAYOUT = 'X_58_170'

    • LINE_COUNT = 58

    • LINE_SIZE = 170

    • LIST_NAME = 'ZFFR070ALV'

    • NEW_LIST_ID = 'X'

    • NO_DIALOG = 'X'

    • SAP_COVER_PAGE = 'X'

    *

    • IMPORTING

    • OUT_PARAMETERS = IS_PRI_PARAMS

    • VALID =

    • VALID_FOR_SPOOL_CREATION =

  • EXCEPTIONS

  • ARCHIVE_INFO_NOT_FOUND = 1

  • INVALID_PRINT_PARAMS = 2

  • INVALID_ARCHIVE_PARAMS = 3

  • OTHERS = 4

  • .

  • IF SY-SUBRC <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

  • ELSE.

  • MOVE-CORRESPONDING IS_PRI_PARAMS TO IS_PRINT.

  • ENDIF.

    • LOOP AT T_ERROR.

    • SELECT * FROM CSKT

    • WHERE SPRAS = 'E' AND

    • KOKRS = P_BUKRS AND

    • KOSTL = T_ERROR-COST_CENTER.

    • ENDSELECT.

    *

    • W_EXT_AMOUNT = T_ERROR-AMOUNT * P_NETAMT.

    LOOP AT IT_ERROR INTO IS_ERROR.

    SELECT * FROM CSKT

    INTO IS_CSKT

    WHERE SPRAS = C_LANG AND

    KOKRS = P_BUKRS AND

    KOSTL = IS_ERROR-COST_CENTER.

    ENDSELECT.

    W_EXT_AMOUNT = IS_ERROR-AMOUNT * P_NETAMT.

    MOVE : IS_CSKT-KOSTL TO IS_FINAL_ERROR-COST_CENTER,

    IS_CSKT-KTEXT TO IS_FINAL_ERROR-KTEXT,

    W_EXT_AMOUNT TO IS_FINAL_ERROR-EXT_AMOUNT,

    IS_ERROR-BUKRS TO IS_FINAL_ERROR-BUKRS,

    IS_ERROR-BELNR TO IS_FINAL_ERROR-BELNR,

    IS_ERROR-GJAHR TO IS_FINAL_ERROR-GJAHR,

    IS_ERROR-KUNNR TO IS_FINAL_ERROR-KUNNR,

    IS_ERROR-COUNTRY TO IS_FINAL_ERROR-COUNTRY,

    IS_ERROR-REGION TO IS_FINAL_ERROR-REGION,

    IS_ERROR-MESSAGE TO IS_FINAL_ERROR-MESSAGE.

    APPEND IS_FINAL_ERROR TO IT_FINAL_ERROR.

    ENDLOOP.

    PERFORM BUILD_FIELDCATALOG.

    GD_REPID = SY-REPID.

    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

    EXPORTING

    I_CALLBACK_PROGRAM = GD_REPID

    I_CALLBACK_HTML_TOP_OF_PAGE = 'TOP_OF_PAGE'

    I_CALLBACK_HTML_END_OF_LIST = 'END_OF_LIST_HTML'

    • I_GRID_TITLE =

    • IS_LAYOUT =

    IT_FIELDCAT = IT_FIELDCATALOG

    I_SAVE = 'X'

    • IS_PRINT = IS_PRINT

    TABLES

    T_OUTTAB = IT_FINAL_ERROR[]

    EXCEPTIONS

    PROGRAM_ERROR = 1

    OTHERS = 2

    .

    IF SY-SUBRC <> 0.

    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

    WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

    ENDIF.

    • report footer "V05

  • PERFORM RPT-FOOTER(ZZPR001) USING SPACE. "V05

  • ENDFORM. "ERROR_REPORT

    *----


    *TOP-OF-PAGE. " Reports

    *----


    *

    • FORMAT INTENSIFIED ON.

    *

    • V05 replace report header - use standard method

    • write:/ text-010, sy-repid, V05

    • 45 text-009. V05

    *

    • write:/36 text-011, V05

    • 120 text-008, sy-pagno. V05

    *

    • MOVE 'From '(012) TO T3. "V05

    • WRITE S_BUDAT-LOW TO T3+6. "V05

    • MOVE ' To '(013) TO T3+17. "V05

    • WRITE S_BUDAT-HIGH TO T3+22. "V05

    *

    • PERFORM RPT-HEADER(ZZPR001) USING "V05

    • 'APPLIED MATERIALS CONFIDENTIAL'(009) "V05

    • 'TAX CALCULATION FOR COST CENTER CONSUMPTION ERROR REPORT'(011)"V05

    • T3 ' '. "V05

    • write: /45 'From '(012), s_budat-low, ' To '(013), s_budat-high. V05

    • skip 2. V05

    • write: / text-007. V05

    FORM TOP_OF_PAGE USING CL_DD TYPE REF TO CL_DD_DOCUMENT. "#EC CALLED

    DATA: LT_TEXTS TYPE SDYDO_TEXT_TABLE.

    DATA: LV_NUMC(8) TYPE N.

    DATA: LV_COUNT(255).

    DATA: TEXT1(255) TYPE C,

    TEXT2(255) TYPE C,

    TEXT3(255) TYPE C,

    TEXT4(255) TYPE C,

    TEXT5(255) TYPE C,

    TEXT6(255) TYPE C.

    CONCATENATE TEXT-018 SY-CPROG INTO TEXT1.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT1

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->ADD_GAP

    EXPORTING

    WIDTH = 64.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT-009

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->ADD_GAP

    EXPORTING

    WIDTH = 96.

    CONCATENATE TEXT-019 SY-DATUM INTO TEXT2.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT2

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->NEW_LINE.

    CONCATENATE TEXT-020 SY-UNAME INTO TEXT3.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT3

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->ADD_GAP

    EXPORTING

    WIDTH = 33.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT-011

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->ADD_GAP

    EXPORTING

    WIDTH = 54.

    CONCATENATE TEXT-021 SY-UZEIT INTO TEXT4.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT4

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->NEW_LINE.

    CALL METHOD CL_DD->ADD_GAP

    EXPORTING

    WIDTH = 120.

    CONCATENATE TEXT-012 S_BUDAT-LOW TEXT-013 S_BUDAT-HIGH INTO TEXT5.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT5

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    CALL METHOD CL_DD->ADD_GAP

    EXPORTING

    WIDTH = 100.

    DATA PAGENUM TYPE C.

    MOVE : SY-PAGNO TO PAGENUM.

    CONCATENATE TEXT-008 PAGENUM INTO TEXT6.

    CALL METHOD CL_DD->ADD_TEXT

    EXPORTING

    TEXT = TEXT6

    SAP_STYLE = CL_DD_DOCUMENT=>SMALL

    SAP_COLOR = CL_DD_DOCUMENT=>LIST_HEADING_INT

    SAP_FONTSIZE = CL_DD_DOCUMENT=>SMALL

    SAP_EMPHASIS = CL_DD_DOCUMENT=>STRONG

    STYLE_CLASS = SPACE.

    ENDFORM. "TOP_OF_PAGE

    • V05 - start of insertion

    • New error report column header

  • WRITE:/ 'CCtr'(H01),

  • 6 'Descr'(H02),

  • 26 'Total Cost'(H03),

  • 43 'Extended Amount'(H04),

  • 60 'Co.C'(H05),

  • 65 'FI doc.'(H06),

  • 76 'Fis.Yr'(H07),

  • 83 'Ship-to'(H08),

  • 94 'Country'(H09),

  • 102 'Region'(H10),

  • 109 'Error message'(H11).

    • V05 - end of insertion

  • ULINE.

  • FORM BUILD_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'COST_CENTER'.

    IS_FIELDCATALOG-SELTEXT_M = 'CCtr'.

    IS_FIELDCATALOG-COL_POS = 1.

    IS_FIELDCATALOG-OUTPUTLEN = 5.

    IS_FIELDCATALOG-DATATYPE = 'CURR'.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'KTEXT'.

    IS_FIELDCATALOG-SELTEXT_M = 'Descr'.

    IS_FIELDCATALOG-COL_POS = 2.

    IS_FIELDCATALOG-OUTPUTLEN = 20.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'AMOUNT'.

    IS_FIELDCATALOG-SELTEXT_M = 'Total Cost'.

    IS_FIELDCATALOG-COL_POS = 3.

    IS_FIELDCATALOG-OUTPUTLEN = 16.

    IS_FIELDCATALOG-DATATYPE = 'CURR'.

    • is_fieldcatalog-cfieldname = 'WAERS'.

    • is_fieldcatalog-ctabname = 'BSIS'.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    • IS_FIELDCATALOG-FIELDNAME = 'W_EXT_AMOUNT'.

    • IS_FIELDCATALOG-SELTEXT_M = 'Extended Amount'.

    • IS_FIELDCATALOG-COL_POS = 4.

    • IS_FIELDCATALOG-OUTPUTLEN = 16.

    • IS_FIELDCATALOG-DATATYPE = 'CURR'.

    • is_fieldcatalog-cfieldname = 'DMBTR'.

    • is_fieldcatalog-ctabname = 'BSIS'.

    • IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    <b> IS_FIELDCATALOG-FIELDNAME = 'W_EXT_AMOUNT'.

    IS_FIELDCATALOG-SELTEXT_M = 'Extended Amount'.

    IS_FIELDCATALOG-COL_POS = 4.

    IS_FIELDCATALOG-REF_FIELDNAME = 'WAERS'.

    IS_FIELDCATALOG-REF_TABNAME = 'T001'.

    IS_FIELDCATALOG-DDICTXT = 'M'.

    IS_FIELDCATALOG-CFIELDNAME = 'DMBTR'.

    IS_FIELDCATALOG-CTABNAME = 'BSIS'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.</b>

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'BUKRS'.

    IS_FIELDCATALOG-SELTEXT_M = 'Co.C'.

    IS_FIELDCATALOG-COL_POS = 5.

    IS_FIELDCATALOG-OUTPUTLEN = 4.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'BELNR'.

    IS_FIELDCATALOG-SELTEXT_M = 'FI doc.'.

    IS_FIELDCATALOG-COL_POS = 6.

    IS_FIELDCATALOG-OUTPUTLEN = 10.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'GJAHR'.

    IS_FIELDCATALOG-SELTEXT_M = 'Fis.Yr'.

    IS_FIELDCATALOG-COL_POS = 7.

    IS_FIELDCATALOG-OUTPUTLEN = 6.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'KUNNR'.

    IS_FIELDCATALOG-SELTEXT_M = 'Ship-to'.

    IS_FIELDCATALOG-COL_POS = 8.

    IS_FIELDCATALOG-OUTPUTLEN = 10.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'COUNTRY'.

    IS_FIELDCATALOG-SELTEXT_M = 'Country'.

    IS_FIELDCATALOG-COL_POS = 9.

    IS_FIELDCATALOG-OUTPUTLEN = 7.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'REGION'.

    IS_FIELDCATALOG-SELTEXT_M = 'Region'.

    IS_FIELDCATALOG-COL_POS = 10.

    IS_FIELDCATALOG-OUTPUTLEN = 6.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    IS_FIELDCATALOG-FIELDNAME = 'MESSAGE'.

    IS_FIELDCATALOG-SELTEXT_M = 'Error message'.

    IS_FIELDCATALOG-COL_POS = 11.

    IS_FIELDCATALOG-OUTPUTLEN = 60.

    IS_FIELDCATALOG-JUST = 'C'.

    APPEND IS_FIELDCATALOG TO IT_FIELDCATALOG.

    CLEAR IS_FIELDCATALOG.

    ENDFORM. "build_fieldcatalog

    &----


    *& Form end_of_list_html

    &----


    • text

    ----


    • -->END text

    ----


    FORM END_OF_LIST_HTML USING END TYPE REF TO CL_DD_DOCUMENT.

    DATA: LS_TEXT TYPE SDYDO_TEXT_ELEMENT,

    L_GRID TYPE REF TO CL_GUI_ALV_GRID,

    F(14) TYPE C VALUE 'SET_ROW_HEIGHT'.

    LS_TEXT = TEXT-022.

    • adds test (via variable)

    CALL METHOD END->ADD_TEXT

    EXPORTING

    TEXT = LS_TEXT

    SAP_EMPHASIS = 'strong'.

    • adds new line (start new line)

    CALL METHOD END->NEW_LINE.

    *set height of this section

    CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'

    IMPORTING

    E_GRID = L_GRID.

    CALL METHOD L_GRID->PARENT->PARENT->(F)

    EXPORTING

    ID = 3

    HEIGHT = 6.

    ENDFORM. "end_of_list_html.