Vous êtes sur la page 1sur 25

* ORIGINAL im EB5/000

*&---------------------------------------------------------------------*
*& Report ZF_CREATE_TXGRP_IN_BSEG
*& Tax Group TXGRP in table BSEG is corrected using table BSET
* Report is attached to note 647424,
* please keep attachment up to date.
*----------------------------------------------------------------------
* TXGRP in BSET must be ok !!
* otherwise this report cannot be used
*
*&---------------------------------------------------------------------*
************************************************************************
* Last change:
* 2016-03-18: LINEWISE not only in India
* 2014-03-21: Adopt FORM fi_tax_set_txgrp to FACI FORM subst_taxps
* 2014-03-20: Print also BSET-TAXPS and BSEG-TAXPS
* 2014-03-18: Parameter LINEWISE: force tax calculation line-by-line
* makes sense only in IN and
* for glvor = RMRP (MIRO, MRKO) ??
* see FM CALCULATE_TAX_DOCUMENT
* 2013-06-10: not line-by-line -> clear bseg-taxps in all items
* 2012-03-30: bypass function 'FI_TAX_SET_TXGRP'
* 2012-03-23: note 1692637
* 2012-01-23: technical correction
* 2012-01-20: check bseg-taxps
* 2011-07-08
* clear ybseg-txgrp, -taxps for complete redetermination
* set bset-txgrp = bset-taxps
* 2011-06-08 note 1042117
* Dec. 2, 2005 use standard function in case of linewise
* tax calculation
* October 21, 2005: compressed manual tax line items in
* BSEG and/or BSET
* October 12, 2005:
* Redesign: applicable now also for company code without linewise tax
* calculation (see tr. OBCO) and MIRO documents with manual tax line
* items (see note 887711)

* September 21, 2005


* August 10, 2005
* August 9, 2005
* August 6, 2003
************************************************************************
* Select-Options
* p_belnr FI document number
* p_bukrs company code
* p_gjahr business year
* p_budat posting date
* p_blart document type
* p_awtyp reference procudure i.e. VBRK for SD billing documents
*
* Parameters:
* testrun ON = no databbase changes
* bset_det ON = List All Bset line items, even those not changed
* bseg_det ON = List All Bseg line items, even those not changed
* onlycorr ON = List only BSEG and BSET of wrong documents
* linewise ON = force tax calculation line-by-line
*
* A list of all documents that have been checked
* - only document numbers, without any further details -
* is always displayed as first part of the output list.
*
*
*-----------------------------------------------------------------------
*-----------------------------------------------------------------------
* Check in testrun whether the changes would be ok !!
*-----------------------------------------------------------------------
REPORT zf_create_txgrp_in_bseg MESSAGE-ID ff LINE-SIZE 140.

TABLES: bkpf, bseg, bset.


TABLES: ttypv.
* ttypvx. "2016-03-18

TABLES: t001. "2014-03-18

FIELD-SYMBOLS: <bseg> TYPE bseg, "2011-06-08


<bset> TYPE bset. "2011-06-08

DATA: xbkpf LIKE bkpf OCCURS 10 WITH HEADER LINE,


ybkpf LIKE bkpf OCCURS 10 WITH HEADER LINE,
xbseg LIKE bseg OCCURS 10 WITH HEADER LINE,
ybseg LIKE bseg OCCURS 10 WITH HEADER LINE,
xbset LIKE bset OCCURS 10 WITH HEADER LINE,
ybset LIKE bset OCCURS 10 WITH HEADER LINE.

* output structure
DATA: BEGIN OF xoutput OCCURS 0,
bukrs LIKE bkpf-bukrs,
belnr LIKE bkpf-belnr,
gjahr LIKE bkpf-gjahr,
text(20) TYPE c,
corrupt TYPE c,
updated TYPE c,
END OF xoutput.

* Bset for output


DATA: BEGIN OF bset_output OCCURS 0,
status(7) VALUE 'BSET ',
bukrs LIKE bset-bukrs,
belnr LIKE bset-belnr,
gjahr LIKE bset-gjahr,
buzei LIKE bset-buzei,
txgrp LIKE bset-txgrp,
shkzg LIKE bset-shkzg,
mwskz LIKE bset-mwskz,
txjcd LIKE bset-txjcd,
fwste LIKE bset-fwste,
fwbas LIKE bset-fwbas,
ktosl LIKE bset-ktosl,
kschl LIKE bset-kschl,
taxps LIKE bset-taxps, "2014-03-20
END OF bset_output.

* Bseg for output


DATA: BEGIN OF bseg_output OCCURS 0,
xcorrupt TYPE c,
status(7) TYPE c, " 'OLD' or 'NEW',
bukrs LIKE bseg-bukrs,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
buzei LIKE bseg-buzei,
txgrp LIKE bseg-txgrp,
shkzg LIKE bseg-shkzg,
mwskz LIKE bseg-mwskz,
txjcd LIKE bseg-txjcd,
wrbtr LIKE bseg-wrbtr,
fwbas LIKE bseg-fwbas,
ktosl LIKE bseg-ktosl,
mwart LIKE bseg-mwart,
bschl LIKE bseg-bschl,
koart LIKE bseg-koart,
buzid LIKE bseg-buzid,
xauto LIKE bseg-xauto,
taxps LIKE bseg-taxps, "2014-03-20
END OF bseg_output.

DATA: BEGIN OF doc_key,


bukrs LIKE bseg-bukrs,
belnr LIKE bseg-belnr,
gjahr LIKE bseg-gjahr,
END OF doc_key.

DATA: BEGIN OF tb OCCURS 0,


buzei LIKE bseg-buzei,
txgrp LIKE bseg-txgrp,
END OF tb.
DATA: old_txgrp LIKE bset-txgrp.
DATA: old_bukrs LIKE bkpf-bukrs.
DATA: old_awtyp LIKE ttypv-awtyp.

DATA: e_external,
e_linewise.
* counter
DATA: exist_bset_count TYPE i,
calc_bset_count TYPE i,
docs_checked TYPE i,
docs_corrupt TYPE i,
xcorrupt TYPE c,
icommit TYPE i.

* begin of change 2011-06-08


* BadI for XTXIT "N1042117
DATA: g_badi_xtxit TYPE REF TO badi_tax1_xtxit_set. "N1042117
* end of change 2011-06-08
DATA: ls_t001 TYPE t001,
ls_t005 TYPE t005.
* begin of change 2011-07-08
DATA: buv_without_txgrp VALUE 'X'.
DATA: reset_bset_txgrp_from_taxps VALUE 'X'.
* end of change 2011-07-08

* should standard function 'FI_TAX_SET_TXGRP' be used ? "2012-03-30


DATA: p_use_fi_tax_set_txgrp VALUE ' '. "2012-03-30

FIELD-SYMBOLS: <bseg_taxps> TYPE any. "2012-01-20


DATA: l_t001 TYPE t001, "2014-03-18
save_linewise. "2014-03-18
DATA: e_jurcode_active. "2016-03-18
FIELD-SYMBOLS: <struc> TYPE any. "2016-03-18
*----------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK 001 WITH FRAME.
* only 1 company code and business year allowed
PARAMETERS: "2014-03-18
p_bukrs LIKE bkpf-bukrs MEMORY ID buk "2014-03-18
OBLIGATORY, "2014-03-18

p_gjahr LIKE bkpf-gjahr MEMORY ID gjr "2014-03-18


OBLIGATORY. "2014-03-18

SELECT-OPTIONS: p_belnr FOR bkpf-belnr,


* p_bukrs FOR bkpf-bukrs MEMORY ID buk 2014-03-18
* p_gjahr FOR bkpf-gjahr MEMORY ID gjr 2014-03-18
p_budat FOR bkpf-budat,
p_blart FOR bkpf-blart,
p_awtyp FOR bkpf-awtyp DEFAULT 'RMRP'.
SELECTION-SCREEN END OF BLOCK 001.
PARAMETERS : testrun AS CHECKBOX DEFAULT 'X',
bset_det AS CHECKBOX, "ON = List All Bset line items
bseg_det AS CHECKBOX, "ON = List All Bseg line items
onlycorr AS CHECKBOX DEFAULT 'X'. "ON = List only wrong documents

PARAMETERS: linewise AS CHECKBOX DEFAULT ' '. "2014-03-18

*--------------------------------------------------------------------------
START-OF-SELECTION.
* store initial value of paramter linewise.
save_linewise = linewise. "2014-03-18

* select documents
SELECT * FROM bkpf INTO xbkpf "August 9, 2005
WHERE bukrs = p_bukrs "2014-03-18
AND belnr IN p_belnr
AND gjahr = p_gjahr "2014-03-18
AND budat IN p_budat
AND blart IN p_blart
AND awtyp IN p_awtyp
*"/ only posted, no statistical doc (no down paym. req)
AND bstat = space.

* no documents originally posted in FI


* allow also documents from FI "2014-03-18
* CHECK bkpf-awtyp NE 'BKPF'. "2014-03-18
*----------------------------------------------------------------------
* only for company codes with external system or tax line by line
IF old_bukrs NE xbkpf-bukrs.
old_bukrs = xbkpf-bukrs.
CALL FUNCTION 'CHECK_JURISDICTION_ACTIVE'
EXPORTING
i_bukrs = xbkpf-bukrs
IMPORTING
e_isactive = e_jurcode_active "2016-03-18
e_external = e_external
e_xtxit = e_linewise.
* obsolete "October 12, 2005
* IF e_linewise IS INITIAL. "August 9, 2005
* WRITE: / 'Actual comp code: ', xbkpf-bukrs.
* WRITE: /
* 'Select only Comp.Codes with line-by-line tax calculation. STOP'.
* STOP.
* ENDIF.
SELECT SINGLE * FROM t001 INTO l_t001
WHERE bukrs = p_bukrs.
ENDIF.

* begin of change 2011-06-08


* Pr�fen, ob der BADI aktiv ist as note 1042117
IF e_linewise IS INITIAL
AND old_bukrs NE xbkpf-bukrs. "2014-03-18
* begin of note 1042117
IF g_badi_xtxit IS INITIAL.
TRY.
GET BADI g_badi_xtxit.
CATCH cx_badi_not_single_use.
CLEAR g_badi_xtxit.
ENDTRY.
ENDIF.

IF NOT g_badi_xtxit IS INITIAL.


CALL BADI g_badi_xtxit->xtxit_set
EXPORTING
* i_t_bkpf = xbkpf[] "2012-01-23
i_t_bkpf = ybkpf[] "2012-01-23
i_t_bseg = ybseg[]
CHANGING
c_flg_xtxit = e_linewise.
ENDIF.
* end of note 1042117
ENDIF.
* end of change 2011-06-08

* begin of change 2014-03-18


linewise = save_linewise.
* begin of 2016-03-18 deactivate checks
** additional consistency check for parameter LINEWISE
* IF e_linewise IS INITIAL
* AND NOT save_linewise IS INITIAL
* AND old_bukrs NE xbkpf-bukrs.
** forced line-by-line can only happen in IN
* IF l_t001-land1 NE 'IN'.
* CLEAR linewise.
* CLEAR save_linewise.
* ENDIF.
* ENDIF.
*
* IF e_linewise IS INITIAL
* AND NOT save_linewise IS INITIAL.
* IF xbkpf-awtyp NE 'RMRP'. " right ????? see FM CALCULATE_TAX_DOCUMENT
** 'linewise' makes sense only for RMRP
** clear linewise for current document
* CLEAR linewise.
** but keep save_linewise unchanged for other documents
* ENDIF.
* ENDIF.
* end of 2016-03-18

* end of change 2014-03-18

IF NOT e_linewise IS INITIAL


OR NOT linewise IS INITIAL. "check parameter "2014-03-18
* because of compression according to note 571928 and 643273
IF old_awtyp NE xbkpf-awtyp.
old_awtyp = xbkpf-awtyp.
SELECT * FROM ttypv WHERE awtyp = xbkpf-awtyp.
WRITE: / 'Actual document number: ', xbkpf-bukrs,
xbkpf-belnr,
xbkpf-gjahr.
WRITE: / 'Actual Reference Procedure of the document: ',
xbkpf-awtyp.
WRITE: /
'Select only Reference Procedures without compression. STOP'.

WRITE: / 'See notes 571928, 643273, 36353 and related ones'.

STOP.

ENDSELECT.
*
* check in table TTYPVX is also necessary "2014-03-18
* but new table TTYPVX may not be known in customer system !! "2014-03-18
* see notes 1916751 1779136 "2014-03-18
*
** begin of 2016-03-18
* SELECT * FROM ttypvx WHERE awtyp EQ xbkpf-awtyp
* AND ( bukrs EQ xbkpf-bukrs
* OR bukrs EQ space )
* AND ( blart EQ xbkpf-blart
* OR blart EQ space ).
* WRITE: / 'Actual document number: ', xbkpf-bukrs,
* xbkpf-belnr,
* xbkpf-gjahr.
* WRITE: / 'Actual Reference Procedure of the document: ',
* xbkpf-awtyp.
* WRITE: /
* 'Select only Reference Procedures without compression. STOP'.
*
* WRITE: / 'See notes 1779136, 1916751, 643273, 36353 and related ones'.
*
* STOP.
*
* ENDSELECT.
* ENDIF.
** end of 2016-03-18
ENDIF.
ENDIF.

old_bukrs = xbkpf-bukrs.
old_awtyp = xbkpf-awtyp.

if ls_t001-bukrs <> xbkpf-bukrs.


call function 'FI_COMPANY_CODE_DATA'
exporting
i_bukrs = xbkpf-bukrs
importing
e_t001 = ls_t001.
call function 'FI_COUNTRY_DATA'
exporting
i_land1 = ls_t001-land1
importing
e_t005 = ls_t005.
endif.
IF ls_t005-intca <> 'IN' AND
ls_t005-intca <> 'BR'.
APPEND xbkpf.
ENDIF.

ENDSELECT.

LOOP AT xbkpf.

xcorrupt = space.
docs_checked = docs_checked + 1.

REFRESH: ybkpf, ybseg, xbseg, xbset.


CLEAR: ybkpf, ybseg, xbseg, xbset.
CLEAR: xoutput.

MOVE-CORRESPONDING xbkpf TO ybkpf.


APPEND ybkpf.

SELECT * FROM bseg INTO TABLE xbseg


WHERE bukrs = xbkpf-bukrs AND
belnr = xbkpf-belnr AND
gjahr = xbkpf-gjahr
ORDER BY PRIMARY KEY.

SELECT * FROM bset INTO TABLE xbset


WHERE bukrs = xbkpf-bukrs
AND belnr = xbkpf-belnr
AND gjahr = xbkpf-gjahr
ORDER BY PRIMARY KEY.

* begin of 2016-03-18
IF l_t001-land1 = 'IN'.
CALL FUNCTION 'FUNCTION_EXISTS'
EXPORTING
funcname = 'J_1I4_CALCULATE_TAX_DOCUMENT'
EXCEPTIONS
function_not_exist = 1
OTHERS = 2.
IF sy-subrc IS INITIAL.
CALL FUNCTION 'J_1I4_CALCULATE_TAX_DOCUMENT' " see note 1872988
EXPORTING
t_bkpf = xbkpf
TABLES
t_bseg = xbseg "see note 2056080
CHANGING
c_flg_xtxit = e_linewise.
ENDIF.
ENDIF.
* end of 2016-03-18

SORT xbseg BY bukrs belnr gjahr buzei.


SORT xbset BY bukrs belnr gjahr buzei.
ybseg[] = xbseg[].
ybset[] = xbset[].
*+++++++++++++++++++++++++++++++++++++++++++++
* repair txgrp in table BSEG: output in table ybseg
PERFORM fi_tax_set_txgrp_in_bseg.
**********************************************
xoutput-corrupt = xcorrupt.
MOVE-CORRESPONDING ybkpf TO xoutput.

* store some bset data for output list


LOOP AT xbset.
MOVE-CORRESPONDING xbset TO bset_output.
APPEND bset_output.
ENDLOOP.

* store some old bseg data for output list


LOOP AT xbseg WHERE koart NE 'K'
AND koart NE 'D'.
bseg_output-status = 'BSEGOLD'.
MOVE-CORRESPONDING xbseg TO bseg_output.
APPEND bseg_output.
ENDLOOP.

* store some new bseg data for output list


LOOP AT ybseg WHERE koart NE 'K'
AND koart NE 'D'.
bseg_output-status = 'BSEGNEW'.
MOVE-CORRESPONDING ybseg TO bseg_output.
APPEND bseg_output.
ENDLOOP.

IF testrun IS INITIAL
AND xcorrupt = 'X'.
* insert new TXGRP in BSEG
LOOP AT ybseg.
UPDATE bseg SET txgrp = ybseg-txgrp
taxps = ybseg-taxps "change 2012-03-23
mwskz = ybseg-mwskz "change 2012-03-23
txjcd = ybseg-txjcd "change 2012-03-23
WHERE bukrs = ybseg-bukrs
AND belnr = ybseg-belnr
AND gjahr = ybseg-gjahr
AND buzei = ybseg-buzei.
ENDLOOP.
xoutput-updated = 'X'.
icommit = icommit + 1.
ENDIF.

APPEND xoutput.

IF xcorrupt = 'X'.
docs_corrupt = docs_corrupt + 1.
ENDIF.
IF icommit GT 500.
COMMIT WORK.
CLEAR icommit.
ENDIF.

ENDLOOP. "xbkpf
COMMIT WORK.

PERFORM write_output_documents.

END-OF-SELECTION.

**********************************************************************
* form write_output_documents
**********************************************************************
FORM write_output_documents.

DATA: old_belnr LIKE bseg-belnr.

SORT xoutput BY bukrs belnr gjahr.


SORT bset_output BY bukrs belnr gjahr status buzei.
SORT bseg_output BY bukrs belnr gjahr status DESCENDING buzei.

FORMAT COLOR COL_HEADING.


WRITE: / 'BUKRS BELNR GJAHR corrupt updated '.
ULINE.
FORMAT COLOR OFF.

LOOP AT xoutput.
WRITE: /(6) xoutput-bukrs,
(12) xoutput-belnr,
(6) xoutput-gjahr,
(8) xoutput-corrupt,
(8) xoutput-updated,
(20) xoutput-text.
ENDLOOP.

NEW-LINE. ULINE.
FORMAT COLOR COL_TOTAL.
WRITE: / 'Documents checked:', docs_checked.
WRITE: / 'Documents corrupt:', docs_corrupt.
FORMAT COLOR OFF.

NEW-PAGE.
FORMAT COLOR COL_GROUP.
WRITE: 'Checked documents: Please compare old and new BSEG with BSET'.
FORMAT COLOR COL_HEADING.
* WRITE: / 'STA CompC Doc.No Year POS TXG S TC JurCode'.
WRITE: / 'STA CompC Doc.No Year POS TXG TAXPS S TC JurCode'. "2014-03-
20

FORMAT COLOR COL_NORMAL.


CLEAR: old_belnr.
CLEAR doc_key.

LOOP AT xoutput.
IF onlycorr = 'X'.
CHECK xoutput-corrupt ='X'.
ENDIF.

MOVE-CORRESPONDING xoutput TO doc_key.

ULINE.
IF xoutput-corrupt ='X'.
FORMAT COLOR COL_NEGATIVE.
WRITE: / 'Tax Group TXGRP in table BSEG seems to be wrong'.
WRITE: '- Please check'.
FORMAT COLOR COL_NORMAL.
ENDIF.
* write bset
PERFORM write_output_bset USING doc_key-bukrs
doc_key-belnr
doc_key-gjahr.

* write bseg
LOOP AT bseg_output WHERE bukrs = doc_key-bukrs
AND belnr = doc_key-belnr
AND gjahr = doc_key-gjahr.

IF bseg_det IS INITIAL.
* no tax line items in bseg
CHECK bseg_output-mwart = space.
ENDIF.

* write bseg
IF bseg_output-status = 'BSEGNEW'.
FORMAT COLOR COL_POSITIVE.
ELSE.
FORMAT COLOR COL_NEGATIVE.
ENDIF.
WRITE: /(7) bseg_output-status.
FORMAT COLOR COL_NORMAL.

WRITE: (5) bseg_output-bukrs,


(10) bseg_output-belnr,
(6) bseg_output-gjahr,
(3) bseg_output-buzei.

IF bseg_output-status = 'BSEGNEW'.
FORMAT COLOR COL_POSITIVE.
ELSE.
FORMAT COLOR COL_NEGATIVE.
ENDIF.
WRITE: (3) bseg_output-txgrp.
WRITE: (6) bseg_output-taxps. "2014-03-20
FORMAT COLOR COL_NORMAL.

WRITE: (1) bseg_output-shkzg,


(2) bseg_output-mwskz,
(11) bseg_output-txjcd,
(15) bseg_output-wrbtr,
(15) bseg_output-fwbas,
(3) bseg_output-ktosl,
(1) bseg_output-mwart,
(2) bseg_output-bschl,
(1) bseg_output-mwart,
(1) bseg_output-buzid,
(1) bseg_output-xauto,
(1) bseg_output-koart.

ENDLOOP.
ENDLOOP.

ENDFORM. "write_output_documents
*&---------------------------------------------------------------------*
*& Form write_output_bset
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_DOC_KEY text
*----------------------------------------------------------------------*
FORM write_output_bset USING p_bukrs
p_belnr
p_gjahr.

DATA: old_txgrp LIKE bset-txgrp.


CLEAR old_txgrp.

LOOP AT bset_output
WHERE bukrs = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.

IF bset_det IS INITIAL.
* only first occurence of each txgrp
CHECK bset_output-txgrp NE old_txgrp.
old_txgrp = bset_output-txgrp.
ENDIF.
* write bset

FORMAT COLOR COL_TOTAL.


WRITE: /(7) bset_output-status.
FORMAT COLOR COL_NORMAL.

WRITE: (5) bset_output-bukrs,


(10) bset_output-belnr,
(6) bset_output-gjahr,
(3) bset_output-buzei.

FORMAT COLOR COL_TOTAL.


WRITE: (3) bset_output-txgrp.
WRITE: (6) bset_output-taxps. "2014-03-20
FORMAT COLOR COL_NORMAL.

WRITE: (1) bset_output-shkzg,


(2) bset_output-mwskz,
(11) bset_output-txjcd.

IF bset_det = 'X'.
WRITE: (15) bset_output-fwste,
(15) bset_output-fwbas,
(3) bset_output-ktosl,
(4) bset_output-kschl.
ENDIF.
ENDLOOP.

ENDFORM. " write_output_bset


*&---------------------------------------------------------------------*
*& Form fi_tax_set_txgrp_in_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fi_tax_set_txgrp_in_bseg.
*---------------------------------------------
* TXGRP in BSET must be ok !!
* otherwise this report cannot be used
*---------------------------------------------
DATA: BEGIN OF sbseg_old OCCURS 0,
buzei LIKE bseg-buzei,
txgrp LIKE bseg-txgrp,
taxps LIKE bseg-taxps, "change 2012-03-23
mwskz LIKE bseg-mwskz, "change 2012-03-23
txjcd LIKE bseg-txjcd, "change 2012-03-23
END OF sbseg_old.

DATA: BEGIN OF sbseg_new OCCURS 0,


buzei LIKE bseg-buzei,
txgrp LIKE bseg-txgrp,
taxps LIKE bseg-taxps, "change 2012-03-23
mwskz LIKE bseg-mwskz, "change 2012-03-23
txjcd LIKE bseg-txjcd, "change 2012-03-23
END OF sbseg_new.

* company code without linewise tax calculation also allowed


* begin change 2014-03-18
* unnecessary check of linewise at this location !!
*
** CALL FUNCTION 'CHECK_JURISDICTION_ACTIVE'
** EXPORTING
** i_bukrs = xbkpf-bukrs "2012-01-23
** i_bukrs = ybkpf-bukrs "2012-01-23
** IMPORTING
** e_external = e_external
** e_xtxit = e_linewise.
**
** begin of change 2011-06-08
** Pr�fen, ob der BADI aktiv ist as note 1042117
** IF e_linewise IS INITIAL.
** begin of note 1042117
** IF g_badi_xtxit IS INITIAL.
** TRY.
** GET BADI g_badi_xtxit.
** CATCH cx_badi_not_single_use.
** CLEAR g_badi_xtxit.
** ENDTRY.
** ENDIF.
**
** IF NOT g_badi_xtxit IS INITIAL.
** CALL BADI g_badi_xtxit->xtxit_set
** EXPORTING
** i_t_bkpf = xbkpf[] "2012-01-23
** i_t_bkpf = ybkpf[] "2012-01-23
** i_t_bseg = ybseg[]
** CHANGING
** c_flg_xtxit = e_linewise.
** ENDIF.
** end of note 1042117
** ENDIF.
** end of change 2011-06-08
* end of change 2014-03-18

CLEAR xcorrupt.
IF e_linewise IS INITIAL
AND linewise IS INITIAL. "2014-03-18
*----------------------------------------------------------------------
* here no linewise tax calculation
*----------------------------------------------------------------------

PERFORM set_txgrp_not_linewise.
* do not use function 'FI_TAX_SET_TXGRP' !!!
* CALL FUNCTION 'FI_TAX_SET_TXGRP'
* EXPORTING
* i_bukrs = xbkpf-bukrs
* i_xtxit = space
* TABLES
* t_bkpf = xbkpf
* t_bseg = ybseg
* t_bset = xbset.
*
LOOP AT xbseg.
sbseg_old-buzei = xbseg-buzei.
sbseg_old-txgrp = xbseg-txgrp.
sbseg_old-taxps = xbseg-taxps. "change 2012-03-23
sbseg_old-mwskz = xbseg-mwskz. "change 2012-03-23
sbseg_old-txjcd = xbseg-txjcd. "change 2012-03-23
APPEND sbseg_old.
ENDLOOP.

LOOP AT ybseg.
sbseg_new-buzei = ybseg-buzei.
sbseg_new-txgrp = ybseg-txgrp.
sbseg_new-taxps = ybseg-taxps. "change 2012-03-23
sbseg_new-mwskz = ybseg-mwskz. "change 2012-03-23
sbseg_new-txjcd = ybseg-txjcd. "change 2012-03-23
APPEND sbseg_new.
ENDLOOP.

IF sbseg_old[] NE sbseg_new[].
xcorrupt = 'X'.
ENDIF.

ELSE.
*----------------------------------------------------------------------
* here linewise tax calculation
*----------------------------------------------------------------------

* use standard function also for correction Dec. 2, 2005

* begin of change 2012-03-23 note 1692637


IF ybkpf-awtyp = 'RMRP'.
PERFORM delete_mwskz_bseg_rmrp.
ENDIF.
* end of change 2012-03-23 note 1692637

* begin of change 2011-07-08


* correct bset-txgrp anyway
IF NOT reset_bset_txgrp_from_taxps IS INITIAL.
LOOP AT ybset ASSIGNING <bset>.
<bset>-txgrp = <bset>-taxps.
ENDLOOP.
ENDIF.

* clear txgrp and taxps (?) so that it can be redetermined in


* 'FI_TAX_SET_TXGRP' from scratch
LOOP AT ybseg ASSIGNING <bseg>
WHERE mwart IS INITIAL.
* begin of 2012-01-20
ASSIGN COMPONENT 'TAXPS' OF STRUCTURE <bseg> TO <bseg_taxps>.
IF sy-subrc IS INITIAL.
CLEAR <bseg_taxps>.
ENDIF.
* end of 2012-01-20
CLEAR: <bseg>-txgrp.
ENDLOOP.
* end of change 2011-07-08
IF NOT p_use_fi_tax_set_txgrp IS INITIAL. "2012-03-30
CALL FUNCTION 'FI_TAX_SET_TXGRP'
EXPORTING
* i_bukrs = xbkpf-bukrs "2012-01-23
i_bukrs = ybkpf-bukrs "2012-01-23
i_xtxit = 'X'
TABLES
* t_bkpf = xbkpf "2012-01-23
t_bkpf = ybkpf "2012-01-23
t_bseg = ybseg
* t_bset = xbset. "2012-01-23
t_bset = ybset. "2012-01-23

ELSE. "2012-03-30
PERFORM fi_tax_set_txgrp TABLES ybkpf "2012-03-30
ybseg. "2012-03-30
ENDIF. "2012-03-30

*--------------------------------------------------------
* clear txgrp
* in customer/vendor line items
* in tax line items
* do no use form set_txgrp_linewise. Dec. 2, 2005
* PERFORM set_txgrp_linewise.

* begin of change 2011-07-08


* currently I have no general rule when bseg-txgr, -taxps should be filled
IF NOT buv_without_txgrp IS INITIAL.
LOOP AT ybseg ASSIGNING <bseg>
WHERE ktosl = 'BUV'.
* begin of 2012-01-20
ASSIGN COMPONENT 'TAXPS' OF STRUCTURE <bseg> TO <bseg_taxps>.
IF sy-subrc IS INITIAL.
CLEAR <bseg_taxps>.
ENDIF.
* end of 2012-01-20
CLEAR: <bseg>-txgrp.
ENDLOOP.
ENDIF.
* end of change 2011-07-08

LOOP AT xbseg.
sbseg_old-buzei = xbseg-buzei.
sbseg_old-txgrp = xbseg-txgrp.
sbseg_old-taxps = xbseg-taxps. "change 2012-03-23
sbseg_old-mwskz = xbseg-mwskz. "change 2012-03-23
sbseg_old-txjcd = xbseg-txjcd. "change 2012-03-23
APPEND sbseg_old.
ENDLOOP.

LOOP AT ybseg.
sbseg_new-buzei = ybseg-buzei.
sbseg_new-txgrp = ybseg-txgrp.
sbseg_new-taxps = ybseg-taxps. "change 2012-03-23
sbseg_new-mwskz = ybseg-mwskz. "change 2012-03-23
sbseg_new-txjcd = ybseg-txjcd. "change 2012-03-23
APPEND sbseg_new.
ENDLOOP.

IF sbseg_old[] NE sbseg_new[].
xcorrupt = 'X'.
ENDIF.

ENDIF.

ENDFORM. " fi_tax_set_txgrp


*&---------------------------------------------------------------------*
*& Form set_txgrp_not_linewise
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_txgrp_not_linewise .

DATA: BEGIN OF taxgrp OCCURS 0,


bukrs LIKE bkpf-bukrs,
mwskz LIKE bseg-mwskz,
txjcd LIKE bseg-txjcd,
txgrp LIKE bseg-txgrp,
shkzg LIKE bseg-shkzg,
ktosl LIKE bseg-ktosl,
hkont LIKE bseg-hkont,
used,
END OF taxgrp.
DATA: xbukrs LIKE bkpf-bukrs,
ibukrs LIKE bkpf-bukrs.

DATA: l_manual_tax_lines_in_bseg TYPE i,


l_manual_tax_lines_in_bset TYPE i,
i_loop TYPE i.
DATA: l_bset_compressed,
l_bseg_compressed,
d_manual.

* READ TABLE xbkpf INDEX 1. "2012-01-23


READ TABLE ybkpf INDEX 1. "2012-01-23
* ibukrs = xbkpf-bukrs. "2012-01-23
ibukrs = ybkpf-bukrs. "2012-01-23

REFRESH taxgrp.
CLEAR taxgrp.

* check first whether manual tax line items


* have been compressed in BSET and/or BSEG
* count manual tax line items in BSEG
* see U6B/800 doc 5100003578/001/2205 but which is corrected now
CLEAR: l_manual_tax_lines_in_bseg,
l_manual_tax_lines_in_bset.
LOOP AT ybseg WHERE NOT mwskz IS INITIAL
AND NOT mwart IS INITIAL
AND xauto IS INITIAL.
ADD 1 TO l_manual_tax_lines_in_bseg.
ENDLOOP.
IF l_manual_tax_lines_in_bseg GT 0.
* manual tax line items in bset can have txjlv = D;
* but this is probably not always the case, such as SD;
* but it is the case for FI and MM
LOOP AT ybset WHERE txjlv = 'D'.
d_manual = 'X'.
ADD 1 TO l_manual_tax_lines_in_bset.
ENDLOOP.
ENDIF.

IF l_manual_tax_lines_in_bseg GT 0
AND l_manual_tax_lines_in_bset GT 0.
IF l_manual_tax_lines_in_bseg GT l_manual_tax_lines_in_bset.
l_bset_compressed = 'X'.
ELSEIF l_manual_tax_lines_in_bseg LT l_manual_tax_lines_in_bset.
l_bseg_compressed = 'X'.
ENDIF.
ENDIF.

LOOP AT ybset.
CLEAR taxgrp.
taxgrp-bukrs = ybset-bukrs.
taxgrp-mwskz = ybset-mwskz.
taxgrp-txjcd = ybset-txjdp. "!txjdp!
taxgrp-txgrp = ybset-txgrp.
taxgrp-shkzg = ybset-shkzg.
taxgrp-ktosl = ybset-ktosl.
taxgrp-hkont = ybset-hkont.
COLLECT taxgrp.
ENDLOOP.

* begin of change 2013-06-10


* taxps must be initial anyway
LOOP AT ybseg WHERE NOT taxps IS INITIAL.
CLEAR ybseg-taxps.
MODIFY ybseg TRANSPORTING taxps.
ENDLOOP.
* end of change 2013-06-10

* first: manual tax line items


LOOP AT ybseg WHERE NOT mwart IS INITIAL
AND xauto IS INITIAL.
LOOP AT taxgrp WHERE bukrs = ybseg-bukrs
AND mwskz = ybseg-mwskz
AND txjcd = ybseg-txjcd.
IF l_bset_compressed IS INITIAL.
CHECK taxgrp-used IS INITIAL.
ENDIF.
taxgrp-used = 'X'. "use only once
MODIFY taxgrp.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
ybseg-txgrp = taxgrp-txgrp.
MODIFY ybseg TRANSPORTING txgrp.
ENDIF.
ENDLOOP.

* then: automatic tax line items


LOOP AT ybseg WHERE NOT mwart IS INITIAL
AND NOT xauto IS INITIAL.
LOOP AT taxgrp WHERE used IS INITIAL
AND bukrs = ybseg-bukrs
AND mwskz = ybseg-mwskz
AND txjcd = ybseg-txjcd
AND shkzg = ybseg-shkzg
AND ktosl = ybseg-ktosl
AND hkont = ybseg-hkont.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
ybseg-txgrp = taxgrp-txgrp.
MODIFY ybseg TRANSPORTING txgrp.
ENDIF.
ENDLOOP.

* then tax relevant g/l line items


LOOP AT ybseg WHERE mwart = space
AND ( koart NE 'D' OR ktosl = 'BUV' )
AND ( koart NE 'K' OR ktosl = 'BUV' )
AND mwskz NE space
AND ( wrbtr NE 0 OR dmbtr NE 0 ).

IF ( ybseg-koart = 'S' AND ybseg-xauto = 'X' AND


ybseg-ktosl <> 'BUV' AND ybseg-ktosl <> 'AUM' ) OR
ybseg-umsks = 'A'.
xbukrs = ybseg-bukrs.
ELSE.
xbukrs = ibukrs.
ENDIF.
LOOP AT taxgrp WHERE used IS INITIAL
AND bukrs = xbukrs
AND mwskz = ybseg-mwskz
AND txjcd = ybseg-txjcd.
EXIT.
ENDLOOP.
IF sy-subrc IS INITIAL.
ybseg-txgrp = taxgrp-txgrp.
MODIFY ybseg TRANSPORTING txgrp.
ENDIF.
ENDLOOP.

ENDFORM. " set_txgrp_not_linewise


*&---------------------------------------------------------------------*
*& Form set_txgrp_linewise
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_txgrp_linewise .

DATA: old_ebeln LIKE bseg-ebeln,


old_ebelp LIKE bseg-ebelp,
old_zekkn LIKE bseg-zekkn.
DATA: h_count TYPE i.

DATA: old_txgrp LIKE bset-txgrp.

DATA: e_exit.

LOOP AT ybseg WHERE mwart NE space


OR koart = 'D'
OR koart = 'K'.
IF NOT ybseg-txgrp IS INITIAL.
CLEAR ybseg-txgrp.
MODIFY ybseg.
xcorrupt = 'X'.
ENDIF.
ENDLOOP.

*-----------------------------------------------------------------------
READ TABLE xbkpf INDEX 1.
CLEAR old_txgrp.
REFRESH tb.

* set txgrp from xbset into ybseg


*---------------------------------
LOOP AT xbset.
CHECK old_txgrp NE xbset-txgrp.
old_txgrp = xbset-txgrp.

CLEAR: old_ebeln,
old_ebelp,
old_zekkn.

* first look for corresponding entry in bseg


* with the same txgrp
LOOP AT ybseg WHERE mwart = space
AND koart NE 'D'
AND koart NE 'K'
AND wrbtr NE 0
AND mwskz = xbset-mwskz
AND txjcd = xbset-txjdp
AND txgrp = xbset-txgrp.
* if found, then ok
* but count a line only one time
IF NOT old_ebeln IS INITIAL
AND NOT old_ebelp IS INITIAL
AND NOT old_zekkn IS INITIAL
AND ( old_ebeln NE ybseg-ebeln
OR old_ebelp NE ybseg-ebelp
OR old_zekkn NE ybseg-zekkn ).
EXIT.
ENDIF.
READ TABLE tb WITH KEY buzei = ybseg-buzei.
IF sy-subrc = 0.
CONTINUE.
ELSE.
old_ebeln = ybseg-ebeln.
old_ebelp = ybseg-ebelp.
old_zekkn = ybseg-zekkn.
tb-txgrp = xbset-txgrp.
tb-buzei = ybseg-buzei.
APPEND tb.
ENDIF.

IF NOT ( xbkpf-glvor = 'RMRP' AND xbkpf-awtyp = 'RMRP' ).


EXIT.
ENDIF.

ENDLOOP. "/ybseg
* if not found:
* look for corresponding entry in bseg
* without txgrp
IF sy-subrc NE 0.

LOOP AT ybseg WHERE mwart = space


AND koart NE 'D'
AND koart NE 'K'
AND wrbtr NE 0
AND mwskz = xbset-mwskz
AND txjcd = xbset-txjdp.
* if found, change a line only one time
READ TABLE tb WITH KEY buzei = ybseg-buzei.
IF sy-subrc = 0.
CONTINUE.
ELSE.
CLEAR e_exit.
PERFORM set_txgrp_bseg USING old_ebeln
old_ebelp
old_zekkn
e_exit.
* begin of September 21, 2005
old_ebeln = ybseg-ebeln.
old_ebelp = ybseg-ebelp.
old_zekkn = ybseg-zekkn.
* end of September 21, 2005

IF e_exit = space.
ELSE.
EXIT.
ENDIF.

ENDIF.
ENDLOOP. "/ybseg

ENDIF.
ENDLOOP. "/xbset

*-----------------------------------------------------------------------
* txgrp in ybseg exists in xbset ?
* this is a sane question although it looks strange
* their tax is then included in bset-txgrp = 001
* (or the lowest txgrp)

LOOP AT ybseg WHERE mwart = space


AND koart NE 'D'
AND koart NE 'K'
AND mwskz NE space
AND wrbtr NE 0.

READ TABLE xbset WITH KEY bukrs = ybseg-bukrs


mwskz = ybseg-mwskz
txjdp = ybseg-txjcd
txgrp = ybseg-txgrp.
IF sy-subrc NE 0.
READ TABLE xbset WITH KEY bukrs = ybseg-bukrs
mwskz = ybseg-mwskz
txjdp = ybseg-txjcd.
IF sy-subrc = 0.
* lowest existing txgrp
ybseg-txgrp = xbset-txgrp.
MODIFY ybseg.
xcorrupt = 'X'.
ENDIF.
ENDIF.
ENDLOOP.
ENDFORM. " set_txgrp_linewise
*&---------------------------------------------------------------------*
*& Form set_txgrp_bseg
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM set_txgrp_bseg USING old_ebeln
old_ebelp
old_zekkn
p_exit.

DATA: h_count TYPE i.

CLEAR p_exit.

* LIV: txgrp is set per PO item (only when there are lines with
* different KTOSL)
* only MIRO, MR8M etc from Fugr MR1M
IF xbkpf-glvor = 'RMRP'
AND xbkpf-awtyp = 'RMRP'.
* same tax group for all lines that belong to a PO item;
* different tax group for
* lines of a PO item when KTOSL is WRX
* or G/L line items without PO relation
* or freight line items (bseg-buzd = F)

IF ybseg-ktosl EQ 'WRX' "August 9, 2005


OR ybseg-buzid EQ 'F' "September 21, 2005
OR ( ybseg-ebeln IS INITIAL
AND ybseg-ebelp IS INITIAL ).

* begin of September 21, 2005


READ TABLE tb WITH KEY txgrp = xbset-txgrp.
IF sy-subrc = 0.
p_exit = 'X'. "no further bseg item with this txgrp
EXIT.
ENDIF.
* end of September 21, 2005
IF ybseg-txgrp NE xbset-txgrp.
ybseg-txgrp = xbset-txgrp.
MODIFY ybseg.
xcorrupt = 'X'.
ENDIF.
* save line item number
tb-txgrp = xbset-txgrp.
tb-buzei = ybseg-buzei.
APPEND tb.

EXIT.
ELSE. "August 9, 2005
* first call with ebeln, ebelp
IF old_ebeln IS INITIAL
AND old_ebelp IS INITIAL
AND NOT ybseg-ebeln IS INITIAL
AND NOT ybseg-ebelp IS INITIAL.
old_ebeln = ybseg-ebeln.
old_ebelp = ybseg-ebelp.
old_zekkn = ybseg-zekkn.
IF ybseg-txgrp NE xbset-txgrp.
ybseg-txgrp = xbset-txgrp.
MODIFY ybseg.
xcorrupt = 'X'.
ENDIF.
* save line item number
tb-txgrp = xbset-txgrp.
tb-buzei = ybseg-buzei.
APPEND tb.

EXIT.
ENDIF.

* second call
IF NOT old_ebeln IS INITIAL
AND NOT old_ebelp IS INITIAL.
* AND NOT ybseg-ebeln IS INITIAL "August 10, 2005
* AND NOT ybseg-ebelp IS INITIAL. "August 10, 2005
IF old_ebeln = ybseg-ebeln
AND old_ebelp = ybseg-ebelp
AND old_zekkn = ybseg-zekkn.
* with same ebeln, ebelp
* and zekkn initial
IF ybseg-txgrp NE xbset-txgrp.
ybseg-txgrp = xbset-txgrp.
MODIFY ybseg.
xcorrupt = 'X'.
ENDIF.
* save line item number
tb-txgrp = xbset-txgrp.
tb-buzei = ybseg-buzei.
APPEND tb.

EXIT.
ELSE.
* with different ebeln, ebelp or
* or same ebeln, ebelp, but different zekkn
* then no change and no further bseg item with this txgrp

p_exit = 'X'.
EXIT.
ENDIF.
ENDIF.

ENDIF. "August 9, 2005


ELSE.
IF ybseg-txgrp NE xbset-txgrp.
ybseg-txgrp = xbset-txgrp.
MODIFY ybseg.
xcorrupt = 'X'.
ENDIF.
* save line item number
tb-txgrp = xbset-txgrp.
tb-buzei = ybseg-buzei.
APPEND tb.

p_exit = 'X'. "no further bseg item with this txgrp


EXIT.

ENDIF.
ENDFORM. " set_txgrp_bseg
*&---------------------------------------------------------------------*
*& Form DELETE_MWSKZ_BSEG_RMRP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM delete_mwskz_bseg_rmrp .
* change in context of note 1692637
* there are line items in bseg that total up to 0
* and have therefore no BSET and should have therefore also no MWSKZ
* note 1692637 deletes mwskz in MRMP form accit_aufbauen

FIELD-SYMBOLS: <bseg> TYPE bseg,


<*bseg> TYPE bseg.
LOOP AT ybseg ASSIGNING <bseg>
WHERE mwart IS INITIAL
AND NOT mwskz IS INITIAL
AND NOT txjcd IS INITIAL.

LOOP AT ybseg ASSIGNING <*bseg>


WHERE mwart IS INITIAL
AND mwskz = <bseg>-mwskz
AND txjcd = <bseg>-txjcd
AND shkzg NE <bseg>-shkzg
AND buzei GT <bseg>-buzei
AND ebeln = <bseg>-ebeln
AND ebeln IS NOT INITIAL
AND ebelp = <bseg>-ebelp
AND ebelp IS NOT INITIAL
AND zekkn = <bseg>-zekkn
AND xref3 = <bseg>-xref3
AND wrbtr = <bseg>-wrbtr.
* these line items belong together and have no BSET
CLEAR: <bseg>-mwskz,
<bseg>-txjcd,
<*bseg>-mwskz,
<*bseg>-txjcd.
EXIT.

ENDLOOP.

ENDLOOP.

ENDFORM. " DELETE_MWSKZ_BSEG_RMRP


*&---------------------------------------------------------------------*
*& Form FI_TAX_SET_TXGRP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fi_tax_set_txgrp TABLES t_bkpf STRUCTURE bkpf
t_bseg STRUCTURE bseg.
*form new since "2012-03-30
*--------------------------------------------------------------------
* only the part for tax calculation line by line
* of function module FI_TAX_SET_TXGRP
*--------------------------------------------------------------------
DATA: xbukrs LIKE bkpf-bukrs,
htabix LIKE sy-tabix.
DATA: h_count TYPE i.
DATA: old_ebeln LIKE bseg-ebeln,
old_ebelp LIKE bseg-ebelp.
DATA: old_zekkn LIKE bseg-zekkn, "N887636
old_xref3 LIKE bseg-xref3. "N887636
DATA: old_buzid LIKE bseg-buzid. "N908364
DATA: l_rest TYPE txgrp. "N1464426
FIELD-SYMBOLS: <bseg> TYPE bseg,
<bseg_taxps> TYPE any.

READ TABLE t_bkpf INDEX 1.

* "tax calculation line by line


* begin of note 1692637
* count direct tax line items
h_count = 0.
LOOP AT t_bseg ASSIGNING <bseg>
WHERE NOT mwskz IS INITIAL
AND NOT mwart IS INITIAL
AND xauto IS INITIAL.
ADD 1 TO h_count.
<bseg>-txgrp = h_count.
ASSIGN COMPONENT 'TAXPS' OF STRUCTURE <bseg> TO <bseg_taxps>.
IF sy-subrc IS INITIAL.
<bseg_taxps> = h_count.
ENDIF.
ENDLOOP.

LOOP AT t_bseg ASSIGNING <bseg>


WHERE mwart = space
AND ( koart NE 'D' OR ktosl = 'BUV' ) "N823551
AND ( koart NE 'K' OR ktosl = 'BUV' ) "N823551
AND mwskz NE space
AND ( wrbtr NE 0 OR dmbtr NE 0 ). "N668768

* bseg-txgrp and bseg-taxps can be filled from accit-taxps "N1385914


h_count = h_count + 1. "N1385914

* LIV: txgrp is set per PO item (only when there are lines with
* different KTOSL)
* only MIRO, MR8M etc from Fugr MR1M N587975
IF t_bkpf-glvor = 'RMRP'
AND t_bkpf-awtyp = 'RMRP'. "N587975
h_count = h_count - 1. "N1692637
IF ( old_ebeln IS INITIAL AND old_ebelp IS INITIAL ) OR
* same tax group for all lines that belong to a PO item
* Begin of note 887636
* By change of PO with multi-accounting new taxgroup needed.
* ( old_ebeln NE t_bseg-ebeln OR old_ebelp NE t_bseg-ebelp ) OR
( old_ebeln NE <bseg>-ebeln OR
old_ebelp NE <bseg>-ebelp OR
old_xref3 NE <bseg>-xref3 OR
old_zekkn NE <bseg>-zekkn ) OR
* end of note 887636
* different tax group for lines of a PO item when KTOSL is WRX
<bseg>-ktosl EQ 'WRX' OR
* multi-accounting "N587975 "N887636
* t_bseg-zekkn GT '01' OR "N587975 "N887636
* freight line items "N881794
<bseg>-buzid = 'F' OR "N881794
* begin of note 908364
old_ebeln = <bseg>-ebeln AND NOT old_ebeln IS INITIAL AND
old_ebelp = <bseg>-ebelp AND NOT old_ebelp IS INITIAL AND
old_zekkn = <bseg>-zekkn AND NOT old_zekkn IS INITIAL AND
old_zekkn = '99' AND "2014-03-21
old_xref3 = <bseg>-xref3 AND
old_buzid = <bseg>-buzid OR
* end of note 908364
* G/L line items without invoice relation
( <bseg>-ebeln IS INITIAL AND <bseg>-ebelp IS INITIAL ).

h_count = h_count + 1.

old_ebeln = <bseg>-ebeln.
old_ebelp = <bseg>-ebelp.
old_zekkn = <bseg>-zekkn. "N887636
old_xref3 = <bseg>-xref3. "N887636
old_buzid = <bseg>-buzid. "N908364
ENDIF.
* ENDIF. "N587975
<bseg>-txgrp = h_count.
ELSE. "N587975
* t_bseg-txgrp = sy-tabix. "N587975 N1692637
<bseg>-txgrp = h_count. "N1692637
ENDIF. "N587975
* begin of note 1464426
* bseg-taxps was initial and will be set from txgrp
ASSIGN COMPONENT 'TAXPS' OF STRUCTURE <bseg> TO <bseg_taxps>.
IF sy-subrc IS INITIAL.
<bseg_taxps> = <bseg>-txgrp.
ENDIF.
* end of note 1464426
ENDLOOP. "at t_bseg

ENDFORM. " FI_TAX_SET_TXGRP

Vous aimerez peut-être aussi