Difference between revisions of "SAP SD BAPI VA01"

From SapWiki
(Created page with "==Ejemplo 1== <nowiki>FORM f_pedido_venta USING i_kunnr i_werks CHANGING p_documento TYPE vbak-vbeln o_da...")
 
 
(One intermediate revision by the same user not shown)
Line 100: Line 100:
  
 
ENDFORM.                    "f_pedido_venta</nowiki>
 
ENDFORM.                    "f_pedido_venta</nowiki>
 +
 +
==Crear pedido con referencia a factura==
 +
En SAP no existe una BAPI para crear una orden de venta con referencia a otros documentos, como otros pedidos, ofertas, etc. Solución ver Nota SAP 370988
 +
<nowiki>FUNCTION Z_SD_CREA_PEDIDO_CON_REF_FACT.
 +
*"----------------------------------------------------------------------
 +
*"*"Interfase local
 +
*"  IMPORTING
 +
*"    REFERENCE(I_AUART) LIKE  VBAK-AUART DEFAULT 'ZFIN'
 +
*"    REFERENCE(I_VBELN) LIKE  VBRK-VBELN
 +
*"    REFERENCE(I_MONTO) TYPE  ACBTR
 +
*"    REFERENCE(I_WAERS) TYPE  WAERS
 +
*"    REFERENCE(I_COMMIT) TYPE  CHAR1 DEFAULT SPACE
 +
*"    REFERENCE(I_VERSION) TYPE  VSNMR_V OPTIONAL
 +
*"  EXPORTING
 +
*"    REFERENCE(O_SALESDOCUMENT) LIKE  BAPIVBELN-VBELN
 +
*"  TABLES
 +
*"      I_T_SALESDOCUMENTS STRUCTURE  SALES_KEY OPTIONAL
 +
*"      O_T_RETURN STRUCTURE  BAPIRET2 OPTIONAL
 +
*"----------------------------------------------------------------------
 +
ls_bapi_view-header      = 'X'.
 +
ls_bapi_view-item        = 'X'.
 +
ls_bapi_view-sdschedule  = 'X'.
 +
ls_bapi_view-sdcond      = 'X'.
 +
ls_bapi_view-partner      = 'X'.
 +
ls_bapi_view-BUSINESS    = 'X'.
 +
select single aubel into ls_salesdocuments
 +
                          from vbrp where vbeln = i_vbeln.
 +
append ls_salesdocuments to lt_salesdocuments.
 +
CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST'
 +
  EXPORTING
 +
    i_bapi_view                  = ls_bapi_view
 +
*  I_MEMORY_READ                =
 +
  TABLES
 +
    sales_documents              = lt_salesdocuments
 +
    order_headers_out            = lt_order_headers_out
 +
    order_items_out              = lt_order_items_out
 +
    order_schedules_out          = lt_order_schedules_out
 +
    order_partners_out            = lt_order_partners_out
 +
    order_conditions_out          = lt_order_conditions_out
 +
    order_business_out            = lt_order_business_out
 +
          .
 +
************************************************************************
 +
** PREPARE DATA
 +
clear lt_order_items_in[].
 +
clear lt_order_partners[].
 +
clear lt_order_schedules_in[].
 +
clear lt_order_conditions_in[].
 +
* fill header data
 +
IF NOT lt_order_headers_out[] IS INITIAL.
 +
  READ TABLE lt_order_headers_out INTO ls_header_out INDEX 1.
 +
* fill header data
 +
  perform fill_header using i_auart
 +
                            i_vbeln
 +
                            i_version.
 +
* fill header business data
 +
  perform fill_header_business.
 +
* fill partner data
 +
  perform fill_partners.
 +
endif.
 +
* ORDER_ITEMS_IN
 +
select single matnr werks zterm from ZSD_MAT_INTERES
 +
                  into (ls_order_items_in-material,
 +
                        ls_order_items_in-plant,
 +
                        ls_order_header_in-PMNTTRMS)
 +
                  where vkorg = ls_header_out-SALES_ORG.
 +
ls_order_items_in-po_itm_no  = '0010'.
 +
*  ls_order_items_in-material  = '000000000000040383'.
 +
*  ls_order_items_in-plant      = '700P'.
 +
APPEND ls_order_items_in TO lt_order_items_in.
 +
* ORDER_SCHEDULE_IN
 +
ls_order_schedules_in-itm_number = '0010'.
 +
ls_order_schedules_in-req_qty    = '1'.
 +
APPEND ls_order_schedules_in TO lt_order_schedules_in.
 +
* ORDER_CONDITIONS_IN
 +
ls_order_conditions_in-itm_number = '0010'.
 +
ls_order_conditions_in-cond_type  = 'ZFIN'.
 +
ls_order_conditions_in-cond_value = i_monto.
 +
ls_order_conditions_in-currency  =  i_waers.
 +
APPEND ls_order_conditions_in TO lt_order_conditions_in.
 +
 +
*fill logic switch
 +
*  lv_logic_switch-pricing = i_prart.
 +
clear o_t_return[].
 +
CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
 +
  EXPORTING
 +
*  SALESDOCUMENTIN              =
 +
    order_header_in              = ls_order_header_in
 +
    logic_switch                  = lv_logic_switch
 +
  IMPORTING
 +
    salesdocument                = o_salesdocument
 +
  TABLES
 +
    return                        = o_t_return
 +
    order_items_in                = lt_order_items_in
 +
    order_partners                = lt_order_partners
 +
    order_schedules_in            = lt_order_schedules_in
 +
    order_conditions_in          = lt_order_conditions_in
 +
          .
 +
if o_salesdocument is not initial.
 +
  if i_commit = 'X'.
 +
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
 +
    EXPORTING
 +
        WAIT          = 'X'
 +
*  IMPORTING
 +
*    RETURN        =
 +
              .
 +
  endif.
 +
endif.
 +
ENDFUNCTION.
 +
 +
FORM add_schedules using i_qty.        "add schedules to item
 +
LOOP AT lt_order_schedules_out INTO ls_schedules_out
 +
                  WHERE itm_number = ls_item_out-itm_number
 +
                    and DOC_NUMBER = ls_item_out-DOC_NUMBER
 +
  .
 +
*    ls_order_schedules_in-itm_number = ls_schedules_out-itm_number.
 +
  ls_order_schedules_in-itm_number = ld_item_number.
 +
  IF NOT i_qty IS INITIAL AND NOT ls_schedules_out-req_qty = 0.
 +
    ls_order_schedules_in-req_qty = i_qty.
 +
  ELSE.
 +
    ls_order_schedules_in-req_qty = ls_schedules_out-req_qty.
 +
  ENDIF.
 +
  ls_order_schedules_in-sched_line = ls_schedules_out-sched_line.
 +
  APPEND  ls_order_schedules_in TO lt_order_schedules_in.
 +
ENDLOOP.
 +
IF sy-subrc <> 0.
 +
  ls_order_schedules_in-itm_number = ls_item_out-itm_number.
 +
  ls_order_schedules_in-sched_line = '001'.
 +
  ls_order_schedules_in-req_qty = i_qty.
 +
  APPEND  ls_order_schedules_in TO lt_order_schedules_in.
 +
ENDIF.
 +
ENDFORM.                    " add_schedules
 +
*&---------------------------------------------------------------------*
 +
*&      Form  add_items
 +
*&---------------------------------------------------------------------*
 +
FORM add_items .
 +
CONSTANTS:
 +
      kzvbr_e TYPE c VALUE 'E',        " Einzelfertigung
 +
      vkgru_rep_reparaturanfo LIKE vbap-vkgru VALUE 'I01'.
 +
*  ls_order_items_in-itm_number = ls_item_out-itm_number.
 +
* MOVE-CORRESPONDING ls_item_out to ls_order_items_in.
 +
ls_order_items_in-itm_number = ld_item_number.
 +
ls_order_items_in-material = ls_item_out-material.
 +
*  ls_order_items_in-ref_doc  = pa_key.
 +
ls_order_items_in-ref_doc  = ls_item_out-DOC_NUMBER.
 +
ls_order_items_in-ref_doc_it = ls_item_out-itm_number.
 +
ls_order_items_in-ref_doc_ca = ls_header_out-sd_doc_cat.
 +
ls_order_items_in-PLANT  = ls_item_out-PLANT.        "centro
 +
ls_order_items_in-STore_LOC  = ls_item_out-STGE_LOC.  "almacen
 +
ls_order_items_in-MAT_ENTRD  = ls_item_out-MAT_ENTRD.  "material introducido    ;
 +
ls_order_items_in-MATL_GROUP = ls_item_out-MATL_GROUP.    "grupo de articulos;
 +
ls_order_items_in-SHORT_TEXT = ls_item_out-SHORT_TEXT."Texto breve posición de pedido de cliente;
 +
ls_order_items_in-VAL_TYPE  = ls_item_out-VAL_TYPE ."clase de valoración;
 +
ls_order_items_in-PROD_HIERa  = ls_item_out-PROD_HIER."jerarquía de productos;
 +
ls_order_items_in-PR_REF_MAT = ls_item_out-PR_REF_MAT.    "Material determinante del precio;
 +
* ls_order_items_in-BASE_UOM  = ls_item_out-BASE_UOM."Unidad de medida base;
 +
ls_order_items_in-SALES_UNIT = ls_item_out-SALES_UNIT .  "Cantidad de pedido acumulada (en unidades de venta);
 +
ls_order_items_in-SALQTYNUM = ls_item_out-SALES_QTY1.  "Numerador (factor) p.conversión cantidad venta en UMA;
 +
ls_order_items_in-SALQTYDEN = ls_item_out-SALES_QTY2.  "Denominador (divisor) p.conversión ctd.venta en UMA;
 +
*  IF NOT ls_item_out-REPAIR_PRO EQ VKGRU_REP_REPARATURANFO.
 +
*    ls_order_items_in-REPAIR_PRO = ls_item_out-REPAIR_PRO.  "Gestión de reparaciones: Clasificación de posiciones;
 +
*  ENDIF.
 +
ls_order_items_in-dlvschduse = ls_item_out-DLVSCHEDUS. "Indicador de utilización;
 +
IF NOT ls_item_out-DLV_GROUP IS INITIAL.
 +
  ls_order_items_in-DLV_GROUP = ls_item_out-DLV_GROUP . "Grupo de entrega (las pos.se entregan conjuntamente);
 +
ENDIF.
 +
ls_order_items_in-FIXED_QUAN = ls_item_out-FIXED_QUAN .  "Cantidad fija;
 +
*    ls_order_items_in-REPLACE_PT = ls_item_out-REPLACE_PT.  "Pieza de recambio;
 +
*  ls_order_items_in-METH_BILL = ls_item_out-METH_BILL.  "Forma de facturación para órdenes RK/PPS;
 +
ls_order_items_in-DIVISION = ls_item_out-DIVISION.  "sector;
 +
ls_order_items_in-CURRENCY = ls_item_out-CURRENCY.  "Moneda de documento comercial;
 +
IF NOT ls_item_out-PROFIT_CTR IS INITIAL.
 +
  ls_order_items_in-PROFIT_CTR = ls_item_out-PROFIT_CTR.    "Centro de beneficio;PROFIT_CTR
 +
ENDIF.
 +
ls_order_items_in-ORDERID = ls_item_out-ORDERID.            "Orden
 +
if ls_item_out-WBS_ELEM is NOT INITIAL.
 +
*    ls_order_items_in-WBS_ELEM = ls_item_out-WBS_ELEM .          "Elemento PEP
 +
  CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
 +
    EXPORTING
 +
      INPUT        = ls_item_out-WBS_ELEM
 +
    IMPORTING
 +
      OUTPUT        = ls_order_items_in-WBS_ELEM
 +
            .
 +
endif.
 +
*  ls_order_items_in-NO_OF_SERI = ls_item_out-NO_OF_SERI.  "Cantidad de números de serie;
 +
*  ls_order_items_in-SERNO_PROF = ls_item_out-SERNO_PROF.  "Perfil de números de serie;
 +
APPEND ls_order_items_in TO lt_order_items_in.
 +
ENDFORM.                    " add_items
 +
*&---------------------------------------------------------------------*
 +
*&      Form  add_conditions
 +
*&---------------------------------------------------------------------*
 +
FORM add_conditions.          " add conditions to item
 +
LOOP AT lt_order_conditions_out INTO ls_conditions_out
 +
                      WHERE itm_number = ls_item_out-itm_number
 +
                      and sd_doc  = ls_item_out-DOC_NUMBER
 +
                    AND NOT cond_type IS INITIAL
 +
  .
 +
  CLEAR ls_order_conditions_in.
 +
  MOVE-CORRESPONDING ls_conditions_out TO ls_order_conditions_in.
 +
  ls_order_conditions_in-itm_number = ld_item_number.
 +
  ls_order_conditions_in-cond_unit = ls_conditions_out-cond_d_unt.
 +
  APPEND ls_order_conditions_in TO lt_order_conditions_in.
 +
ENDLOOP.
 +
ENDFORM.                    " add_conditions
 +
*----------------------------------------------------------------------*
 +
*&---------------------------------------------------------------------*
 +
*&      Form  FILL_HEADER
 +
*&---------------------------------------------------------------------*
 +
*      text
 +
*----------------------------------------------------------------------*
 +
*  -->  p1        text
 +
*  <--  p2        text
 +
*----------------------------------------------------------------------*
 +
FORM FILL_HEADER using i_auart
 +
                      i_vbeln
 +
                      i_version.
 +
 +
ls_order_header_in-doc_type  = i_auart.
 +
ls_order_header_in-sales_org  = ls_header_out-sales_org.
 +
ls_order_header_in-distr_chan = ls_header_out-distr_chan.
 +
ls_order_header_in-division  = ls_header_out-division.
 +
*  ls_order_header_in-ref_doc = ls_header_out-DOC_NUMBER.
 +
*  ls_order_header_in-purch_no_c = i_purno.
 +
*  ls_order_header_in-refdoc_cat = ls_header_out-sd_doc_cat.
 +
ls_order_header_in-sales_off = ls_header_out-sales_off. "oficina de ventas
 +
ls_order_header_in-sales_grp = ls_header_out-sales_grp. "grupo de vendedores
 +
ls_order_header_in-WAR_DATE = ls_header_out-WAR_DATE. "Fecha límite de garantía
 +
if ls_header_out-WBS_ELEM is not initial
 +
  and ls_header_out-WBS_ELEM ne '000000000'.
 +
ls_order_header_in-WBS_ELEM  = ls_header_out-WBS_ELEM. "Elemento del plan de estructura de proyecto (elemento PEP)
 +
endif.
 +
ls_order_header_in-COLLECT_NO = ls_header_out-SD_COL_NUM. "Nº de licitación (SD)
 +
ls_order_header_in-DLV_BLOCK  = ls_header_out-DLV_BLOCK.  "Bloqueo de nota de entrega cabecera de documento
 +
ls_order_header_in-ORD_REASON = ls_header_out-ORD_REASON. "Motivo de pedido (motivo de la operación)
 +
ls_order_header_in-BILL_BLOCK = ls_header_out-BILL_BLOCK. "Bloqueo de clases de facturas para documento comercial
 +
ls_order_header_in-CURRENCY = ls_header_out-CURRENCY. "Moneda de documento comercial
 +
ls_order_header_in-COMPL_DLV  = ls_header_out-COMPL_DLV.  "¿Entrega completa por pedido?
 +
if ls_header_out-REQ_DATE_H is not INITIAL.
 +
ls_order_header_in-REQ_DATE_H = ls_header_out-REQ_DATE_H. "Fecha preferente de entrega
 +
ls_order_header_in-DATE_TYPE  = ls_header_out-DATE_TYPE.  "Período propuesto para la fecha
 +
endif.
 +
ls_order_header_in-CUST_GRP1  = ls_header_out-CUST_GRP1.  "Grupo de clientes 1
 +
ls_order_header_in-CUST_GRP2  = ls_header_out-CUST_GRP2.  "Grupo de clientes 2
 +
ls_order_header_in-CUST_GRP3  = ls_header_out-CUST_GRP3.  "Grupo de clientes 3
 +
ls_order_header_in-CUST_GRP4  = ls_header_out-CUST_GRP4.  "Grupo de clientes 4
 +
ls_order_header_in-CUST_GRP5  = ls_header_out-CUST_GRP5.  "Grupo de clientes 5
 +
ls_order_header_in-REF_DOC_L  = ls_header_out-REF_DOC_L.  "Número de documento de referencia
 +
ls_order_header_in-REF_DOC    = i_vbeln.
 +
select SINGLE vbtyp into ls_order_header_in-refdoc_cat from vbrk
 +
                                          where vbeln = i_vbeln.
 +
ls_order_header_in-ASS_NUMBER = ls_header_out-ASS_NUMBER. "Número de asignación
 +
ls_order_header_in-ALTTAX_CLS = ls_header_out-ALT_TAX_CL. "Diferente clasificación fiscal
 +
ls_order_header_in-TAX_CLASS2 = ls_header_out-TAX_CLASS2. "Clasificación fiscal cliente 2
 +
ls_order_header_in-TAX_CLASS3 = ls_header_out-TAX_CLASS3. "Clasificación fiscal cliente 3
 +
ls_order_header_in-TAX_CLASS4 = ls_header_out-TAX_CLASS4. "Clasificación fiscal cliente 4
 +
ls_order_header_in-TAX_CLASS5 = ls_header_out-TAX_CLASS5. "Clasificación fiscal cliente 5
 +
ls_order_header_in-TAX_CLASS6 = ls_header_out-TAX_CLASS6. "Clasificación fiscal cliente 6
 +
ls_order_header_in-TAX_CLASS7 = ls_header_out-TAX_CLASS7. "Clasificación fiscal cliente 7
 +
ls_order_header_in-TAX_CLASS8 = ls_header_out-TAX_CLASS8. "Clasificación fiscal cliente 8
 +
ls_order_header_in-TAX_CLASS9 = ls_header_out-TAX_CLASS9. "Clasificación fiscal cliente 9
 +
ls_order_header_in-EUTRI_DEAL = ls_header_out-EU_TRIANG.  "Indicador: ¿operación triangular dentro de la UE?
 +
ls_order_header_in-TAXDEP_CTY = ls_header_out-TAX_DEPART. "País de salida para la  determinación de impuestos
 +
ls_order_header_in-TAXDST_CTY = ls_header_out-TAX_DEST_CT.  "País receptor fiscal
 +
ls_order_header_in-DLVSCHDUSE = ls_header_out-DLVSCHEDUS. "Indicador de utilización
 +
ls_order_header_in-version    = i_version.
 +
ls_ORDER_HEADER_IN-PURCH_NO_C = i_vbeln.
 +
ls_ORDER_HEADER_IN-CUST_GROUP = '01'.
 +
ENDFORM.                    " FILL_HEADER
 +
*&---------------------------------------------------------------------*
 +
*&      Form  FILL_HEADER_BUSINESS
 +
*&---------------------------------------------------------------------*
 +
*      text
 +
*----------------------------------------------------------------------*
 +
*  -->  p1        text
 +
*  <--  p2        text
 +
*----------------------------------------------------------------------*
 +
FORM FILL_HEADER_BUSINESS .
 +
* fill business data
 +
IF NOT lt_order_business_out[] IS INITIAL.
 +
  READ TABLE lt_order_business_out INTO ls_business_out INDEX 1.
 +
  ls_order_header_in-ACCNT_ASGN = ls_business_out-ACCNT_ASGN. "Cuenta contrato
 +
  ls_order_header_in-FKK_CONACCT  = ls_business_out-FKK_CONACCT.  "grupo de Imputación
 +
  ls_order_header_in-PYMT_METH  = ls_business_out-PAYMETHODE. "Vía de Pago
 +
* = ls_business_out-POSTPERIOD  Periodo Contable
 +
* = ls_business_out-FISC_YEAR Ejercicio
 +
  ls_order_header_in-EXRATE_FI  = ls_business_out-EXCHRATEFI. "Tipo de Cambio
 +
  ls_order_header_in-DUNN_KEY = ls_business_out-DUNN_KEY. "Clave de Reclamación
 +
  ls_order_header_in-DUNN_BLOCK = ls_business_out-DUNN_BLOCK. "Bloqueo de reclamación
 +
ENDIF.
 +
ENDFORM.                    " FILL_HEADER_BUSINESS
 +
*&---------------------------------------------------------------------*
 +
*&      Form  FILL_PARTNERS
 +
*&---------------------------------------------------------------------*
 +
*      text
 +
*----------------------------------------------------------------------*
 +
*  -->  p1        text
 +
*  <--  p2        text
 +
*----------------------------------------------------------------------*
 +
FORM FILL_PARTNERS .
 +
data ld_pn(10) type n.
 +
loop at lt_order_partners_out INTO ls_order_partners_out
 +
                            where SD_DOC = ls_header_out-doc_number
 +
                              .
 +
  ls_order_partners-partn_role = ls_order_partners_out-partn_role.
 +
    ls_order_partners-partn_numb  = ls_order_partners_out-customer.
 +
    if ls_order_partners_out-PERSON_NO is not INITIAL.
 +
      move ls_order_partners_out-PERSON_NO to ld_pn.
 +
      move  ld_pn to ls_order_partners-partn_numb.
 +
    endif.
 +
  APPEND ls_order_partners TO lt_order_partners.
 +
ENDloop.
 +
ENDFORM.                    " FILL_PARTNERS
 +
**********************************************************************************
 +
include ZSSO_RVADOR01_SIM_TOP.
 +
DATA  ls_bapi_view            TYPE order_view.
 +
DATA  lt_salesdocuments      TYPE TABLE OF sales_key.
 +
DATA  lt_order_headers_out    TYPE TABLE OF bapisdhd.
 +
DATA  lt_order_items_out      TYPE TABLE OF bapisdit.
 +
DATA  lt_order_schedules_out  TYPE TABLE OF bapisdhedu.
 +
DATA  lt_order_conditions_out TYPE TABLE OF bapisdcond.
 +
DATA  lt_order_partners_out  TYPE TABLE OF bapisdpart.
 +
data  lt_order_business_out  type table of BAPISDBUSI.
 +
DATA: lv_logic_switch        TYPE bapisdls.
 +
DATA  lv_salesdocument        TYPE bapivbeln-vbeln.
 +
DATA  lt_return              TYPE TABLE OF bapiret2.
 +
DATA  lt_order_items_in      TYPE TABLE OF bapisditm.
 +
DATA  lt_order_schedules_in  TYPE TABLE OF bapischdl.
 +
DATA  lt_order_partners      TYPE TABLE OF bapiparnr.
 +
DATA  lt_order_conditions_in  TYPE TABLE OF bapicond.
 +
data ls_salesdocuments type sales_key.
 +
DATA: ls_return              TYPE bapiret2.
 +
DATA: ls_header_out          TYPE bapisdhd.
 +
DATA  ls_order_header_in      TYPE bapisdhd1.
 +
DATA: ls_item_out            TYPE bapisdit.
 +
DATA: ls_order_items_in      TYPE bapisditm.
 +
DATA: ls_order_schedules_in  TYPE bapischdl.
 +
DATA: ls_schedules_out        TYPE bapisdhedu.
 +
DATA: ls_order_partners_out  TYPE bapisdpart.
 +
DATA: ls_order_partners      TYPE bapiparnr.
 +
DATA  ls_order_conditions_in  TYPE bapicond.
 +
DATA: ls_conditions_out      TYPE bapisdcond.
 +
data  ls_business_out        type BAPISDBUSI.
 +
data ld_item_number like ls_item_out-itm_number.
 +
data ld_sales_key type sales_key.
 +
**********************************************************************
 +
*&---------------------------------------------------------------------*
 +
*&  Include          ZSSO_RVADOR01_SIM_TOP
 +
*&---------------------------------------------------------------------*
 +
*----------------------------------------------------------------------*
 +
*  DATA DECLARATION
 +
*----------------------------------------------------------------------*
 +
**CONSTANTS**
 +
CONSTANTS: c_sapmv45a_xvbkd TYPE char40  VALUE '(SAPMV45A)XVBKD[]',
 +
            c_sapmv45a_xvbap TYPE char40  VALUE '(SAPMV45A)XVBAP[]',
 +
            c_initial        TYPE posnr    VALUE '000000',
 +
            c_end_date      TYPE auszdat  VALUE '99991231',
 +
            c_formname      TYPE tdsfname VALUE 'ZSSO_RVADOR01_SIM',
 +
            c_waerk          TYPE waerk    VALUE 'CLP',
 +
            c_skfbt          TYPE acfbt    VALUE '0.00',
 +
            c_valtg          TYPE valtg    VALUE '00',
 +
            c_valdt          TYPE valdt    VALUE space,
 +
            c_true          TYPE char1    VALUE 'X',
 +
            c_as01          TYPE dzterm  VALUE 'AS01',
 +
            c_ts01          TYPE dzterm  VALUE 'TS01',
 +
            c_id_z001        TYPE tdid    VALUE 'Z001',
 +
            c_es            TYPE spras    VALUE 'S',
 +
            c_konp          TYPE tdobject VALUE 'KONP',
 +
            c_01            TYPE char2    VALUE '01',
 +
            c_zint          TYPE kscha    VALUE 'ZINT'.
 +
constants: c_sapmv45a_xKOMV TYPE char40  VALUE '(SAPMV45A)XKOMV[]'.
 +
**TYPES**
 +
TYPES: ty_sim      TYPE zsso_sim_st,
 +
        ty_sim_hdr  TYPE zsso_sim_hdr_st,
 +
        ty_sim_pos  TYPE zsso_sim_pos_st,
 +
        ty_sim_ftr  TYPE zsso_sim_ftr_st,
 +
        ty_vbdka    TYPE vbdka,
 +
        ty_xvbkd    TYPE vbkdvb,
 +
        ty_xvbap    TYPE vbapvb,
 +
        ty_te418    TYPE te418.
 +
TYPES: BEGIN OF ty_t052s,
 +
          ratnr TYPE ratnr,
 +
          ratpz TYPE ratpz,
 +
          ratzt TYPE ratzt,
 +
        END OF  ty_t052s.
 +
**TYPE TABLE**
 +
TYPES: ty_t_sim_pos TYPE STANDARD TABLE OF ty_sim_pos,
 +
        ty_t_xvbkd  TYPE STANDARD TABLE OF ty_xvbkd,
 +
        ty_t_xvbap  TYPE STANDARD TABLE OF ty_xvbap,
 +
        ty_t_t052s  TYPE STANDARD TABLE OF ty_t052s,
 +
        ty_t_tline  TYPE STANDARD TABLE OF tline.
 +
types: ty_t_xkomv TYPE STANDARD TABLE OF KOMV.
 +
**DATA**
 +
DATA: gt_xvbap  TYPE ty_t_xvbap,
 +
      gt_t052s  TYPE ty_t_t052s,
 +
      ga_sim    TYPE ty_sim,
 +
      ga_xvbkd  TYPE ty_xvbkd.
 +
data gt_xkomv type ty_t_xkomv.
 +
**********************************************************************</nowiki>

Latest revision as of 15:14, 6 April 2020

Ejemplo 1

FORM f_pedido_venta USING i_kunnr
                          i_werks
                 CHANGING p_documento TYPE vbak-vbeln
                          o_datos_pedido LIKE gt_datos_pedido[].
  DATA: ls_header TYPE bapisdhd1,
        lt_partners TYPE STANDARD TABLE OF bapiparnr,
        ls_partner TYPE bapiparnr,
        lt_items TYPE STANDARD TABLE OF bapisditm,
        ls_item TYPE bapisditm,
        lt_schedule TYPE STANDARD TABLE OF bapischdl,
        ls_schedule TYPE bapischdl,
        lt_condiciones TYPE STANDARD TABLE OF bapicond,
        ls_condicion TYPE bapicond,
        lt_return TYPE STANDARD TABLE OF bapiret2,
        ls_return TYPE bapiret2,
        posicion(6) TYPE n.
  DATA detalle LIKE LINE OF o_datos_pedido.
  CLEAR: ls_header,
         lt_items[],
         lt_condiciones[],
         lt_partners[],
         lt_schedule[],
         lt_return[].

  ls_header-doc_type = 'PSER'.
  ls_header-sales_org = 'PTG'.
  ls_header-distr_chan = 'PT'.
  ls_header-division =  'PT'.
  ls_header-req_date_h = sy-datlo.
 
  ls_partner-partn_role = 'AG'.
  ls_partner-partn_numb = i_kunnr.
  APPEND ls_partner TO lt_partners.
  posicion = '0'.
  
  LOOP AT o_datos_pedido INTO detalle.
    CLEAR: ls_item,
           ls_condicion,
           ls_schedule.
    posicion = posicion + 10.
    ls_item-itm_number = posicion.
    ls_item-material = detalle-matnr.
    ls_item-short_text = detalle-maktx.
    ls_item-plant = i_werks.
    
    APPEND ls_item TO lt_items.
    ls_condicion-itm_number = posicion.
    ls_condicion-cond_type = 'PCOND'.

    DATA ld_monto LIKE bapicurr-bapicurr.
    CALL FUNCTION 'BAPI_CURRENCY_CONV_TO_EXTERNAL'
      EXPORTING
        currency        = detalle-waerk
        amount_internal = detalle-kwert
      IMPORTING
        amount_external = ld_monto.
    ls_condicion-cond_value = ld_monto.
    ls_condicion-currency = detalle-waerk.
    APPEND ls_condicion TO lt_condiciones.
    ls_schedule-itm_number = posicion.
    ls_schedule-req_qty = detalle-menge.
    APPEND ls_schedule TO lt_schedule.
  ENDLOOP.

  CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
    EXPORTING
    order_header_in               = ls_header
     behave_when_error             = space
   IMPORTING
     salesdocument                 = p_documento
  TABLES
    return                        = lt_return
    order_items_in                = lt_items
    order_partners                = lt_partners
    order_schedules_in            = lt_schedule
    order_conditions_in           = lt_condiciones.

  IF p_documento IS NOT INITIAL.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait   = 'X'
      IMPORTING
        return = ls_return.

* Pedido de Venta grabado
    MESSAGE ID 'V1' TYPE 'S' NUMBER '311'
    WITH 'Pedido de Venta'(s01)
          p_documento.
  ELSE.
    LOOP AT lt_return INTO ls_return WHERE type = 'E'.
      MESSAGE ID ls_return-id TYPE ls_return-type NUMBER ls_return-number
      WITH ls_return-message_v1
           ls_return-message_v2
           ls_return-message_v3
           ls_return-message_v4.
      EXIT.
    ENDLOOP.
  ENDIF.

ENDFORM.                    "f_pedido_venta

Crear pedido con referencia a factura

En SAP no existe una BAPI para crear una orden de venta con referencia a otros documentos, como otros pedidos, ofertas, etc. Solución ver Nota SAP 370988

FUNCTION Z_SD_CREA_PEDIDO_CON_REF_FACT.
*"----------------------------------------------------------------------
*"*"Interfase local
*"  IMPORTING
*"     REFERENCE(I_AUART) LIKE  VBAK-AUART DEFAULT 'ZFIN'
*"     REFERENCE(I_VBELN) LIKE  VBRK-VBELN
*"     REFERENCE(I_MONTO) TYPE  ACBTR
*"     REFERENCE(I_WAERS) TYPE  WAERS
*"     REFERENCE(I_COMMIT) TYPE  CHAR1 DEFAULT SPACE
*"     REFERENCE(I_VERSION) TYPE  VSNMR_V OPTIONAL
*"  EXPORTING
*"     REFERENCE(O_SALESDOCUMENT) LIKE  BAPIVBELN-VBELN
*"  TABLES
*"      I_T_SALESDOCUMENTS STRUCTURE  SALES_KEY OPTIONAL
*"      O_T_RETURN STRUCTURE  BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
 ls_bapi_view-header       = 'X'.
 ls_bapi_view-item         = 'X'.
 ls_bapi_view-sdschedule   = 'X'.
 ls_bapi_view-sdcond       = 'X'.
 ls_bapi_view-partner      = 'X'.
 ls_bapi_view-BUSINESS     = 'X'.
 select single aubel into ls_salesdocuments
                          from vbrp where vbeln = i_vbeln.
 append ls_salesdocuments to lt_salesdocuments.
 CALL FUNCTION 'BAPISDORDER_GETDETAILEDLIST'
   EXPORTING
     i_bapi_view                   = ls_bapi_view
*   I_MEMORY_READ                 =
   TABLES
     sales_documents               = lt_salesdocuments
     order_headers_out             = lt_order_headers_out
     order_items_out               = lt_order_items_out
     order_schedules_out           = lt_order_schedules_out
     order_partners_out            = lt_order_partners_out
     order_conditions_out          = lt_order_conditions_out
     order_business_out            = lt_order_business_out
           .
************************************************************************
** PREPARE DATA
 clear lt_order_items_in[].
 clear lt_order_partners[].
 clear lt_order_schedules_in[].
 clear lt_order_conditions_in[].
* fill header data
 IF NOT lt_order_headers_out[] IS INITIAL.
   READ TABLE lt_order_headers_out INTO ls_header_out INDEX 1.
* fill header data
   perform fill_header using i_auart
                             i_vbeln
                             i_version.
* fill header business data
   perform fill_header_business.
* fill partner data
   perform fill_partners.
 endif.
* ORDER_ITEMS_IN
 select single matnr werks zterm from ZSD_MAT_INTERES
                   into (ls_order_items_in-material,
                         ls_order_items_in-plant,
                         ls_order_header_in-PMNTTRMS)
                   where vkorg = ls_header_out-SALES_ORG.
 ls_order_items_in-po_itm_no  = '0010'.
*  ls_order_items_in-material   = '000000000000040383'.
*  ls_order_items_in-plant      = '700P'.
 APPEND ls_order_items_in TO lt_order_items_in.
* ORDER_SCHEDULE_IN
 ls_order_schedules_in-itm_number = '0010'.
 ls_order_schedules_in-req_qty    = '1'.
 APPEND ls_order_schedules_in TO lt_order_schedules_in.
* ORDER_CONDITIONS_IN
 ls_order_conditions_in-itm_number = '0010'.
 ls_order_conditions_in-cond_type  = 'ZFIN'.
 ls_order_conditions_in-cond_value = i_monto.
 ls_order_conditions_in-currency  =  i_waers.
 APPEND ls_order_conditions_in TO lt_order_conditions_in.

*fill logic switch
*  lv_logic_switch-pricing = i_prart.
 clear o_t_return[].
 CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2'
   EXPORTING
*   SALESDOCUMENTIN               =
     order_header_in               = ls_order_header_in
     logic_switch                  = lv_logic_switch
   IMPORTING
     salesdocument                 = o_salesdocument
   TABLES
     return                        = o_t_return
     order_items_in                = lt_order_items_in
     order_partners                = lt_order_partners
     order_schedules_in            = lt_order_schedules_in
     order_conditions_in           = lt_order_conditions_in
           .
 if o_salesdocument is not initial.
   if i_commit = 'X'.
     CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
     EXPORTING
        WAIT          = 'X'
*   IMPORTING
*     RETURN        =
               .
   endif.
 endif.
ENDFUNCTION.

FORM add_schedules using i_qty.         "add schedules to item
 LOOP AT lt_order_schedules_out INTO ls_schedules_out
                  WHERE itm_number = ls_item_out-itm_number
                    and DOC_NUMBER = ls_item_out-DOC_NUMBER
   .
*    ls_order_schedules_in-itm_number = ls_schedules_out-itm_number.
   ls_order_schedules_in-itm_number = ld_item_number.
   IF NOT i_qty IS INITIAL AND NOT ls_schedules_out-req_qty = 0.
     ls_order_schedules_in-req_qty = i_qty.
   ELSE.
     ls_order_schedules_in-req_qty = ls_schedules_out-req_qty.
   ENDIF.
   ls_order_schedules_in-sched_line = ls_schedules_out-sched_line.
   APPEND  ls_order_schedules_in TO lt_order_schedules_in.
 ENDLOOP.
 IF sy-subrc <> 0.
   ls_order_schedules_in-itm_number = ls_item_out-itm_number.
   ls_order_schedules_in-sched_line = '001'.
   ls_order_schedules_in-req_qty = i_qty.
   APPEND  ls_order_schedules_in TO lt_order_schedules_in.
 ENDIF.
ENDFORM.                    " add_schedules
*&---------------------------------------------------------------------*
*&      Form  add_items
*&---------------------------------------------------------------------*
FORM add_items .
 CONSTANTS:
       kzvbr_e TYPE c VALUE 'E',        " Einzelfertigung
       vkgru_rep_reparaturanfo LIKE vbap-vkgru VALUE 'I01'.
*  ls_order_items_in-itm_number = ls_item_out-itm_number.
* MOVE-CORRESPONDING ls_item_out to ls_order_items_in.
 ls_order_items_in-itm_number = ld_item_number.
 ls_order_items_in-material = ls_item_out-material.
*  ls_order_items_in-ref_doc  = pa_key.
 ls_order_items_in-ref_doc  = ls_item_out-DOC_NUMBER.
 ls_order_items_in-ref_doc_it = ls_item_out-itm_number.
 ls_order_items_in-ref_doc_ca = ls_header_out-sd_doc_cat.
 ls_order_items_in-PLANT   = ls_item_out-PLANT.         "centro
 ls_order_items_in-STore_LOC  = ls_item_out-STGE_LOC.   "almacen
 ls_order_items_in-MAT_ENTRD  = ls_item_out-MAT_ENTRD.   "material introducido     ;
 ls_order_items_in-MATL_GROUP = ls_item_out-MATL_GROUP.    "grupo de articulos;
 ls_order_items_in-SHORT_TEXT = ls_item_out-SHORT_TEXT."Texto breve posición de pedido de cliente;
 ls_order_items_in-VAL_TYPE   = ls_item_out-VAL_TYPE ."clase de valoración;
 ls_order_items_in-PROD_HIERa  = ls_item_out-PROD_HIER."jerarquía de productos;
 ls_order_items_in-PR_REF_MAT = ls_item_out-PR_REF_MAT.    "Material determinante del precio;
* ls_order_items_in-BASE_UOM   = ls_item_out-BASE_UOM."Unidad de medida base;
 ls_order_items_in-SALES_UNIT = ls_item_out-SALES_UNIT .   "Cantidad de pedido acumulada (en unidades de venta);
 ls_order_items_in-SALQTYNUM = ls_item_out-SALES_QTY1.   "Numerador (factor) p.conversión cantidad venta en UMA;
 ls_order_items_in-SALQTYDEN = ls_item_out-SALES_QTY2.  "Denominador (divisor) p.conversión ctd.venta en UMA;
*  IF NOT ls_item_out-REPAIR_PRO EQ VKGRU_REP_REPARATURANFO.
*    ls_order_items_in-REPAIR_PRO = ls_item_out-REPAIR_PRO.  "Gestión de reparaciones: Clasificación de posiciones;
*  ENDIF.
 ls_order_items_in-dlvschduse = ls_item_out-DLVSCHEDUS. "Indicador de utilización;
 IF NOT ls_item_out-DLV_GROUP IS INITIAL.
   ls_order_items_in-DLV_GROUP = ls_item_out-DLV_GROUP . "Grupo de entrega (las pos.se entregan conjuntamente);
 ENDIF.
 ls_order_items_in-FIXED_QUAN = ls_item_out-FIXED_QUAN .  "Cantidad fija;
*    ls_order_items_in-REPLACE_PT = ls_item_out-REPLACE_PT.  "Pieza de recambio;
*   ls_order_items_in-METH_BILL = ls_item_out-METH_BILL.  "Forma de facturación para órdenes RK/PPS;
 ls_order_items_in-DIVISION = ls_item_out-DIVISION.  "sector;
 ls_order_items_in-CURRENCY = ls_item_out-CURRENCY.  "Moneda de documento comercial;
 IF NOT ls_item_out-PROFIT_CTR IS INITIAL.
   ls_order_items_in-PROFIT_CTR = ls_item_out-PROFIT_CTR.     "Centro de beneficio;PROFIT_CTR
 ENDIF.
 ls_order_items_in-ORDERID = ls_item_out-ORDERID.             "Orden
 if ls_item_out-WBS_ELEM is NOT INITIAL.
*    ls_order_items_in-WBS_ELEM = ls_item_out-WBS_ELEM .          "Elemento PEP
   CALL FUNCTION 'CONVERSION_EXIT_ABPSP_OUTPUT'
     EXPORTING
       INPUT         = ls_item_out-WBS_ELEM
    IMPORTING
      OUTPUT        = ls_order_items_in-WBS_ELEM
             .
 endif.
*   ls_order_items_in-NO_OF_SERI = ls_item_out-NO_OF_SERI.  "Cantidad de números de serie;
*   ls_order_items_in-SERNO_PROF = ls_item_out-SERNO_PROF.  "Perfil de números de serie;
 APPEND ls_order_items_in TO lt_order_items_in.
ENDFORM.                    " add_items
*&---------------------------------------------------------------------*
*&      Form  add_conditions
*&---------------------------------------------------------------------*
FORM add_conditions.          " add conditions to item
 LOOP AT lt_order_conditions_out INTO ls_conditions_out
                      WHERE itm_number = ls_item_out-itm_number
                       and sd_doc  = ls_item_out-DOC_NUMBER
                     AND NOT cond_type IS INITIAL
   .
   CLEAR ls_order_conditions_in.
   MOVE-CORRESPONDING ls_conditions_out TO ls_order_conditions_in.
   ls_order_conditions_in-itm_number = ld_item_number.
   ls_order_conditions_in-cond_unit = ls_conditions_out-cond_d_unt.
   APPEND ls_order_conditions_in TO lt_order_conditions_in.
 ENDLOOP.
ENDFORM.                    " add_conditions
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*&      Form  FILL_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FILL_HEADER using i_auart
                      i_vbeln
                      i_version.

 ls_order_header_in-doc_type   = i_auart.
 ls_order_header_in-sales_org  = ls_header_out-sales_org.
 ls_order_header_in-distr_chan = ls_header_out-distr_chan.
 ls_order_header_in-division   = ls_header_out-division.
*  ls_order_header_in-ref_doc = ls_header_out-DOC_NUMBER.
*  ls_order_header_in-purch_no_c = i_purno.
*  ls_order_header_in-refdoc_cat = ls_header_out-sd_doc_cat.
 ls_order_header_in-sales_off = ls_header_out-sales_off. "oficina de ventas
 ls_order_header_in-sales_grp = ls_header_out-sales_grp. "grupo de vendedores
 ls_order_header_in-WAR_DATE	= ls_header_out-WAR_DATE.	"Fecha límite de garantía
 if ls_header_out-WBS_ELEM is not initial
   and ls_header_out-WBS_ELEM ne '000000000'.
 ls_order_header_in-WBS_ELEM  = ls_header_out-WBS_ELEM. "Elemento del plan de estructura de proyecto (elemento PEP)
endif.
ls_order_header_in-COLLECT_NO	= ls_header_out-SD_COL_NUM.	"Nº de licitación (SD)
ls_order_header_in-DLV_BLOCK  = ls_header_out-DLV_BLOCK.  "Bloqueo de nota de entrega cabecera de documento
ls_order_header_in-ORD_REASON	= ls_header_out-ORD_REASON.	"Motivo de pedido (motivo de la operación)
ls_order_header_in-BILL_BLOCK	= ls_header_out-BILL_BLOCK.	"Bloqueo de clases de facturas para documento comercial
ls_order_header_in-CURRENCY	= ls_header_out-CURRENCY.	"Moneda de documento comercial
ls_order_header_in-COMPL_DLV  = ls_header_out-COMPL_DLV.  "¿Entrega completa por pedido? 
if ls_header_out-REQ_DATE_H is not INITIAL.
 ls_order_header_in-REQ_DATE_H	= ls_header_out-REQ_DATE_H.	"Fecha preferente de entrega
 ls_order_header_in-DATE_TYPE  = ls_header_out-DATE_TYPE.  "Período propuesto para la fecha
endif.
ls_order_header_in-CUST_GRP1  = ls_header_out-CUST_GRP1.  "Grupo de clientes 1
ls_order_header_in-CUST_GRP2  = ls_header_out-CUST_GRP2.  "Grupo de clientes 2
ls_order_header_in-CUST_GRP3  = ls_header_out-CUST_GRP3.  "Grupo de clientes 3
ls_order_header_in-CUST_GRP4  = ls_header_out-CUST_GRP4.  "Grupo de clientes 4
ls_order_header_in-CUST_GRP5  = ls_header_out-CUST_GRP5.  "Grupo de clientes 5
ls_order_header_in-REF_DOC_L  = ls_header_out-REF_DOC_L.  "Número de documento de referencia
ls_order_header_in-REF_DOC    = i_vbeln.
select SINGLE vbtyp into ls_order_header_in-refdoc_cat from vbrk
                                          where vbeln = i_vbeln.
ls_order_header_in-ASS_NUMBER	= ls_header_out-ASS_NUMBER.	"Número de asignación
ls_order_header_in-ALTTAX_CLS	= ls_header_out-ALT_TAX_CL.	"Diferente clasificación fiscal
ls_order_header_in-TAX_CLASS2	= ls_header_out-TAX_CLASS2.	"Clasificación fiscal cliente 2
ls_order_header_in-TAX_CLASS3	= ls_header_out-TAX_CLASS3.	"Clasificación fiscal cliente 3
ls_order_header_in-TAX_CLASS4	= ls_header_out-TAX_CLASS4.	"Clasificación fiscal cliente 4
ls_order_header_in-TAX_CLASS5	= ls_header_out-TAX_CLASS5.	"Clasificación fiscal cliente 5
ls_order_header_in-TAX_CLASS6	= ls_header_out-TAX_CLASS6.	"Clasificación fiscal cliente 6
ls_order_header_in-TAX_CLASS7	= ls_header_out-TAX_CLASS7.	"Clasificación fiscal cliente 7
ls_order_header_in-TAX_CLASS8	= ls_header_out-TAX_CLASS8.	"Clasificación fiscal cliente 8
ls_order_header_in-TAX_CLASS9	= ls_header_out-TAX_CLASS9.	"Clasificación fiscal cliente 9
ls_order_header_in-EUTRI_DEAL = ls_header_out-EU_TRIANG.  "Indicador: ¿operación triangular dentro de la UE?
ls_order_header_in-TAXDEP_CTY	= ls_header_out-TAX_DEPART.	"País de salida para la  determinación de impuestos
ls_order_header_in-TAXDST_CTY = ls_header_out-TAX_DEST_CT.  "País receptor fiscal
ls_order_header_in-DLVSCHDUSE	= ls_header_out-DLVSCHEDUS.	"Indicador de utilización
ls_order_header_in-version    = i_version.
ls_ORDER_HEADER_IN-PURCH_NO_C = i_vbeln.
ls_ORDER_HEADER_IN-CUST_GROUP = '01'.
ENDFORM.                    " FILL_HEADER
*&---------------------------------------------------------------------*
*&      Form  FILL_HEADER_BUSINESS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FILL_HEADER_BUSINESS .
* fill business data
 IF NOT lt_order_business_out[] IS INITIAL.
   READ TABLE lt_order_business_out INTO ls_business_out INDEX 1.
   ls_order_header_in-ACCNT_ASGN	= ls_business_out-ACCNT_ASGN.	"Cuenta contrato
   ls_order_header_in-FKK_CONACCT  = ls_business_out-FKK_CONACCT.  "grupo de Imputación
   ls_order_header_in-PYMT_METH  = ls_business_out-PAYMETHODE. "Vía de Pago
* = ls_business_out-POSTPERIOD  Periodo Contable
*	= ls_business_out-FISC_YEAR	Ejercicio
   ls_order_header_in-EXRATE_FI  = ls_business_out-EXCHRATEFI. "Tipo de Cambio
   ls_order_header_in-DUNN_KEY	= ls_business_out-DUNN_KEY.	"Clave de Reclamación
   ls_order_header_in-DUNN_BLOCK	= ls_business_out-DUNN_BLOCK.	"Bloqueo de reclamación
 ENDIF.
 ENDFORM.                    " FILL_HEADER_BUSINESS
*&---------------------------------------------------------------------*
*&      Form  FILL_PARTNERS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FILL_PARTNERS .
 data ld_pn(10) type n.
 loop at lt_order_partners_out INTO ls_order_partners_out
                             where SD_DOC = ls_header_out-doc_number
                              .
   ls_order_partners-partn_role = ls_order_partners_out-partn_role.
     ls_order_partners-partn_numb   = ls_order_partners_out-customer.
     if ls_order_partners_out-PERSON_NO is not INITIAL.
       move ls_order_partners_out-PERSON_NO to ld_pn.
       move   ld_pn to ls_order_partners-partn_numb.
     endif.
   APPEND ls_order_partners TO lt_order_partners.
 ENDloop.
ENDFORM.                    " FILL_PARTNERS
**********************************************************************************
include ZSSO_RVADOR01_SIM_TOP.
DATA  ls_bapi_view            TYPE order_view.
DATA  lt_salesdocuments       TYPE TABLE OF sales_key.
DATA  lt_order_headers_out    TYPE TABLE OF bapisdhd.
DATA  lt_order_items_out      TYPE TABLE OF bapisdit.
DATA  lt_order_schedules_out  TYPE TABLE OF bapisdhedu.
DATA  lt_order_conditions_out TYPE TABLE OF bapisdcond.
DATA  lt_order_partners_out   TYPE TABLE OF bapisdpart.
data  lt_order_business_out   type table of BAPISDBUSI.
DATA: lv_logic_switch         TYPE bapisdls.
DATA  lv_salesdocument        TYPE bapivbeln-vbeln.
DATA  lt_return               TYPE TABLE OF bapiret2.
DATA  lt_order_items_in       TYPE TABLE OF bapisditm.
DATA  lt_order_schedules_in   TYPE TABLE OF bapischdl.
DATA  lt_order_partners       TYPE TABLE OF bapiparnr.
DATA  lt_order_conditions_in  TYPE TABLE OF bapicond.
data ls_salesdocuments type sales_key.
DATA: ls_return               TYPE bapiret2.
DATA: ls_header_out           TYPE bapisdhd.
DATA  ls_order_header_in      TYPE bapisdhd1.
DATA: ls_item_out             TYPE bapisdit.
DATA: ls_order_items_in       TYPE bapisditm.
DATA: ls_order_schedules_in   TYPE bapischdl.
DATA: ls_schedules_out        TYPE bapisdhedu.
DATA: ls_order_partners_out   TYPE bapisdpart.
DATA: ls_order_partners       TYPE bapiparnr.
DATA  ls_order_conditions_in  TYPE bapicond.
DATA: ls_conditions_out       TYPE bapisdcond.
data  ls_business_out         type BAPISDBUSI.
data ld_item_number like ls_item_out-itm_number.
data ld_sales_key type sales_key.
**********************************************************************
*&---------------------------------------------------------------------*
*&  Include           ZSSO_RVADOR01_SIM_TOP
*&---------------------------------------------------------------------*
*----------------------------------------------------------------------*
*   DATA DECLARATION
*----------------------------------------------------------------------*
**CONSTANTS**
 CONSTANTS: c_sapmv45a_xvbkd TYPE char40   VALUE '(SAPMV45A)XVBKD[]',
            c_sapmv45a_xvbap TYPE char40   VALUE '(SAPMV45A)XVBAP[]',
            c_initial        TYPE posnr    VALUE '000000',
            c_end_date       TYPE auszdat  VALUE '99991231',
            c_formname       TYPE tdsfname VALUE 'ZSSO_RVADOR01_SIM',
            c_waerk          TYPE waerk    VALUE 'CLP',
            c_skfbt          TYPE acfbt    VALUE '0.00',
            c_valtg          TYPE valtg    VALUE '00',
            c_valdt          TYPE valdt    VALUE space,
            c_true           TYPE char1    VALUE 'X',
            c_as01           TYPE dzterm   VALUE 'AS01',
            c_ts01           TYPE dzterm   VALUE 'TS01',
            c_id_z001        TYPE tdid     VALUE 'Z001',
            c_es             TYPE spras    VALUE 'S',
            c_konp           TYPE tdobject VALUE 'KONP',
            c_01             TYPE char2    VALUE '01',
            c_zint           TYPE kscha    VALUE 'ZINT'.
 constants: c_sapmv45a_xKOMV TYPE char40   VALUE '(SAPMV45A)XKOMV[]'.
**TYPES**
 TYPES: ty_sim       TYPE zsso_sim_st,
        ty_sim_hdr   TYPE zsso_sim_hdr_st,
        ty_sim_pos   TYPE zsso_sim_pos_st,
        ty_sim_ftr   TYPE zsso_sim_ftr_st,
        ty_vbdka     TYPE vbdka,
        ty_xvbkd     TYPE vbkdvb,
        ty_xvbap     TYPE vbapvb,
        ty_te418     TYPE te418.
 TYPES: BEGIN OF ty_t052s,
          ratnr TYPE ratnr,
          ratpz TYPE ratpz,
          ratzt TYPE ratzt,
        END OF   ty_t052s.
**TYPE TABLE**
 TYPES: ty_t_sim_pos TYPE STANDARD TABLE OF ty_sim_pos,
        ty_t_xvbkd   TYPE STANDARD TABLE OF ty_xvbkd,
        ty_t_xvbap   TYPE STANDARD TABLE OF ty_xvbap,
        ty_t_t052s   TYPE STANDARD TABLE OF ty_t052s,
        ty_t_tline   TYPE STANDARD TABLE OF tline.
 types: ty_t_xkomv TYPE STANDARD TABLE OF KOMV.
**DATA**
 DATA: gt_xvbap   TYPE ty_t_xvbap,
       gt_t052s   TYPE ty_t_t052s,
       ga_sim     TYPE ty_sim,
       ga_xvbkd   TYPE ty_xvbkd.
 data gt_xkomv type ty_t_xkomv.
**********************************************************************