Application Development Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 

re: how to capture iblnr,gjahr using mi01 tcode in bdc

0 Kudos

Hi Experts

  /h

  i have developed a bdc code to generate  physical document number using mi01 tcode. once iblnr is generated how to

  capture iblnr , gjahr and update this values into ztable.  here is my code

report ZBDCMIO1

        no standard page heading line-size 255.

TABLES: RM07I,

         IKPF,

         ZMI01.

DATA: BEGIN OF it_final OCCURS 0,

        bldat(20),

        gidat(20),

        werks(10),

        lgort(10),

        sperr(4),

        xlvOca(4),

        xblni(20),

        head(4) TYPE c,

        matnr(20),

        END OF it_final.

  DATA: BEGIN OF it_final1 OCCURS 0,

        IBLNR TYPE IBLNR,

        GJAHR TYPE GJAHR,

        END OF it_final1.

data: it_bdcdata TYPE STANDARD TABLE OF BDCDATA WITH HEADER LINE,

       w_file1 TYPE string,

       v_ind(2) TYPE n,

       it_msg TYPE STANDARD TABLE OF bdcmsgcoll WITH HEADER LINE,

       v_matnr(30) TYPE c.

PARAMETERS: filename LIKE rlgrap-filename.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR filename.

     CALL FUNCTION 'F4_FILENAME'

     IMPORTING

       file_name = filename.

*include bdcrecx1.

start-of-selection.

   w_file1 = filename.

*perform open_group.

   CALL FUNCTION 'GUI_UPLOAD'

     EXPORTING

       filename                      = w_file1

      filetype                      = 'ASC'

     has_field_separator           = 'X'

     TABLES

       data_tab                      = it_final.

   loop at it_final where head = 'H'.

perform bdc_dynpro      using 'SAPMM07I' '0700'.

perform bdc_field       using 'BDC_CURSOR'

                               'IKPF-SPERR'.

perform bdc_field       using 'BDC_OKCODE'

                               '/00'.

perform bdc_field       using 'RM07I-BLDAT'

*                              '13.06.2008'.

                                it_final-bldat.

perform bdc_field       using 'RM07I-GIDAT'

*                              '13.06.2008'.

                                it_final-gidat.

perform bdc_field       using 'IKPF-WERKS'

*                              '0005'.

                                it_final-werks.

perform bdc_field       using 'IKPF-LGORT'

*                              '0001'.

                                it_final-lgort.

perform bdc_field       using 'IKPF-SPERR'

*                              'X'.

                                it_final-sperr.

perform bdc_field       using 'RM07I-XLVOCA'

*                              'X'.

                                it_final-xlvoca.

v_ind = 01.

loop at it_final where head ne 'H'.

* v_ind = v_ind + 1.

CONCATENATE 'ISEG-MATNR' '(' V_IND ')' INTO V_MATNR.

perform bdc_dynpro      using 'SAPMM07I' '0721'.

perform bdc_field       using 'BDC_CURSOR'

*                              'ISEG-MATNR(01)'.

                                 V_MATNR.

perform bdc_field       using 'BDC_OKCODE'

                               '/00'.

perform bdc_field       using  V_MATNR       "'ISEG-MATNR(01)'

*                              'T-AC0101'.

                                 IT_FINAL-MATNR.

perform bdc_dynpro      using 'SAPMM07I' '0721'.

perform bdc_field       using 'BDC_CURSOR'

*                              'ISEG-MATNR(01)'.

                                V_MATNR.

perform bdc_field       using 'BDC_OKCODE'

                               '/00'.

*perform bdc_field       using 'ISEG-MATNR(01)'

*                              'T-AC0201'.

**perform bdc_dynpro      using 'SAPMM07I' '0721'.

**perform bdc_field       using 'BDC_CURSOR'

***                              'ISEG-MATNR(01)'.

**                                V_MATNR.

**perform bdc_field using 'BDC_OKCODE'

**                         '=POAN'.

**IF V_IND = 02.

**   V_IND = 01.

**   ENDIF.

ENDLOOP.

perform bdc_field       using 'BDC_OKCODE'

                               '=BU'.

call transaction 'MI01' using it_bdcdata mode 'A' update 'A' messages into it_msg.

*perform bdc_transaction using 'MI01'.

*perform close_group.

ENDLOOP.

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

*        Start new screen                                              *

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

FORM BDC_DYNPRO USING PROGRAM DYNPRO.

   CLEAR it_BDCDATA.

   it_BDCDATA-PROGRAM  = PROGRAM.

   it_BDCDATA-DYNPRO   = DYNPRO.

   it_BDCDATA-DYNBEGIN = 'X'.

   APPEND it_BDCDATA.

ENDFORM.

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

*        Insert field                                                  *

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

FORM BDC_FIELD USING FNAM FVAL.

*  IF FVAL <> NODATA.

     CLEAR it_BDCDATA.

     it_BDCDATA-FNAM = FNAM.

     it_BDCDATA-FVAL = FVAL.

     APPEND it_BDCDATA.

*  ENDIF.

ENDFORM.

/h

with warm regards

nagaraj

1 REPLY 1

Former Member
0 Kudos

please find the below coding for mi01 mi04 mi20

hope it helps.

DATA: wait type BAPITA-WAIT.

TYPES: BEGIN OF ty_flatfile1,

         bldat type bldat,

         gidat type gidat,

         werks type werks_d,

         lgort type lgort_d,

         matnr type matnr,

         gjahr type gjahr,

         zldat type IIKPF-ZLDAT,

         pcount type ISEG-ERFMG,

         batch type charg_d,

         uom type meins,

         zero type XNULL,

         bstar type iseg-bstar,

       END OF ty_flatfile1.

DATA: TA_FLATFILE1 type TABLE OF ty_flatfile1,

       WA_FLATFILE1 type ty_flatfile1.

***DECLARATION OF BDC *******

DATA: ta_bdcdata TYPE TABLE OF bdcdata,

       wa_bdcdata type bdcdata.

data: ta_bdcmsgcoll type TABLE OF bdcmsgcoll,

       wa_bdcmsgcoll type bdcmsgcoll.

data: ta_bdcmsgcoll1 type TABLE OF bdcmsgcoll,

       wa_bdcmsgcoll1 type bdcmsgcoll.

***ERROR HANDLING***

DATA: ERRTEXT TYPE STRING,

       SUCCTEXT TYPE STRING.

TYPES: BEGIN OF ty_text,

          succ type string,

        END OF ty_text.

DATA: ta_text TYPE TABLE OF ty_text,

       wa_text type ty_text.

***declaration for excel conversion***

DATA: TA_EXCEL TYPE TABLE OF ALSMEX_TABLINE,

       WA_EXCEL TYPE ALSMEX_TABLINE.

***other declaration***

FIELD-SYMBOLS <fs> type any.

data: vf_index type i,

       V_sear type string.

DATA : l_start_col TYPE i VALUE 1,

          l_start_row TYPE i VALUE 2,

          l_end_col   TYPE i VALUE 256,

          l_end_row   TYPE i VALUE 65536.

data: ITEMS TYPE TABLE OF BAPI_PHYSINV_COUNT_ITEMS WITH HEADER LINE,

       bapiRETURN  TYPE TABLE OF  BAPIRET2 WITH HEADER LINE,

       bapiRET  TYPE TABLE OF  BAPIRET2 WITH HEADER LINE,

       items1 TYPE TABLE OF BAPI_PHYSINV_POST_ITEMS WITH HEADER LINE.

*      HEAD TYPE BAPI_PHYSINV_CREATE_HEAD,

data: iblnr TYPE IKPF-IBLNR.

data: msehi TYPE t006-msehi.

data: isocode type t006-isocode.

**********************************************************************

***design of selection screen***

**********************************************************************

***selection screen***

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECTION-SCREEN skip 3.

PARAMETERS : p_file type IBIPPARMS-PATH .

SELECTION-SCREEN skip 3.

SELECTION-SCREEN END OF BLOCK b1.

***selection screen value request***

at SELECTION-SCREEN on VALUE-REQUEST FOR p_file.

   CALL FUNCTION 'F4_FILENAME'

     EXPORTING

       PROGRAM_NAME  = SYST-CPROG

       DYNPRO_NUMBER = SYST-DYNNR

       FIELD_NAME    = 'P_FILE'

     IMPORTING

       FILE_NAME     = P_FILE.

***SELECTION SCREEN VALIDATION***

AT SELECTION-SCREEN.                                 "validation

   if p_file <> ''.

     V_sear = p_file.

     SEARCH V_sear for '.xls'.

     if sy-subrc <> 0.

       message 'please provide excel file. it is not valid' type 'E'.

     ENDIF.

   ENDIF.

**********************************************************************

***start of selection***

**********************************************************************

START-OF-SELECTION.

   perform excel_upload.

   perform excel_conversion.

   perform bdc_upload.

   perform error_display.

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

*&      Form  EXCEL_UPLOAD

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM EXCEL_UPLOAD .

   CLEAR TA_EXCEL.

   CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'

     EXPORTING

       FILENAME                = P_FILE

       I_BEGIN_COL             = l_start_col

       I_BEGIN_ROW             = l_start_row

       I_END_COL               = l_end_col

       I_END_ROW               = l_end_row

     TABLES

       INTERN                  = TA_EXCEL

     EXCEPTIONS

       INCONSISTENT_PARAMETERS = 1

       UPLOAD_OLE              = 2

       OTHERS                  = 3.

   IF SY-SUBRC <> 0.

* Implement suitable error handling here

   ENDIF.

ENDFORM.                    " EXCEL_UPLOAD

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

*&      Form  EXCEL_CONVERSION

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM EXCEL_CONVERSION .

   IF TA_EXCEL IS NOT INITIAL.

     SORT TA_EXCEL BY ROW COL.

     CLEAR WA_FLATFILE1.

     CLEAR WA_EXCEL.

     loop at ta_excel into wa_excel.

       move wa_excel-col to vf_index.

       ASSIGN COMPONENT vf_index OF STRUCTURE WA_FLATFILE1 to <fs>.

       if sy-subrc = 0.

         move wa_excel-value to <fs>.

       ENDIF.

       AT END OF ROW.

         APPEND WA_FLATFILE1 TO TA_FLATFILE1.

         CLEAR WA_FLATFILE1.

       ENDAT.

     ENDLOOP.

   ELSE.

     MESSAGE 'NO DATA' TYPE 'E'.

   ENDIF.

ENDFORM.                    " EXCEL_CONVERSION

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

*&      Form  BDC_UPLOAD

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM BDC_UPLOAD .

   LOOP AT TA_FLATFILE1 INTO WA_FLATFILE1.

*    clear wa_flatfile1.

     refresh ta_bdcmsgcoll.

     clear wa_bdcmsgcoll.

     refresh items.

     refresh items1.

     refresh bapireturn.

     refresh bapiret.

     clear items[].

     clear items1[].

     clear bapireturn[].

     clear bapiret[].

     perform bdc_dynpro      using 'SAPMM07I' '0700'.

     perform bdc_field       using 'BDC_CURSOR'

                                   'RM07I-GIDAT'.

     perform bdc_field       using 'BDC_OKCODE'

                                   '/00'.

     perform bdc_field       using 'RM07I-BLDAT'

                                   WA_FLATFILE1-BLDAT.

     perform bdc_field       using 'RM07I-GIDAT'

                                   WA_FLATFILE1-GIDAT.

     perform bdc_field       using 'IKPF-WERKS'

                                   WA_FLATFILE1-WERKS.

     perform bdc_field       using 'IKPF-LGORT'

                                   WA_FLATFILE1-LGORT.

*perform bdc_field       using 'RM07I-XLVOCA'

*                             .

     perform bdc_dynpro      using 'SAPMM07I' '0721'.

     perform bdc_field       using 'BDC_CURSOR'

                                   'ISEG-MATNR(01)'.

     perform bdc_field       using 'BDC_OKCODE'

                                   '/00'.

     perform bdc_field       using 'ISEG-MATNR(01)'

                                   WA_FLATFILE1-MATNR.

     perform bdc_field       using 'ISEG-BSTAR(01)'

                                    wa_Flatfile1-bstar.

     perform bdc_dynpro      using 'SAPMM07I' '0721'.

     perform bdc_field       using 'BDC_CURSOR'

                                   'ISEG-MATNR(01)'.

     perform bdc_field       using 'BDC_OKCODE'

                                   '=BU'.

     CALL TRANSACTION 'MI01' USING TA_BDCDATA MODE 'N' UPDATE 'S' MESSAGES INTO TA_BDCMSGCOLL.

     wa_text-succ = wa_flatfile1-matnr.

     APPEND wa_text to ta_Text.

     perform bdc_error_handling.

     clear wa_BDCDATA.

     refresh ta_bdcdata.

   ENDLOOP.

ENDFORM.

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

*&      Form  BDC_ERROR_HANDLING

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM BDC_ERROR_HANDLING .

   LOOP AT TA_BDCMSGCOLL INTO WA_BDCMSGCOLL WHERE MSGTYP = 'S'.

     CALL FUNCTION 'FORMAT_MESSAGE'

       EXPORTING

         ID        = WA_BDCMSGCOLL-MSGID

         LANG      = WA_BDCMSGCOLL-MSGSPRA

         NO        = WA_BDCMSGCOLL-MSGNR

         V1        = WA_BDCMSGCOLL-MSGV1

         V2        = WA_BDCMSGCOLL-MSGV2

         V3        = WA_BDCMSGCOLL-MSGV3

         V4        = WA_BDCMSGCOLL-MSGV4

       IMPORTING

         MSG       = wa_text-succ

       EXCEPTIONS

         NOT_FOUND = 1

         OTHERS    = 2.

     IF SY-SUBRC <> 0.

* Implement suitable error handling here

     ENDIF.

     APPEND wa_text to ta_text.

     clear wa_text.

     if wa_bdcmsgcoll-msgv1 <> ''.

       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

         EXPORTING

           INPUT  = wa_flatfile1-matnr

         IMPORTING

           OUTPUT = wa_flatfile1-matnr.

       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

         EXPORTING

           INPUT  = wa_flatfile1-uom

         IMPORTING

           OUTPUT = wa_flatfile1-uom.

       .

*SELECT SINGLE msehi

*       isocode FROM t006 INTO (msehi , isocode ) WHERE msehi = wa_flatfile1-uom.

       items-ITEM      = '001'.

       items-MATERIAL = wa_flatfile1-matnr.

       items-batch = wa_flatfile1-batch.

       items-ENTRY_QNT = wa_flatfile1-pcount.

       items-ENTRY_UOM = wa_Flatfile1-uom.

       items-ZERO_COUNT = wa_flatfile1-zero.

*      items-ENTRY_UOM_ISO = 'PCE'.

       APPEND items.

       items1-ITEM      = '001'.

       items1-MATERIAL = wa_flatfile1-matnr.

       items1-batch = wa_flatfile1-batch.

*      items-ENTRY_QNT = wa_flatfile1-pcount.

*      items-ENTRY_UOM = wa_flatfile1-uom.

       APPEND items1.

       iblnr = wa_bdcmsgcoll-msgv1.

       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

         EXPORTING

           INPUT  = iblnr

         IMPORTING

           OUTPUT = iblnr.

       SELECT SINGLE iblnr FROM ikpf INTO iblnr WHERE iblnr = iblnr.

       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

         EXPORTING

           INPUT  = wa_flatfile1-zldat

         IMPORTING

           OUTPUT = wa_flatfile1-zldat.

       CALL FUNCTION 'BAPI_MATPHYSINV_COUNT'

         EXPORTING

           PHYSINVENTORY = iblnr

           FISCALYEAR    = wa_flatfile1-gjahr

*         PERCENTAGE_VARIANCE       =

           COUNT_DATE    = wa_flatfile1-zldat

         TABLES

           ITEMS         = items

           RETURN        = bapireturn

*         SERIALNUMBERS =

*         EXTENSIONIN   =

         .

       wa_text-succ = bapireturn-message.

       APPEND wa_text to ta_text.

       clear bapireturn.

       refresh bapireturn.

       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

         EXPORTING

           WAIT   = 'X'

         IMPORTING

           RETURN = bapiret.

       wa_text-succ = bapiret-message.

       APPEND wa_text to ta_text.

       clear bapiret.

       refresh bapiret.

       CALL FUNCTION 'BAPI_MATPHYSINV_POSTDIFF'

         EXPORTING

           PHYSINVENTORY = iblnr

           FISCALYEAR    = wa_flatfile1-gjahr

           PSTNG_DATE    = wa_flatfile1-zldat

*         THRESHOLD_VALUE       =

         TABLES

           ITEMS         = items1

           RETURN        = bapireturn.

       wa_text-succ = bapireturn-message.

       APPEND wa_text to ta_text.

       clear bapireturn.

       refresh bapireturn.

       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

         EXPORTING

           WAIT   = 'X'

         IMPORTING

           RETURN = bapiret.

       wa_text-succ = bapiret-message.

       APPEND wa_text to ta_text.

       clear bapiret.

       refresh bapiret.

     endif.

   ENDLOOP.

   LOOP AT TA_BDCMSGCOLL INTO WA_BDCMSGCOLL WHERE MSGTYP = 'E'.

     CALL FUNCTION 'FORMAT_MESSAGE'

       EXPORTING

         ID        = WA_BDCMSGCOLL-MSGID

         LANG      = WA_BDCMSGCOLL-MSGSPRA

         NO        = WA_BDCMSGCOLL-MSGNR

         V1        = WA_BDCMSGCOLL-MSGV1

         V2        = WA_BDCMSGCOLL-MSGV2

         V3        = WA_BDCMSGCOLL-MSGV3

         V4        = WA_BDCMSGCOLL-MSGV4

       IMPORTING

         MSG       = wa_Text-succ

       EXCEPTIONS

         NOT_FOUND = 1

         OTHERS    = 2.

     IF SY-SUBRC <> 0.

* Implement suitable error handling here

     ENDIF.

     APPEND wa_text to ta_Text.

     clear wa_text.

*perform error_display.

   ENDLOOP.

ENDFORM.                    " BDC_ERROR_HANDLING

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

*&      Form  ERROR_DISPLAY

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM ERROR_DISPLAY .

   if ta_text is  NOT INITIAL.

     loop at ta_text INTO wa_text.

       write:/ wa_Text-succ.

       clear wa_text.

     ENDLOOP.

   endif.

eNDFORM.                    " ERROR_DISPLAY

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

*&      Form  BDC_DYNPRO

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

*       text

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

*      -->P_0232   text

*      -->P_0233   text

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

FORM BDC_DYNPRO  USING   PROGRAM SCREEN.

   WA_BDCDATA-PROGRAM = PROGRAM.

   WA_BDCDATA-DYNPRO = SCREEN.

   WA_BDCDATA-DYNBEGIN = 'X'.

   APPEND WA_BDCDATA TO TA_BDCDATA.

   CLEAR WA_BDCDATA.

ENDFORM.                    " BDC_DYNPRO

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

*&      Form  BDC_FIELD

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

*       text

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

*      -->P_0297   text

*      -->P_0298   text

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

FORM BDC_FIELD  USING    FNAM FVAL.

   WA_BDCDATA-FNAM = FNAM.

   WA_BDCDATA-FVAL = FVAL.

   APPEND WA_BDCDATA TO TA_BDCDATA.

   CLEAR WA_BDCDATA.

ENDFORM.                    " BDC_FIELD