Feb 8, 2011

BDC for MB1B

Hi Just copy the required Program to own Z Program
TYPE-POOLS: truxs.
DATA: zmode TYPE  c.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
PARAMETERS : mode_a      RADIOBUTTON    GROUP  r1,
             mode_n      RADIOBUTTON    GROUP  r1.

PARAMETERS: p_ifile TYPE rlgrap-filename.
PARAMETERS: p_ofile TYPE string.

SELECTION-SCREEN END OF BLOCK b1.

INCLUDE zbdcrec.

DATABEGIN OF it_src_upload OCCURS 0,
        rectyp(1)  TYPE c,      " Header / Item Indicator
        bldat(10)  TYPE c,      " Document Date
        budat(10)   TYPE c,      " Posting Date
        bktxt(25)  TYPE c,      " Doc. Header Text
        bwartwa(3TYPE c,      " Movement Type
        werks(4)   TYPE c,      " Plant
        lgort(4)   TYPE c,      " Storage Location
        sobkz(1)   TYPE c,      " Special Stock
        matnr(18)  TYPE c,      " Material
        erfmg(13)  TYPE c,      " Quantity
        ERFME(3)   TYPE c,      "Unit of Entry
        charg(10)  TYPE c,      " Batch
        exbwr(13)  TYPE c,      " Amount
        lifnr(10)  TYPE c,      " Vendor
        kunnr(10)  TYPE c,      " Customer
        UMMAT(18)  TYPE C,      "MATERIAL (RECEIVINF/ISSUING)
        UMLGO(4)   TYPE C,      "ISSUING/RECEIVING STOR LOC
      END OF it_src_upload.

DATABEGIN OF it_header OCCURS 0,
        rectyp(1)  TYPE c,      " Header / Item Indicator
        hcount(5)  TYPE c,      " Counter
        bldat(10)   TYPE c,      " Document Date
        budat(10)   TYPE c,      " Posting Date
        bktxt(25)  TYPE c,      " Doc. Header Text
        bwartwa(3TYPE c,      " Movement Type
        werks(4)   TYPE c,      " Plant
        lgort(4)   TYPE c,      " Storage Location
        sobkz(1)   TYPE c,      " Special Stock
      END OF it_header.

DATABEGIN OF it_item OCCURS 0,
        rectyp(1)  TYPE c,      " Header / Item Indicator
        hcount(5)  TYPE c,      " Counter
        matnr(18)  TYPE c,      " Material
        erfmg(13)  TYPE c,      " Quantity
        ERFME(3)   TYPE c,      " Unit of Entry
        charg(10)  TYPE c,      " Batch
        exbwr(13)  TYPE c,      " Amount
        lifnr(10)  TYPE c,      " Vendor
        kunnr(10)  TYPE c,      " Customer
        UMMAT(18)  TYPE C,      "MATERIAL (RECEIVINF/ISSUING)
        UMLGO(4)   TYPE C,      "ISSUING/RECEIVING STOR LOC
        UMCHA(10)  TYPE C,      " issueing receiving valuation
        END OF it_item.

DATA: it_item_nex LIKE it_item.

DATABEGIN OF it_err OCCURS 0,
        rectyp(1)  TYPE c,      " Header / Item Indicator
        bldat(10)   TYPE c,      " Document Date
        budat(10)   TYPE c,      " Posting Date
        bktxt(25)  TYPE c,      " Doc. Header Text
        bwartwa(3TYPE c,      " Movement Type
        werks(4)   TYPE c,      " Plant
        lgort(4)   TYPE c,      " Storage Location
        matnr(18)  TYPE c,      " Material
        erfmg(13)  TYPE c,      " Quantity
        ERFME(3)   TYPE c,      " Unit of Entry
        charg(10)  TYPE c,      " Batch
        exbwr(13)  TYPE c,      " Amount
        error(255TYPE c,     " Error Message Text
      END OF it_err.

DATA: it_raw TYPE truxs_t_text_data.
DATA: messtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.


DATA: v_total    TYPE i.
DATA: v_txt  TYPE char80.
DATA: v_correct  TYPE i.
DATA: v_error    TYPE i.
DATA: v_cnt TYPE i.

CONSTANTS: c_headertype(1TYPE c VALUE 'H',
           c_itemtype(1)   TYPE c VALUE 'I'.

*---------------------------------------------------------------------*
*-- At Selection Screen
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ifile.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mode     = 'O'
    IMPORTING
      filename = p_ifile
    EXCEPTIONS
      OTHERS   = 1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_ofile.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      mode     = 'O'
    IMPORTING
      filename = p_ofile
    EXCEPTIONS
      OTHERS   = 1.


START-OF-SELECTION.
  IF p_ofile IS INITIAL.
    CONCATENATE p_ifile '_err' sy-datum sy-uzeit '.xls' INTO p_ofile.
  ENDIF.
  PERFORM data_upload.

  IF mode_a EQ 'X'.
    zmode = 'A'.
  ELSEIF mode_n EQ 'X'.
    zmode = 'N'.
  ENDIF.

  PERFORM filter_data.
  PERFORM populate_data.
  PERFORM write_status.

*&---------------------------------------------------------------------*
*&      Form  DATA_UPLOAD
*&---------------------------------------------------------------------*
FORM data_upload.

  CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
    EXPORTING
      i_field_seperator    = 'X'
      i_line_header        = 'X'
      i_tab_raw_data       = it_raw
      i_filename           = p_ifile
    TABLES
      i_tab_converted_data = it_src_upload
    EXCEPTIONS
      conversion_failed    = 1
      OTHERS               = 2.

  IF sy-subrc <> 0.
    MESSAGE 'Error while uploading file' TYPE 'E'.
  ENDIF.

ENDFORM.                               " DATA_UPLOAD

*&amp;---------------------------------------------------------------------*
*&amp;      Form  FILTER_DATA
*&amp;---------------------------------------------------------------------*
FORM filter_data.

* Filtering the Header and Item data
  DATA: c_hcount TYPE i.
*BREAK-POINT.
  LOOP AT it_src_upload.
    TRANSLATE it_src_upload TO UPPER CASE.
    MODIFY it_src_upload.
    IF it_src_upload-rectyp = c_headertype.
      c_hcount = c_hcount + 1.
      it_header-hcount = c_hcount.
      MOVE-CORRESPONDING it_src_upload TO it_header.
      APPEND it_header.
    ELSEIF it_src_upload-rectyp = c_itemtype .
      it_item-hcount = c_hcount.
      MOVE-CORRESPONDING it_src_upload TO it_item.
      APPEND it_item.
    ENDIF.
  ENDLOOP.
ENDFORM.                    "filter_data

*&amp;---------------------------------------------------------------------*
*&amp;      Form  POPULATE_DATA
*&amp;---------------------------------------------------------------------*
FORM populate_data.
*BREAK-POINT.
  LOOP AT it_header.
    PERFORM bdc_dynpro      USING 'SAPMM07M'
                                  '0400'.
    PERFORM bdc_field       USING 'BDC_OKCODE'
                                  '=NPE'.

* Document Date
    PERFORM bdc_field       USING 'MKPF-BLDAT'
                                  it_header-bldat.
* Posting Date
    PERFORM bdc_field       USING 'MKPF-BUDAT'
                                  it_header-budat.
* Document Header Text
    PERFORM bdc_field       USING 'MKPF-BKTXT'
                                  it_header-bktxt.
* Movement Type
    PERFORM bdc_field       USING 'RM07M-BWARTWA'
                                  it_header-bwartwa.
* Plant
    PERFORM bdc_field       USING 'RM07M-WERKS'
                                  it_header-werks.
* Storage Location
    PERFORM bdc_field       USING 'RM07M-LGORT'
                                  it_header-lgort.
* Special Stock
    PERFORM bdc_field       USING 'RM07M-SOBKZ'
                                  it_header-sobkz.

    PERFORM bdc_field       USING 'XFULL'
                                  'X'.

    PERFORM bdc_field       USING 'RM07M-WVERS2'
                                   'X'.

    LOOP AT it_item WHERE hcount = it_header-hcount.

      v_cnt = sy-tabix + 1.

      PERFORM bdc_dynpro      USING 'SAPMM07M'
                                    '0410'.

* Set the OK Code according to the number of records
      CLEAR it_item_nex.
      READ TABLE it_item INDEX v_cnt INTO it_item_nex.
      IF sy-subrc = 0.
        IF it_item_nex-hcount = it_header-hcount.
* If not the last record then OK Code has to be to go to New Item
          PERFORM bdc_field       USING 'BDC_OKCODE'
                                        '=NPE'.
        ELSE.
* If last record of the document then OK Code has to be to SAVE
          PERFORM bdc_field       USING 'BDC_OKCODE'
                                        '=BU'.
        ENDIF.
      ELSE.
* If last record then OK Code has to be to SAVE
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=BU'.
      ENDIF.

* Material
      PERFORM bdc_field       USING 'MSEG-MATNR'
                                    it_item-matnr.
* Quantity
      PERFORM bdc_field       USING 'MSEG-ERFMG'
                                    it_item-erfmg.
* Unit Of Entry
      PERFORM bdc_field       USING 'MSEG-ERFME'
                                    it_item-ERFME.
* Batch
      PERFORM bdc_field       USING 'MSEG-CHARG'
                                    it_item-charg.

*      IF it_header-sobkz = ' '.
* Amount
        PERFORM bdc_field       USING 'MSEG-EXBWR'
                                      it_item-exbwr.
*      ENDIF.

        PERFORM bdc_field       USING 'MSEG-UMMAT'
                                      it_item-UMMAT.

        PERFORM bdc_field       USING 'MSEG-UMWRK'
                                      it_header-WERKS.

        PERFORM bdc_field       USING 'MSEG-UMLGO'
                                      it_item-UMLGO.

        PERFORM bdc_field       USING 'MSEG-UMCHA'
                                      it_item-UMCHA.

      CASE it_header-sobkz.
        WHEN 'O'.
* Vendor
          PERFORM bdc_field       USING 'MSEG-LIFNR'
                                        it_item-lifnr.
        WHEN 'W'.
* Customer
          PERFORM bdc_field       USING 'MSEGK-KUNNR'
                                        it_item-kunnr.
      ENDCASE.


      PERFORM bdc_dynpro      USING 'SAPLKACB'
                                    '0002'.
      PERFORM bdc_field       USING 'BDC_OKCODE'
                                    '=ENTE'.
    ENDLOOP.

    CALL TRANSACTION 'MB1B' USING bdcdata MODE zmode UPDATE 'S'.

    IF sy-subrc <> 0.
      CALL FUNCTION 'TB_MESSAGE_BUILD_TEXT'
        EXPORTING
          langu = sy-langu
          msgid = sy-msgid
          msgno = sy-msgno
          msgv1 = sy-msgv1
          msgv2 = sy-msgv2
          msgv3 = sy-msgv3
          msgv4 = sy-msgv4
        IMPORTING
          text  = v_txt.

      MOVE-CORRESPONDING it_header TO it_err.
      v_error = v_error + 1.
      it_err-error = v_txt.
      APPEND it_err.
      CLEAR it_err.
      CLEAR v_txt.

      LOOP AT it_item WHERE hcount = it_item-hcount.
        MOVE-CORRESPONDING it_item TO it_err.
        APPEND it_err.
        CLEAR: it_err.
      ENDLOOP.
    ELSE.
      v_correct = v_correct + 1.
    ENDIF.

    CLEAR: bdcdata.
    REFRESH: bdcdata.

  ENDLOOP.

ENDFORM.                    "


*&---------------------------------------------------------------------*
*&      Form  WRITE_STATUS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM write_status .

  v_total = v_error + v_correct.
  SKIP 2.
  WRITE:/ '-----------Status Log-----------' COLOR 6.
  SKIP 2.
  WRITE:/ 'Total Number of Records   :', v_total COLOR 1.
  WRITE:/ 'Total Updated Records     :', v_correct COLOR 3.
  WRITE:/ 'Total Not Updated Records :', v_error COLOR 6.

  IF NOT it_err[] IS INITIAL.
    WRITE:/ 'Error Log file', p_ofile, 'saved.'.
    CALL FUNCTION 'GUI_DOWNLOAD'
      EXPORTING
        filename              = p_ofile
        filetype              = 'ASC'
        append                = 'X'
        write_field_separator = 'X'
      TABLES
        data_tab              = it_err.

    IF sy-subrc <> 0.
      WRITE:/ 'Error creating log file'.
    ENDIF.
  ENDIF.
ENDFORM.                    " WRITE_STATUS



USE EXCEL FILE TO UPLOAD DATA.
HEADER MARKED WITH H
ITEM MARKED WITH I
IN THE VERY FIRST COLUMN OF EXCEL

1 comment:

  1. CAN U GIVE TEMPLATE WHICH U USED FOR THIS ON
    khushprasad21@gmail.com

    ReplyDelete