Ver Mensaje Individual
  #2  
Viejo 10/04/06, 09:20:37
Avatar de tracer
tracer tracer is offline
Administrator
 
Fecha de Ingreso: feb 2006
Localización: España (Madrid)
Mensajes: 503
Hola Skadeour,

Te adjunto un programa ejemplo en el que se usa la bapi

BAPI_ENTRYSHEET_CREATE

que nos comentas. Quizas te pueda servir como modelo o guía.


* Selecciona item de pedido
DATA: BEGIN OF t_ped OCCURS 0,
ebeln LIKE ekko-ebeln, " Pedido
ebelp LIKE ekpo-ebelp, " Iten del pedido
txz01 LIKE essr-txz01, " Texto de la hoja de entrada de serv
dlort LIKE essr-dlort, " Local de Prest Servicios
lzvon LIKE essr-lzvon, " Periodo de
lzbis LIKE essr-lzbis, " Periodo hasta
sbnamag LIKE essr-sbnamag, " Resp Interno
sbnaman LIKE essr-sbnaman, " Resp Externo
pwwe LIKE essr-pwwe, " Calidad del servicio
pwfr LIKE essr-pwfr, " Plazos del servicio
packno LIKE ekpo-packno, " paquete de servivio
menge LIKE ekpo-menge,
END OF t_ped.

DATA: t_uesll LIKE esll OCCURS 0 WITH HEADER LINE,
t_enc LIKE seqg3 OCCURS 0 WITH HEADER LINE.

SELECT * FROM ekpo INTO CORRESPONDING FIELDS OF TABLE t_ped
WHERE ebeln = w_ebeln.

LOOP AT t_ped.

t_ped-lzvon = sy-datum.
t_ped-lzbis = sy-datum.
t_ped-sbnamag = sy-uname.
t_ped-sbnaman = sy-uname.
t_ped-pwwe = '75'.
t_ped-pwfr = '75'.
t_ped-menge = 1.

MODIFY t_ped.

ENDLOOP.

SORT t_ped.
w_pos = 0.
LOOP AT t_ped.

w_pos = w_pos + 1 .
REFRESH: po_services, t_uesll.
* Busca los servicios del item de pedido
CALL FUNCTION 'MS_READ_SERVICES'
EXPORTING
i_hpackno = t_ped-packno
TABLES
t_esll = t_uesll
EXCEPTIONS
not_found = 1
OTHERS = 2.

CHECK NOT t_uesll[] IS INITIAL.

* Llena tabla de cabecera y detalle de hoja de entrada de servicio
CLEAR po_entrysheet.
po_entrysheet-po_number = t_ped-ebeln.
po_entrysheet-po_item = t_ped-ebelp.
po_entrysheet-begdate = sy-datum.
po_entrysheet-enddate = sy-datum.
po_entrysheet-pckg_no = '1'.
po_entrysheet-person_int = t_ped-sbnamag.
po_entrysheet-person_ext = t_ped-sbnaman.
po_entrysheet-score_time = t_ped-pwwe.
po_entrysheet-score_qual = t_ped-pwfr.
po_entrysheet-short_text = t_ped-txz01.
po_entrysheet-location = t_ped-dlort.
po_entrysheet-acceptance = 'X'.
po_entrysheet-doc_date = sy-datum.
po_entrysheet-post_date = sy-datum.

CLEAR po_services.
po_services-pckg_no = '1'.
po_services-line_no = '1'.
po_services-outl_ind = 'X'.
po_services-subpckg_no = '2'.
po_services-quantity = '1'.
APPEND po_services.

LOOP AT t_uesll WHERE package IS initial.
po_services-pckg_no = '2'.
po_services-line_no = po_services-line_no + 1.
po_services-outl_ind = ' '.
CLEAR po_services-subpckg_no.
po_services-quantity = t_uesll-menge.
po_services-base_uom = t_uesll-meins.
po_services-price_unit = t_uesll-peinh.
IF t_uesll-menge GT 0.
po_services-gr_price = t_uesll-netwr / t_uesll-menge.
ENDIF.
po_services-pln_pckg = t_uesll-packno.
po_services-pln_line = t_uesll-introw.
po_services-short_text = t_uesll-ktext1.
APPEND po_services.
ENDLOOP.

* si no se coloca el commit work and wait transaccion se queda
* bloqueada hasta unos segundos
* espera usuario desbloquear
CONCATENATE sy-mandt t_ped-ebeln INTO w_garg.

REFRESH t_enc.
DO 1000 TIMES.

COMMIT WORK AND WAIT.
REFRESH t_enc.
CALL FUNCTION 'ENQUEUE_READ'
EXPORTING
gclient = sy-mandt
gname = EKKO
garg = w_garg
TABLES
enq = t_enc
EXCEPTIONS
communication_failure = 1
system_failure = 2
OTHERS = 3.

IF sy-subrc NE 0 OR t_enc[] IS INITIAL.
EXIT.
ENDIF.

ENDDO.

* BAPI para crear hoja de entrada de servicios
CALL FUNCTION 'BAPI_ENTRYSHEET_CREATE'
EXPORTING
entrysheetheader = po_entrysheet
IMPORTING
entrysheet = w_entrysheet
TABLES
entrysheetservices = po_services
return = return2.

LOOP AT return2 WHERE type = 'E'.
CLEAR t_errores.
t_errores-mov = 'H/E'.
t_errores-msg = return2-message.
APPEND t_errores.
ENDLOOP.

Un saludo .
__________________
Si precisas una mano, recuerda que yo tengo dos.
Responder Con Cita