Búsqueda formateada en Lote

Buenos días, ruego vuestra ayuda con sap B1 versión 10 SQL, necesito añadir una búsqueda formateada a nivel línea en la selección del lote cuando se está creando una entrada, este campo se debe rellenar automáticamente con el dato del campo VendorNum.PDN1.

Adjunto imagen:

La BF que he añadido y no funciona es la siguiente:

SELECT T2.VendorNum
FROM OBTN T0
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN PDN1 T2 ON T0.DocEntry = T2.DocEntry AND T0.BaseEntry = T2.DocEntry AND T0.BaseLine = T2.LineNum
WHERE T0.ItemCode = $[OBTN.ItemCode]
  AND T0.DistNumber = $[OBTN.DistNumber]
  AND T2.LineNum = $[PDN1.LineNum]
  AND T2.DocEntry = $[PDN1.DocEntry]

El dato debe ser el que se indique en PDN1 y no la OITM, ya que es posible que sea diferente.

Gracias por vuestra ayuda.

Hola,

Como se muestra el campo ‘Ref Proveedor’ en la ventana de lotes? En mi versión de sap b1 10 hana no me muestra ese campo

image

Hola, es un campo de usuario.

Hola, dentro de que categoría se ha de crear ese campo de usuario? Me puede servir para un tema y quiero probarlo también

Herramientas–>Herramientas Customizing–>Campos definidos por usuarios: AÑADIR

Encontraron la solución?

Para añadir una búsqueda formateada a nivel de línea en la selección del lote cuando se está creando una entrada en SAP Business One, debes asegurarte de que la búsqueda formateada esté correctamente configurada y que las variables utilizadas en la consulta SQL sean correctas. Aquí te dejo una serie de pasos y recomendaciones para solucionar este problema:

1. Verificación y Ajuste de la Búsqueda Formateada

La búsqueda formateada que has proporcionado parece estar casi correcta, pero vamos a hacer algunos ajustes y verificaciones para asegurarnos de que funcione adecuadamente.

Ajuste de la Búsqueda Formateada

Revisemos y ajustemos la búsqueda formateada:

SELECT T2.VendorNum
FROM OBTN T0
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN PDN1 T2 ON T0.BaseEntry = T2.DocEntry AND T0.BaseLine = T2.LineNum
WHERE T0.ItemCode = $[OBTN.ItemCode]
  AND T0.DistNumber = $[OBTN.DistNumber]
  AND T2.LineNum = $[PDN1.LineNum]
  AND T2.DocEntry = $[PDN1.DocEntry]

2. Configuración de la Búsqueda Formateada en SAP Business One

Sigue estos pasos para asegurarte de que la búsqueda formateada esté correctamente configurada:

  1. Abrir el Gestor de Búsquedas Formateadas:

    • Ve a Herramientas > Consultas de Usuario - Definidas > Gestor de Búsquedas Formateadas.
  2. Crear una Nueva Búsqueda Formateada:

    • Haz clic en Nueva.
    • En la ventana de definición de búsqueda formateada, selecciona la tabla OBTN (Lote) y el campo que quieres rellenar automáticamente.
  3. Introducir la Consulta SQL:

    • Copia y pega la consulta SQL ajustada en el área de consulta.
  4. Asignar la Búsqueda Formateada al Campo:

    • Asigna la búsqueda formateada al campo correspondiente en el nivel de línea de la entrada de mercancías.

3. Validación de Variables

Es importante asegurarse de que las variables utilizadas en la búsqueda formateada sean correctas y estén disponibles en el contexto de la transacción. Las variables $[OBTN.ItemCode], $[OBTN.DistNumber], $[PDN1.LineNum], y $[PDN1.DocEntry] deben ser válidas y corresponder a los datos correctos en la línea del documento.

4. Prueba de la Búsqueda Formateada

  1. Crear un Nuevo Documento de Entrada de Mercancías:

    • Ve a Compras - Proveedores > Entrada de Mercancías.
    • Ingresa los detalles del documento y selecciona los lotes.
  2. Verificar la Ejecución de la Búsqueda Formateada:

    • Selecciona el lote y asegúrate de que el campo VendorNum se rellene automáticamente con el valor correcto de PDN1.VendorNum.

Ejemplo Completo de la Consulta SQL

A continuación, se muestra el ejemplo completo de la consulta SQL ajustada para la búsqueda formateada:

SELECT T2.VendorNum
FROM OBTN T0
INNER JOIN OITM T1 ON T0.ItemCode = T1.ItemCode
INNER JOIN PDN1 T2 ON T0.BaseEntry = T2.DocEntry AND T0.BaseLine = T2.LineNum
WHERE T0.ItemCode = $[OBTN.ItemCode]
  AND T0.DistNumber = $[OBTN.DistNumber]
  AND T2.LineNum = $[PDN1.LineNum]
  AND T2.DocEntry = $[PDN1.DocEntry]

Conclusión

Siguiendo estos pasos y asegurándote de que las variables utilizadas en la consulta SQL sean correctas, deberías poder configurar correctamente la búsqueda formateada para rellenar automáticamente el campo VendorNum a nivel de línea en la selección del lote cuando se está creando una entrada de mercancías en SAP Business One.

Si después de estos ajustes sigues teniendo problemas, revisa los valores de las variables en el contexto de la transacción o proporciona más detalles específicos sobre el error que estás encontrando para que pueda ayudarte mejor.

Buen dia, me esta marcando error al ejecutar la busqueda formateada

SELECT T2."VendorNum" FROM OBTN T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
INNER JOIN PDN1 T2 ON T0."BaseEntry" = T2."DocEntry" AND T0."BaseLine" = T2."LineNum" WHERE T0."ItemCode" = $[OBTN.ItemCode] AND T0."DistNumber" = $[OBTN.DistNumber] AND T2."LineNum" = $[PDN1.LineNum] AND T2."DocEntry" = $[PDN1.DocEntry]



image

no se si estoy haciendo algo mal

@Osorio1 Pasanos el código en texto por favor

SELECT T2."VendorNum" FROM OBTN T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
INNER JOIN PDN1 T2 ON T0."BaseEntry" = T2."DocEntry" AND T0."BaseLine" = T2."LineNum" WHERE T0."ItemCode" = $[OBTN.ItemCode] AND T0."DistNumber" = $[OBTN.DistNumber] AND T2."LineNum" = $[PDN1.LineNum] AND T2."DocEntry" = $[PDN1.DocEntry]

Para solucionar el problema con tu código de SQL en una búsqueda formateada en SAP Business One, necesitas asegurarte de que los campos referenciados en la consulta son correctos y que la sintaxis se ajusta a los requerimientos de SAP Business One. A continuación te dejo un código revisado y ajustado:

Código Revisado:

SELECT T2."VendorNum"
FROM OBTN T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
INNER JOIN PDN1 T2 ON T0."BaseEntry" = T2."DocEntry" AND T0."BaseLine" = T2."LineNum"
WHERE T0."ItemCode" = $[OBTN.ItemCode]
AND T0."DistNumber" = $[OBTN.DistNumber]
AND T2."DocEntry" = T0."BaseEntry"
AND T2."LineNum" = T0."BaseLine"

Explicación de los Cambios:

  1. Asegúrate de que las tablas y los campos existen y son correctos:

    • OBTN para los números de lote.
    • OITM para los artículos.
    • PDN1 para las líneas de documento de entrada de mercancías (Goods Receipt PO Lines).
  2. Condiciones de la Consulta:

    • T0."ItemCode" = $[OBTN.ItemCode]: Asegúrate de que el código del artículo del lote coincide con el código del artículo de referencia.
    • T0."DistNumber" = $[OBTN.DistNumber]: Asegúrate de que el número de lote coincide con el número de lote de referencia.
    • T2."DocEntry" = T0."BaseEntry" y T2."LineNum" = T0."BaseLine": Estas condiciones aseguran que la entrada de mercancías se corresponde con la línea y el documento base del lote.

Pasos Adicionales:

  1. Verificar los Campos en la Búsqueda Formateada:

    • Asegúrate de que $[OBTN.ItemCode] y $[OBTN.DistNumber] son referencias válidas dentro del contexto de tu búsqueda formateada.
  2. Pruebas y Validación:

    • Ejecuta la consulta directamente en el Query Manager de SAP Business One para asegurarte de que devuelve los resultados esperados.
    • Si la consulta es correcta en el Query Manager, aplica la búsqueda formateada y prueba en el formulario correspondiente en SAP Business One para verificar que no haya errores.

Si continúas teniendo problemas, asegúrate de revisar cualquier posible diferencia en los nombres de tablas y campos, y también asegúrate de que los datos de prueba están correctamente ingresados en tu sistema para validar la búsqueda formateada.

buenas tardes, por alguna razon me sigue marcando error, busque en la tabla de OBTN y no existe este campo T0.“BaseEntry”, no se si por que aun no esta creado como tal la entrada de mercancia, estaria en proceso de creacion, no me esta funcionando la busqueda formateada.

SELECT T2."VendorNum"
FROM OBTN T0
INNER JOIN OITM T1 ON T0."ItemCode" = T1."ItemCode"
INNER JOIN PDN1 T2 ON T0."BaseEntry" = T2."DocEntry" AND T0."BaseLine" = T2."LineNum" 
WHERE T0."ItemCode" = $[OBTN.ItemCode] AND T0."DistNumber" = $[OBTN.DistNumber] 
AND T2."DocEntry" = T0."BaseEntry" 
AND T2."LineNum" = T0."BaseLine"

Entiendo que el problema radica en que la tabla OBTN no tiene el campo BaseEntry o BaseLine directamente disponibles, lo cual puede causar que la búsqueda formateada no funcione correctamente. En SAP Business One, la tabla OBTN (que es la tabla de lotes) no contiene los campos BaseEntry y BaseLine como campos directos. En su lugar, la relación entre los lotes y los documentos de entrada de mercancías se debe manejar de manera diferente.

Para solucionar este problema, puedes intentar una aproximación diferente utilizando las tablas ITL1 (Serial/Batch Transactions) y OINV (Documentos de Marketing - Facturas). Aquí tienes una nueva versión del código:

Código Revisado

SELECT T2."VendorNum"
FROM OITM T1
INNER JOIN ITL1 T0 ON T1."ItemCode" = T0."ItemCode"
INNER JOIN PDN1 T2 ON T0."BaseEntry" = T2."DocEntry" AND T0."BaseLine" = T2."LineNum"
WHERE T1."ItemCode" = $[OBTN.ItemCode]
  AND T0."SysNumber" = $[OBTN.SysNumber]
  AND T0."ManagedBy" = 'B' -- 'B' indica Batch (Lotes)

Explicación del Código

  1. Tabla ITL1:

    • ITL1 es la tabla de transacciones de seriales/lotes. Esta tabla contiene información sobre los movimientos de los lotes y su relación con los documentos de entrada.
  2. Campos Clave:

    • SysNumber: Es el número de sistema del lote.
    • ManagedBy: Especifica si el material es gestionado por lote (‘B’ para lotes).
  3. Relaciones:

    • T1."ItemCode" = T0."ItemCode": Relaciona los artículos entre las tablas OITM y ITL1.
    • T0."BaseEntry" = T2."DocEntry" y T0."BaseLine" = T2."LineNum": Relaciona las transacciones de lotes con las entradas de mercancías.
  4. Condiciones:

    • Filtra por el código de artículo (ItemCode) y el número de sistema del lote (SysNumber).

Pasos a Seguir

  1. Verificar Campos:

    • Asegúrate de que los campos mencionados existen en las tablas ITL1 y PDN1.
  2. Probar la Consulta:

    • Ejecuta la consulta en el SQL Server Management Studio (o el equivalente para HANA) para verificar que devuelve los resultados esperados.
  3. Aplicar en la Búsqueda Formateada:

    • Una vez que la consulta funcione correctamente en el entorno SQL, aplícala en la búsqueda formateada de SAP Business One.

Espero que esta nueva versión del código resuelva tu problema. Si tienes más preguntas o necesitas más asistencia, no dudes en preguntar. ¡Estoy aquí para ayudarte!

He realizado varias pruebas y nada, de ésta ultima he probado la siguiente uniendo correctamente las tablas:

Prueba 1


SELECT  $[PDN1.VendorNum] --Dato temporal en la línea de la entrada
FROM OITM T0
INNER JOIN ITL1 T1 ON T0.[ItemCode] = T1.[ItemCode]
INNER JOIN PDN1 T2 ON  T1.[LogEntry] = T2.[DocEntry] -- Modificado
WHERE T1.[ItemCode] = $[OBTN.ItemCode]
  AND T0.[SysNumber] = $[OBTN.SysNumber]


  AND T0."ManagedBy" = 'B' -- 'B' indica Batch (Lotes) -- campo no existente

También he probado en traer el dato directamente la OITM pero no funciona
Prueba 2


SELECT  T0.SuppCatNum
FROM OITM T0
INNER JOIN ITL1 T1 ON T0.[ItemCode] = T1.[ItemCode]
INNER JOIN PDN1 T2 ON  T1.[LogEntry] = T2.[DocEntry] 
WHERE T0.[ItemCode] = $[OBTN.ItemCode] AND T0.[SysNumber] = $[OBTN.SysNumber]

Prueba 3


SELECT $[PDN1.VendorNum]
FROM OITM T1
INNER JOIN ITL1 T0 ON T1.[ItemCode] = T0.[ItemCode]
INNER JOIN PDN1 T2 ON T0.[BaseEntry] = T2.[DocEntry] AND T0.[BaseLine] = T2.[LineNum]
WHERE T1.[ItemCode] = $[OBTN.ItemCode]
AND T0.[SysNumber] = $[OBTN.SysNumber]
AND T2.[DocEntry] = $[PDN1.DocEntry]

Gracias por vuestra ayuda!

Para crear una búsqueda formateada que actualice automáticamente el campo VendorNum en la selección del lote en SAP Business One versión 10 SQL, debes asegurarte de que la lógica de tu consulta SQL esté alineada con la estructura de las tablas y los campos específicos del sistema.

Aquí hay un enfoque paso a paso que podría ayudarte:

Paso 1: Definir la Lógica Correcta

Debes asegurarte de que tu consulta SQL esté correctamente relacionada con las tablas de lotes (OBTN) y las líneas del documento de entrada (PDN1). El objetivo es extraer el VendorNum de PDN1 y asignarlo al campo correspondiente en OBTN.

Paso 2: Construir la Consulta SQL

A continuación se presenta una versión revisada de tu consulta SQL, con algunos ajustes:

SELECT T2.VendorNum
FROM PDN1 T2
INNER JOIN OBTN T0 ON T2.ItemCode = T0.ItemCode
INNER JOIN OITL T1 ON T0.SysNumber = T1.SysNumber AND T1.ItemCode = T0.ItemCode
WHERE T0.ItemCode = $[OBTN.ItemCode]
AND T0.SysNumber = $[OBTN.SysNumber]
AND T2.DocEntry = $[PDN1.DocEntry]
AND T2.LineNum = $[PDN1.LineNum]

Paso 3: Crear la Búsqueda Formateada

  1. Abrir la ventana de Búsquedas Formateadas:

    • Navega a Herramientas > Consultas > Generador de Consultas.
  2. Definir la Consulta:

    • Copia la consulta SQL anterior en el Generador de Consultas y guárdala.
  3. Asignar la Búsqueda Formateada:

    • Ve a la ventana donde deseas aplicar la búsqueda formateada (por ejemplo, la ventana de selección de lote en la creación de una entrada).
    • Haz clic derecho en el campo donde deseas que se aplique la búsqueda formateada y selecciona Búsqueda Formateada > Asignar a Campo.
    • Asocia la búsqueda formateada que creaste anteriormente.
  4. Configurar el Evento de Activación:

    • Configura cuándo se debe activar la búsqueda formateada. Generalmente, esto se hace configurando el evento de activación como Después de Actualización en los campos relacionados.

Paso 4: Validar la Configuración

Después de haber configurado la búsqueda formateada, realiza pruebas para asegurarte de que el VendorNum se complete automáticamente al seleccionar un lote durante la creación de una entrada. Verifica diferentes escenarios para asegurarte de que la lógica se aplique correctamente.

Resumen Consultoria-SAP

Crear una búsqueda formateada en SAP Business One para rellenar automáticamente el campo VendorNum en la selección de lotes requiere definir correctamente la lógica SQL y configurar la búsqueda formateada para que se active en el momento adecuado. La consulta SQL debe asegurarse de relacionar las tablas PDN1, OBTN, y OITL correctamente.

Si necesitas más detalles o encuentras algún problema adicional, no dudes en consultarnos. ¡Estamos aquí para ayudarte!

@Purple @csapBot de esat forma puedo traer todo los datos registrados, pero aun no logro traer haciendo un WHERE


SELECT T1."VendorNum" FROM OPDN T0 
INNER JOIN PDN1 T1 ON T0."DocEntry" = T1."DocEntry" 
INNER JOIN OITM T2 ON T1."ItemCode" = T2."ItemCode" 
INNER JOIN OITL T3 ON T3."DocEntry" = T0."DocEntry" and T3."DocType" = T0."ObjType" AND T3."DocLine" = T1."LineNum"
INNER JOIN ITL1 T4 ON T3."LogEntry" = T4."LogEntry"

si logran resolver me comparten porfa. Gracias

Osorio vos tenes la misma pregunta que el que inició este tema que es @Purple o es otra consulta distinta? Porque ya no entiendo qué es lo que necesitas vos.

es la misma, mismo problema, una disculpa. si soluciona de @Purple tambien el mio,
es mas creo el tambien esta pidiendo mismo campo.
:slight_smile:

Puedes re-explicar con mayor detalle qué es lo que necesitan y si han probado las soluciones de @csapBot qué es lo que no les funciona?

@SidV si, lo que estamos intentando realizar es lo siguiente:
estamos intentando hacer una busqueda formateada a nivel linea en la creacion de un lote, cuando se esta creando una entrada de mercancia

el campo numero de fabricante capturamos manualmente, y se necesita que esos datos se copie automáticamente a nivel lote tal cual se muestra en la imagen siguiente,

cabe mencionar que aun no esta creado la entrada de mercancía, esta en proceso de creación.