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:
-
Abrir el Gestor de Búsquedas Formateadas:
- Ve a
Herramientas
>Consultas de Usuario - Definidas
>Gestor de Búsquedas Formateadas
.
- Ve a
-
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.
- Haz clic en
-
Introducir la Consulta SQL:
- Copia y pega la consulta SQL ajustada en el área de consulta.
-
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
-
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.
- Ve a
-
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 dePDN1.VendorNum
.
- Selecciona el lote y asegúrate de que el campo
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]

no se si estoy haciendo algo mal
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:
-
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).
-
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"
yT2."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:
-
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.
- Asegúrate de que
-
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
-
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.
-
Campos Clave:
SysNumber
: Es el número de sistema del lote.ManagedBy
: Especifica si el material es gestionado por lote (‘B’ para lotes).
-
Relaciones:
T1."ItemCode" = T0."ItemCode"
: Relaciona los artículos entre las tablasOITM
yITL1
.T0."BaseEntry" = T2."DocEntry"
yT0."BaseLine" = T2."LineNum"
: Relaciona las transacciones de lotes con las entradas de mercancías.
-
Condiciones:
- Filtra por el código de artículo (
ItemCode
) y el número de sistema del lote (SysNumber
).
- Filtra por el código de artículo (
Pasos a Seguir
-
Verificar Campos:
- Asegúrate de que los campos mencionados existen en las tablas
ITL1
yPDN1
.
- Asegúrate de que los campos mencionados existen en las tablas
-
Probar la Consulta:
- Ejecuta la consulta en el SQL Server Management Studio (o el equivalente para HANA) para verificar que devuelve los resultados esperados.
-
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
-
Abrir la ventana de Búsquedas Formateadas:
- Navega a
Herramientas
>Consultas
>Generador de Consultas
.
- Navega a
-
Definir la Consulta:
- Copia la consulta SQL anterior en el Generador de Consultas y guárdala.
-
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.
-
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.
- Configura cuándo se debe activar la búsqueda formateada. Generalmente, esto se hace configurando el evento de activación como
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.
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.
Exacto, estoy prueba tras prueba y nada. No consigo traerme el dato PDN1.VendorNum del documento en curso, en un campo de usuario añadido en la tabla de selección del lote. Gracias por la ayuda
logre realizar algo similar pero por este medio, no se pudo por busqueda formateada ya que es un dato que aun no esta guradado como tal, aun en proceso de creacion
CREATE OR REPLACE VIEW GetAsignadoA_View AS
SELECT
T1."ItemCode",
T0."DocEntry",
IFNULL(T3."U_Cliente", T1."U_ASIGNADO") AS "AsignadoA",
T2."BatchNum"
FROM
"OPDN" T0
INNER JOIN
"PDN1" T1 ON T0."DocEntry" = T1."DocEntry"
INNER JOIN
"IBT1" T2 ON T1."DocEntry" = T2."BaseEntry"
AND T2."BaseType" = T1."ObjType"
AND T2."BaseLinNum" = T1."LineNum"
AND T2."ItemCode" = T1."ItemCode"
INNER JOIN
"OBTN" T3 ON T3."DistNumber" = T2."BatchNum"
AND T1."ItemCode" = T3."ItemCode";
Hola Osorio, yo lo he conseguido con el transaction notification, el campo T3.[U_XXX] es el que necesito que se rellene automáticamente (IF @object_type = ‘20’ AND @transaction_type IN (‘A’, ‘U’)
BEGIN
UPDATE T3
SET T3.[U_XXX] = T1.[VendorNum]
FROM [OBTN] T3
INNER JOIN [IBT1] T2 ON T3.[DistNumber] = T2.[BatchNum]
AND T3.[ItemCode] = T2.[ItemCode]
INNER JOIN [PDN1] T1 ON T2.[BaseEntry] = T1.[DocEntry]
AND T2.[BaseType] = T1.[ObjType]
AND T2.[BaseLinNum] = T1.[LineNum];
END;)