Quantcast
Channel: SCN : Blog List - ABAP Development
Viewing all articles
Browse latest Browse all 943

Purchase order and Sales Document maintain in dialog mode

$
0
0

Sometimes the task is not to create order through Bapi, because in this case it will be saved,
if not error occured. If you need to go into a standard transaction, passing
with some header information and items. Here are fragments of programs that
make it easy to do this:

 

1) Purchase Order.

  Imagine, you have
an ALV report with output table gt_outtab and columns banfn and bnfpo -
purchase requisition no and item. no.

 

  DATA : header                        LIKE mepoheader,
       mepo_doc       
TYPE mepo_document,
       requisitions   
TYPE  mereq_t_eban_mem,
       wa_requisitions
LIKE LINE OF requisitions,
       items          
LIKE  mepoitem OCCURS 0 WITH HEADER LINE .
DATAlr_selections   TYPE REF TO cl_salv_selections,
       lt_rows        
TYPE salv_t_row,
       ls_row         
LIKE LINE OF  lt_rows.


  lr_selections
= gr_table->get_selections( ).
  lt_rows
= lr_selections->get_selected_rows( ).
 
IF lt_rows IS INITIAL .
   
MESSAGE s001 WITH 'select any line' .
   
EXIT .
 
ENDIF.
 
CLEAR : items , items[]  .
 
LOOP AT lt_rows INTO l_row.
   
READ TABLE gt_outtab INDEX l_row .
   
CHECK gt_outtab-ebeln IS INITIAL .
   
ADD 10 TO items-ebelp .
    items
-banfn = gt_outtab-banfn .
    items
-bnfpo = gt_outtab-bnfpo .
   
APPEND items.
 
ENDLOOP .

* call me21n
 
CALL FUNCTION 'WB2_PO_PROCESS_START'
   
EXPORTING
      im_ekko              
= header
      im_aktyp             
= 'H'
   
IMPORTING
      ch_requisitions      
= requisitions
   
TABLES
      cht_items            
= items
   
CHANGING
      ch_document          
= mepo_doc
   
EXCEPTIONS
      invalid_call         
= 1
      invalid_activity_type
= 2
      done                 
= 3
      error                
= 4
     
OTHERS                = 5.

 
IF sy-subrc <> 0.
* Implement suitable error handling here
 
ENDIF.

 

2)Sales order basis on previous sales document. Vbeln - number of previous sales document.

  SELECT SINGLE * FROM vbak INTO wa_vbak
        
WHERE vbeln = vbeln.

 

CALL FUNCTION 'Z_MAP_VBAKKOM_2_HDRIN' " code of FM below
   
EXPORTING
      i_vbakkom      
= vbakkom
   
IMPORTING
      order_header_in
= sales_header_in.

  CLEAR : sales_partners , sales_partners[].

 
DATA t_vbpa     LIKE vbpa OCCURS 0 WITH HEADER LINE  .
 
SELECT * FROM vbpa INTO TABLE t_vbpa WHERE vbeln = wa_vbak-vbeln .
 
LOOP AT t_vbpa .
    sales_partners
-partn_role = t_vbpa-parvw.
   
IF NOT t_vbpa-kunnr IS INITIAL   .
      sales_partners
-partn_numb = t_vbpa-kunnr.
   
ELSEIF NOT t_vbpa-pernr IS INITIAL   .
      sales_partners
-partn_numb = t_vbpa-pernr .
   
ENDIF .
    sales_partners
-itm_number = t_vbpa-posnr .
   
APPEND sales_partners.
 
ENDLOOP.

 

* items
 
CLEAR : sales_items_in[] ,      sales_items_in,
          sales_schedules_in[]
sales_schedules_in,
          sales_conditions_in[]
, sales_conditions_in,
          tab_root_instances[]
root_instances.

   
SELECT * FROM vbap INTO wa_vbap WHERE vbeln = vbeln.

     sales_items_in-itm_number     = wa_vbap-posnr .
    sales_items_in
-material       = wa_vbap-matnr .
    sales_items_in
-reason_rej     = wa_vbap-abgru .
    sales_items_in
-ref_doc        = wa_vbap-vbeln .
    sales_items_in
-ref_doc_it     = wa_vbap-posnr .
    sales_items_in
-ref_doc_ca     = wa_vbak-vbtyp .
    sales_items_in
-plant          = wa_vbap-werks .
    sales_items_in
-store_loc      = wa_vbap-lgort .
    sales_items_in
-po_itm_no      = sales_items_in-itm_number .
   
IF vbtyp_v = 'B'. " next doc is contract
      sales_items_in
-target_qty     wa_vbap-orfmng  .
   
ELSE .
      sales_schedules_in
-itm_number     = sales_items_in-itm_number .
      sales_schedules_in
-sched_line     = 1 .
      sales_schedules_in
-req_qty        = wa_vbap-orfmng   .
     
APPEND sales_schedules_in .
   
ENDIF .
   
APPEND sales_items_in.

* conditions
   
DATA amount_external LIKE  bapicurr-bapicurr .
   
SELECT        * FROM  konv INTO wa_konv
                   
WHERE  knumv  = wa_vbak-knumv
                     
AND  kposn  = wa_vbap-posnr
                     
AND  kherk  = 'C'.    " manual conditions
     
IF wa_konv-krech = 'A' .  
        wa_konv
-kbetr = wa_konv-kbetr / 10 .
     
ENDIF .
     
MOVE-CORRESPONDING wa_konv TO komv.
     
CALL FUNCTION 'MAP2E_KOMV_TO_BAPISDCOND'
       
EXPORTING
          komv      
= komv
       
CHANGING
          bapisdcond
= bapisdcond.

     
MOVE-CORRESPONDING bapisdcond TO sales_conditions_in .
     
IF bapisdcond-currency IS NOT INITIAL .
       
CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
         
EXPORTING
           
currency        = bapisdcond-currency
            amount_internal
= bapisdcond-cond_value
         
IMPORTING
            amount_external
= amount_external.
        sales_conditions_in
-cond_value = amount_external.
     
ENDIF .

      sales_conditions_in
-itm_number = sales_items_in-itm_number .
     
APPEND sales_conditions_in .
   
ENDSELECT.

   
IF tc = 'X'  .   " configuration if vehicle, variable tc is flag - material is vehicle

       root_instances-instance_no = wa_vbap-cuobj .
      root_instances
-posex  = sales_items_in-po_itm_no  .   
     
APPEND  root_instances TO tab_root_instances .
   
ENDIF .

 
ENDSELECT .

 

   IF tc = 'X'  .   " read configuration of previous doc. if it is vehicle
   
CALL FUNCTION 'CUXI_GET_MULTI_CONFIGURATION'
     
EXPORTING
        i_tab_root_instances        
= tab_root_instances
     
TABLES
        e_tab_cfg_headers           
= e_tab_cfg_headers
        e_tab_instances             
= e_tab_instances
        e_tab_part_of               
= e_tab_part_of
        e_tab_values                
= e_tab_values
        e_tab_var_keys              
= e_tab_var_keys
     
EXCEPTIONS
        invalid_instance            
= 1
        instance_is_a_classification
= 2
        no_root_instance            
= 3
        internal_error              
= 4
        invalid_data                
= 5
       
OTHERS                       = 6.


** clear some fields
   
LOOP AT e_tab_cfg_headers INTO  cfg_headers .
     
CLEAR :   cfg_headers-sce ,
                cfg_headers
-kbname,
                cfg_headers
-kbversion,
                cfg_headers
-complete,
                cfg_headers
-consistent,
                cfg_headers
-cfginfo,
                cfg_headers
-kbprofile,
                cfg_headers
-kblanguage,
                cfg_headers
-cbase_id,
                cfg_headers
-cbase_id_type .
     
MODIFY e_tab_cfg_headers  FROM cfg_headers.
   
ENDLOOP .

   
LOOP AT e_tab_instances INTO  instances .
     
CLEAR : instances-obj_txt ,
              instances
-quantity ,
              instances
-author ,
              instances
-quantity_unit ,
              instances
-complete ,
              instances
-consistent ,
              instances
-object_guid ,
              instances
-persist_id ,
              instances
-persist_id_type .
     
MODIFY e_tab_instances FROM instances .
   
ENDLOOP .

   
LOOP AT e_tab_values INTO values.
     
CLEAR  values-valcode .
     
MODIFY e_tab_values FROM  values .
   
ENDLOOP.
 
ENDIF .

 

 

* header conditions
 
SELECT        * FROM  konv INTO wa_konv
                 
WHERE  knumv  = wa_vbak-knumv
                   
AND  kposn  = '000000'
                   
AND  kherk  = 'C'.    " manual
   
IF wa_konv-krech = 'A' .        

      wa_konv-kbetr = wa_konv-kbetr / 10 .
   
ENDIF .
   
MOVE-CORRESPONDING wa_konv TO komv.
   
CALL FUNCTION 'MAP2E_KOMV_TO_BAPISDCOND'
     
EXPORTING
        komv      
= komv
     
CHANGING
        bapisdcond
= bapisdcond.

   
MOVE-CORRESPONDING bapisdcond TO sales_conditions_in .
    sales_conditions_in
-itm_number = '000000' .
   
APPEND sales_conditions_in .
 
ENDSELECT.

 

 

CALL FUNCTION 'BAPI_SALESDOCU_CREATEWITHDIA'
 
EXPORTING
    sales_header_in              
= sales_header_in

   synchronous                   = 'X'

   IMPORTING
   salesdocument_ex             
= vbeln_so
TABLES
  
return                        = return
   sales_items_in               
= sales_items_in

    sales_partners                = sales_partners
   sales_schedules_in           
= sales_schedules_in
   sales_conditions_in          
= sales_conditions_in
   sales_cfgs_ref               
= e_tab_cfg_headers
   sales_cfgs_inst              
= e_tab_instances
   sales_cfgs_value             
= e_tab_values .

 

 

  FUNCTION Z_MAP_VBAKKOM_2_HDRIN.
*"----------------------------------------------------------------------
*"*"Локальныйинтерфейс:
*"  IMPORTING
*"     REFERENCE(I_VBAKKOM) TYPE  VBAKKOM
*"  EXPORTING
*"     REFERENCE(ORDER_HEADER_IN) TYPE  BAPISDHEAD1
*"----------------------------------------------------------------------
 
MOVE i_vbakkom-auart TO order_header_in-doc_type        .
 
MOVE i_vbakkom-submi TO order_header_in-collect_no      .
 
MOVE i_vbakkom-vkorg TO order_header_in-sales_org       .
 
MOVE i_vbakkom-vtweg TO order_header_in-distr_chan      .
 
MOVE i_vbakkom-spart TO order_header_in-division        .
 
MOVE i_vbakkom-vkgrp TO order_header_in-sales_grp       .
 
MOVE i_vbakkom-vkbur TO order_header_in-sales_off       .
 
MOVE i_vbakkom-vdatu TO order_header_in-req_date_h      .
 
MOVE i_vbakkom-vprgr TO order_header_in-date_type       .
 
MOVE i_vbakkom-bsark TO order_header_in-po_method       .
 
MOVE i_vbakkom-bstdk TO order_header_in-purch_date      .
 
MOVE i_vbakkom-bstzd TO order_header_in-po_supplem      .
 
MOVE i_vbakkom-ihrez TO order_header_in-ref_1           .
 
MOVE i_vbakkom-bname TO order_header_in-name            .
 
MOVE i_vbakkom-telf1 TO order_header_in-telephone       .
 
MOVE i_vbakkom-konda TO order_header_in-price_grp       .
 
MOVE i_vbakkom-kdgrp TO order_header_in-cust_group      .
 
MOVE i_vbakkom-bzirk TO order_header_in-sales_dist      .
 
MOVE i_vbakkom-pltyp TO order_header_in-price_list      .
 
MOVE i_vbakkom-inco1 TO order_header_in-incoterms1      .
 
MOVE i_vbakkom-inco2 TO order_header_in-incoterms2      .
 
MOVE i_vbakkom-zterm TO order_header_in-pmnttrms        .
 
MOVE i_vbakkom-lifsk TO order_header_in-dlv_block       .
 
MOVE i_vbakkom-faksk TO order_header_in-bill_block      .
 
MOVE i_vbakkom-augru TO order_header_in-ord_reason      .
 
MOVE i_vbakkom-autlf TO order_header_in-compl_dlv       .
 
MOVE i_vbakkom-prsdt TO order_header_in-price_date      .
 
MOVE i_vbakkom-angdt TO order_header_in-qt_valid_f      .
 
MOVE i_vbakkom-bnddt TO order_header_in-qt_valid_t      .
 
MOVE i_vbakkom-guebg TO order_header_in-ct_valid_f      .
 
MOVE i_vbakkom-gueen TO order_header_in-ct_valid_t      .
 
MOVE i_vbakkom-kvgr1 TO order_header_in-cust_grp1       .
 
MOVE i_vbakkom-kvgr2 TO order_header_in-cust_grp2       .
 
MOVE i_vbakkom-kvgr3 TO order_header_in-cust_grp3       .
 
MOVE i_vbakkom-kvgr4 TO order_header_in-cust_grp4       .
 
MOVE i_vbakkom-kvgr5 TO order_header_in-cust_grp5       .
 
MOVE i_vbakkom-bstkd TO order_header_in-purch_no_c      .
 
MOVE i_vbakkom-bstkd_e TO order_header_in-purch_no_s      .
 
MOVE i_vbakkom-bstdk_e TO order_header_in-po_dat_s        .
 
MOVE i_vbakkom-bsark_e TO order_header_in-po_meth_s       .
 
MOVE i_vbakkom-ihrez_e TO order_header_in-ref_1_s         .
 
MOVE i_vbakkom-audat TO order_header_in-doc_date        .
 
MOVE i_vbakkom-gwldt TO order_header_in-war_date        .
 
MOVE i_vbakkom-vsbed TO order_header_in-ship_cond       .
 
MOVE i_vbakkom-ktext TO order_header_in-pp_search       .
 
MOVE i_vbakkom-mahza TO order_header_in-dun_count       .
 
MOVE i_vbakkom-mahdt TO order_header_in-dun_date        .
 
MOVE i_vbakkom-abrvw TO order_header_in-dlvscheduse     .
 
MOVE i_vbakkom-abdis TO order_header_in-plan_dlv_schtype.
 
MOVE i_vbakkom-vgbel TO order_header_in-ref_doc         .
 
MOVE i_vbakkom-bukrs_vf TO order_header_in-comp_code_b     .
 
MOVE i_vbakkom-taxk1 TO order_header_in-alt_tax_class   .
 
MOVE i_vbakkom-taxk2 TO order_header_in-tax_class2      .
 
MOVE i_vbakkom-taxk3 TO order_header_in-tax_class3      .
 
MOVE i_vbakkom-taxk4 TO order_header_in-tax_class4      .
 
MOVE i_vbakkom-taxk5 TO order_header_in-tax_class5      .
 
MOVE i_vbakkom-taxk6 TO order_header_in-tax_class6      .
 
MOVE i_vbakkom-taxk7 TO order_header_in-tax_class7      .
 
MOVE i_vbakkom-taxk8 TO order_header_in-tax_class8      .
 
MOVE i_vbakkom-taxk9 TO order_header_in-tax_class9      .
 
MOVE i_vbakkom-xblnr TO order_header_in-ref_doc_l       .
 
MOVE i_vbakkom-zuonr TO order_header_in-***_number      .
 
MOVE i_vbakkom-vgtyp TO order_header_in-ref_doc_cat     .
 
MOVE i_vbakkom-kzazu TO order_header_in-ord_comb_in     .
 
MOVE i_vbakkom-perfk TO order_header_in-bill_sched      .
 
MOVE i_vbakkom-perrl TO order_header_in-invo_sched      .
 
MOVE i_vbakkom-mrnkz TO order_header_in-mn_invoice      .
 
MOVE i_vbakkom-kurrf TO order_header_in-exch_rate_fi    .
 
MOVE i_vbakkom-valtg TO order_header_in-add_val_dy      .
 
MOVE i_vbakkom-valdt TO order_header_in-fix_val_dy      .
 
MOVE i_vbakkom-zlsch TO order_header_in-pymt_meth       .
 
MOVE i_vbakkom-ktgrd TO order_header_in-accnt_asgn      .
 
MOVE i_vbakkom-kursk TO order_header_in-exchg_rate      .
 
MOVE i_vbakkom-fkdat TO order_header_in-bill_date       .
 
MOVE i_vbakkom-fbuda TO order_header_in-serv_date       .
 
MOVE i_vbakkom-mschl TO order_header_in-dunn_key        .
 
MOVE i_vbakkom-mansp TO order_header_in-dunn_block      .
 
MOVE i_vbakkom-abssc TO order_header_in-pymt_gar_proc   .
 
MOVE i_vbakkom-abtnr TO order_header_in-department_no   .
 
MOVE i_vbakkom-empst TO order_header_in-rec_point       .
 
MOVE i_vbakkom-lcnum TO order_header_in-doc_num_fi      .
 
MOVE i_vbakkom-kdkg1 TO order_header_in-cust_cond_grp1  .
 
MOVE i_vbakkom-kdkg2 TO order_header_in-cust_cond_grp2  .
 
MOVE i_vbakkom-kdkg3 TO order_header_in-cust_cond_grp3  .
 
MOVE i_vbakkom-kdkg4 TO order_header_in-cust_cond_grp4  .
 
MOVE i_vbakkom-kdkg5 TO order_header_in-cust_cond_grp5  .
 
MOVE i_vbakkom-delco TO order_header_in-dlv_time        .
 
MOVE i_vbakkom-waerk TO order_header_in-CURRENCY        .
 
MOVE i_vbakkom-ernam TO order_header_in-created_by      .
 
MOVE i_vbakkom-landtx TO order_header_in-tax_depart_cty  .
 
MOVE i_vbakkom-stceg_l TO order_header_in-tax_dest_cty    .
 
MOVE i_vbakkom-xegdr TO order_header_in-eu_triang_deal  .
 
MOVE i_vbakkom-vbeln_grp TO order_header_in-master_contr    .
 
MOVE i_vbakkom-scheme_grp TO order_header_in-ref_proc        .
 
MOVE i_vbakkom-abruf_part TO order_header_in-check_partn_auth.
 
MOVE i_vbakkom-dat_fzau TO order_header_in-cml_qty_date    .
 
MOVE i_vbakkom-vsnmr_v TO order_header_in-version         .
 
MOVE i_vbakkom-qmnum TO order_header_in-notif_no        .
 
MOVE i_vbakkom-vkont TO order_header_in-fkk_conacct     .

ENDFUNCTION.


Viewing all articles
Browse latest Browse all 943

Trending Articles