Sap ofrece muchas alternativas para la emulacion de sus procesos graficos mediante programacion para permitir la carga en masa de datos. Un ejemplo de este es la BAPI para creacion de pedidos BAPI_PO_CREATE1, que bien se puede usar para generar pedidos en base a un fichero previamente cargado.
FUNCTION BAPI_PO_CREATE1. EXPORTING VALUE(POHEADER) LIKE BAPIMEPOHEADER STRUCTURE BAPIMEPOHEADER VALUE(POHEADERX) LIKE BAPIMEPOHEADERX STRUCTURE BAPIMEPOHEADERX OPTIONAL VALUE(POADDRVENDOR) LIKE BAPIMEPOADDRVENDOR STRUCTURE BAPIMEPOADDRVENDOR OPTIONAL VALUE(TESTRUN) LIKE BAPIFLAG-BAPIFLAG OPTIONAL VALUE(MEMORY_UNCOMPLETE) LIKE BAPIFLAG-BAPIFLAG OPTIONAL VALUE(MEMORY_COMPLETE) LIKE BAPIFLAG-BAPIFLAG OPTIONAL VALUE(POEXPIMPHEADER) LIKE BAPIEIKP STRUCTURE BAPIEIKP OPTIONAL VALUE(POEXPIMPHEADERX) LIKE BAPIEIKPX STRUCTURE BAPIEIKPX OPTIONAL VALUE(VERSIONS) LIKE BAPIMEDCM STRUCTURE BAPIMEDCM OPTIONAL VALUE(NO_MESSAGING) LIKE BAPIFLAG-BAPIFLAG OPTIONAL VALUE(NO_MESSAGE_REQ) LIKE BAPIFLAG-BAPIFLAG OPTIONAL VALUE(NO_AUTHORITY) LIKE BAPIFLAG-BAPIFLAG OPTIONAL VALUE(NO_PRICE_FROM_PO) LIKE BAPIFLAG-BAPIFLAG OPTIONAL IMPORTING VALUE(EXPPURCHASEORDER) LIKE BAPIMEPOHEADER-PO_NUMBER VALUE(EXPHEADER) LIKE BAPIMEPOHEADER STRUCTURE BAPIMEPOHEADER VALUE(EXPPOEXPIMPHEADER) LIKE BAPIEIKP STRUCTURE BAPIEIKP TABLES RETURN STRUCTURE BAPIRET2 OPTIONAL POITEM STRUCTURE BAPIMEPOITEM OPTIONAL POITEMX STRUCTURE BAPIMEPOITEMX OPTIONAL POADDRDELIVERY STRUCTURE BAPIMEPOADDRDELIVERY OPTIONAL POSCHEDULE STRUCTURE BAPIMEPOSCHEDULE OPTIONAL POSCHEDULEX STRUCTURE BAPIMEPOSCHEDULX OPTIONAL POACCOUNT STRUCTURE BAPIMEPOACCOUNT OPTIONAL POACCOUNTPROFITSEGMENT STRUCTURE BAPIMEPOACCOUNTPROFITSEGMENT OPTIONAL POACCOUNTX STRUCTURE BAPIMEPOACCOUNTX OPTIONAL POCONDHEADER STRUCTURE BAPIMEPOCONDHEADER OPTIONAL POCONDHEADERX STRUCTURE BAPIMEPOCONDHEADERX OPTIONAL POCOND STRUCTURE BAPIMEPOCOND OPTIONAL POCONDX STRUCTURE BAPIMEPOCONDX OPTIONAL POLIMITS STRUCTURE BAPIESUHC OPTIONAL POCONTRACTLIMITS STRUCTURE BAPIESUCC OPTIONAL POSERVICES STRUCTURE BAPIESLLC OPTIONAL POSRVACCESSVALUES STRUCTURE BAPIESKLC OPTIONAL POSERVICESTEXT STRUCTURE BAPIESLLTX OPTIONAL EXTENSIONIN STRUCTURE BAPIPAREX OPTIONAL EXTENSIONOUT STRUCTURE BAPIPAREX OPTIONAL POEXPIMPITEM STRUCTURE BAPIEIPO OPTIONAL POEXPIMPITEMX STRUCTURE BAPIEIPOX OPTIONAL POTEXTHEADER STRUCTURE BAPIMEPOTEXTHEADER OPTIONAL POTEXTITEM STRUCTURE BAPIMEPOTEXT OPTIONAL ALLVERSIONS STRUCTURE BAPIMEDCM_ALLVERSIONS OPTIONAL POPARTNER STRUCTURE BAPIEKKOP OPTIONAL POCOMPONENTS STRUCTURE BAPIMEPOCOMPONENT OPTIONAL POCOMPONENTSX STRUCTURE BAPIMEPOCOMPONENTX OPTIONAL POSHIPPING STRUCTURE BAPIITEMSHIP OPTIONAL POSHIPPINGX STRUCTURE BAPIITEMSHIPX OPTIONAL POSHIPPINGEXP STRUCTURE BAPIMEPOSHIPPEXP OPTIONAL
Desgraciadamente esta BAPI carece de una extensa documentación sobre su uso, y no solo la cantidad de parámetros hacen complicado su uso si no también la interrelación entre sus parámetros lo que lo hace realmente compleja de usar de una manera exitosa.
Para la creacion de un pedido de servicios sencillo bien puede valer este ejemplo:
CALL FUNCTION 'BAPI_PO_CREATE1' EXPORTING POHEADER = BAPIMEPOHEADER POHEADERX = BAPIMEPOHEADERX IMPORTING EXPPURCHASEORDER = PURCHASEORDER TABLES POTEXTHEADER = BAPIMEPOTEXTHEADER RETURN = RETURN POITEM = BAPIMEPOITEM POITEMX = BAPIMEPOITEMX POACCOUNT = BAPIMEPOACCOUNT POACCOUNTX = BAPIMEPOACCOUNTX POSERVICES = BAPIESLLC POSRVACCESSVALUES = BAPIESKLC.
La llamada a esta funcion crearia un pedido con lineas de material y servicios asociados junto con la informacion contable.
Ahora para poder generar el pedido es necesario tener en cuenta que las tablas van relacionadas entre si, ya que en la misma llamada pueden crearse multiples lineas de material y servicios.
Para poder relacionar el numero de linea de pedido junto con sus datos de contabilizacion es sencillo, solo hay que vincular el valor PO_ITEM.
NO_PED = NO_PED + 10. BAPIMEPOITEM-PO_ITEM = NO_PED. BAPIMEPOITEMX-PO_ITEM = NO_PED. PKG = PKG + 10. BAPIMEPOITEM-PCKG_NO = PKG. BAPIMEPOACCOUNT-PO_ITEM = NO_PED. BAPIMEPOACCOUNTX-PO_ITEM = NO_PED.
Por otro lado, para relacionar el numero de servicio con el pedido habría que usar el valor PCKG_NO.
NO_SER = NO_SER + 10. BAPIESLLC-PCKG_NO = PKG + 1. BAPIESKLC-PCKG_NO = PKG + 1. BAPIESLLC-LINE_NO = NO_SER. BAPIESLLC-EXT_LINE = NO_SER. BAPIESKLC-LINE_NO = NO_SER . BAPIESKLC-SERNO_LINE = '01'. BAPIESKLC-PERCENTAGE = 100. BAPIESKLC-QUANTITY = BAPIESLLC-QUANTITY.
Algo importante a tener en cuenta es que hay que generar siempre un servicio de cabecera que es el que incluira todos los servicios que luego metemos en la pestaña correspondiente. Este podria ser un ejemplo de creacion de ese registro.
BAPIESLLC-PCKG_NO = PKG. BAPIESLLC-SUBPCKG_NO = PKG + 1. BAPIESLLC-OUTL_IND = 'X'.
Y con eso ya podríamos generar un pedido rellenando el resto de los datos de las tablas con la información que necesitemos.