Problema con una exit
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 |
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 |
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. |
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. |
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 |
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 |
Problema con una exit pero aprendiendo mucho...
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 |
Problemas con exit
1 Adjunto(s)
Os adjunto la pantalla en la que estoy para que tengáis más información-
Un saludo y gracias de nuevo::) |
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. |
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 |
Respta y consulta
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 |
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 |
Solucionado
Ya pude resolverlo. Gracias de todos modos.
Saludos |
Husos Horarios son GMT. La hora en este momento es 04:36:23. |
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web