Quantcast
Channel: SAP ERP - Logistics Materials Management (SAP MM)
Viewing all articles
Browse latest Browse all 133

A Reusable BDC for Vendor Bank Details uploads:

$
0
0

Introduction :

 

Most of the times it will become imperative to upload the bank details for the vendor master , when vendors  exists in multiple company codes and when the vendors operate in multiple countries and multiple areas .

 

In such cases vendors will have multiple bank accounts and updating the Bank Details into the vendor master will become tedious job for a manual entry. In order to reduce the time involved in updating the details and to reduce the manual intervention, BDC program can be much useful with an input file.

 

Vendor Master will have details like

 

Country Key,

Bank Key,

Bank Account,

Account Holder,

Bank Control Key,

IBAN

Swift Code

IBAN Value

Partner Bank Type

Reference Details .

A Typical Bank Details SCREEN of Vendor looks like this.

 

10.png

 

The program can be provided with an authorization object to restrict the users.

 

The Program can be as follows

 

REPORT  Z_VENDOR_MASTER_BANK  NOSTANDARDPAGE HEADING
                                       
LINE-SIZE255
                                       
LINE-COUNT300.

TYPE-POOLS: TRUXS.

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*&  Types  Declarations

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

TYPES : BEGINOF  TY_LFA1,
          VENDOR       
LIKE LFA1-LIFNR,
          COMP_ID      
LIKE LFB1-BUKRS,
          BANK_COUNTRY 
LIKE LFBK-BANKS,
          BANK_KEY     
LIKE LFBK-BANKL,
          BANK_ACC     
LIKE LFBK-BANKN,
          ACC_HOLDER   
LIKE LFBK-KOINH,

CRTL_KEY      LIKE LFBK-BKONT,
          IBAN         
LIKE TIBAN-IBAN,
          SWIFT_CODE   
LIKE BNKA-SWIFT,
          BANK_NAME    
LIKE BNKA-BANKA,
          PARTNER_TYPE 
LIKE LFBK-BVTYP,
          REF_DETAILS  
LIKE LFBK-BKREF,
          COLLECT_AUTH 
LIKE LFBK-XEZER,
       
ENDOF TY_LFA1.

TYPES : BEGINOF  TY_BNKA,
          VENDOR       
LIKE LFA1-LIFNR,
          COMP_ID      
LIKE LFB1-BUKRS,
          BANK_COUNTRY 
LIKE LFBK-BANKS,
          BANK_KEY     
LIKE LFBK-BANKL,
          BANK_ACC     
LIKE LFBK-BANKN,
          ACC_HOLDER   
LIKE LFBK-KOINH,
          CRTL_KEY     
LIKE LFBK-BKONT,
          IBAN         
LIKE TIBAN-IBAN,
          SWIFT_CODE   
LIKE BNKA-SWIFT,
          BANK_NAME    
LIKE BNKA-BANKA,
          PARTNER_TYPE 
LIKE LFBK-BVTYP,
          REF_DETAILS  
LIKE LFBK-BKREF,
          COLLECT_AUTH 
LIKE LFBK-XEZER,
       
ENDOF TY_BNKA.

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*&  Data  Declarations

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

DATA: IN_LFA1 TYPE TY_LFA1 OCCURS0WITHHEADERLINE,
      IN_BNKA
TYPE TY_LFA1 OCCURS0WITHHEADERLINE.
DATA: IT_RAW TYPE TRUXS_T_TEXT_DATA.
DATA : BDCDATA LIKE BDCDATA OCCURS0WITHHEADERLINE,
       I_MSG 
LIKE BDCMSGCOLL OCCURS0WITHHEADERLINE,
       TEMP
TYPE STRING,
       I_RESULT
TYPE STRING.
DATA : CNT(4) TYPE N.

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

*&  SELECTION-SCREEN

*&---------------------------------------------------------------------*

*&---------------------------------------------------------------------*

SELECTION-SCREENBEGINOFBLOCK B1 WITHFRAMETITLETEXT-001.PARAMETERS: P_FILE LIKE RLGRAP-FILENAME.PARAMETERS: P_MODE(1) DEFAULT'N'.
SELECTION-
SCREENENDOFBLOCK B1.

*&--------------------------------------------------------------------*

*&  INITIALIZATION

*&--------------------------------------------------------------------*

INITIALIZATION.

  AUTHORITY-
CHECK OBJECT 'Z_VEND_CHG'
              
ID'ACTVT'FIELD'16'.
 
IF SY-SUBRC <> 0.
   
MESSAGE E999(M02) WITH'You are not Authorized to run the program'.
   
LEAVEPROGRAM.
 
ENDIF.
*&--------------------------------------------------------------------**& AT SELECTION-SCREEN*&--------------------------------------------------------------------*
AT SELECTION-SCREENONVALUE-REQUEST FOR P_FILE.
 
CALLFUNCTION'F4_FILENAME'
   
IMPORTING
      FILE_NAME = P_FILE.

*&--------------------------------------------------------------------*

*&--------------------------------------------------------------------*

*& START-OF-SELECTION

*&--------------------------------------------------------------------*

*&--------------------------------------------------------------------*

START-OF-SELECTION.
 
PERFORM EXCEL_UPLOAD.
 
PERFORM SPLIT_DATA.
 
PERFORM POPULATE_BDCDATA.

*&---------------------------------------------------------------------*

*&      Form  EXCEL_UPLOAD

*&---------------------------------------------------------------------*

*       text

*----------------------------------------------------------------------*

*  -->  p1        text

 

*  <--  p2        text

*----------------------------------------------------------------------*

FORM EXCEL_UPLOAD.

*--To upload data from excel sheet to internal table
 
CALLFUNCTION'TEXT_CONVERT_XLS_TO_SAP'
   
EXPORTING
      I_FIELD_SEPERATOR    =
'X'
      I_LINE_HEADER        =
'X'
      I_TAB_RAW_DATA       = IT_RAW
      I_FILENAME           = P_FILE
   
TABLES
      I_TAB_CONVERTED_DATA = IN_LFA1
   
EXCEPTIONS
      CONVERSION_FAILED    =
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.                    " EXCEL_UPLOAD

*&---------------------------------------------------------------------*

*&      Form  POPULATE_BDCDATA*&---------------------------------------------------------------------**       text*----------------------------------------------------------------------*

*  -->  p1        text

*  <--  p2        text

*----------------------------------------------------------------------*

FORM POPULATE_BDCDATA .

 

*--Populating internal table data to BDC
 
LOOPAT IN_LFA1.
   
REFRESH BDCDATA.
   
CLEAR BDCDATA.

*--Vendor data
   
PERFORM BDC_DYNPRO      USING'SAPMF02K''0101'.
   
PERFORM BDC_FIELD       USING'BDC_CURSOR'
                                 
'RF02K-D0130'.
   
PERFORM BDC_FIELD       USING'BDC_OKCODE'
                                 
'/00'.

   
PERFORM BDC_FIELD       USING'RF02K-LIFNR'
                                  IN_LFA1-VENDOR.          
"'111111'.
   
PERFORM BDC_FIELD       USING'RF02K-BUKRS'
                                  IN_LFA1-COMP_ID.         
"'0777'.

   
PERFORM BDC_FIELD       USING'RF02K-D0130'


*--For Bank data

PERFORM BDC_DYNPRO      USING'SAPMF02K''0130'.*    PERFORM BDC_FIELD       USING 'BDC_CURSOR'*                                'LFBK-XEZER(01)'.*    PERFORM BDC_FIELD       USING 'BDC_OKCODE'*                                 '=BANK'.
   
CNT = 0.
   
LOOPAT IN_BNKA  WHERE VENDOR = IN_LFA1-VENDOR.

     
CNT = CNT + 1.
* PERFORM BDC_DYNPRO      USING 'SAPMF02K' '0130'.
     
CONCATENATE'LFBK-XEZER('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING'BDC_CURSOR'
                                  TEMP.
     
PERFORM BDC_FIELD       USING'BDC_OKCODE'
                                  
'=BANK'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-BANKS('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-

BANKS(01)'
                                    IN_BNKA-BANK_COUNTRY.      
"'br'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-BANKL('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-BANKL(01)'
                                    IN_BNKA-BANK_KEY.          
"'34173197'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-BANKN('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                       "'LFBK-BANKN(01)'
                                    IN_BNKA-BANK_ACC.      
"'311-8'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-KOINH('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-KOINH(01)'
                                    IN_BNKA-ACC_HOLDER.        
"'XYZXYZ'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-BKONT('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-BKONT(01)'
                                    IN_BNKA-CRTL_KEY.      
"'01'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-BVTYP('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-BVTYP(01)'
                                    IN_BNKA-PARTNER_TYPE.      
"'PA'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-BKREF('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-BKREF(01)'
                                    IN_BNKA-REF_DETAILS.       
"'SSSSSSSSS'.
     
CLEAR TEMP.

     
CONCATENATE'LFBK-XEZER('CNT')'INTO TEMP.
     
PERFORM BDC_FIELD       USING TEMP                        "'LFBK-XEZER(01)'
                                    IN_BNKA-COLLECT_AUTH.      
"'X'.
     
CLEAR TEMP.

     
PERFORM BDC_FIELD       USING'BDC_OKCODE'
                                   
'=BANK'.

     
PERFORM BDC_DYNPRO      USING'SAPLBANK''0100'.
     
PERFORM BDC_FIELD       USING'BDC_CURSOR'
                                   
'BNKA-SWIFT'.
     
PERFORM BDC_FIELD       USING'BDC_OKCODE'
                                   
'=ENTR'.

     
PERFORM BDC_FIELD       USING'BNKA-BANKA'                "'BNKA-BANKA'
                                    IN_BNKA-BANK_NAME.         
"'Banco Itaú'.
     
CLEAR TEMP.

     
PERFORM BDC_FIELD       USING'BNKA-SWIFT'                "'BNKA-SWIFT'
                                    IN_BNKA-SWIFT_CODE.        
"'abcd3333'.
     
CLEAR TEMP.
     
PERFORM BDC_FIELD       USING'BDC_OKCODE'
                                   
'=ENTR'.
     
PERFORM BDC_DYNPRO      USING'SAPMF02K''0130'.*      PERFORM BDC_FIELD       USING 'BDC_CURSOR'*                                    'LFBK-BANKS'.               "'LFBK-BANKS(01)'.
*-- For records more than five entries
     
IFCNT = 5.
       
CNT = 0.
       
PERFORM BDC_FIELD    USING'BDC_CURSOR' TEMP.
       
PERFORM BDC_FIELD    USING'BDC_OKCODE'   '=P+'.
     
ENDIF.

   
ENDLOOP.
   
PERFORM BDC_FIELD       USING'BDC_OKCODE'
                                 
'=UPDA'.*--Updating data into SAP
   
CALLTRANSACTION'XK02'USING BDCDATA
                           
MODE  P_MODE
                            MESSAGES
INTO I_MSG.

 
ENDLOOP.

*--- Handling error records
 
LOOPAT I_MSG.

   
CALLFUNCTION'FORMAT_MESSAGE'
    
EXPORTING
      
ID              = I_MSG-MSGID*   LANG            = ' '
      
NO              = I_MSG-MSGNR
       V1              = I_MSG-MSGV1
       V2              = I_MSG-MSGV2
       V3              = I_MSG-MSGV3
       V4              = I_MSG-MSGV4
    
IMPORTING
       MSG             = I_RESULT* EXCEPTIONS*   NOT_FOUND       = 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.

   
WRITE / I_RESULT.

 
ENDLOOP.
ENDFORM.                    " POPULATE_BDCDATA

*&      Form  SPLIT_DATA*&---------------------------------------------------------------------*

*       text*----------------------------------------------------------------------*

*  -->  p1     

text*  <-- 

p2   

    text*----------------------------------------------------------------------*

FORM SPLIT_DATA .

IN_BNKA[] = IN_LFA1[].

*--Intenal tables Sorting
 
SORT IN_LFA1 BY VENDOR COMP_ID DESCENDING.
 
SORT IN_BNKA BY VENDOR BANK_COUNTRY BANK_KEY BANK_ACC IBAN SWIFT_CODE BANK_NAME.
*--Deleting duplicated entries
 
DELETEADJACENTDUPLICATESFROM  IN_LFA1 COMPARING VENDOR COMP_ID.
 
DELETEADJACENTDUPLICATESFROM  IN_BNKA COMPARING VENDOR BANK_COUNTRY  BANK_KEY BANK_ACC IBAN SWIFT_CODE BANK_NAME.


ENDFORM.                    " SPLIT_DATA

*----------------------------------------------------------------------*

*        Start new screen                                              *

*----------------------------------------------------------------------*

FORM BDC_DYNPRO USINGPROGRAMDYNPRO.
 
CLEAR BDCDATA.
  BDCDATA-
PROGRAM  = PROGRAM.
  BDCDATA-
DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN =
'X'.
 
APPEND BDCDATA.ENDFORM.                    "BDC_DYNPRO


 

 

*----------------------------------------------------------------------*

*        Insert field                                                  *

*----------------------------------------------------------------------*

FORM BDC_FIELD USING FNAM FVAL.
 
CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
 
APPEND BDCDATA.ENDFORM.                    "BDC_FIELD

                             
                          

 

 

Conclusion :

 

It would be most useful , to create a BDC for an area , which is tedious to enter the master data for certain areas like Bank Data of vendor master . The above BDC program will update the bank data making sourcing consultant life easy .


Viewing all articles
Browse latest Browse all 133

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>