- VBAK si son campos a medida para la cabecera del pedido de ventas.
- VBAP si son campos a medida para las posiciones del pedido de venta.
- Desde la transacción SE11, dentro de la tabla correspondiente pulsamos el botón APPEND
- Creamos un nuevo append y añadimos nuestros campos a medida.
- Guardad y activar.
Crear un nuevo append a la tabla |
Nuevos campos a medida para la tabla VBAP |
Aviso: el nombre del campo debería empezar por ZZ o YY |
El problema surge cuando queremos gestionar estos campos con alguna bapi de ventas como:
- SD_SALESDOCUMENT_CREATE
- BAPI_SALESORDER_CHANGE
- BAPI_SALESORDER_CREATEFROMDAT2
- .... y más que hay....
¿Donde están nuestros campos a medida? ¿ como puedo usarlos en estas bapis?
Para estas bapis, los campos a medida se gestionan a través del parámetro EXTENSIONIN.
Primero, añadir los nuevos campos a las siguientes tablas a través de un APPEND:
Si son campos a medida en las posiciones del pedido de venta:
- BAPE_VBAP
- BAPE_VBAPX
- VBAPKOZ
- VBAPKOZX
- BAPE_VBAK
- BAPE_VBAKX
- VBAKKOZ
- VBAKKOZX
En las estructuras BAPE_VBAK/BAPE_VBAP todos los campos deben ser de tipo CHAR sino cuando más adelante rellenéis la estructura de la bapi, los campos numéricos saldrán con caracteres extraños como &# y no coincidirán las longitudes.
Por ejemplo:
- Un campo DEC 15 con 3 decimales , lo definiremos como CHAR de 15
- Un campo INT de longitud, lo definiremos como CHAR de 8.
En las estructuras BAPE_VBAPX / BAPE_VBAKX los campos deben ser CHAR1 (char de long. 1)
En las estructuras VBAPKOZX o VBAKKOZX los campos deben ser CHAR1 (char de long. 1)
Centrándonos en el ejemplo, ampliamos las tablas para posiciones de pedido:
BAPE_VBAP - todos los campos son de tipo CHAR |
BAPE_VBAPX - todos los campos son de tipo CHAR |
VBAPKOZ |
VBAPKOZX |
Con esto hemos terminado la parte de las estructuras que necesitamos.
Ahora vamos con el código.
EXTENSIONIN es de tipo BAPIPAREX, su estructura es la siguiente:
Estructura BAPIPAREX |
En los siguientes campos guardamos los valores de los campos concatenados como un solo registro.
Lo mejor es utilizar el método fill_container_c de la cl_abap_container_utilities.
Aquí os dejo un ejemplo para rellenar la estructura EXTENSIONIN:
DATA: wl_vbape TYPE bape_vbap, wl_vbapex TYPE bape_vbapx. DATA: tl_extin type STANDARD TABLE OF bapiparex. FIELD-SYMBOLS: <fs_extin> TYPE bapiparex. wl_vbape-VBELN = wg_vbeln. "nº de documento de ventas wl_vbape-POSNR = wg_posnr. "nº de posición wl_vbapex-VBELN = wg_vbeln. "nº de documento de ventas wl_vbapex-POSNR = wg_posnr. "nº de posición wl_vbape-zzcampo1 = 'prueba'. wl_vbape-zzcampo2 = 'de campos'. wl_vbape-zzcampo3 = 'a medida'. wl_vbapex-zzcampo1 = 'X'. "o ABAP_TRUE si usais TYPE-POOLS: ABAP. wl_vbapex-zzcampo2 = 'X'. wl_vbapex-zzcampo3 = 'X'. APPEND INITIAL LINE TO it_extin ASSIGNING <fs_extin>. <fs_extin>-structure = 'BAPE_VBAP'.
*si parecen caracteres extraños, revisar que todos los campos de la estrc son CHAR cl_abap_container_utilities=>fill_container_c( EXPORTING im_value = wl_vbape IMPORTING ex_container = <fs_extin>+30 ). APPEND INITIAL LINE TO it_extin ASSIGNING <fs_extin>. <fs_extin>-structure = 'BAPE_VBAPX'. cl_abap_container_utilities=>fill_container_c( EXPORTING im_value = wl_vbapex IMPORTING ex_container = <fs_extin>+30 ). * ya podemos usarlo en la bapi: CALL FUNCTION 'SD_SALESDOCUMENT_CREATE' EXPORTING sales_header_in = wa_so_hearder sales_header_inx = wa_so_hearderx testrun = test IMPORTING salesdocument_ex = wa_saorder TABLES return = lt_return sales_items_in = it_items sales_partners = it_fi extensionin = it_extin. "<Campos a medida del pedido
Notas relacionadas:
Note 143580 - Information on SD BAPIs and customer enhancement
Eres un crack amigo... es un excelente documento el que has compartido.
ResponderEliminarTe empujo a que sigas con éstos aportes David., yo también comparto mis conocimientos sobre SAP, y sé lo importante que es un comentario de motivación ;)
Te mando un fuerte abrazo!
Nos estamos leyendo!
Gracias SidV.
EliminarCon el poco tiempo que puedo dedicarle al blog se agradecen los ánimos.
Muchísimas Gracias.
Muchas gracias David, de bastante ayuda este aporte para mí. :D
ResponderEliminarGracias Sr, es un excelente aporte. Se agradece el que nos compartas este tipo de material a los que estamos iniciando.
ResponderEliminarSaludos