Create BP And Customer
Input Screen :
The Following Code Here :
*&---------------------------------------------------------------------*
*& Report ZBP_UPLOAD
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT ZSD_BP_UPLOAD.
TABLES: but000,kna1,lfa1,pa0006,pa0002.
TYPES: BEGIN OF ty_file_bp,
serial TYPE char10, " Serial of type Integers
role1 TYPE bu_partnerrole,
role2 TYPE bu_partnerrole,
role3 TYPE bu_partnerrole,
role4 TYPE bu_partnerrole,
bpartner TYPE bapibus1006_head-bpartner, " Business Partner Number
partn_cat TYPE bapibus1006_head-partn_cat, " Business Partner Category
partn_grp TYPE bapibus1006_head-partn_grp, " Business Partner Grouping
title TYPE ad_titletx, " Title text
name1 TYPE bu_nameor1, " Name 1 of organization
name2 TYPE bu_nameor1, " Name 1 of organization
sterm1 TYPE sortl, "Search Term 1
sterm2 TYPE bu_sort2, "Search Term 2
street TYPE ad_street, " Street
house_no TYPE ad_hsnm1, "House No
str_suppl1 TYPE ad_strspp1, "Street 2
str_suppl2 TYPE ad_strspp2, "Street 3
str_suppl3 TYPE ad_strspp3, "Street 4
location TYPE ad_lctn, "Street 5
district TYPE ad_city2, "District
postl_cod1 TYPE ad_pstcd1, "City Postal Code
city TYPE ad_city1, "City
country TYPE land1, "Country
region TYPE regio, "Region
langu TYPE spras, "Language
tel_number TYPE ad_tlnmbr, " Telephone no.: dialling code+number
mob_number TYPE ad_tlnmbr, " Telephone no.: dialling code+number
smtp_addr TYPE ad_smtpadr, " E-Mail Address
fax TYPE ad_fxnmbr1, " First fax no.: dialling code+number
taxtype(4), "Tax Type
taxnumber(20), "Tax number
END OF ty_file_bp.
TYPES: BEGIN OF ty_file_emp,
bpartner TYPE bapibus1006_head-bpartner, " Business Partner Number
pernr TYPE char8, " Pernr of type CHAR8
partn_cat TYPE bapibus1006_head-partn_cat, " Business Partner Category
partn_grp TYPE bapibus1006_head-partn_grp, " Business Partner Grouping
title TYPE ad_titletx, " Title text
name1 TYPE bu_nameor1, " Name 1 of organization
name2 TYPE bu_nameor1, " Name 1 of organization
street TYPE ad_street, " Street
str_suppl3 TYPE ad_strspp3, "Street 4
location TYPE ad_lctn, "Street 5
district TYPE ad_city2, "District
postl_cod1 TYPE ad_pstcd1, "City Postal Code
city TYPE ad_city1, "City
country TYPE land1, "Country
region TYPE regio, "Region
langu TYPE spras, "Language
tel_number TYPE ad_tlnmbr, " Telephone no.: dialling code+number
mob_number TYPE ad_tlnmbr, " Telephone no.: dialling code+number
smtp_addr TYPE ad_smtpadr, " E-Mail Address
END OF ty_file_emp.
TYPES: BEGIN OF ty_file_vendorc,
serial TYPE char10,
lifnr TYPE lifnr, " Account Number of Vendor or Creditor
pernr TYPE char8, "Employee No
bukrs TYPE lfb1-bukrs, " Company Code
akont TYPE akont, "Recon Account
zuawa TYPE dzuawa, "Sort Key
cdi(1), "Check Dup Inv
zterm TYPE dzterm, " Terms of payment key
fdgrv TYPE fdgrv, " Planning Group
altkn TYPE altkn, " Previous Master Record Number
zwels TYPE dzwels, " List of Respected Payment Methods
hbkid TYPE hbkid, " Short key for a house bank
taxtyp1 TYPE bapibus1006tax-taxtype, " Tax Number Category
taxnum1 TYPE bapibus1006tax-taxnumber, " Business Partner Tax Number
taxtyp2 TYPE bapibus1006tax-taxtype, " Tax Number Category
taxnum2 TYPE bapibus1006tax-taxnumber, " Business Partner Tax Number
bank_ctry1 TYPE banks,
bank_key1 TYPE bankk,
bank_acct1 TYPE bankn,
bank_ref1 TYPE bkref,
bank_hold1 TYPE bu_koinh,
bank_name1 TYPE bu_bankaccname,
bank_ctry2 TYPE banks,
bank_key2 TYPE bankk,
bank_acct2 TYPE bankn,
bank_ref2 TYPE bkref,
bank_hold2 TYPE bu_koinh,
bank_name2 TYPE bu_bankaccname,
END OF ty_file_vendorc.
TYPES: BEGIN OF ty_file_vendorp,
serial TYPE char10,
lifnr TYPE lifnr, " Account Number of Vendor or Creditor
vkorg TYPE vkorg, " Sales Organization
waers TYPE waers, " Currency Key
kalsk TYPE kalsk, " Group for Calculation Schema (Supplier)
webre TYPE webre, " Indicator: GR-Based Invoice Verification
zterm TYPE dzterm, " Terms of payment key
inco1 TYPE inco1, " Incoterms (Part 1)
inco2 TYPE inco2, " Incoterms (Part 2)
verkf TYPE verkf,
telef TYPE telef,
vsbed TYPE vsbed,
lebre TYPE lebre,
ekgrp TYPE ekgrp,
plifz(2) TYPE c,
END OF ty_file_vendorp.
TYPES: BEGIN OF ty_file_customerc,
kunnr TYPE kunnr, " Customer Number
bukrs TYPE lfb1-bukrs, " Company Code
akont TYPE akont, "Recon Account
zuawa TYPE dzuawa, "Sort Key
fdgrv TYPE fdgrv, "Planning group
zterm TYPE dzterm, "Payment Terms
xzver TYPE xzver, "Record Payment History
END OF ty_file_customerc.
TYPES: BEGIN OF ty_file_cr_segment,
kunnr TYPE kunnr, " Customer Number
limit_rule(10),
risk_class(3),
check_rule(10),
credit_group(4),
cr_segment(10),
credit_limit(15),
END OF ty_file_cr_segment.
TYPES: BEGIN OF ty_file_pf_segment,
kunnr TYPE kunnr, " Customer Number
vkorg(4),
vtweg(2),
spart(2),
parvw(4),
kunnr_assign(10),
del_ind(1),
END OF ty_file_pf_segment.
TYPES: BEGIN OF ty_file_customers,
kunnr TYPE kunnr, " Customer Number
vkorg TYPE knvv-vkorg, " Sales Organization
vtweg TYPE knvv-vtweg, " Distribution Channel
spart TYPE knvv-spart, " Division
bzirk TYPE knvv-bzirk, " Sales District
kdgrp TYPE knvv-kdgrp, " Customer Group
vkbur TYPE knvv-vkbur, " Sales office
vkgrp TYPE knvv-vkgrp, "Sales Group New
awahr(3), "TYPE knvv-awahr, "Order Probablity
waers TYPE knvv-waers, "Currency New
kurst TYPE knvv-kurst, "Exchange Rate New
konda TYPE knvv-konda, "Price Group New
kalks TYPE knvv-kalks, "Customer Pricing Procedure
pltyp TYPE knvv-pltyp, "Price List New
versg TYPE knvv-versg, "Customer Statistic Group
agrel TYPE knvv-agrel, "Indicator: Relevant for Settlement Management
lprio(2), " TYPE KNVV-LPRIO,"Delivery Prio
kzazu TYPE knvv-kzazu, "Order Combination
vsbed TYPE knvv-vsbed, "Shipping Conditions
untto TYPE string, "KNVV-UNTTO, "Under Delivery tolerance New
uebto TYPE string, "KNVV-UEBTO, "Over Delivery tolerance New
bokre TYPE knvv-bokre, " Rebate
prfre TYPE knvv-prfre, " Pricing
incov TYPE knvv-incov, "Incoming terms version
inco1 TYPE knvv-inco1, " Incoterms (Part 1)
inco2 TYPE knvv-inco2, " Incoterms (Part 2)
inco3_l TYPE knvv-inco3_l, " Incoterms 2 location
zterm TYPE knvv-zterm, " Terms of payment key
kkber TYPE knvv-kkber, "Credit Control Area New
ktgrd TYPE knvv-ktgrd, "Account Assignment Group
taxkd01(1),
taxkd02(1),
taxkd03(1),
taxkd04(1),
taxkd05(1),
vwerk TYPE knvv-vwerk, " From plant
podkz TYPE knvv-podkz, "POD
kvgr1 TYPE knvv-kvgr1,
kvgr2 TYPE knvv-kvgr2,
kvgr3 TYPE knvv-kvgr3,
kvgr4 TYPE knvv-kvgr4,
kvgr5 TYPE knvv-kvgr5,
END OF ty_file_customers.
DATA: t_filevc TYPE TABLE OF ty_file_vendorc.
DATA: w_filevc TYPE ty_file_vendorc.
DATA: t_filevp TYPE TABLE OF ty_file_vendorp.
DATA: w_filevp TYPE ty_file_vendorp.
DATA: t_filecc TYPE TABLE OF ty_file_customerc.
DATA: w_filecc TYPE ty_file_customerc.
DATA: t_filecs TYPE TABLE OF ty_file_customers.
DATA: w_filecs TYPE ty_file_customers.
DATA: t_filecr TYPE TABLE OF ty_file_cr_segment.
DATA: w_filecr TYPE ty_file_cr_segment.
DATA: t_filepf TYPE TABLE OF ty_file_pf_segment.
DATA: t_filepf1 TYPE TABLE OF ty_file_pf_segment.
DATA: w_filepf TYPE ty_file_pf_segment.
DATA businesspartnerextern TYPE bapibus1006_head-bpartner. " Business Partner Number
DATA partnercategory TYPE bapibus1006_head-partn_cat. " Business Partner Category
DATA partnergroup TYPE bapibus1006_head-partn_grp. " Business Partner Grouping
DATA centraldata TYPE bapibus1006_central. " General BP Data, Independent of Business Partner Category
DATA centraldataperson TYPE bapibus1006_central_person. " SAP BP: BAPI Structure for Personal Data
DATA centraldataorganization TYPE bapibus1006_central_organ. " SAP BP: BAPI Structure for Organization Data
DATA addressdata TYPE bapibus1006_address. " SAP BP: BAPI Structure for Address Data
DATA businesspartner TYPE bapibus1006_head-bpartner. " Business Partner Number
DATA it_telephondata TYPE STANDARD TABLE OF bapiadtel. " BAPI Structure for Telephone Numbers (Bus. Address Services)
DATA wa_telephondata TYPE bapiadtel. " BAPI Structure for Telephone Numbers (Bus. Address Services)
DATA it_maildata TYPE STANDARD TABLE OF bapiadsmtp. " BAPI Structure for E-Mail Addresses (Bus. Address Services)
DATA wa_maildata TYPE bapiadsmtp. " BAPI Structure for E-Mail Addresses (Bus. Address Services)
DATA return TYPE STANDARD TABLE OF bapiret2. " Return Parameter
************************
DATA : it_raw TYPE truxs_t_text_data.
DATA: it_file TYPE TABLE OF ty_file_bp.
DATA: wa_file TYPE ty_file_bp.
DATA: it_file_e TYPE TABLE OF ty_file_emp.
DATA: wa_file_e TYPE ty_file_emp.
DATA: t_fcat TYPE slis_t_fieldcat_alv.
DATA: w_fcat TYPE slis_fieldcat_alv.
DATA: s_layout TYPE slis_layout_alv.
DATA : lwa_return TYPE bapiret2.
DATA: t_log TYPE TABLE OF zbp_upload, "TY_LOG,
w_log TYPE zbp_upload.
DATA : r4 TYPE c,
r5 TYPE c.
DATA : gwa_knvi TYPE knvi.
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-101.
PARAMETERS:p_flname TYPE localfile , "File Path
head(5) DEFAULT '1' OBLIGATORY. "Header Rows
*PARAMETERS : c1 AS CHECKBOX. "
SELECTION-SCREEN END OF BLOCK b1.
SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE TEXT-102.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r1 RADIOBUTTON GROUP g1 USER-COMMAND r.
SELECTION-SCREEN COMMENT 5(50) TEXT-001 FOR FIELD r1.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r2 RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 5(50) TEXT-005 FOR FIELD r2.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r3 RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 5(50) TEXT-004 FOR FIELD r3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r6 RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 3(50) TEXT-006 FOR FIELD r3.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:r7 RADIOBUTTON GROUP g1.
SELECTION-SCREEN COMMENT 3(50) TEXT-007 FOR FIELD r7.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b2.
SELECTION-SCREEN BEGIN OF BLOCK b6 WITH FRAME TITLE TEXT-106.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN SKIP.
SELECTION-SCREEN END OF BLOCK b6.
AT SELECTION-SCREEN OUTPUT.
PERFORM at_selection_out.
*&---------------------------------------------------------------------*
*& SEARCH HELP
*&---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flname.
PERFORM value_request. "Value Request for File
AT SELECTION-SCREEN.
PERFORM at_selection.
*&---------------------------------------------------------------------*
*& Start of Selection
*&---------------------------------------------------------------------*
START-OF-SELECTION.
PERFORM validations.
*&---------------------------------------------------------------------*
*& Create Business Partner
*&---------------------------------------------------------------------*
IF r1 = 'X'.
PERFORM upload_xl. "Upload Excel File
PERFORM fill_fcat_bplog.
* Check whether customers are already created or not
PERFORM f_validate_ip.
PERFORM create_bp_add_role. "Create Business Partner with 2 default Roles
PERFORM display_log_bp.
*&---------------------------------------------------------------------*
*& Extend Customer Master Sales Data
*&---------------------------------------------------------------------*
ELSEIF r2 = 'X'.
PERFORM upload_xl_customer_s. "Upload Customer Sales Area
PERFORM fill_fcat_customer_s_log.
PERFORM maintain_customer_s.
PERFORM display_log_customer_s.
*&---------------------------------------------------------------------*
*& Extend Customer Master Company Code
*&---------------------------------------------------------------------*
ELSEIF r3 = 'X'.
PERFORM upload_xl_customer_cc. "Upload Customer Company Code & Purchase Data Flat File
PERFORM fill_fcat_customer_cc_log.
PERFORM maintain_customer_cc.
PERFORM display_log_customer_cc.
ELSEIF r6 = abap_true. " ++ By
PERFORM upload_xl_customer_cr.
PERFORM fill_fcat_customer_cr_log.
PERFORM maintain_customer_cr.
PERFORM display_log_customer_cr.
ELSEIF r7 = abap_true. " ++ By Roton
PERFORM upload_xl_customer_pf.
PERFORM fill_fcat_customer_pf_log.
PERFORM maintain_customer_pf.
PERFORM display_log_customer_pf.
ENDIF. " IF r1 = 'X'
*&---------------------------------------------------------------------*
*& Form CALL_BAPI_BUPA_CREATE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM call_bapi_bupa_create USING wa_file TYPE ty_file_bp
CHANGING lv_error.
DATA: tax_ret TYPE TABLE OF bapiret2,
lv_bp TYPE bu_partner.
CLEAR businesspartner.
CLEAR: lv_error, w_log.
lv_bp = wa_file-sterm1.
CALL FUNCTION 'BAPI_BUPA_CREATE_FROM_DATA'
EXPORTING
businesspartnerextern = businesspartnerextern
partnercategory = partnercategory
partnergroup = partnergroup
centraldata = centraldata
centraldataperson = centraldataperson
centraldataorganization = centraldataorganization
addressdata = addressdata
IMPORTING
businesspartner = businesspartner
TABLES
telefondata = it_telephondata
e_maildata = it_maildata
return = return.
* LOOP AT return INTO lwa_return WHERE type CA 'EAW'.
LOOP AT return INTO lwa_return WHERE type CA 'EA'.
* IF businesspartnerextern IS NOT INITIAL.
* w_log-bu_partner = businesspartnerextern.
* ELSE. " ELSE -> IF businesspartnerextern IS NOT INITIAL
* w_log-bu_partner = businesspartner.
* ENDIF. " IF businesspartnerextern IS NOT INITIAL
w_log-sortl = lv_bp.
w_log-bu_partnerx = 'B'.
w_log-msg = lwa_return-message.
w_log-msgtyp = lwa_return-type.
w_log-msgnr = lwa_return-number.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
* w_log-bpname = lwa_return-name1.
* w_log-serial = lwa_return-serial.
APPEND w_log TO t_log.
* INSERT zbp_upload FROM w_log.
CLEAR w_log.
lv_error = abap_true.
ENDLOOP.
IF lv_error IS NOT INITIAL.
ROLLBACK WORK.
ENDIF.
IF businesspartner IS NOT INITIAL.
IF lv_error IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
** Added for Tax numbers
CALL FUNCTION 'BAPI_BUPA_TAX_ADD'
EXPORTING
businesspartner = businesspartner
taxtype = wa_file-taxtype
taxnumber = wa_file-taxnumber
TABLES
return = tax_ret.
ENDIF.
w_log-bu_partner = businesspartner.
w_log-bu_partnerx = 'B'.
READ TABLE return INTO DATA(wa) WITH KEY type = 'E'. " Read table return into data(wa of type
IF sy-subrc = 0.
w_log-msg = 'Business Partner Num Generated/Not Created'.
w_log-msgnr = '002'.
ELSE. " ELSE -> IF sy-subrc = 0
w_log-msg = 'Business Partner Created'.
w_log-msgnr = '001'.
ENDIF. " IF sy-subrc = 0
w_log-msgtyp = 'S'.
w_log-serial = wa_file-serial.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-serial = wa_file-serial.
w_log-bpname = wa_file-name1.
w_log-sortl = centraldata-searchterm1.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
* WAIT UP TO 1 SECONDS. "comment by Roton
ENDIF. " IF businesspartner IS NOT INITIAL
** Error Log Even if Number is generated "Happening in few cases for email.
* READ TABLE return INTO wa WITH KEY type = 'E'. " Read table return into wa with of type
* IF sy-subrc = 0.
* ENDIF. " IF sy-subrc = 0
IF businesspartnerextern IS NOT INITIAL.
businesspartner = businesspartnerextern.
ENDIF. " IF businesspartnerextern IS NOT INITIAL
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_XL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_xl .
* IF P_FLNAME CS '.XLS' OR P_FLNAME CS '.xls'.
* IF V3 IS INITIAL.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_raw
i_filename = p_flname
TABLES
i_tab_converted_data = it_file.
DO head TIMES.
DELETE it_file INDEX 1.
ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_ADDRESS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_address .
IF partnercategory = 2.
centraldataorganization-name1 = wa_file-name1.
centraldataorganization-name2 = wa_file-name2.
ELSEIF partnercategory = 1.
centraldataperson-firstname = wa_file-name1.
centraldataperson-lastname = wa_file-name2.
ENDIF. " IF partnercategory = 2
addressdata-street = wa_file-street.
addressdata-str_suppl1 = wa_file-str_suppl1.
addressdata-str_suppl2 = wa_file-str_suppl2.
addressdata-str_suppl3 = wa_file-str_suppl3.
addressdata-house_no = wa_file-house_no.
addressdata-location = wa_file-location .
addressdata-district = wa_file-district .
addressdata-postl_cod1 = wa_file-postl_cod1.
addressdata-city = wa_file-city .
addressdata-country = wa_file-country .
addressdata-region = wa_file-region .
addressdata-langu = wa_file-langu .
REFRESH it_telephondata.
*For Telphone No
wa_telephondata-country = wa_file-country.
wa_telephondata-telephone = wa_file-mob_number.
wa_telephondata-std_no = 'X'.
* WA_TELEPHONDATA-EXTENSION = '91'.
wa_telephondata-r_3_user = '3'.
wa_telephondata-consnumber = '001'.
wa_telephondata-home_flag = 'X'.
APPEND wa_telephondata TO it_telephondata.
*for mobile number
CLEAR wa_telephondata.
wa_telephondata-country = wa_file-country.
wa_telephondata-telephone = wa_file-tel_number.
wa_telephondata-std_no = 'X'.
* WA_TELEPHONDATA-EXTENSION = '91'.
wa_telephondata-r_3_user = '1'.
wa_telephondata-consnumber = '002'.
wa_telephondata-home_flag = 'X'.
APPEND wa_telephondata TO it_telephondata.
REFRESH it_maildata.
wa_maildata-e_mail = wa_file-smtp_addr.
wa_maildata-std_no = 'X'.
wa_maildata-std_recip = 'X'.
wa_maildata-home_flag = 'X'.
wa_maildata-consnumber = '001'.
APPEND wa_maildata TO it_maildata.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_CENTRALDATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_centraldata .
centraldata-searchterm1 = wa_file-sterm1.
* centraldata-PARTNERTYPE = '0006'.
centraldata-searchterm2 = wa_file-sterm2.
* centraldata-partnerlanguage = 'E'.
centraldata-title_key = wa_file-title.
centraldata-partnerexternal = wa_file-serial. "added by Roton
IF partnercategory = 2.
ELSE.
* centraldataperson-correspondlanguage = 'E'.
* centraldataperson-correspondlanguageiso = 'EN'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form ADD_ROLE_BP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM add_role_bp.
DATA businesspartnerrolecategory TYPE bapibus1006_bproles-partnerrolecategory. " BP Role Category
DATA all_businesspartnerroles TYPE bapibus1006_x-mark. " Data element for domain BOOLE: TRUE (='X') and FALSE (=' ')
DATA businesspartnerrole TYPE bapibus1006_bproles-partnerrole. " BP Role
DATA differentiationtypevalue TYPE bapibus1006_bproles-difftypevalue. " BP: Differentiation type value
DATA validfromdate TYPE bapibus1006_bprole_validity-bprolevalidfrom.
DATA validuntildate TYPE bapibus1006_bprole_validity-bprolevalidto.
DATA return TYPE STANDARD TABLE OF bapiret2. " Return Parameter
*&---------------------------------------------------------------------*
*& Add Vendor Roles
*&---------------------------------------------------------------------*
BREAK-POINT.
IF wa_file-role1 IS NOT INITIAL.
DATA : lv_rltyp TYPE but100-rltyp.
businesspartnerrole = wa_file-role1.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
EXPORTING
businesspartner = businesspartner
businesspartnerrolecategory = businesspartnerrolecategory
all_businesspartnerroles = ' '
businesspartnerrole = businesspartnerrole
differentiationtypevalue = differentiationtypevalue
* VALIDFROMDATE = P_DATE
validuntildate = '99991231'
TABLES
return = return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
DO 5 TIMES.
CLEAR lv_rltyp.
SELECT SINGLE rltyp INTO lv_rltyp FROM but100 WHERE partner = businesspartner
AND rltyp = wa_file-role1.
IF lv_rltyp IS INITIAL.
WAIT UP TO 1 SECONDS. "comment by Roton
ELSE.
CONTINUE.
ENDIF.
ENDDO.
ENDIF. " IF v1 IS NOT INITIAL
IF wa_file-role2 IS NOT INITIAL.
businesspartnerrole = wa_file-role2.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
EXPORTING
businesspartner = businesspartner
businesspartnerrolecategory = businesspartnerrolecategory
all_businesspartnerroles = ' '
businesspartnerrole = businesspartnerrole
differentiationtypevalue = differentiationtypevalue
* VALIDFROMDATE = P_DATE
validuntildate = '99991231'
TABLES
return = return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
DO 5 TIMES.
CLEAR lv_rltyp.
SELECT SINGLE rltyp INTO lv_rltyp FROM but100 WHERE partner = businesspartner
AND rltyp = wa_file-role2.
IF lv_rltyp IS INITIAL.
WAIT UP TO 1 SECONDS. "comment by Roton
ELSE.
CONTINUE.
ENDIF.
ENDDO.
* WAIT UP TO 1 SECONDS. ""comment by
ENDIF. " IF v2 IS NOT INITIAL
*&---------------------------------------------------------------------*
*& Add Customer Roles
*&---------------------------------------------------------------------*
IF wa_file-role3 IS NOT INITIAL.
businesspartnerrole = wa_file-role3.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
EXPORTING
businesspartner = businesspartner
businesspartnerrolecategory = businesspartnerrolecategory
all_businesspartnerroles = ' '
businesspartnerrole = businesspartnerrole
differentiationtypevalue = differentiationtypevalue
* VALIDFROMDATE = P_DATE
validuntildate = '99991231'
TABLES
return = return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* WAIT UP TO 1 SECONDS. ""comment
DO 5 TIMES.
CLEAR lv_rltyp.
SELECT SINGLE rltyp INTO lv_rltyp FROM but100 WHERE partner = businesspartner
AND rltyp = wa_file-role3.
IF lv_rltyp IS INITIAL.
WAIT UP TO 1 SECONDS. "comment by
ELSE.
CONTINUE.
ENDIF.
ENDDO.
ENDIF. " IF c1 IS NOT INITIAL
IF wa_file-role4 IS NOT INITIAL.
businesspartnerrole = wa_file-role4.
CALL FUNCTION 'BAPI_BUPA_ROLE_ADD_2'
EXPORTING
businesspartner = businesspartner
businesspartnerrolecategory = businesspartnerrolecategory
all_businesspartnerroles = ' '
businesspartnerrole = businesspartnerrole
differentiationtypevalue = differentiationtypevalue
* VALIDFROMDATE = P_DATE
validuntildate = '99991231'
TABLES
return = return.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
* WAIT UP TO 1 SECONDS. ""comment by
DO 5 TIMES.
CLEAR lv_rltyp.
SELECT SINGLE rltyp INTO lv_rltyp FROM but100 WHERE partner = businesspartner
AND rltyp = wa_file-role4.
IF lv_rltyp IS INITIAL.
WAIT UP TO 1 SECONDS. "comment by
ELSE.
CONTINUE.
ENDIF.
ENDDO.
ENDIF. " IF c2 IS NOT INITIAL
* CALL FUNCTION 'ZBP_GET_VENDOR'
* EXPORTING
* ibu_partner = businesspartner
* IMPORTING
* elifnr = w_log-vendor.
* CALL FUNCTION 'ZBP_GET_CUSTOMER'
* EXPORTING
* ibu_partner = businesspartner
* IMPORTING
* ekunnr = w_log-customer.
*
* MODIFY t_log FROM w_log TRANSPORTING vendor customer WHERE
* bu_partner = businesspartner.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form VALUE_REQUEST
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM value_request .
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = sy-cprog
IMPORTING
file_name = p_flname.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form CREATE_BP_ADD_ROLL
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM create_bp_add_role .
* DATA: lw_index TYPE sy-tabix. " ABAP System Field: Row Index of Internal Tables
* IF V3 IS INITIAL.
DATA : lv_error TYPE flag.
* BREAK bhaving.
DATA l_name1 TYPE kna1-name1. " Name 1
LOOP AT it_file INTO wa_file.
* lw_index = sy-tabix.
partnercategory = wa_file-partn_cat.
partnergroup = wa_file-partn_grp.
CLEAR businesspartnerextern.
IF wa_file-bpartner IS NOT INITIAL.
businesspartnerextern = wa_file-bpartner.
* businesspartnerextern = wa_file-serial.
ENDIF. " IF wa_file-bpartner IS NOT INITIAL
PERFORM fill_centraldata.
PERFORM fill_address.
PERFORM call_bapi_bupa_create USING wa_file CHANGING lv_error. "comment by Roton for testing.
IF businesspartner IS NOT INITIAL AND lv_error IS INITIAL.
PERFORM add_role_bp. "Add Roles for Company Code and Purchase Org data
ELSE. " ELSE -> IF businesspartner IS NOT INITIAL
* EXIT.
ENDIF. " IF businesspartner IS NOT INITIAL
ENDLOOP. " LOOP AT it_file INTO wa_file
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_XL_VENDOR_CC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_xl_vendor_cc.
IF p_flname CS '.XLS' OR p_flname CS '.xls'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_raw
i_filename = p_flname
TABLES
i_tab_converted_data = t_filevc.
ENDIF. " IF p_flname CS ' XLS' OR p_flname CS ' xls'
DO head TIMES.
DELETE t_filevc INDEX 1.
ENDDO.
ENDFORM.
**----------------------------------------------------------------------*
** CLASS lcl_data IMPLEMENTATION
**----------------------------------------------------------------------*
**
**----------------------------------------------------------------------*
*CLASS lcl_data IMPLEMENTATION. " Data class
**&---------------------------------------------------------------------*
**& Method to Prepare data for Vendor Creation
**&---------------------------------------------------------------------*
* METHOD prepare_data.
** Local Data Declaration
* DATA: lt_contacts TYPE vmds_ei_contacts_t,
* ls_contacts TYPE vmds_ei_contacts, " Ext. Interface: Contact Person
* lt_vendors TYPE vmds_ei_extern_t,
* ls_vendors TYPE vmds_ei_extern, " Complex External Interface for Vendors
* ls_address TYPE cvis_ei_address1, " Ext. Interface: Address of Organization
* lt_company TYPE vmds_ei_company_t,
* ls_company TYPE vmds_ei_company, " Ext. Interface: Company Code Data
* ls_company_data TYPE vmds_ei_vmd_company, " Ext. Interface: Company Code Data
* ls_purchas_data TYPE vmds_ei_vmd_purchasing, " Ext. Interface: Purchasing Data
* lt_purchasing TYPE vmds_ei_purchasing_t,
* ls_purchasing TYPE vmds_ei_purchasing, " Ext. Interface: Purchasing Organization
* lt_purch_func TYPE vmds_ei_functions_t,
* ls_purch_func TYPE vmds_ei_functions, " Ext. Interface: Partner Roles
* ls_message TYPE cvis_message, " Error Indicator and System Messages
* lv_contactid TYPE bapicontact_01-contact. " Number of contact person
*
** Clear the work area initially.
* CLEAR gs_vmds_extern.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = w_filevc-lifnr
* IMPORTING
* output = ls_vendors-header-object_instance-lifnr.
*
* ls_vendors-header-object_task = 'U'. "Represents Insert or Create
* ls_address-postal-data-name = but000-mc_name1. "Name of the Vendor
* ls_address-postal-data-country = lfa1-land1.
* ls_address-postal-datax-name = 'X'.
* ls_address-postal-datax-country = 'X'.
* ls_address-task = 'U'.
*
** Set the Address for the Vendor
* ls_vendors-central_data-address = ls_address.
*
*
**&---------------------------------------------------------------------*
**& * Set the Company Code and GL Account
**&---------------------------------------------------------------------*
*
* IF w_filevc-bukrs IS NOT INITIAL.
*** Set the Account Group
* ls_vendors-central_data-central-data-ktokk = w_filevc-ktokk.
** Set the DATAX flags
* ls_vendors-central_data-central-datax-ktokk = 'X'.
* REFRESH: lt_company[].
* CLEAR ls_company.
* ls_company-task = 'I'.
* ls_company-data_key-bukrs = w_filevc-bukrs.
* CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
* EXPORTING
* input = w_filevc-akont
* IMPORTING
* output = ls_company-data-akont.
* ls_company-data-zuawa = w_filevc-zuawa. "Sort Key
* ls_company-data-reprf = w_filevc-cdi. "Check Double invoice "Payment Terms
* ls_company-data-pernr = w_filevc-pernr.
* ls_company-datax-pernr = 'X'.
* ls_company-datax-akont = 'X'.
* ls_company-datax-zuawa = 'X'.
* ls_company-datax-reprf = 'X'. "Check Double invoice
* APPEND ls_company TO lt_company.
* ls_company_data-company = lt_company[].
* ls_vendors-company_data = ls_company_data.
* ENDIF. " IF w_filevc-bukrs IS NOT INITIAL
**&---------------------------------------------------------------------*
**& * Set the Purchasing Data
**&---------------------------------------------------------------------*
* IF w_filevp-vkorg IS NOT INITIAL.
* ls_purchasing-task = 'I'.
* ls_purchasing-data_key-ekorg = w_filevp-vkorg. "Purchasing Organization
* ls_purchasing-data-waers = w_filevp-waers.
* ls_purchasing-datax-waers = 'X'.
*
* ls_purchasing-data-zterm = w_filevp-zterm.
* ls_purchasing-datax-zterm = 'X'.
*
* ls_purchasing-data-inco1 = w_filevp-inco1.
* ls_purchasing-datax-inco1 = 'X'.
*
* ls_purchasing-data-inco2 = w_filevp-inco2.
* ls_purchasing-datax-inco2 = 'X'.
*
* ls_purchasing-data-kalsk = w_filevp-kalsk. "Schema Group, Vendor
* ls_purchasing-datax-kalsk = 'X'.
*
* ls_purchasing-data-webre = w_filevp-webre . "GR Based Invoice Verification
* ls_purchasing-datax-webre = 'X'.
*************************************
** DATA iv_ktokd TYPE ktokd. " Customer Account Group
** DATA et_parvw TYPE vmds_parvw_t.
** REFRESH et_parvw.
** CALL METHOD vmd_ei_api_check=>get_mand_partner_functions
** EXPORTING
** iv_ktokk = w_filev-ktokk
** IMPORTING
** et_parvw = et_parvw.
**
** LOOP AT et_parvw INTO DATA(wa_parvw).
** ls_purch_func-task = 'I'.
*** CALL FUNCTION 'CONVERSION_EXIT_PARVW_OUTPUT'
*** EXPORTING
*** INPUT = WA_PARVW-PARVW
*** IMPORTING
*** OUTPUT = LS_PURCH_FUNC-DATA_KEY-PARVW.
** ls_purch_func-data_key-parvw = wa_parvw-parvw.
** ls_purch_func-data-partner = w_filev-lifnr.
** ls_purch_func-datax-partner = 'X'.
** APPEND ls_purch_func TO lt_purch_func.
** CLEAR ls_purch_func.
** ENDLOOP. " LOOP AT et_parvw INTO DATA(wa_parvw)
** ls_purchasing-functions-functions = lt_purch_func[].
** APPEND ls_purchasing TO lt_purchasing.
*
** Set the Purchasing Data
* ls_purchas_data-purchasing = lt_purchasing[].
*
*******************************
* ls_vendors-purchasing_data = ls_purchas_data.
* ENDIF. " IF w_filevp-vkorg IS NOT INITIAL
* APPEND ls_vendors TO lt_vendors.
** Set the Final Vendor Data based on which it has to be created
** Note if multiple vendors are to be created...please maintain multiple entries in LT_VENDORS
* gs_vmds_extern-vendors = lt_vendors[].
* ENDMETHOD. "prepare_data
**&---------------------------------------------------------------------*
**& Method to Create Vendor Data
**&---------------------------------------------------------------------*
* METHOD create_vendor_data.
** Local Data Declaration
* DATA: lv_return TYPE i. " Return of type Integers
*
** Prepare the data to be used for Vendor Creation
* lv_return = me->prepare_data( ).
*
** Do not proceed if the Vendor Data for creation was not prepared
* IF lv_return IS NOT INITIAL.
* EXIT.
* ENDIF. " IF lv_return IS NOT INITIAL
*
** Initialize all the data
* vmd_ei_api=>initialize( ).
** Call the Method for creation of Vendor.
* CALL METHOD vmd_ei_api=>maintain_bapi
* EXPORTING
* is_master_data = gs_vmds_extern
* IMPORTING
* es_master_data_correct = gs_vmds_succ
* es_message_correct = gs_succ_messages
* es_master_data_defective = gs_vmds_error
* es_message_defective = gs_err_messages.
*
** IF gs_err_messages-is_error IS INITIAL.
** COMMIT WORK.
** WAIT UP TO 1 SECONDS.
** w_log-BU_PARTNER = w_filev-lifnr.
** w_log-BU_PARTNERx = 'V'.
** w_log-msg = 'Vendor Extended' .
** w_log-msgtyp = 'S'.
** w_log-msgnr = '001'.
** w_log-uzeit = sy-uzeit.
** w_log-erdat = sy-datum.
** w_log-uname = sy-uname.
** w_log-bpname = but000-name_first.
** APPEND w_log TO t_log.
** INSERT zbp_upload FROM w_log.
** CLEAR w_log.
** ELSE. " ELSE -> IF gs_err_messages-is_error IS INITIAL
** LOOP AT gs_err_messages-messages INTO DATA(wa).
** w_log-BU_PARTNER = w_filev-lifnr.
** w_log-BU_PARTNERx = 'V'.
** w_log-msg = wa-message.
** w_log-msgtyp = wa-type.
** w_log-msgnr = wa-number.
** w_log-uzeit = sy-uzeit.
** w_log-erdat = sy-datum.
** w_log-uname = sy-uname.
** w_log-bpname = but000-name_first.
** APPEND w_log TO t_log.
** INSERT zbp_upload FROM w_log.
** CLEAR w_log.
** ENDLOOP. " LOOP AT gs_err_messages-messages INTO DATA(wa)
** ENDIF. " IF gs_err_messages-is_error IS INITIAL
* ENDMETHOD. "create_vendor_data
*ENDCLASS. "lcl_data IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form FILL_FCAT_VENDORLOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_fcat_vendorlog_cc .
s_layout-colwidth_optimize = 'X'.
s_layout-zebra = 'X'.
w_fcat-fieldname = 'SERIAL'.
w_fcat-seltext_l = 'Serial'.
w_fcat-tabname = 'T_LOG'.
APPEND w_fcat TO t_fcat.
CLEAR: w_fcat.
w_fcat-fieldname = 'MSGTYP'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message Type'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSGNR'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message No'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'BU_PARTNER'.
w_fcat-no_zero = 'X'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Bu.Partner'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSG'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'BPNAME'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Vendor Name'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'VENDOR'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Vendor'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'SORTL'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Serach Term 1'.
APPEND w_fcat TO t_fcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_LOG_VENDOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_log_vendor_cc.
CHECK t_log IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_title = 'Log'
is_layout = s_layout
it_fieldcat = t_fcat
TABLES
t_outtab = t_log
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " IF sy-subrc <> 0
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_LOG_BP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_log_bp .
CHECK t_log IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_title = 'Log'
is_layout = s_layout
it_fieldcat = t_fcat
TABLES
t_outtab = t_log
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " IF sy-subrc <> 0
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_FCAT_BPLOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_fcat_bplog .
s_layout-colwidth_optimize = 'X'.
s_layout-zebra = 'X'.
w_fcat-fieldname = 'SERIAL'.
w_fcat-seltext_l = 'Serial'.
w_fcat-tabname = 'T_LOG'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSGTYP'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message Type'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSGNR'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message No'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'BU_PARTNER'.
w_fcat-tabname = 'T_LOG'.
w_fcat-no_zero = 'X'.
w_fcat-seltext_l = 'Business Partner'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
* w_fcat-fieldname = 'PERNR'.
* w_fcat-tabname = 'T_LOG'.
* w_fcat-no_zero = 'X'.
* w_fcat-seltext_l = 'Employee'.
* APPEND w_fcat TO t_fcat.
* CLEAR w_fcat.
w_fcat-fieldname = 'MSG'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'BPNAME'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Business partner Name'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'VENDOR'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Vendor'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'SORTL'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Serach Term 1'.
APPEND w_fcat TO t_fcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPDATE_LOG_BP_NOT_FOUND
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM update_log_bp_not_found USING p_lifnr p_serial.
w_log-bu_partner = p_lifnr.
w_log-bu_partnerx = 'V'.
w_log-msg = 'Business Partner not found'.
w_log-msgtyp = 'E'.
w_log-msgnr = '001'.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-serial = p_serial.
* W_LOG-BPNAME =
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MAINTAIN_VENDOR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM maintain_vendor_cc.
* Local Data Declaration
DATA: lt_vendors TYPE vmds_ei_extern_t,
ls_vendors TYPE vmds_ei_extern, " Complex External Interface for Vendors
ls_address TYPE cvis_ei_address1, " Ext. Interface: Address of Organization
lt_company TYPE vmds_ei_company_t,
ls_company TYPE vmds_ei_company, " Ext. Interface: Company Code Data
ls_company_data TYPE vmds_ei_vmd_company, " Ext. Interface: Company Code Data
ls_message TYPE cvis_message, " Error Indicator and System Messages
gs_vmds_extern TYPE vmds_ei_main, " Ext. Interface: Vendor Total Data
gs_succ_messages TYPE cvis_message, " Error Indicator and System Messages
gs_vmds_error TYPE vmds_ei_main, " Ext. Interface: Vendor Total Data
gs_err_messages TYPE cvis_message, " Error Indicator and System Messages
gs_vmds_succ TYPE vmds_ei_main, " Ext. Interface: Vendor Total Data
gv_ktokk TYPE ktokk, " Vendor account group
gv_ccode TYPE bukrs, " Company Code
gv_akont TYPE akont, " Reconciliation Account in General Ledger
gv_name TYPE name1. " Name
DATA: lw_bupa TYPE bu_partner.
* Create an instance of our class
* CREATE OBJECT lo_data.
LOOP AT t_filevc INTO w_filevc.
CALL FUNCTION 'ZGET_BUPA_NUMBER_V'
EXPORTING
ivendor = w_filevc-lifnr
IMPORTING
ebu_partner = lw_bupa.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_filevc-lifnr
IMPORTING
output = w_filevc-lifnr.
SELECT SINGLE * FROM lfa1 WHERE lifnr = w_filevc-lifnr.
IF sy-subrc = 0.
* Clear the work area initially.
CLEAR gs_vmds_extern.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_filevc-lifnr
IMPORTING
output = ls_vendors-header-object_instance-lifnr.
ls_vendors-header-object_task = 'U'. "Represents Insert or Create
ls_address-postal-data-name = lfa1-name1. "Name of the Vendor
ls_address-postal-data-country = lfa1-land1.
ls_address-postal-datax-name = 'X'.
ls_address-postal-datax-country = 'X'.
ls_address-task = 'U'.
* Set the Address for the Vendor
ls_vendors-central_data-address = ls_address.
*&---------------------------------------------------------------------*
*& * Set the Company Code
*&---------------------------------------------------------------------*
IF w_filevc-bukrs IS NOT INITIAL.
REFRESH: lt_company[],lt_vendors.
CLEAR: ls_company_data.
CLEAR ls_company.
ls_company-task = 'I'.
ls_company-data_key-bukrs = w_filevc-bukrs.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_filevc-akont
IMPORTING
output = ls_company-data-akont.
ls_company-data-zuawa = w_filevc-zuawa. "Sort Key
ls_company-data-reprf = w_filevc-cdi. "Check Double invoice "Payment Terms
ls_company-data-pernr = w_filevc-pernr.
ls_company-data-zterm = w_filevc-zterm.
ls_company-data-fdgrv = w_filevc-fdgrv.
ls_company-data-altkn = w_filevc-altkn.
ls_company-data-zwels = w_filevc-zwels.
ls_company-data-hbkid = w_filevc-hbkid.
* ls_company-data-
ls_company-datax-pernr = 'X'.
ls_company-datax-akont = 'X'.
ls_company-datax-zuawa = 'X'.
ls_company-datax-zterm = 'X'.
ls_company-datax-reprf = 'X'. "Check Double invoice
ls_company-datax-fdgrv = 'X'.
ls_company-datax-altkn = 'X'.
ls_company-datax-zwels = 'X'.
ls_company-datax-hbkid = 'X'.
APPEND ls_company TO lt_company.
ls_company_data-company = lt_company[].
ls_vendors-company_data = ls_company_data.
ENDIF. " IF w_filevc-bukrs IS NOT INITIAL
APPEND ls_vendors TO lt_vendors.
gs_vmds_extern-vendors = lt_vendors[].
* Initialize all the data
vmd_ei_api=>initialize( ).
* Call the Method for creation of Vendor.
CALL METHOD vmd_ei_api=>maintain_bapi
EXPORTING
is_master_data = gs_vmds_extern
IMPORTING
es_master_data_correct = gs_vmds_succ
es_message_correct = gs_succ_messages
es_master_data_defective = gs_vmds_error
es_message_defective = gs_err_messages.
IF gs_err_messages-is_error IS INITIAL.
COMMIT WORK.
WAIT UP TO 1 SECONDS.
w_log-vendor = w_filevc-lifnr.
w_log-bu_partner = lw_bupa.
w_log-bu_partnerx = 'V'.
w_log-msg = 'Vendor Extended' .
w_log-msgtyp = 'S'.
w_log-msgnr = '001'.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-bpname = lfa1-name1.
w_log-serial = w_filevc-serial.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
PERFORM update_bp_supplimentary.
ELSE. " ELSE -> IF gs_err_messages-is_error IS INITIAL
LOOP AT gs_err_messages-messages INTO DATA(wa).
w_log-vendor = w_filevc-lifnr.
w_log-bu_partner = lw_bupa.
w_log-bu_partnerx = 'V'.
w_log-msg = wa-message.
w_log-msgtyp = wa-type.
w_log-msgnr = wa-number.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-bpname = lfa1-name1.
w_log-serial = w_filevc-serial.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
ENDLOOP. " LOOP AT gs_err_messages-messages INTO DATA(wa)
ENDIF. " IF gs_err_messages-is_error IS INITIAL
ELSE. " ELSE -> IF w_filevc-bukrs IS NOT INITIAL
PERFORM update_log_bp_not_found USING w_filevc-lifnr w_filevc-serial.
ENDIF. " IF sy-subrc = 0
ENDLOOP. " LOOP AT t_filevc INTO w_filevc
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_XL_CUSTOMER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_xl_customer_cc .
IF p_flname CS '.XLS' OR p_flname CS '.xls'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_raw
i_filename = p_flname
TABLES
i_tab_converted_data = t_filecc.
ENDIF. " IF p_flname CS ' XLS' OR p_flname CS ' xls'
DO head TIMES.
DELETE t_filecc INDEX 1.
ENDDO.
ENDFORM.
FORM upload_xl_customer_cr .
IF p_flname CS '.XLS' OR p_flname CS '.xls'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_raw
i_filename = p_flname
TABLES
i_tab_converted_data = t_filecr.
ENDIF. " IF p_flname CS ' XLS' OR p_flname CS ' xls'
DO head TIMES.
DELETE t_filecr INDEX 1.
ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form AT_SELECTION_OUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM at_selection_out .
* LOOP AT SCREEN.
* IF screen-group1 = 'CHK'.
* IF r1 = 'X' OR ( r1 IS INITIAL AND r2 IS INITIAL AND r3 IS INITIAL AND r4 IS INITIAL AND r5 IS INITIAL ).
* screen-active = 1.
* ELSE. " ELSE -> IF r1 = 'X' OR ( r1 IS INITIAL AND r2 IS INITIAL AND r3 IS INITIAL AND r4 IS INITIAL AND r5 IS INITIAL )
* screen-active = 0.
* ENDIF. " IF r1 = 'X' OR ( r1 IS INITIAL AND r2 IS INITIAL AND r3 IS INITIAL AND r4 IS INITIAL AND r5 IS INITIAL )
* MODIFY SCREEN.
* ENDIF. " IF screen-group1 = 'CHK'
* ENDLOOP. " LOOP AT SCREEN
ENDFORM.
*&---------------------------------------------------------------------*
*& Form AT_SELECTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM at_selection .
ENDFORM.
*&---------------------------------------------------------------------*
*& Form VALIDATIONS
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM validations .
* IF r1 IS NOT INITIAL.
* IF P_DATE IS INITIAL.
* MESSAGE 'Fill Date' TYPE 'S'.
* LEAVE LIST-PROCESSING.
* ENDIF.
IF p_flname IS INITIAL.
MESSAGE 'File Name' TYPE 'S'.
LEAVE LIST-PROCESSING.
ENDIF. " IF p_flname IS INITIAL
* IF c1 IS INITIAL AND c2 IS INITIAL AND v1 IS INITIAL AND v2 IS INITIAL.
* MESSAGE 'Select atleast 1 Role' TYPE 'S'.
* LEAVE LIST-PROCESSING.
* ENDIF. " IF c1 IS INITIAL AND c2 IS INITIAL AND v1 IS INITIAL AND v2 IS INITIAL
* ENDIF. " IF r1 IS NOT INITIAL
ENDFORM.
*&---------------------------------------------------------------------*
*& Form UPLOAD_XL_CUSTOMER_PUR
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM upload_xl_customer_s .
IF p_flname CS '.XLS' OR p_flname CS '.xls'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
i_tab_raw_data = it_raw
i_filename = p_flname
TABLES
i_tab_converted_data = t_filecs.
ENDIF. " IF p_flname CS ' XLS' OR p_flname CS ' xls'
DO head TIMES.
DELETE t_filecs INDEX 1.
ENDDO.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FILL_FCAT_CUSTOMERLOG
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM fill_fcat_customer_cc_log .
s_layout-colwidth_optimize = 'X'.
s_layout-zebra = 'X'.
w_fcat-fieldname = 'MSGTYP'.
w_fcat-seltext_l = 'Message Type'.
w_fcat-tabname = 'T_LOG'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSGNR'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message No'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'BU_PARTNER'.
w_fcat-no_zero = 'X'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'KUNNR'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSG'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'BPNAME'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Customer Name'.
APPEND w_fcat TO t_fcat.
ENDFORM.
FORM fill_fcat_customer_cr_log .
s_layout-colwidth_optimize = 'X'.
s_layout-zebra = 'X'.
w_fcat-fieldname = 'MSGTYP'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message Type'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSGNR'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message No'.
w_fcat-tabname = 'T_LOG'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'BU_PARTNER'.
w_fcat-tabname = 'T_LOG'.
w_fcat-no_zero = 'X'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'KUNNR'.
APPEND w_fcat TO t_fcat.
CLEAR w_fcat.
w_fcat-fieldname = 'MSG'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Message'.
APPEND w_fcat TO t_fcat.
w_fcat-fieldname = 'BPNAME'.
w_fcat-tabname = 'T_LOG'.
w_fcat-seltext_l = 'Customer Name'.
APPEND w_fcat TO t_fcat.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form MAINTAIN_CUSTOMER_CC
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM maintain_customer_cc .
*DATA IV_TEST_RUN TYPE XFELD.
*DATA IV_COLLECT_MESSAGES TYPE XFELD.
DATA is_master_data TYPE cmds_ei_main. " Ext. Interface: Total Customer Data
DATA es_master_data_correct TYPE cmds_ei_main. " Ext. Interface: Total Customer Data
DATA es_message_correct TYPE cvis_message. " Error Indicator and System Messages
DATA es_master_data_defective TYPE cmds_ei_main. " Ext. Interface: Total Customer Data
DATA es_message_defective TYPE cvis_message. " Error Indicator and System Messages
DATA: lt_customers TYPE cmds_ei_extern_t,
ls_customers TYPE cmds_ei_extern, " Complex External Interface for Customers
ls_address TYPE cvis_ei_address1, " Ext. Interface: Address of Organization
lt_company TYPE cmds_ei_company_t,
ls_company TYPE cmds_ei_company, " Ext. Interface: Company Code Data
ls_company_data TYPE cmds_ei_cmd_company, " Ext. Interface: Company Code Data
ls_message TYPE cvis_message, " Error Indicator and System Messages
lv_contactid TYPE bapicontact_01-contact. " Number of contact person
LOOP AT t_filecc INTO w_filecc.
* Clear the work area initially.
REFRESH is_master_data-customers.
REFRESH lt_customers[].
REFRESH lt_company[].
CLEAR ls_customers.
CLEAR ls_company_data.
CLEAR ls_address.
CLEAR ls_company.
CLEAR is_master_data.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_filecc-kunnr
IMPORTING
output = ls_customers-header-object_instance-kunnr.
CLEAR kna1.
SELECT SINGLE * FROM kna1 WHERE kunnr = ls_customers-header-object_instance-kunnr.
ls_customers-header-object_task = 'U'. "Represents Insert or Create
ls_address-postal-data-name = kna1-name1. "Name of the Vendor
ls_address-postal-data-country = kna1-land1.
ls_address-postal-datax-name = 'X'.
ls_address-postal-datax-country = 'X'.
ls_address-task = 'U'.
* Set the Address for the Vendor
ls_customers-central_data-address = ls_address.
* Set the DATAX flags
* LS_CUSTOMERS-CENTRAL_DATA-CENTRAL-DATAX-KTOKD = 'X'.
*&---------------------------------------------------------------------*
*& * Set the Company Code and GL Account
*&---------------------------------------------------------------------*
REFRESH: lt_company[].
CLEAR ls_company.
ls_company-task = 'I'.
ls_company-data_key-bukrs = w_filecc-bukrs.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_filecc-akont
IMPORTING
output = ls_company-data-akont.
ls_company-data-zterm = w_filecc-zterm. "Terms
ls_company-data-wakon = w_filecc-zterm. " B/E Payment terms
ls_company-data-zuawa = w_filecc-zuawa. "Sort key
ls_company-data-xzver = w_filecc-xzver. "Record Payment History
ls_company-data-fdgrv = w_filecc-fdgrv. "Planning Group
ls_company-datax-akont = 'X'.
ls_company-datax-zterm = 'X'.
ls_company-datax-wakon = 'X'.
ls_company-datax-zuawa = 'X'. "Sort key
ls_company-datax-xzver = 'X'. "Record Payment History
ls_company-datax-fdgrv = 'X'. "Planning Group
APPEND ls_company TO lt_company.
ls_company_data-company = lt_company[].
ls_customers-company_data = ls_company_data.
APPEND ls_customers TO lt_customers.
is_master_data-customers = lt_customers[].
cmd_ei_api=>initialize( ).
CALL METHOD cmd_ei_api=>maintain_bapi
EXPORTING
* IV_TEST_RUN = SPACE
* IV_COLLECT_MESSAGES = SPACE
is_master_data = is_master_data
IMPORTING
es_master_data_correct = es_master_data_correct
es_message_correct = es_message_correct
es_master_data_defective = es_master_data_defective
es_message_defective = es_message_defective.
IF es_message_defective-is_error IS INITIAL.
COMMIT WORK.
WAIT UP TO 1 SECONDS.
w_log-bu_partner = w_filecc-kunnr.
w_log-bu_partnerx = 'C'.
w_log-msg = 'Customer Extended to Company Code' .
w_log-msgtyp = 'S'.
w_log-msgnr = '001'.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-bpname = kna1-name1.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
ELSE. " ELSE -> IF es_message_defective-is_error IS INITIAL
LOOP AT es_message_defective-messages INTO DATA(wa).
w_log-bu_partner = w_filecc-kunnr.
w_log-bu_partnerx = 'C'.
w_log-msg = wa-message.
w_log-msgtyp = wa-type.
w_log-msgnr = wa-number.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-bpname = kna1-name1.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
ENDLOOP. " LOOP AT es_message_defective-messages INTO DATA(wa)
ENDIF. " IF es_message_defective-is_error IS INITIAL
ENDLOOP. " LOOP AT t_filecc INTO w_filecc
ENDFORM.
FORM maintain_customer_cr .
DATA:
io_facade TYPE REF TO cl_ukm_facade,
io_partner TYPE REF TO cl_ukm_business_partner,
io_bupa_factory TYPE REF TO cl_ukm_bupa_factory,
io_account TYPE REF TO cl_ukm_account,
io_ref_business_partner TYPE REF TO cl_udm_business_partner,
i_return TYPE ukm_t_monitor_return,
wa_return LIKE LINE OF i_return,
wa_ukm_s_bp_cms TYPE ukm_s_bp_cms,
wa_ukmbp_sgm TYPE ukmbp_cms_sgm,
wa_bp_cms TYPE ukm_s_bp_cms,
wa_bp_credit_sgm TYPE ukm_s_bp_cms_sgm,
i_credstd TYPE STANDARD TABLE OF bp1010,
et_return TYPE bapiret2_t,
wa_credstd TYPE bp1010,
es_return LIKE LINE OF et_return.
DATA:
lv_partner TYPE bu_partner,
lv_credit_segment TYPE ukm_credit_sgmnt.
LOOP AT t_filecr INTO w_filecr.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = w_filecr-kunnr
IMPORTING
output = lv_partner.
SELECT SINGLE * FROM kna1 WHERE kunnr = lv_partner.
lv_credit_segment = w_filecr-cr_segment.
io_facade = cl_ukm_facade=>create( i_activity = cl_ukm_cnst_eventing=>bp_maintenance ).
io_bupa_factory = io_facade->get_bupa_factory( ).
io_partner = io_bupa_factory->get_business_partner( lv_partner ).
* Get Credit Profile Data
io_partner->get_bp_cms( IMPORTING es_bp_cms = wa_bp_cms ).
* Set Credit Profile Data
wa_bp_cms-check_rule = w_filecr-check_rule.
wa_bp_cms-limit_rule = w_filecr-limit_rule.
wa_bp_cms-risk_class = w_filecr-risk_class.
wa_bp_cms-credit_group = w_filecr-credit_group.
io_partner->set_bp_cms( EXPORTING is_bp_cms = wa_bp_cms ).
* Get Credit Account
CALL METHOD io_bupa_factory->get_credit_account
EXPORTING
i_partner = lv_partner
i_credit_sgmnt = lv_credit_segment
RECEIVING
ro_credit_account = io_account.
IF io_account IS NOT INITIAL.
* Get credit Segment Data
io_account->get_bp_cms_sgm( IMPORTING es_bp_cms_sgm = wa_bp_credit_sgm ).
wa_bp_credit_sgm-credit_limit = w_filecr-credit_limit.
* Set Credit Segment Data.
io_account->set_bp_cms_sgm( EXPORTING is_bp_cms_sgm = wa_bp_credit_sgm ).
ENDIF.
* Update the credit segment and credit profile
io_bupa_factory->save_all( EXPORTING i_upd_task = abap_true
RECEIVING et_return = i_return ).
IF i_return[] IS INITIAL.
COMMIT WORK.
WAIT UP TO 1 SECONDS.
w_log-bu_partner = w_filecr-kunnr.
w_log-bu_partnerx = 'S'. " Credit
w_log-msg = 'Credit Segment uploaded without any error' .
w_log-msgtyp = 'S'.
w_log-msgnr = '001'.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-bpname = kna1-name1.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
ELSE.
LOOP AT i_return INTO DATA(wa).
w_log-bu_partner = w_filecr-kunnr.
w_log-bu_partnerx = 'C'.
w_log-msg = wa-message.
w_log-msgtyp = wa-msgty.
w_log-msgnr = wa-msgno.
w_log-uzeit = sy-uzeit.
w_log-erdat = sy-datum.
w_log-uname = sy-uname.
w_log-bpname = kna1-name1.
APPEND w_log TO t_log.
INSERT zbp_upload FROM w_log.
CLEAR w_log.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form DISPLAY_LOG_CUSTOMER
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_log_customer_cc .
CHECK t_log IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_title = 'Log'
is_layout = s_layout
it_fieldcat = t_fcat
TABLES
t_outtab = t_log
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " IF sy-subrc <> 0
ENDFORM.
FORM display_log_customer_cr .
CHECK t_log IS NOT INITIAL.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_grid_title = 'Log'
is_layout = s_layout
it_fieldcat = t_fcat
TABLES
t_outtab = t_log
* EXCEPTIONS
* PROGRAM_ERROR = 1
* OTHERS = 2
.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF. " IF sy-subrc <> 0
ENDFORM.
*&---------------------------------------------------------------------*