客户主数据批导

*&---------------------------------------------------------------------*
*& Include ZSDB0002_FILE_INCLUDE
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form frm_get_fn
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_get_fn .

CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
* DEF_FILENAME = ' '
* DEF_PATH = ' '
mask = ',*.txt.'
mode = 'O'
title = '客户主数据'
IMPORTING
filename = p_fn
* RC =
EXCEPTIONS
inv_winsys = 1
no_batch = 2
selection_cancel = 3
selection_error = 4
OTHERS = 5.
IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

ENDFORM. "frm_get_fn
*&---------------------------------------------------------------------*
*& Form frm_get_logfn
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
*FORM frm_get_logfn .
*
* CALL FUNCTION 'WS_FILENAME_GET'
* EXPORTING
** DEF_FILENAME = ' '
** DEF_PATH = ' '
* mask = ',*.txt.'
* mode = 'O'
* title = '日志文件'
* IMPORTING
* filename = p_logfn
** RC =
* EXCEPTIONS
* inv_winsys = 1
* no_batch = 2
* selection_cancel = 3
* selection_error = 4
* OTHERS = 5.
* IF sy-subrc <> 0.
** MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
** WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
*
*ENDFORM. "frm_get_logfn
*&---------------------------------------------------------------------*
*& Form frm_chech_filename
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_chech_filename .
IF p_fn IS INITIAL.
MESSAGE i010."主数据文件,路径和文件名,不能为空!
STOP.
ENDIF.
ENDFORM. "frm_chech_filename
*&---------------------------------------------------------------------*
*& Form frm_upload_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_upload_data TABLES fu_data.

REFRESH fu_data[].
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
* CODEPAGE = ' '
filename = p_fn
filetype = 'DAT'
* HEADLEN = ' '
* LINE_EXIT = ' '
* TRUNCLEN = ' '
* USER_FORM = ' '
* USER_PROG = ' '
* DAT_D_FORMAT = ' '
* IMPORTING
* FILELENGTH =
TABLES
data_tab = fu_data[]
EXCEPTIONS
conversion_error = 1
file_open_error = 2
file_read_error = 3
invalid_type = 4
no_batch = 5
unknown_error = 6
invalid_table_width = 7
gui_refuse_filetransfer = 8
customer_error = 9
no_authority = 10
OTHERS = 11
.
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 fu_data[] IS INITIAL.
MESSAGE '文件为空!' TYPE 'I'.
STOP.
ENDIF.

ENDFORM. "frm_upload_data

*&---------------------------------------------------------------------*
*& Form frm_fill_partner
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM frm_fill_partner_data.
REFRESH lt_cust.
DATA:lt_data TYPE STANDARD TABLE OF ty_knvp,
lw_data TYPE ty_knvp.
REFRESH lt_data.
LOOP AT t_partner INTO w_partner.
lwa_cust-header-object_task = 'C'.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_partner-kunnr
IMPORTING
output = lwa_cust-header-object_instance-kunnr.
* lwa_cust-header-object_instance-kunnr = w_partner-kunnr.
CLEAR lwa_sale.
REFRESH lt_sale.
lwa_sale-task = 'U'.
lwa_sale-data_key-vkorg = w_partner-vkorg.
lwa_sale-data_key-vtweg = w_partner-vtweg.
lwa_sale-data_key-spart = w_partner-spart.
* lwa_cust-central_data-central-data-ktokd = 'Z002'."账户组
* lwa_cust-central_data-central-datax-ktokd = 'X'.
REFRESH lt_functions.
CLEAR w_knvp.
MOVE-CORRESPONDING w_partner TO w_knvp.
PERFORM frm_fill_partner01 USING w_partner-parvw_zp w_partner-kunnr_zp w_knvp.
PERFORM frm_fill_partner01 USING w_partner-parvw_sm w_partner-kunnr_sm w_knvp.
PERFORM frm_fill_partner01 USING w_partner-parvw_we w_partner-kunnr_we w_knvp.

lwa_sale-functions-functions = lt_functions.

APPEND lwa_sale TO lt_sale.
CLEAR lwa_sale.
lwa_cust-sales_data-sales = lt_sale.
REFRESH lt_sale.
APPEND lwa_cust TO lt_cust.
MOVE-CORRESPONDING w_partner TO lw_data.
APPEND lw_data TO lt_data.
CLEAR lw_data.

CLEAR lwa_cust.

ENDLOOP.
ls_main-customers = lt_cust.
PERFORM frm_write_data_sap TABLES lt_data.
FREE ls_main.
REFRESH lt_cust.
ENDFORM. "frm_fill_partner
*&---------------------------------------------------------------------*
*& Form FRM_INPUT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_fill_data .
* 主数据
DATA:lt_data TYPE STANDARD TABLE OF ty_knvp,
lw_data TYPE ty_knvp.
REFRESH lt_cust.
data:l_kunnr1 type knvp-kunnr.
DATA:l_kunnr TYPE kna1-kunnr.
DATA:lt_kna1 TYPE STANDARD TABLE OF kna1.
DATA:lw_kna1 TYPE kna1.

*切割数据
"客户+公司信息
LOOP AT t_data INTO w_data.
MOVE-CORRESPONDING w_data TO w_basis.
MOVE-CORRESPONDING w_data TO w_com.
MOVE-CORRESPONDING w_data TO w_org.
APPEND w_basis TO t_basis.
APPEND w_com TO t_com.
APPEND w_org TO t_org.
CLEAR:w_com,w_org,w_basis,w_data.
ENDLOOP.
SORT t_basis BY kunnr.
SORT t_org BY kunnr vkorg vtweg spart.
SORT t_com BY kunnr bukrs.
"客户+基本信息
DELETE ADJACENT DUPLICATES FROM t_basis COMPARING kunnr.
DELETE ADJACENT DUPLICATES FROM t_org COMPARING kunnr vkorg vtweg spart .
DELETE ADJACENT DUPLICATES FROM t_com COMPARING kunnr bukrs.
"客户+销售组织信息

LOOP AT t_basis INTO w_basis.
"判定该客户是否存在



"获取默认合作伙伴
REFRESH t_tpakd.
SELECT *
FROM tpakd
INTO CORRESPONDING FIELDS OF TABLE t_tpakd
WHERE ktokd = w_basis-ktokd.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_basis-kunnr
IMPORTING
output = lwa_cust-header-object_instance-kunnr.
CLEAR l_kunnr.
SELECT SINGLE kunnr
FROM kna1
INTO l_kunnr
WHERE kunnr = lwa_cust-header-object_instance-kunnr.
* lwa_cust-header-object_instance-kunnr = w_data-kunnr."客户编码

lwa_cust-central_data-central-data-ktokd = w_basis-ktokd."账户组
IF l_kunnr IS INITIAL.
lwa_cust-header-object_task = 'I'.
ELSE.
lwa_cust-header-object_task = 'M'.

ENDIF.


lwa_cust-central_data-central-data-brsch = w_basis-brsch."行业
lwa_cust-central_data-central-data-umsa1 = w_basis-umsa1.
lwa_cust-central_data-central-data-kukla = w_basis-kukla.
lwa_cust-central_data-central-data-katr1 = w_basis-katr1.
lwa_cust-central_data-central-data-katr2 = w_basis-katr2.
lwa_cust-central_data-central-data-katr3 = w_basis-katr3.
lwa_cust-central_data-central-data-katr6 = w_basis-katr6.
lwa_cust-central_data-central-data-uwaer = w_basis-uwaer.
lwa_cust-central_data-central-data-stceg = w_basis-stceg."增值税号
lwa_cust-central_data-central-data-umjah = w_basis-umjah."货币

lwa_cust-central_data-central-datax-katr1 = 'X'.
lwa_cust-central_data-central-datax-katr2 = 'X'.
lwa_cust-central_data-central-datax-katr3 = 'X'.
lwa_cust-central_data-central-datax-katr6 = 'X'.
lwa_cust-central_data-central-datax-brsch = 'X'.
lwa_cust-central_data-central-datax-umsa1 = 'X'.
lwa_cust-central_data-central-datax-uwaer = 'X'."货币
lwa_cust-central_data-central-datax-umjah = 'X'."货币
lwa_cust-central_data-central-data-civve = 'X'.
lwa_cust-central_data-central-datax-ktokd = 'X'.
lwa_cust-central_data-central-datax-civve = 'X'.
* 地址数据
lwa_cust-central_data-address-task = con_insert.
lwa_cust-central_data-address-postal-data-title = w_basis-chhu.
lwa_cust-central_data-address-postal-data-name = w_basis-name1.
lwa_cust-central_data-address-postal-data-name_2 = w_basis-name2.
lwa_cust-central_data-address-postal-data-street = w_basis-street.
lwa_cust-central_data-address-postal-data-region = w_basis-regio.
lwa_cust-central_data-address-postal-data-langu = sy-langu.
lwa_cust-central_data-address-postal-data-country = w_basis-land1.
lwa_cust-central_data-address-postal-data-sort1 = w_basis-sortl.
lwa_cust-central_data-address-postal-datax-sort1 = 'X'.
lwa_cust-central_data-address-postal-data-sort2 = w_basis-sort2.
lwa_cust-central_data-address-postal-datax-sort2 = 'X'.
lwa_cust-central_data-address-postal-datax-title = 'X'.
lwa_cust-central_data-address-postal-datax-name = 'X'.
lwa_cust-central_data-address-postal-datax-name_2 = 'X'.
lwa_cust-central_data-address-postal-datax-langu = 'X'.
lwa_cust-central_data-address-postal-datax-country = 'X'.
lwa_cust-central_data-address-postal-datax-street = 'X'.
lwa_cust-central_data-address-postal-datax-region = 'X'.
*地址注释
CLEAR lwa_remark.
REFRESH lt_remark.
lwa_remark-task = con_insert.
lwa_remark-data-langu = sy-langu.
lwa_remark-data-adr_notes = w_basis-remark.
lwa_remark-datax-langu = 'X'.
lwa_remark-datax-adr_notes = 'X'.
APPEND lwa_remark TO lt_remark.
lwa_cust-central_data-address-remark-remarks = lt_remark.

*电话
CLEAR:lwa_phone.
REFRESH lt_phone.
lwa_phone-contact-task = con_insert.
lwa_phone-contact-data-telephone = w_basis-tel.
lwa_phone-contact-datax-telephone = 'X'.
APPEND lwa_phone TO lt_phone.
lwa_cust-central_data-address-communication-phone-phone = lt_phone.
*传真
CLEAR:lwa_fax.
REFRESH lt_fax.
lwa_fax-contact-task = con_insert.
lwa_fax-contact-data-fax = w_basis-fax.
lwa_fax-contact-datax-fax = 'X'.
APPEND lwa_fax TO lt_fax.
lwa_cust-central_data-address-communication-fax-fax = lt_fax.

*电子邮件
CLEAR:lwa_mail.
REFRESH lt_mail.
lwa_mail-contact-task = con_insert.
lwa_mail-contact-data-e_mail = w_basis-smtp.
lwa_mail-contact-datax-e_mail = 'X'.
APPEND lwa_mail TO lt_mail.
lwa_cust-central_data-address-communication-smtp-smtp = lt_mail.

*联系人1
*CLEAR:g_parnr.
*CALL FUNCTION 'NUMBER_GET_NEXT'
* EXPORTING
* nr_range_nr = 'AP'
* object = 'PARTNER'
* quantity = '1'
* IMPORTING
* number = g_parnr
* EXCEPTIONS
* interval_not_found = 1
* number_range_not_intern = 2
* object_not_found = 3
* quantity_is_0 = 4
* quantity_is_not_1 = 5
* interval_overflow = 6
* buffer_overflow = 7
* OTHERS = 8.
*
*lwa_contact-task = 'I'.
*lwa_contact-address_type_3-task = 'I'.
*lwa_contact-data_key-parnr = g_parnr.
*lwa_contact-address_type_3-postal-data-firstname = 'aa'.
*lwa_contact-address_type_3-postal-data-lastname = 'bb'.
*lwa_contact-address_type_3-postal-datax-firstname = 'X'.
*lwa_contact-address_type_3-postal-datax-lastname = 'X'.
*
*"联系人电话
*
*lwa_phone1-contact-task = 'I'.
*lwa_phone1-contact-data-telephone = '89999888'.
*lwa_phone1-contact-data-extension = '3434343'.
*lwa_phone1-contact-datax-extension = 'X'.
*lwa_phone1-contact-datax-telephone = 'X'.
*APPEND lwa_phone1 TO lt_phone1.
*
*lwa_contact-address_type_3-communication-phone-phone = lt_phone1.
*APPEND lwa_contact TO lt_contact.

REFRESH lt_contact.
PERFORM frm_fill_contact USING w_basis-name11 w_basis-telf11.
PERFORM frm_fill_contact USING w_basis-name12 w_basis-telf12.
PERFORM frm_fill_contact USING w_basis-name13 w_basis-telf13.
lwa_cust-central_data-contact-contacts = lt_contact.

*会计注释
* CLEAR:lwa_text.
REFRESH lt_text.
* CLEAR:lwa_content.
* REFRESH lt_content.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = '0002'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = 'TEST001'.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
*
* APPEND lwa_text TO lt_text.

*备注
* REFRESH lt_content.
* CLEAR lwa_content.
* CLEAR lwa_text.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z301'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = 'TEST002'.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
*
* APPEND lwa_text TO lt_text.
PERFORM frm_fill_text USING 'Z301' w_basis-zbz.
*有无店招广告
* REFRESH lt_content.
* REFRESH lt_content.
* CLEAR lwa_content.
* CLEAR lwa_text.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z302'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = 'TEST003'.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
* APPEND lwa_text TO lt_text.
PERFORM frm_fill_text USING 'Z302' w_basis-zywgg.
lwa_cust-central_data-text-texts = lt_text.

REFRESH lt_company.
* 公司代码数据
LOOP AT t_com INTO w_com WHERE kunnr = w_basis-kunnr.
CLEAR lwa_company.

lwa_company-task = 'M'.
lwa_company-data_key-bukrs = w_com-bukrs.
* lwa_company-data-zuawa = '001'.
lwa_company-data-akont = w_com-akont.
* lwa_company-datax-zuawa = 'X'.
lwa_company-datax-akont = 'X'.
APPEND lwa_company TO lt_company.
CLEAR:w_com.
ENDLOOP.
lwa_cust-company_data-company = lt_company.
*销售数据
"销售数据文本
*称重要求
*tax

REFRESH lt_sale.

LOOP AT t_org INTO w_org WHERE kunnr = w_basis-kunnr.
CLEAR lwa_sale.

REFRESH lt_text.
PERFORM frm_fill_text USING 'Z201' w_org-zbz.
* REFRESH lt_content.
* CLEAR:lwa_text,lwa_content.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z201'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = w_data-zczyq.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
* APPEND lwa_text TO lt_text.
PERFORM frm_fill_text USING 'Z202' w_org-zbz.
* REFRESH lt_content.
* CLEAR:lwa_text,lwa_content.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z202'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = w_data-zqyg.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
* APPEND lwa_text TO lt_text.
PERFORM frm_fill_text USING 'Z203' w_org-zmdg.
* REFRESH lt_content.
* CLEAR:lwa_text,lwa_content.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z203'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = w_data-zmdg.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
* APPEND lwa_text TO lt_text.

* REFRESH lt_content.
*
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z204'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = w_data-zmdd.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
*
* APPEND lwa_text TO lt_text.

* REFRESH lt_content.
* CLEAR:lwa_text,lwa_content.
* lwa_text-task = 'M'.
* lwa_text-data_key-text_id = 'Z205'.
* lwa_text-data_key-langu = sy-langu.
* lwa_content-tdformat = '*'.
* lwa_content-tdline = w_data-zdttj.
* APPEND lwa_content TO lt_content.
* CLEAR lwa_content.
* lwa_text-data = lt_content.
* APPEND lwa_text TO lt_text.
PERFORM frm_fill_text USING 'Z205' w_org-zdttj.
lwa_sale-texts-texts = lt_text.

lwa_sale-task = 'M'.
lwa_sale-data_key-vkorg = w_org-vkorg.
lwa_sale-data_key-vtweg = w_org-vtweg.
lwa_sale-data_key-spart = w_org-spart.
lwa_sale-data-zterm = w_org-zterm.
lwa_sale-data-vkgrp = w_org-vkgrp.
lwa_sale-data-vkbur = w_org-vkbur.
lwa_sale-data-waers = w_org-waers.
lwa_sale-data-kvgr1 = w_org-kvgr1.
lwa_sale-data-kvgr2 = w_org-kvgr2.
lwa_sale-data-inco1 = w_org-inco1.
lwa_sale-data-inco2 = w_org-inco2.
lwa_sale-data-bzirk = w_org-bzirk.
lwa_sale-data-kdgrp = w_org-kdgrp."客户组
lwa_sale-data-versg = w_org-versg."客户统计组
lwa_sale-data-vsbed = w_org-vsbed."装运条件
lwa_sale-data-vwerk = w_org-vwerk.
lwa_sale-data-ktgrd = w_org-ktgrd."账户分配
lwa_sale-data-klabc = w_org-klabc."ABC等级
lwa_sale-data-konda = w_org-konda."价格租
lwa_sale-data-pltyp = w_org-pltyp."价格清单
IF w_org-konda IS NOT INITIAL.
lwa_sale-datax-konda = 'X'."价格租
ENDIF.
IF w_org-pltyp IS NOT INITIAL.
lwa_sale-datax-pltyp = 'X'."价格清单
ENDIF.
IF w_org-klabc IS NOT INITIAL.
lwa_sale-datax-klabc = 'X'."ABC等级
ENDIF.
IF w_org-zterm IS NOT INITIAL.
lwa_sale-datax-zterm = 'X'.
ENDIF.
IF w_org-vkgrp IS NOT INITIAL.
lwa_sale-datax-vkgrp = 'X'.
ENDIF.
IF w_org-vkbur IS NOT INITIAL.
lwa_sale-datax-vkbur = 'X'.
ENDIF.
IF w_org-waers IS NOT INITIAL.
lwa_sale-datax-waers = 'X'.
ENDIF.
IF w_org-kvgr1 IS NOT INITIAL.
lwa_sale-datax-kvgr1 = 'X'.
ENDIF.
IF w_org-kvgr2 IS NOT INITIAL.
lwa_sale-datax-kvgr2 = 'X'.
ENDIF.
IF w_org-inco1 IS NOT INITIAL.
lwa_sale-datax-inco1 = 'X'.
ENDIF.
IF w_org-inco2 IS NOT INITIAL.
lwa_sale-datax-inco2 = 'X'.
ENDIF.
IF w_org-bzirk IS NOT INITIAL.
lwa_sale-datax-bzirk = 'X'.
ENDIF.
IF w_org-kdgrp IS NOT INITIAL.
lwa_sale-datax-kdgrp = 'X'."客户组
ENDIF.
IF w_org-versg IS NOT INITIAL.
lwa_sale-datax-versg = 'X'."客户统计组
ENDIF.
IF w_org-vsbed IS NOT INITIAL.
lwa_sale-datax-vsbed = 'X'."装运条件
ENDIF.
IF w_org-vwerk IS NOT INITIAL.
lwa_sale-datax-vwerk = 'X'.
ENDIF.
IF w_org-ktgrd IS NOT INITIAL.
lwa_sale-datax-ktgrd = 'X'."账户分配
ENDIF.

REFRESH lt_functions.
CLEAR w_knvp.
MOVE-CORRESPONDING w_org TO w_knvp.

LOOP AT t_tpakd INTO w_tpakd.
select SINGLE kunnr FROM knvp INTO l_kunnr1 WHERE kunnr = w_basis-kunnr and vkorg = w_org-vkorg and vtweg = w_org-vtweg and spart = w_org-spart.
if sy-subrc ne 0.
PERFORM frm_fill_partner USING w_tpakd-parvw lwa_cust-header-object_instance-kunnr w_knvp.
ENDIF.

ENDLOOP.
* CLEAR lwa_functions.
* lwa_functions-task = 'I'.
* lwa_functions-data_key-parvw = 'I'.
* lwa_functions-data_key-parvw = 'WE'.
** lwa_functions-data-partner = 'AY9'.
* lwa_functions-data-defpa = 'X'.
* lwa_functions-datax-defpa = 'X'.
* lwa_functions-datax-partner = 'X'.
* APPEND lwa_functions TO lt_functions.
*
* CLEAR lwa_functions.
* lwa_functions-task = 'I'.
* lwa_functions-data_key-parvw = 'I'.
* lwa_functions-data_key-parvw = 'RG'.
** lwa_functions-data-partner = 'AY9'.
* lwa_functions-data-defpa = 'X'.
* lwa_functions-datax-defpa = 'X'.
* lwa_functions-datax-partner = 'X'.
* APPEND lwa_functions TO lt_functions.
*
*
* CLEAR lwa_functions.
* lwa_functions-task = 'I'.
* lwa_functions-data_key-parvw = 'I'.
* lwa_functions-data_key-parvw = 'SM'.
** lwa_functions-data-partner = 'GX0001'.
* lwa_functions-data-defpa = 'X'.
* lwa_functions-datax-defpa = 'X'.
* lwa_functions-datax-partner = 'X'.
* APPEND lwa_functions TO lt_functions.
*
*
* CLEAR lwa_functions.
* lwa_functions-task = 'I'.
* lwa_functions-data_key-parvw = 'I'.
* lwa_functions-data_key-parvw = 'AG'.
* lwa_functions-data-defpa = 'X'.
* lwa_functions-datax-defpa = 'X'.
* APPEND lwa_functions TO lt_functions.
*
*
* CLEAR lwa_functions.
* lwa_functions-task = 'I'.
* lwa_functions-data_key-parvw = 'I'.
* lwa_functions-data_key-parvw = 'RE'.
* lwa_functions-data-defpa = 'X'.
* lwa_functions-datax-defpa = 'X'.
* APPEND lwa_functions TO lt_functions.

CLEAR lwa_tax.
REFRESH lt_tax.
lwa_tax-task = 'M'.
lwa_tax-data_key-aland = 'CN'.
lwa_tax-data_key-tatyp = 'MWST' .
lwa_tax-data-taxkd = w_org-taxkd.
lwa_tax-datax-taxkd = 'X'.
APPEND lwa_tax TO lt_tax.


lwa_sale-functions-functions = lt_functions.

APPEND lwa_sale TO lt_sale.
CLEAR lwa_sale.
CLEAR:w_org.
endloop.
lwa_cust-central_data-tax_ind-tax_ind = lt_tax.
lwa_cust-sales_data-sales = lt_sale.
* lwa_cust-sales_data-CURRENT_STATE = 'X'.
REFRESH lt_sale.
APPEND lwa_cust TO lt_cust.
MOVE-CORRESPONDING w_basis TO lw_data.
APPEND lw_data TO lt_data.
CLEAR lw_data.
CLEAR lwa_cust.
ENDLOOP.
ls_main-customers = lt_cust.
PERFORM frm_write_data_sap TABLES lt_data."创建数据到SAP中
FREE ls_main.
REFRESH lt_cust.

ENDFORM. " FRM_INPUT_DATA

*&---------------------------------------------------------------------*
*& Form frm_fill_contact
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FU_NAME text
* -->FU_PHONE text
*----------------------------------------------------------------------*
FORM frm_fill_contact USING fu_name fu_phone.
IF fu_name IS NOT INITIAL OR fu_phone IS NOT INITIAL.
CLEAR lwa_contact.
CLEAR:g_parnr.
CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
nr_range_nr = 'AP'
object = 'PARTNER'
quantity = '1'
IMPORTING
number = g_parnr
EXCEPTIONS
interval_not_found = 1
number_range_not_intern = 2
object_not_found = 3
quantity_is_0 = 4
quantity_is_not_1 = 5
interval_overflow = 6
buffer_overflow = 7
OTHERS = 8.
lwa_contact-task = 'I'.
lwa_contact-address_type_3-task = 'I'.
lwa_contact-data_key-parnr = g_parnr.
*lwa_contact-address_type_3-postal-data-firstname = 'aa'.
lwa_contact-address_type_3-postal-data-lastname = fu_name.
*lwa_contact-address_type_3-postal-datax-firstname = 'X'.
lwa_contact-address_type_3-postal-datax-lastname = 'X'.
"联系人电话
CLEAR:lwa_phone1.
REFRESH lt_phone1.
lwa_phone1-contact-task = 'I'.
lwa_phone1-contact-data-telephone = fu_phone.
*lwa_phone1-contact-data-extension = '3434343'.
*lwa_phone1-contact-datax-extension = 'X'.
lwa_phone1-contact-datax-telephone = 'X'.
APPEND lwa_phone1 TO lt_phone1.
lwa_contact-address_type_3-communication-phone-phone = lt_phone1.
APPEND lwa_contact TO lt_contact.
ENDIF.
ENDFORM. "frm_fill_contact

*&---------------------------------------------------------------------*
*& Form frm_fill_text
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FU_ID text
* -->FU_CONTENT text
*----------------------------------------------------------------------*
FORM frm_fill_text USING fu_id fu_content.
REFRESH lt_content.
REFRESH lt_content.
CLEAR lwa_content.
CLEAR lwa_text.
lwa_text-task = 'M'.
lwa_text-data_key-text_id = fu_id.
lwa_text-data_key-langu = sy-langu.
lwa_content-tdformat = '*'.
lwa_content-tdline = fu_content.
APPEND lwa_content TO lt_content.
CLEAR lwa_content.
lwa_text-data = lt_content.
APPEND lwa_text TO lt_text.
ENDFORM. "frm_fill_text
*&---------------------------------------------------------------------*
*& Form FRM_WRITE_DATA_SAP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_write_data_sap TABLES fu_data TYPE STANDARD TABLE.
DATA:l_ilines TYPE i .
DATA:l_message TYPE string.
DATA:l_iindex TYPE i.
FREE:ls_main1,ls_main2,ls_mesg,ls_mesg1.
DATA:lw_data TYPE ty_knvp.
* FREE:cmd_ei_api=>gt_global_kna1_old.
DESCRIBE TABLE fu_data[] LINES l_ilines.
CALL METHOD cmd_ei_api=>maintain_bapi
EXPORTING
iv_test_run = p_test
iv_collect_messages = 'X'
is_master_data = ls_main
IMPORTING
es_master_data_correct = ls_main1
es_message_correct = ls_mesg1
es_master_data_defective = ls_main2
es_message_defective = ls_mesg.
REFRESH lt_msg.
CLEAR lv_flg.
lt_msg = ls_mesg-messages.
l_iindex = 0.
DO l_ilines TIMES.
l_iindex = l_iindex + 1.
READ TABLE fu_data INTO lw_data INDEX l_iindex.
READ TABLE lt_msg INTO lwa_msg WITH KEY row = l_iindex.
IF sy-subrc NE 0."没有任何改行的信息,表明成功
CLEAR w_log.
CLEAR l_message.
w_log-row = l_iindex.
w_log-kunnr = lw_data-kunnr.
w_log-type = 'S'.
CONCATENATE '客户' w_log-kunnr '创建/修改成功' INTO l_message.
w_log-mesg = l_message.
APPEND w_log TO t_log.
COMMIT WORK.
ELSE.
CLEAR lv_flg.
LOOP AT lt_msg INTO lwa_msg WHERE row = l_iindex.
CLEAR l_message.
l_message = lwa_msg-message.

* WRITE: / lwa_cust-header-OBJECT_INSTANCE-kunnr,lwa_msg-type,l_message.
IF lwa_msg-type = 'E' OR lwa_msg-type = 'A'.
CLEAR w_log.
w_log-row = l_iindex.
w_log-kunnr = lw_data-kunnr.
w_log-type = lwa_msg-type.
w_log-mesg = l_message.
APPEND w_log TO t_log.
lv_flg = 'X'.
ENDIF.
CLEAR:lwa_msg.
ENDLOOP.

IF lv_flg IS INITIAL.
CLEAR w_log.
CLEAR l_message.
w_log-row = l_iindex.
w_log-kunnr = lw_data-kunnr.
w_log-type = 'S'.
CONCATENATE '客户' w_log-kunnr '创建/修改成功' INTO l_message.
w_log-mesg = l_message.
APPEND w_log TO t_log.
COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDIF.
ENDDO.
* LOOP AT lt_msg INTO lwa_msg.
* CLEAR l_message.
* l_message = lwa_msg-message.
*
** WRITE: / lwa_cust-header-OBJECT_INSTANCE-kunnr,lwa_msg-type,l_message.
* IF lwa_msg-type = 'E' OR lwa_msg-type = 'A'.
* CLEAR w_log.
* w_log-kunnr = lwa_cust-header-object_instance-kunnr.
* w_log-type = lwa_msg-type.
* w_log-mesg = l_message.
* APPEND w_log TO t_log.
* lv_flg = 'X'.
* ENDIF.
* CLEAR:lwa_msg.
* ENDLOOP.
* IF lv_flg IS INITIAL.
* CLEAR w_log.
* CLEAR l_message.
* w_log-kunnr = lwa_cust-header-object_instance-kunnr.
* w_log-type = 'S'.
* CONCATENATE '客户' w_log-kunnr '创建/修改成功' INTO l_message.
* w_log-mesg = l_message.
* APPEND w_log TO t_log.
* COMMIT WORK.
* ELSE.
* ROLLBACK WORK.
* ENDIF.
* WAIT UP TO '0.5' SECONDS.
ENDFORM. " FRM_WRITE_DATA_SAP
*&---------------------------------------------------------------------*
*& Form frm_fill_partner
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FU_PARVW text
*----------------------------------------------------------------------*
FORM frm_fill_partner USING fu_parvw fu_kunnr fu_data TYPE ty_knvp.

DATA:l_parza TYPE knvp-parza.
CLEAR l_parza.
CLEAR lwa_functions.
lwa_functions-task = 'M'.
lwa_functions-data_key-parvw = 'M'.
lwa_functions-data_key-parvw = fu_parvw.


* IF NOT fu_kunnr IS INITIAL.
* SELECT SINGLE MAX( parza )
* FROM knvp
* INTO l_parza
* WHERE kunnr = fu_data-kunnr
* AND vkorg = fu_data-vkorg
* AND vtweg = fu_data-vtweg
* AND spart = fu_data-spart
* AND parvw = fu_parvw.
* l_parza = l_parza + 1.
* lwa_functions-data_key-parza = '000'.
lwa_functions-data-partner = fu_kunnr.
lwa_functions-datax-partner = 'X'.
* ELSE.
* lwa_functions-data-partner = 'AY9'.
* lwa_functions-data-defpa = 'X'.
* lwa_functions-datax-defpa = 'X'.
* lwa_functions-datax-partner = 'X'.
* ENDIF.
APPEND lwa_functions TO lt_functions.


ENDFORM. "frm_fill_partner
*&---------------------------------------------------------------------*
*& Form FRM_INSERT_PARTNER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_insert_partner .
CALL METHOD cmd_ei_api=>maintain_bapi
EXPORTING
iv_test_run = p_test
iv_collect_messages = 'X'
is_master_data = ls_main
IMPORTING
es_master_data_correct = ls_main1
es_message_correct = ls_mesg1
es_master_data_defective = ls_main2
es_message_defective = ls_mesg.
lt_msg = ls_mesg-messages.
LOOP AT lt_msg INTO lwa_msg.
WRITE: / lwa_msg-type,lwa_msg-message.
IF lwa_msg-type = 'E' OR lwa_msg-type = 'A'.
lv_flg = 'X'.
ENDIF.
ENDLOOP.
IF lv_flg IS INITIAL.

COMMIT WORK.
ELSE.
ROLLBACK WORK.
ENDIF.

ENDFORM. " FRM_INSERT_PARTNER
*&---------------------------------------------------------------------*
*& Form FRM_WRITE_LOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_write_log .
LOOP AT t_log INTO w_log.
IF w_log-type = 'E'.
WRITE:/ w_log-kunnr UNDER w_log-kunnr COLOR COL_NEGATIVE,
w_log-type UNDER w_log-type COLOR COL_NEGATIVE,
w_log-mesg UNDER w_log-mesg COLOR COL_NEGATIVE.
ELSEIF w_log-type = 'A'.
WRITE:/ w_log-kunnr UNDER w_log-kunnr COLOR COL_NEGATIVE,
w_log-type UNDER w_log-type COLOR COL_NEGATIVE,
w_log-mesg UNDER w_log-mesg COLOR COL_NEGATIVE.
ELSEIF w_log-type = 'W'.
WRITE:/ w_log-kunnr UNDER w_log-kunnr COLOR COL_TOTAL,
w_log-type UNDER w_log-type COLOR COL_TOTAL,
w_log-mesg UNDER w_log-mesg COLOR COL_TOTAL.
ELSEIF w_log-type = 'S'.
WRITE:/ w_log-kunnr UNDER w_log-kunnr COLOR COL_POSITIVE ,
w_log-type UNDER w_log-type COLOR COL_POSITIVE ,
w_log-mesg UNDER w_log-mesg COLOR COL_POSITIVE .
ELSE.
* WRITE:/ w_log-kunnr UNDER w_log-kunnr COLOR COL_HEADING ,
* w_log-type UNDER w_log-type COLOR COL_HEADING ,
* w_log-mesg UNDER w_log-mesg COLOR COL_HEADING .
ENDIF.
CLEAR w_log.
ENDLOOP.
ENDFORM. " FRM_WRITE_LOG
*&---------------------------------------------------------------------*
*& Form FRM_SHOR_MESSAGE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_shor_message .
PERFORM frm_layout_build."设置 layout
PERFORM frm_fieldcat_build."填充 fieldcat
PERFORM frm_display_data."显示 ALV
ENDFORM. " FRM_SHOR_MESSAGE
*&---------------------------------------------------------------------*
*& Form FRM_LAYOUT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_layout_build .
CLEAR: g_title,g_repid,g_layout.

g_title = '日志'.
g_repid = sy-repid.

g_layout-info_fieldname = 'COLOR'.

g_layout-colwidth_optimize = 'X'."最优化列宽度
g_layout-zebra = 'X'."可选行颜色,如果设置了,出现了间隔色带
* g_layout-no_vline = 'X'."不显示列间竖线

g_layout-f2code = '&ETA'."双击弹出显示详细信息的窗口
g_layout-detail_popup = 'X'."是否弹出详细信息窗口
g_layout-detail_initial_lines = 'X'."设置弹出窗口的?
g_layout-detail_titlebar = '详细显示'."设置弹出窗口的标题栏
ENDFORM. " FRM_LAYOUT_BUILD
*&---------------------------------------------------------------------*
*& Form FRM_FIELDCAT_BUILD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_fieldcat_build .
CLEAR it_fieldcat[].

DEFINE mc_fieldcatt_build.
clear wa_fieldcat.
wa_fieldcat-col_pos = &1.
wa_fieldcat-fieldname = &2.
* wa_fieldcat-seltext_s = &3.
wa_fieldcat-seltext_m = &3.
wa_fieldcat-seltext_l = &3.
append wa_fieldcat to it_fieldcat.
END-OF-DEFINITION.

mc_fieldcatt_build:
'1' 'ROW' '序号',
'2' 'KUNNR' '客户',
'3' 'TYPE' '信息类型',
'4' 'MESG' '信息文本'.
ENDFORM. " FRM_FIELDCAT_BUILD
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM frm_display_data .
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
* I_INTERFACE_CHECK = ' '
* I_BYPASSING_BUFFER = ' '
* I_BUFFER_ACTIVE = ' '
i_callback_program = g_repid
* I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
* I_CALLBACK_USER_COMMAND = 'USER_COMMEND'
* I_CALLBACK_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_TOP_OF_PAGE = ' '
* I_CALLBACK_HTML_END_OF_LIST = ' '
* I_STRUCTURE_NAME =
* I_BACKGROUND_ID = ' '
i_grid_title = g_title
* I_GRID_SETTINGS =
is_layout = g_layout
it_fieldcat = it_fieldcat[]
* IT_EXCLUDING =
* IT_SPECIAL_GROUPS =
* IT_SORT =
* IT_FILTER =
* IS_SEL_HIDE =
* I_DEFAULT = 'X'
i_save = 'A'"可以保存所有变式
* IS_VARIANT =
* IT_EVENTS =
* IT_EVENT_EXIT =
* IS_PRINT =
* IS_REPREP_ID =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* I_HTML_HEIGHT_TOP = 0
* I_HTML_HEIGHT_END = 0
* IT_ALV_GRAPHICS =
* IT_HYPERLINK =
* IT_ADD_FIELDCAT =
* IT_EXCEPT_QINFO =
* IR_SALV_FULLSCREEN_ADAPTER =
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
TABLES
t_outtab = t_log[]
EXCEPTIONS
program_error = 1
OTHERS = 2
.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
ENDFORM. " FRM_DISPLAY_DATA


*&---------------------------------------------------------------------*
*& Form frm_fill_partner01
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->FU_PARVW text
* -->FU_KUNNR text
* -->FU_DATA text
*----------------------------------------------------------------------*
FORM frm_fill_partner01 USING fu_parvw fu_kunnr fu_data TYPE ty_knvp.
IF fu_kunnr IS NOT INITIAL.
DATA:l_parza TYPE knvp-parza.
CLEAR l_parza.
CLEAR lwa_functions.
lwa_functions-task = 'M'.
lwa_functions-data_key-parvw = 'M'.
lwa_functions-data_key-parvw = fu_parvw.


IF NOT fu_kunnr IS INITIAL.
SELECT SINGLE MAX( parza )
FROM knvp
INTO l_parza
WHERE kunnr = fu_data-kunnr
AND vkorg = fu_data-vkorg
AND vtweg = fu_data-vtweg
AND spart = fu_data-spart
AND parvw = fu_parvw.
l_parza = l_parza + 1.
lwa_functions-data_key-parza = l_parza.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = fu_kunnr
IMPORTING
output = lwa_functions-data-partner.
* lwa_functions-data-partner = fu_kunnr.
lwa_functions-datax-partner = 'X'.
ELSE.
* lwa_functions-data-partner = 'AY9'.
lwa_functions-data-defpa = 'X'.
lwa_functions-datax-defpa = 'X'.
lwa_functions-datax-partner = 'X'.
ENDIF.
APPEND lwa_functions TO lt_functions.
ENDIF.

ENDFORM. "frm_fill_partner01
原文地址:https://www.cnblogs.com/rainysblog/p/4194600.html