PDA

Ver la Versión Completa : Problema con una exit


miguel.fernandez@panalon
09/09/08, 14:03:16
Buenas tardes a todos,

Antes que nada decir que no soy programador y estoy más perdido que una cabra en un garaje con los case when if endif...

He creado un FORM en la ZRGGBS000 añadiendo el siguiente código:

*&---------------------------------------------------------------------*
*& Form u962 Bloquear facturas con fecha inferior a fecha vencimiento
*&---------------------------------------------------------------------*

FORM u962.

TABLES:LFB1.

IF ( lfb1-cerdt < bseg-zfbdt ) AND ( BSEG-LIFNR = LFB1-LIFNR ).
bseg-zlspr = 'A'.
ENDIF.

ENDFORM. "u962

Mi idea es que cuando contabilice una factura y en el maestro de proveedor el campo CERDT (fecha certificación) sea inferior a ZFBDT (vencimiento de la factura le ponga una A al campo ZLSPR (bloqueo de pago de la factura).

Por favor help me un poquito.

Muchas gracias

smontenegro
09/09/08, 14:49:46
Ese codigo lo pusiste en el exit de una sustitución?
Si es asi me parece que el problema que tenes es que estas queriendo escribir un campo de la BSEG cuando en realidad no estoy seguro que el exit la esté utilizando.
Estas son las tablas que utiliza un exit de sustitucion:

Estructura AFVC Operación de orden
Estructura AUFKV Generated Table for View AUFKV
Estructura CAUFV Generated Table for View CAUFV
Estructura CBPRV Proceso empresarial: CBPR + CBPT
Estructura CKPHV Vista para CKPH + texto + datos de control...
Estructura COBK Objeto CO: Cabecera de documento
Estructura COBL Bloque de imputación
Estructura CSKSV Indicador de control del registro maestro de CeCo
Estructura PRPS Elemento PEP (elem.de plan estruct.proyecto) datos maestros
Estructura SYST Campos sistema ABAP
Estructura VBAK Documento de ventas: Datos de cabecera
Estructura VBAP Documento de ventas: Datos de posición

argelio007
09/09/08, 14:51:43
Me imagino q antes de ese if ya tienes toda tus variables llenas, lo que debes hacer es pasar a enteros la fecha, ¿como? simplemente pasalas a una variable tipo I creo q era sino busca una funcion:D , luego haces el if variable1 < variable2 AND BSEG-LIFNR = LFB1-LIFNR.
bseg-zlspr = 'A'.
ENDIF.

ibecerra
11/09/08, 21:58:15
hola ante todo la pregunta del millon, cuando le pones un break point y ejecutas tu proceso se queda hay o no,

miguel.fernandez@panalon
12/09/08, 08:05:52
hola ante todo la pregunta del millon, cuando le pones un break point y ejecutas tu proceso se queda hay o no,

Hola a todos y gracias por las respuestas,

La verdad es que no tengo ni idea de dónde puedo encontrar la sentencia donde le tengo que marcar el Break Point porque empiezo a contabilizar por la FB60, voy a Debugging Dynpro pero a partir de ahí me pierdo muchísisisimo.

He hecho el paso a paso entero y me he quedado igual. Si me puedes dar alguna pista de dónde le tengo que poner el breakpoint te lo agradeceré mucho.

Un saludo y muchas gracias de nuevo.

ibecerra
12/09/08, 13:10:01
hola en la sentencia

iF ( lfb1-cerdt < bseg-zfbdt ) AND ( BSEG-LIFNR = LFB1-LIFNR ).
break-point.


* marca la linea y le das click al boton rojo que dice stop

Promethevs
12/09/08, 14:33:33
De hecho..también tienes que tener mucho ojo con las variables que estás modificando...porque no me hace ningún sentido que modifiques directamente la BSEG, seguramente existe alguna tabla interna o estructura que guarda los datos mientras se procesa la transacción y luego son guardados.

ibecerra
12/09/08, 14:38:37
De hecho..también tienes que tener mucho ojo con las variables que estás modificando...porque no me hace ningún sentido que modifiques directamente la BSEG, seguramente existe alguna tabla interna o estructura que guarda los datos mientras se procesa la transacción y luego son guardados.

hola Promethevs, te comento que el tema de sustituciones que lo puedes ver en la
transaccion obbh, no actualizas directamente ninguna tabla estandar solo sustituyes valores en los campos de la bseg o bkp(como ejemplo) en memoria.
mas adelante por otro codigo estandard sap actualiza las tablas
Saludos

miguel.fernandez@panalon
16/09/08, 06:50:54
Buenas otra vez,

Le he puesto el Breakpoint y lo que pasa es que los campos de la LFB1 no los rellena al contabilizar la factura. Es como si no encontrara el LFB1-CERDT ni el LFB1-LIFNR.

¿Sabéis a qué se puede deber esto?.

Un saludo y muchas gracias otra vez

miguel.fernandez@panalon
16/09/08, 07:44:24
Os adjunto la pantalla en la que estoy para que tengáis más información-

Un saludo y gracias de nuevo::)

ibecerra
16/09/08, 13:23:34
hola, no entiendo porque comparas lfb1 con bseg , sino has buscado primero en lfb1

lo que deberias de hacer es lo siguiente:

TABLES:LFB1.

select single cerdt into lfb1-cerdt from lfb1 where lifnr eq BSEG-LIFNR
if sy-subrc eq 0.
IF lfb1-cerdt < bseg-zfbdt .
bseg-zlspr = 'A'.
ENDIF.
endif.

ibecerra
16/09/08, 13:25:01
ah falto algo mas
select single cerdt into lfb1-cerdt from lfb1 where
lifnr eq BSEG-LIFNR and
bukrs eq BSEG-bukr.

miguel.fernandez@panalon
16/09/08, 15:29:44
ah falto algo mas
select single cerdt into lfb1-cerdt from lfb1 where
lifnr eq BSEG-LIFNR and
bukrs eq BSEG-bukr.


Muchísimas gracias por tu inestimable ayuda pero no me funciona, le he vuelto a poner el breakpoint pero no trae a la transacción el campo LFB1-CERDT.

Seguiré investigando y aprendiendo.

Un saludo y gracias de nuevo

Ariel-StaFe
09/08/11, 13:13:25
Miguel.
Respondo
Probá haciendo un select a la tabla lfb1 con el dato del cliente de la bseg.
Y pregunto
Yo tengo que hacer lo inverso. Desbloquear.
Pero tengo ZGGBS000 en lugar de ZRGGBS000 como tenes vos.
(eso debe ser solo por decision de quien creó ese Z. estimo)
Y creé un form U240 para eso, pero es como que al Seleccionar partidas
y Tratar partidas, No pasa por el FORM.

Si.. pasa por
FORM get_exit_titles TABLES etab.

exits-name = 'U240'.
exits-param = c_exit_param_field.
exits-title = 'Bloqueo de Pago'. "
APPEND exits.

Pero no pasa por
FORM u240 USING desbloqueo.
DATA: desb(1) VALUE ' '.
desbloqueo = desb.
ENDFORM. "u240

Me podrias dar una idea de que me puede faltar para asignar, crear, para que pase por el FORM U240 ?

Desde ya muchas Gracias
Ss

Ariel-StaFe
09/08/11, 13:26:48
Miguel.
Lo que te pasó ibecerra deberia funcionarte.
Fijate si el proveedor con el que estas probando realmente tiene cargado algun valor en ese campo.
Y de ultima traé el valor en otro campo variable
ej. DATA: v_cerdt LIKE LFB1-CERDT.
y hace el SELECT into v_cerdt

select single cerdt into v_cerdt from lfb1 where
lifnr eq BSEG-LIFNR and
bukrs eq BSEG-bukrs.

Si me podes responder lo otro te lo agradezco.
Ss

Ariel-StaFe
13/08/11, 14:36:23
Ya pude resolverlo. Gracias de todos modos.
Saludos