Application Development and Automation 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: 
Read only

Problem with BAPI_PO_CREATE1 quantity feild....!

Former Member
0 Likes
1,499

Hi All,

I am facing problem with BAPI_PO_CREATE1 . everything works fine apart from QUANTITY Field. It is getting doubled in the created PO.

Please suggest.

here is the code what i have used.

REPORT zmm_open_purchase_order_upload.

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

*&  Include           ZMM_OPENPO_TOP

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

TYPE-POOLS: truxs.

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

*& Table Declarations

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

TABLES : t001, t077d.

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

*& Data Declarations

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

* Types

DATA : l_pono(50).

DATA: it_tab TYPE filetable,

       gd_subrc TYPE i,

       l_file TYPE rlgrap-filename.

DATA: it_raw TYPE truxs_t_text_data.

DATA : BEGIN OF gt_final OCCURS 0,

         id(5),

         doc_type   TYPE esart,

*        docdate(10),

*        SUPPL_PLNT TYPE RESWK,

         vendor     TYPE elifn,

         purch_org  TYPE ekorg,

         pur_group  TYPE bkgrp,

         comp_code  TYPE bukrs,

         pmnttrms   TYPE dzterm,

         incoterms1 TYPE inco1,

         incoterms2 TYPE inco2,

         our_ref    TYPE UNSEZ,

         acctasscat TYPE bapimepoitem-acctasscat ,

         docdate(10),                             " item

         item_cat   TYPE bapimepoitem-item_cat,

         material   TYPE matnr,

         TXZ01      TYPE TXZ01,                   " Short Text

*        quantity   TYPE bstmg,"bapimepoitem-QUANTITY,

         quantity(13),"   LIKE    bapimepoitem-quantity,

         net_price  TYPE bapimepoitem-net_price,

         tax_code   TYPE mwskz,

         plant      TYPE ewerk,

         VAL_TYPE   TYPE BWTAR_D,

         stge_loc   TYPE bapimepoitem-stge_loc,

         MATL_GROUP type MATKL,

         GL_ACCOUNT type SAKNR,

         COSTCENTER TYPE KOSTL,

         ORDERID type AUFNR,

         WBS_ELEMENT TYPE PS_POSID,

         NETWORK TYPE NPLNR,

*        scheduleno TYPE eeten,

         deldate(10),

         END OF gt_final.

DATA: suppl_plnt type reswk.

DATA : BEGIN OF gt_header OCCURS 0,

         id(5),

         doc_type   TYPE esart,

*        suppl_plnt type reswk,

         vendor     TYPE elifn,

*        docdate(10),

         purch_org  TYPE ekorg,

         pur_group  TYPE bkgrp,

         comp_code  TYPE bukrs,

*        vendor     TYPE elifn,

         pmnttrms   TYPE dzterm,

         incoterms1 TYPE inco1,

         incoterms2 TYPE inco2,

*        sales_pers TYPE char30,

         our_ref    TYPE UNSEZ,

        END OF gt_header.

DATA : BEGIN OF gt_item OCCURS 0,

        id(5),

*       l_item,

        acctasscat TYPE bapimepoitem-acctasscat ,

        docdate(10),

        item_cat   TYPE bapimepoitem-item_cat,

        material   TYPE matnr,

        TXZ01      TYPE TXZ01,                   " Short Text

*       quantity   TYPE bstmg,"bapimepoitem-QUANTITY,

        quantity(13),"   LIKE bapimepoitem-quantity,

        net_price  TYPE bapimepoitem-net_price,

        tax_code   TYPE mwskz,

        plant      TYPE ewerk,

        VAL_TYPE   TYPE BWTAR_D,

        stge_loc   TYPE bapimepoitem-stge_loc,

*       price_unit TYPE bapimepoitem-price_unit,

*       orderpr_un TYPE bapimepoitem-orderpr_un,

*       val_type   TYPE bapimepoitem-val_type,

        MATL_GROUP type MATKL,

        GL_ACCOUNT type SAKNR,

        COSTCENTER TYPE KOSTL,

        ORDERID type AUFNR,

        WBS_ELEMENT TYPE PS_POSID,

        NETWORK TYPE NPLNR,

*       scheduleno TYPE eeten,

        END OF gt_item.

DATA : BEGIN OF gt_schedule OCCURS 0,

        id(5),

*       scheduleno TYPE eeten,

        deldate(10),

*       quantity TYPE etmen,

        quantity(13),"  LIKE    bapimepoitem-quantity,

        END OF gt_schedule.

TYPES : BEGIN OF gt_pono,

         pono    TYPE ebeln,

*        message TYPE bapi_msg,

         END OF gt_pono.

TYPES : BEGIN OF gt_error,

         number TYPE char10,

         error TYPE bapi_msg,

         END OF gt_error.

* Internal Tables

*DATA : git_final TYPE STANDARD TABLE OF gty_final,

*       git_temp    TYPE STANDARD TABLE OF gty_final,

DATA : git_pono TYPE STANDARD TABLE OF gt_pono,

        git_error   TYPE STANDARD TABLE OF gt_error.

DATA : git_poitem TYPE STANDARD TABLE OF bapimepoitem,

        git_poitemx TYPE STANDARD TABLE OF bapimepoitemx,

        git_return  LIKE bapiret2 OCCURS 0 WITH HEADER LINE,

        git_posch   TYPE STANDARD TABLE OF bapimeposchedule,

        git_poschx  TYPE STANDARD TABLE OF bapimeposchedulx,

        POACCOUNT           TYPE STANDARD TABLE OF BAPIMEPOACCOUNT,

        POACCOUNTX           TYPE STANDARD TABLE OF BAPIMEPOACCOUNTX,

        test LIKE bapiflag-bapiflag,

        NO_PRICE_FROM_PO type  BAPIFLAG-BAPIFLAG.

* Work Area

*DATA : gwa_final TYPE gty_final,

*       gwa_temp    TYPE gty_final,

DATA : gwa_pono TYPE gt_pono,

        gwa_error   TYPE gt_error.

DATA : gt_pohdr TYPE bapimepoheader,

        gt_pohdrx   TYPE bapimepoheaderx.

DATA : gwa_poitem TYPE bapimepoitem,

        gwa_poitemx TYPE bapimepoitemx,

        gwa_return  TYPE bapiret2,

        gwa_posch   TYPE bapimeposchedule,

        gwa_poschx  TYPE bapimeposchedulx,

        gwa_POACCOUNT type BAPIMEPOACCOUNT,

        gwa_POACCOUNTx type BAPIMEPOACCOUNTx.

DATA : pono LIKE bapimepoheader-po_number,

        poret LIKE bapimepoheader OCCURS 0 WITH HEADER LINE.

* Variables

DATA : g_tot_rec_cnt TYPE p, "to hold total record count

        g_suc_rec_cnt TYPE p,               "to hold success record count

        g_err_rec_cnt TYPE p.               "to hold error record count

* Field Symbols

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

*& Initialization

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

INITIALIZATION.

   g_tot_rec_cnt = 0.

   g_suc_rec_cnt = 0.

   g_err_rec_cnt = 0.

*INCLUDE zmm_openpo_top. "Top Include

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

PARAMETERS: p_uname LIKE rlgrap-filename OBLIGATORY,

             p_test AS CHECKBOX.

SELECTION-SCREEN END OF BLOCK b1.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_uname.

   CALL METHOD cl_gui_frontend_services=>file_open_dialog

     EXPORTING

       window_title = 'Select File'

     CHANGING

       file_table   = it_tab

       rc           = gd_subrc.

   READ TABLE it_tab INTO p_uname INDEX 1.

START-OF-SELECTION.

   PERFORM get_excel_data.

   PERFORM get_header_item.

*Selection texts

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

* P_DNAM         File name for PO No

* P_DNAM_E         File name for Error

* P_UNAME         File name for Template

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

*&      Form  GET_EXCEL_DATA

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM get_excel_data .

   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

     EXPORTING

       input  = p_uname

     IMPORTING

       output = l_file.

   CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

     EXPORTING

       i_line_header        = 'X'

       i_tab_raw_data       = it_raw

       i_filename           = l_file

     TABLES

       i_tab_converted_data = gt_final

     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. " GET_EXCEL_DATA

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

*&      Form  GET_HEADER_ITEM

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

*       text

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

*  -->  p1        text

*  <--  p2        text

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

FORM get_header_item .

   DATA : flag(1),

          flag1(10).

   DATA : l_item(5) TYPE N,

          l_scheditem(5) TYPE n VALUE '10'.

   LOOP AT gt_final.

     CLEAR : flag,flag1.

     ON CHANGE OF gt_final-id.

       flag = 'X'.

     ENDON.

*    ON CHANGE OF gt_final-scheduleno.

*      flag1 = 'X'.

*    ENDON.

*

     IF flag = 'X'.

       MOVE-CORRESPONDING gt_final TO gt_header.

       APPEND gt_header.

     ENDIF.

*

     IF flag = 'X'.

       MOVE-CORRESPONDING gt_final TO gt_item.

       APPEND gt_item.

     ENDIF.

     IF flag = 'X'.

     MOVE-CORRESPONDING gt_final TO gt_schedule.

     APPEND gt_schedule.

    ENDIF.

   ENDLOOP.

   LOOP AT gt_header.

     IF p_test = 'X'.

       test = 'X'.

     ELSE.

       test = ' '.

     ENDIF.

     IF gt_header-doc_type    = 'ZST2'." OR gt_header-doc_type = 'ZST2' .

       gt_pohdr-suppl_plnt    = gt_header-vendor.

       gwa_poitem-acctasscat  = 'Q'.

    ELSE.

     CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

       EXPORTING

         input  = gt_header-vendor

       IMPORTING

         output = gt_pohdr-vendor.

     ENDIF.

*end of changes 08.07.2014

     gt_pohdr-comp_code   = gt_header-comp_code.

     gt_pohdr-doc_type    = gt_header-doc_type.

     gt_pohdr-vendor      = gt_header-vendor.

     gt_pohdr-purch_org   = gt_header-purch_org.

     gt_pohdr-pur_group   = gt_header-pur_group.

     gt_pohdr-PMNTTRMS    = gt_header-PMNTTRMS.

     gt_pohdr-INCOTERMS1  = gt_header-INCOTERMS1.

     gt_pohdr-our_ref     = gt_header-our_ref.

     gt_pohdr-pmnttrms    = gt_header-pmnttrms.

     gt_pohdr-incoterms1  = gt_header-incoterms1.

     gt_pohdr-incoterms2  = gt_header-incoterms2.

*    gt_pohdr-sales_pers  = gt_header-sales_pers.

     gt_pohdrx-comp_code  'X'.

     gt_pohdrx-doc_type   'X'.

     gt_pohdrx-vendor     'X'.

     if gt_header-doc_type = 'ZST2'." OR gt_header-doc_type = 'ZST2'.

       gt_pohdrx-suppl_plnt 'X'.

     else.

       gt_pohdrx-vendor     'X'.

     endif.

     gt_pohdrx-purch_org   'X'.

     gt_pohdrx-pur_group   'X'.

     gt_pohdrx-doc_date    'X'.

     gt_pohdrx-pmnttrms    'X'.

     gt_pohdrx-incoterms1  'X'.

     gt_pohdrx-incoterms2  'X'.

*    gt_pohdrx-sales_pers  =  'X'.

     gt_pohdrx-our_ref     'X'.

     NO_PRICE_FROM_PO = 'X'.

     L_ITEM = '00010'.

     LOOP AT gt_item WHERE id = gt_header-id.

       gwa_poitem-po_item     = l_item.

       IF gt_header-doc_type <> 'ZST2'." OR gt_header-doc_type <> 'ZST2'.

          gwa_poitem-acctasscat  = gt_item-acctasscat.

       endif.

       gwa_poitem-item_cat    = gt_item-item_cat.

       CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

         EXPORTING

           input  = gt_item-material

         IMPORTING

           output = gwa_poitem-material.

       gwa_poitem-short_text  = gt_item-TXZ01.

       gwa_poitem-quantity    = gt_item-quantity.

       gwa_poitem-net_price   = gt_item-net_price.

       gwa_poitem-plant       = gt_item-plant.

       gwa_poitem-VAL_TYPE    = gt_item-VAL_TYPE.

       gwa_poitem-tax_code    = gt_item-tax_code.

       gwa_poitem-stge_loc    = gt_item-stge_loc.

       gwa_poitem-MATL_GROUP  = gt_item-MATL_GROUP.

       APPEND gwa_poitem TO git_poitem.

       CLEAR :gt_item-quantity.

       gwa_poitemx-po_item    = l_item.

       gwa_poitemx-acctasscat = 'X'.

       gwa_poitemx-material   = 'X'.

       gwa_poitemx-quantity   = 'X'.

       gwa_poitemx-net_price  = 'X'.

       gwa_poitemx-plant      = 'X'.

*      gwa_poitem-VAL_TYPE    = 'X'.

      IF  gwa_poitem-VAL_TYPE IS NOT INITIAL.

       gwa_poitemx-VAL_TYPE   = 'X'.

      ENDIF.

       gwa_poitemx-tax_code   = 'X'.

*      gwa_poitemx-price_unit = 'X'.

*      gwa_poitemx-orderpr_un = 'X'.

*      gwa_poitemx-val_type   = 'X'.

       gwa_poitemx-item_cat   = 'X'.

       gwa_poitemx-stge_loc   = 'X'.

       gwa_poitemx-MATL_GROUP = 'X'.

       APPEND gwa_poitemx TO git_poitemx.

*      CLEAR :gwa_poitemx-quantity .

*******************************G/L Account**************************************

   gwa_POACCOUNT-PO_ITEM = l_item.

   CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

     EXPORTING

       input         = gt_item-GL_ACCOUNT

     IMPORTING

       OUTPUT        = gwa_POACCOUNT-GL_ACCOUNT.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

   EXPORTING

     input         = gt_item-COSTCENTER

    IMPORTING

      OUTPUT       = gwa_POACCOUNT-COSTCENTER.

*  gwa_POACCOUNT-COSTCENTER = gt_item-COSTCENTER.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

   EXPORTING

     input         = gt_item-ORDERID

    IMPORTING

      OUTPUT       = gwa_POACCOUNT-ORDERID.

*  gwa_POACCOUNT-ORDERID = gt_item-ORDERID.

   CALL FUNCTION 'CONVERSION_EXIT_ABPSN_INPUT'

     EXPORTING

       input         = gt_item-WBS_ELEMENT

      IMPORTING

        OUTPUT       = gwa_POACCOUNT-WBS_ELEMENT.

*  gwa_POACCOUNT-WBS_ELEMENT = gt_item-WBS_ELEMENT.

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'

   EXPORTING

     input         = gt_item-NETWORK

    IMPORTING

      OUTPUT       = gwa_POACCOUNT-NETWORK.

*  gwa_POACCOUNT-NETWORK = gt_item-NETWORK.

  APPEND  gwa_POACCOUNT to POACCOUNT.

* CLEAR :gwa_POACCOUNT.

   gwa_POACCOUNTX-PO_ITEM     = l_item.

   gwa_POACCOUNTX-GL_ACCOUNT  = 'X'.

   gwa_POACCOUNTX-COSTCENTER  = 'X'.

   gwa_POACCOUNTX-ORDERID     = 'X'.

   gwa_POACCOUNTX-WBS_ELEMENT = 'X'.

   gwa_POACCOUNTX-NETWORK     = 'X'.

  APPEND  gwa_POACCOUNTX to POACCOUNTX.

  ENDLOOP.

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

       LOOP AT gt_schedule WHERE id = gt_header-id." AND

*                                scheduleno = gt_item-scheduleno.

         gwa_posch-po_item       = l_item.

         gwa_posch-sched_line    = l_scheditem.

         CALL FUNCTION 'CONVERT_DATE_TO_INTERNAL'

           EXPORTING

             date_external       = gt_schedule-deldate

             accept_initial_date = 'X'

           IMPORTING

             date_internal       = gwa_posch-delivery_date.

         IF sy-subrc <> 0.

           MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

                   WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

         ENDIF.

         gwa_posch-quantity = gt_schedule-quantity.

         APPEND gwa_posch TO git_posch.

*        CLEAR :GWA_POSCH.

         gwa_poschx-po_item       = l_item.

         gwa_poschx-sched_line    = l_scheditem.

         gwa_poschx-delivery_date = 'X'.

         gwa_poschx-quantity = 'X'.

         APPEND gwa_poschx TO git_poschx.

*        CLEAR :gwa_posch-quantity.

         l_scheditem = l_scheditem + 10.

        CLEAR :gwa_posch-quantity,GWA_POSCHX-quantity.

       ENDLOOP.

* APPEND gt_pohdr.

* APPEND gt_pohdrx.

*      l_item = l_item + 10.

*      CLEAR :gwa_poitem-quantity.

*      CLEAR :git_poitem-quantity.

*    ENDLOOP.

*    CLEAR :gwa_poitem-quantity.

*    CLEAR :gwa_poitem-quantity.

     CALL FUNCTION 'BAPI_PO_CREATE1'

       EXPORTING

         poheader         = gt_pohdr

         poheaderx        = gt_pohdrx

         testrun          = test

         NO_PRICE_FROM_PO = NO_PRICE_FROM_PO

       IMPORTING

         exppurchaseorder = pono

         expheader        = poret

       TABLES

         return           = git_return

         poitem           = git_poitem

         poitemx          = git_poitemx

         poschedule       = git_posch

         poschedulex      = git_poschx

         POACCOUNT        = POACCOUNT

         POACCOUNTX       = POACCOUNTX.

     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

*      EXPORTING

         WAIT UP TO 1 SECONDS." = 'X'.

     LOOP AT git_return.

       IF git_return-type = 'S'.

         CONCATENATE 'PO Number' pono text-002 INTO l_pono

                               SEPARATED BY space.

         WRITE : l_pono.

       ELSEIF git_return-type = 'E'.

         WRITE : git_return-type,    git_return-message.

       ENDIF.

     ENDLOOP.

     REFRESH : git_poitem[],git_return[].

     CLEAR : gt_header,git_return,git_poitem.

CLEAR:gt_pohdr,

       gt_pohdrx,

       test,

       NO_PRICE_FROM_PO,

       pono,

       poret,

       git_return[],

*      git_header[],

       git_poitem,

       git_poitemx[],

       git_posch[],

       git_poschx[],

       POACCOUNT[],

       POACCOUNTX[].

CLEAR L_ITEM.

*          CLEAR L_ITEM1.

   ENDLOOP.

ENDFORM. " GET_HEADER_ITEM

Thanks

Suresh

4 REPLIES 4
Read only

Former Member
0 Likes
901

Please suggest something .

Read only

0 Likes
901

Hello

Did you try executing the BAPI in SE37 with same parameters? Try it once and see what's happening when you execute it in SE37.

Best Wishes,

Ravi

Read only

jayanthi_jayaraman
Active Contributor
0 Likes
901

Hi,

CHeck whether you can use AT ENDOF  instead of ON CHANGE OF inside loop. Check whether it can produce desired result.

Read only

0 Likes
901

thanks for reply Jayanthi Jayaraman,

i tried that too ( At END OF)  still the result is same.