FUNCTION ZFI_VENDOR_CHANGE.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" VALUE(IS_LFA1) LIKE LFA1 STRUCTURE LFA1
*" VALUE(IS_LFB1) LIKE LFB1 STRUCTURE LFB1
*" VALUE(IS_ADRC) LIKE ADRC STRUCTURE ADRC OPTIONAL
*" VALUE(IV_LAISO) TYPE LAISO OPTIONAL
*" VALUE(IV_EMAIL) TYPE AD_SMTPADR OPTIONAL
*" VALUE(IV_REMARK) TYPE AD_REMARK1 OPTIONAL
*" VALUE(IV_MODE) TYPE CTU_MODE DEFAULT 'N'
*" EXPORTING
*" VALUE(EV_LIFNR) TYPE LIFNR
*" VALUE(EV_MSGTY) TYPE MSGTY
*" VALUE(EV_MSGTX) TYPE MSGTX
*"----------------------------------------------------------------------
DATA LV_EXIST TYPE C.
CLEAR IT_BDCTAB. REFRESH IT_BDCTAB.
CLEAR IT_BDCMSG. REFRESH IT_BDCMSG.
IF IS_LFA1-LAND1 IS INITIAL.
IS_LFA1-LAND1 = 'KR'.
ENDIF.
IF IS_LFA1-PSTLZ IS INITIAL.
IS_LFA1-PSTLZ = '00000'.
ENDIF.
IF IS_LFA1-ORT01 IS INITIAL.
IS_LFA1-ORT01 = '.'.
ENDIF.
IF IS_LFA1-STRAS IS INITIAL.
IS_LFA1-STRAS = '.'.
ENDIF.
IF IS_LFA1-SORTL IS INITIAL.
IS_LFA1-SORTL = IS_LFA1-NAME1.
ENDIF.
IF IS_LFB1-GUZTE IS INITIAL.
IS_LFB1-GUZTE = IS_LFB1-ZTERM.
ENDIF.
*-- 법인카드 거래처(C or D *****)는 지급조건 등을 고정함(업데이트 X)
IF IS_LFA1-LIFNR+0(1) = 'C'.
IF IS_LFB1-ZTERM+0(2) <> 'CA'.
IS_LFB1-ZTERM = 'CA23'.
IS_LFB1-GUZTE = IS_LFB1-ZTERM.
ENDIF.
IF IS_LFB1-AKONT <> '0000212130'.
IS_LFB1-AKONT = '0000212130'.
ENDIF.
IF IS_LFB1-FDGRV <> 'VC'.
IS_LFB1-AKONT = 'VC'.
ENDIF.
ELSEIF IS_LFA1-LIFNR+0(1) = 'D'.
IF IS_LFB1-ZTERM+0(2) <> 'CA'.
IS_LFB1-ZTERM = 'CA22'.
IS_LFB1-GUZTE = IS_LFB1-ZTERM.
ENDIF.
IF IS_LFB1-AKONT <> '0000212140'.
IS_LFB1-AKONT = '0000212140'.
ENDIF.
IF IS_LFB1-FDGRV <> 'VD'.
IS_LFB1-AKONT = 'VD'.
ENDIF.
ENDIF.
SET PARAMETER ID 'BPA' FIELD ' '.
SET PARAMETER ID 'BUK' FIELD IS_LFB1-BUKRS.
IF IV_LAISO IS INITIAL.
IF IS_LFA1-SPRAS IS NOT INITIAL.
SELECT SINGLE LAISO INTO IV_LAISO
FROM T002
WHERE SPRAS = IS_LFA1-SPRAS.
ELSE.
SELECT SINGLE LAISO INTO IV_LAISO
FROM T002
WHERE SPRAS = SY-LANGU.
ENDIF.
ENDIF.
SELECT SINGLE MANDT INTO SY-MANDT
FROM LFB1
WHERE LIFNR = IS_LFB1-LIFNR
AND BUKRS = IS_LFB1-BUKRS.
IF SY-SUBRC EQ 0.
LV_EXIST = 'X'.
ENDIF.
**<<BP 수정 수정모드->조회모드
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1000_SETTINGS'.
PERFORM DYNPRO USING:
'X' 'SAPLBUPA_DIALOG_SETTINGS' '4000',
' ' 'BDC_OKCODE' '=BUS_MAIN_ENTER',
' ' 'BUS_JOEL_SET-BUPA_DISPLAY_MODE' 'X'.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1000_MAIN_NOT'.
**>>BP 수정 모드->조회모드
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_ENTER',
' ' 'BUS_JOEL_MAIN-CHANGE_NUMBER' IS_LFA1-LIFNR,
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BUS_JOEL_MAIN-PARTNER_ROLE' 'FLVN00',
' ' 'BDC_OKCODE' '=SCREEN_1000_ACTIVITY'.
**>>관계화면에서 일반화면
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1000_MAIN_REL',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P01'.
**<<관계화면에서 일반화면
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BUS_JOEL_MAIN-PARTNER_ROLE' 'FLVN00',
' ' 'BDC_OKCODE' '=SCREEN_1110_CHG_ROLE'.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_01',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_03',
' ' 'BUT000-NAME_ORG1' IS_LFA1-NAME1,
' ' 'BUT000-NAME_ORG2' IS_LFA1-NAME2,
' ' 'BUT000-NAME_ORG3' IS_LFA1-NAME3,
' ' 'BUT000-NAME_ORG4' IS_LFA1-NAME4,
' ' 'BUS000FLDS-BU_SORT1_TXT' IS_LFA1-SORTL,
' ' 'BUS000FLDS-BU_SORT2_TXT' IS_ADRC-SORT2,
' ' 'ADDR1_DATA-STREET' IS_LFA1-STRAS,
' ' 'ADDR1_DATA-POST_CODE1' IS_LFA1-PSTLZ,
' ' 'ADDR1_DATA-CITY1' IS_LFA1-ORT01,
' ' 'ADDR1_DATA-COUNTRY' IS_LFA1-LAND1,
' ' 'ADDR1_DATA-REGION' IS_LFA1-REGIO,
' ' 'ADDR1_DATA-LANGU' IV_LAISO,
' ' 'SZA1_D0100-TEL_NUMBER' IS_LFA1-TELF1,
' ' 'SZA1_D0100-MOB_NUMBER' IS_LFA1-TELF2,
' ' 'SZA1_D0100-FAX_NUMBER' IS_LFA1-TELFX.
IF IV_EMAIL IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'SZA1_D0100-SMTP_ADDR' IV_EMAIL.
ENDIF.
IF IV_REMARK IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'ADDR1_DATA-REMARK' IV_REMARK.
ENDIF.
**<< ID
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_ENTER'.
IF IS_LFA1-STCD2 IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(01)' 'KR2',
' ' 'DFKKBPTAXNUM-TAXNUMXL(01)' IS_LFA1-STCD2.
ENDIF.
IF IS_LFA1-STCD1 IS NOT INITIAL.
IF IS_LFA1-STCD2 IS INITIAL.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(01)' 'KR1',
' ' 'DFKKBPTAXNUM-TAXNUMXL(01)' IS_LFA1-STCD1.
ELSE.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(02)' 'KR1',
' ' 'DFKKBPTAXNUM-TAXNUMXL(02)' IS_LFA1-STCD1.
ENDIF.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_08'.
**>> ID
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_09',
' ' 'GS_LFA1-LNRZA' IS_LFA1-LNRZA,
' ' 'GS_LFA1-PROFS' IS_LFA1-PROFS.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'GS_LFA1-KRAUS' IS_LFA1-KRAUS,
' ' 'GS_LFA1-J_1KFTBUS' IS_LFA1-J_1KFTBUS,
' ' 'GS_LFA1-J_1KFTIND' IS_LFA1-J_1KFTIND,
' ' 'GS_LFA1-J_1KFREPRE' IS_LFA1-J_1KFREPRE.
IF IS_LFB1-BUKRS IS INITIAL.
PERFORM DYNPRO USING:
' ' 'BDC_OKCODE' '=BUS_MAIN_SAVE'.
ELSE.
PERFORM DYNPRO USING:
' ' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P02',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_01'.
IF LV_EXIST IS INITIAL.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' 'FSBP_CC_SWITCH'.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BS001-BUKRS' IS_LFB1-BUKRS,
' ' 'BDC_OKCODE' '=ENTER'.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_02',
' ' 'GS_LFB1-AKONT' IS_LFB1-AKONT,
' ' 'GS_LFB1-ZUAWA' IS_LFB1-ZUAWA,
' ' 'GS_LFB1-FDGRV' IS_LFB1-FDGRV.
IF IS_LFB1-PERNR IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'GS_LFB1_DYNP-PERNR' IS_LFB1-PERNR.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_03',
' ' 'GS_LFB1-ZTERM' IS_LFB1-ZTERM,
' ' 'GS_LFB1-GUZTE' IS_LFB1-GUZTE,
' ' 'GS_LFB1-REPRF' IS_LFB1-REPRF,
' ' 'GS_LFB1-XPORE' IS_LFB1-XPORE,
' ' 'GS_LFB1-ZWELS' IS_LFB1-ZWELS,
' ' 'GS_LFB1-HBKID' IS_LFB1-HBKID,
' ' 'GS_LFB1-ZAHLS' IS_LFB1-ZAHLS,
' ' 'GS_LFB1-ZGRUP' IS_LFB1-ZGRUP,
' ' 'GS_LFB1-LNRZB' IS_LFB1-LNRZB.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_SAVE',
' ' 'GS_LFB1-BUSAB' IS_LFB1-BUSAB.
ENDIF.
CALL TRANSACTION 'BP' USING IT_BDCTAB
MODE IV_MODE
UPDATE 'S'
MESSAGES INTO IT_BDCMSG.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '215'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '214'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '244'. "역할생성
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '202'. "변경없음
ENDIF.
ENDIF.
ENDIF.
IF SY-SUBRC EQ 0.
EV_MSGTY = 'S'.
EV_MSGTX = 'Success'.
EV_LIFNR = IT_BDCMSG-MSGV1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = EV_LIFNR
IMPORTING
OUTPUT = EV_LIFNR.
ELSE.
EV_MSGTY = 'E'.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'E'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGID = 'ZFI'.
IF SY-SUBRC NE 0.
LOOP AT IT_BDCMSG.
ENDLOOP.
ENDIF.
ENDIF.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = IT_BDCMSG-MSGID
MSGNR = IT_BDCMSG-MSGNR
MSGV1 = IT_BDCMSG-MSGV1
MSGV2 = IT_BDCMSG-MSGV2
MSGV3 = IT_BDCMSG-MSGV3
MSGV4 = IT_BDCMSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = EV_MSGTX.
ENDIF.
ENDFUNCTION.
*----------------------------------------------------------------------*
***INCLUDE LZFI33F01.
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form dynpro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0539 text
* -->P_0540 text
* -->P_0541 text
*----------------------------------------------------------------------*
FORM dynpro USING begin fnam fval.
CLEAR it_bdctab.
IF begin = ' '.
it_bdctab-fnam = fnam.
it_bdctab-fval = fval.
APPEND it_bdctab.
ELSE.
it_bdctab-program = fnam.
it_bdctab-dynpro = fval.
it_bdctab-dynbegin = 'X'.
APPEND it_bdctab.
ENDIF.
ENDFORM. " dynpro
2018년 10월 24일 수요일
엑셀업로드
*&---------------------------------------------------------------------*
*& Report ZEV_UPLOAD
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zev_upload MESSAGE-ID zfi.
TYPE-POOLS truxs.
SELECTION-SCREEN: BEGIN OF BLOCK a WITH FRAME TITLE TEXT-001.
PARAMETER: p_table LIKE dd02l-tabname,
p_file LIKE rlgrap-filename. " DEFAULT 'c:\temp\zcvaa.csv'.
SELECTION-SCREEN: END OF BLOCK a.
DATA: it_tab TYPE REF TO data.
DATA: gt_table TYPE REF TO cl_salv_table.
IF p_table+0(1) NE 'Z'.
MESSAGE s000 WITH 'CBO테이블만 가능합니다' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
CREATE DATA it_tab TYPE TABLE OF (p_table).
FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE.
ASSIGN it_tab->* TO <fs_tab>.
DATA: it_type TYPE truxs_t_text_data.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
IF p_table+0(1) NE 'Z'.
MESSAGE e000 WITH 'CBO테이블만 가능합니다'.
EXIT.
ENDIF.
* uploading the data in the file into internal table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_type
i_filename = p_file
TABLES
i_tab_converted_data = <fs_tab>
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
END-OF-SELECTION.
MODIFY (p_table) FROM TABLE <fs_tab>.
DESCRIBE TABLE <fs_tab> LINES DATA(dcr).
WRITE: dcr, 'lines got updated in table', p_table.
*& Report ZEV_UPLOAD
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zev_upload MESSAGE-ID zfi.
TYPE-POOLS truxs.
SELECTION-SCREEN: BEGIN OF BLOCK a WITH FRAME TITLE TEXT-001.
PARAMETER: p_table LIKE dd02l-tabname,
p_file LIKE rlgrap-filename. " DEFAULT 'c:\temp\zcvaa.csv'.
SELECTION-SCREEN: END OF BLOCK a.
DATA: it_tab TYPE REF TO data.
DATA: gt_table TYPE REF TO cl_salv_table.
IF p_table+0(1) NE 'Z'.
MESSAGE s000 WITH 'CBO테이블만 가능합니다' DISPLAY LIKE 'E'.
EXIT.
ENDIF.
CREATE DATA it_tab TYPE TABLE OF (p_table).
FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE.
ASSIGN it_tab->* TO <fs_tab>.
DATA: it_type TYPE truxs_t_text_data.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
field_name = 'P_FILE'
IMPORTING
file_name = p_file.
START-OF-SELECTION.
IF p_table+0(1) NE 'Z'.
MESSAGE e000 WITH 'CBO테이블만 가능합니다'.
EXIT.
ENDIF.
* uploading the data in the file into internal table
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
* I_FIELD_SEPERATOR =
i_line_header = 'X'
i_tab_raw_data = it_type
i_filename = p_file
TABLES
i_tab_converted_data = <fs_tab>
EXCEPTIONS
conversion_failed = 1
OTHERS = 2.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid
TYPE sy-msgty
NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
END-OF-SELECTION.
MODIFY (p_table) FROM TABLE <fs_tab>.
DESCRIBE TABLE <fs_tab> LINES DATA(dcr).
WRITE: dcr, 'lines got updated in table', p_table.
지급보류해제
DATA : it_errtab TYPE tpit_t_errdoc WITH HEADER LINE,
it_fldtab TYPE tpit_t_fname WITH HEADER LINE,
it_buztab TYPE tpit_t_buztab WITH HEADER LINE.
* 확정전표확인
CLEAR ls_bkpf.
SELECT SINGLE *
INTO ls_bkpf
FROM bkpf
WHERE bukrs = bukrs
AND belnr = belnr
CHECK ls_bkpf-bstat EQ space.
CALL FUNCTION 'DEQUEUE_EFBKPF'
EXPORTING
belnr = ls_bkpf-belnr
bukrs = ls_bkpf-bukrs
gjahr = ls_bkpf-gjahr.
* Field name to be changed
FREE : it_buztab, it_errtab, it_fldtab.
it_fldtab-fname = 'ZLSPR'.
APPEND it_fldtab. CLEAR it_fldtab.
* Field value
CLEAR w_bseg.
w_bseg-zlspr = space.
* ITEM
SELECT bukrs
belnr
gjahr
buzei
koart
umskz
bschl
mwart
mwskz
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE it_buztab
WHERE bukrs EQ ls_bkpf-bukrs
AND belnr EQ ls_bkpf-belnr
AND gjahr EQ ls_bkpf-gjahr
AND koart EQ 'K'
AND zlspr EQ 'R'
AND augbl EQ space.
IF it_buztab[] IS NOT INITIAL.
CALL FUNCTION 'FI_ITEMS_MASS_CHANGE'
EXPORTING
s_bseg = w_bseg
IMPORTING
errtab = it_errtab[]
TABLES
it_buztab = it_buztab
it_fldtab = it_fldtab
EXCEPTIONS
bdc_errors = 1
OTHERS = 2.
ENDIF.
IF it_errtab[] IS INITIAL.
성공
ELSE.
CLEAR lv_flag.
LOOP AT it_errtab.
IF it_errtab-err-msgtyp EQ 'E'.
lv_flag = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF lv_flag EQ 'X'.
에러
ELSE.
성공
ENDIF.
ENDIF.
임시전표일 경우 해당BAPI 나 함수를 찾지 못함.
it_fldtab TYPE tpit_t_fname WITH HEADER LINE,
it_buztab TYPE tpit_t_buztab WITH HEADER LINE.
* 확정전표확인
CLEAR ls_bkpf.
SELECT SINGLE *
INTO ls_bkpf
FROM bkpf
WHERE bukrs = bukrs
AND belnr = belnr
CHECK ls_bkpf-bstat EQ space.
CALL FUNCTION 'DEQUEUE_EFBKPF'
EXPORTING
belnr = ls_bkpf-belnr
bukrs = ls_bkpf-bukrs
gjahr = ls_bkpf-gjahr.
* Field name to be changed
FREE : it_buztab, it_errtab, it_fldtab.
it_fldtab-fname = 'ZLSPR'.
APPEND it_fldtab. CLEAR it_fldtab.
* Field value
CLEAR w_bseg.
w_bseg-zlspr = space.
* ITEM
SELECT bukrs
belnr
gjahr
buzei
koart
umskz
bschl
mwart
mwskz
FROM bseg
INTO CORRESPONDING FIELDS OF TABLE it_buztab
WHERE bukrs EQ ls_bkpf-bukrs
AND belnr EQ ls_bkpf-belnr
AND gjahr EQ ls_bkpf-gjahr
AND koart EQ 'K'
AND zlspr EQ 'R'
AND augbl EQ space.
IF it_buztab[] IS NOT INITIAL.
CALL FUNCTION 'FI_ITEMS_MASS_CHANGE'
EXPORTING
s_bseg = w_bseg
IMPORTING
errtab = it_errtab[]
TABLES
it_buztab = it_buztab
it_fldtab = it_fldtab
EXCEPTIONS
bdc_errors = 1
OTHERS = 2.
ENDIF.
IF it_errtab[] IS INITIAL.
성공
ELSE.
CLEAR lv_flag.
LOOP AT it_errtab.
IF it_errtab-err-msgtyp EQ 'E'.
lv_flag = 'X'.
EXIT.
ENDIF.
ENDLOOP.
IF lv_flag EQ 'X'.
에러
ELSE.
성공
ENDIF.
ENDIF.
임시전표일 경우 해당BAPI 나 함수를 찾지 못함.
2018년 10월 1일 월요일
BP 생성 BDC
ZFI_VENDOR_CREATE
DATA : ls_lfa1 LIKE lfa1.
DATA : ls_lfb1 LIKE lfb1.
DATA : lv_lifnr TYPE lifnr,
lv_msgty TYPE msgty,
lv_msgtx TYPE msgtx.
CLEAR : ls_lfa1, ls_lfb1.
ls_lfa1-ktokk = 'XXXX'.
ls_lfa1-name1 = 이름
ls_lfa1-telf1 = 전화번호
ls_lfa1-land1 = 'KR'.
ls_lfa1-ort01 = 주소
ls_lfa1-stras = 주소
ls_lfa1-stcd2 = 사업자번호
ls_lfa1-j_1kfrepre = 가맹점주명
ls_lfa1-j_1kftbus = 업종
ls_lfb1-akont = 총계정원장의 조정 계정
ls_lfb1-zterm = 'C001'.
ls_lfb1-bukrs = '1000'.
ls_lfb1-guzte = 'C001'.
ls_lfb1-fdgrv = 'VJ'.
CALL FUNCTION 'ZFI_VENDOR_CREATE'
EXPORTING
is_lfa1 = ls_lfa1
is_lfb1 = ls_lfb1
iv_laiso = 'KO'
IMPORTING
ev_lifnr = lv_lifnr
ev_msgty = lv_msgty
ev_msgtx = lv_msgtx.
* 함수코딩
CLEAR IT_BDCTAB. REFRESH IT_BDCTAB.
CLEAR IT_BDCMSG. REFRESH IT_BDCMSG.
IF IS_LFA1-LAND1 IS INITIAL.
IS_LFA1-LAND1 = 'KR'.
ENDIF.
IF IS_LFA1-PSTLZ IS INITIAL.
IS_LFA1-PSTLZ = '00000'.
ENDIF.
IF IS_LFA1-ORT01 IS INITIAL.
IS_LFA1-ORT01 = '.'.
ENDIF.
IF IS_LFA1-STRAS IS INITIAL.
IS_LFA1-STRAS = '.'.
ENDIF.
IF IS_LFA1-SORTL IS INITIAL.
IS_LFA1-SORTL = IS_LFA1-NAME1.
ENDIF.
IF IS_LFB1-GUZTE IS INITIAL.
IS_LFB1-GUZTE = IS_LFB1-ZTERM.
ENDIF.
IF IV_LAISO IS INITIAL.
SELECT SINGLE LAISO INTO IV_LAISO
FROM T002
WHERE SPRAS = SY-LANGU.
ENDIF.
SET PARAMETER ID 'BUK' FIELD IS_LFB1-BUKRS.
SET PARAMETER ID 'BPA' FIELD ' '.
SET PARAMETER ID 'LND' FIELD IS_LFA1-LAND1.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1000_CRE_ORGA',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1110_CHG_ROLE',
' ' 'BUS_JOEL_MAIN-CREATION_NUMBER' IS_LFA1-LIFNR,
' ' 'BUS_JOEL_MAIN-CREATION_GROUP' IS_LFA1-KTOKK,
' ' 'BUS_JOEL_MAIN-PARTNER_ROLE' 'FLVN00',
' ' 'ADDR1_DATA-COUNTRY' IS_LFA1-LAND1,
' ' 'BUT000-NAME_ORG1' IS_LFA1-NAME1.
PERFORM DYNPRO USING:
'X' 'SAPLSPO1' '0600',
' ' 'BDC_OKCODE' '=OPT1'.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_01',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_03',
' ' 'BUT000-NAME_ORG1' IS_LFA1-NAME1,
' ' 'BUT000-NAME_ORG2' IS_LFA1-NAME2,
' ' 'BUT000-NAME_ORG3' IS_LFA1-NAME3,
' ' 'BUT000-NAME_ORG4' IS_LFA1-NAME4,
' ' 'BUS000FLDS-BU_SORT1_TXT' IS_LFA1-SORTL,
' ' 'BUS000FLDS-BU_SORT2_TXT' IS_ADRC-SORT2,
' ' 'ADDR1_DATA-STREET' IS_LFA1-STRAS,
' ' 'ADDR1_DATA-POST_CODE1' IS_LFA1-PSTLZ,
' ' 'ADDR1_DATA-CITY1' IS_LFA1-ORT01,
' ' 'ADDR1_DATA-COUNTRY' IS_LFA1-LAND1,
' ' 'ADDR1_DATA-REGION' IS_LFA1-REGIO,
' ' 'ADDR1_DATA-LANGU' IV_LAISO,
' ' 'ADDR1_DATA-REMARK' IV_REMARK,
' ' 'SZA1_D0100-TEL_NUMBER' IS_LFA1-TELF1,
' ' 'SZA1_D0100-MOB_NUMBER' IS_LFA1-TELF2,
' ' 'SZA1_D0100-FAX_NUMBER' IS_LFA1-TELFX,
' ' 'SZA1_D0100-SMTP_ADDR' IV_EMAIL.
**<< ID
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_ENTER'.
IF IS_LFA1-STCD2 IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(01)' 'KR2',
' ' 'DFKKBPTAXNUM-TAXNUMXL(01)' IS_LFA1-STCD2.
ENDIF.
IF IS_LFA1-STCD1 IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(02)' 'KR1',
' ' 'DFKKBPTAXNUM-TAXNUMXL(02)' IS_LFA1-STCD1.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_08'.
**>> ID
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_09',
' ' 'GS_LFA1-LNRZA' IS_LFA1-LNRZA,
' ' 'GS_LFA1-PROFS' IS_LFA1-PROFS.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'GS_LFA1-KRAUS' IS_LFA1-KRAUS,
' ' 'GS_LFA1-J_1KFTBUS' IS_LFA1-J_1KFTBUS,
' ' 'GS_LFA1-J_1KFTIND' IS_LFA1-J_1KFTIND,
' ' 'GS_LFA1-J_1KFREPRE' IS_LFA1-J_1KFREPRE.
IF IS_LFB1-BUKRS IS INITIAL.
PERFORM DYNPRO USING:
' ' 'BDC_OKCODE' '=BUS_MAIN_SAVE'.
ELSE.
PERFORM DYNPRO USING:
' ' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P02',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_01',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_02',
' ' 'GS_LFB1-AKONT' IS_LFB1-AKONT,
' ' 'GS_LFB1-ZUAWA' IS_LFB1-ZUAWA,
' ' 'GS_LFB1-FDGRV' IS_LFB1-FDGRV.
IF IS_LFB1-PERNR IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'GS_LFB1_DYNP-PERNR' IS_LFB1-PERNR.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_03',
' ' 'GS_LFB1-ZTERM' IS_LFB1-ZTERM,
' ' 'GS_LFB1-GUZTE' IS_LFB1-GUZTE,
' ' 'GS_LFB1-REPRF' IS_LFB1-REPRF,
' ' 'GS_LFB1-XPORE' IS_LFB1-XPORE,
' ' 'GS_LFB1-ZWELS' IS_LFB1-ZWELS,
' ' 'GS_LFB1-HBKID' IS_LFB1-HBKID,
' ' 'GS_LFB1-ZAHLS' IS_LFB1-ZAHLS,
' ' 'GS_LFB1-ZGRUP' IS_LFB1-ZGRUP,
' ' 'GS_LFB1-LNRZB' IS_LFB1-LNRZB.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_SAVE',
' ' 'GS_LFB1-BUSAB' IS_LFB1-BUSAB.
ENDIF.
CALL TRANSACTION 'BP' USING IT_BDCTAB
MODE IV_MODE
UPDATE 'S'
MESSAGES INTO IT_BDCMSG.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '214'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '215'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '244'. "역할생성
ENDIF.
ENDIF.
IF SY-SUBRC EQ 0.
EV_MSGTY = 'S'.
EV_MSGTX = 'Success'.
EV_LIFNR = IT_BDCMSG-MSGV1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = EV_LIFNR
IMPORTING
OUTPUT = EV_LIFNR.
ELSE.
EV_MSGTY = 'E'.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'E'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGID = 'ZFI'.
IF SY-SUBRC NE 0.
LOOP AT IT_BDCMSG.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = IT_BDCMSG-MSGID
MSGNR = IT_BDCMSG-MSGNR
MSGV1 = IT_BDCMSG-MSGV1
MSGV2 = IT_BDCMSG-MSGV2
MSGV3 = IT_BDCMSG-MSGV3
MSGV4 = IT_BDCMSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = EV_MSGTX.
WRITE / EV_MSGTX.
ENDLOOP.
ENDIF.
ENDIF.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = IT_BDCMSG-MSGID
MSGNR = IT_BDCMSG-MSGNR
MSGV1 = IT_BDCMSG-MSGV1
MSGV2 = IT_BDCMSG-MSGV2
MSGV3 = IT_BDCMSG-MSGV3
MSGV4 = IT_BDCMSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = EV_MSGTX.
ENDIF.
DATA : ls_lfa1 LIKE lfa1.
DATA : ls_lfb1 LIKE lfb1.
DATA : lv_lifnr TYPE lifnr,
lv_msgty TYPE msgty,
lv_msgtx TYPE msgtx.
CLEAR : ls_lfa1, ls_lfb1.
ls_lfa1-ktokk = 'XXXX'.
ls_lfa1-name1 = 이름
ls_lfa1-telf1 = 전화번호
ls_lfa1-land1 = 'KR'.
ls_lfa1-ort01 = 주소
ls_lfa1-stras = 주소
ls_lfa1-stcd2 = 사업자번호
ls_lfa1-j_1kfrepre = 가맹점주명
ls_lfa1-j_1kftbus = 업종
ls_lfb1-akont = 총계정원장의 조정 계정
ls_lfb1-zterm = 'C001'.
ls_lfb1-bukrs = '1000'.
ls_lfb1-guzte = 'C001'.
ls_lfb1-fdgrv = 'VJ'.
CALL FUNCTION 'ZFI_VENDOR_CREATE'
EXPORTING
is_lfa1 = ls_lfa1
is_lfb1 = ls_lfb1
iv_laiso = 'KO'
IMPORTING
ev_lifnr = lv_lifnr
ev_msgty = lv_msgty
ev_msgtx = lv_msgtx.
* 함수코딩
CLEAR IT_BDCTAB. REFRESH IT_BDCTAB.
CLEAR IT_BDCMSG. REFRESH IT_BDCMSG.
IF IS_LFA1-LAND1 IS INITIAL.
IS_LFA1-LAND1 = 'KR'.
ENDIF.
IF IS_LFA1-PSTLZ IS INITIAL.
IS_LFA1-PSTLZ = '00000'.
ENDIF.
IF IS_LFA1-ORT01 IS INITIAL.
IS_LFA1-ORT01 = '.'.
ENDIF.
IF IS_LFA1-STRAS IS INITIAL.
IS_LFA1-STRAS = '.'.
ENDIF.
IF IS_LFA1-SORTL IS INITIAL.
IS_LFA1-SORTL = IS_LFA1-NAME1.
ENDIF.
IF IS_LFB1-GUZTE IS INITIAL.
IS_LFB1-GUZTE = IS_LFB1-ZTERM.
ENDIF.
IF IV_LAISO IS INITIAL.
SELECT SINGLE LAISO INTO IV_LAISO
FROM T002
WHERE SPRAS = SY-LANGU.
ENDIF.
SET PARAMETER ID 'BUK' FIELD IS_LFB1-BUKRS.
SET PARAMETER ID 'BPA' FIELD ' '.
SET PARAMETER ID 'LND' FIELD IS_LFA1-LAND1.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1000_CRE_ORGA',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1110_CHG_ROLE',
' ' 'BUS_JOEL_MAIN-CREATION_NUMBER' IS_LFA1-LIFNR,
' ' 'BUS_JOEL_MAIN-CREATION_GROUP' IS_LFA1-KTOKK,
' ' 'BUS_JOEL_MAIN-PARTNER_ROLE' 'FLVN00',
' ' 'ADDR1_DATA-COUNTRY' IS_LFA1-LAND1,
' ' 'BUT000-NAME_ORG1' IS_LFA1-NAME1.
PERFORM DYNPRO USING:
'X' 'SAPLSPO1' '0600',
' ' 'BDC_OKCODE' '=OPT1'.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_01',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_03',
' ' 'BUT000-NAME_ORG1' IS_LFA1-NAME1,
' ' 'BUT000-NAME_ORG2' IS_LFA1-NAME2,
' ' 'BUT000-NAME_ORG3' IS_LFA1-NAME3,
' ' 'BUT000-NAME_ORG4' IS_LFA1-NAME4,
' ' 'BUS000FLDS-BU_SORT1_TXT' IS_LFA1-SORTL,
' ' 'BUS000FLDS-BU_SORT2_TXT' IS_ADRC-SORT2,
' ' 'ADDR1_DATA-STREET' IS_LFA1-STRAS,
' ' 'ADDR1_DATA-POST_CODE1' IS_LFA1-PSTLZ,
' ' 'ADDR1_DATA-CITY1' IS_LFA1-ORT01,
' ' 'ADDR1_DATA-COUNTRY' IS_LFA1-LAND1,
' ' 'ADDR1_DATA-REGION' IS_LFA1-REGIO,
' ' 'ADDR1_DATA-LANGU' IV_LAISO,
' ' 'ADDR1_DATA-REMARK' IV_REMARK,
' ' 'SZA1_D0100-TEL_NUMBER' IS_LFA1-TELF1,
' ' 'SZA1_D0100-MOB_NUMBER' IS_LFA1-TELF2,
' ' 'SZA1_D0100-FAX_NUMBER' IS_LFA1-TELFX,
' ' 'SZA1_D0100-SMTP_ADDR' IV_EMAIL.
**<< ID
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_ENTER'.
IF IS_LFA1-STCD2 IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(01)' 'KR2',
' ' 'DFKKBPTAXNUM-TAXNUMXL(01)' IS_LFA1-STCD2.
ENDIF.
IF IS_LFA1-STCD1 IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'DFKKBPTAXNUM-TAXTYPE(02)' 'KR1',
' ' 'DFKKBPTAXNUM-TAXNUMXL(02)' IS_LFA1-STCD1.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_08'.
**>> ID
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_09',
' ' 'GS_LFA1-LNRZA' IS_LFA1-LNRZA,
' ' 'GS_LFA1-PROFS' IS_LFA1-PROFS.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'GS_LFA1-KRAUS' IS_LFA1-KRAUS,
' ' 'GS_LFA1-J_1KFTBUS' IS_LFA1-J_1KFTBUS,
' ' 'GS_LFA1-J_1KFTIND' IS_LFA1-J_1KFTIND,
' ' 'GS_LFA1-J_1KFREPRE' IS_LFA1-J_1KFREPRE.
IF IS_LFB1-BUKRS IS INITIAL.
PERFORM DYNPRO USING:
' ' 'BDC_OKCODE' '=BUS_MAIN_SAVE'.
ELSE.
PERFORM DYNPRO USING:
' ' 'BDC_OKCODE' '=SCREEN_1000_MAIN_P02',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_01',
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_02',
' ' 'GS_LFB1-AKONT' IS_LFB1-AKONT,
' ' 'GS_LFB1-ZUAWA' IS_LFB1-ZUAWA,
' ' 'GS_LFB1-FDGRV' IS_LFB1-FDGRV.
IF IS_LFB1-PERNR IS NOT INITIAL.
PERFORM DYNPRO USING:
' ' 'GS_LFB1_DYNP-PERNR' IS_LFB1-PERNR.
ENDIF.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=SCREEN_1100_TAB_03',
' ' 'GS_LFB1-ZTERM' IS_LFB1-ZTERM,
' ' 'GS_LFB1-GUZTE' IS_LFB1-GUZTE,
' ' 'GS_LFB1-REPRF' IS_LFB1-REPRF,
' ' 'GS_LFB1-XPORE' IS_LFB1-XPORE,
' ' 'GS_LFB1-ZWELS' IS_LFB1-ZWELS,
' ' 'GS_LFB1-HBKID' IS_LFB1-HBKID,
' ' 'GS_LFB1-ZAHLS' IS_LFB1-ZAHLS,
' ' 'GS_LFB1-ZGRUP' IS_LFB1-ZGRUP,
' ' 'GS_LFB1-LNRZB' IS_LFB1-LNRZB.
PERFORM DYNPRO USING:
'X' 'SAPLBUS_LOCATOR' '3000',
' ' 'BDC_OKCODE' '=BUS_MAIN_SAVE',
' ' 'GS_LFB1-BUSAB' IS_LFB1-BUSAB.
ENDIF.
CALL TRANSACTION 'BP' USING IT_BDCTAB
MODE IV_MODE
UPDATE 'S'
MESSAGES INTO IT_BDCMSG.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '214'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '215'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'S'
MSGID = 'R1'
MSGNR = '244'. "역할생성
ENDIF.
ENDIF.
IF SY-SUBRC EQ 0.
EV_MSGTY = 'S'.
EV_MSGTX = 'Success'.
EV_LIFNR = IT_BDCMSG-MSGV1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = EV_LIFNR
IMPORTING
OUTPUT = EV_LIFNR.
ELSE.
EV_MSGTY = 'E'.
READ TABLE IT_BDCMSG WITH KEY MSGTYP = 'E'.
IF SY-SUBRC NE 0.
READ TABLE IT_BDCMSG WITH KEY MSGID = 'ZFI'.
IF SY-SUBRC NE 0.
LOOP AT IT_BDCMSG.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = IT_BDCMSG-MSGID
MSGNR = IT_BDCMSG-MSGNR
MSGV1 = IT_BDCMSG-MSGV1
MSGV2 = IT_BDCMSG-MSGV2
MSGV3 = IT_BDCMSG-MSGV3
MSGV4 = IT_BDCMSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = EV_MSGTX.
WRITE / EV_MSGTX.
ENDLOOP.
ENDIF.
ENDIF.
CALL FUNCTION 'MESSAGE_TEXT_BUILD'
EXPORTING
MSGID = IT_BDCMSG-MSGID
MSGNR = IT_BDCMSG-MSGNR
MSGV1 = IT_BDCMSG-MSGV1
MSGV2 = IT_BDCMSG-MSGV2
MSGV3 = IT_BDCMSG-MSGV3
MSGV4 = IT_BDCMSG-MSGV4
IMPORTING
MESSAGE_TEXT_OUTPUT = EV_MSGTX.
ENDIF.
임시전표 데이터 함수
* 임시전표 데이터 정보 - 부가세나 원천세가 display되지 않음.
CALL FUNCTION 'PRELIMINARY_POSTING_DOC_READ'
EXPORTING
belnr = i_belnr
bukrs = i_bukrs
gjahr = i_gjahr
TABLES
t_vbkpf = lt_vbkpf
t_vbsec = lt_vbsec
t_vbseg = lt_vbseg
t_vbset = lt_vbset
t_vacsplt = lt_vacsplt
t_vspltwt = lt_vspltwt.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* SAP에서 삭제된 임시전표
DATA : lt_cdhdr LIKE cdhdr OCCURS 0 WITH HEADER LINE.
FREE : lt_cdhdr.
SELECT hdr~objectid
INTO CORRESPONDING FIELDS OF TABLE lt_cdhdr
FROM cdhdr AS hdr
INNER JOIN cdpos AS pos
ON hdr~objectclas EQ pos~objectclas
AND hdr~objectid EQ pos~objectid
AND hdr~changenr EQ pos~changenr
WHERE hdr~objectclas EQ 'BELEGV'
AND hdr~udate BETWEEN i_cpudt_f AND i_cpudt_t
AND pos~tabname EQ 'VBKPF'
AND pos~chngind EQ 'D'.
IF lt_cdhdr[] IS NOT INITIAL.
LOOP AT lt_cdhdr.
CLEAR outtab.
MOVE lt_cdhdr-objectid+7(4) TO outtab-bukrs.
MOVE lt_cdhdr-objectid+11(10) TO outtab-belnr.
MOVE lt_cdhdr-objectid+21(4) TO outtab-gjahr.
MOVE 'Z' TO outtab-bstat.
APPEND outtab. CLEAR outtab.
ENDLOOP.
ENDIF.
* Z_FI_PARK_SIMULATION - 임시전표 정보(부가세/원천세 포함)
FUNCTION z_fi_park_simulation.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(P_BUKRS) LIKE BKPF-BUKRS
*" REFERENCE(P_GJAHR) LIKE BKPF-GJAHR
*" REFERENCE(P_BELNR) LIKE BKPF-BELNR
*" TABLES
*" T_BSEG STRUCTURE BSEG
*" A_BSEG STRUCTURE BSEG
*" EXCEPTIONS
*" NO_DOCUMENT
*"----------------------------------------------------------------------
* Park Document. 상태에서 Taxline을 구성한다.
* => STD Simulatin logic을 구현하기에는 시간/투입M/D 대비 효과 없음..
* T_BSEG 는 빈 상태로 시작해서
* 추가되는 Tax line을 추가해서 T_BSEG table에 넣어 보낸다.
* A_BSEG 는 추가되는 Tax line 만을 포함한다.
*CALCULATE_TAX_FROM_GROSSAMOUNT
*CALCULATE_TAX_FROM_NET_AMOUNT
* => 이상 두개의 Function을 test한다..==> GROSS..
CLEAR : xbkpf,xbseg,xvbsega,xvbsegs,xvbsegd,xvbsegk,tmp_tax,
tax_info,t_bseg,a_bseg.
REFRESH : xbkpf,xbseg,xvbsega,xvbsegs,xvbsegd,xvbsegk,tmp_tax,
tax_info,t_bseg,a_bseg.
* 1. 전표 Header 정보 읽어오기..
SELECT * INTO TABLE xbkpf FROM bkpf
WHERE bukrs = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
IF sy-subrc = 0.
READ TABLE xbkpf INDEX 1.
ELSE.
RAISE no_document.
ENDIF.
* 2. 전표 item 정보 읽어오기
SELECT * INTO TABLE xvbsega FROM vbsega
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
SELECT * INTO TABLE xvbsegd FROM vbsegd
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
SELECT * INTO TABLE xvbsegk FROM vbsegk
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
SELECT * INTO TABLE xvbsegs FROM vbsegs
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
LOOP AT xvbsega .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsega TO xbseg.
xbseg-koart = 'A'.
APPEND xbseg.
ENDLOOP.
LOOP AT xvbsegd .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsegd TO xbseg.
xbseg-koart = 'D'.
APPEND xbseg.
ENDLOOP.
LOOP AT xvbsegk .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsegk TO xbseg.
xbseg-koart = 'K'.
APPEND xbseg.
ENDLOOP.
LOOP AT xvbsegs .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsegs TO xbseg.
xbseg-koart = 'S'.
APPEND xbseg.
ENDLOOP.
* 2. 우선순위 : 1. 수동으로 입력된 Tax 정보가 있을때는 해당정보를 이용
* ==> BKPF-XMWST = ' '
* 1.1 VBSET 에 있으면 계산한다
* 1.2 VBSET에 없고 VBSEGD 또는 VBSEGK에 세액정보가있을
* 경우 해당세액정보를 추가 Line item으로 구성한다.
* 2. 자동계산으로 되어있을경우 Function 이용해서 정보생성
* ==> BKPF-XMWST = 'X' 일경우..
DESCRIBE TABLE xbseg LINES line_cnt.
new_line = line_cnt + 1.
CLEAR : r_code,n_deduct, n_deduct[]..
* 1. 자동계산이 아닌경우의 계산..
IF xbkpf-xmwst = ' ' .
* 1.1 수동으로 Tax 금액을 입력한경우
PERFORM make_tax_line_from_vbset TABLES a_bseg
USING r_code.
IF r_code = 0.
IF n_deduct[] IS INITIAL."불공제 내역 없음.
t_bseg[] = xbseg[].
ELSE.
PERFORM adjust_gl_line_non_deductible .
t_bseg[] = xbseg[].
ENDIF.
ELSE.
* 1.2 VBSET에 없고 VBSEGD 또는 VBSEGK에 세액정보가있을
* 경우 해당세액정보를 추가 Line item으로 구성한다.
PERFORM make_tax_line_from_arap TABLES t_bseg a_bseg.
ENDIF.
* 2. 자동계산인 경우
ELSEIF xbkpf-xmwst = 'X' . "자동계산 .
PERFORM make_tax_line_by_auto TABLES t_bseg a_bseg.
ENDIF.
** WITH ITEM
PERFORM CREATE_WITH_ITEM TABLES XBKPF
T_BSEG
USING P_BUKRS.
SORT t_bseg BY bukrs gjahr belnr buzei.
SORT a_bseg BY bukrs gjahr belnr buzei.
ENDFUNCTION.
FUNCTION-POOL zfi04. "MESSAGE-ID ..
TABLES: abuz, " Schnittstellensegment RAIN
anbz, " Schnittstellensegment RAIN
avik, " Aviskopf
bkp1, " Belegkopf Zusatzangaben
bkpf,
*bkdf, " Dauerbuchungsdaten
bnka, " Banken
bsee, " Belegzeile Substitution
bseu, " Belegzeile Zusatzinfo Verbuchng
bsid, " Belegindex Debitor
bsik, " Belegindex Kreditor
bsis, " Belegindex Sachkonto
bsix, " Belegindex Wechselobligo
bvor, " Buchungsvorgaenge
kmkpf, " Kopf Kontierungsmuster
knas, " EG-Steuercodes je Kunde
knbk, " Bankverbindungen je Kunde
lfbk, " note 562191
knc3, " Kunde-Sonderhauptbuchstand
lfc3, " Lieferanten-Sonderhauptbuch
rfdt, " RF-Daten ( wie INDX )
sadr, " Adressdaten
seccode, " Section Codes
vbsegs,
vbset,
vbsegd, " Vorerfate Belege: Debi.Zeilen
vbsegk. " Vorerfate Belege: Kred.Zeilen
TABLES: addr1_sel,
ausz1,
ausz2,
bsegl,
ek05a,
f05actrl,
fin1_param,
firevdoc,
fs006,
itxdat,
opayf,
rf05s,
rfops, rfops_jv,
rfopt, rfopt2,
rfradc,
rf022,
rtitl,
sapos,
uf05a,
tmpbl,
*x001.
TABLES: t000,
tfagm,
tfavw,
tfbuf,
thead,
thkon,
treri,
tstc,
tstcp,
tstct,
ttypt,
tvoid,
t001u,
t001w,
t003,
t003a,
t004f,
t008,
t015l,
t019,
t019w,
t021,
t021t,
t021v,
t030d,
t030u, *t030u,
t031,
t041a,
t041b,
t041t,
t042,
t042f,
t043g,
t045p,
t045w,
t046,
t053,
t053r,
t053s,
t054a,
t074t.
TABLES: vf_debi, " View ber KNA1 / KNB1
vf_kred. " View ber LFA1 / LFB1
DATA :
xnegp(1) TYPE c. " Negativbuchungen
DATA : xbkpf LIKE bkpf OCCURS 0 WITH HEADER LINE,
xbseg LIKE bseg OCCURS 0 WITH HEADER LINE,
xvbsegs LIKE vbsegs OCCURS 0 WITH HEADER LINE,
xvbsegd LIKE vbsegd OCCURS 0 WITH HEADER LINE,
xvbsegk LIKE vbsegk OCCURS 0 WITH HEADER LINE,
xvbsega LIKE vbsega OCCURS 0 WITH HEADER LINE,
xvbset LIKE vbset OCCURS 0 WITH HEADER LINE,
xbset LIKE bset OCCURS 0 WITH HEADER LINE.
DATA : t_bseg LIKE bseg OCCURS 0 WITH HEADER LINE,
a_bseg LIKE bseg OCCURS 0 WITH HEADER LINE.
DATA : line_cnt LIKE sy-tabix, "원래 Line 수
new_line LIKE sy-tabix. "최초 추가Line item no
DATA : BEGIN OF tmp_tax OCCURS 0,
bukrs LIKE bset-bukrs,
belnr LIKE bset-belnr,
gjahr LIKE bset-gjahr,
mwskz LIKE bset-mwskz,
hkont LIKE bset-hkont,
shkzg LIKE bset-shkzg,
hwste LIKE bset-hwste,
fwste LIKE bset-fwste,
END OF tmp_tax.
DATA : tax_info LIKE rtax1u15 OCCURS 0 WITH HEADER LINE.
DATA : r_code LIKE sy-subrc.
* 매입세액 불공제 내역 계산위한 internal table..
DATA : BEGIN OF n_deduct OCCURS 0,
mwskz LIKE bset-mwskz,
amt LIKE bset-fwste,
END OF n_deduct.
* ------------------------------------------------------------
*----------------------------------------------------------------------*
***INCLUDE LZFI04F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form make_tax_line_from_vbset
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAKE_TAX_LINE_FROM_VBSET TABLES TAX_BSEG STRUCTURE BSEG
USING P_R_CODE.
DATA : N_DEDUCT_AMT LIKE BSET-FWSTE. "불공제 금액 total
* 1.1
* VBSET table에는 차/대,세금코드별 금액이 Collect되어있다...
SELECT * FROM VBSET WHERE AUSBK = XBKPF-BUKRS
AND BELNR = XBKPF-BELNR
AND GJAHR = XBKPF-GJAHR.
CHECK VBSET-FWSTE NE 0.
CLEAR N_DEDUCT_AMT.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = VBSET-AUSBK
I_MWSKZ = VBSET-MWSKZ
I_WAERS = XBKPF-WAERS
I_WRBTR = VBSET-FWSTE "금액은 중요치X
IMPORTING
E_FWNAV = N_DEDUCT_AMT
TABLES
T_MWDAT = TAX_INFO.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* IF sy-subrc = 0.
IF NOT TAX_INFO-HKONT IS INITIAL.
READ TABLE TAX_INFO INDEX 1.
* 새로운 BSEG Line 구성
CLEAR XBSEG.
XBSEG-MANDT = SY-MANDT.
XBSEG-BUKRS = VBSET-AUSBK.
XBSEG-BELNR = VBSET-BELNR.
XBSEG-GJAHR = VBSET-GJAHR.
XBSEG-BUZEI = NEW_LINE.
XBSEG-HKONT = TAX_INFO-HKONT.
XBSEG-WRBTR = VBSET-FWSTE.
XBSEG-DMBTR = VBSET-HWSTE.
XBSEG-SHKZG = VBSET-SHKZG.
XBSEG-MWSKZ = VBSET-MWSKZ.
IF VBSET-SHKZG = 'S'.
XBSEG-BSCHL = '40'.
ELSE.
XBSEG-BSCHL = '50'.
ENDIF.
APPEND XBSEG.
* Tax line만 추가..
CLEAR TAX_BSEG.
TAX_BSEG = XBSEG. APPEND TAX_BSEG.
NEW_LINE = NEW_LINE + 1.
CLEAR TAX_INFO. REFRESH TAX_INFO.
* 매입세액 불공제는 따로 보관해 둔다(비용계정 금액별 안분)
* 위 Function의 E_FWNAV 값이 세액불공제 금액 total 값임..
ELSEIF VBSET-MWSKZ = '43'.
N_DEDUCT-MWSKZ = VBSET-MWSKZ.
N_DEDUCT-AMT = VBSET-HWSTE.
COLLECT N_DEDUCT.
ENDIF.
ENDSELECT .
IF SY-SUBRC NE 0.
P_R_CODE = '4'.
ENDIF.
ENDFORM. " make_tax_line_from_vbset
*&---------------------------------------------------------------------*
*& Form make_tax_line_from_arap
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAKE_TAX_LINE_FROM_ARAP TABLES ALL_BSEG STRUCTURE BSEG
TAX_BSEG STRUCTURE BSEG.
* 추가라인으로 구성할수 없는 '매입세액 불공제'는 43 Tax code
* 를 가지고 있는 GL 계정들의 금액에 Tax 금액을 up시켜 주어야함.
CLEAR : N_DEDUCT, N_DEDUCT[].
LOOP AT XBSEG.
IF ( XBSEG-KOART = 'K' OR XBSEG-KOART = 'D' )
AND NOT XBSEG-WMWST IS INITIAL.
* -세금라인 구성(Collect시키기)
CLEAR TAX_INFO. REFRESH TAX_INFO.
CLEAR TMP_TAX.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = XBSEG-BUKRS
I_MWSKZ = XBSEG-MWSKZ
I_WAERS = XBKPF-WAERS
I_WRBTR = XBSEG-WRBTR "
TABLES
T_MWDAT = TAX_INFO.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF NOT TAX_INFO-HKONT IS INITIAL.
READ TABLE TAX_INFO INDEX 1.
TMP_TAX-BUKRS = XBSEG-BUKRS.
TMP_TAX-BELNR = XBSEG-BELNR.
TMP_TAX-GJAHR = XBSEG-GJAHR.
TMP_TAX-MWSKZ = XBSEG-MWSKZ.
TMP_TAX-HKONT = TAX_INFO-HKONT.
IF XBSEG-SHKZG = 'H'."AR/AP의 반대변에..
TMP_TAX-SHKZG = 'S'.
ELSE.
TMP_TAX-SHKZG = 'H'.
ENDIF.
TMP_TAX-FWSTE = XBSEG-WMWST. "전표통화세액(입력값)
* IF xbkpf-waers = 'KRW'.
TMP_TAX-HWSTE = XBSEG-MWSTS . "현지통화세액
* ENDIF.
COLLECT TMP_TAX.
ENDIF.
ENDIF.
* AP,AR line도 Gross금액이므로 그대로 라인추가한다.
ALL_BSEG = XBSEG.
APPEND ALL_BSEG.
* 매입세액 불공제의 경우는 따로 저장해 놓는다..
IF XBSEG-MWSKZ = '43'.
N_DEDUCT-MWSKZ = XBSEG-MWSKZ.
N_DEDUCT-AMT = XBSEG-MWSTS. "LC 세금
COLLECT N_DEDUCT.
ENDIF.
ELSE.
* -일반라인 구성
ALL_BSEG = XBSEG.
APPEND ALL_BSEG.
CONTINUE.
ENDIF.
ENDLOOP.
* Tax line 추가 하기
DESCRIBE TABLE ALL_BSEG LINES LINE_CNT.
NEW_LINE = LINE_CNT + 1.
LOOP AT TMP_TAX.
CLEAR ALL_BSEG.
ALL_BSEG-MANDT = SY-MANDT.
ALL_BSEG-BUKRS = TMP_TAX-BUKRS.
ALL_BSEG-BELNR = TMP_TAX-BELNR.
ALL_BSEG-GJAHR = TMP_TAX-GJAHR.
ALL_BSEG-BUZEI = NEW_LINE.
ALL_BSEG-HKONT = TMP_TAX-HKONT.
ALL_BSEG-WRBTR = TMP_TAX-FWSTE. "전표통화세액
ALL_BSEG-DMBTR = TMP_TAX-HWSTE. "현지통화세액
ALL_BSEG-SHKZG = TMP_TAX-SHKZG.
ALL_BSEG-MWSKZ = TMP_TAX-MWSKZ.
IF ALL_BSEG-SHKZG = 'S'.
ALL_BSEG-BSCHL = '40'.
ELSE.
ALL_BSEG-BSCHL = '50'.
ENDIF.
APPEND ALL_BSEG.
* Tax line만 추가..
CLEAR TAX_BSEG.
TAX_BSEG = XBSEG. APPEND TAX_BSEG.
NEW_LINE = NEW_LINE + 1.
ENDLOOP.
* 매입세액 불공제 금액 보정하기.(GL line item에 금액 up하기)
* all_bseg를 수정해 주면 됨.....
IF NOT N_DEDUCT[] IS INITIAL.
* all_bseg 의 GL line item(tax code=43)에 불공제금액 반영한다.
DATA : TOTAL_AMT LIKE BSEG-DMBTR, "총 불공제 금액
REST_AMT LIKE BSEG-DMBTR, "안분후 남은 금액
TAX_AMT LIKE BSEG-DMBTR, "안분할 불공제 금액
LAST_TABIX LIKE SY-TABIX. "마지막 나머지 금액 조정위해
READ TABLE N_DEDUCT INDEX 1. "43의 경우는 하나의 라인만 존재한다가정.
TOTAL_AMT = N_DEDUCT-AMT.
IF SY-SUBRC = 0.
LOOP AT ALL_BSEG WHERE KOART = 'S'
AND MWSKZ = '43'.
CLEAR : TAX_AMT, TAX_INFO, TAX_INFO[] .
LAST_TABIX = SY-TABIX.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
I_BUKRS = ALL_BSEG-BUKRS
I_MWSKZ = ALL_BSEG-MWSKZ
* I_TXJCD = ' '
I_WAERS = XBKPF-WAERS
I_WRBTR = ALL_BSEG-DMBTR
IMPORTING
E_FWNAV = TAX_AMT
* E_FWNVV =
* E_FWSTE =
* E_FWAST =
TABLES
T_MWDAT = TAX_INFO
EXCEPTIONS
BUKRS_NOT_FOUND = 1
COUNTRY_NOT_FOUND = 2
MWSKZ_NOT_DEFINED = 3
MWSKZ_NOT_VALID = 4
KTOSL_NOT_FOUND = 5
KALSM_NOT_FOUND = 6
PARAMETER_ERROR = 7
KNUMH_NOT_FOUND = 8
KSCHL_NOT_FOUND = 9
UNKNOWN_ERROR = 10
ACCOUNT_NOT_FOUND = 11
TXJCD_NOT_VALID = 12
OTHERS = 13.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
ALL_BSEG-DMBTR = ALL_BSEG-DMBTR + TAX_AMT .
IF XBKPF-WAERS = 'KRW'.
ALL_BSEG-WRBTR = ALL_BSEG-WRBTR + TAX_AMT.
ENDIF.
MODIFY ALL_BSEG INDEX LAST_TABIX.
TOTAL_AMT = TOTAL_AMT - TAX_AMT.
ENDIF.
ENDLOOP.
* 계산 단수차이로 인한 차이금액을 마지막라인에 보정해 준다.
IF TOTAL_AMT NE 0.
READ TABLE ALL_BSEG INDEX LAST_TABIX.
ALL_BSEG-DMBTR = ALL_BSEG-DMBTR + TOTAL_AMT.
IF XBKPF-WAERS = 'KRW'.
ALL_BSEG-WRBTR = ALL_BSEG-WRBTR + TOTAL_AMT.
ENDIF.
MODIFY ALL_BSEG INDEX LAST_TABIX.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " make_tax_line_from_arap
*&---------------------------------------------------------------------*
*& Form make_tax_line_by_auto
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAKE_TAX_LINE_BY_AUTO
TABLES ALL_BSEG STRUCTURE BSEG
TAX_BSEG STRUCTURE BSEG.
DATA : FWAST LIKE BSET-FWSTE. "Deductible Tax amt..
LOOP AT XBSEG.
IF XBSEG-KOART NE 'S' OR XBSEG-MWSKZ IS INITIAL.
ALL_BSEG = XBSEG.
APPEND ALL_BSEG.
CONTINUE.
* GL 계정을 기준으로 Tax amount 계산한다.
ELSE.
CLEAR TAX_INFO. REFRESH TAX_INFO.
CLEAR TMP_TAX. CLEAR FWAST.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = XBSEG-BUKRS
I_MWSKZ = XBSEG-MWSKZ
I_WAERS = XBKPF-WAERS
I_WRBTR = XBSEG-WRBTR "
IMPORTING
E_FWAST = FWAST
TABLES
T_MWDAT = TAX_INFO.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF NOT TAX_INFO-HKONT IS INITIAL AND
NOT FWAST IS INITIAL.
READ TABLE TAX_INFO INDEX 1.
TMP_TAX-BUKRS = XBSEG-BUKRS.
TMP_TAX-BELNR = XBSEG-BELNR.
TMP_TAX-GJAHR = XBSEG-GJAHR.
TMP_TAX-MWSKZ = XBSEG-MWSKZ.
TMP_TAX-HKONT = TAX_INFO-HKONT.
TMP_TAX-SHKZG = XBSEG-SHKZG."GL계정과 동일하게 한다..
TMP_TAX-FWSTE = TAX_INFO-WMWST. "전표통화세액
IF XBKPF-WAERS = 'KRW'.
TMP_TAX-HWSTE = TAX_INFO-WMWST . "현지통화세액
ENDIF.
COLLECT TMP_TAX.
ENDIF.
ENDIF.
* 원래의 bseg line item금액 수정한다(세액 감하기)=> 계정존재시만..
ALL_BSEG = XBSEG.
IF NOT TAX_INFO-HKONT IS INITIAL AND
NOT FWAST IS INITIAL.
ALL_BSEG-WRBTR = ALL_BSEG-WRBTR - TAX_INFO-WMWST.
IF XBKPF-WAERS = 'KRW'.
ALL_BSEG-DMBTR = ALL_BSEG-DMBTR - TAX_INFO-WMWST.
ENDIF.
ENDIF.
APPEND ALL_BSEG.
ENDIF.
ENDLOOP.
* Tax line 추가 하기
DESCRIBE TABLE ALL_BSEG LINES LINE_CNT.
NEW_LINE = LINE_CNT + 1.
LOOP AT TMP_TAX.
CLEAR ALL_BSEG.
ALL_BSEG-MANDT = SY-MANDT.
ALL_BSEG-BUKRS = TMP_TAX-BUKRS.
ALL_BSEG-BELNR = TMP_TAX-BELNR.
ALL_BSEG-GJAHR = TMP_TAX-GJAHR.
ALL_BSEG-BUZEI = NEW_LINE.
ALL_BSEG-HKONT = TMP_TAX-HKONT.
ALL_BSEG-WRBTR = TMP_TAX-FWSTE. "전표통화세액
ALL_BSEG-DMBTR = TMP_TAX-HWSTE. "현지통화세액
ALL_BSEG-SHKZG = TMP_TAX-SHKZG.
ALL_BSEG-MWSKZ = TMP_TAX-MWSKZ.
IF ALL_BSEG-SHKZG = 'S'.
ALL_BSEG-BSCHL = '40'.
ELSE.
ALL_BSEG-BSCHL = '50'.
ENDIF.
APPEND ALL_BSEG.
* Tax line만 추가..
CLEAR TAX_BSEG.
TAX_BSEG = XBSEG. APPEND TAX_BSEG.
NEW_LINE = NEW_LINE + 1.
ENDLOOP.
ENDFORM. " make_tax_line_by_auto
*&---------------------------------------------------------------------*
*& Form adjust_gl_line_non_deductible
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_BSEG text
*----------------------------------------------------------------------*
FORM ADJUST_GL_LINE_NON_DEDUCTIBLE.
* xbseg 의 GL line item(tax code=43)에 불공제금액 반영한다.
DATA : TOTAL_AMT LIKE BSEG-DMBTR, "총 불공제 금액
REST_AMT LIKE BSEG-DMBTR, "안분후 남은 금액
TAX_AMT LIKE BSEG-DMBTR, "안분할 불공제 금액
LAST_TABIX LIKE SY-TABIX. "마지막 나머지 금액 조정위해
READ TABLE N_DEDUCT INDEX 1. "43의 경우는 하나의 라인만 존재한다가정.
TOTAL_AMT = N_DEDUCT-AMT.
IF SY-SUBRC = 0.
LOOP AT XBSEG WHERE KOART = 'S'
AND MWSKZ = '43'.
CLEAR : TAX_AMT, TAX_INFO, TAX_INFO[] .
LAST_TABIX = SY-TABIX.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
I_BUKRS = XBSEG-BUKRS
I_MWSKZ = XBSEG-MWSKZ
* I_TXJCD = ' '
I_WAERS = XBKPF-WAERS
I_WRBTR = XBSEG-DMBTR
IMPORTING
E_FWNAV = TAX_AMT
* E_FWNVV =
* E_FWSTE =
* E_FWAST =
TABLES
T_MWDAT = TAX_INFO
EXCEPTIONS
BUKRS_NOT_FOUND = 1
COUNTRY_NOT_FOUND = 2
MWSKZ_NOT_DEFINED = 3
MWSKZ_NOT_VALID = 4
KTOSL_NOT_FOUND = 5
KALSM_NOT_FOUND = 6
PARAMETER_ERROR = 7
KNUMH_NOT_FOUND = 8
KSCHL_NOT_FOUND = 9
UNKNOWN_ERROR = 10
ACCOUNT_NOT_FOUND = 11
TXJCD_NOT_VALID = 12
OTHERS = 13.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
XBSEG-DMBTR = XBSEG-DMBTR + TAX_AMT .
IF XBKPF-WAERS = 'KRW'.
XBSEG-WRBTR = XBSEG-WRBTR + TAX_AMT.
ENDIF.
MODIFY XBSEG INDEX LAST_TABIX.
TOTAL_AMT = TOTAL_AMT - TAX_AMT.
ENDIF.
ENDLOOP.
* 계산 단수차이로 인한 차이금액을 마지막라인에 보정해 준다.
IF TOTAL_AMT NE 0.
READ TABLE XBSEG INDEX LAST_TABIX.
XBSEG-DMBTR = XBSEG-DMBTR + TOTAL_AMT.
IF XBKPF-WAERS = 'KRW'.
XBSEG-WRBTR = XBSEG-WRBTR + TOTAL_AMT.
ENDIF.
MODIFY XBSEG INDEX LAST_TABIX.
ENDIF.
ENDIF.
ENDFORM. " adjust_gl_line_non_deductible
*&---------------------------------------------------------------------*
*& Form GET_W1W2
*&---------------------------------------------------------------------*
* K가있는경우 원천세,주민세를 구한다.
*----------------------------------------------------------------------*
FORM CREATE_WITH_ITEM TABLES LT_BKPF STRUCTURE BKPF
LT_BSEG STRUCTURE BSEG
USING P_BUKRS.
DATA BEGIN OF LT_WITH_ITEM OCCURS 1.
INCLUDE STRUCTURE WITH_ITEMX .
DATA END OF LT_WITH_ITEM.
DATA LX_BSEG LIKE BSEG.
DATA LT_BSET LIKE BSET OCCURS 0 WITH HEADER LINE .
DATA : LV_COUNT(3) TYPE N,
LV_TABIX TYPE I.
READ TABLE LT_BSEG WITH KEY KOART = 'K'.
CHECK SY-SUBRC EQ 0.
LV_TABIX = SY-TABIX.
CALL FUNCTION 'FI_CHECK_EXTENDED_WT'
EXPORTING
I_BUKRS = P_BUKRS
EXCEPTIONS
COMPONENT_NOT_ACTIVE = 1
NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
CALL FUNCTION 'FI_WT_PUT_X_WITH_ITEM'
TABLES
T_WITH_ITEM = LT_WITH_ITEM
EXCEPTIONS
OTHERS = 1.
LOOP AT LT_BSEG WHERE KOART CA 'DK'.
CALL FUNCTION 'FI_WT_RECONSTRUCT_REFERENCEDOC'
EXPORTING
I_BSEG = LT_BSEG
IMPORTING
E_BSEG = LX_BSEG
EXCEPTIONS
OTHERS = 1.
ENDLOOP.
CALL FUNCTION 'FI_WT_FB01_CALCULATE_WT'
EXPORTING
I_AKTYP = 'H'
I_DYNCL = 'V'
TABLES
I_BKPF = LT_BKPF
I_BSEG = LT_BSEG
I_BSET = LT_BSET
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'FI_WT_GET_X_WITH_ITEM'
TABLES
T_WITH_ITEM = LT_WITH_ITEM
EXCEPTIONS
OTHERS = 1.
DESCRIBE TABLE LT_BSEG LINES LV_COUNT.
LOOP AT LT_WITH_ITEM WHERE WT_QBSHB NE 0.
CASE LT_WITH_ITEM-WITHT.
WHEN 'K1'.
CLEAR : LT_BSEG-ZTERM.
LT_BSEG-QSSKZ = LT_WITH_ITEM-WT_WITHCD.
LT_BSEG-SAKNR = LT_BSEG-HKONT = '0000214110' .
LT_BSEG-KOART = 'S'.
LT_BSEG-DMBTR = ABS( LT_WITH_ITEM-WT_QBSHH ).
LT_BSEG-WRBTR = ABS( LT_WITH_ITEM-WT_QBSHB ).
LT_BSEG-BUZEI = LV_COUNT + 1.
WHEN 'K2'.
CLEAR : LT_BSEG-ZTERM.
LT_BSEG-QSSKZ = LT_WITH_ITEM-WT_WITHCD.
LT_BSEG-SAKNR = LT_BSEG-HKONT = '0000214120' .
LT_BSEG-KOART = 'S'.
LT_BSEG-DMBTR = ABS( LT_WITH_ITEM-WT_QBSHH ).
LT_BSEG-WRBTR = ABS( LT_WITH_ITEM-WT_QBSHB ).
LT_BSEG-BUZEI = LV_COUNT + 2.
ENDCASE.
IF LT_BSEG-SHKZG = 'H'.
LT_BSEG-BSCHL = '50'.
ELSE.
LT_BSEG-BSCHL = '40'.
ENDIF.
APPEND LT_BSEG.
ENDLOOP.
IF SY-SUBRC EQ 0.
LT_BSEG-QSSKZ = LT_WITH_ITEM-WT_WITHCD.
MODIFY LT_BSEG INDEX LV_TABIX TRANSPORTING QSSKZ.
ENDIF.
ENDIF.
ENDFORM. " GET_W1W2
CALL FUNCTION 'PRELIMINARY_POSTING_DOC_READ'
EXPORTING
belnr = i_belnr
bukrs = i_bukrs
gjahr = i_gjahr
TABLES
t_vbkpf = lt_vbkpf
t_vbsec = lt_vbsec
t_vbseg = lt_vbseg
t_vbset = lt_vbset
t_vacsplt = lt_vacsplt
t_vspltwt = lt_vspltwt.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
* SAP에서 삭제된 임시전표
DATA : lt_cdhdr LIKE cdhdr OCCURS 0 WITH HEADER LINE.
FREE : lt_cdhdr.
SELECT hdr~objectid
INTO CORRESPONDING FIELDS OF TABLE lt_cdhdr
FROM cdhdr AS hdr
INNER JOIN cdpos AS pos
ON hdr~objectclas EQ pos~objectclas
AND hdr~objectid EQ pos~objectid
AND hdr~changenr EQ pos~changenr
WHERE hdr~objectclas EQ 'BELEGV'
AND hdr~udate BETWEEN i_cpudt_f AND i_cpudt_t
AND pos~tabname EQ 'VBKPF'
AND pos~chngind EQ 'D'.
IF lt_cdhdr[] IS NOT INITIAL.
LOOP AT lt_cdhdr.
CLEAR outtab.
MOVE lt_cdhdr-objectid+7(4) TO outtab-bukrs.
MOVE lt_cdhdr-objectid+11(10) TO outtab-belnr.
MOVE lt_cdhdr-objectid+21(4) TO outtab-gjahr.
MOVE 'Z' TO outtab-bstat.
APPEND outtab. CLEAR outtab.
ENDLOOP.
ENDIF.
* Z_FI_PARK_SIMULATION - 임시전표 정보(부가세/원천세 포함)
FUNCTION z_fi_park_simulation.
*"----------------------------------------------------------------------
*"*"Local interface:
*" IMPORTING
*" REFERENCE(P_BUKRS) LIKE BKPF-BUKRS
*" REFERENCE(P_GJAHR) LIKE BKPF-GJAHR
*" REFERENCE(P_BELNR) LIKE BKPF-BELNR
*" TABLES
*" T_BSEG STRUCTURE BSEG
*" A_BSEG STRUCTURE BSEG
*" EXCEPTIONS
*" NO_DOCUMENT
*"----------------------------------------------------------------------
* Park Document. 상태에서 Taxline을 구성한다.
* => STD Simulatin logic을 구현하기에는 시간/투입M/D 대비 효과 없음..
* T_BSEG 는 빈 상태로 시작해서
* 추가되는 Tax line을 추가해서 T_BSEG table에 넣어 보낸다.
* A_BSEG 는 추가되는 Tax line 만을 포함한다.
*CALCULATE_TAX_FROM_GROSSAMOUNT
*CALCULATE_TAX_FROM_NET_AMOUNT
* => 이상 두개의 Function을 test한다..==> GROSS..
CLEAR : xbkpf,xbseg,xvbsega,xvbsegs,xvbsegd,xvbsegk,tmp_tax,
tax_info,t_bseg,a_bseg.
REFRESH : xbkpf,xbseg,xvbsega,xvbsegs,xvbsegd,xvbsegk,tmp_tax,
tax_info,t_bseg,a_bseg.
* 1. 전표 Header 정보 읽어오기..
SELECT * INTO TABLE xbkpf FROM bkpf
WHERE bukrs = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
IF sy-subrc = 0.
READ TABLE xbkpf INDEX 1.
ELSE.
RAISE no_document.
ENDIF.
* 2. 전표 item 정보 읽어오기
SELECT * INTO TABLE xvbsega FROM vbsega
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
SELECT * INTO TABLE xvbsegd FROM vbsegd
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
SELECT * INTO TABLE xvbsegk FROM vbsegk
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
SELECT * INTO TABLE xvbsegs FROM vbsegs
WHERE ausbk = p_bukrs
AND belnr = p_belnr
AND gjahr = p_gjahr.
LOOP AT xvbsega .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsega TO xbseg.
xbseg-koart = 'A'.
APPEND xbseg.
ENDLOOP.
LOOP AT xvbsegd .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsegd TO xbseg.
xbseg-koart = 'D'.
APPEND xbseg.
ENDLOOP.
LOOP AT xvbsegk .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsegk TO xbseg.
xbseg-koart = 'K'.
APPEND xbseg.
ENDLOOP.
LOOP AT xvbsegs .
CLEAR xbseg.
MOVE-CORRESPONDING xvbsegs TO xbseg.
xbseg-koart = 'S'.
APPEND xbseg.
ENDLOOP.
* 2. 우선순위 : 1. 수동으로 입력된 Tax 정보가 있을때는 해당정보를 이용
* ==> BKPF-XMWST = ' '
* 1.1 VBSET 에 있으면 계산한다
* 1.2 VBSET에 없고 VBSEGD 또는 VBSEGK에 세액정보가있을
* 경우 해당세액정보를 추가 Line item으로 구성한다.
* 2. 자동계산으로 되어있을경우 Function 이용해서 정보생성
* ==> BKPF-XMWST = 'X' 일경우..
DESCRIBE TABLE xbseg LINES line_cnt.
new_line = line_cnt + 1.
CLEAR : r_code,n_deduct, n_deduct[]..
* 1. 자동계산이 아닌경우의 계산..
IF xbkpf-xmwst = ' ' .
* 1.1 수동으로 Tax 금액을 입력한경우
PERFORM make_tax_line_from_vbset TABLES a_bseg
USING r_code.
IF r_code = 0.
IF n_deduct[] IS INITIAL."불공제 내역 없음.
t_bseg[] = xbseg[].
ELSE.
PERFORM adjust_gl_line_non_deductible .
t_bseg[] = xbseg[].
ENDIF.
ELSE.
* 1.2 VBSET에 없고 VBSEGD 또는 VBSEGK에 세액정보가있을
* 경우 해당세액정보를 추가 Line item으로 구성한다.
PERFORM make_tax_line_from_arap TABLES t_bseg a_bseg.
ENDIF.
* 2. 자동계산인 경우
ELSEIF xbkpf-xmwst = 'X' . "자동계산 .
PERFORM make_tax_line_by_auto TABLES t_bseg a_bseg.
ENDIF.
** WITH ITEM
PERFORM CREATE_WITH_ITEM TABLES XBKPF
T_BSEG
USING P_BUKRS.
SORT t_bseg BY bukrs gjahr belnr buzei.
SORT a_bseg BY bukrs gjahr belnr buzei.
ENDFUNCTION.
FUNCTION-POOL zfi04. "MESSAGE-ID ..
TABLES: abuz, " Schnittstellensegment RAIN
anbz, " Schnittstellensegment RAIN
avik, " Aviskopf
bkp1, " Belegkopf Zusatzangaben
bkpf,
*bkdf, " Dauerbuchungsdaten
bnka, " Banken
bsee, " Belegzeile Substitution
bseu, " Belegzeile Zusatzinfo Verbuchng
bsid, " Belegindex Debitor
bsik, " Belegindex Kreditor
bsis, " Belegindex Sachkonto
bsix, " Belegindex Wechselobligo
bvor, " Buchungsvorgaenge
kmkpf, " Kopf Kontierungsmuster
knas, " EG-Steuercodes je Kunde
knbk, " Bankverbindungen je Kunde
lfbk, " note 562191
knc3, " Kunde-Sonderhauptbuchstand
lfc3, " Lieferanten-Sonderhauptbuch
rfdt, " RF-Daten ( wie INDX )
sadr, " Adressdaten
seccode, " Section Codes
vbsegs,
vbset,
vbsegd, " Vorerfate Belege: Debi.Zeilen
vbsegk. " Vorerfate Belege: Kred.Zeilen
TABLES: addr1_sel,
ausz1,
ausz2,
bsegl,
ek05a,
f05actrl,
fin1_param,
firevdoc,
fs006,
itxdat,
opayf,
rf05s,
rfops, rfops_jv,
rfopt, rfopt2,
rfradc,
rf022,
rtitl,
sapos,
uf05a,
tmpbl,
*x001.
TABLES: t000,
tfagm,
tfavw,
tfbuf,
thead,
thkon,
treri,
tstc,
tstcp,
tstct,
ttypt,
tvoid,
t001u,
t001w,
t003,
t003a,
t004f,
t008,
t015l,
t019,
t019w,
t021,
t021t,
t021v,
t030d,
t030u, *t030u,
t031,
t041a,
t041b,
t041t,
t042,
t042f,
t043g,
t045p,
t045w,
t046,
t053,
t053r,
t053s,
t054a,
t074t.
TABLES: vf_debi, " View ber KNA1 / KNB1
vf_kred. " View ber LFA1 / LFB1
DATA :
xnegp(1) TYPE c. " Negativbuchungen
DATA : xbkpf LIKE bkpf OCCURS 0 WITH HEADER LINE,
xbseg LIKE bseg OCCURS 0 WITH HEADER LINE,
xvbsegs LIKE vbsegs OCCURS 0 WITH HEADER LINE,
xvbsegd LIKE vbsegd OCCURS 0 WITH HEADER LINE,
xvbsegk LIKE vbsegk OCCURS 0 WITH HEADER LINE,
xvbsega LIKE vbsega OCCURS 0 WITH HEADER LINE,
xvbset LIKE vbset OCCURS 0 WITH HEADER LINE,
xbset LIKE bset OCCURS 0 WITH HEADER LINE.
DATA : t_bseg LIKE bseg OCCURS 0 WITH HEADER LINE,
a_bseg LIKE bseg OCCURS 0 WITH HEADER LINE.
DATA : line_cnt LIKE sy-tabix, "원래 Line 수
new_line LIKE sy-tabix. "최초 추가Line item no
DATA : BEGIN OF tmp_tax OCCURS 0,
bukrs LIKE bset-bukrs,
belnr LIKE bset-belnr,
gjahr LIKE bset-gjahr,
mwskz LIKE bset-mwskz,
hkont LIKE bset-hkont,
shkzg LIKE bset-shkzg,
hwste LIKE bset-hwste,
fwste LIKE bset-fwste,
END OF tmp_tax.
DATA : tax_info LIKE rtax1u15 OCCURS 0 WITH HEADER LINE.
DATA : r_code LIKE sy-subrc.
* 매입세액 불공제 내역 계산위한 internal table..
DATA : BEGIN OF n_deduct OCCURS 0,
mwskz LIKE bset-mwskz,
amt LIKE bset-fwste,
END OF n_deduct.
* ------------------------------------------------------------
*----------------------------------------------------------------------*
***INCLUDE LZFI04F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form make_tax_line_from_vbset
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAKE_TAX_LINE_FROM_VBSET TABLES TAX_BSEG STRUCTURE BSEG
USING P_R_CODE.
DATA : N_DEDUCT_AMT LIKE BSET-FWSTE. "불공제 금액 total
* 1.1
* VBSET table에는 차/대,세금코드별 금액이 Collect되어있다...
SELECT * FROM VBSET WHERE AUSBK = XBKPF-BUKRS
AND BELNR = XBKPF-BELNR
AND GJAHR = XBKPF-GJAHR.
CHECK VBSET-FWSTE NE 0.
CLEAR N_DEDUCT_AMT.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = VBSET-AUSBK
I_MWSKZ = VBSET-MWSKZ
I_WAERS = XBKPF-WAERS
I_WRBTR = VBSET-FWSTE "금액은 중요치X
IMPORTING
E_FWNAV = N_DEDUCT_AMT
TABLES
T_MWDAT = TAX_INFO.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
* IF sy-subrc = 0.
IF NOT TAX_INFO-HKONT IS INITIAL.
READ TABLE TAX_INFO INDEX 1.
* 새로운 BSEG Line 구성
CLEAR XBSEG.
XBSEG-MANDT = SY-MANDT.
XBSEG-BUKRS = VBSET-AUSBK.
XBSEG-BELNR = VBSET-BELNR.
XBSEG-GJAHR = VBSET-GJAHR.
XBSEG-BUZEI = NEW_LINE.
XBSEG-HKONT = TAX_INFO-HKONT.
XBSEG-WRBTR = VBSET-FWSTE.
XBSEG-DMBTR = VBSET-HWSTE.
XBSEG-SHKZG = VBSET-SHKZG.
XBSEG-MWSKZ = VBSET-MWSKZ.
IF VBSET-SHKZG = 'S'.
XBSEG-BSCHL = '40'.
ELSE.
XBSEG-BSCHL = '50'.
ENDIF.
APPEND XBSEG.
* Tax line만 추가..
CLEAR TAX_BSEG.
TAX_BSEG = XBSEG. APPEND TAX_BSEG.
NEW_LINE = NEW_LINE + 1.
CLEAR TAX_INFO. REFRESH TAX_INFO.
* 매입세액 불공제는 따로 보관해 둔다(비용계정 금액별 안분)
* 위 Function의 E_FWNAV 값이 세액불공제 금액 total 값임..
ELSEIF VBSET-MWSKZ = '43'.
N_DEDUCT-MWSKZ = VBSET-MWSKZ.
N_DEDUCT-AMT = VBSET-HWSTE.
COLLECT N_DEDUCT.
ENDIF.
ENDSELECT .
IF SY-SUBRC NE 0.
P_R_CODE = '4'.
ENDIF.
ENDFORM. " make_tax_line_from_vbset
*&---------------------------------------------------------------------*
*& Form make_tax_line_from_arap
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAKE_TAX_LINE_FROM_ARAP TABLES ALL_BSEG STRUCTURE BSEG
TAX_BSEG STRUCTURE BSEG.
* 추가라인으로 구성할수 없는 '매입세액 불공제'는 43 Tax code
* 를 가지고 있는 GL 계정들의 금액에 Tax 금액을 up시켜 주어야함.
CLEAR : N_DEDUCT, N_DEDUCT[].
LOOP AT XBSEG.
IF ( XBSEG-KOART = 'K' OR XBSEG-KOART = 'D' )
AND NOT XBSEG-WMWST IS INITIAL.
* -세금라인 구성(Collect시키기)
CLEAR TAX_INFO. REFRESH TAX_INFO.
CLEAR TMP_TAX.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = XBSEG-BUKRS
I_MWSKZ = XBSEG-MWSKZ
I_WAERS = XBKPF-WAERS
I_WRBTR = XBSEG-WRBTR "
TABLES
T_MWDAT = TAX_INFO.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF NOT TAX_INFO-HKONT IS INITIAL.
READ TABLE TAX_INFO INDEX 1.
TMP_TAX-BUKRS = XBSEG-BUKRS.
TMP_TAX-BELNR = XBSEG-BELNR.
TMP_TAX-GJAHR = XBSEG-GJAHR.
TMP_TAX-MWSKZ = XBSEG-MWSKZ.
TMP_TAX-HKONT = TAX_INFO-HKONT.
IF XBSEG-SHKZG = 'H'."AR/AP의 반대변에..
TMP_TAX-SHKZG = 'S'.
ELSE.
TMP_TAX-SHKZG = 'H'.
ENDIF.
TMP_TAX-FWSTE = XBSEG-WMWST. "전표통화세액(입력값)
* IF xbkpf-waers = 'KRW'.
TMP_TAX-HWSTE = XBSEG-MWSTS . "현지통화세액
* ENDIF.
COLLECT TMP_TAX.
ENDIF.
ENDIF.
* AP,AR line도 Gross금액이므로 그대로 라인추가한다.
ALL_BSEG = XBSEG.
APPEND ALL_BSEG.
* 매입세액 불공제의 경우는 따로 저장해 놓는다..
IF XBSEG-MWSKZ = '43'.
N_DEDUCT-MWSKZ = XBSEG-MWSKZ.
N_DEDUCT-AMT = XBSEG-MWSTS. "LC 세금
COLLECT N_DEDUCT.
ENDIF.
ELSE.
* -일반라인 구성
ALL_BSEG = XBSEG.
APPEND ALL_BSEG.
CONTINUE.
ENDIF.
ENDLOOP.
* Tax line 추가 하기
DESCRIBE TABLE ALL_BSEG LINES LINE_CNT.
NEW_LINE = LINE_CNT + 1.
LOOP AT TMP_TAX.
CLEAR ALL_BSEG.
ALL_BSEG-MANDT = SY-MANDT.
ALL_BSEG-BUKRS = TMP_TAX-BUKRS.
ALL_BSEG-BELNR = TMP_TAX-BELNR.
ALL_BSEG-GJAHR = TMP_TAX-GJAHR.
ALL_BSEG-BUZEI = NEW_LINE.
ALL_BSEG-HKONT = TMP_TAX-HKONT.
ALL_BSEG-WRBTR = TMP_TAX-FWSTE. "전표통화세액
ALL_BSEG-DMBTR = TMP_TAX-HWSTE. "현지통화세액
ALL_BSEG-SHKZG = TMP_TAX-SHKZG.
ALL_BSEG-MWSKZ = TMP_TAX-MWSKZ.
IF ALL_BSEG-SHKZG = 'S'.
ALL_BSEG-BSCHL = '40'.
ELSE.
ALL_BSEG-BSCHL = '50'.
ENDIF.
APPEND ALL_BSEG.
* Tax line만 추가..
CLEAR TAX_BSEG.
TAX_BSEG = XBSEG. APPEND TAX_BSEG.
NEW_LINE = NEW_LINE + 1.
ENDLOOP.
* 매입세액 불공제 금액 보정하기.(GL line item에 금액 up하기)
* all_bseg를 수정해 주면 됨.....
IF NOT N_DEDUCT[] IS INITIAL.
* all_bseg 의 GL line item(tax code=43)에 불공제금액 반영한다.
DATA : TOTAL_AMT LIKE BSEG-DMBTR, "총 불공제 금액
REST_AMT LIKE BSEG-DMBTR, "안분후 남은 금액
TAX_AMT LIKE BSEG-DMBTR, "안분할 불공제 금액
LAST_TABIX LIKE SY-TABIX. "마지막 나머지 금액 조정위해
READ TABLE N_DEDUCT INDEX 1. "43의 경우는 하나의 라인만 존재한다가정.
TOTAL_AMT = N_DEDUCT-AMT.
IF SY-SUBRC = 0.
LOOP AT ALL_BSEG WHERE KOART = 'S'
AND MWSKZ = '43'.
CLEAR : TAX_AMT, TAX_INFO, TAX_INFO[] .
LAST_TABIX = SY-TABIX.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
I_BUKRS = ALL_BSEG-BUKRS
I_MWSKZ = ALL_BSEG-MWSKZ
* I_TXJCD = ' '
I_WAERS = XBKPF-WAERS
I_WRBTR = ALL_BSEG-DMBTR
IMPORTING
E_FWNAV = TAX_AMT
* E_FWNVV =
* E_FWSTE =
* E_FWAST =
TABLES
T_MWDAT = TAX_INFO
EXCEPTIONS
BUKRS_NOT_FOUND = 1
COUNTRY_NOT_FOUND = 2
MWSKZ_NOT_DEFINED = 3
MWSKZ_NOT_VALID = 4
KTOSL_NOT_FOUND = 5
KALSM_NOT_FOUND = 6
PARAMETER_ERROR = 7
KNUMH_NOT_FOUND = 8
KSCHL_NOT_FOUND = 9
UNKNOWN_ERROR = 10
ACCOUNT_NOT_FOUND = 11
TXJCD_NOT_VALID = 12
OTHERS = 13.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
ALL_BSEG-DMBTR = ALL_BSEG-DMBTR + TAX_AMT .
IF XBKPF-WAERS = 'KRW'.
ALL_BSEG-WRBTR = ALL_BSEG-WRBTR + TAX_AMT.
ENDIF.
MODIFY ALL_BSEG INDEX LAST_TABIX.
TOTAL_AMT = TOTAL_AMT - TAX_AMT.
ENDIF.
ENDLOOP.
* 계산 단수차이로 인한 차이금액을 마지막라인에 보정해 준다.
IF TOTAL_AMT NE 0.
READ TABLE ALL_BSEG INDEX LAST_TABIX.
ALL_BSEG-DMBTR = ALL_BSEG-DMBTR + TOTAL_AMT.
IF XBKPF-WAERS = 'KRW'.
ALL_BSEG-WRBTR = ALL_BSEG-WRBTR + TOTAL_AMT.
ENDIF.
MODIFY ALL_BSEG INDEX LAST_TABIX.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " make_tax_line_from_arap
*&---------------------------------------------------------------------*
*& Form make_tax_line_by_auto
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM MAKE_TAX_LINE_BY_AUTO
TABLES ALL_BSEG STRUCTURE BSEG
TAX_BSEG STRUCTURE BSEG.
DATA : FWAST LIKE BSET-FWSTE. "Deductible Tax amt..
LOOP AT XBSEG.
IF XBSEG-KOART NE 'S' OR XBSEG-MWSKZ IS INITIAL.
ALL_BSEG = XBSEG.
APPEND ALL_BSEG.
CONTINUE.
* GL 계정을 기준으로 Tax amount 계산한다.
ELSE.
CLEAR TAX_INFO. REFRESH TAX_INFO.
CLEAR TMP_TAX. CLEAR FWAST.
CALL FUNCTION 'CALCULATE_TAX_FROM_GROSSAMOUNT'
EXPORTING
I_BUKRS = XBSEG-BUKRS
I_MWSKZ = XBSEG-MWSKZ
I_WAERS = XBKPF-WAERS
I_WRBTR = XBSEG-WRBTR "
IMPORTING
E_FWAST = FWAST
TABLES
T_MWDAT = TAX_INFO.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
IF NOT TAX_INFO-HKONT IS INITIAL AND
NOT FWAST IS INITIAL.
READ TABLE TAX_INFO INDEX 1.
TMP_TAX-BUKRS = XBSEG-BUKRS.
TMP_TAX-BELNR = XBSEG-BELNR.
TMP_TAX-GJAHR = XBSEG-GJAHR.
TMP_TAX-MWSKZ = XBSEG-MWSKZ.
TMP_TAX-HKONT = TAX_INFO-HKONT.
TMP_TAX-SHKZG = XBSEG-SHKZG."GL계정과 동일하게 한다..
TMP_TAX-FWSTE = TAX_INFO-WMWST. "전표통화세액
IF XBKPF-WAERS = 'KRW'.
TMP_TAX-HWSTE = TAX_INFO-WMWST . "현지통화세액
ENDIF.
COLLECT TMP_TAX.
ENDIF.
ENDIF.
* 원래의 bseg line item금액 수정한다(세액 감하기)=> 계정존재시만..
ALL_BSEG = XBSEG.
IF NOT TAX_INFO-HKONT IS INITIAL AND
NOT FWAST IS INITIAL.
ALL_BSEG-WRBTR = ALL_BSEG-WRBTR - TAX_INFO-WMWST.
IF XBKPF-WAERS = 'KRW'.
ALL_BSEG-DMBTR = ALL_BSEG-DMBTR - TAX_INFO-WMWST.
ENDIF.
ENDIF.
APPEND ALL_BSEG.
ENDIF.
ENDLOOP.
* Tax line 추가 하기
DESCRIBE TABLE ALL_BSEG LINES LINE_CNT.
NEW_LINE = LINE_CNT + 1.
LOOP AT TMP_TAX.
CLEAR ALL_BSEG.
ALL_BSEG-MANDT = SY-MANDT.
ALL_BSEG-BUKRS = TMP_TAX-BUKRS.
ALL_BSEG-BELNR = TMP_TAX-BELNR.
ALL_BSEG-GJAHR = TMP_TAX-GJAHR.
ALL_BSEG-BUZEI = NEW_LINE.
ALL_BSEG-HKONT = TMP_TAX-HKONT.
ALL_BSEG-WRBTR = TMP_TAX-FWSTE. "전표통화세액
ALL_BSEG-DMBTR = TMP_TAX-HWSTE. "현지통화세액
ALL_BSEG-SHKZG = TMP_TAX-SHKZG.
ALL_BSEG-MWSKZ = TMP_TAX-MWSKZ.
IF ALL_BSEG-SHKZG = 'S'.
ALL_BSEG-BSCHL = '40'.
ELSE.
ALL_BSEG-BSCHL = '50'.
ENDIF.
APPEND ALL_BSEG.
* Tax line만 추가..
CLEAR TAX_BSEG.
TAX_BSEG = XBSEG. APPEND TAX_BSEG.
NEW_LINE = NEW_LINE + 1.
ENDLOOP.
ENDFORM. " make_tax_line_by_auto
*&---------------------------------------------------------------------*
*& Form adjust_gl_line_non_deductible
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_T_BSEG text
*----------------------------------------------------------------------*
FORM ADJUST_GL_LINE_NON_DEDUCTIBLE.
* xbseg 의 GL line item(tax code=43)에 불공제금액 반영한다.
DATA : TOTAL_AMT LIKE BSEG-DMBTR, "총 불공제 금액
REST_AMT LIKE BSEG-DMBTR, "안분후 남은 금액
TAX_AMT LIKE BSEG-DMBTR, "안분할 불공제 금액
LAST_TABIX LIKE SY-TABIX. "마지막 나머지 금액 조정위해
READ TABLE N_DEDUCT INDEX 1. "43의 경우는 하나의 라인만 존재한다가정.
TOTAL_AMT = N_DEDUCT-AMT.
IF SY-SUBRC = 0.
LOOP AT XBSEG WHERE KOART = 'S'
AND MWSKZ = '43'.
CLEAR : TAX_AMT, TAX_INFO, TAX_INFO[] .
LAST_TABIX = SY-TABIX.
CALL FUNCTION 'CALCULATE_TAX_FROM_NET_AMOUNT'
EXPORTING
I_BUKRS = XBSEG-BUKRS
I_MWSKZ = XBSEG-MWSKZ
* I_TXJCD = ' '
I_WAERS = XBKPF-WAERS
I_WRBTR = XBSEG-DMBTR
IMPORTING
E_FWNAV = TAX_AMT
* E_FWNVV =
* E_FWSTE =
* E_FWAST =
TABLES
T_MWDAT = TAX_INFO
EXCEPTIONS
BUKRS_NOT_FOUND = 1
COUNTRY_NOT_FOUND = 2
MWSKZ_NOT_DEFINED = 3
MWSKZ_NOT_VALID = 4
KTOSL_NOT_FOUND = 5
KALSM_NOT_FOUND = 6
PARAMETER_ERROR = 7
KNUMH_NOT_FOUND = 8
KSCHL_NOT_FOUND = 9
UNKNOWN_ERROR = 10
ACCOUNT_NOT_FOUND = 11
TXJCD_NOT_VALID = 12
OTHERS = 13.
IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ELSE.
XBSEG-DMBTR = XBSEG-DMBTR + TAX_AMT .
IF XBKPF-WAERS = 'KRW'.
XBSEG-WRBTR = XBSEG-WRBTR + TAX_AMT.
ENDIF.
MODIFY XBSEG INDEX LAST_TABIX.
TOTAL_AMT = TOTAL_AMT - TAX_AMT.
ENDIF.
ENDLOOP.
* 계산 단수차이로 인한 차이금액을 마지막라인에 보정해 준다.
IF TOTAL_AMT NE 0.
READ TABLE XBSEG INDEX LAST_TABIX.
XBSEG-DMBTR = XBSEG-DMBTR + TOTAL_AMT.
IF XBKPF-WAERS = 'KRW'.
XBSEG-WRBTR = XBSEG-WRBTR + TOTAL_AMT.
ENDIF.
MODIFY XBSEG INDEX LAST_TABIX.
ENDIF.
ENDIF.
ENDFORM. " adjust_gl_line_non_deductible
*&---------------------------------------------------------------------*
*& Form GET_W1W2
*&---------------------------------------------------------------------*
* K가있는경우 원천세,주민세를 구한다.
*----------------------------------------------------------------------*
FORM CREATE_WITH_ITEM TABLES LT_BKPF STRUCTURE BKPF
LT_BSEG STRUCTURE BSEG
USING P_BUKRS.
DATA BEGIN OF LT_WITH_ITEM OCCURS 1.
INCLUDE STRUCTURE WITH_ITEMX .
DATA END OF LT_WITH_ITEM.
DATA LX_BSEG LIKE BSEG.
DATA LT_BSET LIKE BSET OCCURS 0 WITH HEADER LINE .
DATA : LV_COUNT(3) TYPE N,
LV_TABIX TYPE I.
READ TABLE LT_BSEG WITH KEY KOART = 'K'.
CHECK SY-SUBRC EQ 0.
LV_TABIX = SY-TABIX.
CALL FUNCTION 'FI_CHECK_EXTENDED_WT'
EXPORTING
I_BUKRS = P_BUKRS
EXCEPTIONS
COMPONENT_NOT_ACTIVE = 1
NOT_FOUND = 2
OTHERS = 3.
IF SY-SUBRC = 0.
CALL FUNCTION 'FI_WT_PUT_X_WITH_ITEM'
TABLES
T_WITH_ITEM = LT_WITH_ITEM
EXCEPTIONS
OTHERS = 1.
LOOP AT LT_BSEG WHERE KOART CA 'DK'.
CALL FUNCTION 'FI_WT_RECONSTRUCT_REFERENCEDOC'
EXPORTING
I_BSEG = LT_BSEG
IMPORTING
E_BSEG = LX_BSEG
EXCEPTIONS
OTHERS = 1.
ENDLOOP.
CALL FUNCTION 'FI_WT_FB01_CALCULATE_WT'
EXPORTING
I_AKTYP = 'H'
I_DYNCL = 'V'
TABLES
I_BKPF = LT_BKPF
I_BSEG = LT_BSEG
I_BSET = LT_BSET
EXCEPTIONS
OTHERS = 1.
CALL FUNCTION 'FI_WT_GET_X_WITH_ITEM'
TABLES
T_WITH_ITEM = LT_WITH_ITEM
EXCEPTIONS
OTHERS = 1.
DESCRIBE TABLE LT_BSEG LINES LV_COUNT.
LOOP AT LT_WITH_ITEM WHERE WT_QBSHB NE 0.
CASE LT_WITH_ITEM-WITHT.
WHEN 'K1'.
CLEAR : LT_BSEG-ZTERM.
LT_BSEG-QSSKZ = LT_WITH_ITEM-WT_WITHCD.
LT_BSEG-SAKNR = LT_BSEG-HKONT = '0000214110' .
LT_BSEG-KOART = 'S'.
LT_BSEG-DMBTR = ABS( LT_WITH_ITEM-WT_QBSHH ).
LT_BSEG-WRBTR = ABS( LT_WITH_ITEM-WT_QBSHB ).
LT_BSEG-BUZEI = LV_COUNT + 1.
WHEN 'K2'.
CLEAR : LT_BSEG-ZTERM.
LT_BSEG-QSSKZ = LT_WITH_ITEM-WT_WITHCD.
LT_BSEG-SAKNR = LT_BSEG-HKONT = '0000214120' .
LT_BSEG-KOART = 'S'.
LT_BSEG-DMBTR = ABS( LT_WITH_ITEM-WT_QBSHH ).
LT_BSEG-WRBTR = ABS( LT_WITH_ITEM-WT_QBSHB ).
LT_BSEG-BUZEI = LV_COUNT + 2.
ENDCASE.
IF LT_BSEG-SHKZG = 'H'.
LT_BSEG-BSCHL = '50'.
ELSE.
LT_BSEG-BSCHL = '40'.
ENDIF.
APPEND LT_BSEG.
ENDLOOP.
IF SY-SUBRC EQ 0.
LT_BSEG-QSSKZ = LT_WITH_ITEM-WT_WITHCD.
MODIFY LT_BSEG INDEX LV_TABIX TRANSPORTING QSSKZ.
ENDIF.
ENDIF.
ENDFORM. " GET_W1W2
alv리스트를 메일로 보내기
DATA : it_abaplist TYPE TABLE OF abaplist.
DATA : it_html TYPE TABLE OF w3html.
DATA : lv_line TYPE sy-tabix.
DATA: objpack LIKE STANDARD TABLE OF sopcklsti1 WITH HEADER LINE,
tab_lines TYPE i,
doc_chng LIKE sodocchgi1,
objhead LIKE STANDARD TABLE OF solisti1 WITH HEADER LINE,
mail LIKE STANDARD TABLE OF solisti1 WITH HEADER LINE,
reclist LIKE STANDARD TABLE OF somlreci1 WITH HEADER LINE.
DELETE FROM MEMORY ID 'XXX'.
* internal table에 담아 처리해도되고( 이 경우 submit프로그램에서 import를 받아처리한다)
* submit 프로그램에서 처리해도 상관없다.
EXPORT gt_itab TO MEMORY ID 'XXX'.
DELETE FROM MEMORY ID '%_LIST'.
* ALV로 리스트를 뿌릴 프로그램을 SUBMIT한다.
SUBMIT ZXXXXXX WITH p_bukrs = p_bukrs
WITH p_batch = 'X'
AND RETURN EXPORTING LIST TO MEMORY.
FREE it_abaplist.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = it_abaplist
EXCEPTIONS
not_found = 1
OTHERS = 2.
" HTML 로 변경
FREE it_html.
CALL FUNCTION 'WWW_HTML_FROM_LISTOBJECT'
TABLES
html = it_html
listobject = it_abaplist.
* ------------------------------------------
doc_chng-obj_name = 'URGENT'.
doc_chng-sensitivty = 'O'.
CONCATENATE '[개인기준]' p_sdate '기준 미처리 증빙 내역' INTO doc_chng-obj_descr
SEPARATED BY space.
doc_chng-obj_langu = '3'.
** objhead = '파일제목'.
APPEND objhead.
* ------------------------------------------
FREE mail.
mail[] = it_html[].
CLEAR lv_line.
DESCRIBE TABLE mail LINES lv_line.
*
CLEAR: objpack.
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = lv_line.
objpack-doc_type = 'HTM'.
objpack-obj_descr = '메일제목'.
objpack-doc_size = lv_line * 255.
objpack-obj_langu = '3'.
APPEND objpack.
CLEAR: reclist.
reclist-receiver = ls_ztficd10-email.
reclist-rec_type = 'U'.
APPEND reclist.
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
document_data = doc_chng " 메일 제목
document_type = 'HTM'
put_in_outbox = 'X'
commit_work = 'X'
* IP_ENCRYPT =
* IP_SIGN =
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =
TABLES
object_header = objhead
object_content = mail
* CONTENTS_HEX =
* OBJECT_PARA =
* OBJECT_PARB =
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
DATA : it_html TYPE TABLE OF w3html.
DATA : lv_line TYPE sy-tabix.
DATA: objpack LIKE STANDARD TABLE OF sopcklsti1 WITH HEADER LINE,
tab_lines TYPE i,
doc_chng LIKE sodocchgi1,
objhead LIKE STANDARD TABLE OF solisti1 WITH HEADER LINE,
mail LIKE STANDARD TABLE OF solisti1 WITH HEADER LINE,
reclist LIKE STANDARD TABLE OF somlreci1 WITH HEADER LINE.
DELETE FROM MEMORY ID 'XXX'.
* internal table에 담아 처리해도되고( 이 경우 submit프로그램에서 import를 받아처리한다)
* submit 프로그램에서 처리해도 상관없다.
EXPORT gt_itab TO MEMORY ID 'XXX'.
DELETE FROM MEMORY ID '%_LIST'.
* ALV로 리스트를 뿌릴 프로그램을 SUBMIT한다.
SUBMIT ZXXXXXX WITH p_bukrs = p_bukrs
WITH p_batch = 'X'
AND RETURN EXPORTING LIST TO MEMORY.
FREE it_abaplist.
CALL FUNCTION 'LIST_FROM_MEMORY'
TABLES
listobject = it_abaplist
EXCEPTIONS
not_found = 1
OTHERS = 2.
" HTML 로 변경
FREE it_html.
CALL FUNCTION 'WWW_HTML_FROM_LISTOBJECT'
TABLES
html = it_html
listobject = it_abaplist.
* ------------------------------------------
doc_chng-obj_name = 'URGENT'.
doc_chng-sensitivty = 'O'.
CONCATENATE '[개인기준]' p_sdate '기준 미처리 증빙 내역' INTO doc_chng-obj_descr
SEPARATED BY space.
doc_chng-obj_langu = '3'.
** objhead = '파일제목'.
APPEND objhead.
* ------------------------------------------
FREE mail.
mail[] = it_html[].
CLEAR lv_line.
DESCRIBE TABLE mail LINES lv_line.
*
CLEAR: objpack.
objpack-transf_bin = 'X'.
objpack-head_start = 1.
objpack-head_num = 0.
objpack-body_start = 1.
objpack-body_num = lv_line.
objpack-doc_type = 'HTM'.
objpack-obj_descr = '메일제목'.
objpack-doc_size = lv_line * 255.
objpack-obj_langu = '3'.
APPEND objpack.
CLEAR: reclist.
reclist-receiver = ls_ztficd10-email.
reclist-rec_type = 'U'.
APPEND reclist.
CALL FUNCTION 'SO_NEW_DOCUMENT_SEND_API1'
EXPORTING
document_data = doc_chng " 메일 제목
document_type = 'HTM'
put_in_outbox = 'X'
commit_work = 'X'
* IP_ENCRYPT =
* IP_SIGN =
* IMPORTING
* SENT_TO_ALL =
* NEW_OBJECT_ID =
TABLES
object_header = objhead
object_content = mail
* CONTENTS_HEX =
* OBJECT_PARA =
* OBJECT_PARB =
receivers = reclist
EXCEPTIONS
too_many_receivers = 1
document_not_sent = 2
document_type_not_exist = 3
operation_no_authorization = 4
parameter_error = 5
x_error = 6
enqueue_error = 7
OTHERS = 8.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
전표 첨부파일 리스트
DATA : ls_object TYPE sibflporb,
lv_save TYPE sgs_flag.
ls_object-instid = p_bukrs && lv_belnr && lv_gjahr.
ls_object-typeid = 'BKPF'.
ls_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = ls_object
ip_mode = 'E'
ip_attachments = 'X'
IMPORTING
ep_save_request = lv_save.
lv_save TYPE sgs_flag.
ls_object-instid = p_bukrs && lv_belnr && lv_gjahr.
ls_object-typeid = 'BKPF'.
ls_object-catid = 'BO'.
CALL FUNCTION 'GOS_ATTACHMENT_LIST_POPUP'
EXPORTING
is_object = ls_object
ip_mode = 'E'
ip_attachments = 'X'
IMPORTING
ep_save_request = lv_save.
피드 구독하기:
글 (Atom)