Yozhhhhh написал:
То есть поставь B. Эту настройку надо трактовать не как "сделает система красное сторно или не сделает", а так: "сделает красное сторно, если есть такая потребность, или наоборот снимет, если исходный документ и так был с красным сторно". Это работает.
Ты уверен?
Code:
FORM xaccit_xnegp_set.
* negative posting for credit memos and cancellations
IF vbrk-vbtyp CA vbtyp_fakt_sto OR
vbrk-vbtyp CA vbtyp_fakt_gut.
CASE tvfk-xnegp.
* no negative posting
WHEN ' '.
CLEAR xaccit-xnegp.
* negative posting if reference invoice belongs to the same posting
* period
WHEN 'A'.
* translate invoice date to posting period
PERFORM read_fi_periode_invoicedate.
READ TABLE xvbrp WITH KEY xvbrp_key BINARY SEARCH.
CLEAR loc_bkpf.
IF sy-subrc EQ 0.
CALL FUNCTION 'SD_DETERMINE_ACCOUNT_INVOICE'
EXPORTING
loc_vbrp = xvbrp
loc_vbrk = vbrk
IMPORTING
loc_bkpf = loc_bkpf
EXCEPTIONS
OTHERS = 0.
IF loc_bkpf-monat EQ fi_periode-monat.
xaccit-xnegp = 'X'.
ELSE.
CLEAR xaccit-xnegp.
ENDIF.
ENDIF.
* always negative posting
WHEN 'B'.
xaccit-xnegp = 'X'.
* negative posting from reversal reason on VF11
WHEN 'C'.
CLEAR xaccit-xnegp.
IF NOT vbrk-stgrd IS INITIAL.
DATA: l_xnegp TYPE t041c-xnegp.
" detect negative posting flag from T041C
SELECT SINGLE xnegp FROM t041c
INTO l_xnegp
WHERE stgrd = vbrk-stgrd.
IF sy-subrc IS INITIAL.
" fill stgrd and xnegp
xaccit-stgrd = vbrk-stgrd.
xaccit-xnegp = l_xnegp.
ENDIF.
ENDIF.
ENDCASE.
ENDIF.
ENDFORM. "xaccit_xnegp_set