Table control in sales order

Hi,
I am using BDC to ceate salesorder.I am able to create sales order for one item. But when I try it for multiple items, it is still creating a new sales order for each item. I am trying to loop the items but still it is creating a new sales order.I am also attaching my code. Can somebody look into it and tell me what should be done to loop the items.
DATA: BEGIN OF ITAB OCCURS 0,
      KUNNR1 LIKE KUAGV-KUNNR,
      KUNNR2 LIKE KUWEV-KUNNR,
      KETDAT LIKE RV45A-KETDAT,
      DWERK LIKE RV45A-DWERK,
      ZTERM LIKE VBKD-ZTERM,
      INCO1 LIKE VBKD-INCO1,
      INCO2 LIKE VBKD-INCO2,
      AUDAT LIKE RV45A-KETDAT,
      VKBUR LIKE VBAK-VKBUR,
      BZIRK LIKE VBKD-BZIRK,
      IHREZ LIKE VBKD-IHREZ,
      MABNR LIKE RV45A-MABNR,
      KWMENG LIKE RV45A-KWMENG,
   END OF ITAB.
include bdcrecx1.
PARAMETERS: PATH(128) DEFAULT 'C:\sales.txt'.
start-of-selection.
  CALL FUNCTION 'WS_UPLOAD'
   EXPORTING
   FILENAME                      = path
     FILETYPE                      = 'DAT'
    TABLES
      DATA_TAB                      = ITAB
  IF SY-SUBRC <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ENDIF.
  perform open_group.
  loop at itab.
    perform bdc_dynpro      using 'SAPMV45A' '0101'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBAK-AUART'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/00'.
    perform bdc_field       using 'VBAK-AUART'
                                  'ZOR'.
    perform bdc_field       using 'VBAK-VKORG'
                                  '1000'.
    perform bdc_field       using 'VBAK-VTWEG'
                                  '10'.
    perform bdc_field       using 'VBAK-SPART'
                                  '10'.
    perform bdc_dynpro      using 'SAPMV45A' '4001'.
    perform bdc_field       using 'BDC_OKCODE'
                                  'KKAU'.
    perform bdc_field       using 'KUAGV-KUNNR'
                                  itab-kunnr1.
    perform bdc_field       using 'KUWEV-KUNNR'
                                  itab-kunnr2.
    perform bdc_field       using 'RV45A-KETDAT'
                                  itab-ketdat.
    perform bdc_field       using 'RV45A-KPRGBZ'
                                  'D'.
    perform bdc_field       using 'VBKD-PRSDT'
                                  '11/17/2005'.
    perform bdc_field       using 'VBKD-ZTERM'
                                  itab-zterm.
    perform bdc_field       using 'VBKD-INCO1'
                                  ITAB-INCO1.
    perform bdc_field       using 'VBKD-INCO2'
                                  ITAB-INCO2.
perform bdc_dynpro      using 'SAPMV45A' '4002'.
perform bdc_field       using 'BDC_OKCODE'
                                  '=T\05'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBKD-BZIRK'.
    perform bdc_field       using 'VBAK-AUDAT'
                                  ITAB-AUDAT.
    perform bdc_field       using 'VBAK-VKBUR'
                                  ITAB-VKBUR.
    perform bdc_field       using 'VBAK-WAERK'
                                  'USD'.
    perform bdc_field       using 'VBKD-PRSDT'
                                  '11/17/2005'.
    perform bdc_field       using 'VBKD-BZIRK'
                                  ITAB-BZIRK.
    perform bdc_dynpro      using 'SAPMV45A' '4002'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=T\08'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBKD-ZLSCH'.
    perform bdc_field       using 'VBKD-KTGRD'
                                  '01'.
    perform bdc_field       using 'VBKD-ZLSCH'
                                  'C'.
    perform bdc_field       using 'VBAK-ZUONR'
                                 'Open Sales order'.
    perform bdc_dynpro      using 'SAPMV45A' '4002'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=T\10'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'GVS_TC_DATA-REC-PARTNER(05)'.
    perform bdc_field       using 'GV_FILTER'
                                  'PARALL'.
    perform bdc_field       using 'GVS_TC_DATA-REC-PARTNER(05)'
                                  '3838'.
    perform bdc_dynpro      using 'SAPMV45A' '4002'.
    perform bdc_field       using 'BDC_OKCODE'
                                   '=T\13'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBKD-BSARK'.
    perform bdc_field       using 'VBKD-BSARK'
                                  'CU01'.
    perform bdc_field       using 'VBKD-IHREZ'
                                   ITAB-IHREZ.
    perform bdc_dynpro      using 'SAPMV45A' '4002'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/EBACK'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBAK-ZZLEAT'.
    perform bdc_field       using 'VBAK-ZZWARR'
                                  '12346C'.
    perform bdc_field       using 'VBAK-ZZFABW'
                                  'F14689'.
    perform bdc_field       using 'VBAK-ZZWARX'
                                  '12012005'.
    perform bdc_field       using 'VBAK-ZZLEAT'
                                  'CGUYFIU'.
    perform bdc_dynpro      using 'SAPMV45A' '4001'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=PKO1'.
    perform bdc_field       using 'KUAGV-KUNNR'
                                  itab-kunnr1.
    perform bdc_field       using 'KUWEV-KUNNR'
                                  itab-kunnr2.
    perform bdc_field       using 'RV45A-KETDAT'
                                  itab-ketdat.
    perform bdc_field       using 'RV45A-KPRGBZ'
                                  'D'.
    perform bdc_field       using 'VBKD-PRSDT'
                                  '11/17/2005'.
    perform bdc_field       using 'VBKD-ZTERM'
                                  itab-zterm.
    perform bdc_field       using 'VBKD-INCO1'
                                  ITAB-INCO1.
    perform bdc_field       using 'VBKD-INCO2'
                                  ITAB-INCO2.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RV45A-CCODE(01)'.
    perform bdc_field       using 'RV45A-MABNR(01)'
                                  ITAB-MABNR.
    perform bdc_field       using 'RV45A-KWMENG(01)'
                                  '1'.
    perform bdc_field       using 'VBAP-WERKS(01)'
                                   itab-dwerk.
    perform bdc_dynpro      using 'SAPMV45A' '4001'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=PKO1'.
    perform bdc_field       using 'KUAGV-KUNNR'
                                  itab-kunnr1.
    perform bdc_field       using 'KUWEV-KUNNR'
                                  itab-kunnr2.
    perform bdc_field       using 'RV45A-KETDAT'
                                  itab-ketdat.
    perform bdc_field       using 'RV45A-KPRGBZ'
                                  'D'.
    perform bdc_field       using 'VBKD-PRSDT'
                                  '11/17/2005'.
    perform bdc_field       using 'VBKD-ZTERM'
                                  itab-zterm.
    perform bdc_field       using 'VBKD-INCO1'
                                  ITAB-INCO1.
    perform bdc_field       using 'VBKD-INCO2'
                                  ITAB-INCO2.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBAP-POSNR(01)'.
    perform bdc_field       using 'RV45A-VBAP_SELKZ(01)'
                                  'X'.
    perform bdc_dynpro      using 'SAPMV45A' '5003'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '/EBACK'.
Loop.
perform bdc_dynpro      using 'SAPMV45A' '4001'.
    perform bdc_field       using 'BDC_OKCODE'
                                  '=PKO1'.
    perform bdc_field       using 'KUAGV-KUNNR'
                                  itab-kunnr1.
    perform bdc_field       using 'KUWEV-KUNNR'
                                  itab-kunnr2.
    perform bdc_field       using 'RV45A-KETDAT'
                                  itab-ketdat.
    perform bdc_field       using 'RV45A-KPRGBZ'
                                  'D'.
    perform bdc_field       using 'VBKD-PRSDT'
                                  '11/17/2005'.
    perform bdc_field       using 'VBKD-ZTERM'
                                  itab-zterm.
    perform bdc_field       using 'VBKD-INCO1'
                                  ITAB-INCO1.
    perform bdc_field       using 'VBKD-INCO2'
                                  ITAB-INCO2.
    perform bdc_field       using 'BDC_CURSOR'
                                  'RV45A-CCODE(02)'.
    perform bdc_field       using 'BDC_CURSOR'
                                  'VBAP-WERKS(02)'.
    perform bdc_field       using 'RV45A-MABNR(02)'
                                    ITAB-MABNR.
    perform bdc_field       using 'RV45A-KWMENG(02)'
                                   '1'.
    perform bdc_field       using 'VBAP-WERKS(02)'
                                   itab-dwerk.
     perform bdc_dynpro      using 'SAPMV45A' '4001'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=PKO1'.
      perform bdc_field       using 'KUAGV-KUNNR'
                                    itab-kunnr1.
      perform bdc_field       using 'KUWEV-KUNNR'
                                    itab-kunnr2.
      perform bdc_field       using 'RV45A-KETDAT'
                                    itab-ketdat.
      perform bdc_field       using 'RV45A-KPRGBZ'
                                    'D'.
      perform bdc_field       using 'VBKD-PRSDT'
                                    '11/17/2005'.
      perform bdc_field       using 'VBKD-ZTERM'
                                    itab-zterm.
      perform bdc_field       using 'VBKD-INCO1'
                                    ITAB-INCO1.
      perform bdc_field       using 'VBKD-INCO2'
                                    ITAB-INCO2.
      perform bdc_field       using 'BDC_CURSOR'
                                    'VBAP-POSNR(01)'.
      perform bdc_field       using 'RV45A-VBAP_SELKZ(01)'
                                    'X'.
      perform bdc_dynpro      using 'SAPMV45A' '5003'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '/EBACK'.
endloop.
      perform bdc_dynpro      using 'SAPMV45A' '4001'.
      perform bdc_field       using 'BDC_OKCODE'
                                    '=SICH'.
      perform bdc_field       using 'KUAGV-KUNNR'
                                    itab-kunnr1.
      perform bdc_field       using 'KUWEV-KUNNR'
                                    itab-kunnr2.
      perform bdc_field       using 'RV45A-KETDAT'
                                    ITAB-KETDAT.
      perform bdc_field       using 'RV45A-KPRGBZ'
                                    'D'.
      perform bdc_field       using 'VBKD-PRSDT'
                                    '11/17/2005'.
      perform bdc_field       using 'VBKD-ZTERM'
                                    ITAB-ZTERM.
      perform bdc_field       using 'VBKD-INCO1'
                                     ITAB-INCO1.
      perform bdc_field       using 'VBKD-INCO2'
                                    ITAB-INCO2.
     perform bdc_field       using 'BDC_CURSOR'
                                   'RV45A-MABNR(02)'.
      perform bdc_transaction using 'VA01'.
endloop.
    Perform close_group.

Hi,
Check the below code its excatly same code which u want.
REPORT Z90VR_UPLOAD_SALESORDERS
NO STANDARD PAGE HEADING
   LINE-COUNT  65(2)
   LINE-SIZE  160.
  TABLES
Tables : knb1,               "Customer Master (Company Code)
         mara,               "General Material Data
         knvv,               "Customer Master Sales Data
         pa0003.             "HR Master Record: Infotype 0003
   INTERNAL TABLES
Internal table to store flat file records
Data : Begin of it_file occurs 0,
        record(600) type c,
       end of it_file.
Internal table to store upload records
Data : begin of it_sales occurs 0,
        vbeln       like vbak-vbeln,
        auart       like vbak-auart,
        vkorg       like vbak-vkorg,
        vtweg       like vbak-vtweg,
        spart       like vbak-spart,
        kunnr       like kna1-kunnr,
        kunnr_old   like kna1-kunnr,
        Ship        like kna1-kunnr,
        ship_old    like kna1-kunnr,
        bstnk       like vbak-bstnk,
        bstdk       like vbak-bstdk,
        matnr       like mara-matnr,
        kwmeng(20)  type C,
        fdate       like vbak-audat,
        vstel       like vbap-vstel,
        route       like vbap-route,
        Qty(20)     type c,
        lgort       like vbap-lgort,
        zzshipto    like vbak-zzshipto,
        custext(132) type c,
        shptext(132) type c,
        flag(1)     type c,
        zzretdat    like vbak-zzretdat,
        augru       like vbak-augru,
        emp(10)     type c,
       end of it_sales.
Internal table to hold BDC data
Data begin of it_bdcdata occurs 0.
        include structure bdcdata.
data end of it_bdcdata.
Internal table to store error messages
Data : it_bdcmsg like bdcmsgcoll occurs 0 with header line.
Internal table to store error records.
Data : begin of it_error occurs 0,
       vbeln  like vbak-vbeln,
       kunnr  like kna1-kunnr,
       ship   like kna1-kunnr,
       matnr  like mara-matnr,
       pernr  like pa0003-pernr,
       msg(75) type c,
      end of it_error.
   DATA
Data :  wk_auart     like vbak-auart,    "Sales document type
        wk_vkorg     like vbak-vkorg,    "Sales organization
        wk_vtweg     like vbak-vtweg,    "Distribution channel
        wk_spart     like vbak-spart,    "Division
        wk_kunnr     like kna1-kunnr,    "Customer number(sold to party)
        wk_kunnr_old like kna1-kunnr,    "OldCustomer no.(sold to party)
        wk_Ship      like kna1-kunnr,    "Customer number(ship to party)
        wk_ship_old  like kna1-kunnr,    "OldCustomer no.(ship to party)
        wk_bstnk     like vbak-bstnk,    "Customer purchase order number
        wk_vbeln     like vbak-vbeln,    "Old sales Document Number
        wk_bstdk     like vbak-bstdk,    "Customer purchase order date
        wk_matnr     like mara-matnr,    "Material number
        wk_kwmeng(17) type c,            "Order quantity
        wk_fdate     like vbak-audat,    "First Date
        wk_vstel     like vbap-vstel,    "Shipping point/receiving point
        wk_route     like vbap-route,    "Route
        wk_Qty(17)   type c,             "Stock quantity
        wk_lgort     like vbap-lgort,    "Storage location
        wk_zzshipto  like vbak-zzshipto, "RBJP-T: Ship-to-party code
        wk_Custext(132) type c,          "Comment for customer
        wk_shptext(132) type c,          "Comment for warehouse
        wk_flag(1)   type c,             "Order ombnation flag
        wk_zzretdat  like vbak-zzretdat, "RBJP-T Stock Return Deadline
        wk_augru     like vbak-augru,    "Order reason
        wk_emp(10)   type c.             "sales Employee
*--- Variable to store customer comment text & Shipping Instruction text
Data : W_shptext(132) type c,        "To store customer comment text
       w_custext(132) type c,        "To store Shipping Instruction text
       wk_error_rec like sy-tabix,   "To store no of error records
       wk_Success_rec like sy-tabix. "To store  of Success records
Constants                                                            *
Data : c_mode(1) type c value 'N'.
   SELECTION-SCREEN LAYOUT
selection-screen : skip 2.
selection-screen begin of block blk1 with frame title text-001.
selection-screen : skip 1.
parameter : p_file like rlgrap-filename default 'C:\SalesBackorder.csv'
                                              obligatory,
            p_spt(1) type c default ',' obligatory.
selection-screen end of block blk1.
                         At Selection Screen
*--- Provide F4 help for the File Path
at selection-screen on value-request for p_file.
  call function 'KD_GET_FILENAME_ON_F4'
       EXPORTING
            mask      = ',.csv'
            static    = 'X'
       CHANGING
            file_name = p_file.
                         Start of Selection
START-OF-SELECTION.
*--- Clearing internal tables & Variables used
  perform clear_tables.
*--- Upload the file into internal table.
  perform upload_input_file.
*--- Split the records upladed from the file.
  perform split_records.
*--- Check the record values are valid
  perform check_records.
*--- Check for the valid customer data sales data
  perform valid_customer_data.
*--- Populating the BDC Table
  perform populate_bdcdata.
                         End of Selection
END-OF-SELECTION.
clear wk_error_rec.
Describe table it_error lines wk_error_rec.
*--- Display error report list
  perform display_error_list.
      TOP-OF-PAGE                                                    *
TOP-OF-PAGE.
*--- Printing Column headings
  perform column_headings.
*&      Form  upload_input_file
      Uploading  the file into internal table
FORM upload_input_file.
  CALL FUNCTION 'WS_UPLOAD'
      EXPORTING
         FILENAME                      = p_file
        FILETYPE                      = 'ASC'
       TABLES
         DATA_TAB                      = it_file
      EXCEPTIONS
        CONVERSION_ERROR              = 1
        FILE_OPEN_ERROR               = 2
        FILE_READ_ERROR               = 3
        INVALID_TYPE                  = 4
        NO_BATCH                      = 5
        UNKNOWN_ERROR                 = 6
        INVALID_TABLE_WIDTH           = 7
        GUI_REFUSE_FILETRANSFER       = 8
        CUSTOMER_ERROR                = 9
        OTHERS                        = 10.
  IF SY-SUBRC <> 0.
    message i000(z1) with 'Error while Uploading the file'.
  ENDIF.
ENDFORM.                    " upload_input_file
*&      Form  split_records
      Spliting the upload records from file records at ',' or ';' into
      respective filed values
FORM split_records.
  data : wk_file(500) type c.      " Variable to store record
  If not it_file[] is initial.
    loop at it_file from 2.
      clear wk_file.
      WK_file = it_file-record.
split the records at ','
      split  WK_file at p_spt into  wk_auart
                                    wk_vkorg
                                    wk_vtweg
                                    wk_spart
                                    wk_kunnr
                                    wk_kunnr_old
                                    wk_Ship
                                    wk_ship_old
                                    wk_bstnk
                                    wk_vbeln
                                    wk_bstdk
                                    wk_matnr
                                    wk_kwmeng
                                    wk_fdate
                                    wk_vstel
                                    wk_route
                                    wk_Qty
                                    wk_lgort
                                    wk_zzshipto
                                    wk_Custext
                                    wk_shptext
                                    wk_flag
                                    wk_zzretdat
                                    wk_augru
                                    wk_emp.
move the records into internal table
     move : wk_auart        to it_sales-auart,
            wk_vkorg        to it_sales-vkorg,
            wk_vtweg        to it_sales-vtweg,
            wk_spart        to it_sales-spart,
            wk_kunnr        to it_sales-kunnr,
            wk_kunnr_old    to it_sales-kunnr_old,
            wk_Ship         to it_sales-ship,
            wk_ship_old     to it_sales-ship_old,
            wk_bstnk        to it_sales-bstnk,
            wk_vbeln        to it_sales-vbeln,
            wk_bstdk        to it_sales-bstdk,
            wk_matnr        to it_sales-matnr,
            wk_kwmeng       to it_sales-kwmeng,
            wk_fdate        to it_sales-fdate,
            wk_vstel        to it_sales-vstel,
            wk_route        to it_sales-route,
            wk_Qty          to it_sales-qty,
            wk_lgort        to it_sales-lgort,
            wk_zzshipto     to it_sales-zzshipto,
            wk_Custext      to it_sales-custext,
            wk_shptext      to it_sales-shptext,
            wk_flag         to it_sales-flag,
            wk_zzretdat     to it_sales-zzretdat,
            wk_augru        to it_sales-augru,
            wk_emp          to it_sales-emp.
      append it_sales.
      clear it_sales.
    endloop.              "loop at it_file from 2.
  endif.                 "If not it_file[] is initial
ENDFORM.                    " split_records
*&      Form  check_records
      Check the values exist in check table if not delete the records
      and append into internal error table records
FORM check_records.
  If not it_sales[] is initial.
*--Sorting the internal table on old sales document number uploaded
    sort it_sales by vbeln.
    loop at it_sales.
*--- Check the old sold to party exist & if exist then get the new sold
*--- to party Number
      if not it_sales-kunnr_old is initial.
        clear knb1-kunnr.
        select single kunnr
               from knb1
               into knb1-kunnr
               where altkn = it_sales-kunnr_old.
        if sy-subrc = 0.
          it_sales-kunnr = knb1-kunnr.
        else.
          it_error-vbeln = it_sales-vbeln.
          it_error-kunnr = it_sales-kunnr_old.
          it_error-msg   = text-010.
          append it_error.
          clear  it_error.
          delete it_sales where vbeln = it_sales-vbeln.
          clear it_sales.
          continue.
        endif.                    "if sy-subrc = 0.
      endif.                      "if not it_sales-kunnr_old is initial.
*--- Check the old ship to party exist & if exist then get the new ship
*--- to party Number
      if not it_sales-ship_old is initial.
        clear knb1-kunnr.
        select single kunnr
               from knb1
               into knb1-kunnr
               where altkn = it_sales-ship_old.
        if sy-subrc = 0.
          it_sales-ship = knb1-kunnr.
        else.
          it_error-vbeln = it_sales-vbeln.
          it_error-ship  = it_sales-ship_old.
          it_error-msg   = text-011.
          append it_error.
          clear  it_error.
        delete it_sales where vbeln = it_sales-vbeln.
          clear it_sales.
          continue.
        endif.                 "if sy-subrc = 0.
      endif.                   "if not it_sales-ship_old is initial.
*--- Check the old matnr exist & if exist then get the new material
*--- number
      if not it_sales-matnr is initial.
        clear mara-matnr.
        select single matnr
               from mara
               into mara-matnr
               where bismt = it_sales-matnr.
        if sy-subrc = 0.
          it_sales-matnr = mara-matnr.
        else.
          it_error-vbeln = it_sales-vbeln.
          it_error-matnr = it_sales-matnr.
          it_error-msg   = text-012.
          append it_error.
          clear  it_error.
        delete it_sales where vbeln = it_sales-vbeln.
          clear it_sales.
          continue.
        endif.               "if sy-subrc = 0.
      endif.                 "if not it_sales-matnr is initial.
*---- Check the Sales Employee Number exist in master table PA0003
       if not it_sales-emp is initial.
        clear pa0003-pernr.
        select single pernr
               from pa0003
               into pa0003-pernr
               where pernr = it_sales-emp.
        if sy-subrc ne 0.
          it_error-vbeln = it_sales-vbeln.
          it_error-pernr = it_sales-emp.
          it_error-msg   = text-013.
          append it_error.
          clear  it_error.
         delete it_sales where vbeln = it_sales-vbeln.
          clear it_sales.
          continue.
        endif.               "if sy-subrc = 0.
      endif.                 "if not it_sales-emp is initial.
     modify it_sales index sy-tabix.
     clear it_sales.
    endloop.
  endif.                     "If not it_sales[] is initial.
ENDFORM.                    " check_records
*&      Form  populate_bdcdata
      Populating  BDCDATA Table & passing the data by calling
      transaction 'VA01' to create Sales Orders
FORM populate_bdcdata.
Data : flag_item(1) type C.   "Flag for populating Item details
*--- Sorting the internal table by old sales document number.
  sort it_sales by vbeln.
  If not it_sales[] is initial.
    loop at it_sales.
      clear : flag_item,
              W_shptext,
              w_custext.
      W_shptext = it_sales-shptext.
      w_custext = it_sales-custext.
*--- At new sales document number(old document number from file)
*--- populate the header data & first item details.
      at new vbeln.
        clear   it_bdcdata.
        refresh it_bdcdata.
        read table it_sales index sy-tabix.
        perform append_bdcdata using : 'X'  'SAPMV45A'     '0101',
                                     ' ' 'VBAK-AUART'    it_sales-auart,
                                     ' ' 'VBAK-VKORG'    it_sales-vkorg,
                                     ' ' 'VBAK-VTWEG'    it_sales-vtweg,
                                     ' ' 'VBAK-SPART'    it_sales-spart,
                                     ' ' 'BDC_OKCODE'    '/00',
                                     'X' 'SAPMV45A'      '4001',
                                     ' ' 'KUAGV-KUNNR'   it_sales-kunnr.
      if not it_sales-ship is initial.
       perform append_bdcdata using  ' ' 'KUWEV-KUNNR'   it_sales-ship.
      endif.
      perform append_bdcdata using : ' ' 'VBKD-BSTKD'    it_sales-bstnk,
                                     ' ' 'VBKD-BSTDK'    it_sales-bstdk,
                                     ' ' 'VBAK-AUGRU'    it_sales-augru,
                                     ' ' 'BDC_OKCODE'    '=KZKU',
new logic.
                                   'X' 'SAPMSSY0'      '0120',
                                   ' ' 'BDC_CURSOR'    '04/06',
                                   ' ' 'BDC_OKCODE'    '=CHOO',
end of logic
                                     'X' 'SAPMV45A'      '4002'.
*--- Depending upon the sales document type (AUART) passing the RBJP-T
*--- Stock Return Deadline (ZZRETDAT) if Auart is 'ZRLB' or 'ZRKB' the
*--- passing the Stock Return Deadline Date.
   if it_sales-auart = 'ZRLB' or
      it_sales-auart = 'ZRKB'.
   perform append_bdcdata using : ' ' 'VBAK-ZZRETDAT' it_sales-zzretdat.
   endif.
   perform append_bdcdata using : ' ' 'VBAK-ZZSHIPTO' it_sales-zzshipto,
                                  ' ' 'BDC_OKCODE'    '=T\07',
                                  'X' 'SAPMV45A'      '4002',
                                  ' ' 'GVS_TC_DATA-REC-PARVW(06)' 'AF',
                                  ' ' 'GVS_TC_DATA-REC-PARTNER(06)'
                                                        it_sales-emp,
                                  ' ' 'BDC_OKCODE'    '/EBACK'.
*---First Items details
        perform append_bdcdata using :
                                'X'  'SAPMV45A'        '4001',
                                ' '  'RV45A-ETDAT(01)'  it_sales-fdate,
                                ' '  'RV45A-KWMENG(01)' it_sales-kwmeng,
                                ' '  'RV45A-MABNR(01)'  it_sales-matnr,
                                ' '  'BDC_OKCODE'       '/00',
                                'X'  'SAPMV45A'        '4001',
                                ' '  'RV45A-VBAP_SELKZ(01)' 'X',
                                ' '  'BDC_OKCODE'      '=PDE2',
                                'X'  'SAPMV45A'        '4003',
                                ' '  'VBAP-LGORT'       it_sales-lgort,
                                ' '  'VBAP-VSTEL'       it_sales-vstel,
                                ' '  'VBAP-ROUTE'       it_sales-route.
*--- If Order combination flag is 'X' then check box is made click else
*--- not click
        If it_sales-flag = 'X'.
          perform append_bdcdata using :
                                   ' '  'VBKD-KZAZU'       'X'.
        else.
          perform append_bdcdata using :
                                   ' '  'VBKD-KZAZU'       ' '.
        endif.
        perform append_bdcdata using :
                                    ' ' 'BDC_OKCODE'    '/EBACK',
                                    'X'  'SAPMV45A'      '4001'.
        flag_item = 'X'.
      endat.
*---- From 2 items.
      if flag_item = ' '.
        perform append_bdcdata using :
                                 ' '  'BDC_OKCODE'      'POAN',
                                 'X'  'SAPMV45A'        '4001',
                                 ' '  'RV45A-ETDAT(02)'  it_sales-fdate,
                               ' '  'RV45A-KWMENG(02)'  it_sales-kwmeng,
                                 ' '  'RV45A-MABNR(02)'  it_sales-matnr,
                                 ' '  'BDC_OKCODE'       '/00',
                                 'X'  'SAPMV45A'        '4001',
                                 ' '  'RV45A-VBAP_SELKZ(02)' 'X',
                                 ' '  'BDC_OKCODE'       '=PDE2',
                                 'X'  'SAPMV45A'        '4003',
                                 ' '  'VBAP-LGORT'       it_sales-lgort,
                                 ' '  'VBAP-VSTEL'       it_sales-vstel,
                                 ' '  'VBAP-ROUTE'       it_sales-route.
        If it_sales-flag = 'X'.
          perform append_bdcdata using :
                                   ' '  'VBKD-KZAZU'       'X'.
        else.
          perform append_bdcdata using :
                                   ' '  'VBKD-KZAZU'       ' '.
        endif.
        perform append_bdcdata using :
                                    ' ' 'BDC_OKCODE'    '/EBACK',
                                    'X'  'SAPMV45A'     '4001',
                                    ' ' 'BDC_OKCODE'    '/00',
                                    'X'  'SAPMV45A'     '4001'.
      endif.                "if flag = ' '.
*--- At end of the sales document saving the records
      at end of vbeln.
     read table it_sales index sy-tabix.
        perform append_bdcdata using :
                                  ' '  'BDC_OKCODE'      '=SICH'.
*---  calling transaction 'VA01'
        perform call_transaction.
      endat.
    endloop.                  "loop at it_sales.
  endif.                     "If not it_sales[] is initial.
ENDFORM.                    " populate_bdcdata
*&      Form  append_bdcdata
      Populating the BDC table for using in Call Transaction
Form append_bdcdata using dynbegin fld1 fld2.
*---Identifying as new screen
  IF DYNBEGIN = 'X' .
    MOVE: DYNBEGIN  TO IT_BDCDATA-DYNBEGIN,
          FLD1      TO IT_BDCDATA-PROGRAM,
          FLD2      TO IT_BDCDATA-DYNPRO.
  ELSE.
*---Identifying a field name and field value
    MOVE: FLD1      TO IT_BDCDATA-FNAM,
          FLD2      TO IT_BDCDATA-FVAL.
  ENDIF.
  APPEND IT_BDCDATA.
  CLEAR  IT_BDCDATA.
ENDFORM.                    " append_bdcdata
*&      Form  call_transaction
      text
FORM call_transaction.
*--- Data declaration for Local variables
Data : l_mess_lines    type i,             "variable for no of msg lines
       l_msg_text(100) type c,             "For capturing format message
       l_newvbeln like vbak-vbeln,         "For holding new sales Doc No
       flag_text(1) type C value 'X'.      "Flag for getting header text
*--- Internal Table to store header text & header structure
  Data : it_tline like tline occurs 100 with header line,
         it_tline1 like tline occurs 100 with header line,
         t_thead like thead.
*--- Call transaction method
  call transaction 'VA01'
                    using it_bdcdata
                    mode  c_mode
                    UPDATE 'S'
                    messages into it_bdcmsg.
*--- If success then Populating the header text for Comment for
*--- Customer & Shipping Instruction
  if sy-subrc eq  0  and
    sy-msgty  ne 'A' and
    sy-msgty  ne 'E' .
Incrementing the counter for success record
    wk_success_rec = wk_success_rec + 1.
    clear l_mess_lines.
    describe table it_bdcmsg lines l_mess_lines.
    read table it_bdcmsg index l_mess_lines.
*--- Formatting the Success message using Call Function 'FORMAT_MESSAGE'
      perform format_message using l_msg_text.
    clear l_newvbeln.
    move it_bdcmsg-msgv2 to l_newvbeln.
*--- Padding with zeros for the new sales Ducument number created
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
         EXPORTING
              INPUT  = l_newvbeln
         IMPORTING
              OUTPUT = l_newvbeln.
*--- The below logic is added because we can't update the Header Text
   through Batch Input so we need to first create new sales documnet
   number then get that sales document no & by using function module
   SAVE_TEXT update the Header Text.
*--- Populating the header text for Comment for Customer & Shipping
*--- Instruction
    clear   it_tline.
    refresh it_tline.
*--- Populating the header text for Comment for customer
    it_tline-tdformat = '*'.
    it_tline-tdline   = w_custext.
    append it_tline.
    clear  it_tline.
*--- Populating the header text for Shipping Instruction
    it_tline-tdformat = '*'.
    it_tline-tdline   = w_shptext.
    append it_tline.
    clear  it_tline.
    loop at it_tline.
      refresh it_tline1.
      read table it_tline index sy-tabix.
      it_tline1-tdformat = it_tline-tdformat.
      it_tline1-tdline  = it_tline-tdline.
      append it_tline1.
      clear it_tline1.
*--- for Comment for Customer ID
      if flag_text = 'X'.
        clear  t_thead.
        t_thead-tdobject = 'VBBK'.
        t_thead-tdname   = l_newvbeln.
        t_thead-tdid     = '0003'.
        t_thead-tdspras  = sy-langu.
      endif.                          "if flag_text = 'X'.
*--- for Shipping Instruction ID
      if flag_text = ' '.
        clear  t_thead.
        t_thead-tdobject = 'VBBK'.
        t_thead-tdname   = l_newvbeln.
        t_thead-tdid     = '0012'.
        t_thead-tdspras  = sy-langu.
      endif.                         "if flag_text = ' '.
*--- Save the text using Functional Module 'SAVE_TEXT'
      perform save_text  tables it_tline1
                         using  t_thead.
      clear flag_text.
    endloop.             "loop at it_tline.
  else.
*--- If error then get the error message
    clear l_mess_lines.
    describe table it_bdcmsg lines l_mess_lines.
    read table it_bdcmsg index l_mess_lines.
*--- Formatting the Error message using Call Function 'FORMAT_MESSAGE'
    clear l_msg_text.
    perform format_message using l_msg_text.
    it_error-vbeln = it_sales-vbeln.
    it_error-msg   = l_msg_text.
    append it_error.
    clear  it_error.
  endif.                   "if sy-subrc eq  0  and
                           "sy-msgty  ne 'A' and
  clear   it_bdcmsg.
  refresh it_bdcmsg.
ENDFORM.                    " call_transaction
*&      Form  FORMAT_MESSAGE
     Formating the system message
FORM FORMAT_MESSAGE USING    P_DL_MSG_TEXT.
  CALL FUNCTION 'FORMAT_MESSAGE'
       EXPORTING
            ID        = SY-MSGID
            LANG      = SY-LANGU
            NO        = SY-MSGNO
            V1        = SY-MSGV1
            V2        = SY-MSGV2
            V3        = SY-MSGV3
            V4        = SY-MSGV4
       IMPORTING
            MSG       = P_DL_MSG_TEXT
       EXCEPTIONS
            NOT_FOUND = 1
            OTHERS    = 2.
  CONDENSE P_DL_MSG_TEXT.
ENDFORM.                    " FORMAT_MESSAGE
*&      Form  save_text
      text
FORM save_text tables it_tline structure tline
                using t_thead.
  CALL FUNCTION 'SAVE_TEXT'
    EXPORTING
  CLIENT                = SY-MANDT
      HEADER                = t_thead
     SAVEMODE_DIRECT        = 'X'
    TABLES
      LINES                 = it_tline
   EXCEPTIONS
     ID                     = 1
     LANGUAGE               = 2
     NAME                   = 3
     OBJECT                 = 4
     OTHERS                 = 5.
  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.                    " save_text
*&      Form  display_error_list
      writing error list
FORM display_error_list.
If not it_error[] is initial.
sort it_error by vbeln.
  loop at it_error.
     write: /00   it_error-vbeln,
             12   it_error-kunnr,
             35   it_error-ship,
             58   it_error-matnr,
             88   it_error-msg.
  if not it_error-pernr is initial.
     write : 78   it_error-pernr.
  endif.
endloop.
endif.
ENDFORM.                    " display_error_list
*&      Form  column_headings
      writing Column Headings for errror records
FORM column_headings.
write : /00  text-002,
         45  wk_success_rec.
write : /00  text-003,
         45  wk_error_rec.
uline.
  format color col_heading intensified.
  write: /00  text-004,
          12  text-005,
          35  text-006,
          58  text-007,
          78  text-008,
          88  text-009,
         160 space.
format color col_heading intensified off.
uline.
ENDFORM.                    " column_headings
*&      Form  valid_customer_data
      Check the combination of Customer number ,sales organisation,
      Distribution channel & Division exist in Customer Master Sales
      Data(KNVV) if not delete the old document number from internal
      table
FORM valid_customer_data.
data : l_customer_text(50) type c.
if not it_sales[] is initial.
loop at it_sales.
*--- Check the combination of Customer number ,sales organisation,
*--- Distribution channel & Division exist in Customer Master Sales
*--- Data(KNVV)
      clear : KNVV,
              l_customer_text.
      select single *
                    from knvv
                   into knvv
                    where Kunnr = It_sales-kunnr
                    and   vkorg = it_sales-vkorg
                    and   vtweg = it_sales-vtweg
                    and   spart = it_sales-spart.
       if sy-subrc ne 0.
        it_error-vbeln = it_sales-vbeln.
        concatenate text-014
                    it_sales-vkorg
                    it_sales-vtweg
                    it_sales-spart
                    text-015 into
                    l_customer_text separated by space.
        it_error-msg   = l_customer_text.
        append it_error.
        clear  it_error.
        delete it_sales where vbeln = it_sales-vbeln.
        clear it_sales.
        continue.
       endif.
  endloop.
endif.                    "if not it_sales[] is initial.
ENDFORM.                    " valid_customer_data
*&      Form  clear_tables
    Clearing Internal table & variables
FORM clear_tables.
clear   : it_file,
          it_sales,
          it_bdcdata,
          it_bdcmsg,
          it_error,
          wk_success_rec,
          wk_error_rec.
refresh : it_file,
          it_sales,
          it_bdcdata,
          it_bdcmsg,
          it_error.
ENDFORM.                    " clear_tables

Similar Messages

  • Add a new field in the item table control of sales order

    Hi Experts,
                   We have created a new custom field in Material master table. Now, they want to add the custom field from material master to the last field of item control of sales order.
    Please, let me know the steps to do it.
    Regards,
    M.Saravanan

    Hi,
      take program: SAPMV45A
    take screen 8459 and add the new field.
    Also add the validation in the flow logic.
    Refer
    https://forums.sdn.sap.com/click.jspa?searchID=10547810&messageID=3132651
    Regards
    Kiran

  • Read table-control of sales order items in VA01 / VA02

    Hi.
    I need to redetermine the plant in a sales order in USEREXIT_MOVE_FIELD_TO_VBAP. To do this, I need to read the content of all the items, but internal table XVBAP is not filled with all the items information at this point of code. Do you know how can I read the content of the table control of the items from this user exit? Do you know any other alternative solution?
    The table-control is in screen 4900, and its name is TCTRL_U_ERF_AUFTRAG.
    Thanks in advance.

    You have probably two options:
    1. use CHECK_VBAP: CHECK_VBAP triggers more often than the MOVE_VBAP. This should cover the scenarios when you add the new item and because of that the Plant would be redetermined for the items which are not changed. You need to take care of the UPDKZ, if use the CHECK_VBAP.
    2. Determine the plant in the SAVE_DOCUMENT_PREPARE. You can call certain subroutines over the XVBAP Loop and update the required field in VBAP. This is suggested by some OSS Note but I don't recall the note #.
        LOOP AT xvbap.
          ivbap-tabix = sy-tabix.
          svbap-tabix = sy-tabix.
          PERFORM vbap_bearbeiten_vorbereiten(sapfv45p).
          PERFORM vbap_fuellen(sapfv45p).
    "YOUR LOGIC
          vbap-werks = '1111'.
          PERFORM vbap_bearbeiten(sapfv45p).
          PERFORM vbap_bearbeiten_ende(sapfv45p).
        ENDLOOP.
    Regards,
    Naimesh Patel

  • Table control in sales order screen(VA01)

    Hi Guys,
    I am trying to do table control i.e shifting columns as desired in the sales order, but not able to do it. can any one help me the process of shifting columns in sales order screen.
    Example: Shifting customer rial matenumber column to Item cat column.
    Thanks in advance,
    Regards,
    Vamsi.

    Hi Vamsi,
    After changing the columns save it as a variant on the Item Detail screen on the right hand side you can see small barred icon above the vertical scroll bar click the same and save it as as variant in there and just keep that as a default screen variant. The same will be displayed all the time.
    Reward points if it helps.
    Regards,
    Sreekanth

  • How to implement screen enhancements with table control in sales document

    I want to add a table control in sales document head and items, is there a good solution for this, thanks

    Hi Zhang Jie,
    There are some reserved screen for you in sales order.
    screen enhancement: for header is SAPMV45A 8309 and 8310.
                                    for item is SAPMV45A 8459 and 8460.
    you can add your table control in those screen.
    regards,
    Archer

  • Copy Control between Sales Orders and Deliveries

    Hi Gurus,
    please can you tell me why copy control between Sales Order and Delivery doesn't work?
    At header level, into copy control, we can set 2 requirement routines, one as general requirement for copying (TVCPL-AUBED) and the other one as requirement for grouping orders into deliveries (TVCPL-AUZUS).
    At header level we can also set a routine for data transfer to define how data are passed from Sales Order header to Delivery header (TVCPL-GRUAK).
    Then we can set routines at item level, one as requirement (TVCPL-AUBED) and one as data transfer (TVCPL-GRUAP).
    When delivery is created with VL10A transaction, at header level only the first  general requirement routine is used (FV50B***). Grouping requirement is not used (we also set a break point and the program is not passing into this routine).
    Then it is used the requirement routine at item level (FV50B***).
    Please can you tel me how we camake working the routine for grouping requirement at header level?
    Thank you very much.
    Kind Regards
    Andrea

    Hi, we used standard routine even if to be sure we run also the generation report you mentioned.
    Please any other suggestions?
    Thank you very much.
    Kind Regards
    Andrea

  • Dynpro Table Control Column's Order

    Hi everyone,
    I am facing a strange issue in a Dynpro Table Control with the order of the columns.
    I had to add a new key filed in a standard view. When I am running the Table Maintenance Generator in SE11, the Dynpro Table Control is generated correctly and the new column appears at the right place with the other key fields. But when I display the view data with either in SE11 or using the Customizing link in SPRO, the new key field appears at the complete right end of the Dynpro in between two normal fields.
    I tried to delete the screen and to generate it again, I tried to use the same screen number and also a new screen number but the result is always the same. The column's order is not correctly displayed when executing the Dynpro.
    The only way the columns are correctly displayed it's if I created a new screen in a new Z program but this solution cannot be consider since we are talking about standard Dynpro / Table / Function Pool. Using a Z program would not permit to use the standard SPRO link no more.
    I know that sometimes the Table Maintenance Generator does not work properly but I never saw this kind of behavior before. Can someone help me?
    Thank you in advance for your answers,
    Sylvain

    hi,
    r u making through wizard?
    it is good practice.
    Otherwise first take I/O field, give name and than u can take text field for column heading.
    Reward if useful.

  • Copy Control From Sales Order to Purchase Order

    Hi Experts,
    I want to ask how the copy control from Sales Order to Purchase Document can be done? Because they are instances that the users have some items in the Sales Orders not copied to Purchase Document.
    Thanks a lot!

    Hi Experts,
    I have seen the documentation for 3rd Party Sales, thanks to some suggestions. However, there is a report which does not work in our Test Environment, the program name is SDMFSTRP. As suggested by some forums, this is another way of connecting Sales Order to the created Purchase Requisition. So I'd like to ask if there are other ways to connect the 3rd Party Sales to the created Purchase Requisition.
    And also may I know your scenarios when there will be missing items from Sales Order to Purchase Requisition. There are some instances that from Indent Orders, some SO items are not copied to PR.
    Thanks a lot!

  • In which table chenges in sales orders are getting saved

    Hi Experts,
    I have a query
    <b>in which table chenges in sales orders are getting saved</b>
    Thanks & Regards
    Prashant Gupta

    Hi
    goto SE16/se16n and enter the table name as CDHDR for header changes
    here enter the transaction code in the selection screen as VA02 so that it will give the details of all sales order which have changed.
    You can get the change doc object or document number in cdhdr enter the same in
    CDPOS in SE16n if you want to know the changes done at item level or you also have the option of entering TABLE name in CDPOS in SE16N selection screen if you want to know changes done in a particular table
    regards

  • Table Name for Sales Order Header Text.

    Hi.
    Whats the Table name for Sales Order Header Text???
    Reg,
    Amol

    Hi Amol,
    please Try to check the below link
    http://scn.sap.com/thread/1361272
    http://scn.sap.com/thread/416757
    https://scn.sap.com/thread/1909247
    https://scn.sap.com/thread/811915
    Regards,
    Gurunath

  • Table name for sales order with Customer info

    Hi Gurus,
    Could you please provide me table name for  sales order with customer no and customer name.
    I have list of sales order number (more than 1000 no's ) i need to identify customer number and customer name (ship to party and sold to party information). I am running this report every week. so i plan to create sqvi for this report.
    Thanks and regards,
    B.Deethya.

    Hello,
    Access Tables VBAK & VBAP.
    From the above tables you will get Solt to Party & Ship to Party Codes.
    For Customer names you have to pass the Customer Codes to Table - KNA1
    Hope this clarifies.
    Thanks,
    Jignesh Mehta

  • TABLE/FIELD FOR SALES ORDER'S SHIP TO LOCATION

    Hi everyone,
    Does anyone tell me what is the related tables/fields for Sales Order's Ship To Location? Since I want to display the Ship To Location information in the Oracle Report in Oracle Apps R11i.
    I tried to use the following SQL select statement to retrieve the Ship to address:-
    -- SHIP TO LOCATION
    select a.address_id, c.customer_name, C.CUSTOMER_ID, A.SITE_USE_ID from ra_Site_uses_all a, ra_addresses_all b, ra_customers c
    where a.site_use_code = 'SHIP_TO' and
    a.status = 'A' and
         b.address_id = a.address_id and
         c.CUSTOMER_ID = b.CUSTOMER_ID and
         b.status = 'A' and
         c.customer_id in (select customer_id from ra_customers) and
         c.status = 'A' and
         c.customer_name like 'CLARION (H.K.)%'
    But I found that the data is BILL TO address. Can anyone help me? Thanks.

    Hi all, I managed to solve my problem. Here's the query in case someone need it. Thanks
    SELECT party.party_name "Send to" (SELECT party.party_name
    FROM hz_cust_site_uses_all bill_su,
    hz_cust_acct_sites_all bill_cas,
    hz_party_sites bill_ps,
    hz_locations bill_loc,
    hz_parties party,
    oe_order_headers_all h
    WHERE h.invoice_to_org_id = bill_su.site_use_id
    AND bill_su.cust_acct_site_id = bill_cas.cust_acct_site_id
    AND bill_cas.party_site_id = bill_ps.party_site_id
    AND bill_loc.location_id = bill_ps.location_id
    AND bill_cas.party_site_id = bill_ps.party_site_id
    AND bill_ps.party_id = party.party_id
    AND h.order_number = 'your_order_number') "Invoice to"
    FROM oe_order_headers_all h,
    hz_cust_site_uses_all ship_su,
    hz_cust_acct_sites_all ship_cas,
    hz_party_sites ship_ps,
    hz_locations ship_loc,
    hz_parties party
    WHERE h.ship_to_org_id = ship_su.site_use_id
    AND ship_cas.party_site_id = ship_ps.party_site_id
    AND ship_su.cust_acct_site_id = ship_cas.cust_acct_site_id
    AND ship_cas.party_site_id = ship_ps.party_site_id
    AND ship_ps.party_id = party.party_id
    AND ship_loc.location_id = ship_ps.location_id
    AND h.order_number = 'your_order_number';

  • Tables identification for sales order fields

    experts
    1)I am having an order and it may have multiple deliveries.
    in what way i need to fetch all the deliveries for that order?
    lips-vgbel = vbap-vbeln , lips-vgpos- posnr will this work ?  or something else i need to use to get all the deliveries for that order?
    2)and for that deliveries i will be having shippiments and how to get that?
    3) from which table i can see whether return order exists for the sales order ?
    4) how can we identity whether credit memo there for the sales order or not?
    5)where(table) can we find the atp qunatity field which is there in sales order scheduline line data tab?
    thank you for all the help

    Hi
    1)I am having an order and it may have multiple deliveries.
    in what way i need to fetch all the deliveries for that order?
    lips-vgbel = vbap-vbeln , lips-vgpos- posnr will this work ? or something else i need to use to get all the deliveries for that order?
    Goto VBFA table, give your sales order number as VBFA-VBELV and fetch VBFA-VBELN where VBTYP_N = J
    2)and for that deliveries i will be having shippiments and how to get that?
    Goto VBFA table, give your Delivery number as VBFA-VBELV and fetch VBFA-VBELN where VBTYP_N = 8.
    3) from which table i can see whether return order exists for the sales order ?
    Goto VBFA table, give your sales order number as VBFA-VBELV and fetch VBFA-VBELN where VBTYP_N = H.
    If sy-subrc = 0
      return order exists
    else not.
    4) how can we identity whether credit memo there for the sales order or not?
    Goto VBFA table, give your sales order number as VBFA-VBELV and fetch VBFA-VBELN where VBTYP_N = K.
    If sy-subrc = 0
       credit memo exists
    else not.
    Hope this is sufficient for your. Rest you can do R&D.

  • Table name for sales order history

    hi guys,
                   I want to know the name of table which contains sales order history.
    regards
    neelesh

    Hi
    Use this code it will get all the details
    Sales Order Changed History Display
    Sales Order Changed History Display
    You can execute the report by :
    1.  Change Date
    2.  User Name
    3.  Sales Order Number
    Submitted by : SAP Basis, ABAP Programming and Other IMG Stuff
                   http://www.sap-img.com
    REPORT ZSDCHANGE LINE-SIZE 132 NO STANDARD PAGE HEADING
                     LINE-COUNT 065(001)
                     MESSAGE-ID VR.
    TABLES: DD04T,
            CDHDR,
            CDPOS,
            DD03L,
            DD41V,
            T685T,
            VBPA,
            TPART,
            KONVC,
            VBUK.
    DATA: BEGIN OF ICDHDR OCCURS 50.
            INCLUDE STRUCTURE CDHDR.
    DATA: END OF ICDHDR.
    SELECT-OPTIONS: XUDATE FOR ICDHDR-UDATE,
                    XNAME  FOR ICDHDR-USERNAME,
                    XVBELN FOR VBUK-VBELN.
    SELECTION-SCREEN SKIP.
    SELECTION-SCREEN BEGIN OF BLOCK BLK1 WITH FRAME TITLE TEXT-001.
    PARAMETERS: SUDATE RADIOBUTTON GROUP R1,
                SNAME  RADIOBUTTON GROUP R1,
                SOBID  RADIOBUTTON GROUP R1.
    SELECTION-SCREEN END OF BLOCK BLK1.
    DATA: WFLAG,
          WCHANGENR LIKE CDHDR-CHANGENR,
          WUDATE LIKE CDHDR-UDATE,
          WNAME  LIKE CDHDR-USERNAME,
          WVBELN LIKE VBUK-VBELN,
          WDEC1 TYPE P DECIMALS 3,
          WDEC2 TYPE P DECIMALS 3,
          WDEC3 TYPE P DECIMALS 3,
          WDEC4 TYPE P DECIMALS 3.
    DATA: UTEXT(16) VALUE 'has been changed',
          ITEXT(16) VALUE 'has been created',
          DTEXT(16) VALUE 'has been deleted'.
    DATA: BEGIN OF ICDSHW OCCURS 50.
            INCLUDE STRUCTURE CDSHW.
    DATA: END OF ICDSHW.
    DATA: BEGIN OF ITAB OCCURS 10.
            INCLUDE STRUCTURE CDSHW.
    DATA:   UDATE LIKE CDHDR-UDATE,
            USERNAME LIKE CDHDR-USERNAME,
            CHANGENR LIKE CDHDR-CHANGENR,
            VBELN(10),
            POSNR(6),
            ETENR(4),
            INDTEXT(200),
      END OF ITAB.
    SELECT * FROM VBUK WHERE VBELN IN XVBELN.
      CLEAR CDHDR.
      CLEAR CDPOS.
      CDHDR-OBJECTCLAS = 'VERKBELEG'.
      CDHDR-OBJECTID   = VBUK-VBELN.
      PERFORM READHEADER.
      PERFORM READPOS.
      LOOP AT ITAB.
        CASE ITAB-TABNAME.
          WHEN 'VBPA'.
            IF ITAB-FNAME = 'KUNNR' OR
               ITAB-FNAME = 'LIFNR' OR
               ITAB-FNAME = 'PARNR' OR
               ITAB-FNAME = 'PERNR' OR
               ITAB-FNAME IS INITIAL.
             MOVE ITAB-TABKEY TO VBPA.
             SELECT SINGLE * FROM TPART WHERE SPRAS = SY-LANGU
                                       AND   PARVW = VBPA-PARVW.
             IF SY-SUBRC = 0.
               REPLACE '&' WITH TPART-VTEXT INTO ITAB-INDTEXT.
             ENDIF.
           ENDIF.
         WHEN 'VBAP'.
           IF ITAB-FNAME IS INITIAL.
             REPLACE '&' WITH 'Item' INTO ITAB-INDTEXT.
           ENDIF.
         WHEN 'KONVC'.
           MOVE ITAB-TABKEY TO KONVC.
           SELECT SINGLE * FROM T685T WHERE SPRAS = SY-LANGU
                                     AND   KVEWE = 'A'
                                     AND   KAPPL = 'V'
                                     AND   KSCHL = KONVC-KSCHL.
           IF SY-SUBRC = 0.
             REPLACE '&' WITH T685T-VTEXT INTO ITAB-INDTEXT.
           ENDIF.
         ENDCASE.
         IF ITAB-INDTEXT(1) EQ '&'.
           REPLACE '&' WITH ITAB-FTEXT(40) INTO ITAB-INDTEXT.
         ENDIF.
         IF ITAB-CHNGIND = 'I'.
           REPLACE '%' WITH ITEXT INTO ITAB-INDTEXT.
         ELSEIF ITAB-CHNGIND = 'U'.
           REPLACE '%' WITH UTEXT INTO ITAB-INDTEXT.
         ELSE.
           REPLACE '%' WITH DTEXT INTO ITAB-INDTEXT.
         ENDIF.
         CONDENSE ITAB-INDTEXT.
         MODIFY ITAB.
       ENDLOOP.
    ENDSELECT.
    IF SUDATE = 'X'.
      SORT ITAB BY UDATE VBELN POSNR ETENR.
    ELSEIF SOBID = 'X'.
      SORT ITAB BY VBELN POSNR ETENR UDATE.
    ELSE.
      SORT ITAB BY USERNAME VBELN POSNR ETENR UDATE.
    ENDIF.
    LOOP AT ITAB.
      CLEAR WFLAG.
      IF SUDATE = 'X'.
        IF WUDATE NE ITAB-UDATE.
          SKIP.
          WRITE:/001 ITAB-UDATE,
                 023 ITAB-USERNAME,
                 037(10) ITAB-VBELN.
          WFLAG = 'X'.
          WUDATE = ITAB-UDATE.
          WCHANGENR = ITAB-CHANGENR.
        ENDIF.
      ELSEIF SOBID NE 'X'.
        IF WVBELN NE ITAB-VBELN.
          SKIP.
          WRITE:/001 ITAB-VBELN.
          WVBELN = ITAB-VBELN.
        ENDIF.
      ELSE.
        IF WNAME NE ITAB-USERNAME.
          SKIP.
          WRITE:/001 ITAB-USERNAME.
          WNAME = ITAB-USERNAME.
        ENDIF.
      ENDIF.
      IF WCHANGENR NE ITAB-CHANGENR.
        WRITE:/023 ITAB-USERNAME,
               037(10) ITAB-VBELN.
           WFLAG = 'X'.
           WCHANGENR = ITAB-CHANGENR.
        ENDIF.
        IF WFLAG = 'X'.
          WRITE: 013 ITAB-CHNGIND,
                 049 ITAB-POSNR,
                 057 ITAB-ETENR,
                 065 ITAB-INDTEXT(60).
        ELSE.
          WRITE: /013 ITAB-CHNGIND,
                  049 ITAB-POSNR,
                  057 ITAB-ETENR,
                  065 ITAB-INDTEXT(60).
        ENDIF.
      WRITE:/065 ITAB-F_OLD.
      WRITE:/065 ITAB-F_NEW.
    ENDLOOP.
    FORM READHEADER.
      CALL FUNCTION 'CHANGEDOCUMENT_READ_HEADERS'
           EXPORTING
                DATE_OF_CHANGE    = CDHDR-UDATE
                OBJECTCLASS       = CDHDR-OBJECTCLAS
                OBJECTID          = CDHDR-OBJECTID
                TIME_OF_CHANGE    = CDHDR-UTIME
                USERNAME          = CDHDR-USERNAME
           TABLES
                I_CDHDR           = ICDHDR
           EXCEPTIONS
                NO_POSITION_FOUND = 1
                OTHERS            = 2.
      CASE SY-SUBRC.
        WHEN '0000'.
        WHEN '0001'.
          MESSAGE S311.
          LEAVE.
        WHEN '0002'.
          MESSAGE S311.
          LEAVE.
      ENDCASE.
    ENDFORM.
    FORM READPOS.
      LOOP AT ICDHDR.
        CHECK ICDHDR-UDATE
                            IN XUDATE.
        CHECK ICDHDR-USERNAME
                              IN XNAME.
        CALL FUNCTION 'CHANGEDOCUMENT_READ_POSITIONS'
             EXPORTING
                  CHANGENUMBER      = ICDHDR-CHANGENR
                  TABLEKEY          = CDPOS-TABKEY
                  TABLENAME         = CDPOS-TABNAME
             IMPORTING
                  HEADER            = CDHDR
             TABLES
                  EDITPOS           = ICDSHW
             EXCEPTIONS
                  NO_POSITION_FOUND = 1
                  OTHERS            = 2.
        CASE SY-SUBRC.
          WHEN '0000'.
            LOOP AT ICDSHW.
              CHECK ICDSHW-CHNGIND NE 'E'.
              CLEAR ITAB.
              MOVE-CORRESPONDING ICDHDR TO ITAB.
              MOVE-CORRESPONDING ICDSHW TO ITAB.
              CASE ITAB-TABNAME.
                WHEN 'KONVC'.
                  MOVE ICDHDR-OBJECTID TO ITAB-VBELN.
                  MOVE ICDSHW-TABKEY(6) TO ITAB-POSNR.
                WHEN OTHERS.
                  MOVE ICDSHW-TABKEY+3(10)  TO ITAB-VBELN.
                  MOVE ICDSHW-TABKEY+13(6)  TO ITAB-POSNR.
                  MOVE ICDSHW-TABKEY+19(4)  TO ITAB-ETENR.
              ENDCASE.
              MOVE '& %' TO ITAB-INDTEXT.
              APPEND ITAB.
              CLEAR ITAB.
            ENDLOOP.
          WHEN OTHERS.
            MESSAGE S311.
            LEAVE.
        ENDCASE.
      ENDLOOP.
    ENDFORM.
    TOP-OF-PAGE.
    WRITE:/ SY-DATUM,SY-UZEIT,
           50 'SALES ORDER CHANGE HISTORY',
          120 'Page', SY-PAGNO.
    WRITE: / SY-REPID,
             60 'SALES ORDERS STATISTICS'.
    SKIP.
    ULINE.
    IF SUDATE = 'X'.
      WRITE:/001 'Change Date',
             013 'Time',
             023 'User Name',
             037 'Sale Order',
             049 'Line',
             057 'Sch No',
             065 'Changes'.
    ELSEIF SOBID = 'X'.
      WRITE:/001 'Sale Order',
             013 'Line',
             021 'Sch No',
             029 'Change Date',
             041 'Time',
             051 'User Name',
             065 'Comment'.
    ELSE.
      WRITE:/001 'User Name',
             015 'Time',
             025 'Change Date',
             037 'Sale Order',
             049 'Line',
             057 'Sch No',
             065 'Changes'.
    ENDIF.
    ULINE.
    *--- End of Program
    Regards
    Shiva

  • Select aentries from table Z-Table for all sales order line items

    Hi friends,
    can anyone please explain me about the "Select entries from table Z-Table for all sales order line items".
    Thanks.

    Moderator message - Welcome to SCN.
    But
    Moderator message - Please search before asking. Press F1 on SELECT and look at the FOR ALL ENTRIES addition. - post locked             
    Rob

Maybe you are looking for