MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Viejo 04/04/07, 08:47:37
BY_MY BY_MY is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Mensajes: 130
direct imput

Buenas.

Me gustaria saber si alguien tiene informacion o algun manual de como crear un direct imput. Me resulta bastante urgente y mas dadas las fechas que son.


un saludo.
Responder Con Cita
  #2  
Viejo 04/04/07, 12:24:28
BY_MY BY_MY is offline
Senior Member
 
Fecha de Ingreso: nov 2006
Mensajes: 130
Buenas de nuevo.

Lo que necesitaria es programar un report para que modifique el valor de un registro de la tabla "AUSP" sin usar un bach-input (ya que no se puede ejecutar correctamente) y evitar el modify a ser posible. La idea es hacerlo a traves de una funcion o algo similar, ya que no se me ocurre otra posible manera.


Saludos y muchas gracias.
Responder Con Cita
  #3  
Viejo 04/04/07, 12:53:00
Ruben_cs Ruben_cs is offline
Junior Member
 
Fecha de Ingreso: mar 2006
Mensajes: 24
REPORT ZBATCHINPUT.
* -------------------------------------------------------------------- *
* En este programa se utiliza la transacción FB09 (modificar posición de
* documento) para ejemplificar el uso del Batch-Input y del Call-
* Transaction.
************************************************************************
* BATCH-INPUT *
************************************************************************
* En el juego de datos se introduce un campo que no existe (BSEG-ABCDE);
* sin embargo, este error no detiene el proceso cuando se ejecuta el
* batch-input aunque sí se refleja en el log. Sin embargo en un call-
* transaction sí se considera un error y no se actualiza esa transacción
* -------------------------------------------------------------------- *
* Resultado on-line *
* -------------------------------------------------------------------- *
* Se produce un JD. Éste contiene una transacción errónea, la primera.
* En el momento de procesar el JD podemos corregir la transacción o bien
* pasar a la siguiente (Sistema/Servicios/Batch_inp/Transacc.siguiente)
* en cuyo caso esta transacción quedará en el JD en el apartado de
* 'JD erróneos'.
* -------------------------------------------------------------------- *
* Resultado en background *
* -------------------------------------------------------------------- *
* Es el mismo que on-line.
*
************************************************************************
* CALL-TRANSACTION *
************************************************************************
* En un Call Transaction las transacciones correctas se actualizan, las
* erróneas no.
* Hay que lanzar un Call Transaction por cada registro de la tabla.
* El modo de actualización puede ser A(Asíncrono) S(Síncrono) y L(Local)
* Si el programa se lanza en fondo da igual el MODE ('A', 'E' o 'N') del
* Call-Transaction; en este caso, si se quiere ver una orden SPOOL con
* los errores es necesario hacer el LOOP sobre la tabla de los errores
* y escribirlos con WRITE.
* Se habilita un procedimiento para guardar en un juego de datos las
* transacciones (registros) incorrectas. Esto es muy útil si el CALL
* TRANSACTION tiene lugar en un job de fondo donde no se permite el
* procesamiento on-line de las transacciones incorrectas.
* -------------------------------------------------------------------- *
* Resultado on-line *
* -------------------------------------------------------------------- *
* El proceso depende del modo de visualización escogido.
* A: se procesan on-line todas las transacciones.
* E: sólo se procesan on-line las transacciones erróneas.
* N: no hay procesamiento on-line.
* Las transacc.incorrectas se pierden, salvo que se hayan corregido on-
* line. En el modo 'N' estas transacc. se pierden irremediablemente.
* Para evitar perder las transacc.erróneas éstas pueden almacenarse en
* un JD para procesarlas posteriormente on-line. Esto es lo que se ha
* hecho en este programa.
* -------------------------------------------------------------------- *
* Resultado en background *
* -------------------------------------------------------------------- *
* Independientemente del modo de visualización (A, E ó N), las transacc.
* correctas se actualizan en el sistema y las incorrectas se pierden
* salvo que se hayan guardado en un JD.
* El resultado es similar al on-line.
*
*
* -------------------------------------------------------------------- *
* Tanto si es batch-input como call-transaction, se tiene que limpiar la
* tabla BDCTAB al comienzo de cada transacción, sino se van acumulando
* las transacciones y siempre se ejecutaría la primera.
* -------------------------------------------------------------------- *
*
************************************************************************
* DIRECT INPUT *
************************************************************************
* Sólo está permitido para los programas estándar de transferencia de
* datos (ver transacción SXDA).
TABLES:
BGR00,
BBKPF,
BBSEG.

CONSTANTS:
CODE LIKE TSTC-TCODE VALUE 'FB09',
FICHERO_SALIDA LIKE FILEINFO-NAME VALUE '/tmp/roman_tmp/dir_inp.txt',
CTE_NODATA LIKE BGR00-NODATA VALUE '#'.

DATA:
MENSAJE LIKE T100-TEXT,
STR_TMP(255).

DATA:
BEGIN OF ITAB OCCURS 0,
BELNR LIKE BKPF-BELNR,
BUKRS LIKE BKPF-BUKRS,
GJAHR LIKE BKPF-GJAHR,
ZUONR LIKE BSEG-ZUONR,
SGTXT LIKE BSEG-SGTXT,
END OF ITAB,
BDC_TAB LIKE STANDARD TABLE OF BDCDATA WITH HEADER LINE,
ERR_BI LIKE STANDARD TABLE OF BDCMSGCOLL WITH HEADER LINE.


************************************************************************
* START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.

* Llenado de la tabla interna con los datos
PERFORM FILL_ITAB.
*======================================================================*
* Batch-Input *
*======================================================================*
PERFORM BATCHINPUT.
*======================================================================*
* Call Transaction *
*======================================================================*
PERFORM CALLTRANSACTION.
*======================================================================*
* Direct Input *
*======================================================================*
PERFORM DIRECTINPUT.


************************************************************************
* END-OF-SELECTION *
************************************************************************
END-OF-SELECTION.

*&---------------------------------------------------------------------*
*& Form DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM DYNPRO USING VALUE(DYNBEGIN)
VALUE(NAME)
VALUE(VALUE).

CLEAR BDC_TAB.
IF DYNBEGIN = 'X'.
BDC_TAB-PROGRAM = NAME.
BDC_TAB-DYNPRO = VALUE.
BDC_TAB-DYNBEGIN = 'X'.
ELSE.
BDC_TAB-FNAM = NAME.
BDC_TAB-FVAL = VALUE.
ENDIF.
APPEND BDC_TAB.
CLEAR BDC_TAB.

ENDFORM. " DYNPRO

*&---------------------------------------------------------------------*
*& Form BDC_OPEN
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_OPEN.

CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'Pruebas'
KEEP = 'X'
USER = SY-UNAME.

ENDFORM. " BDC_OPEN

*&---------------------------------------------------------------------*
*& Form BDC_INSERT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_INSERT.

CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = CODE
TABLES
DYNPROTAB = BDC_TAB.

ENDFORM. " BDC_INSERT

*&---------------------------------------------------------------------*
*& Form BDC_CLOSED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_CLOSED.

CALL FUNCTION 'BDC_CLOSE_GROUP'
EXCEPTIONS
NOT_OPEN = 1
QUEUE_ERROR = 2
OTHERS = 3.

ENDFORM. " BDC_CLOSED

*&---------------------------------------------------------------------*
*& Form FILL_ITAB
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM FILL_ITAB.
MOVE:
'9900000001' TO ITAB-BELNR,
'TEL1' TO ITAB-BUKRS,
'2000' TO ITAB-GJAHR,
'Texto9 !!!' TO ITAB-ZUONR,
'=AC' TO ITAB-SGTXT.
APPEND ITAB.
MOVE:
'1900000002' TO ITAB-BELNR,
'TEL1' TO ITAB-BUKRS,
'2000' TO ITAB-GJAHR,
'Texto9 !!!' TO ITAB-ZUONR,
'=VI' TO ITAB-SGTXT.
APPEND ITAB.
MOVE:
'1900000003' TO ITAB-BELNR,
'TEL1' TO ITAB-BUKRS,
'2000' TO ITAB-GJAHR,
'Texto9 !!!' TO ITAB-ZUONR,
'=GU' TO ITAB-SGTXT.
APPEND ITAB.

ENDFORM. " FILL_ITAB

*&---------------------------------------------------------------------*
*& Form BATCHINPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BATCHINPUT.

LOOP AT ITAB.
REFRESH BDC_TAB. " ------------------ Borrar la transacción anterior

AT FIRST.
PERFORM BDC_OPEN. " ------------------- Apertura del juego de datos
ENDAT.

REFRESH BDC_TAB. "<------------------ Borrar la transacción anterior
PERFORM DYNPRO USING:
'X' 'SAPMF05L' '0102',
' ' 'RF05L-BELNR' ITAB-BELNR,
' ' 'RF05L-BUKRS' ITAB-BUKRS,
' ' 'RF05L-GJAHR' ITAB-GJAHR,
' ' 'RF05L-XKSAK' 'X',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF05L' '0300',
' ' 'BSEG-ABCDE' '21022000', " No existe !!!
' ' 'BSEG-ZUONR' ITAB-ZUONR,
' ' 'BSEG-SGTXT' ITAB-SGTXT,
' ' 'BDC_OKCODE' 'AE',
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' 'ENTE'.
* Adición de la transacción a la tabla del juego de datos. Se añade
* una transacción por cada registro de datos de ITAB.
PERFORM BDC_INSERT. " --------------- Inserción en el juego de datos

AT LAST.
PERFORM BDC_CLOSED. " ------------------- Cierre del juego de datos
ENDAT.

ENDLOOP.

ENDFORM. " BATCHINPUT

*&---------------------------------------------------------------------*
*& Form CALLTRANSACTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CALLTRANSACTION.
DATA COPY_SYTABIX LIKE SY-TABIX.

LOOP AT ITAB.
MOVE SY-TABIX TO COPY_SYTABIX.

* Apertura de un JD para las transacciones erróneas
AT FIRST.
PERFORM BDC_OPEN.
ENDAT.

* Proceso de cada registro de ITAB (cada registro es una transacción)
REFRESH BDC_TAB. "<------------------ Borrar la transacción anterior
PERFORM DYNPRO USING:
'X' 'SAPMF05L' '0102',
' ' 'RF05L-BELNR' ITAB-BELNR,
' ' 'RF05L-BUKRS' ITAB-BUKRS,
' ' 'RF05L-GJAHR' ITAB-GJAHR,
' ' 'RF05L-XKSAK' 'X',
' ' 'BDC_OKCODE' '/00',
'X' 'SAPMF05L' '0300',
* ' ' 'BSEG-ABCDE' '21022000', " No existe !!!
' ' 'BSEG-ZUONR' ITAB-ZUONR,
' ' 'BSEG-SGTXT' ITAB-SGTXT,
' ' 'BDC_OKCODE' 'AE',
'X' 'SAPLKACB' '0002',
' ' 'BDC_OKCODE' 'ENTE'.
* Escribimos los mensajes de cada transacción para que salgan agrupa-
* dos con el mensaje de 'sin errores' o 'con errores' de su transacc.
* correspondiente. Para ello es necesario limpiar la tabla ERR_BI en
* cada transacción ya que el sistema no la limpia cuando llama a la
* transacción.
REFRESH ERR_BI.
CALL TRANSACTION 'FB09' USING BDC_TAB MODE 'A' MESSAGES INTO ERR_BI.
NEW-LINE.
IF SY-SUBRC = 0.
WRITE:'Transacción', COPY_SYTABIX LEFT-JUSTIFIED, ': sin errores'.
ELSE.
WRITE:'Transacción', COPY_SYTABIX LEFT-JUSTIFIED, ': con errores'.
* Adición de la transacción errónea al JD para procesarlo on-line
* PERFORM BDC_INSERT.
ENDIF.
* ERR_BI va acumulando todos los errores que se van produciendo en las
* transacciones (no la limpia el sistema en cada transacción).
LOOP AT ERR_BI.
SELECT SINGLE TEXT INTO MENSAJE
FROM T100
WHERE SPRSL = 'S' AND
ARBGB = ERR_BI-MSGID AND
MSGNR = ERR_BI-MSGNR.
NEW-LINE.
WRITE AT: 1 ERR_BI-DYNAME,
15 ERR_BI-DYNUMB,
20 ERR_BI-MSGTYP,
22 ERR_BI-MSGNR,
26 MENSAJE.
************************************************************************
* Con las siguientes líneas de código podemos concatenar todas *
* las variables del mensaje en el cuerpo del mensaje. *
*----------------------------------------------------------------------*
* DATA: MENSAJE1 ... MENSAJE4 LIKE MENSAJE.
* SPLIT MENSAJE AT '&' INTO MENSAJE1 MENSAJE2 MENSAJE3 MENSAJE4.
* CONCATENATE MENSAJE1 ERR_BI-MSGV1 MENSAJE2 ERR_BI-MSGV2
* MENSAJE3 ERR_BI-MSGV3 MENSAJE4 ERR_BI-MSGV4
* INTO MENSAJE SEPARATED BY SPACE.
* WRITE MENSAJE.
************************************************************************

ENDLOOP.

* Cierre del JD abierto para los errores. Hay que colocarlo al final
* pues si lo colocamos después del AT FIRST y por lo tanto antes del
* cuerpo del LOOP, si la tabla interna sólo tiene un registro el AT
* LAST se procesa en el mismo bucle e inmediatamente después del AT
* FIRST por lo que inmediatamente después de abrir el JD éste se es
* cerrado. Si ocurriera que ese registro fuera erróneo, al pretender
* hacer el INSERT al JD ocurriría un error ya que el JD se cerró.
AT LAST.
PERFORM BDC_CLOSED.
ENDAT.

ENDLOOP."<--------------------------- Siguiente transacción (registro)

ENDFORM. " CALLTRANSACTION

*&---------------------------------------------------------------------*
*& Form DIRECTINPUT
*&---------------------------------------------------------------------*
* Para hacer un Direct Input usaremos el programa estándar de transf. de
* datos RFBIBL00.
*----------------------------------------------------------------------*
FORM DIRECTINPUT.

PERFORM CREATEFILE.
PERFORM RUN_RFBIBL00.

ENDFORM. " DIRECTINPUT

*&---------------------------------------------------------------------*
*& Form CREATEFILE
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM CREATEFILE.

DATA: NAME_JD LIKE BGR00-GROUP VALUE 'JD_DIR_INPUT'.
OPEN DATASET FICHERO_SALIDA FOR OUTPUT IN TEXT MODE.
PERFORM REC_NODATA USING BGR00.
MOVE:
'0' TO BGR00-STYPE,
NAME_JD TO BGR00-GROUP,
SY-MANDT TO BGR00-MANDT,
SY-UNAME TO BGR00-USNAM,
'X' TO BGR00-XKEEP.
TRANSFER BGR00 TO FICHERO_SALIDA.
PERFORM REC_NODATA USING BBKPF.
MOVE:
'1' TO BBKPF-STYPE,
'FB01' TO BBKPF-TCODE,
'TEL1' TO BBKPF-BUKRS,
'03032000' TO BBKPF-BLDAT,
'KR' TO BBKPF-BLART,
'ESP' TO BBKPF-WAERS,
'ABCDE' TO BBKPF-XBLNR,
'X' TO BBKPF-XMWST.
TRANSFER BBKPF TO FICHERO_SALIDA.
PERFORM REC_NODATA USING BBSEG.
MOVE:
'2' TO BBSEG-STYPE,
'BBSEG' TO BBSEG-TBNAM,
'31' TO BBSEG-NEWBS,
'2000000014' TO BBSEG-NEWKO,
'85000' TO BBSEG-WRBTR,
'1D' TO BBSEG-MWSKZ,
'BSIT' TO BBSEG-HBKID.
TRANSFER BBSEG TO FICHERO_SALIDA.
PERFORM REC_NODATA USING BBSEG.
MOVE:
'2' TO BBSEG-STYPE,
'BBSEG' TO BBSEG-TBNAM,
'40' TO BBSEG-NEWBS,
'6000000' TO BBSEG-NEWKO,
'85000' TO BBSEG-WRBTR,
'ZTEL100001' TO BBSEG-KOSTL,
'=AC' TO BBSEG-SGTXT.
TRANSFER BBSEG TO FICHERO_SALIDA.
CLOSE DATASET FICHERO_SALIDA.

ENDFORM. " CREATEFILE

*&---------------------------------------------------------------------*
*& Form REC_NODATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM REC_NODATA USING REC_NAME.

DATA: COPY_SYSUBRC LIKE SY-SUBRC.
FIELD-SYMBOLS: .

WHILE COPY_SYSUBRC EQ 0.
ASSIGN COMPONENT SY-INDEX OF STRUCTURE REC_NAME TO .
MOVE SY-SUBRC TO COPY_SYSUBRC.
CHECK SY-SUBRC EQ 0.
MOVE CTE_NODATA TO .
ENDWHILE.

ENDFORM. " REC_NODATA

*&---------------------------------------------------------------------*
*& Form RUN_RFBIBL00
*&---------------------------------------------------------------------*
* Si se emplea el CALLMODE = 'D' (Direct Input) hay algunas operaciones
* que no se admiten (como el cálculo automático de impuestos) y darían
* lugar a errores.
* -------------------------------------------------------------------- *
* Resultado on-line *
* -------------------------------------------------------------------- *
* El programa creará un JD con las transacc.erróneas si así ha sido
* implementado en su código. El RFBIBL00 crea un JD con los errores en
* los CALLMODE 'C' y 'D'. En el 'B' crea un JD con todas las transacc.
* -------------------------------------------------------------------- *
* Resultado en background *
* -------------------------------------------------------------------- *
* El resultado depende del CALLMODE
* B: Se crea el JD.
* C: Ocurre un error si el job que lanza el ZBORRAR14 no es reiniciable.
* D: Ocurre un error si el job que lanza el ZBORRAR14 no es reiniciable.
* Si el job es reiniciable se crea un JD con las transacc.erróneas tanto
* en modo 'C' como en 'D'.
* Para crear un job reiniciable:
* Transacc.BMV0/Ejecutar-->Definición de job.
* Escribir el nombre del job que lanza a el ZBORRAR14.
*----------------------------------------------------------------------*
FORM RUN_RFBIBL00.

SUBMIT RFBIBL00 WITH DS_NAME = FICHERO_SALIDA
WITH CALLMODE = 'D' AND RETURN.

ENDFORM. " RUN_RFBIBL00


Espero que te sirva
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 09:48:50.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web