cancel
Showing results for 
Search instead for 
Did you mean: 

Obtener el Nº de lote en un campo de usuario de una entrega.

Former Member
0 Kudos

Hola buenos días foreros.

Versión 2007A SP00 PL47.

Se ha implementado en la versión 2007A la impresión de los lotes en el documento de venta que realiza la transacción, pero mi problema viene que esta asignación se hace en el albarán pero luego la factura que genero tras el albarán no imprime los lotes porque está hecho en el albarán, esto está recogido en una nota (869597) en la que dicen que además es así y no se va a cambiar.

Entonces intento una búsqueda formateada para que me devuelva en campos de usuario del albarán en las líneas el lote asignado en ese documento es la siguiente: SELECT t1.batchnum from osrd t0 inner join ibt1 t1 on t0.doctype=t1.basetype and t0.docentry=t1.baseentry and t0.docnum=t1.basenum and t0.doclinenum=t1.baselinnum WHERE t0.itemcode=$[$38.1.0] y la asigno para que se active al salir de la columna código del artículo.

Pues bien, me funciona cuando sólo tengo un documento de venta para un cliente, cuando tengo más de un documento se vuelve loca y los valores devueltos son incorrectos.

Gracias anticipadas por las posibles respuestas.

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

NO devuelve aún los datos correctos la búsqueda formateada

He comprobado que en algunos casos el lote que devuelve no es el correcto.

Vuisualizo los lotes, voy al documento base (albarán) y compruebo el lote y en algunas líneas es incorrecto.

Edited by: Gonzalo Gomez Gonzalez on Oct 8, 2009 8:44 AM

former_member210784
Active Contributor
0 Kudos

Hola.

¿En qué casos devuelve el lote incorrecto?. Para entender mejor qué está devolviendo la BF, es necesario conocer más detalles de esos casos, y así corregir el problema.

Revisando el historial y las pruebas que he realizado (que han funcionado bien), encuentro que:, cuando se entrega un artículo tomando cantidades de varios lotes, el diseño de la solución no contempla esos casos, porque sólo dispone de un sólo campo de usuario en el que devielve un sólo lote.

Para verificar esto, en la línea donde está el lote incorrecto, hacer click en la lupa del campo donde queda el lote. Si se despliega una ventana con una lista de números de lote, quiere decir que se tomaron cantidades de diferentes lotes (los que figuran ahí).

Para corregirlo, se me ocurren las opciones siguientes:

- Ver cómo modificar la BF para que devuelva una cadena con los números de lote que correspondan, o,

- Crear un query layout que pida el número de la factura y saque el listado completo de los lotes correspondientes.

- Anexar a la factura una copia del informe de lotes que sale con la entrega.

Quedo en espera de sus comentarios.

Saludos.

Former Member
0 Kudos

el problema es que no se que es lo que está haciendo para devolver otro lote.

Es muy sencillo un albarán con 6 líneas, cada línea tiene artículos distintos y cada línea tiene su lote asignado (un único lote), pues bien hay un artículo que muestra un lote, navego al documento base y voy al informe de operaciones de número de ltoe y resulta que tiene otro (el que muestra si existe para ese artículo pero no tiene salidas efectuadas).

Es más compruebo por el artículo las operaciones de ese lote y logicamente el lote que aparece en los movimientos del artículo es el del albarán, pero en la búsqueda formateada en la factura devuelve otro.

Si supiera donde se pierde.....

Podría adjuntar una imagen pero no deja este foro subir imágenes o no se yo como subirlas.

Former Member
0 Kudos

el problema es que no se que es lo que está haciendo para devolver otro lote.

Es muy sencillo un albarán con 6 líneas, cada línea tiene artículos distintos y cada línea tiene su lote asignado (un único lote), pues bien hay un artículo que muestra un lote, navego al documento base y voy al informe de operaciones de número de ltoe y resulta que tiene otro (el que muestra si existe para ese artículo pero no tiene salidas efectuadas).

Es más compruebo por el artículo las operaciones de ese lote y logicamente el lote que aparece en los movimientos del artículo es el del albarán, pero en la búsqueda formateada en la factura devuelve otro.

Si supiera donde se pierde.....

Podría adjuntar una imagen pero no deja este foro subir imágenes o no se yo como subirlas.

former_member210784
Active Contributor
0 Kudos

Hola.

Bueno, creo que en ese caso, lo mejor sería poder ver directamente en su sistema el funcionamiento para determinar el origen del problema.

Mientras tanto, ejecuta la siguiente consulta en Query manager y por favor pega el resultado aquí.


SELECT T2.BaseLinNum, T2.BatchNum, T2.ItemCode
FROM IBT1 T2 LEFT JOIN INV1 T1 ON T1.BaseDocNum=T2.BaseNum AND T2.ItemCode = T1.ItemCode AND T1.LineNum = T2.BaseLinNum
WHERE T2.BaseNum = NumAlb

Donde NumAlb = número de documento del albarán, donde se presenta el problema.

Quedo en espera de los resultados.

Saludos.

Former Member
0 Kudos

Por cierto estoy con la versión 2007A SP00 PL47.

Nº línea en docum.base Lote Número de artículo

1 B27C10322 100555

3 B27C10322 100555

1 Lote 1 100555

2 Lote 1 150745

2 Lote 2 150745

5 Lote :1 2026

5 ORB23C20621 2026

2 021578 25155

1 B32C20524 25209

B35C50671 25254

4 Lote 1 25513

4 Lote 2 25513

Lote 1 25551

TM2D0609 25551

3 Lote 1 6062

3 Lote 2 6062

Como puedes ver con el número de documento 4 aparece tanto el albarán como la factura.

Esta query no distingue entre los tipos de documento base, quizá por ahí venga el problema de la BF.

En concreto en mi albarán en la línea 2 artículo 100555 está el lote: Lote 1.

En la BF en la factura muestra el B27C10322

Mediante consultas SQL he logrado y se puede lograr facilmente obtener el resultado apetecido, pero eso lo transformas

a una BF y se pierde la consulta.

Por lo que he podido testear en esta consulta siempre hay una línea de documento base que no tiene número de línea,

asume el valor blanco o null y creo que es por ahí por donde hace que pierda la relación.

Edited by: Gonzalo Gomez Gonzalez on Oct 9, 2009 8:17 AM

former_member210784
Active Contributor
0 Kudos

Hola.

Curioso comportamiento, teniendo en cuenta que aquí devuelve los lotes correctos.

¿Están asignando el mismo número de lote a varios artículos diferentes?. Me pareció ver esto en los datos que pegó del resultado del query anterior (lote 1).

En cuanto a los números de línea, están bien. Lo que sucede es que en Query Manager, los valores 0 se muestran como espacios en blanco. Afortunadamente eso no ha afectado el query.

Como menciona que la consulta original si le trae los datos que requiere, volvamos a su diseño incial, pero agregando la validación que le hacía falta para traer los lotes de la entrega, quedando así:

Probar en SQL Management Studio el siguiente query:


SELECT T1.[BatchNum], T1.BaseNum, T1.[ItemCode]  
FROM OSRD T0 
  INNER JOIN IBT1 T1 ON T0.DocType=T1.BaseType AND T0.DocEntry=T1.BaseEntry 
    AND T0.DocNum=T1.BaseNum AND T0.Doclinenum=T1.BaseLinNum 
    AND T0.[ItemCode]=T1.[ItemCode] 
  LEFT JOIN INV1 T2 ON T2.BaseDocNum=T1.BaseNum AND T2.ItemCode = T1.ItemCode 
    AND T2.LineNum = T1.BaseLinNum 
WHERE T1.BaseNum= NN

Donde NN= # de entrega (o albarán)

La anterior consulta muestra los lotes corresponidntes a cada artículo que se encuentra en la entrega.

Si devuelve los valores esperados, entonces modificar la BF con el siguiente código, que trae el lote de cada artículo:


SELECT T1.[BatchNum] 
FROM OSRD T0 
  INNER JOIN IBT1 T1 ON T0.DocType=T1.BaseType AND T0.DocEntry=T1.BaseEntry 
    AND T0.DocNum=T1.BaseNum AND T0.Doclinenum=T1.BaseLinNum 
    AND T0.[ItemCode]=T1.[ItemCode] 
  LEFT JOIN INV1 T2 ON T2.BaseDocNum=T1.BaseNum AND T2.ItemCode = T1.ItemCode 
    AND T2.LineNum = T1.BaseLinNum 
WHERE T1.ItemCode=$[INV1.ItemCode] AND T1.BaseNum= $[INV1.BaseDocNum]

La he probado y también funciona OK. Por favor pruébala allá, comparando en las mismas líneas donde salía mal y con alguna donde salía bien.

Falta volver a modificar la FS para la fecha de vencimiento. Primero probar esta y luego arreglamos la otra que es más fácil.

Quedo en espera de sus comentarios y el resultado, para saber si ya le funciona bien o si hay que realizar ajustes.

Saludos.

Edited by: Hector Daniel Hernandez Bacca on Oct 14, 2009 3:07 PM

Edited by: Hector Daniel Hernandez Bacca on Oct 19, 2009 8:42 AM

Former Member
0 Kudos

Hola que tal, anduve liado en clientes estos días.

La consulta en sql devuelve el valor y está sin ningún problema.

La búsqueda formateada sigue devolviendo el mismo valor que no es el correcto.

Agradezco los esfuerzos pero la doy por imposible, ma parece que al haber en la tabla una línea con el valor null la bf no la evalúa y se pierde al devolver los registros.

PD: Ahora es cuando me gustaría que apareciera alguien de SAP como aparecen en otros mensajes intentando explicar algo o proponiendo una alternativa o solución.

former_member210784
Active Contributor
0 Kudos

Hola.

Jajaja, no desfallezca tan pronto...

Creo que es necesario ver cómo funciona allá en su Base de datos, para entender qué sucede.

Puede ser que algún detalle procedimental de la empresa, en el manejo de los lotes, produzca este comportamiento. Lo digo basado en el hecho que aquí me funcionan bien las BF.

Si está de acuerdo, podemos realizar una sesión remota para ver esto.

Saludos.

former_member210784
Active Contributor
0 Kudos

Hiola.

Intenta con este:


SELECT T2.BatchNum
FROM IBT1 T2 LEFT JOIN INV1 T1 ON T1.BaseDocNum=T2.BaseNum AND T2.ItemCode = T1.ItemCode AND T1.LineNum = T2.BaseLinNum
WHERE T2.ItemCode=$[INV1.ItemCode] AND T2.BaseNum= $[INV1.BaseDocNum]

Aún quedaría el detalle que cuando se toma de varios lotes para un artículo en la entrega, habrían varios resultados posibles para la búsqueda formateada y un sólo campo para almacenar el valor.

Quedo en espera del resultado.

Former Member
0 Kudos

Antes que nada, gracias por la respuesta ya que es un tema complicado.

He anexado la búsqueda formateada en un campo de usuario, pero cuando asigno la búsqueda formateada le tengo que especificar que refresque cuando un campo se modifica el $[$38.1.0]. 38 es del formulario y el 1 por la línea, en cambio la que tú planteas no sé como especificarla o hacia que campo o como configurarla, con lo cual no me está funcionando.

Lo dicho gracias por intentarlo.

former_member210784
Active Contributor
0 Kudos

Hola.

Esta Búsqueda Formateada funcionaría al colocarla en un campo de usuario a nivel de línea de la factura de venta.

Para actualizar el valor del campo, se puede vincular a otro campo de usuario independiente tipo Si/No a nvel de encabezado, de modo que cuando se cambie el valor de este ulltimo, se actualice el campo de usuario de todas las filas con el lote correspondiente de cada línea.

En caso contrario, habría que refrescar maualmente el campo con Shift+F2, línea apor línea.

Espero haber aclarado mejor el funcionamiento, si no, quedo en espera de comentarios y preguntas.

Saludos.

Former Member
0 Kudos

Perdona, parezco nuevo.... pero no lo entiendo.

Tengo que crear otro campo de usuario a nivel de cabecera de documento del tipo si/no vale.

Cuando le pinche y cambie el valor se van a actualizar las líneas....espero

Lo que no acabo de entender es como defino la búsqueda formateada...tiene que existir en la select algo del estilo ....where oinv.docnum=$[$8.0.0] no??? para que actualice por ese campo ¿las líneas?

Lo sigo intentando....

Former Member
0 Kudos

Esto es lo que estoy intentando...

SELECT T2.BatchNum FROM IBT1 T2 LEFT JOIN INV1 T1 ON T1.BaseDocNum=T2.BaseNum AND T2.ItemCode = T1.ItemCode AND T1.LineNum = T2.BaseLinNum inner join oinv t2 on t1.docentry=t2.docentry

WHERE T2.ItemCode=$[INV1.ItemCode] AND T2.BaseNum= $[INV1.BaseDocNum] and t2.docnum=$[oinv.U_Actualizar.0.0]

former_member210784
Active Contributor
0 Kudos

Hola.

Tranquilo. Intentaré explicarlo detalladamente:

1. Crear campo de usuario a nivel cabecera (puede llamarlo Actualizar o algo así).

2. Guardar la siguiente ´Búsqueda Formateada (BF)

SELECT T2.BatchNum
FROM IBT1 T2 LEFT JOIN INV1 T1 ON T1.BaseDocNum=T2.BaseNum AND T2.ItemCode = T1.ItemCode AND T1.LineNum = T2.BaseLinNum
WHERE T2.ItemCode=$[INV1.ItemCode] AND T2.BaseNum= $[INV1.BaseDocNum]

3. Enlazar la búsqueda formateada que le proporcioné (con AltShiftF2) sobre el campo de usuario a nivel de línea, seleccionanado "Actualización automática", luego "Al salir del campo o modificar" y seleccionando el nombre de campo de usuario de cabecera (Actualizar).

4. Al cambiar el valor del campo de cabecera Actualizar, se dispararán las BF enlazada a las líneas, colocando el respectivo número de lote de cada línea.

Espero haber aclarado mejor el tema.

Quedo en espera de comentarios o preguntas y del resultado.

Saludos.

Edited by: Hector Daniel Hernandez Bacca on Sep 10, 2009 2:04 PM

Former Member
0 Kudos

Muchas gracias lo he logrado.

Me has quitado de encima un gran peso.

Abusando ya de la cuestión pretendo obtener la fecha de caducidad de la misma forma pero esta está guardada en la tabla osrd, he intentado lo siguiente pero no me da resultado:

SELECT T3.expdate

FROM IBT1 T2 LEFT JOIN INV1 T1 ON T1.BaseDocNum=T2.BaseNum AND T2.ItemCode = T1.ItemCode AND T1.LineNum = T2.BaseLinNum inner join osrd t3 on t2.doctype=t3.basetype and t2.docentry=t3.baseentry and t2.doclinenum=t3.baselinnum

WHERE T2.ItemCode=$[INV1.ItemCode] AND T2.BaseNum= $[INV1.BaseDocNum]

former_member210784
Active Contributor
0 Kudos

Hola.

Me alegra haber sido de ayuda.

Para ese otro requerimiento, puede utilizar la tabla OIBT en vez de OSRD, así:


SELECT T0.ExpDate
FROM OIBT T0 LEFT JOIN IBT1 T2 ON T0.ItemCode = T2.ItemCode AND T0.BatchNum = T2.BatchNum LEFT JOIN INV1 T1 ON T1.BaseDocNum=T2.BaseNum AND T2.ItemCode = T1.ItemCode AND T1.LineNum = T2.BaseLinNum
WHERE T2.ItemCode=$[INV1.ItemCode] AND T2.BaseNum= $[INV1.BaseDocNum]

Quedo en espera del resultado.

Saludos.

Rules of engagement