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.