You are on page 1of 90

*&---------------------------------------------------------------------*

*& Report Customizing Analyzer - Brazilian Logistics (ERP Brazil)


*&
*& READ-ONLY REPORT
*&---------------------------------------------------------------------*
*& This program gets relevant information of Brazilian Logistics area
*& and reads all Data Dictionary from the standard tables of the tool or
*& the inserted ones by the filter.
*& The tool will return a text(output) with the result set of data according
*& to the report screen parameters. Running this tool in two differents systems
*& can help to find customizing incosistencies between them.
*& As mentioned above, this tool is read-only report, it means that the
*& information will be got and displayed, being inoffensive for your system.
*&
*& ****************************DISCLAIMER:**********************************
*& By installing this report in your system you will agree that SAP can use
*& the information provided by this report during the analysis of your
*& incidents or during your upgrade process (SP/EHP).
*& *************************************************************************
*&
*& The tables supported by the tool are:
*&
*& SD: J_1BTXSDCT, J_1BNFTXCOND, J_1BTXCODESEQ, J_1BTXLAWSEQ, J_1BCBTAXPROCV,
*& J_1BTAXGRPCD, J_1BSDKONV, V_T683V, V_T683S, V_T685A, V_T682I, V_T682Z.
*&
*& MM: J_1BTAXCODEV, J_1BNFTXCOND, J_1BIM01, V156W, J_1BCBTAXPROCV, V_T683S,
*& V_T685A, J_1BIM02V, T156, T156B, T156SC, T156N, T156W.
*&
*& Others: J_1BBRANCH, J_1BNFE_CUST3, T007B, TTXD, TTXC, V_TTXD, J_1BTREGV,
*& J_1BTXGRUOP, J_1BCONDMAPV, J_1BTXCOND, J_1BVIEWMAP, J_1BAJV, J1_BALV
*& J_1BAMITV, J_1BAMHV.
*&
*&---------------------------------------------------------------------*

REPORT z_br_log_customizing_analyzerw.

CONSTANTS: gc_positive TYPE c VALUE 'X', "#EC *


gc_blank TYPE c VALUE '', "#EC *
gc_zero TYPE i VALUE '0', "#EC *
gc_one TYPE i VALUE '1', "#EC *
gc_three TYPE i VALUE '3', "#EC *
gc_four TYPE i VALUE '4', "#EC *
gc_ten TYPE i VALUE '10', "#EC *
gc_fourteen TYPE i VALUE '14', "#EC *
gc_twenty TYPE i VALUE '20', "#EC *
gc_thirty TYPE i VALUE '30', "#EC *
gc_forty TYPE i VALUE '40', "#EC *
gc_fifty TYPE i VALUE '50', "#EC *
gc_ninety TYPE i VALUE '90'. "#EC *

DATA:
* Status of the current tab - Z_CUSTOMIZING_ANALYZER_BR_LOG
gv_currtab TYPE i VALUE 10,
lv_access_error(5) TYPE c,
lv_error_message TYPE string,
lv_curruser TYPE sy-uname. "#EC *

* SUBSCREEN 1 For Tabstrip BUTTON1 (SD)


SELECTION-SCREEN BEGIN OF SCREEN 010 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

PARAMETERS: p_docnso TYPE vbeln_va MATCHCODE OBJECT vmva, "#SEL WRONG


p_docbil TYPE vbeln_vf MATCHCODE OBJECT vmcf. "#SEL WRONG

SELECTION-SCREEN END OF BLOCK b1.


SELECTION-SCREEN END OF SCREEN 010.

* SUBSCREEN 2 For Tabstrip BUTTON2 (MM)


SELECTION-SCREEN BEGIN OF SCREEN 020 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.

PARAMETERS: p_docnpo TYPE ebeln MATCHCODE OBJECT mekk,"#SEL WRONG


p_docmd TYPE mblnr, "#SEL WRONG
p_docinv TYPE rbkp-belnr, "#SEL WRONG
p_fyear TYPE gjahr OBLIGATORY DEFAULT sy-datum+0(4)."Current year

SELECTION-SCREEN END OF BLOCK b2.


SELECTION-SCREEN END OF SCREEN 020.

* SUBSCREEN 3 For Tabstrip BUTTON3 (NOTA FISCAL)


SELECTION-SCREEN BEGIN OF SCREEN 030 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME.

PARAMETERS p_docnf TYPE j_1bdocnum MATCHCODE OBJECT j1ba. "#SEL WRONG

SELECTION-SCREEN END OF BLOCK b3.


SELECTION-SCREEN END OF SCREEN 030.

* SUBSCREEN 4 For Tabstrip BUTTON4 (METADATA)


SELECTION-SCREEN BEGIN OF SCREEN 040 AS SUBSCREEN.
SELECTION-SCREEN BEGIN OF BLOCK b4 WITH FRAME.

PARAMETERS: p_metapk TYPE devclass, "#SEL WRONG


p_metatb TYPE string. "#SEL WRONG

SELECTION-SCREEN END OF BLOCK b4.


SELECTION-SCREEN END OF SCREEN 040.

* SUBSCREEN 5 For Tabstrip BUTTON5 (FILTERS)

SELECTION-SCREEN BEGIN OF SCREEN 050 AS SUBSCREEN.


SELECTION-SCREEN BEGIN OF BLOCK b5 WITH FRAME.
PARAMETERS: p_compcd TYPE bukrs , "#SEL WRONG
p_busspl TYPE j_1bbranch-branch , "#SEL WRONG
p_metadt AS CHECKBOX, "#SEL WRONG
p_sd AS CHECKBOX USER-COMMAND uc01, "#SEL
WRONG
p_mm AS CHECKBOX, "#SEL WRONG
p_others AS CHECKBOX, "#SEL WRONG
p_proced TYPE t683-kalsm MODIF ID 001, "#SEL WRONG
p_onlysp AS CHECKBOX MODIF ID 001. "#SEL WRONG
SELECTION-SCREEN END OF BLOCK b5.
SELECTION-SCREEN END OF SCREEN 050.

* Standard selection screen


SELECTION-SCREEN: BEGIN OF TABBED BLOCK mytab FOR 10 LINES,
TAB (20) button1 USER-COMMAND push1
DEFAULT SCREEN 010,
TAB (20) button2 USER-COMMAND push2
DEFAULT SCREEN 020,
TAB (20) button3 USER-COMMAND push3
DEFAULT SCREEN 030,
TAB (20) button4 USER-COMMAND push4
DEFAULT SCREEN 040,
TAB (20) button5 USER-COMMAND push5
DEFAULT SCREEN 050,
END OF BLOCK mytab.

* Initialize the fields


INITIALIZATION.
button1 = 'SD'. "#EC NOTEXT
button2 = 'MM'. "#EC NOTEXT
button3 = 'Nota Fiscal'. "#EC NOTEXT
button4 = 'Metadata'. "#EC NOTEXT
button5 = 'Filters'. "#EC NOTEXT
mytab-prog = sy-repid.
mytab-dynnr = 010.
mytab-activetab = 'BUTTON1'. "#EC NOTEXT
lv_curruser = sy-uname.

*Verify if SD checkbox was signed, if yes, show new fields to be complete


AT SELECTION-SCREEN OUTPUT.

LOOP AT SCREEN.
IF screen-group1 = '001'.

IF p_sd = abap_true.
screen-active = '1'.

ELSE.
screen-active = '0'.

ENDIF.

MODIFY SCREEN.

ENDIF.

* Clear the fields of tab changed


IF mytab-dynnr <> gv_currtab.
PERFORM clearfields
USING gv_currtab.
gv_currtab = mytab-dynnr.
ENDIF.

ENDLOOP.

END-OF-SELECTION.

IF p_docnso IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'V_VBAK_AAT' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'AUART' DUMMY.
CALL FUNCTION 'AUTHORITY_CHECK_TCODE'
EXPORTING
TCODE = 'VA03'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all the information necessary from the sales order's doc number
to complete all
* the fields of the files automatically
IF sy-subrc NE 0.
MESSAGE 'You do not have access to VA03 Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM salesorderinfo USING p_docnso.
ENDIF.

ELSEIF p_docbil IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'V_VBAK_AAT' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'AUART' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'VF03'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all the information necessary from the billing's doc number to
complete all the
* fields of the files automatically
IF sy-subrc NE 0.
MESSAGE 'You do not have access to VF03 Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM billinginfo USING p_docbil.
ENDIF.

ELSEIF p_docnpo IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'M_MATE_STA' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'STATM' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'MIGO'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all the information necessary from the purchase order's doc
number to complete
* all the fields of the files automatically
IF sy-subrc NE 0.
MESSAGE 'You do not have access to MIGO Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM purchaseorderinfo USING p_docnpo.
ENDIF.

ELSEIF p_docmd IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'M_MATE_STA' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'STATM' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'ME23N'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all the information necessary from the material's doc number to
complete all
* the fields of the files automatically
IF sy-subrc NE 0.
MESSAGE 'You do not have access to ME23N Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM materialdoc USING p_docmd p_fyear.
ENDIF.

ELSEIF p_docinv IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'M_MATE_STA' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'STATM' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'MIRO'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all the information necessary from the invoice's doc number to
complete all
* the fields of the files automatically
IF sy-subrc NE 0.
MESSAGE 'You do not have access to MIRO Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM invoicedata USING p_docinv p_fyear.
ENDIF.

ELSEIF p_docnf IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'STATM' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'J1BTAX'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all the information necessary from the nota fiscal's doc number
to complete
* all the fields of the files automatically
IF sy-subrc NE 0.
MESSAGE 'You do not have access to J1BTAX Transaction. Please, contact your
Manager' TYPE 'E'.
ELSE.
PERFORM notafiscal USING p_docnf.
ENDIF.

ELSEIF p_metapk IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'S_DEVELOP' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'DEVCLASS' DUMMY
* ID 'OBJNAME' DUMMY
* ID 'OBJTYPE' DUMMY
* ID 'P_GROUP' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'SE11'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets all tables inside the package informed by the user
IF sy-subrc NE 0.
MESSAGE 'You do not have access to SE11 Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM metadatafilter USING p_metapk.
ENDIF.

ELSEIF p_metatb IS NOT INITIAL.

* AUTHORITY-CHECK OBJECT 'S_DEVELOP' FOR USER lv_curruser


* ID 'ACTVT' FIELD '03'
* ID 'DEVCLASS' DUMMY
* ID 'OBJNAME' DUMMY
* ID 'OBJTYPE' DUMMY
* ID 'P_GROUP' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'SE11'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

* This form gets the table informed by the user


IF sy-subrc NE 0.
MESSAGE 'You do not have access to SE11 Transaction. Please, contact your
Manager.' TYPE 'E'.
ELSE.
PERFORM tablesfilter USING p_metatb.
ENDIF.

ELSEIF p_compcd IS NOT INITIAL.

* CLEAR lv_access_error.
CLEAR lv_error_message.

* Called when the user uses the tab filter


IF ( p_compcd IS INITIAL OR
p_busspl IS INITIAL ) OR
( p_metadt IS INITIAL AND
p_mm IS INITIAL AND
p_others IS INITIAL AND
p_sd IS INITIAL ).

MESSAGE 'Please, Fill in all required fields.' TYPE 'I'.

ELSEIF ( p_sd IS NOT INITIAL AND


p_proced IS INITIAL ).

ELSE.

IF ( p_sd IS NOT INITIAL ).


* AUTHORITY-CHECK OBJECT 'V_VBAK_AAT' FOR USER lv_curruser
* ID 'ACTVT' FIELD '03'
* ID 'AUART' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'VA03'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

IF sy-subrc NE 0.
lv_access_error = 'FALSE'.
lv_error_message = 'You do not have access to SD Transactions. Please,
contact your Manager!'.
ENDIF.
ENDIF.

IF ( p_mm IS NOT INITIAL ).


* AUTHORITY-CHECK OBJECT 'M_MATE_STA' FOR USER lv_curruser
* ID 'ACTVT' FIELD '03'
* ID 'STATM' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'ME23N'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

IF sy-subrc NE 0.
lv_access_error = 'FALSE'.
lv_error_message = 'You do not have access to MM Transactions. Please,
contact your Manager!'.
ENDIF.
ENDIF.

IF ( p_others IS NOT INITIAL ).


* AUTHORITY-CHECK OBJECT 'F_BKPF_BUK' FOR USER lv_curruser
* ID 'ACTVT' FIELD '03'
* ID 'STATM' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'J1BTAX'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

IF sy-subrc NE 0.
lv_access_error = 'FALSE'.
lv_error_message = 'You do not have access to NF Transactions. Please,
contact your Manager!'.
ENDIF.
ENDIF.

IF ( p_metadt IS NOT INITIAL ).


* AUTHORITY-CHECK OBJECT 'S_DEVELOP' FOR USER lv_curruser
* ID 'ACTVT' FIELD '03'
* ID 'DEVCLASS' DUMMY
* ID 'OBJNAME' DUMMY
* ID 'OBJTYPE' DUMMY
* ID 'P_GROUP' DUMMY.

CALL FUNCTION 'AUTHORITY_CHECK_TCODE'


EXPORTING
TCODE = 'SE11'
EXCEPTIONS
OK = 0
NOT_OK = 1
OTHERS = 2.

IF sy-subrc NE 0.
lv_access_error = 'FALSE'.
lv_error_message = 'You do not have access to Metadata Transactions.
Please, contact your Manager!'.
ENDIF.
ENDIF.

IF lv_access_error EQ 'FALSE'.
MESSAGE lv_error_message TYPE 'E'.
ELSE.
PERFORM formsfilter USING p_metadt
p_sd
p_mm
p_others
p_compcd
''
p_proced
p_onlysp
p_busspl.
ENDIF.
ENDIF.

ELSE.
MESSAGE 'Please, insert data in one of the fields.' TYPE 'I'. "#EC NOTEXT
ENDIF.
* This form erase the inserted fields of the previous tab
FORM clearfields
USING tabnumber TYPE i.

CASE tabnumber.
WHEN gc_ten.
CLEAR p_docnso.
CLEAR p_docbil.
MODIFY SCREEN.

WHEN gc_twenty.
CLEAR p_docnpo.
CLEAR p_docmd.
CLEAR p_docinv.
MODIFY SCREEN.

WHEN gc_thirty.
CLEAR p_docnf.
MODIFY SCREEN.

WHEN gc_forty.
CLEAR p_metapk.
CLEAR p_metatb.
MODIFY SCREEN.

WHEN gc_fifty.
CLEAR p_compcd.
CLEAR p_busspl.
CLEAR p_metadt.
CLEAR p_sd.
CLEAR p_mm.
CLEAR p_others.
CLEAR p_proced.
CLEAR p_onlysp.
MODIFY SCREEN.

ENDCASE.
ENDFORM.

* ------------------------------------------------------------------------- OLD
INCLUDES
-----------------------------------------------------------------------------------
---
* This TOP include contains the declaration of the global variables

* Calculation Procedure Structure - ZAUTO_CALC_PROCEDURES_INT_CODE


TYPES: BEGIN OF ty_acckey,
ktosl TYPE ktosl_007b,
END OF ty_acckey.

* Calculation Procedure Structure - ZAUTO_CALCPROIT2


TYPES: BEGIN OF ty_calcpro,
mandt TYPE mandt,
j_1btxcode TYPE j_1btxcode,
kappl TYPE kappl,
kalsm_d TYPE kalsm_d,
stunr TYPE stunr,
dzaehk TYPE dzaehk,
kschl TYPE kschl,
stunb TYPE stunb,
stun2 TYPE stun2,
kauto TYPE kauto,
kobli TYPE kobli,
kstat TYPE kstat,
drukz TYPE drukz,
kzwiw TYPE kzwiw,
kobed TYPE kobed,
kofrm TYPE kofrm,
kofra TYPE kofra,
kvsl1 TYPE kvsl1,
kvsl2 TYPE kvsl2,
END OF ty_calcpro.

* Calculation Proc. with Based Condition Structure - ZAUTO_CALC_PROCED_COND_BASED


TYPES: BEGIN OF ty_calprommsd,
mandt TYPE mandt,
kvewe TYPE kvewe,
kappl TYPE kappl,
kalsm_d TYPE kalsm_d,
j_1bcbtact TYPE j_1bcbtact,
vtxtm TYPE vtxtm,
END OF ty_calprommsd.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_unique,
kschl TYPE kschl,
code TYPE j_1btxcode,
END OF ty_unique.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_descondtxt,
vtext TYPE t685t-vtext,
kschl TYPE kschl,
END OF ty_descondtxt.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_accessqtxt,
kozgf TYPE t685-kozgf,
kschl TYPE kschl,
END OF ty_accessqtxt.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctcontroldt1,
mandt TYPE mandt,
kschl TYPE kschl,
koaid TYPE koaid,
krech TYPE krech,
kntyp TYPE kntyp,
txprf TYPE txprf,
kdupl TYPE kdupl,
crm_cond_purpose TYPE crm_cond_purpose,
crm_cond_data_source1 TYPE crm_cond_data_source1,
knega TYPE knega,
END OF ty_ctcontroldt1.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctgroupcond,
kschl TYPE kschl,
kgrpe TYPE kgrpe,
rdifa TYPE rdifa,
grlnr TYPE grlnr,
END OF ty_ctgroupcond.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctchangeswcbm,
kschl TYPE kschl,
kmanu TYPE kmanu,
kkopf TYPE kkopf,
kposi TYPE kposi,
kaend_loe TYPE kaend_loe,
kaend_btr TYPE kaend_btr,
kaend_wrt TYPE kaend_wrt,
kaend_ufk TYPE kaend_ufk,
kaend_rch TYPE kaend_rch,
END OF ty_ctchangeswcbm.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctmasterdata,
kschl TYPE kschl,
dtvob TYPE dtvob,
datvo TYPE datvo,
rkschl TYPE rkschl,
rkappl TYPE rkappl,
kalsm_d TYPE kalsm_d,
kdele TYPE kdele,
idxup TYPE idxup,
koupd TYPE koupd,
END OF ty_ctmasterdata.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctscales,
kschl TYPE kschl,
kzbzg TYPE kzbzg,
kstpr TYPE kstpr,
stfkz TYPE stfkz,
kofrs TYPE kofrs,
grmen TYPE grmen,
END OF ty_ctscales.
* Condition Types - ZAUTO_CONDITION_TYPES
TYPES: BEGIN OF ty_ctsrebate,
kschl TYPE kschl,
bover TYPE bover,
rukor TYPE rukor,
prech TYPE prech,
END OF ty_ctsrebate.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctmasterdata2,
kschl TYPE kschl,
ganzz TYPE ganzz,
kruek TYPE kruek,
kreli TYPE kreli,
kfkiv TYPE kfkiv,
aktko TYPE aktko,
kvarc TYPE kvarc,
kmeng TYPE kmeng,
vf_bnktk TYPE vf_bnktk,
kznep TYPE kznep,
kprdt TYPE kprdt,
bnkwe TYPE bnkwe,
ktrel TYPE ktrel,
END OF ty_ctmasterdata2.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_ctsalespricing,
kschl TYPE kschl,
vkkal TYPE vkkal,
vkobl TYPE vkobl,
END OF ty_ctsalespricing.

* Condition Types - ZAUTO_CONDITION_TYPES


TYPES: BEGIN OF ty_cttextdetermin,
kschl TYPE kschl,
txtgr TYPE txtgr,
tdid TYPE tdid,
END OF ty_cttextdetermin.

* Metadata - ZAUTO_METADATA
TYPES: BEGIN OF ty_tab,
tabname TYPE j_1bviewmap-tabname,
END OF ty_tab.

* Metadata - ZAUTO_METADATA
TYPES: BEGIN OF ty_desc,
tab TYPE j_1bviewmap-tabname,
desc TYPE dd02t-ddtext,
END OF ty_desc.

* Metadata - ZAUTO_METADATA
TYPES: BEGIN OF ty_getdata,
tabname TYPE tabname,
fieldname TYPE fieldname,
keyflag TYPE keyflag,
datatype TYPE datatype_d,
leng TYPE ddleng,
decimals TYPE decimals,
rollname TYPE rollname,
scrtext_m TYPE scrtext_m,
END OF ty_getdata.

* Metadata - ZAUTO_METADATA
TYPES: BEGIN OF ty_search_help,
tabname TYPE tabname,
fieldname TYPE fieldname,
rollname TYPE rollname,
datatype TYPE datatype_d,
checktable TYPE checktable,
shlporigin TYPE shlporigin,
shlpname TYPE komp_shlp,
defaults TYPE valexi,
domname TYPE domname,
reftable TYPE reftable,
reffield TYPE reffield,
END OF ty_search_help.

* Tax Posting String Inventory MM - ZAUTO_TX_POST_STR_INVENTORY_MM


TYPES: BEGIN OF ty_taxpostingstr,
kvewe TYPE kvewe,
kappl TYPE kappl,
kalsm_d TYPE kalsm_d,
bustw TYPE bustw,
kschl TYPE kschl,
feldn TYPE feldn,
shnam TYPE shnam,
xbmat TYPE xbmat,
xbbst TYPE xbbst,
xbfau TYPE xbfau,
xauto TYPE xauto,
xpanz TYPE xpanz,
kzsim TYPE kzsim,
buzid TYPE buzid,
xumbw TYPE xumbw,
xkaao TYPE xkaao,
xmfrw TYPE xmfrw,
END OF ty_taxpostingstr.

DATA:
* Calculation Procedure Data - ZAUTO_CALCPROIT2
gt_calcprotab TYPE STANDARD TABLE OF ty_calcpro, "#EC *
gt_calcprotabf TYPE STANDARD TABLE OF ty_calcpro, "#EC *
gs_calcprotab TYPE ty_calcpro, "#EC *
gv_land1 TYPE v_t001-land1, "#EC *
gv_kalsm TYPE t683-kalsm, "#EC *
gv_headerkalsm TYPE string, "#EC *
gt_acckeys TYPE STANDARD TABLE OF ty_acckey, "#EC *
gs_acckeys TYPE ty_acckey, "#EC *

* Calculation Proc. with Based Condition Data - ZAUTO_CALC_PROCED_COND_BASED


gt_calprommsd TYPE STANDARD TABLE OF ty_calprommsd, "#EC *
gt_calprommsdf TYPE STANDARD TABLE OF ty_calprommsd, "#EC *
gs_calprommsd TYPE ty_calprommsd, "#EC *

* Condition Types - ZAUTO_CONDITION_TYPES


gt_ctcontroldt1 TYPE STANDARD TABLE OF ty_ctcontroldt1, "#EC *
gt_ctcontroldt1f TYPE STANDARD TABLE OF ty_ctcontroldt1, "#EC *
gs_ctcontroldt1 TYPE ty_ctcontroldt1, "#EC *

gt_ctgroupcond TYPE STANDARD TABLE OF ty_ctgroupcond, "#EC *


gt_ctgroupcondf TYPE STANDARD TABLE OF ty_ctgroupcond, "#EC *
gs_ctgroupcond TYPE ty_ctgroupcond, "#EC *

gt_ctchangeswcbm TYPE STANDARD TABLE OF ty_ctchangeswcbm, "#EC *


gt_ctchangeswcbmf TYPE STANDARD TABLE OF ty_ctchangeswcbm, "#EC *
gs_ctchangeswcbm TYPE ty_ctchangeswcbm, "#EC *

gt_ctmasterdata TYPE STANDARD TABLE OF ty_ctmasterdata, "#EC *


gt_ctmasterdataf TYPE STANDARD TABLE OF ty_ctmasterdata, "#EC *
gs_ctmasterdata TYPE ty_ctmasterdata, "#EC *

gt_ctscales TYPE STANDARD TABLE OF ty_ctscales, "#EC *


gt_ctscalesf TYPE STANDARD TABLE OF ty_ctscales, "#EC *
gs_ctscales TYPE ty_ctscales, "#EC *

gt_ctsrebate TYPE STANDARD TABLE OF ty_ctsrebate, "#EC *


gt_ctsrebatef TYPE STANDARD TABLE OF ty_ctsrebate, "#EC *
gs_ctsrebate TYPE ty_ctsrebate, "#EC *

gt_ctmasterdata2 TYPE STANDARD TABLE OF ty_ctmasterdata2, "#EC *


gt_ctmasterdata2f TYPE STANDARD TABLE OF ty_ctmasterdata2, "#EC *
gs_ctmasterdata2 TYPE ty_ctmasterdata2, "#EC *

gt_ctsalespricing TYPE STANDARD TABLE OF ty_ctsalespricing, "#EC *


gt_ctsalespricingf TYPE STANDARD TABLE OF ty_ctsalespricing, "#EC *
gs_ctsalespricing TYPE ty_ctsalespricing, "#EC *

gt_cttextdetermin TYPE STANDARD TABLE OF ty_cttextdetermin, "#EC *


gt_cttextdeterminf TYPE STANDARD TABLE OF ty_cttextdetermin, "#EC *
gs_cttextdetermin TYPE ty_cttextdetermin, "#EC *

gt_unique TYPE STANDARD TABLE OF ty_unique, "#EC *


gs_unique TYPE ty_unique, "#EC *

gt_descondtypetxt TYPE STANDARD TABLE OF ty_descondtxt, "#EC *


gs_descondtypetxt TYPE ty_descondtxt, "#EC *

gt_accesseqtxt TYPE STANDARD TABLE OF ty_accessqtxt, "#EC *


gs_accesseqtxt TYPE ty_accessqtxt, "#EC *

* Metadata - ZAUTO_METADATA
gs_metainfo TYPE ty_tab, "#EC *
gt_metainfo TYPE STANDARD TABLE OF ty_tab, "#EC *
gt_getdata TYPE STANDARD TABLE OF ty_getdata, "#EC *
gt_getdata2 TYPE STANDARD TABLE OF ty_getdata, "#EC *
gs_getdata TYPE ty_getdata, "#EC *
gs_getdata2 TYPE ty_getdata, "#EC *
gt_desctext TYPE STANDARD TABLE OF ty_desc, "#EC *
gs_desctext TYPE ty_desc, "#EC *
gv_contdesc TYPE i VALUE 1, "#EC *
gt_search_help TYPE STANDARD TABLE OF ty_search_help, "#EC *
gs_search_help TYPE ty_search_help, "#EC *

* Tax Posting String Inventory MM - ZAUTO_TX_POST_STR_INVENTORY_MM


gt_taxpostingstr TYPE STANDARD TABLE OF ty_taxpostingstr. "#EC *
* Metadata - ZAUTO_METADATA
FIELD-SYMBOLS <getdata> TYPE ty_getdata. "#EC *

* Dynamic text formatter


FORM formatter USING ut_table TYPE ANY TABLE
us_structure TYPE any
uv_description TYPE string
uv_table_original_name TYPE string.

* Structure used by tables that will organize how to print each table
TYPES: BEGIN OF ty_getdata,
rollname TYPE rollname,
outputlen TYPE outputlen,
headlen TYPE headlen,
reptext TYPE reptext,
scrtext_s TYPE scrtext_s,
scrtext_m TYPE scrtext_m,
scrlen_s TYPE scrlen_s,
scrlen_l TYPE scrlen_l,
END OF ty_getdata.

CONSTANTS lc_language_key TYPE c VALUE 'E'.

DATA: lt_getdata TYPE STANDARD TABLE OF ty_getdata,


lt_getdatatemp TYPE STANDARD TABLE OF ty_getdata,
ls_getdata TYPE ty_getdata,
wa_ref TYPE REF TO data,
structdescr TYPE REF TO cl_abap_structdescr, "To review which
kind of prefix use
lt_details TYPE abap_compdescr_tab,
ls_details TYPE LINE OF abap_compdescr_tab,
lv_desctext TYPE dd02t-ddtext,
lv_rest TYPE i,
lv_cont TYPE i,
lv_linebreaker TYPE i,
lv_filled TYPE string,
lv_result TYPE string,
lv_header TYPE string.

FIELD-SYMBOLS: <text> TYPE any,


<wa_data> TYPE any.

* Get one line of the table to be used like standard


CREATE DATA wa_ref LIKE LINE OF ut_table.
ASSIGN wa_ref->* TO <wa_data>.

* This methods get the name of the fields


structdescr ?= cl_abap_typedescr=>describe_by_data( <wa_data> ).
lt_details = structdescr->components.

* Get ddic info


SELECT dd04l~rollname dd04l~outputlen dd04l~headlen dd04t~reptext
dd04t~scrtext_s dd04t~scrtext_m dd04l~scrlen1 dd04l~scrlen3
INTO TABLE lt_getdatatemp
FROM dd04l
INNER JOIN dd04t
ON dd04t~rollname EQ dd04l~rollname
FOR ALL ENTRIES IN lt_details
WHERE dd04l~rollname = lt_details-name
AND dd04t~ddlanguage = 'E'.

* Loop to reorganize the structure like the original one


LOOP AT lt_details INTO ls_details.
READ TABLE lt_getdatatemp INTO ls_getdata WITH KEY rollname = ls_details-name.
APPEND ls_getdata TO lt_getdata.
ENDLOOP.

* The mandt field is not necessary


DELETE lt_getdata WHERE rollname = 'MANDT'
OR rollname = gc_blank.

* Just to make sure that this fields will be empty


CLEAR lt_details.
CLEAR structdescr.

* Verify if the description came empty and complete it automatically


IF uv_description <> gc_blank
AND uv_table_original_name <> gc_blank.

SELECT SINGLE ddtext "#EC WARNOK


FROM dd02t
INTO lv_desctext
WHERE tabname = uv_table_original_name
AND ddlanguage = lc_language_key.

WRITE:/ 'Table Name:', uv_table_original_name, "#EC NOTEXT


' Table Description:', lv_desctext. "#EC NOTEXT
SKIP.

ELSEIF uv_description = ''.

WRITE:/ 'Table Name:', uv_table_original_name, "#EC NOTEXT


' Table Description:', uv_description. "#EC NOTEXT
SKIP.

ENDIF.

* To get the number of fields from the table


lv_cont = lines( lt_getdata ).

* If the number of fields from the table is more than 10 probably all fields won't
* appear in the screen, so will be used header type(3) as header
IF lv_cont >= gc_ten.

* HEADER
LOOP AT lt_getdata INTO ls_getdata.

IF ls_getdata-outputlen <= gc_four AND ls_getdata-headlen <= gc_ten.

CONCATENATE lv_header ls_getdata-reptext(ls_getdata-headlen) ' '


INTO lv_header RESPECTING BLANKS.

ELSEIF ls_getdata-outputlen <= gc_four AND ls_getdata-scrlen_s <= gc_ten.


CONCATENATE lv_header ls_getdata-scrtext_s ' '
INTO lv_header RESPECTING BLANKS.
ELSEIF ls_getdata-outputlen <= gc_twenty.

CONCATENATE lv_header ls_getdata-scrtext_m ' '


INTO lv_header RESPECTING BLANKS.

ELSE.

lv_rest = ls_getdata-outputlen - gc_twenty.


ADD gc_three TO lv_rest.
PERFORM fillwtblank USING lv_rest
CHANGING lv_filled.
CONCATENATE lv_header ls_getdata-scrtext_m lv_filled
INTO lv_header RESPECTING BLANKS.

ENDIF.

lv_rest = gc_zero.
lv_filled = ''.

ENDLOOP.

* END OF HEADER
WRITE:/ lv_header.
SKIP.

LOOP AT ut_table INTO us_structure.

LOOP AT lt_getdata INTO ls_getdata.

* TABLE
ASSIGN COMPONENT ls_getdata-rollname
OF STRUCTURE us_structure
TO <text>.

* This if compute the size of the field to print it properly


IF ls_getdata-outputlen <= gc_four
AND ls_getdata-headlen <= gc_ten.
lv_rest = ls_getdata-headlen - ls_getdata-outputlen.

ELSEIF ls_getdata-outputlen <= gc_four


AND ls_getdata-headlen > gc_ten.
lv_rest = gc_ten - ls_getdata-outputlen.

ELSEIF ls_getdata-outputlen > gc_four


AND ls_getdata-outputlen <= gc_twenty.
lv_rest = gc_twenty - ls_getdata-outputlen.

ENDIF.

* To give more space between the fields


ADD gc_three TO lv_rest.

PERFORM fillwtblank USING lv_rest


CHANGING lv_filled.

CONCATENATE lv_result <text> lv_filled


INTO lv_result RESPECTING BLANKS.

* lv_linebreaker contains the number that will be used to break the line in
the right point
ADD gc_one TO lv_linebreaker.

IF lv_cont = lv_linebreaker.

CONCATENATE lv_result ''


INTO lv_result
SEPARATED BY line_cross RESPECTING BLANKS.
WRITE:/ lv_result.
lv_linebreaker = gc_zero.
lv_result = ''.

ENDIF.

lv_rest = gc_zero.
lv_filled = ''.

ENDLOOP.

ENDLOOP.

* END OF TABLE

SKIP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.

* Table with less or equal than 10 fields


ELSE.

LOOP AT lt_getdata INTO ls_getdata.

* HEADER
IF ls_getdata-outputlen <= gc_three.

* Some data element have the short field description empty when they are less
than 3 c
IF ls_getdata-scrtext_s = ''.
CONCATENATE lv_header ls_getdata-scrtext_m ' '
INTO lv_header RESPECTING BLANKS.

ELSE.
CONCATENATE lv_header ls_getdata-scrtext_s ' '
INTO lv_header RESPECTING BLANKS.
ENDIF.

ELSEIF ls_getdata-outputlen <= gc_twenty.

CONCATENATE lv_header ls_getdata-scrtext_m ' '


INTO lv_header RESPECTING BLANKS.

ELSE.

lv_rest = ls_getdata-outputlen - gc_twenty.


ADD gc_three TO lv_rest.
PERFORM fillwtblank USING lv_rest CHANGING lv_filled.
CONCATENATE lv_header ls_getdata-scrtext_m lv_filled
INTO lv_header RESPECTING BLANKS.

ENDIF.

lv_rest = gc_zero.
lv_filled = ''.

ENDLOOP.

* END OF HEADER
WRITE:/ lv_header.
SKIP.

LOOP AT ut_table INTO us_structure.

LOOP AT lt_getdata INTO ls_getdata.

* TABLE
ASSIGN COMPONENT ls_getdata-rollname
OF STRUCTURE us_structure
TO <text>.

* This if compute the size of the field to print it properly


IF ls_getdata-outputlen <= gc_three.

IF ls_getdata-scrtext_s = ''.
lv_rest = ls_getdata-scrlen_l - ls_getdata-outputlen.
ELSE.
lv_rest = gc_ten - ls_getdata-outputlen.
ENDIF.

ELSEIF ls_getdata-outputlen <= gc_twenty.

lv_rest = gc_twenty - ls_getdata-outputlen.

ENDIF.

ADD gc_three TO lv_rest.


PERFORM fillwtblank USING lv_rest
CHANGING lv_filled.
CONCATENATE lv_result <text> lv_filled
INTO lv_result RESPECTING BLANKS.

* lv_linebreaker contains the number that will be used to break the line in
the right point
ADD gc_one TO lv_linebreaker.

IF lv_cont EQ lv_linebreaker.

CONCATENATE lv_result ''


INTO lv_result
SEPARATED BY line_cross RESPECTING BLANKS.
WRITE:/ lv_result.
lv_linebreaker = gc_zero.
lv_result = ''.

ENDIF.
lv_rest = gc_zero.
lv_filled = ''.

ENDLOOP.
* END OF TABLE

ENDLOOP.

SKIP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.

ENDIF.

ENDFORM.

* Get the number of blank necessary and return them into a variable
FORM fillwtblank USING uv_nspace TYPE i
CHANGING cv_filled TYPE string.
DO uv_nspace TIMES.
CONCATENATE cv_filled ' '
INTO cv_filled RESPECTING BLANKS.
ENDDO.
ENDFORM.

* Describe the DDICs of tables


* Data from transaction J1BTAX Tables through se11.
FORM j1btaxtabs USING uv_fromfilter TYPE c.

CONSTANTS: lc_unique_table TYPE c VALUE '0',


lc_language_key TYPE c VALUE 'E'.

* This IF verify if the form was called by the tab MetadataFilter, if yes,
* won't get information about the default tables shown by the program
IF uv_fromfilter = ''.

SELECT tabname
FROM j_1bviewmap
INTO TABLE gt_metainfo
WHERE gruop = lc_unique_table.

* The select above returns first line blank


DELETE gt_metainfo INDEX 1.

* Appending all the tables supported by the Tool


APPEND 'J_1BTXSDCT' TO gt_metainfo.
APPEND 'J_1BNFTXCOND' TO gt_metainfo.
APPEND 'J_1BTXCODESEQ' TO gt_metainfo.
APPEND 'J_1BTXLAWSEQ' TO gt_metainfo.
APPEND 'J_1BCBTAXPROCV' TO gt_metainfo.
APPEND 'J_1BTAXGRPCD' TO gt_metainfo.
APPEND 'J_1BSDKONV' TO gt_metainfo.
APPEND 'V_T683V' TO gt_metainfo.
APPEND 'V_T683S' TO gt_metainfo.
APPEND 'V_T685A' TO gt_metainfo.
APPEND 'V_T682I' TO gt_metainfo.
APPEND 'V_T682Z' TO gt_metainfo.
APPEND 'J_1BTAXCODEV' TO gt_metainfo.
APPEND 'J_1BNFTXCOND' TO gt_metainfo.
APPEND 'J_1BIM01' TO gt_metainfo.
APPEND 'V156W' TO gt_metainfo.
APPEND 'V_T683S' TO gt_metainfo.
APPEND 'V_T685A' TO gt_metainfo.
APPEND 'J_1BIM02V' TO gt_metainfo.
APPEND 'T156' TO gt_metainfo.
APPEND 'T158B' TO gt_metainfo.
APPEND 'T156SC' TO gt_metainfo.
APPEND 'T156N' TO gt_metainfo.
APPEND 'T156W' TO gt_metainfo.
APPEND 'J_1BBRANCH' TO gt_metainfo.
APPEND 'J_1BNFE_CUST3' TO gt_metainfo.
APPEND 'T007B' TO gt_metainfo.
APPEND 'TTXD' TO gt_metainfo.
APPEND 'TTXC' TO gt_metainfo.
APPEND 'V_TTXD' TO gt_metainfo.
APPEND 'J_1BTREGV' TO gt_metainfo.
APPEND 'J_1BTXGRUOP' TO gt_metainfo.
APPEND 'J_1BCONDMAPV' TO gt_metainfo.
APPEND 'J_1BTXCOND' TO gt_metainfo.
APPEND 'J_1BVIEWMAP' TO gt_metainfo.
APPEND 'J_1BAJV' TO gt_metainfo.

* Get the short description about the tables


SELECT tabname ddtext
FROM dd02t
INTO TABLE gt_desctext
FOR ALL ENTRIES IN gt_metainfo
WHERE tabname = gt_metainfo-tabname
AND ddlanguage = lc_language_key.

* Get DDIC information for tab field


SELECT dd03l~tabname dd03l~fieldname dd03l~keyflag dd03l~datatype
dd03l~leng dd03l~decimals dd03l~rollname dd04t~scrtext_m
INTO TABLE gt_getdata
FROM dd03l
INNER JOIN dd04t
ON dd04t~rollname = dd03l~rollname
FOR ALL ENTRIES IN gt_metainfo
WHERE dd03l~tabname = gt_metainfo-tabname
AND dd04t~ddlanguage = lc_language_key.

* Tab Search Help info and Currency/Quantity Fields


SELECT dd03l~tabname dd03l~fieldname dd03l~rollname dd03l~datatype
dd03l~checktable dd03l~shlporigin dd04l~shlpname dd04l~valexi
dd03l~domname dd03l~reftable dd03l~reffield
INTO TABLE gt_search_help
FROM dd03l
INNER JOIN dd04l
ON dd04l~domname = dd03l~domname
FOR ALL ENTRIES IN gt_metainfo
WHERE dd03l~tabname = gt_metainfo-tabname
AND dd03l~rollname = dd04l~rollname
AND dd04l~as4local = dd03l~as4local
AND dd04l~as4vers = dd03l~as4vers.
LOOP AT gt_metainfo INTO gs_metainfo.

READ TABLE gt_desctext INTO gs_desctext INDEX gv_contdesc.

WRITE:/ 'Table Name:', gs_metainfo-tabname, "#EC NOTEXT


' Table Description:', gs_desctext-desc. "#EC NOTEXT

SKIP.
WRITE:/'FIELDS SUBTAB'.
SKIP.
WRITE:/ 'FIELD ', 'KEY ', 'DATA ELEMENT
', "#EC NOTEXT
'MEDIUM TEXT ', 'DATA TYPE ', 'LENGTH ', 'DECIMALS'. "#EC
NOTEXT
SKIP.

LOOP AT gt_getdata INTO gs_getdata WHERE tabname = gs_metainfo-tabname.


WRITE:/ gs_getdata-fieldname, gs_getdata-keyflag, ' ',gs_getdata-
rollname,
gs_getdata-scrtext_m, gs_getdata-datatype, gs_getdata-leng NO-ZERO, ' ',
gs_getdata-decimals NO-ZERO.
ENDLOOP.

WRITE:/
'..................................................................................
...................................................................................
......................'.
SKIP.

WRITE:/'SEARCH HELP SUBTAB'.


SKIP.
WRITE:/'COMPONENT ', 'COMPONENT TYPE
','DATA TYPE ',
'CHECK TABLE ', 'ORIGIN INPUT HELP ', 'SEARCH HELP
',
'DEFAULT ', 'DOMAIN'.
SKIP.

LOOP AT gt_search_help INTO gs_search_help WHERE tabname = gs_metainfo-


tabname.
WRITE:/ gs_search_help-fieldname, gs_search_help-rollname, gs_search_help-
datatype,
gs_search_help-checktable, gs_search_help-shlporigin,'
',
gs_search_help-shlpname, gs_search_help-defaults, '
',gs_search_help-domname.

ENDLOOP.

WRITE:/
'..................................................................................
...................................................................................
......................'.
SKIP.

WRITE:/'CURRENCY/QUANTITY FIELDS SUBTAB'.


SKIP.
WRITE:/'FIELD ', 'DATA ELEMENT
','DATA TYPE ',
'REFERENCE TABLE ', 'REF. FIELD ', 'SHORT
DESCRIPTION'.
SKIP.

LOOP AT gt_search_help INTO gs_search_help WHERE tabname = gs_metainfo-


tabname.
READ TABLE gt_getdata INTO gs_getdata WITH KEY fieldname = gs_search_help-
fieldname.

WRITE:/ gs_search_help-fieldname, gs_search_help-rollname, gs_search_help-


datatype,' ',
gs_search_help-reftable, gs_search_help-reffield, gs_getdata-scrtext_m.

ENDLOOP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.
ADD 1 TO gv_contdesc.

ENDLOOP.

ELSE.

* Get the short description about the tables


SELECT tabname ddtext
FROM dd02t
INTO TABLE gt_desctext
FOR ALL ENTRIES IN gt_metainfo
WHERE tabname = gt_metainfo-tabname
AND ddlanguage = lc_language_key.

* Get DDIC Information


* Some structures do not have data type, so, this select will get only info from
dd03l
SELECT tabname fieldname keyflag datatype leng decimals rollname rollname
INTO TABLE gt_getdata
FROM dd03l
FOR ALL ENTRIES IN gt_metainfo
WHERE tabname = gt_metainfo-tabname.

* Get DDIC Info with the medium text


SELECT dd03l~tabname dd03l~fieldname dd03l~keyflag dd03l~datatype
dd03l~leng dd03l~decimals dd03l~rollname dd04t~scrtext_m
INTO TABLE gt_getdata2
FROM dd03l
INNER JOIN dd04t
ON dd04t~rollname = dd03l~rollname
FOR ALL ENTRIES IN gt_metainfo
WHERE dd03l~tabname = gt_metainfo-tabname
AND dd04t~ddlanguage = lc_language_key.

* Tab Search Help info


SELECT dd03l~tabname dd03l~fieldname dd03l~rollname dd03l~datatype
dd03l~checktable dd03l~shlporigin dd04l~shlpname dd04l~valexi
dd03l~domname dd03l~reftable dd03l~reffield
INTO TABLE gt_search_help
FROM dd03l
INNER JOIN dd04l
ON dd04l~domname = dd03l~domname
FOR ALL ENTRIES IN gt_metainfo
WHERE dd03l~tabname = gt_metainfo-tabname
AND dd03l~rollname = dd04l~rollname
AND dd04l~as4local = dd03l~as4local
AND dd04l~as4vers = dd03l~as4vers.

* Here, this loop will verify if the rollname has a medium text corresponding
LOOP AT gt_getdata ASSIGNING <getdata>.
READ TABLE gt_getdata2 INTO gs_getdata2 WITH KEY rollname = <getdata>-
rollname.
IF sy-subrc = 0.
<getdata>-scrtext_m = gs_getdata2-scrtext_m.
ELSE.
<getdata>-scrtext_m = gc_blank.
ENDIF.

ENDLOOP.

LOOP AT gt_metainfo INTO gs_metainfo.

READ TABLE gt_desctext INTO gs_desctext INDEX gv_contdesc.

WRITE:/ 'Table Name:', gs_metainfo-tabname, "#EC NOTEXT


' Table Description:', gs_desctext-desc. "#EC NOTEXT

SKIP.
WRITE:/'FIELDS SUBTAB'.
SKIP.
WRITE:/ 'FIELD ', 'KEY ', 'DATA ELEMENT
', "#EC NOTEXT
'MEDIUM TEXT ', 'DATA TYPE ', 'LENGTH ', 'DECIMALS'. "#EC
NOTEXT
SKIP.

LOOP AT gt_getdata INTO gs_getdata WHERE tabname = gs_metainfo-tabname.


WRITE:/ gs_getdata-fieldname, gs_getdata-keyflag, ' ',gs_getdata-
rollname,
gs_getdata-scrtext_m, gs_getdata-datatype, gs_getdata-leng NO-ZERO, ' ',
gs_getdata-decimals NO-ZERO.
ENDLOOP.

WRITE:/
'..................................................................................
...................................................................................
......................'.
SKIP.

WRITE:/'SEARCH HELP SUBTAB'.


SKIP.
WRITE:/'COMPONENT ', 'COMPONENT TYPE
','DATA TYPE ',
'CHECK TABLE ', 'ORIGIN INPUT HELP ', 'SEARCH HELP
',
'DEFAULT ', 'DOMAIN'.
SKIP.

LOOP AT gt_search_help INTO gs_search_help WHERE tabname = gs_metainfo-


tabname.
WRITE:/ gs_search_help-fieldname, gs_search_help-rollname, gs_search_help-
datatype,
gs_search_help-checktable, gs_search_help-shlporigin,'
',
gs_search_help-shlpname, gs_search_help-defaults, '
',gs_search_help-domname.

ENDLOOP.

WRITE:/
'..................................................................................
...................................................................................
......................'.
SKIP.

WRITE:/'CURRENCY/QUANTITY FIELDS SUBTAB'.


SKIP.
WRITE:/'FIELD ', 'DATA ELEMENT
','DATA TYPE ',
'REFERENCE TABLE ', 'REF. FIELD ', 'SHORT
DESCRIPTION'.
SKIP.

LOOP AT gt_search_help INTO gs_search_help WHERE tabname = gs_metainfo-


tabname.
READ TABLE gt_getdata INTO gs_getdata WITH KEY fieldname = gs_search_help-
fieldname.

WRITE:/ gs_search_help-fieldname, gs_search_help-rollname, gs_search_help-


datatype,' ',
gs_search_help-reftable, gs_search_help-reffield, gs_getdata-scrtext_m.

ENDLOOP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.
ADD 1 TO gv_contdesc.

ENDLOOP.
ENDIF.

ENDFORM.

* Tax regions
* Entities > Tax Regions
FORM taxregionstabs.

* Structure for Tax Regions


TYPES: BEGIN OF ty_txrtab,
mandt TYPE mandt,
land1 TYPE land1,
j_1btxreg TYPE j_1btxreg,
j_1btxregt TYPE j_1btxregt,
regio TYPE regio,
bezei20 TYPE bezei20,
j_1btaxfree TYPE j_1btaxfree,
END OF ty_txrtab.

DATA: lt_txrtab TYPE STANDARD TABLE OF ty_txrtab,


ls_txrtab TYPE ty_txrtab.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'J_1BTREGV'
with_authority_check = 'X'
TABLES
data = lt_txrtab.

PERFORM formatter USING lt_txrtab


ls_txrtab
'Tax regions' "#EC NOTEXT
'J_1BTREGV'. "#EC NOTEXT
ENDFORM.

* Dynamic determination of Tax-Related Master Data


* Tax Calculation > Tax Groups
FORM taxretabs.

TYPES: BEGIN OF ty_j_1btxfields,


j_1btxfields TYPE j_1btxfields,
END OF ty_j_1btxfields.

TYPES: BEGIN OF ty_j_1btxfields2,


j_1btxfields TYPE j_1btxfields,
END OF ty_j_1btxfields2.

* Structure for Dynamic Determination of Tax-Related Master Data


TYPES: BEGIN OF ty_taxretab,
mandt TYPE mandt,
j_1btxgrp TYPE j_1btxgrp,
j_1btxfields TYPE j_1btxfields,
ty_j_1btxfields TYPE ty_j_1btxfields,
ty_j_1btxfields2 TYPE ty_j_1btxfields2,
j_1bcaller TYPE j_1bcaller,
j_1bactivic TYPE j_1bactivic,
j_1bactivip TYPE j_1bactivip,
j_1bactivis TYPE j_1bactivis,
j_1bactivst TYPE j_1bactivst,
j_1bactivpi TYPE j_1bactivpi,
j_1bactivco TYPE j_1bactivco,
j_1bactivwt TYPE j_1bactivwt,
END OF ty_taxretab.

DATA: lt_taxretab TYPE STANDARD TABLE OF ty_taxretab,


ls_taxretab TYPE ty_taxretab.

* Get data of Dynamic Determination of Tax-Related Master Data


SELECT *
INTO TABLE lt_taxretab
FROM j_1btxgruop.
PERFORM formatter USING lt_taxretab
ls_taxretab
'' "#EC NOTEXT
'J_1BTXGRUOP'. "#EC NOTEXT

ENDFORM.

* Maitain Tax Codes


* Tax Calculation > Tax Codes MM
FORM txcdmmtabs USING uv_proced TYPE kalsm_d.

* Tax codes MM structure


TYPES: BEGIN OF ty_txcdmm,
mandt TYPE mandt,
kalsm_d TYPE kalsm_d,
mwskz TYPE mwskz,
text1_007s TYPE text1_007s,
mwart TYPE mwart,
j_1btxmmu TYPE j_1btxmmu,
j_1btxmmis TYPE j_1btxmmis,
j_1btaxlw1 TYPE j_1btaxlw1,
j_1btaxlw2 TYPE j_1btaxlw2,
j_1btxicex TYPE j_1btxicex,
j_1btxipex TYPE j_1btxipex,
j_1binmwskz TYPE j_1binmwskz,
j_1bsdmwskz TYPE j_1bsdmwskz,
j_1btaxlw4 TYPE j_1btaxlw4,
j_1btaxlw5 TYPE j_1btaxlw5,
END OF ty_txcdmm.

DATA: lt_txcdmm TYPE STANDARD TABLE OF ty_txcdmm,


lt_txcdmmf TYPE STANDARD TABLE OF ty_txcdmm,
ls_txcdmm TYPE ty_txcdmm.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'J_1BTAXCODEV'
with_authority_check = 'X'
TABLES
data = lt_txcdmm.

* Here, this loop pass to the final table, only the procedure informed
LOOP AT lt_txcdmm INTO ls_txcdmm WHERE kalsm_d = uv_proced.
APPEND ls_txcdmm TO lt_txcdmmf.
ENDLOOP.

IF lt_txcdmmf IS NOT INITIAL.


PERFORM formatter USING lt_txcdmmf
ls_txcdmm
'Maintain Tax Codes' "#EC NOTEXT
'J_1BTAXCODEV'. "#EC NOTEXT
ENDIF.
ENDFORM.

* SD tax codes - description


*Tax Calculation > Tax Codes SD
FORM txsdtabs.
CONSTANTS lc_english_language TYPE c VALUE 'E'.

TYPES: BEGIN OF ty_txsdtable,


mandt TYPE mandt,
spras TYPE spras,
j_1btxsdc_ TYPE j_1btxsdc_,
j_1btxsdc0 TYPE j_1btxsdc0,
END OF ty_txsdtable.

DATA: lt_txsdtable TYPE STANDARD TABLE OF ty_txsdtable,


ls_txsdtable TYPE ty_txsdtable.

SELECT *
FROM j_1btxsdct
INTO TABLE lt_txsdtable
WHERE langu = lc_english_language.

PERFORM formatter USING lt_txsdtable


ls_txsdtable
'' "#EC NOTEXT
'J_1BTXSDCT'. "#EC NOTEXT

ENDFORM.

* Sequence for Tax Code and Law Determination


FORM seqlawcodtabs.

TYPES: BEGIN OF ty_sequencelaw,


mandt TYPE mandt,
j_1b_taxlaw_seq TYPE j_1b_taxlaw_seq,
j_1b_taxlaw_det TYPE j_1b_taxlaw_det,
END OF ty_sequencelaw.

TYPES: BEGIN OF ty_sequencecode,


mandt TYPE mandt,
j_1b_taxlaw_seq TYPE j_1b_taxlaw_seq,
j_1b_taxlaw_det TYPE j_1b_taxlaw_det,
END OF ty_sequencecode.

DATA: lt_sequencelaw TYPE STANDARD TABLE OF ty_sequencelaw,


ls_sequencelaw TYPE ty_sequencelaw,
lt_sequencecode TYPE STANDARD TABLE OF ty_sequencecode,
ls_sequencecode TYPE ty_sequencecode.

* Tax Calculation > Tax Code Determination SD.


SELECT *
FROM j_1btxcodeseq
INTO TABLE lt_sequencecode.

PERFORM formatter USING lt_sequencecode


ls_sequencecode
'' "#EC NOTEXT
'J_1BTXCODESEQ'. "#EC NOTEXT

* Tax Calculation > Tax Law Determination SD.


SELECT *
FROM j_1btxlawseq
INTO TABLE lt_sequencelaw.
PERFORM formatter USING lt_sequencelaw
ls_sequencelaw
'' "#EC NOTEXT
'J_1BTXLAWSEQ'. "#EC NOTEXT
ENDFORM.

* Internal Codes for Tax Conditions


* Condition Setup > Internal Codes
FORM csintcodtabs.

TYPES: BEGIN OF ty_csintcodtab,


mandt TYPE mandt,
j_1btxcode TYPE j_1btxcode,
bezei60 TYPE bezei60,
j_1bcondgrp TYPE j_1bcondgrp,
END OF ty_csintcodtab.

DATA: lt_csintcodtab TYPE STANDARD TABLE OF ty_csintcodtab,


ls_csintcodtab TYPE ty_csintcodtab.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'J_1BCONDMAPV'
with_authority_check = 'X'
TABLES
data = lt_csintcodtab.

PERFORM formatter USING lt_csintcodtab


ls_csintcodtab
'Internal Codes for Tax Conditions' "#EC NOTEXT
'J_1BCONDMAPV'. "#EC NOTEXT
ENDFORM.

* Map Internal Codes for Tax Conditions to Condition Types


* Condition Setup > Condition Mapping > Assing Conditions to Internal Codes
FORM txconditiontabs.

* Tax condition tab structure


TYPES: BEGIN OF ty_txconditiontab,
mandt TYPE mandt,
j_1btxcode TYPE j_1btxcode,
kappl TYPE kappl,
kschl TYPE kschl,
END OF ty_txconditiontab.

DATA: lt_txconditiontab TYPE STANDARD TABLE OF ty_txconditiontab,


ls_txconditiontab TYPE ty_txconditiontab.

SELECT *
INTO TABLE lt_txconditiontab
FROM j_1btxcond.

PERFORM formatter USING lt_txconditiontab


ls_txconditiontab
'' "#EC NOTEXT
'J_1BTXCOND'. "#EC NOTEXT
ENDFORM.
* Map Tax Rate Tables to Condition Tables
* Condition Setup > Condition Mapping > Max Tax Rate Tables to Condition Tables
FORM maptxratetabs.

* Map tax rate structure


TYPES: BEGIN OF ty_maptxratetab,
mandt TYPE mandt,
tabname TYPE tabname,
j_1btxgrp TYPE j_1btxgrp,
kotabnr TYPE kotabnr,
END OF ty_maptxratetab.

DATA: lt_maptxratetab TYPE STANDARD TABLE OF ty_maptxratetab,


ls_maptxratetab TYPE ty_maptxratetab.

SELECT *
INTO TABLE lt_maptxratetab
FROM j_1bviewmap.

PERFORM formatter USING lt_maptxratetab


ls_maptxratetab
'' "#EC NOTEXT
'J_1BVIEWMAP'. "#EC NOTEXT
ENDFORM.

* Tax types
* Condition Setup > Tax Types
FORM taxtypestabs.

TYPES: BEGIN OF ty_taxtypestab,


mandt TYPE mandt,
j_1btaxtyp TYPE j_1btaxtyp,
j_1btaxgrp TYPE j_1btaxgrp,
j_1bttytxt TYPE j_1bttytxt,
j_1blppact TYPE j_1blppact,
j_1btxwht TYPE j_1btxwht,
j_1btaxoffset TYPE j_1btaxoffset,
END OF ty_taxtypestab.

DATA: lt_taxtypestab TYPE STANDARD TABLE OF ty_taxtypestab,


ls_taxtypestab TYPE ty_taxtypestab.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'J_1BAJV'
with_authority_check = 'X'
TABLES
data = lt_taxtypestab.

PERFORM formatter USING lt_taxtypestab


ls_taxtypestab
'Tax Types' "#EC NOTEXT
'J_1BAJV'. "#EC NOTEXT
ENDFORM.

* Pricing Procedures with Internal Codes


* Condition Setup > Calc. Procedures > Calc. Procedures SD
FORM calcprosdtabs USING uv_compcode TYPE bukrs
u_procedure TYPE kalsm_d.

* Get the country where the company code is equal of the informed
* and verify if the company code exists
SELECT SINGLE land1
FROM t001
INTO gv_land1
WHERE bukrs = uv_compcode.

IF sy-subrc = 0.

* This select join the princing procedure with the internal codes related
SELECT DISTINCT t683s~mandt j_1btxcond~code t683s~kappl t683s~kalsm
t683s~stunr t683s~zaehk t683s~kschl t683s~stunb t683s~stun2
t683s~kauto t683s~kobli t683s~kstat t683s~drukz t683s~kzwiw
t683s~kobed t683s~kofrm t683s~kofra t683s~kvsl1 t683s~kvsl2
INTO gs_calcprotab
FROM t683s
LEFT JOIN j_1btxcond "#EC *
ON t683s~kschl = j_1btxcond~kschl
WHERE ( t683s~kalsm = u_procedure )
AND kalsm = u_procedure
ORDER BY stunr. "Ordering by the number step

* This table will be used in access sequences and condition types


APPEND gs_calcprotab TO gt_calcprotab.

* This table will be printed


APPEND gs_calcprotab TO gt_calcprotabf.

* This table will be used to show the account keys later


APPEND gs_calcprotab-kvsl1 TO gt_acckeys.
ENDSELECT.

CONCATENATE 'Schema SD. Procedure: ' u_procedure "#EC NOTEXT


INTO gv_headerkalsm RESPECTING BLANKS. "#EC NOTEXT

PERFORM formatter USING gt_calcprotabf


gs_calcprotab
gv_headerkalsm
'V_T683S'. "#EC NOTEXT

* To ensure that won't have duplicated info


CLEAR gt_calcprotabf.
ENDIF.

ENDFORM.

* Condition Setup > Calc. Procedures > Calc. Procedures MM


FORM calcprommtabs USING uv_compcode TYPE bukrs
uv_proced TYPE kalsm_d.

* To ensure that won't have duplicated info


CLEAR gt_calcprotab.

* This select join the princing procedure with the internal codes related
SELECT SINGLE land1
FROM t001
INTO gv_land1
WHERE bukrs = uv_compcode.

IF sy-subrc = 0.
* This select join the princing procedure with the internal codes related
SELECT DISTINCT t683s~mandt j_1btxcond~code t683s~kappl t683s~kalsm
t683s~stunr t683s~zaehk t683s~kschl t683s~stunb t683s~stun2
t683s~kauto t683s~kobli t683s~kstat t683s~drukz t683s~kzwiw
t683s~kobed t683s~kofrm t683s~kofra t683s~kvsl1 t683s~kvsl2
INTO TABLE gt_calcprotab
FROM t683s
LEFT JOIN j_1btxcond "#EC *
ON t683s~kschl = j_1btxcond~kschl
WHERE ( t683s~kalsm = uv_proced )
ORDER BY stunr.

* This table will be used to show the account keys later


LOOP AT gt_calcprotab INTO gs_calcprotab.
APPEND gs_calcprotab-kvsl1 TO gt_acckeys.
ENDLOOP.

CONCATENATE 'Schema MM. Procedure: ' uv_proced "#EC NOTEXT


INTO gv_headerkalsm RESPECTING BLANKS.

PERFORM formatter USING gt_calcprotab


gs_calcprotab
gv_headerkalsm
'V_T683S'. "#EC NOTEXT
ENDIF.

ENDFORM.

* Pricing Procedures: Determination in Sales Docs.


* Data from table V_T683V through SM30
FORM priprosadoctabs USING uv_proced TYPE kalsm_d
uv_salesorg TYPE vkorg
uv_compcode TYPE bukrs.

* Sales order structure


TYPES: BEGIN OF ty_salesorgint,
vkorg TYPE vkorg,
END OF ty_salesorgint.

* Pricing Procedure structure


TYPES: BEGIN OF ty_priprosadoc,
mandt TYPE mandt,
vkorg TYPE vkorg,
vtweg TYPE vtweg,
spart TYPE spart,
kalvg TYPE kalvg,
kalks TYPE kalks,
kalsm_d TYPE kalsm_d,
vtxtm TYPE vtxtm,
kartv TYPE kartv,
vtxtk TYPE vtxtk,
END OF ty_priprosadoc.

CONSTANTS: lc_language_key TYPE c VALUE 'E',


lc_usage TYPE c VALUE 'A',
lc_application_sd TYPE c VALUE 'V'.

DATA: lt_priprosadoc TYPE STANDARD TABLE OF ty_priprosadoc,


ls_priprosadoc TYPE ty_priprosadoc,
lt_salesorg TYPE STANDARD TABLE OF ty_salesorgint.

IF uv_salesorg IS NOT INITIAL.

SELECT t683v~mandt t683v~vkorg t683v~vtweg t683v~spart t683v~kalvg


t683v~kalks t683v~kalsm t683u~vtext t683v~kartv t685t~vtext
INTO TABLE lt_priprosadoc
FROM t683v
INNER JOIN t685t
ON t685t~kschl = t683v~kartv
INNER JOIN t683u "#EC *
ON t683u~kalsm = t683v~kalsm
WHERE t683u~spras = lc_language_key
AND t685t~spras = lc_language_key
AND t683u~kvewe = lc_usage
AND t683u~kappl = lc_application_sd
AND t685t~kvewe = lc_usage
AND t685t~kappl = lc_application_sd
AND t683v~kalsm = uv_proced
AND t683v~vkorg = uv_salesorg.

PERFORM formatter USING lt_priprosadoc


ls_priprosadoc
'Pricing Procedures: Determination in Sales Docs' "#EC
NOTEXT
'V_T683V'. "#EC NOTEXT

ELSE.

* Get the sales org that came empty


SELECT vkorg
FROM tvko
INTO TABLE lt_salesorg
WHERE bukrs = uv_compcode.

IF sy-subrc = 0.
SELECT t683v~mandt t683v~vkorg t683v~vtweg t683v~spart t683v~kalvg
t683v~kalks t683v~kalsm t683u~vtext t683v~kartv t685t~vtext
INTO TABLE lt_priprosadoc
FROM t683v
INNER JOIN t685t
ON t685t~kschl EQ t683v~kartv
INNER JOIN t683u "#EC *
ON t683u~kalsm EQ t683v~kalsm
FOR ALL ENTRIES IN lt_salesorg
WHERE t683u~spras = lc_language_key
AND t685t~spras = lc_language_key
AND t683u~kvewe = lc_usage
AND t683u~kappl = lc_application_sd
AND t685t~kvewe = lc_usage
AND t685t~kappl = lc_application_sd
AND t683v~kalsm = uv_proced
AND t683v~vkorg = lt_salesorg-vkorg.

PERFORM formatter USING lt_priprosadoc


ls_priprosadoc
'Pricing Procedures: Determination in Sales Docs'
"#EC NOTEXT
'V_T683V'. "#EC NOTEXT

ENDIF.

ENDIF.

ENDFORM.

* Calculation Procedures for Condition Based Tax Calculation


*Data from table J_1BCBTAXPROCV through SM30 for MM.
FORM calprommtabs.

CONSTANTS: lc_usage_a TYPE c VALUE 'A',


lc_application_mm TYPE c VALUE 'TX' LENGTH 2.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'J_1BCBTAXPROCV'
with_authority_check = 'X'
TABLES
data = gt_calprommsd.

* Get from the select just the SD info


LOOP AT gt_calprommsd INTO gs_calprommsd
WHERE kvewe = lc_usage_a
AND kappl = lc_application_mm.

APPEND gs_calprommsd TO gt_calprommsdf.


ENDLOOP.

PERFORM formatter USING gt_calprommsdf


gs_calprommsd
'Calculation Procedures for Condition Based Tax
Calculation MM' "#EC NOTEXT
'J_1BCBTAXPROCV'. "#EC NOTEXT
ENDFORM.

*Data from table J_1BCBTAXPROCV through SM30 for SD.


FORM calprosdtabs.

CONSTANTS: lc_usage_a TYPE c VALUE 'A',


lc_application_sd TYPE c VALUE 'V'.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'J_1BCBTAXPROCV'
with_authority_check = 'X'
TABLES
data = gt_calprommsd.
* Get from the select just the SD info
LOOP AT gt_calprommsd INTO gs_calprommsd
WHERE kvewe = lc_usage_a
AND kappl = lc_application_sd.

APPEND gs_calprommsd TO gt_calprommsdf.


ENDLOOP.

PERFORM formatter USING gt_calprommsdf


gs_calprommsd
'Calculation Procedures for Condition Based Tax
Calculation SD' "#EC NOTEXT
'J_1BCBTAXPROCV'. "#EC NOTEXT
CLEAR gt_calprommsdf.
CLEAR gt_calprommsd.
ENDFORM.

* Conditions Types
* Condition Setup > Condition Types > Condition Types SD
FORM conditiontypesd USING uv_header TYPE c.

CONSTANTS lc_language_key_en TYPE c VALUE 'E'.

* It inform if the condition types are from MM or SD, and then print the right
header
IF uv_header = abap_true.
WRITE:/ 'Table name: V_T685A ', "#EC NOTEXT
'Description: View mode of Condition Types SD used by Brazilians Procedures'.
"#EC NOTEXT
ENDIF.

* This table will be used to comparing


LOOP AT gt_calcprotab INTO gs_calcprotab.
MOVE-CORRESPONDING gs_calcprotab TO gs_unique.
APPEND gs_unique TO gt_unique.
ENDLOOP.

* To Ensure that this Condition Type is unique


SORT gt_unique ASCENDING.
DELETE ADJACENT DUPLICATES FROM gt_unique.
DELETE gt_unique INDEX 1.

* Get text from Condition Type


SELECT vtext kschl
FROM t685t
INTO TABLE gt_descondtypetxt
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl
AND spras = lc_language_key_en.

* Get the text from Access Seq.


SELECT kozgf kschl
FROM t685
INTO TABLE gt_accesseqtxt
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get tab Control Data 1


SELECT mandt kschl koaid krech kntyp
txprf kdupl purp dtasrc knega
FROM t685a
INTO TABLE gt_ctcontroldt1
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get Tab Group Condition


SELECT kschl kgrpe rdifa grlnr
FROM t685a
INTO TABLE gt_ctgroupcond
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get Tab Changes Which Can Be Made


SELECT kschl kmanu kkopf kposi kaend_loe
kaend_btr kaend_wrt kaend_ufk kaend_rch
FROM t685a
INTO TABLE gt_ctchangeswcbm
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get Tab Master Data


SELECT t685a~kschl t685~dtvob t685~datvo t685a~rkschl t685a~rkappl
t685a~kalsm t685a~kdele t685a~idxup t685a~koupd
INTO TABLE gt_ctmasterdata
FROM t685a
JOIN t685 "#EC *
ON t685a~kschl = t685~kschl
FOR ALL ENTRIES IN gt_unique
WHERE t685a~kschl = gt_unique-kschl.

* To do the select w/o join, because t685a is a buffered table


* SELECT kschl rkschl rkappl kalsm kdele idxup koupd
* INTO CORRESPONDING FIELDS OF TABLE gt_ctmasterdata
* FROM t685a
* FOR ALL ENTRIES IN gt_unique
* WHERE kschl = gt_unique-kschl.
*
* SELECT kschl dtvob datvo
* INTO TABLE lt_testetable
* FROM t685
* FOR ALL ENTRIES IN gt_unique
* WHERE kschl = gt_unique-kschl.
*
* LOOP AT gt_ctmasterdata INTO gs_ctmasterdata.
* READ TABLE lt_testetable INTO ls_testetable WITH KEY kschl =
gs_ctmasterdata.
* gs_ctmasterdata-dtvob = ls_testetable-dtvob.
* gs_ctmasterdata-datvo = ls_testetable-datvo.
* MODIFY gt_ctmasterdata FROM gs_ctmasterdata.
* ENDLOOP.

* Get Tab Scales


SELECT kschl kzbzg kstpr stfkz kofrs grmen
FROM t685a
INTO TABLE gt_ctscales
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.
* Get Tab Rebate
SELECT kschl bover rukor prech
FROM t685a
INTO TABLE gt_ctsrebate
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get tab Master Data 2


SELECT kschl ganzz kruek kreli kfkiv aktko kvarc
kmeng bnktk kznep kprdt bnkwe ktrel
FROM t685a
INTO TABLE gt_ctmasterdata2
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get Tab Sales Pricing


SELECT kschl vkkal vkobl
FROM t685a
INTO TABLE gt_ctsalespricing
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

* Get Tab Text Determination


SELECT kschl txtgr tdid
FROM t685a
INTO TABLE gt_cttextdetermin
FOR ALL ENTRIES IN gt_unique
WHERE kschl = gt_unique-kschl.

LOOP AT gt_unique INTO gs_unique.

* To get text from Condition Type


READ TABLE gt_descondtypetxt INTO gs_descondtypetxt
WITH KEY kschl = gs_unique-kschl.

* To get the text from Access Seq.


READ TABLE gt_accesseqtxt INTO gs_accesseqtxt
WITH KEY kschl = gs_unique-kschl.

* Show the internal code as sub header


WRITE:/'Internal Code:', gs_unique-code. "#EC NOTEXT

* Read tab Control Data 1


LOOP AT gt_ctcontroldt1 INTO gs_ctcontroldt1 WHERE kschl = gs_unique-kschl.
APPEND gs_ctcontroldt1 TO gt_ctcontroldt1f.
ENDLOOP.

PERFORM printer USING gt_ctcontroldt1f


gs_ctcontroldt1
gs_unique-kschl
'CONTROL DATA 1' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctcontroldt1f.

* Read Tab Group Condition


LOOP AT gt_ctgroupcond INTO gs_ctgroupcond WHERE kschl = gs_unique-kschl.
APPEND gs_ctgroupcond TO gt_ctgroupcondf.
ENDLOOP.

PERFORM printer USING gt_ctgroupcondf


gs_ctgroupcond
gs_unique-kschl
'GROUP CONDITION' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctgroupcondf.

* Read Tab Changes Which Can Be Made


LOOP AT gt_ctchangeswcbm INTO gs_ctchangeswcbm WHERE kschl = gs_unique-kschl.
APPEND gs_ctchangeswcbm TO gt_ctchangeswcbmf.
ENDLOOP.

PERFORM printer USING gt_ctchangeswcbmf


gs_ctchangeswcbm
gs_unique-kschl
'CHANGES WHICH CAN BE MADE' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctchangeswcbmf.

* Read Tab Master Data


LOOP AT gt_ctmasterdata INTO gs_ctmasterdata WHERE kschl = gs_unique-kschl.
APPEND gs_ctmasterdata TO gt_ctmasterdataf.
ENDLOOP.

PERFORM printer USING gt_ctmasterdataf


gs_ctmasterdata
gs_unique-kschl
'MASTER DATA' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctmasterdataf.

* Read Tab Scales


LOOP AT gt_ctscales INTO gs_ctscales WHERE kschl = gs_unique-kschl.
APPEND gs_ctscales TO gt_ctscalesf.
ENDLOOP.

PERFORM printer USING gt_ctscalesf


gs_ctscales
gs_unique-kschl
'SCALES' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctscalesf.

* Read Tab Rebate


LOOP AT gt_ctsrebate INTO gs_ctsrebate WHERE kschl = gs_unique-kschl.
APPEND gs_ctsrebate TO gt_ctsrebatef.
ENDLOOP.

PERFORM printer USING gt_ctsrebatef


gs_ctsrebate
gs_unique-kschl
'REBATE' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctsrebatef.

* Read tab Master Data 2


LOOP AT gt_ctmasterdata2 INTO gs_ctmasterdata2 WHERE kschl = gs_unique-kschl.
APPEND gs_ctmasterdata2 TO gt_ctmasterdata2f.
ENDLOOP.

PERFORM printer USING gt_ctmasterdata2f


gs_ctmasterdata2
gs_unique-kschl
'MASTER DATA 2' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctmasterdata2f.

* Read Tab Sales Pricing


LOOP AT gt_ctsalespricing INTO gs_ctsalespricing WHERE kschl = gs_unique-kschl.
APPEND gs_ctsalespricing TO gt_ctsalespricingf.
ENDLOOP.

PERFORM printer USING gt_ctsalespricingf


gs_ctsalespricing
gs_unique-kschl
'SALES PRICING' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_ctsalespricingf.

* Read Tab Text Determination


LOOP AT gt_cttextdetermin INTO gs_cttextdetermin WHERE kschl = gs_calcprotab-
kschl.
APPEND gs_cttextdetermin TO gt_cttextdeterminf.
ENDLOOP.

PERFORM printer USING gt_cttextdeterminf


gs_cttextdetermin
gs_unique-kschl
'TEXT DETERMINATION' "#EC NOTEXT
gs_descondtypetxt
gs_accesseqtxt.
CLEAR gt_cttextdeterminf.

WRITE:/
'//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//////////////////////'. "#EC NOTEXT
WRITE:/
'----------------------------------------------------------------------------- ',
'End of Condition Type: ', gs_unique-kschl, '
------------------------------------------------------------------------------'.
"#EC NOTEXT
WRITE:/
'//////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
//////////////////////'. "#EC NOTEXT

ENDLOOP.
ENDFORM.

* Condition Setup > Condition Types > Condition Types MM


FORM conditiontypemm.

CLEAR gt_unique.
CLEAR gs_unique.

WRITE:/ 'Table name: V_T685A ', "#EC NOTEXT


'Description: View mode of Condition Types MM used by Brazilians Procedures'.
"#EC NOTEXT

PERFORM conditiontypesd USING ''. "#EC NOTEXT

ENDFORM.

* Organize how to print each tab


FORM printer USING ut_condf TYPE ANY TABLE
us_condf TYPE any
uv_cond_type TYPE any
uv_header TYPE string
uv_descondtype TYPE any
uv_accesseq TYPE any.
SKIP.
WRITE:/ 'Condition Type:',uv_cond_type, ' - ', uv_descondtype, "#EC NOTEXT
' Access Seq.:', uv_accesseq. "#EC NOTEXT
SKIP.
WRITE:/'Header:', uv_header. "#EC NOTEXT
SKIP.
PERFORM formatter USING ut_condf us_condf '' ''. "#EC NOTEXT
ENDFORM.

* Activate Condition-Based Tax Calculation


* Data from view V_T001 by uv_compcode, ACB confirmation from table J_1BCONDTAXACT
* and main procedure from table V_T005
FORM compcodeprint USING uv_compcode TYPE bukrs.

DATA: lt_compcond TYPE STANDARD TABLE OF v_t001,


ls_compcond TYPE v_t001,
lv_actcondtxcal TYPE j_1bcondtaxact-active,
lv_procedure TYPE kalsm_d.

* Get info that have the same compan code


SELECT mandt bukrs butxt ort01 land1 waers spras adrnr
FROM t001
INTO TABLE lt_compcond
WHERE bukrs = uv_compcode.

READ TABLE lt_compcond INTO ls_compcond INDEX 1.

* Get info if the CBT is active


SELECT SINGLE active
FROM j_1bcondtaxact
INTO lv_actcondtxcal
WHERE land1 = ls_compcond-land1.

* Get the procedure related to country informed


SELECT SINGLE kalsm
FROM t005
INTO lv_procedure
WHERE land1 = ls_compcond-land1.

WRITE:/ 'Calculation procedure:', lv_procedure. "#EC NOTEXT

IF lv_actcondtxcal = gc_blank.
WRITE:/ 'Condition-based calculation (CBT): No (Classic)'. "#EC NOTEXT
SKIP.

ELSE.
WRITE:/ 'Condition-based calculation (CBT): Active'. "#EC NOTEXT
SKIP.

ENDIF.
* PERFORM formatter USING lt_compcond
* ls_compcond
* '' "#EC NOTEXT
* ''. "#EC NOTEXT

ENDFORM.

* Access Sequences
FORM accesseqsd USING uv_saponly TYPE c.

TYPES: BEGIN OF ty_kschl,


kschl TYPE kschl,
END OF ty_kschl.

* Structure for of access sequence


TYPES: BEGIN OF ty_accessequence,
kozgf TYPE kozgf,
kolnr TYPE kolnr,
kotabnr TYPE kotabnr,
kobed TYPE kobed,
kzexl TYPE kzexl,
END OF ty_accessequence.

* Structure for fields of access sequence


TYPES: BEGIN OF ty_accessequefields,
kozgf TYPE kozgf,
kolnr TYPE kolnr,
dzifna TYPE dzifna,
qustr TYPE qustr,
qufna TYPE qufna,
qudiw TYPE qudiw,
kzini TYPE kzini,
fstst TYPE fstst,
mbwrt TYPE mbwrt,
END OF ty_accessequefields.

DATA: lt_accesses TYPE STANDARD TABLE OF ty_accessequence,


lt_accessesf TYPE STANDARD TABLE OF ty_accessequence,
ls_accesses TYPE ty_accessequence,
ls_accessesf TYPE ty_accessequence,

lt_kschlsd TYPE STANDARD TABLE OF ty_kschl,


ls_kschlsd TYPE ty_kschl,
lt_accfields TYPE STANDARD TABLE OF ty_accessequefields,
lt_accfieldsf TYPE STANDARD TABLE OF ty_accessequefields,
ls_accfields TYPE ty_accessequefields,

lv_headercc TYPE string.

* Feed the table that contains only the condition types, to be displayed later
LOOP AT gt_calcprotab INTO gs_calcprotab.
APPEND gs_calcprotab-kschl TO lt_kschlsd.
ENDLOOP.

* Sort the table to delete duplicates condition types


SORT lt_kschlsd ASCENDING.
DELETE ADJACENT DUPLICATES FROM lt_kschlsd.

* Vefiry the variable and use the condition to get only no delivered by SAP
IF uv_saponly = abap_true.

* Get all access sequences numbers and first information


SELECT kozgf kolnr kotabnr kobed kzexl
INTO TABLE lt_accesses
FROM t682i
FOR ALL ENTRIES IN lt_kschlsd
WHERE kozgf = lt_kschlsd-kschl
AND kolnr <= gc_ten
OR kolnr >= gc_ninety.

* Get the description of each access sequence


SELECT kozgf kolnr zifna qustr qufna qudiw kzini fstst mbwrt
FROM t682z
INTO TABLE lt_accfields
FOR ALL ENTRIES IN lt_kschlsd
WHERE kozgf = lt_kschlsd-kschl
AND kolnr <= gc_ten
OR kolnr >= gc_ninety.

ELSE.

* Get all access sequences numbers and first information


SELECT kozgf kolnr kotabnr kobed kzexl
INTO TABLE lt_accesses
FROM t682i
FOR ALL ENTRIES IN lt_kschlsd
WHERE kozgf = lt_kschlsd-kschl.

* Get the description of each access sequence


SELECT kozgf kolnr zifna qustr qufna qudiw kzini fstst mbwrt
FROM t682z
INTO TABLE lt_accfields
FOR ALL ENTRIES IN lt_kschlsd
WHERE kozgf = lt_kschlsd-kschl.

ENDIF.

* This table come with the first field empty


DELETE lt_kschlsd INDEX 1.

* Loot at condition types


LOOP AT lt_kschlsd INTO ls_kschlsd.

* This loop gets all accesses seq. that have the actual condition type
LOOP AT lt_accesses INTO ls_accesses WHERE kozgf = ls_kschlsd-kschl.
APPEND ls_accesses TO lt_accessesf.
ENDLOOP.

IF lt_accessesf IS NOT INITIAL.


SORT lt_accessesf BY kolnr ASCENDING.
CONCATENATE 'Access Sequences for SD. Condition Type: ' ls_kschlsd-kschl
"#EC NOTEXT
INTO lv_headercc.
PERFORM formatter USING lt_accessesf
ls_accesses
lv_headercc
'V_T682I'.

* This loop is show all fields(lines) of each access sequence


LOOP AT lt_accessesf INTO ls_accessesf.

LOOP AT lt_accfields INTO ls_accfields


WHERE kozgf = ls_kschlsd-kschl
AND kolnr = ls_accessesf-kolnr.
APPEND ls_accfields TO lt_accfieldsf.
ENDLOOP.

CONCATENATE 'Fields of Access: ' ls_accessesf-kolnr "#EC NOTEXT


' Condition Type: ' ls_kschlsd-kschl "#EC NOTEXT
INTO lv_headercc.

PERFORM formatter USING lt_accfieldsf


ls_accfields
lv_headercc
'V_T682Z'.

* Just to make sure that won't have repeated info


CLEAR lt_accfieldsf.

ENDLOOP.

WRITE:/
'----------------------------------------------------------------------------', '
End of Condition Type: ',ls_kschlsd-kschl, '
-------------------------------------------------------------------------------'.
"#EC NOTEXT
SKIP.

* Just to make sure that won't have repeated info


CLEAR lt_accessesf.

ENDIF.

ENDLOOP.

ENDFORM.

* Assign Tax Croup to SD Internal Codes


* Assign Tax Group to SD Internal Codes
FORM txgrpintcdsd.
TYPES: BEGIN OF ty_txgrpintcdsd,
j_1btaxgrp TYPE j_1btaxgrp,
j_1btxcode TYPE j_1btxcode,
END OF ty_txgrpintcdsd.

DATA: lt_txgrpintcdsd TYPE STANDARD TABLE OF ty_txgrpintcdsd,


ls_txgrpintcdsd TYPE ty_txgrpintcdsd.

SELECT *
INTO TABLE lt_txgrpintcdsd
FROM j_1btaxgrpcd.

PERFORM formatter USING lt_txgrpintcdsd


ls_txgrpintcdsd
'' "#EC NOTEXT
'J_1BTAXGRPCD'. "#EC NOTEXT
ENDFORM.

* Jurisdiction Code Structure


* Condition Setup > Tax Types
FORM juriscode.

TYPES: BEGIN OF ty_leng1,


lengx_txd TYPE lengx_txd,
END OF ty_leng1.

TYPES: BEGIN OF ty_juriscode,


mandt TYPE mandt,
tax_kalsm TYPE tax_kalsm,
ty_leng1 TYPE ty_leng1,
ty_leng2 TYPE ty_leng1,
ty_leng3 TYPE ty_leng1,
ty_leng4 TYPE ty_leng1,
xtxit_txd TYPE xtxit_txd,
text1_txdt TYPE text1_txdt,
END OF ty_juriscode.

DATA: lt_juriscode TYPE STANDARD TABLE OF ty_juriscode,


ls_juriscode TYPE ty_juriscode.

* This function gets the maintenance view table


CALL FUNCTION 'VIEW_GET_DATA'
EXPORTING
view_name = 'V_TTXD'
with_authority_check = 'X'
TABLES
data = lt_juriscode.

PERFORM formatter USING lt_juriscode


ls_juriscode
'Jurisdiction Code Structure' "#EC NOTEXT
'V_TTXD'. "#EC NOTEXT
ENDFORM.

* Movement Type
FORM movementypes.

TYPES: BEGIN OF ty_movementyp,


bwart TYPE j_1bim02v-bwart,
END OF ty_movementyp.

TYPES: BEGIN OF ty_mvtinfoentryct,


bwart TYPE bwart,
kzdru TYPE kzdru,
selpa TYPE selpa,
kzcla TYPE kzcla,
chneu TYPE chneu,
xkcfc TYPE xkcfc,
kzmhd TYPE kzmhd,
kzkon TYPE kzkon,
kzgru TYPE kzgru,
bf_rules TYPE bf_rules,
xwsbr TYPE xwsbr,
END OF ty_mvtinfoentryct.

TYPES: BEGIN OF ty_mvtinfoupdatect,


bwart TYPE bwart,
xlaut TYPE xlaut,
xpbed TYPE xpbed,
xinvb TYPE xinvb,
xnebe TYPE xnebe,
kzstr TYPE kzstr,
kzvbu TYPE kzvbu,
xoarc TYPE xoarc,
END OF ty_mvtinfoupdatect.

TYPES: BEGIN OF ty_mvtinfointct,


bwart TYPE bwart,
xstbw TYPE xstbw,
xkoko TYPE xkoko,
kzbwa TYPE kzbwa,
co_wipb_xwipb TYPE co_wipb_xwipb,
shkzg TYPE shkzg,
rstyp TYPE rstyp,
kzwes TYPE kzwes,
kzdir TYPE kzdir,
END OF ty_mvtinfointct.

TYPES: BEGIN OF ty_mvtallowtran,


bwart TYPE bwart,
tcode TYPE tcode,
xkzbew TYPE xkzbew,
END OF ty_mvtallowtran.

TYPES: BEGIN OF ty_mvtwmupdatecontrol,


bwart TYPE bwart,
wertu TYPE wertu,
mengu TYPE mengu,
sobkz TYPE sobkz,
kzbew TYPE kzbew,
kzzug TYPE kzzug,
kzvbr TYPE kzvbr,
xverf TYPE xverf,
kzvbp TYPE kzvbp,
prreg TYPE prreg,
xlifo TYPE xlifo,
rblvs TYPE rblvs,
lvs_umrbl TYPE lvs_umrbl,
lvs_umrbu TYPE lvs_umrbu,
anzre TYPE anzre,
END OF ty_mvtwmupdatecontrol.

TYPES: BEGIN OF ty_bwart,


bwart TYPE bwart,
END OF ty_bwart.

TYPES: BEGIN OF ty_mvtreversalflw,


fcode TYPE fcode,
bwart TYPE bwart,
ty_bwart TYPE ty_bwart,
xstor TYPE xstor,
END OF ty_mvtreversalflw.

CONSTANTS: lc_nf_relevance_x TYPE c VALUE 'X',


lc_nf_relevance_u TYPE c VALUE 'U'.

DATA: lt_movementyp TYPE STANDARD TABLE OF ty_movementyp,


ls_movementyp TYPE ty_movementyp,

lt_mvtinfoentryct TYPE STANDARD TABLE OF ty_mvtinfoentryct,


lt_mvtinfoentryctf TYPE STANDARD TABLE OF ty_mvtinfoentryct,
ls_mvtinfoentryct TYPE ty_mvtinfoentryct,

lt_mvtinfoupdatect TYPE STANDARD TABLE OF ty_mvtinfoupdatect,


lt_mvtinfoupdatectf TYPE STANDARD TABLE OF ty_mvtinfoupdatect,
ls_mvtinfoupdatect TYPE ty_mvtinfoupdatect,

lt_mvtinfointct TYPE STANDARD TABLE OF ty_mvtinfointct,


lt_mvtinfointctf TYPE STANDARD TABLE OF ty_mvtinfointct,
ls_mvtinfointct TYPE ty_mvtinfointct,

lt_mvtallowtran TYPE STANDARD TABLE OF ty_mvtallowtran,


lt_mvtallowtranf TYPE STANDARD TABLE OF ty_mvtallowtran,
ls_mvtallowtran TYPE ty_mvtallowtran,

lt_mvtupdatecontrol TYPE STANDARD TABLE OF ty_mvtwmupdatecontrol,


lt_mvtupdatecontrolf TYPE STANDARD TABLE OF ty_mvtwmupdatecontrol,
ls_mvtupdatecontrol TYPE ty_mvtwmupdatecontrol,

lt_mvtreversalflw TYPE STANDARD TABLE OF ty_mvtreversalflw,


lt_mvtreversalflwf TYPE STANDARD TABLE OF ty_mvtreversalflw,
ls_mvtreversalflw TYPE ty_mvtreversalflw,

lv_mvttext TYPE string.

* Get all movement types


SELECT bwart
INTO TABLE lt_movementyp
FROM t156
WHERE j_1bnfrel = lc_nf_relevance_x
OR j_1bnfrel = lc_nf_relevance_u.

IF sy-subrc = 0.
* Subtabs from Movement Type Information

* Data of subtab Data Control


SELECT bwart kzdru selpa kzcla chneu xkcfc kzmhd kzkon kzgru rules xwsbr
INTO TABLE lt_mvtinfoentryct
FROM t156
FOR ALL ENTRIES IN lt_movementyp
WHERE bwart = lt_movementyp-bwart.

* Data of subtab Updating Control


SELECT bwart xlaut xpbed xinvb xnebe kzstr kzvbu xoarc
INTO TABLE lt_mvtinfoupdatect
FROM t156
FOR ALL ENTRIES IN lt_movementyp
WHERE bwart = lt_movementyp-bwart.

* Data of subtab Internal Control


SELECT bwart xstbw xkoko kzbwa xwipb shkzg rstyp kzwes kzdir
INTO TABLE lt_mvtinfointct
FROM t156
FOR ALL ENTRIES IN lt_movementyp
WHERE bwart = lt_movementyp-bwart.

* Data of tab Allowed Transactions


SELECT bwart tcode xkzbew INTO TABLE lt_mvtallowtran
FROM t158b
FOR ALL ENTRIES IN lt_movementyp
WHERE bwart = lt_movementyp-bwart.

* Data of Tab Update control/ WM movement types:


SELECT bwart wertu mengu sobkz kzbew kzzug kzvbr xverf kzvbp prreg xlifo
rblvs umrbl umrbu anzre
INTO TABLE lt_mvtupdatecontrol
FROM t156sc
FOR ALL ENTRIES IN lt_movementyp
WHERE bwart = lt_movementyp-bwart.

* Data of Tab Reversal/follow-on movement types


SELECT fcode bwart bwart_next xstor INTO TABLE lt_mvtreversalflw
FROM t156n
FOR ALL ENTRIES IN lt_movementyp
WHERE bwart = lt_movementyp-bwart.

ENDIF.

LOOP AT lt_movementyp INTO ls_movementyp.

* Header
lv_mvttext = ls_movementyp.

WRITE:/ 'Data of Movement Type: ', lv_mvttext. "#EC NOTEXT

* Reading subtab Entry Control


WRITE:/ 'TAB ENTRY CONTROL'. "#EC NOTEXT
READ TABLE lt_mvtinfoentryct INTO ls_mvtinfoentryct
WITH KEY bwart = ls_movementyp-bwart.
APPEND ls_mvtinfoentryct TO lt_mvtinfoentryctf.

IF sy-subrc = 0.
PERFORM formatter USING lt_mvtinfoentryctf
ls_mvtinfoentryct
'' "#EC NOTEXT
''. "#EC NOTEXT
CLEAR lt_mvtinfoentryctf.
ENDIF.

* Reading subtab Update Control


WRITE:/ 'TAB UPDATING CONTROL'. "#EC NOTEXT
READ TABLE lt_mvtinfoupdatect INTO ls_mvtinfoupdatect
WITH KEY bwart = ls_movementyp-bwart.
APPEND ls_mvtinfoupdatect TO lt_mvtinfoupdatectf.

IF sy-subrc = 0.
PERFORM formatter USING lt_mvtinfoupdatectf
ls_mvtinfoupdatect
'' "#EC NOTEXT
''. "#EC NOTEXT
CLEAR lt_mvtinfoupdatectf.
ENDIF.

* Reading subtab Internal Control


WRITE:/ 'TAB INTERNAL CONTROL'. "#EC NOTEXT
READ TABLE lt_mvtinfointct INTO ls_mvtinfointct
WITH KEY bwart = ls_movementyp-bwart.
APPEND ls_mvtinfointct TO lt_mvtinfointctf.

IF sy-subrc = 0.
PERFORM formatter USING lt_mvtinfointctf
ls_mvtinfointct
'' "#EC NOTEXT
''. "#EC NOTEXT
CLEAR lt_mvtinfointctf.
ENDIF.

* Reading tab Allow Transactions


WRITE:/'ALLOW TRANSACTIONS'. "#EC NOTEXT
LOOP AT lt_mvtallowtran INTO ls_mvtallowtran
WHERE bwart = ls_movementyp-bwart.
APPEND ls_mvtallowtran TO lt_mvtallowtranf.
ENDLOOP.

IF sy-subrc = 0.
PERFORM formatter USING lt_mvtallowtranf
ls_mvtallowtran
'' "#EC NOTEXT
''. "#EC NOTEXT
CLEAR lt_mvtallowtranf.
ENDIF.

* Reading tab Update Control/WM Movement Types


WRITE:/'UPDATE CONTROL / WM MOVEMENT TYPES'. "#EC NOTEXT
LOOP AT lt_mvtupdatecontrol INTO ls_mvtupdatecontrol
WHERE bwart = ls_movementyp-bwart.
APPEND ls_mvtupdatecontrol TO lt_mvtupdatecontrolf.
ENDLOOP.
IF sy-subrc = 0.
PERFORM formatter USING lt_mvtupdatecontrolf
ls_mvtupdatecontrol
'' "#EC NOTEXT
''. "#EC NOTEXT
CLEAR lt_mvtupdatecontrolf.
ENDIF.

* Data of Tab Reversal/follow-on movement types


WRITE:/'REVERSAL/ FOLLOW-ON MOVEMENT TYPES'. "#EC NOTEXT
LOOP AT lt_mvtreversalflw INTO ls_mvtreversalflw
WHERE bwart = ls_movementyp-bwart.
APPEND ls_mvtreversalflw TO lt_mvtreversalflwf.
ENDLOOP.

IF sy-subrc = 0.
PERFORM formatter USING lt_mvtreversalflwf
ls_mvtreversalflw
'' "#EC NOTEXT
''. "#EC NOTEXT
CLEAR lt_mvtreversalflwf.
ENDIF.

WRITE:/
'#########################################################################', 'End
of Movement Type: ', lv_mvttext,
'##################################################################################
####'. "#EC NOTEXT
SKIP.
ENDLOOP.
ENDFORM.

* MM-IM: Tax posting string for inventory management


FORM taxpostingstr USING uv_proced TYPE kalsm_d.

TYPES: BEGIN OF ty_taxpostingstr,


kvewe TYPE kvewe,
kappl TYPE kappl,
kalsm_d TYPE kalsm_d,
bustw TYPE bustw,
kschl TYPE kschl,
feldn TYPE feldn,
shnam TYPE shnam,
xbmat TYPE xbmat,
xbbst TYPE xbbst,
xbfau TYPE xbfau,
xauto TYPE xauto,
xpanz TYPE xpanz,
kzsim TYPE kzsim,
buzid TYPE buzid,
xumbw TYPE xumbw,
xkaao TYPE xkaao,
xmfrw TYPE xmfrw,
END OF ty_taxpostingstr.

DATA: lt_taxpostingstr TYPE STANDARD TABLE OF ty_taxpostingstr,


ls_taxpostingstr TYPE ty_taxpostingstr.
* Get all relevant data related with the procedure informed
SELECT kvewe kappl kalsm bustw kschl feldn shnam xbmat xbbst
xbfau xauto xpanz xbsim buzid xumbw xkaao xmfrw
INTO TABLE lt_taxpostingstr
FROM j_1bim01
WHERE kalsm = uv_proced.

IF sy-subrc = 0.
PERFORM formatter USING lt_taxpostingstr
ls_taxpostingstr
'' "#EC NOTEXT
'J_1BIM01'. "#EC NOTEXT

ENDIF.

ENDFORM.

* Nota Fiscal Relevance - Movement Type


FORM nfrelevance.

CONSTANTS: lc_nf_relevance_x TYPE c VALUE 'X',


lc_nf_relevance_u TYPE c VALUE 'U'.

* Nota fiscal relevance structure


TYPES: BEGIN OF ty_nfrelevance,
bwart TYPE bwart,
j_1bnfrel TYPE j_1bnfrel,
j_1bnftype TYPE j_1bnftype,
j_1bitmtyp TYPE j_1bitmtyp,
j_1bspcsto TYPE j_1bspcsto,
j_1bpartyp TYPE j_1bpartyp,
j_1bparvw TYPE j_1bparvw,
oih_j1b_nffi TYPE oih_j1b_nffi,
END OF ty_nfrelevance.

DATA: lt_nfrelevance TYPE STANDARD TABLE OF ty_nfrelevance,


ls_nfrelevance TYPE ty_nfrelevance.

* Select the nota fiscal relevant info of the movement types


SELECT bwart j_1bnfrel j_1bnftype j_1bitmtyp j_1bspcsto j_1bpartyp j_1bparvw
oij1bnffi
INTO TABLE lt_nfrelevance
FROM t156
WHERE j_1bnfrel = lc_nf_relevance_x
OR j_1bnfrel = lc_nf_relevance_u.

PERFORM formatter USING lt_nfrelevance


ls_nfrelevance
'MM-IV: Nota Fiscal Relevance' "#EC NOTEXT
'J_1BIM02V'. "#EC NOTEXT
ENDFORM.

* SD: Value transfer from pricing to Nota Fiscal


FORM nfamouttransd USING uv_proced TYPE kalsm_d.

TYPES: BEGIN OF ty_nfamouttransd,


mandt TYPE mandt,
kvewe TYPE kvewe,
kappl TYPE kappl,
kalsm_d TYPE kalsm_d,
kschl TYPE kschl,
j_1bsdktyp TYPE j_1bsdktyp,
j_1bexcipi TYPE j_1bexcipi,
j_1bstbrel TYPE j_1bstbrel,
j_1bstfrb TYPE j_1bstfrb,
END OF ty_nfamouttransd.

DATA: lt_nfamouttransd TYPE STANDARD TABLE OF ty_nfamouttransd,


ls_nfamouttransd TYPE ty_nfamouttransd.

* Get all data that have the same procedure informed


SELECT *
INTO TABLE lt_nfamouttransd
FROM j_1bsdkon0
WHERE kalsm = uv_proced.

IF sy-subrc = 0.
PERFORM formatter USING lt_nfamouttransd
ls_nfamouttransd
'' "#EC NOTEXT
'J_1BSDKON0'. "#EC NOTEXT

ENDIF.

ENDFORM.

* Posting string values


FORM poststringvaluemt.

* Ask about it for Zambiasi


TYPES: BEGIN OF ty_feldn,
feldn TYPE feldn,
END OF ty_feldn.

TYPES: BEGIN OF ty_feldn2,


feldn TYPE feldn,
END OF ty_feldn2.

* Posting String Values Strucutre


TYPES: BEGIN OF ty_poststrvalue,
bustw TYPE bustw,
mb_bustw_cnt TYPE mb_bustw_cnt,
vorsl TYPE vorsl,
feldn TYPE feldn,
ty_feldn TYPE ty_feldn,
ty_feldn2 TYPE ty_feldn2,
xbmat TYPE xbmat,
xbbst TYPE xbbst,
xbfau TYPE xbfau,
mb_xauto TYPE mb_xauto,
xpanz TYPE xpanz,
kzsim TYPE kzsim,
buzid TYPE buzid,
xumbw TYPE xumbw,
xkaao TYPE xkaao,
xmfrw TYPE xmfrw,
x2doc TYPE x2doc,
xbgbb TYPE xbgbb,
END OF ty_poststrvalue.

DATA: lt_poststrvalue TYPE STANDARD TABLE OF ty_poststrvalue,


ls_poststrvalue TYPE ty_poststrvalue.

* Get the detailed info of each Posting String


SELECT bustw cnt02 vorsl feldn shnam smnam xbmat xbbst xbfau
xauto xpanz xbsim buzid xumbw xkaao xmfrw x2doc xbgbb
FROM t156w
INTO TABLE lt_poststrvalue
FOR ALL ENTRIES IN gt_taxpostingstr
WHERE bustw = gt_taxpostingstr-bustw.

IF sy-subrc = 0.
PERFORM formatter USING lt_poststrvalue
ls_poststrvalue
'Posting string values' "#EC NOTEXT
'V156W'. "#EC NOTEXT

ENDIF.
ENDFORM.

* Business Place and NF-e: System Configuration per Business Place


* SPRO: Logistics General > Tax on Goods Movement > CNPJ Business Places > Define
Business Place
FORM businessplace USING uv_compcode TYPE bukrs
uv_business_place TYPE j_1bbranc_.

* Structure for Business Place


TYPES: BEGIN OF ty_bpnotafiscal,
bukrs TYPE bukrs,
j_1bbranc_ TYPE j_1bbranc_,
name1 TYPE name1,
j_1bcgcbra TYPE j_1bcgcbra,
j_1bstains TYPE j_1bstains,
j_1bmunins TYPE j_1bmunins,
j_1bindus2 TYPE j_1bindus2,
j_1bsuframa TYPE j_1bsuframa,
j_1bcrtn TYPE j_1bcrtn,
j_1btdt TYPE j_1btdt,
j_1bnire TYPE j_1bnire,
j_1bnfdec TYPE j_1bnfdec,
j_1bsingle TYPE j_1bsingle,
j_1bipicontributor TYPE j_1bipicontributor,
j_1b_source_danger_goods_data TYPE j_1b_source_danger_goods_data,
j_1bcnae TYPE j_1bcnae,
j_1bicmstaxpay TYPE j_1bicmstaxpay,
j_1bcomsize TYPE j_1bcomsize,
j_1bniredt TYPE j_1bniredt,
j_1bdecregpc TYPE j_1bdecregpc,
j_1blegalnat TYPE j_1blegalnat,
j_1bindtyp TYPE j_1bindtyp,
j_1bspedactind TYPE j_1bspedactind,
END OF ty_bpnotafiscal.

* Structure for NF-e: System Configuration per Business Place


TYPES: BEGIN OF ty_bpeletrifisc,
bukrs TYPE bukrs,
j_1bbranc_ TYPE j_1bbranc_,
j_1bmodel TYPE j_1bmodel,
j_1btxdatf TYPE j_1btxdatf,
j_1bnfetpamb TYPE j_1bnfetpamb,
j_1bxnfeactive TYPE j_1bxnfeactive,
j_1b_nfe_auto_server_determine TYPE j_1b_nfe_auto_server_determine,
j_1bnfexmlversion TYPE j_1bnfexmlversion,
rfcdest TYPE rfcdest,
j_1bnfeverproc TYPE j_1bnfeverproc,
j_1bnfealtregion TYPE j_1bnfealtregion,
j_1bnfetpemisnorm TYPE j_1bnfetpemisnorm,
j_1bnfetpemiscont TYPE j_1bnfetpemiscont,
j_1bnfeprocemi TYPE j_1bnfeprocemi,
j_1bnfefvaluf TYPE j_1bnfefvaluf,
j_1bnfefvalcmun TYPE j_1bnfefvalcmun,
j_1bnfefvalxmun TYPE j_1bnfefvalxmun,
j_1bnfe_continreason_msdowndef TYPE j_1bnfe_continreason_msdowndef,
j_1bnfe_continreason_switch TYPE j_1bnfe_continreason_switch,
j_1bnfe_continreason_scan TYPE j_1bnfe_continreason_scan,
j_1bnfe_cancel_automate TYPE j_1bnfe_cancel_automate,
j_1bnfe_auto_cancel_request TYPE j_1bnfe_auto_cancel_request,
j_1bnfe_cancelreason_switch TYPE j_1bnfe_cancelreason_switch,
j_1bnfe_cancelreason_pr_auth TYPE j_1bnfe_cancelreason_pr_auth,
j_1bnfe_event_group TYPE j_1bnfe_event_group,
END OF ty_bpeletrifisc.

DATA:
lt_bpnotafiscal TYPE STANDARD TABLE OF ty_bpnotafiscal,
ls_bpnotafiscal TYPE ty_bpnotafiscal,

lt_bpeletrfisc TYPE STANDARD TABLE OF ty_bpeletrifisc,


ls_bpeletrfisc TYPE ty_bpeletrifisc,

ls_bbranch TYPE j_1bbranch.

** Get all info of bunisses place


* SELECT bukrs branch name cgc_branch state_insc munic_insc
* industry suframa crtn tdt nire nfdec single
* ipicontributor soure_dangergood cnae icmstaxpay
* comsize niredt decregpc legalnat indtyp spedactind
* FROM j_1bbranch
* INTO TABLE lt_bpnotafiscal
* WHERE bukrs = uv_compcode
* AND branch = uv_business_place.
*
* IF sy-subrc NE 0.
* SKIP.
* ENDIF.

CALL FUNCTION 'J_1BREAD_BRANCH_DATA'


EXPORTING
BRANCH = uv_business_place
BUKRS = uv_compcode
IMPORTING
BRANCH_DATA = ls_bbranch
EXCEPTIONS
BRANCH_NOT_FOUND = 2
ADDRESS_NOT_FOUND = 1
COMPANY_NOT_FOUND = 3.
IF sy-subrc GT 1.
SKIP.
ENDIF.

ls_bpnotafiscal-bukrs = ls_bbranch-bukrs.
ls_bpnotafiscal-j_1bbranc_ = ls_bbranch-branch.
ls_bpnotafiscal-name1 = ls_bbranch-name.
ls_bpnotafiscal-j_1bcgcbra = ls_bbranch-cgc_branch.
ls_bpnotafiscal-j_1bstains = ls_bbranch-state_insc.
ls_bpnotafiscal-j_1bmunins = ls_bbranch-munic_insc.
ls_bpnotafiscal-j_1bindus2 = ls_bbranch-industry.
ls_bpnotafiscal-j_1bsuframa = ls_bbranch-suframa.
ls_bpnotafiscal-j_1bcrtn = ls_bbranch-crtn.
ls_bpnotafiscal-j_1btdt = ls_bbranch-tdt.
ls_bpnotafiscal-j_1bnire = ls_bbranch-nire.
ls_bpnotafiscal-j_1bnfdec = ls_bbranch-nfdec.
ls_bpnotafiscal-j_1bsingle = ls_bbranch-single.
ls_bpnotafiscal-j_1bipicontributor = ls_bbranch-ipicontributor.
ls_bpnotafiscal-j_1b_source_danger_goods_data = ls_bbranch-soure_dangergood.
ls_bpnotafiscal-j_1bcnae = ls_bbranch-cnae.
ls_bpnotafiscal-j_1bicmstaxpay = ls_bbranch-icmstaxpay.
ls_bpnotafiscal-j_1bcomsize = ls_bbranch-comsize.
ls_bpnotafiscal-j_1bniredt = ls_bbranch-niredt.
ls_bpnotafiscal-j_1bdecregpc = ls_bbranch-decregpc.
ls_bpnotafiscal-j_1blegalnat = ls_bbranch-legalnat.
ls_bpnotafiscal-j_1bindtyp = ls_bbranch-indtyp.
ls_bpnotafiscal-j_1bspedactind = ls_bbranch-spedactind.

APPEND ls_bpnotafiscal TO lt_bpnotafiscal.

CLEAR ls_bpnotafiscal.

* Get all info of NFe configuration


SELECT bukrs branch model validfrom tpamb xnfeactive
autoserver version rfcdest verproc region
tpemisnorm tpemiscont procemi valuf valcmun
valxmun contreason_ms contreasonswitch
contreason_scan cancel_automate auto_cancel_req
auto_cncl_reason cnclreason_pr_au event_group
FROM j_1bnfe_cust3
INTO TABLE lt_bpeletrfisc
WHERE bukrs = uv_compcode
AND branch = uv_business_place.

* Print Business Place


READ TABLE lt_bpnotafiscal INTO ls_bpnotafiscal
WITH KEY j_1bbranc_ = uv_business_place.
WRITE:/ 'Table Name: J_1BBRANCH ', "#EC NOTEXT
'Table Description: Business Place'. "#EC NOTEXT
SKIP.
WRITE:/ 'Company Code: ', ls_bpnotafiscal-bukrs. "#EC NOTEXT
WRITE:/ 'Business Place: ', ls_bpnotafiscal-j_1bbranc_, "#EC NOTEXT
' ', ls_bpnotafiscal-name1. "#EC NOTEXT
SKIP.
WRITE:/'Nota Fiscal'. "#EC NOTEXT
WRITE:/'CNPJ Bus. Place: ',ls_bpnotafiscal-j_1bcgcbra. "#EC NOTEXT
WRITE:/'State Tax No.: ', ls_bpnotafiscal-j_1bstains. "#EC NOTEXT
WRITE:/'Munic. Tax No.: ', ls_bpnotafiscal-j_1bmunins. "#EC NOTEXT
WRITE:/'BP CFOP Cat.: ', ls_bpnotafiscal-j_1bindus2. "#EC NOTEXT
WRITE:/'Suframa: ', ls_bpnotafiscal-j_1bsuframa,' ', "#EC NOTEXT
'CNAE: ', ls_bpnotafiscal-j_1bcnae, ' ', "#EC NOTEXT
'Legal Nature: ', ls_bpnotafiscal-j_1blegalnat. "#EC NOTEXT
WRITE:/'CRT Number: ', ls_bpnotafiscal-j_1bcrtn,' ', "#EC
NOTEXT
'ICMS Taxpayer: ',ls_bpnotafiscal-j_1bicmstaxpay,' ', "#EC NOTEXT
'Industry Main Type: ', ls_bpnotafiscal-j_1bindtyp. "#EC NOTEXT
WRITE:/'Tax Declaration Type: ', ls_bpnotafiscal-j_1btdt, ' ', "#EC
NOTEXT
'Company Size: ', ls_bpnotafiscal-j_1bcomsize. "#EC NOTEXT
WRITE:/'NIRE ID: ', ls_bpnotafiscal-j_1bnire, ' ', "#EC NOTEXT
'NIRE Date: ', ls_bpnotafiscal-j_1bniredt, ' ', "#EC NOTEXT
'SPED Activity Ind.: ', ls_bpnotafiscal-j_1bspedactind. "#EC NOTEXT
WRITE:/'NF Price DecPL: ', ls_bpnotafiscal-j_1bnfdec, ' ', "#EC
NOTEXT
'Decl. Reg. PIS/COFI: ', ls_bpnotafiscal-j_1bdecregpc. "#EC NOTEXT
WRITE:/'Single Page: ', ls_bpnotafiscal-j_1bsingle. "#EC NOTEXT
WRITE:/'IPI Contributor: ', ls_bpnotafiscal-j_1bipicontributor. "#EC NOTEXT
WRITE:/'Dangerous Goods: ', ls_bpnotafiscal-j_1b_source_danger_goods_data. "#EC
NOTEXT

NEW-LINE.
SKIP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.

* Print NFe Config.


READ TABLE lt_bpeletrfisc INTO ls_bpeletrfisc
WITH KEY j_1bbranc_ = uv_business_place.
WRITE:/ 'Table Name: J_1BNFE_CUST3 ', "#EC NOTEXT
'Table Description: NF-e: System Configuration per Business Place'. "#EC NOTEXT
SKIP.
WRITE:/ 'Company Code: ', ls_bpnotafiscal-bukrs. "#EC NOTEXT
WRITE:/ 'Business Place: ', ls_bpnotafiscal-j_1bbranc_, "#EC NOTEXT
' ', ls_bpnotafiscal-name1. "#EC NOTEXT
SKIP.
WRITE:/'NF model: ', ls_bpeletrfisc-j_1bmodel. "#EC NOTEXT
WRITE:/'Valid From: ' ,ls_bpeletrfisc-j_1btxdatf. "#EC NOTEXT
SKIP.

WRITE:/'Eltronic Fiscal Document Configuration '. "#EC NOTEXT


WRITE:/'Type of Environment: ', ls_bpeletrfisc-j_1bnfetpamb. "#EC NOTEXT
WRITE:/'SAPMessSys: ', ls_bpeletrfisc-j_1bxnfeactive. "#EC NOTEXT
WRITE:/'ServerDet: ', ls_bpeletrfisc-j_1b_nfe_auto_server_determine. "#EC NOTEXT
WRITE:/'Destination: ', ls_bpeletrfisc-rfcdest. "#EC NOTEXT
WRITE:/'XML Version: ',ls_bpeletrfisc-j_1bnfexmlversion. "#EC NOTEXT
WRITE:/'Application Version: ', ls_bpeletrfisc-j_1bnfeverproc. "#EC NOTEXT
WRITE:/'Alternative Region: ', ls_bpeletrfisc-j_1bnfealtregion. "#EC NOTEXT
WRITE:/'Normal: ', ls_bpeletrfisc-j_1bnfetpemisnorm. "#EC NOTEXT
WRITE:/'Contingency: ', ls_bpeletrfisc-j_1bnfetpemiscont. "#EC NOTEXT
WRITE:/'Issue Process: ', ls_bpeletrfisc-j_1bnfeprocemi. "#EC NOTEXT
WRITE:/'For. UF Value: ', ls_bpeletrfisc-j_1bnfefvaluf. "#EC NOTEXT
WRITE:/'For. CMUN Value: ', ls_bpeletrfisc-j_1bnfefvalcmun. "#EC NOTEXT
WRITE:/'Foreign XMUN Value: ', ls_bpeletrfisc-j_1bnfefvalxmun. "#EC NOTEXT
WRITE:/'Cont.Re.MS Def.: ', ls_bpeletrfisc-j_1bnfe_event_group. "#EC NOTEXT
SKIP.
WRITE:/'Default Reasons for Contigency: '. "#EC NOTEXT
WRITE:/'Automatic Switch: ', ls_bpeletrfisc-j_1bnfe_continreason_msdowndef. "#EC
NOTEXT
WRITE:/'SCAN: ', ls_bpeletrfisc-j_1bnfe_continreason_scan. "#EC NOTEXT
WRITE:/'Manual Switch: ', ls_bpeletrfisc-j_1bnfe_continreason_switch. "#EC NOTEXT
SKIP.
WRITE:/'Cancellation under Contingency'. "#EC NOTEXT
WRITE:/'Cancel Electr.Doc.: ', ls_bpeletrfisc-j_1bnfe_cancel_automate. "#EC
NOTEXT
WRITE:/'Send Cancel. Request Automatically: ', "#EC NOTEXT
ls_bpeletrfisc-j_1bnfe_auto_cancel_request. "#EC NOTEXT
WRITE:/'Cncl.Reason - Switch to Cont.: ', ls_bpeletrfisc-
j_1bnfe_cancelreason_switch. "#EC NOTEXT
WRITE:/'Cncl.Reason - Prior to Auth.: ', ls_bpeletrfisc-
j_1bnfe_cancelreason_pr_auth. "#EC NOTEXT
SKIP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.

ENDFORM.

* Description of Tax Jurisdiction Code Structure


* SPRO > Financial Accounting (New) > Financial Accounting Global Settings (New) >
* Tax on Sales/Purchases > Basic Settings> External Tax Calculation >
* Active External Tax Calculation
FORM ttxdexternalsys USING uv_compcode TYPE bukrs.

TYPES: BEGIN OF ty_ttxdextsys,


tax_kalsm TYPE tax_kalsm,
xextn_txd TYPE xextn_txd,
tax_int_version TYPE tax_int_version,
test_correct TYPE test_correct,
rfcdest TYPE rfcdest,
rfcdest_ud TYPE rfcdest_ud,
END OF ty_ttxdextsys.

DATA: lt_ttxdexternalsys TYPE STANDARD TABLE OF ty_ttxdextsys,


ls_ttxdexternalsys TYPE ty_ttxdextsys.

* Get the country that have the same company code informed
SELECT SINGLE land1
FROM t001
INTO gv_land1
WHERE bukrs = uv_compcode.

IF sy-subrc = 0.

* Get the procedure from that country


SELECT SINGLE kalsm
FROM t005
INTO gv_kalsm
WHERE land1 = gv_land1.

* Get the relevant info


SELECT kalsm xextn intversion xcorrect rfcdest rfcdest_ud
INTO TABLE lt_ttxdexternalsys
FROM ttxd
WHERE kalsm = gv_kalsm.

PERFORM formatter USING lt_ttxdexternalsys


ls_ttxdexternalsys
'Description of Tax Jurisdiction Code Structure' "#EC
NOTEXT
'TTXD'. "#EC NOTEXT
ENDIF.

ENDFORM.

* Assignment of external system to logical destination


* SPRO > Financial Accounting (New) > Financial Accounting Global Settings (New) >
* Tax on Sales/Purchases > Basic Settings> External Tax Calculation > Define
Logical Destination
FORM aeslogicaldest.

* Structure for Assignment of external system to local destination


TYPES: BEGIN OF ty_aeslogicaldest,
mandt TYPE mandt,
xextn_txd TYPE xextn_txd,
tax_event TYPE tax_event,
rs38l_fnam TYPE rs38l_fnam,
rfcdest TYPE rfcdest,
END OF ty_aeslogicaldest.

DATA: lt_aeslogicaldest TYPE STANDARD TABLE OF ty_aeslogicaldest,


ls_aeslogicaldest TYPE ty_aeslogicaldest.

SELECT ttxc~mandt ttxc~xextn ttxc~event ttxc~funcname ttxc~rfcdest


FROM ttxc
INTO TABLE lt_aeslogicaldest.

PERFORM formatter USING lt_aeslogicaldest


ls_aeslogicaldest
''
'TTXC'.

ENDFORM.

* Account Keys
* Transaction OBCN > Double click on the Accounting Keys
FORM accountkeys.

* Structure for Account keys


TYPES: BEGIN OF ty_accountkeys,
mandt TYPE mandt,
ktosl_007b TYPE ktosl_007b,
stgrp_007b TYPE stgrp_007b,
stazf_007b TYPE stazf_007b,
stbkz_007b TYPE stbkz_007b,
stnsk_007b TYPE stnsk_007b,
END OF ty_accountkeys.

DATA: lt_accountkeys TYPE STANDARD TABLE OF ty_accountkeys,


lt_accountkeysf TYPE STANDARD TABLE OF ty_accountkeys,
ls_accountkeys TYPE ty_accountkeys.

* This global table can have duplicates account keys


SORT gt_acckeys.
DELETE ADJACENT DUPLICATES FROM gt_acckeys.

* Get information for each account key


SELECT *
FROM t007b
INTO TABLE lt_accountkeys
FOR ALL ENTRIES IN gt_acckeys
WHERE ktosl = gt_acckeys-ktosl.

* To facilitate the understanding on the screen


SORT lt_accountkeys BY ktosl_007b ASCENDING.

* This loop make the formatter prints each account key as a table
LOOP AT gt_acckeys INTO gs_acckeys.

READ TABLE lt_accountkeys INTO ls_accountkeys


WITH KEY ktosl_007b = gs_acckeys-ktosl.

APPEND ls_accountkeys TO lt_accountkeysf.

PERFORM formatter USING lt_accountkeysf


ls_accountkeys
''
'T007B'.

* Just to ensure that won't have duplicated info


CLEAR lt_accountkeysf.

ENDLOOP.

ENDFORM.

* Tax Condition Interface for Notas Fiscais


* Call the another form with the sd procedure
FORM nttaxtypessd USING uv_proced_sd TYPE kalsm_d.

PERFORM nttaxtypesmm USING uv_proced_sd.

ENDFORM.

FORM nttaxtypesmm USING uv_proced_mm TYPE kalsm_d.

DATA: lt_nftaxtypes TYPE STANDARD TABLE OF j_1bnftxcond,


ls_nftaxtypes TYPE j_1bnftxcond.

SELECT *
FROM j_1bnftxcond
INTO TABLE lt_nftaxtypes
WHERE kalsm = uv_proced_mm.

IF sy-subrc = 0.
WRITE:/ 'Table Name: J_1BNFTXCOND ', "#EC NOTEXT
'Table Description: Map Tax Conditions to Nota Fiscal Fields'. "#EC NOTEXT
SKIP.
LOOP AT lt_nftaxtypes INTO ls_nftaxtypes.

WRITE:/'Usage: ', ls_nftaxtypes-kvewe. "#EC NOTEXT


WRITE:/'Application: ', ls_nftaxtypes-kappl. "#EC NOTEXT
WRITE:/'Pricing Procedure: ', ls_nftaxtypes-kalsm. "#EC NOTEXT
SKIP.
WRITE:/'Tax Type: ', ls_nftaxtypes-taxtyp. "#EC NOTEXT
SKIP.
WRITE:/'Map Tax Conditions to Nota Fiscal Fields'. "#EC NOTEXT
SKIP.
WRITE:/'Tax Rate Cond.: ', ls_nftaxtypes-rate, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-rate_map. "#EC NOTEXT
WRITE:/'Pauta Rate Cond.: ', ls_nftaxtypes-qrate, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-qrate_map. "#EC NOTEXT
WRITE:/'Tax Amount Cond.: ', ls_nftaxtypes-value, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-value_map. "#EC NOTEXT
WRITE:/'Tax Base Cond.: ', ls_nftaxtypes-base, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-base_map. "#EC NOTEXT
WRITE:/'Ex. Base Cond.: ', ls_nftaxtypes-excbas, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-excbas_map. "#EC NOTEXT
WRITE:/'Other Base Cond.: ', ls_nftaxtypes-othbas, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-othbas_map. "#EC NOTEXT
WRITE:/'WHT Collection Code: ', ls_nftaxtypes-whtcollcode, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-whtcollcode_map. "#EC NOTEXT
WRITE:/'Base Red.: ', ls_nftaxtypes-basered1, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-basered1_map. "#EC NOTEXT
WRITE:/'Tx Rt Cond. 4DP: ', ls_nftaxtypes-rate4dec, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-rate4dec_map. "#EC NOTEXT
WRITE:/'Pauta Rt. Cond. 4DP: ', ls_nftaxtypes-qrate4dec, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-qrate4dec_map. "#EC NOTEXT
WRITE:/'Surcharge Rate: ', ls_nftaxtypes-srate, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-srate_map. "#EC NOTEXT
WRITE:/'Pauta Base: ', ls_nftaxtypes-qbase, ' ', "#EC
NOTEXT
'Field Mapping: ', ls_nftaxtypes-qbase_map. "#EC NOTEXT
SKIP.
WRITE
'__________________________________________________________________________________
___________________________________________________________________________________
______________________'. "#EC NOTEXT
SKIP.

ENDLOOP.
ENDIF.

ENDFORM.
* Validate the fields that will be displayed
FORM formsfilter USING uv_metadata TYPE c
uv_sd TYPE c
uv_mm TYPE c
uv_others TYPE c
uv_compcode TYPE bukrs
uv_salesorg TYPE vkorg
uv_proced TYPE kalsm_d
uv_onlysap TYPE c
uv_bussines_place TYPE j_1bbranc_.

CONSTANTS lc_procedmm TYPE kalsm_d VALUE 'TAXBRA'.

* Data from view V_T001 by uv_compcode, ACB confirmation from table J_1BCONDTAXACT
* and main procedure from table V_T005
PERFORM compcodeprint USING uv_compcode.

* These fields correspond to the filters tab

IF uv_metadata = gc_positive.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/'
Metadata Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.

* Data from transaction J1BTAX Tables through se11.


PERFORM j1btaxtabs USING gc_blank.
SKIP.
SKIP.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/' End
of Metadata Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.
SKIP.
SKIP.
ENDIF.

IF uv_sd = gc_positive.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/' SD
Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT

SKIP.

* Tax Calculation > Tax Codes SD


PERFORM txsdtabs.

* J1btax > Condition setup : Nota-Fiscal Mapping > Tax Values MM


PERFORM nttaxtypessd USING uv_proced.

* Tax Calculation > Tax Code Determination SD.


PERFORM seqlawcodtabs.

* Data from table J_1BCBTAXPROCV through SM30 for SD.


PERFORM calprosdtabs.

* Data from table J_1BTAXGRPCD through SM30 for SD.


PERFORM txgrpintcdsd.

PERFORM nfamouttransd USING uv_proced.

* Data from table V_T683V through SM30


PERFORM priprosadoctabs USING uv_proced
uv_salesorg
uv_compcode.

* Condition Setup > Calc. Procedures > Calc. Procedures SD


PERFORM calcprosdtabs USING uv_compcode
uv_proced.

* Data from Condition Setup > Condition Types > Condition Types SD
PERFORM conditiontypesd USING gc_positive.

* Data from Condition Setup > Accesses Sequences > Accesses Sequences SD > Tables
T682I and Fields from T682Z
PERFORM accesseqsd USING uv_onlysap.
SKIP.
SKIP.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/' End
of SD Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.
SKIP.
SKIP.
ENDIF.

IF uv_mm = gc_positive.

* When the user call the program by the filters, the variable uv_proced cames
empty
IF uv_proced = gc_blank.
uv_proced = lc_procedmm.
ENDIF.

SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/' MM
Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.

* Tax Calculation > Tax Codes MM


PERFORM txcdmmtabs USING uv_proced.

* J1btax > Condition setup : Nota-Fiscal Mapping > Tax Values SD


PERFORM nttaxtypesmm USING uv_proced.

* Data from Nota Fiscal > Inventory Management > IM Posting


PERFORM taxpostingstr USING uv_proced.

* Data from table T156W through SM30 for MM.


PERFORM poststringvaluemt.

* Data from table J_1BCBTAXPROCV through SM30 for MM.


PERFORM calprommtabs.

* Condition Setup > Calc. Procedures > Calc. Procedures MM


PERFORM calcprommtabs USING uv_compcode
uv_proced.

* Data from Condition Setup > Condition Types > Condition Types MM
PERFORM conditiontypemm.

* Data from Nota Fiscal > Inventory Management > NF Category Derivation
PERFORM nfrelevance.

* Data from Transaction OMJJ


PERFORM movementypes.
SKIP.
SKIP.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/' End
of MM Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.
SKIP.
SKIP.
ENDIF.

IF uv_others = gc_positive.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/'
Others Filer Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.

* SPRO: Logistics General > Tax on Goods Movement > CNPJ Business Places > Define
Business Place
PERFORM businessplace USING uv_compcode
uv_bussines_place.

* Transaction OBCN > Double click on the Accounting Keys


PERFORM accountkeys.

* SPRO > Financial Accounting (New) > Financial Accounting Global Settings (New)
>
* Tax on Sales/Purchases > Basic Settings> External Tax Calculation >
* Active External Tax Calculation
PERFORM ttxdexternalsys USING uv_compcode.

* SPRO > Financial Accounting (New) > Financial Accounting Global Settings (New)
>
* Tax on Sales/Purchases > Basic Settings> External Tax Calculation > Define
Logical Destination
PERFORM aeslogicaldest.

* Data from table V_TTXD through SM30.


PERFORM juriscode.

* Entities > Tax Regions


PERFORM taxregionstabs.

* Tax Calculation > Tax Groups


PERFORM taxretabs.

* Condition Setup > Internal Codes


PERFORM csintcodtabs.
* Condition Setup > Condition Mapping > Assing Conditions to Internal Codes
PERFORM txconditiontabs.

* Condition Setup > Condition Mapping > Max Tax Rate Tables to Condition Tables
PERFORM maptxratetabs.

* Condition Setup > Tax Types


PERFORM taxtypestabs.

PERFORM get_j1balv.

PERFORM get_j1bamitv.

PERFORM get_j1bamhv.

SKIP.
SKIP.
SKIP.

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
WRITE:/' End
of Others Filter Information
'. "#EC NOTEXT

WRITE:/'---------------------------------------------------------------------------
-----------------------------------------------------------------------------------
-----------------------------'. "#EC NOTEXT
SKIP.
SKIP.
SKIP.
ENDIF.

ENDFORM.

* The relevant data from the Sales Order informed


* The relevant data from the Sales Order informed
FORM salesorderinfo USING uv_doc_sales_order TYPE vbeln_va.

* Material info structure


TYPES: BEGIN OF ty_matinfosd,
matnr TYPE matnr,
werks TYPE werks,
j_1btxsdc TYPE mwskz,
posnr TYPE ebelp,
mbrsh TYPE mbrsh,
mtart TYPE mtart,
meins TYPE meins,
matkl TYPE matkl,
lgort_d TYPE lgort_d,
maktx TYPE maktx,
j_1bindus3 TYPE j_1bindus3,
bklas TYPE bklas,
vprsv TYPE vprsv,
j_1bmatuse TYPE j_1bmatuse,
j_1bmatorg TYPE j_1bmatorg,
END OF ty_matinfosd.
* Sales Order Structure
TYPES: BEGIN OF ty_salesorderdata,
bukrs TYPE bukrs,
vkorg TYPE vkorg,
kalsm TYPE kalsm_d,
vtweg TYPE vtweg,
spart TYPE spart,
purdoc TYPE bstkd,
materi TYPE matnr,
taxcod TYPE j_1btxsdc_,
END OF ty_salesorderdata.

* Customer info Structure


TYPES: BEGIN OF ty_customerinfo,
customer TYPE kunnr,
shipto TYPE kunwe,
distchan TYPE vtweg,
division TYPE spart,
custaccg TYPE ktokd,
taxnumb1 TYPE stcd1,
ccfopcat TYPE j_1bindus1,
recaccgl TYPE akont,
salesdis TYPE bzirk,
pricgrp TYPE konda,
custpp TYPE kalks,
devplant TYPE dwerk_ext,
city TYPE ort01_gp,
region TYPE regio,
country TYPE land1_gp,
taxkd TYPE takld,
tatyp TYPE tatyp,
END OF ty_customerinfo.

DATA: lt_salesorderdata TYPE ty_salesorderdata,


lv_billingnum TYPE vbeln_vf,
lv_customerinfo TYPE ty_customerinfo,
lt_materialinfosd TYPE STANDARD TABLE OF ty_matinfosd,
ls_materialinfosd TYPE ty_matinfosd,
lv_branch TYPE j_1bbranc_,
lv_customer_code TYPE kunnr, "AUXILIAR VAR USED TO STORE THE
CURRENT KUNNR
lv_material_code TYPE matnr,
lt_vbfa TYPE TABLE OF vbfa,
ls_vbfa TYPE vbfa,
ls_vbpa TYPE vbpa,
lt_mard TYPE TABLE OF mard,
ls_mard TYPE mard,
ls_makt TYPE makt,
ls_marc TYPE marc,
ls_mbew TYPE mbew,
ls_kna1 TYPE kna1,
ls_kna1_export TYPE kna1,
ls_knb1 TYPE knb1,
ls_knvi TYPE knvi,
ls_mara TYPE mara,
lt_vbap TYPE TABLE OF vbap,
ls_vbap TYPE vbap,
ls_vbak TYPE vbak,
ls_ekko TYPE ekko,
ls_lfa1 TYPE lfa1,
lv_land TYPE land1,
lv_land_export TYPE land1,
lt_ekpo TYPE TABLE OF ekpo,
ls_ekpo TYPE ekpo,
ls_knvv TYPE knvv.

CONSTANTS: lc_billing_ind TYPE c VALUE 'M',


lc_customer_ind TYPE c VALUE 'WE' LENGTH 2.

* Billing information
* SELECT SINGLE vbeln "#EC WARNOK
* INTO lv_billingnum
* FROM vbfa
* WHERE vbelv = uv_doc_sales_order
* AND vbtyp_n = lc_billing_ind.

CALL FUNCTION 'SD_VBFA_READ_WITH_VBELV'


EXPORTING
I_VBELV = uv_doc_sales_order
TABLES
ET_VBFA = lt_vbfa
EXCEPTIONS
RECORD_NOT_FOUND = 1
OTHERS = 2.

IF sy-subrc EQ 0.
READ TABLE lt_vbfa INTO ls_vbfa WITH KEY vbtyp_n = 'M'.
lv_billingnum = ls_vbfa-vbeln.
ENDIF.

* Customer info
* SELECT SINGLE vbak~kunnr vbpa~kunnr vbak~vtweg vbak~spart kna1~ktokd "#EC WARNOK
* kna1~stcd1 kna1~cfopc knb1~akont knvv~bzirk knvv~konda
* knvv~kalks knvv~vwerk kna1~ort01 kna1~regio kna1~land1
* knvi~taxkd knvi~tatyp
* INTO lv_customerinfo
* FROM vbak
* INNER JOIN kna1
* ON kna1~kunnr = vbak~kunnr
* INNER JOIN knvi
* ON knvi~kunnr = vbak~kunnr
* INNER JOIN vbpa
* ON vbpa~vbeln = vbak~vbeln
* INNER JOIN knb1
* ON knb1~kunnr = vbak~kunnr
* INNER JOIN knvv
* ON knvv~kunnr = vbak~kunnr
* WHERE vbak~vbeln = uv_doc_sales_order
* AND knb1~bukrs = vbak~bukrs_vf
* AND vbpa~parvw = lc_customer_ind
* AND vbpa~vbeln = uv_doc_sales_order.

CALL FUNCTION 'SD_VBAK_SINGLE_READ'


EXPORTING
I_VBELN = uv_doc_sales_order
IMPORTING
E_VBAK = ls_vbak
EXCEPTIONS
RECORD_NOT_FOUND = 1.

CALL FUNCTION 'KNA1_READ_SINGLE'


EXPORTING
ID_KUNNR = ls_vbak-kunnr
IMPORTING
ES_KNA1 = ls_kna1
EXCEPTIONS
NOT_FOUND = 1
INPUT_NOT_SPECIFIED = 2
OTHERS = 3.

IF sy-subrc EQ 0.

CALL FUNCTION 'KNVV_SINGLE_READ'


EXPORTING
I_KUNNR = ls_vbak-kunnr
I_VKORG = ls_vbak-vkorg
I_VTWEG = ls_vbak-vtweg
I_SPART = ls_vbak-spart
IMPORTING
O_KNVV = ls_knvv
EXCEPTIONS
NOT_FOUND = 1
PARAMETER_ERROR = 2
OTHERS = 3.

CALL FUNCTION 'KNB1_READ_SINGLE'


EXPORTING
ID_KUNNR = ls_vbak-kunnr
ID_BUKRS = ls_vbak-bukrs_vf
IMPORTING
ES_KNB1 = ls_knb1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

CALL FUNCTION 'SD_VBPA_SINGLE_READ'


EXPORTING
I_VBELN = ls_vbak-vbeln
I_POSNR = '0'
I_PARVW = lc_customer_ind
IMPORTING
E_VBPA = ls_vbpa
EXCEPTIONS
RECORD_NOT_FOUND = 1.

CALL FUNCTION 'KNVI_SINGLE_READ'


EXPORTING
I_KUNNR = ls_vbak-kunnr
I_ALAND = 'BR'
I_TATYP = 'IBRX'
IMPORTING
O_KNVI = ls_knvi
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.
CALL FUNCTION 'WB2_VBAP_READ_WITH_VBELN'
EXPORTING
I_VBELN = ls_vbak-vbeln
TABLES
ET_VBAP = lt_vbap
EXCEPTIONS
RECORD_NOT_FOUND = 1
OTHERS = 2.

lv_customerinfo-customer = ls_vbak-kunnr.
lv_customerinfo-shipto = ls_vbpa-kunnr.
lv_customerinfo-distchan = ls_vbak-vtweg.
lv_customerinfo-division = ls_vbak-spart.
lv_customerinfo-custaccg = ls_kna1-ktokd.
lv_customerinfo-taxnumb1 = ls_kna1-stcd1.
lv_customerinfo-ccfopcat = ls_kna1-cfopc.
lv_customerinfo-recaccgl = ls_knb1-akont.
lv_customerinfo-salesdis = ls_knvv-bzirk.
lv_customerinfo-pricgrp = ls_knvv-konda.
lv_customerinfo-custpp = ls_knvv-kalks.
lv_customerinfo-devplant = ls_knvv-vwerk.
lv_customerinfo-city = ls_kna1-ort01.
lv_customerinfo-region = ls_kna1-regio.
lv_customerinfo-country = ls_kna1-land1.
lv_customerinfo-taxkd = ls_knvi-taxkd.
lv_customerinfo-tatyp = ls_knvi-tatyp.

READ TABLE lt_vbap INTO ls_vbap INDEX 1.

lt_salesorderdata-bukrs = ls_vbak-bukrs_vf.
lt_salesorderdata-vkorg = ls_vbak-vkorg.
lt_salesorderdata-kalsm = ls_vbak-kalsm.
lt_salesorderdata-vtweg = ls_vbak-vtweg.
lt_salesorderdata-spart = ls_vbak-spart.
lt_salesorderdata-purdoc = ls_vbak-bstnk.
lt_salesorderdata-materi = ls_vbap-matnr.
lt_salesorderdata-taxcod = ls_vbap-j_1btxsdc.

CALL FUNCTION 'J_1BSA_COMPONENT_ACTIVE'


EXPORTING
BUKRS = lt_salesorderdata-bukrs
COMPONENT = 'BR'
IMPORTING
OUT_COUNTRY = lv_land
EXCEPTIONS
COMPONENT_NOT_ACTIVE = 1.

IF sy-subrc NE 0.
"EXPORTATION LANDSCAPE
CALL FUNCTION 'KNA1_READ_SINGLE'
EXPORTING
ID_KUNNR = lv_customerinfo-shipto
IMPORTING
ES_KNA1 = ls_kna1_export
EXCEPTIONS
NOT_FOUND = 1.

IF sy-subrc NE 0.
MESSAGE 'KNA1 ERROR' TYPE 'E'.
ELSE.
IF ls_kna1_export-LAND1 NE 'BR'.
MESSAGE 'This Sales Order does not define a Brazilian Localization
Landscape.' TYPE 'E'.
ENDIF.
ENDIF.

ENDIF.

CLEAR ls_vbap.

LOOP AT lt_vbap INTO ls_vbap.

CALL FUNCTION 'MARA_SINGLE_READ'


EXPORTING
MATNR = ls_vbap-matnr
IMPORTING
WMARA = ls_mara
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

CALL FUNCTION 'MARD_GENERIC_READ_MATNR_PLANT'


EXPORTING
MATNR = ls_vbap-matnr
WERKS = ls_vbap-werks
TABLES
MARD_TAB = lt_mard
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

IF sy-subrc EQ 0.
READ TABLE lt_mard INTO ls_mard INDEX 1.
ENDIF.

CALL FUNCTION 'MAKT_SINGLE_READ'


EXPORTING
MATNR = ls_vbap-matnr
SPRAS = 'E'
IMPORTING
WMAKT = ls_makt
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

CALL FUNCTION 'MARC_SINGLE_READ'


EXPORTING
MATNR = ls_vbap-matnr
WERKS = ls_vbap-werks
IMPORTING
WMARC = ls_marc
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

CALL FUNCTION 'MBEW_SINGLE_READ'


EXPORTING
MATNR = ls_vbap-matnr
BWKEY = ls_vbak-vkorg
BWTAR = ''
IMPORTING
WMBEW = ls_mbew
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

* Material Data
* SELECT vbap~matnr vbap~werks vbap~j_1btxsdc vbap~posnr mara~mbrsh
* mara~mtart mara~meins mara~matkl mard~lgort makt~maktx
* marc~indus mbew~bklas mbew~vprsv mbew~mtuse mbew~mtorg
* INTO TABLE lt_materialinfosd
* FROM vbap
* INNER JOIN vbrp
* ON vbrp~matnr = vbap~matnr
* INNER JOIN mara
* ON mara~matnr = vbap~matnr
* INNER JOIN mard
* ON mard~matnr = vbap~matnr
* INNER JOIN makt
* ON makt~matnr = vbap~matnr
* INNER JOIN marc
* ON marc~matnr = vbap~matnr
* INNER JOIN mbew
* ON mbew~matnr = vbap~matnr
* WHERE vbap~vbeln = uv_doc_sales_order
* AND makt~spras = 'E'
* AND marc~werks = vbap~werks
* AND mard~werks = vbap~werks.

ls_materialinfosd-matnr = ls_vbap-matnr.
ls_materialinfosd-werks = ls_vbap-werks.
ls_materialinfosd-j_1btxsdc = ls_vbap-j_1btxsdc.
ls_materialinfosd-posnr = ls_vbap-posnr.
ls_materialinfosd-mbrsh = ls_mara-mbrsh.
ls_materialinfosd-mtart = ls_mara-mtart.
ls_materialinfosd-meins = ls_mara-meins.
ls_materialinfosd-matkl = ls_mara-matkl.
ls_materialinfosd-lgort_d = ls_mard-lgort.
ls_materialinfosd-maktx = ls_makt-maktx.
ls_materialinfosd-j_1bindus3 = ls_marc-indus.
ls_materialinfosd-bklas = ls_mbew-bklas.
ls_materialinfosd-vprsv = ls_mbew-vprsv.
ls_materialinfosd-j_1bmatuse = ls_mbew-mtuse.
ls_materialinfosd-j_1bmatorg = ls_mbew-mtorg.

APPEND ls_materialinfosd TO lt_materialinfosd.

ENDLOOP.

* SELECT SINGLE matnr


* INTO lv_material_code
* FROM vbap
* WHERE vbeln = uv_doc_sales_order.

lv_material_code = ls_vbap-matnr.
* IF sy-subrc NE 0.
* WRITE: 'TESTE'.
* ENDIF.

* Sort the materials by item number


SORT lt_materialinfosd BY posnr ASCENDING.

DELETE ADJACENT DUPLICATES FROM lt_materialinfosd.

* To get the plant and use it to comparison


READ TABLE lt_materialinfosd
INTO ls_materialinfosd INDEX 1.

* Business Place
SELECT SINGLE j_1bbranch
INTO lv_branch
FROM t001w
WHERE werks = ls_materialinfosd-werks.

IF lt_salesorderdata IS NOT INITIAL.

WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
WRITE:/'|
Document Overview'. "#EC NOTEXT
WRITE:/'| Sales order: ', uv_doc_sales_order. "#EC NOTEXT
WRITE:/'| Billing Document: ', lv_billingnum. "#EC NOTEXT
WRITE:/'| Procedure: ', lt_salesorderdata-kalsm. "#EC NOTEXT
WRITE:/'| Sales Org.: ', lt_salesorderdata-vkorg. "#EC NOTEXT
WRITE:/'| Business Place: ', lv_branch. "#EC NOTEXT
WRITE:/'| Distribution Channel: ', lt_salesorderdata-vtweg. "#EC NOTEXT
WRITE:/'| Division: ', lt_salesorderdata-spart. "#EC NOTEXT
WRITE:/'| Sold-to Party: ', lv_customerinfo-customer. "#EC
NOTEXT
WRITE:/'| Ship-to Party: ', lv_customerinfo-shipto. "#EC NOTEXT
WRITE:/'| Purchasing Document: ', lt_salesorderdata-purdoc. "#EC
NOTEXT
WRITE:/'| Tax Code: ', lt_salesorderdata-taxcod. "#EC
NOTEXT
WRITE:/'| '. "#EC NOTEXT
WRITE:/'|
Customer Information'. "#EC NOTEXT
WRITE:/'| Customer: ', lv_customerinfo-customer. "#EC
NOTEXT
WRITE:/'| Account Group', lv_customerinfo-custaccg. "#EC
NOTEXT
* WRITE:/'| City: ', lv_customerinfo-city. "#EC NOTEXT
* WRITE:/'| Country: ', lv_customerinfo-country. "#EC NOTEXT
* WRITE:/'| Region: ', lv_customerinfo-region. "#EC NOTEXT
WRITE:/'| Tax Number 1: ', lv_customerinfo-taxnumb1. "#EC
NOTEXT
WRITE:/'| CFOP Category: ', lv_customerinfo-ccfopcat. "#EC
NOTEXT
WRITE:/'| Rec Account: ', lv_customerinfo-recaccgl. "#EC
NOTEXT
WRITE:/'| Sales District: ', lv_customerinfo-salesdis. "#EC
NOTEXT
WRITE:/'| Price Group: ', lv_customerinfo-pricgrp. "#EC NOTEXT
WRITE:/'| Customer Pricing Procedure: ', lv_customerinfo-custpp. "#EC NOTEXT
WRITE:/'| Delivering Plant: ', lv_customerinfo-devplant. "#EC
NOTEXT
WRITE:/'| Tax Classification: ', lv_customerinfo-taxkd. "#EC NOTEXT
WRITE:/'| Tax Category: ', lv_customerinfo-tatyp. "#EC NOTEXT
WRITE:/'|
Materials'. "#EC NOTEXT
WRITE:/'| Item Number Tax Code Material'. "#EC NOTEXT
LOOP AT lt_materialinfosd INTO ls_materialinfosd.
WRITE:/'| ', ls_materialinfosd-posnr NO-ZERO, '
',ls_materialinfosd-j_1btxsdc,
' ', ls_materialinfosd-matnr. "#EC NOTEXT
ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
SKIP.
SKIP.

WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
WRITE:/'Table name: MARA/MBEW Description: Material
Information'. "#EC NOTEXT
SKIP.

LOOP AT lt_materialinfosd INTO ls_materialinfosd.


WRITE:/'Item Number: ', ls_materialinfosd-posnr, ' Tax Code: ', "#EC
NOTEXT
ls_materialinfosd-j_1btxsdc, ' Material Number: ', ls_materialinfosd-
matnr. "#EC NOTEXT
SKIP.
* WRITE:/' Description: ', ls_materialinfosd-maktx. "#EC NOTEXT
WRITE:/' Industry Sector: ', ls_materialinfosd-mbrsh. "#EC NOTEXT
WRITE:/' Material Type:', ls_materialinfosd-mtart. "#EC NOTEXT
WRITE:/' Plant: ', ls_materialinfosd-werks. "#EC NOTEXT
WRITE:/' Storage Location: ', ls_materialinfosd-lgort_d. "#EC NOTEXT
WRITE:/' Base Unit of Measure: ', ls_materialinfosd-meins. "#EC NOTEXT
WRITE:/' Material Group: ', ls_materialinfosd-matkl. "#EC NOTEXT
WRITE:/' Valuation Class: ', ls_materialinfosd-bklas. "#EC NOTEXT
WRITE:/' Mat. CFOP: ', ls_materialinfosd-j_1bindus3. "#EC
NOTEXT
WRITE:/' Price Control: ', ls_materialinfosd-vprsv. "#EC NOTEXT
WRITE:/' Material usage: ', ls_materialinfosd-j_1bmatuse. "#EC
NOTEXT
WRITE:/' Material origin: ', ls_materialinfosd-j_1bmatorg. "#EC
NOTEXT
SKIP.

ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
SKIP.
ENDIF.

PERFORM formsfilter
USING gc_blank
gc_positive
gc_positive
gc_positive
lt_salesorderdata-bukrs
lt_salesorderdata-vkorg
lt_salesorderdata-kalsm
gc_positive
lv_branch.

ELSE.
MESSAGE 'This number of Sale Order does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ENDFORM.

* The relevant data from the Sales Order informed


* The relevant data from the Purchase Order informed
FORM purchaseorderinfo USING uv_doc_purchase_order TYPE ebeln.

* Invoice Doc Structure


TYPES: BEGIN OF ty_invinfo,
docnum TYPE belnr_d,
year TYPE fyear,
nftype TYPE j_1bnftype,
END OF ty_invinfo.

* The header of Material structure


TYPES: BEGIN OF ty_matheader,
ebelp TYPE ebelp,
mwskz TYPE mwskz,
matnr TYPE matnr,
END OF ty_matheader.

* Material info structure


TYPES: BEGIN OF ty_matinfo,
mblnr TYPE mblnr,
mjahr TYPE mjahr,
matnr TYPE matnr,
werks TYPE werks,
mwskz TYPE mwskz,
ebelp TYPE ebelp,
mbrsh TYPE mbrsh,
mtart TYPE mtart,
meins TYPE meins,
matkl TYPE matkl,
lgort_d TYPE lgort_d,
maktx TYPE maktx,
j_1bindus3 TYPE j_1bindus3,
bklas TYPE bklas,
vprsv TYPE vprsv,
j_1bmatuse TYPE j_1bmatuse,
j_1bmatorg TYPE j_1bmatorg,
END OF ty_matinfo.
* Purchase Order structure
TYPES: BEGIN OF ty_purorderinfo,
purorg TYPE ekorg,
purkaslm TYPE kalsm_d,
purgroup TYPE bkgrp,
bukrs TYPE bukrs,
purcat TYPE ebstyp,
purtype TYPE esart,
vendacc TYPE elifn,
taxcode TYPE mwskz,
invrecip TYPE repos,
grbsdiv TYPE webre,
END OF ty_purorderinfo.

* Vendor info structure


TYPES: BEGIN OF ty_vendorinfo,
accgroup TYPE ktokk,
city TYPE ort01_gp,
region TYPE regio,
country TYPE land1_gp,
cnpj TYPE stcd1,
taxsplit TYPE j_1bindequ,
recacc TYPE akont,
payterm TYPE dzterm,
paymeth TYPE dzwels,
currkey TYPE waers,
grbased TYPE webre,
END OF ty_vendorinfo.

DATA: lv_purorderinfo TYPE ty_purorderinfo,


lv_invoiceinfo TYPE ty_invinfo,
lt_materialinfo TYPE STANDARD TABLE OF ty_matinfo,
ls_materialinfo TYPE ty_matinfo,
lv_vendorinfo TYPE ty_vendorinfo,
lt_matheader TYPE STANDARD TABLE OF ty_matheader,
ls_matheader TYPE ty_matheader,
lt_mard TYPE TABLE OF mard,
ls_mard TYPE mard,
ls_makt TYPE makt,
ls_marc TYPE marc,
ls_mbew TYPE mbew,
ls_lfa1_import TYPE lfa1,
ls_mara TYPE mara,
ls_ekko TYPE ekko,
ls_lfa1 TYPE lfa1,
lv_land TYPE land1,
lv_land_import TYPE land1,
ls_lfb1 TYPE lfb1,
ls_lfm1 TYPE lfm1,
lt_mseg TYPE TABLE OF mseg,
lt_mseg_material TYPE TABLE OF mseg,
ls_mseg TYPE mseg,
lt_ekpo TYPE TABLE OF ekpo,
ls_ekpo TYPE ekpo,
ls_ekpo_header TYPE ekpo.

* PO Information
* SELECT SINGLE ekko~ekorg ekko~kalsm ekko~ekgrp ekko~bukrs ekko~bstyp "#EC WARNOK
* ekko~bsart ekko~lifnr ekpo~mwskz ekpo~repos ekpo~webre
* INTO lv_purorderinfo
* FROM ekko
* INNER JOIN ekpo
* ON ekko~ebeln = ekpo~ebeln
* WHERE ekko~ebeln = uv_doc_purchase_order.

CALL FUNCTION 'ME_EKKO_SINGLE_READ'


EXPORTING
PI_EBELN = uv_doc_purchase_order
IMPORTING
PO_EKKO = ls_ekko
EXCEPTIONS
NO_RECORDS_FOUND = 1
OTHERS = 2.

IF sy-subrc EQ 0.

CALL FUNCTION 'ME_EKPO_READ_WITH_EBELN'


EXPORTING
PI_EBELN = uv_doc_purchase_order
TABLES
PTO_EKPO = lt_ekpo
EXCEPTIONS
NO_RECORDS_FOUND = 1
OTHERS = 2.

IF sy-subrc EQ 0.
READ TABLE lt_ekpo INTO ls_ekpo WITH KEY ebeln = ls_ekko-ebeln.
ENDIF.
*
lv_purorderinfo-purorg = ls_ekko-ekorg.
lv_purorderinfo-purkaslm = ls_ekko-kalsm.
lv_purorderinfo-purgroup = ls_ekko-ekgrp.
lv_purorderinfo-bukrs = ls_ekko-bukrs.
lv_purorderinfo-purcat = ls_ekko-bstyp.
lv_purorderinfo-purtype = ls_ekko-bsart.
lv_purorderinfo-vendacc = ls_ekko-lifnr.
lv_purorderinfo-taxcode = ls_ekpo-mwskz.
lv_purorderinfo-invrecip = ls_ekpo-repos.
lv_purorderinfo-grbsdiv = ls_ekpo-webre.

CALL FUNCTION 'J_1BSA_COMPONENT_ACTIVE'


EXPORTING
BUKRS = lv_purorderinfo-bukrs
COMPONENT = 'BR'
IMPORTING
OUT_COUNTRY = lv_land
EXCEPTIONS
COMPONENT_NOT_ACTIVE = 1.

IF sy-subrc NE 0.
* VERIFY II IT IS A IMPORTATION
CALL FUNCTION 'LFA1_READ_SINGLE'
EXPORTING
ID_LIFNR = lv_purorderinfo-vendacc
IMPORTING
ES_LFA1 = ls_lfa1_import
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

IF ls_lfa1_import-land1 NE 'BR'.
MESSAGE 'This Purchase Order does not define a Brazilian Localization
Landscape. ' TYPE 'E'.
ENDIF.

ENDIF.

* Vendor Information
* SELECT SINGLE lfa1~ktokk lfa1~ort01 lfa1~regio lfa1~land1 lfa1~stcd1 "#EC WARNOK
* lfa1~ipisp lfb1~akont lfb1~zterm lfb1~zwels lfm1~waers
* lfm1~webre
* INTO lv_vendorinfo
* FROM lfa1
* INNER JOIN lfb1
* ON lfb1~lifnr = lfa1~lifnr
* INNER JOIN lfm1
* ON lfm1~lifnr = lfa1~lifnr
* WHERE lfa1~lifnr = lv_purorderinfo-vendacc
* AND lfb1~bukrs = lv_purorderinfo-bukrs
* AND lfm1~ekorg = lv_purorderinfo-purorg.

CALL FUNCTION 'LFA1_READ_SINGLE'


EXPORTING
ID_LIFNR = lv_purorderinfo-vendacc
IMPORTING
ES_LFA1 = ls_lfa1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

CALL FUNCTION 'LFB1_READ_SINGLE'


EXPORTING
ID_LIFNR = lv_purorderinfo-vendacc
ID_BUKRS = lv_purorderinfo-bukrs
IMPORTING
ES_LFB1 = ls_lfb1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

CALL FUNCTION 'LFM1_SINGLE_READ'


EXPORTING
I_LIFNR = lv_purorderinfo-vendacc
I_EKORG = lv_purorderinfo-purorg
IMPORTING
O_LFM1 = ls_lfm1
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 2.

lv_vendorinfo-accgroup = ls_lfa1-ktokk.
lv_vendorinfo-city = ls_lfa1-ort01.
lv_vendorinfo-region = ls_lfa1-regio.
lv_vendorinfo-country = ls_lfa1-land1.
lv_vendorinfo-cnpj = ls_lfa1-stcd1.
lv_vendorinfo-taxsplit = ls_lfa1-ipisp.
lv_vendorinfo-recacc = ls_lfb1-akont.
lv_vendorinfo-payterm = ls_lfb1-zterm.
lv_vendorinfo-paymeth = ls_lfb1-zwels.
lv_vendorinfo-currkey = ls_lfm1-waers.
lv_vendorinfo-grbased = ls_lfm1-webre.

* Material data
* SELECT mseg~mblnr mseg~mjahr mseg~matnr ekpo~werks ekpo~mwskz ekpo~ebelp
* mara~mbrsh mara~mtart mara~meins mara~matkl mard~lgort makt~maktx
* marc~indus mbew~bklas mbew~vprsv mbew~mtuse mbew~mtorg
* INTO TABLE lt_materialinfo
* FROM mseg
* INNER JOIN ekpo
* ON ekpo~matnr = mseg~matnr
* INNER JOIN mara
* ON mara~matnr = mseg~matnr
* INNER JOIN mard
* ON mard~matnr = mseg~matnr
* INNER JOIN makt
* ON makt~matnr = mseg~matnr
* INNER JOIN marc
* ON marc~matnr = mseg~matnr
* INNER JOIN mbew
* ON mbew~matnr = mseg~matnr
* WHERE mseg~ebeln = uv_doc_purchase_order
* AND makt~spras = sy-langu
* AND marc~werks = mseg~werks
* AND mard~werks = mseg~werks.

SELECT *
INTO TABLE lt_mseg
FROM mseg
WHERE ebeln = uv_doc_purchase_order.

LOOP AT lt_mseg INTO ls_mseg.

CALL FUNCTION 'MARA_SINGLE_READ'


EXPORTING
MATNR = ls_mseg-matnr
IMPORTING
WMARA = ls_mara
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

CALL FUNCTION 'MARD_GENERIC_READ_MATNR_PLANT' "11


EXPORTING
MATNR = ls_mseg-matnr
WERKS = ls_mseg-werks
TABLES
MARD_TAB = lt_mard
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

IF sy-subrc EQ 0.
READ TABLE lt_mard INTO ls_mard INDEX 1.
ENDIF.
CALL FUNCTION 'MAKT_SINGLE_READ' "1
EXPORTING
MATNR = ls_mseg-matnr
SPRAS = sy-langu
IMPORTING
WMAKT = ls_makt
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

CALL FUNCTION 'MARC_SINGLE_READ'


EXPORTING
MATNR = ls_mseg-matnr
WERKS = ls_mseg-werks
IMPORTING
WMARC = ls_marc
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

CALL FUNCTION 'MBEW_SINGLE_READ'


EXPORTING
MATNR = ls_mseg-matnr
BWKEY = lv_purorderinfo-bukrs
BWTAR = ''
IMPORTING
WMBEW = ls_mbew
EXCEPTIONS
NOT_FOUND = 1
OTHERS = 3.

ls_materialinfo-mblnr = ls_mseg-mblnr.
ls_materialinfo-mjahr = ls_mseg-mjahr.
ls_materialinfo-matnr = ls_mseg-matnr.
ls_materialinfo-werks = ls_ekpo-werks.
ls_materialinfo-mwskz = ls_ekpo-mwskz.
ls_materialinfo-ebelp = ls_ekpo-ebelp.
ls_materialinfo-mbrsh = ls_mara-mbrsh.
ls_materialinfo-mtart = ls_mara-mtart.
ls_materialinfo-meins = ls_mara-meins.
ls_materialinfo-matkl = ls_mara-matkl.
ls_materialinfo-lgort_d = ls_mard-lgort.
ls_materialinfo-maktx = ls_makt-maktx.
ls_materialinfo-j_1bindus3 = ls_marc-indus.
ls_materialinfo-bklas = ls_mbew-bklas.
ls_materialinfo-vprsv = ls_mbew-vprsv.
ls_materialinfo-j_1bmatuse = ls_mbew-mtuse.
ls_materialinfo-j_1bmatorg = ls_mbew-mtorg.

APPEND ls_materialinfo TO lt_materialinfo.

ENDLOOP.

* Sort the material by the item number


SORT lt_materialinfo BY mwskz werks ebelp ASCENDING.

DELETE ADJACENT DUPLICATES FROM lt_materialinfo.

** Material header
* SELECT ebelp mwskz matnr
* INTO TABLE lt_matheader
* FROM ekpo
* WHERE ebeln = uv_doc_purchase_order.

LOOP AT lt_ekpo INTO ls_ekpo_header.

CLEAR ls_matheader.

ls_matheader-ebelp = ls_ekpo_header-ebelp.
ls_matheader-mwskz = ls_ekpo_header-mwskz.
ls_matheader-matnr = ls_ekpo_header-matnr.

APPEND ls_matheader TO lt_matheader.

ENDLOOP.
* Sort the material header by the item number
SORT lt_matheader BY ebelp ASCENDING.

* Invoice data
SELECT SINGLE rseg~belnr rseg~gjahr rbkp~j_1bnftype "#EC WARNOK
INTO lv_invoiceinfo
FROM rseg
INNER JOIN rbkp
ON rbkp~belnr = rseg~belnr
WHERE ebeln = uv_doc_purchase_order
AND rbkp~gjahr = rseg~gjahr.

IF sy-subrc = 0.
* To get the Material doc and year
READ TABLE lt_materialinfo INTO ls_materialinfo INDEX 1.

SKIP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
WRITE:/'|
Document Overview'. "#EC NOTEXT
WRITE:/'| Purchase Order: ', uv_doc_purchase_order. "#EC NOTEXT
WRITE:/'| Purchase Procedure: ', lv_purorderinfo-purkaslm. "#EC
NOTEXT
WRITE:/'| Company Code: ', lv_purorderinfo-bukrs. "#EC NOTEXT
WRITE:/'| Purchasing Document Category: ', lv_purorderinfo-purcat. "#EC
NOTEXT
WRITE:/'| Purchasing Document Type: ', lv_purorderinfo-purtype. "#EC
NOTEXT
WRITE:/'| Tax Code: ', lv_purorderinfo-taxcode. "#EC
NOTEXT
WRITE:/'| Inv. Receipt: ', lv_purorderinfo-invrecip. "#EC
NOTEXT
WRITE:/'| GR-Bsd IV: ' , lv_purorderinfo-grbsdiv. "#EC
NOTEXT
WRITE:/'| Material Document: ', ls_materialinfo-mblnr. "#EC NOTEXT
WRITE:/'| Material Document Year: ', ls_materialinfo-mjahr. "#EC NOTEXT
WRITE:/'| '. "#EC NOTEXT
WRITE:/'|
Vendor Information'. "#EC NOTEXT
WRITE:/'| Vendor Account: ', lv_purorderinfo-vendacc. "#EC
NOTEXT
WRITE:/'| Purchase Org.: ' , lv_purorderinfo-purorg. "#EC
NOTEXT
WRITE:/'| Account Group: ', lv_vendorinfo-accgroup. "#EC
NOTEXT
* WRITE:/'| CNPJ/CPF: ', lv_vendorinfo-cnpj. "#EC NOTEXT
WRITE:/'| Tax Split: ', lv_vendorinfo-taxsplit. "#EC
NOTEXT
* WRITE:/'| City: ', lv_vendorinfo-city. "#EC NOTEXT
* WRITE:/'| Country: ', lv_vendorinfo-country. "#EC NOTEXT
* WRITE:/'| Region: ', lv_vendorinfo-region. "#EC NOTEXT
WRITE:/'| Recon. Account: ', lv_vendorinfo-recacc. "#EC NOTEXT
WRITE:/'| Payment Terms: ', lv_vendorinfo-payterm. "#EC NOTEXT
WRITE:/'| Payment Methods: ', lv_vendorinfo-paymeth. "#EC NOTEXT
* WRITE:/'| Order Currency: ', lv_vendorinfo-currkey. "#EC
NOTEXT
WRITE:/'| GR-Based Inv. Verif.: ', lv_vendorinfo-grbased. "#EC NOTEXT
WRITE:/'| '. "#EC NOTEXT
WRITE:/'|
Invoice Information'. "#EC NOTEXT
WRITE:/'| Invoice Document (Most recent): ', lv_invoiceinfo-docnum. "#EC
NOTEXT
WRITE:/'| Invoice Document Year: ', lv_invoiceinfo-year. "#EC NOTEXT
WRITE:/'| Nota Fiscal Type: ', lv_invoiceinfo-nftype. "#EC
NOTEXT
WRITE:/'| '. "#EC NOTEXT

WRITE:/'|
Materials'. "#EC NOTEXT
WRITE:/'| Item Number Tax Code Material'. "#EC NOTEXT
LOOP AT lt_matheader INTO ls_matheader.
WRITE:/'| ', ls_matheader-ebelp NO-ZERO, ' ',ls_matheader-
mwskz
, ' ', ls_matheader-matnr. "#EC NOTEXT
ENDLOOP.

WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
SKIP.

WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
WRITE:/'Table name: MARA/MBEW Description: Material
Information'. "#EC NOTEXT
SKIP.

LOOP AT lt_materialinfo INTO ls_materialinfo.


WRITE:/'Item Number: ', ls_materialinfo-ebelp, "#EC NOTEXT
' Tax Code: ', ls_materialinfo-mwskz, "#EC NOTEXT
' Material Number: ', ls_materialinfo-matnr. "#EC NOTEXT

* WRITE:/' Description: ', ls_materialinfo-maktx. "#EC NOTEXT


WRITE:/' Industry Sector: ', ls_materialinfo-mbrsh. "#EC NOTEXT
WRITE:/' Material Type:', ls_materialinfo-mtart. "#EC NOTEXT
WRITE:/' Plant: ', ls_materialinfo-werks. "#EC NOTEXT
WRITE:/' Storage Location: ', ls_materialinfo-lgort_d. "#EC NOTEXT
WRITE:/' Base Unit of Measure: ', ls_materialinfo-meins. "#EC NOTEXT
WRITE:/' Material Group: ', ls_materialinfo-matkl. "#EC NOTEXT
WRITE:/' Valuation Class: ', ls_materialinfo-bklas. "#EC NOTEXT
WRITE:/' Mat. CFOP: ', ls_materialinfo-j_1bindus3. "#EC NOTEXT
WRITE:/' Price Control: ', ls_materialinfo-vprsv. "#EC NOTEXT
WRITE:/' Material usage: ', ls_materialinfo-j_1bmatuse. "#EC NOTEXT
WRITE:/' Material origin: ', ls_materialinfo-j_1bmatorg. "#EC NOTEXT
SKIP.

ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
SKIP.
ENDIF.

PERFORM formsfilter USING '' "#EC NOTEXT


'' "#EC NOTEXT
gc_positive
gc_positive
lv_purorderinfo-bukrs
'' "#EC NOTEXT
lv_purorderinfo-purkaslm
'' "#EC NOTEXT
''. "#EC NOTEXT

ELSE.
MESSAGE 'This number of Purchase Order does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ENDFORM.

* Billing filter
* Info of Billing Doc.
FORM billinginfo USING uv_doc_billing TYPE vbeln_vf.

DATA lv_docnso TYPE vbeln_va.

* Number of Sales Order


SELECT SINGLE aubel "#EC WARNOK
INTO lv_docnso
FROM vbrp
WHERE vbeln = uv_doc_billing.

IF sy-subrc = 0.
PERFORM salesorderinfo USING lv_docnso.
PERFORM get_spec_j1balv USING p_docnf.
PERFORM get_spec_j1bamitv USING p_docnf.
PERFORM get_spec_j1bamhv USING p_docnf.
ELSE.
MESSAGE 'This number of Billing Document does not exist.' TYPE 'E'. "#EC NOTEXT
ENDIF.

ENDFORM.

* Invoice filter
* Info of Invoice Doc.
FORM invoicedata USING uv_doc_invoice TYPE ebeln
uv_fiscal_year TYPE gjahr.

DATA lv_ponumber TYPE ebeln.

* Get the Purchasing Order Number


SELECT SINGLE ebeln "#EC WARNOK
INTO lv_ponumber
FROM rseg
WHERE belnr = uv_doc_invoice
AND gjahr = uv_fiscal_year.

IF sy-subrc = 0.
PERFORM purchaseorderinfo USING lv_ponumber.
PERFORM get_spec_j1balv USING p_docnf.
PERFORM get_spec_j1bamitv USING p_docnf.
PERFORM get_spec_j1bamhv USING p_docnf.
ELSE.
MESSAGE 'This number of Invoice Document does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ENDFORM.

* Nota fiscal filter


FORM notafiscal USING uv_doc_nota_fiscal TYPE j_1bdocnum.

CONSTANTS: lc_billing TYPE c VALUE 'BI' LENGTH 2,


lc_invoice TYPE c VALUE 'LI' LENGTH 2,
lc_material_doc TYPE c VALUE 'MD' LENGTH 2.

TYPES: BEGIN OF ty_reftypes,


docnumber TYPE c LENGTH 14,
reftype TYPE j_1breftyp,
END OF ty_reftypes.

DATA: lv_reftype TYPE ty_reftypes,


lv_docfinal TYPE c LENGTH 10,
lv_year TYPE gjahr,
lv_countle TYPE i.

* Get the number of Material, lc_invoice and year


SELECT SINGLE refkey reftyp "#EC WARNOK
INTO lv_reftype
FROM j_1bnflin
WHERE docnum = uv_doc_nota_fiscal.

IF sy-subrc = 0.

* By the number, is possible to know which info came


lv_countle = strlen( lv_reftype-docnumber ).

* The field refkey come with the number of Materials Doc or Invoices Doc and the
year
* together in the same string, so this IF will split it in two variables
IF lv_countle > 10.
SUBTRACT 4 FROM lv_countle.
lv_year = lv_reftype-docnumber+10.
lv_docfinal = lv_reftype-docnumber(lv_countle).

ELSE.
lv_docfinal = lv_reftype-docnumber.

ENDIF.

IF lv_reftype-reftype = lc_billing.
PERFORM billinginfo USING lv_docfinal.
ELSEIF lv_reftype-reftype = lc_invoice.
PERFORM invoicedata USING lv_docfinal
lv_year.
ELSEIF lv_reftype-reftype = lc_material_doc.
PERFORM materialdoc USING lv_docfinal
lv_year.
ELSE.
MESSAGE 'This number of Nota Fiscal does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ELSE.
MESSAGE 'This number of Nota Fiscal does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ENDFORM.

* Info of Material Doc.


FORM materialdoc USING uv_doc_material TYPE mblnr
uv_fiscal_year TYPE gjahr.

DATA lv_ponumber TYPE ebeln.

* Get the Purchasing Order Number


SELECT SINGLE ebeln "#EC WARNOK
INTO lv_ponumber
FROM ekbe
WHERE lfbnr = uv_doc_material
AND lfgja = uv_fiscal_year.

IF sy-subrc = 0.
PERFORM purchaseorderinfo USING lv_ponumber.
PERFORM get_spec_j1balv USING p_docnf.
PERFORM get_spec_j1bamitv USING p_docnf.
PERFORM get_spec_j1bamhv USING p_docnf.
ELSE.
MESSAGE 'This number of Material Document does not exist.' TYPE 'E'. "#EC
NOTEXT

ENDIF.

ENDFORM.

* Metadata filter
* Metadata Info
FORM metadatafilter USING uv_package_tables TYPE devclass.

* Get all tables from the package informed


SELECT tadir~obj_name
INTO TABLE gt_metainfo
FROM tadir "#EC *
WHERE pgmid = 'R3TR'
AND object = 'TABL'
AND devclass = uv_package_tables.

IF sy-subrc = 0.
* Call this form to show the DDICs of those tables
PERFORM j1btaxtabs USING gc_positive.

ELSE.
MESSAGE 'This packages name does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ENDFORM.

* Table/structure filter
* Receive a table/structure to display his DDICs
FORM tablesfilter USING uv_tables_name TYPE string.

* In case of Wildcard uses


REPLACE ALL OCCURRENCES OF '*' IN uv_tables_name WITH '%'.

* Get the tables names


SELECT obj_name
INTO TABLE gt_metainfo
FROM tadir "#EC *
WHERE pgmid = 'R3TR'
AND object = 'TABL'
AND obj_name LIKE uv_tables_name.

IF sy-subrc = 0.
SORT gt_metainfo BY tabname.
DELETE ADJACENT DUPLICATES FROM gt_metainfo.

* Call this form to show the DDICs of those tables


PERFORM j1btaxtabs USING gc_positive.

ELSE.
MESSAGE 'This name of table does not exist.' TYPE 'E'. "#EC NOTEXT

ENDIF.

ENDFORM.

***********************************************************************************
***********************************************
************************************************************* J_1BALV
************************************************************
***********************************************************************************
***********************************************

FORM get_j1balv.
TYPES: BEGIN OF TY_OUTPUT_ALV,
nftype TYPE j_1bal-nftype,
manual TYPE j_1bal-manual,
modef TYPE j_1bal-modef,
sconrf TYPE j_1bal-sconrf,
nfttxt TYPE j_1baat-nfttxt,
scnrft TYPE j_1bamht-scnrft,
scr_cont_it TYPE j_1bal-scr_cont_it,
END OF TY_OUTPUT_ALV.

DATA: lv_output TYPE TABLE OF ty_output_alv,


ls_output TYPE ty_output_alv,
gv_test TYPE j_1bnfw_scc.

SELECT j_1bal~nftype j_1bal~manual j_1bal~modef


j_1bal~sconrf j_1baat~nfttxt j_1bamht~scnrft
j_1bal~scr_cont_it "j_1bnfw_scct~scnrft
INTO TABLE lv_output
FROM j_1bal
INNER JOIN j_1baa
ON j_1baa~mandt = j_1bal~mandt AND
j_1baa~nftype = j_1bal~nftype
INNER JOIN j_1baat
ON j_1baat~mandt = j_1baa~mandt AND
j_1baat~nftype = j_1baa~nftype
INNER JOIN j_1bamh
ON j_1bamh~mandt = j_1bal~mandt AND
j_1bamh~sconrf = j_1bal~sconrf
INNER JOIN j_1bamht
ON j_1bamht~mandt = j_1bamh~mandt AND
j_1bamht~sconrf = j_1bamh~sconrf
WHERE j_1bal~mandt = sy-mandt AND
j_1baat~spras = sy-langu AND
j_1bamht~spras = sy-langu.

IF sy-subrc NE 0.
MESSAGE 'TRY AGAIN' TYPE 'E'.
ELSE.
WRITE: 'Table Name: J_1BALV Description: Screen
Control for Group Assignment'.
SKIP.
WRITE: 'NF Type', ' ', 'Description', '
', 'Manual', ' ', 'Mode', ' Scr.Ctl.He.Fiel',' ', 'Description',
' ', 'SC Header Scr.'.
NEW-LINE.
DELETE ADJACENT DUPLICATES FROM lv_output.
LOOP AT lv_output INTO ls_output.
WRITE: ls_output-nftype, ' ', ls_output-nfttxt, ' ', ls_output-
manual, ' ', ls_output-modef, ' ', ls_output-sconrf, '
',ls_output-scnrft,
' ', ls_output-scr_cont_it.
NEW-LINE.
ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
ENDIF.
ENDFORM.

FORM get_spec_j1balv USING lv_docnumber TYPE j_1bdocnum.

TYPES: BEGIN OF TY_OUTPUT_ALV,


nftype TYPE j_1bal-nftype,
manual TYPE j_1bal-manual,
modef TYPE j_1bal-modef,
sconrf TYPE j_1bal-sconrf,
nfttxt TYPE j_1baat-nfttxt,
scnrft TYPE j_1bamht-scnrft,
* scr_cont_it TYPE j_1bal-scr_cont_it,
* scnrftext TYPE j_1bnfw_scct-scnrft,
END OF TY_OUTPUT_ALV.

DATA: lv_output TYPE TABLE OF ty_output_alv,


ls_output TYPE ty_output_alv,
gv_test TYPE j_1bnfw_scc.

SELECT j_1bnfdoc~nftype j_1bal~manual j_1bal~modef


j_1bal~sconrf j_1baat~nfttxt j_1bamht~scnrft
INTO TABLE lv_output
FROM j_1bnfdoc
INNER JOIN j_1bal
ON j_1bal~nftype = j_1bnfdoc~nftype AND
j_1bal~manual = j_1bnfdoc~manual
INNER JOIN j_1baa
ON j_1baa~nftype = j_1bal~nftype
INNER JOIN j_1baat
ON j_1baat~nftype = j_1baa~nftype
INNER JOIN j_1bamh
ON j_1bamh~sconrf = j_1bal~sconrf
INNER JOIN j_1bamht
ON j_1bamht~sconrf = j_1bamh~sconrf
WHERE j_1bnfdoc~docnum = lv_docnumber AND
j_1bamht~spras = sy-langu AND
j_1baat~spras = sy-langu.

IF sy-subrc NE 0.
MESSAGE 'TRY AGAIN' TYPE 'E'.
ELSE.
WRITE: 'Table Name: J_1BALV Description: Screen
Control for Group Assignment'.
SKIP.
WRITE: 'NF Type', ' ', 'Description', '
', 'Manual', ' ', 'Mode', ' Scr.Ctl.He.Fiel',' ', 'Description'.
NEW-LINE.
DELETE ADJACENT DUPLICATES FROM lv_output.
LOOP AT lv_output INTO ls_output.
WRITE: ls_output-nftype, ' ', ls_output-nfttxt, ' ', ls_output-
manual, ' ', ls_output-modef, ' ', ls_output-sconrf, '
',ls_output-scnrft.
NEW-LINE.
ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
ENDIF.

ENDFORM.

***********************************************************************************
***********************************************
*********************************************************** J_1BAMITV
************************************************************
***********************************************************************************
***********************************************

FORM get_j1bamitv.

TYPES: BEGIN OF ty_output_mitv,


sconrf TYPE j_1bamit-sconrf,
tmiss TYPE j_1bamit-tmiss,
itmtyp TYPE j_1bamit-itmtyp,
scrcon TYPE j_1bamit-scrcon,
scnrft TYPE j_1bamitt-scnrft,
END OF ty_output_mitv.

DATA: lv_output TYPE TABLE OF ty_output_mitv,


ls_output TYPE ty_output_mitv.

SELECT j_1bamit~sconrf j_1bamit~tmiss j_1bamit~itmtyp


j_1bamit~scrcon j_1bamitt~scnrft
INTO TABLE lv_output
FROM j_1bamit
INNER JOIN j_1bamitt
ON j_1bamitt~mandt = j_1bamit~mandt AND
j_1bamitt~sconrf = j_1bamit~sconrf AND
j_1bamitt~tmiss = j_1bamit~tmiss AND
j_1bamitt~itmtyp = j_1bamit~itmtyp
WHERE j_1bamit~mandt = sy-mandt AND
j_1bamitt~spras = sy-langu.

IF sy-subrc NE 0.
MESSAGE 'Error at J_1BAMITV View.' TYPE 'E'.
ELSE.
WRITE: 'Table Name: J_1BAMITV Description: Screen
Control for Fields (Item)'.
SKIP.
WRITE: 'SC ItemFI', ' ', 'Service', ' ', 'NF ItmType',' ',
'Description'.
NEW-LINE.
DELETE ADJACENT DUPLICATES FROM lv_output.
LOOP AT lv_output INTO ls_output.
WRITE: ls_output-sconrf, ' ', ls_output-tmiss, ' ',
ls_output-itmtyp, ' ', ls_output-scnrft.
NEW-LINE.
ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
ENDIF.

ENDFORM.
FORM get_spec_j1bamitv USING lv_docnumber TYPE j_1bdocnum.

TYPES: BEGIN OF ty_output_mitv,


sconrf TYPE j_1bamit-sconrf,
tmiss TYPE j_1bamit-tmiss,
itmtyp TYPE j_1bamit-itmtyp,
scrcon TYPE j_1bamit-scrcon,
scnrft TYPE j_1bamitt-scnrft,
END OF ty_output_mitv.

DATA: lv_output TYPE TABLE OF ty_output_mitv,


ls_output TYPE ty_output_mitv.

SELECT j_1bamit~sconrf j_1bamit~tmiss j_1bamit~itmtyp


j_1bamit~scrcon j_1bamitt~scnrft
INTO TABLE lv_output
FROM j_1bnfdoc
INNER JOIN j_1bnflin
ON j_1bnflin~docnum = j_1bnfdoc~docnum
INNER JOIN j_1bal
ON j_1bal~nftype = j_1bnfdoc~nftype
INNER JOIN j_1bamit
ON j_1bamit~sconrf = j_1bal~sconrf AND
j_1bamit~tmiss = j_1bnflin~tmiss
INNER JOIN j_1bamitt
ON j_1bamitt~sconrf = j_1bamit~sconrf AND
j_1bamitt~tmiss = j_1bamit~tmiss AND
j_1bamitt~itmtyp = j_1bamit~itmtyp
WHERE j_1bnfdoc~docnum = lv_docnumber AND
j_1bamitt~spras = sy-langu.

IF sy-subrc NE 0.
MESSAGE 'Error at J_1BAMITV View.' TYPE 'E'.
ELSE.
WRITE: 'Table Name: J_1BAMITV Description: Screen
Control for Fields (Item)'.
SKIP.
WRITE: 'SC ItemFI', ' ', 'Service', ' ', 'NF ItmType',' ',
'Description'.
NEW-LINE.
DELETE ADJACENT DUPLICATES FROM lv_output.
LOOP AT lv_output INTO ls_output.
WRITE: ls_output-sconrf, ' ', ls_output-tmiss, ' ',
ls_output-itmtyp, ' ', ls_output-scnrft.
NEW-LINE.
ENDLOOP.
WRITE:/'
-----------------------------------------------------------------------------------
-----------------------------------------------------------------------------------
---------------------'. "#EC NOTEXT
ENDIF.

ENDFORM.

***********************************************************************************
***********************************************
************************************************************ J_1BAMHV
************************************************************
***********************************************************************************
***********************************************

FORM get_j1bamhv.

TYPES: BEGIN OF ty_output_mhv,


sconrf TYPE j_1bamh-sconrf,
scrcon TYPE j_1bamh-scrcon,
sconrfit TYPE j_1bamh-sconrfit,
scnrft TYPE j_1bamht-scnrft,
END OF ty_output_mhv.

DATA: lv_output TYPE TABLE OF ty_output_mhv,


ls_output TYPE ty_output_mhv.

SELECT j_1bamh~sconrf j_1bamh~scrcon j_1bamh~sconrfit j_1bamht~scnrft


INTO TABLE lv_output
FROM j_1bamh
INNER JOIN j_1bamht
ON j_1bamht~mandt = j_1bamh~mandt AND
j_1bamht~sconrf = j_1bamh~sconrf
INNER JOIN j_1bamit
ON j_1bamit~mandt = j_1bamh~mandt AND
j_1bamit~sconrf = j_1bamh~sconrfit
WHERE j_1bamht~mandt = sy-mandt AND
j_1bamht~spras = sy-langu.

IF sy-subrc NE 0.
MESSAGE 'Error at J_1BAMHV View.' TYPE 'E'.
ELSE.
WRITE: 'Table Name: J_1BAMHV Description: Screen
Control for Fields (Header)'.
SKIP.
WRITE: 'Scr.Ctl.He.Fiel', ' ', 'Description', '
', 'Scr.Ctl.It.Fiel'.
NEW-LINE.
DELETE ADJACENT DUPLICATES FROM lv_output.
LOOP AT lv_output INTO ls_output.
WRITE: ls_output-sconrf, ' ', ls_output-scnrft, ' ',
ls_output-sconrfit.
NEW-LINE.
ENDLOOP.
ENDIF.

ENDFORM.

FORM get_spec_j1bamhv USING lv_docnumber TYPE j_1bdocnum.

TYPES: BEGIN OF ty_output_mhv,


sconrf TYPE j_1bamh-sconrf,
scrcon TYPE j_1bamh-scrcon,
sconrfit TYPE j_1bamh-sconrfit,
scnrft TYPE j_1bamht-scnrft,
END OF ty_output_mhv.

DATA: lv_output TYPE TABLE OF ty_output_mhv,


ls_output TYPE ty_output_mhv.

SELECT j_1bamh~sconrf j_1bamh~scrcon j_1bamh~sconrfit j_1bamht~scnrft


INTO TABLE lv_output
FROM j_1bnfdoc
INNER JOIN j_1bal
ON j_1bal~nftype = j_1bnfdoc~nftype
INNER JOIN j_1bamh
ON j_1bamh~sconrf = j_1bal~sconrf
INNER JOIN j_1bamht
ON j_1bamht~mandt = j_1bamh~mandt AND
j_1bamht~sconrf = j_1bamh~sconrf
INNER JOIN j_1bamit
ON j_1bamit~mandt = j_1bamh~mandt AND
j_1bamit~sconrf = j_1bamh~sconrfit
WHERE j_1bnfdoc~docnum = lv_docnumber AND
j_1bamht~spras = sy-langu.

IF sy-subrc NE 0.
MESSAGE 'TRY AGAIN' TYPE 'E'.
ELSE.
WRITE: 'Table Name: J_1BAMHV Description: Screen
Control for Fields (Header)'.
SKIP.
WRITE: 'Scr.Ctl.He.Fiel', ' ', 'Description', '
', 'Scr.Ctl.It.Fiel'.
NEW-LINE.
DELETE ADJACENT DUPLICATES FROM lv_output.
LOOP AT lv_output INTO ls_output.
WRITE: ls_output-sconrf, ' ', ls_output-scnrft, ' ',
ls_output-sconrfit.
NEW-LINE.
ENDLOOP.
ENDIF.

ENDFORM.

You might also like