Crear búsquedas formateadas en SAP Business One

    Las búsquedas formateadas son sentencias SQL grabadas en SAP B1 que al ejecutarse nos permiten hacer cálculos, traer valores, ejecutar procedimientos almacenados, etc. Estas solo funcionan en las ventanas activas de SAP B1.

   Primero hablaremos de cómo obtener datos de la pantalla activa de SAP B1.
Toda la información de los campos la obtenemos activando la opción de visualizar información del sistema, Print.

imagen1

  Al activar esta opción podemos ver en las barras de status las referencias de los campos cuando nos posicionamos sobre ellos.

   Existen 2 tipos de campos y se referencian de distinta manera.
Los campos de cabecera y los campos de detalle.

imagen2

Cuando pasamos por un campo de cabecera podemos ver la siguiente información:

imagen3

Estos campos pueden referenciarse en una búsqueda formateada de la siguiente manera:

SELECT $[Tabla.Campo]

En este caso sería:

SELECT $[OINV.Comments]

Cuando pasamos por un campo de detalle podemos ver la siguiente información:

imagen4

Estos campos deben refenciarse de la siguiente manera:

SELECT $[$Item.Column.Tipo_de_dato]

El tipo de datos es:
• 0 para alfanumérico
• DATE para fecha.
• MONEY para moneda.
• NUMBER para número.

Así que dependiendo de la operación que vamos a realizar es el tipo de dato que usaremos, y la referencia al campo puede ser así.

SELECT $[$39.1.0]
SELECT $[$39.1.DATE]
SELECT $[$39.1.MONEY]
SELECT $[$39.1.NUMBER]

   Bien, ya hemos explicado como hacer referencia a campos de la ventana activa, si los campos están ya en la base de datos basta con traerlos como ustedes ya saben, un SQL.
Ahora, para crear una BF, debemos escribir un script SQL, guardarlo, asignarlo al campo y especificar la forma en que se actualizará.
El caso es el siguiente; el cliente solicita que al hacer la factura el vendedor vea en un campo el saldo que tiene el cliente al hacer la factura.
El saldo del cliente se encuentra en el campo «balance» de la tabla «OCRD», lo que necesitamos para cumplir esto es.

1.- Agregar un campo nuevo llamado Saldo.
2.- Insertar una BF para que jale el saldo del cliente.

Primer paso: agregar el campo nuevo

• Ruta: Herramientas \ Herramientas de personalizacion \ Campos definidos por el usuario:Gestión.
• Documentos de marketing \ Título (cabecera de los documentos) \ Crear
• Titulo y Descripción: Saldo, Tipo: Unidades y totales, Estructura: Importe.
(No usaremos el tipo numérico porque en algunos casos genera errores de conversión)

   Luego nos debemos dirigir al formulario de las facturas y si no vemos el campo es porque debemos activar la visualización de los campos definidos por el usuario. Luego de esto lo veremos a la derecha del formulario.

imagen5

Segundo paso: Crear la BF, guardarla, asignarla y ejecutarla.

• Ruta: Herramientas \ Consultas \ Generador de consultas \ Ejecutar.
• Introducir el siguiente script:

SELECT T0.Balance FROM OCRD T0 WHERE T0.CardCode=$[OINV.CardCode]

NO LO EJECUTEN QUE LES DARÁ ERROR, guárdenlo en una categoría aparte para las BF.
• Abrir el formulario de la factura de clientes, clic en el campo «saldo», presionen Shitf+Alt+F2.
• En la ventana que aparecerá seleccionen «Buscar en valores definidos por usuario según consulta grabada», seleccionen la consulta que grabamos, activen el botón «Actualización automática si se producen modificaciones campo» y seleccionen el campo «Código de deudor/acreedor».

   Actualizar regularmente: Cada vez que entres el formulario, la consulta se actualizará. Si seleccionamos esta opción cada vez que habrán la factura se actualizara el campo «saldo».

   Visualizar valores definidos por usuario: Solo se inserta el valor que se trae en el momento y no se volverá a actualizar si se abre nuevamente el documento, pero si, si se le da actualizar al campo manualmente después de haberlo grabado.

   En nuestro caso la opción «Visualizar valores definidos por usuario» es la que nos sirve ya que el saldo que debe quedar en la factura es el que había al momento de facturar.

   Bueno espero les haya gustado, he aquí un print de como queda:

imagen6

Saludos

También te podría gustar...

51 Respuestas

  1. Maria Huerta dice:

    Buenas tardes
    Estoy realizando una búsqueda formateada en un pago recibido en SAP Bussines One, se le crearon campos de usuario: «U_RFC_Banco_Recep», —RFC Banco Receptor y «U_Cta_Banco_Recep» —No cuenta del Banco Receptor
    de estos se requiere que al momento de poner el RFC del Banco Receptor le aparezca el dato en el otro campo hice el codigo pero me marca error:
    SELECT $[$U_RFC_Banco_Recep.1.0]
    Case T0.[U_RFC_Banco_Recep]
    When T0.[U_RFC_Banco_Recep]= ’01’ then ‘1234-5654-1235-9990′
    When T0.[U_RFC_Banco_Recep]= ’02’ then ‘5621-1235-5462-9900’
    ELSE ‘NA’
    END
    FROM ORCT T0 WHERE T0.[DocNum] = $[$U_RFC_Banco_Recep.1.0];

    Error en SAP: 1). [Microsoft][SQL Server Native Client 11.0][SQL Server]Incorrect syntax near the keyword ‘Case’.
    2). [Microsoft][SQL Server Native Client 11.0][SQL Server]Statement » (SWEI) (s) could not be prepared.
    Me puedes ayudar por favor?

  2. Glenda dice:

    Buenas tardes Felipe, me podrias indicar como puedo hacer una búsqueda formateada en un objeto en Hana? Lo que necesito es traer la cantidad por el valor del costo unitario, dichos campos estan creados en el detalle.
    Gracia spor tu ayuda..
    Saludos

  3. Tengo lo siguiente:
    Grupo de articulo 1: cuenta de ingresos 11 y cuenta de ingresos crédito 12.

    Grupo de articulo 2: cuenta de ingresos 21 y cuenta de ingresos crédito 22.

    Grupo de articulo 3: cuenta de ingresos 31 y cuenta de ingresos crédito 32.

    También tengo un campo definido por el usuario en el que se captura el tipo de venta, Contado o Crédito.

    Suponiendo que la venta es de contado:
    Cuando selecciono un articulo que pertenece al grupo 1 la columna de cuentas de mayor se debe poner 11
    Cuando selecciono un articulo que pertenece al grupo 2 la columna de cuentas de mayor se debe poner 21
    Cuando selecciono un articulo que pertenece al grupo 3 la columna de cuentas de mayor se debe poner 31
    etc.

    Suponiendo que la venta es de crédito:
    Cuando selecciono un articulo que pertenece al grupo 1 la columna de cuentas de mayor se debe poner 12
    Cuando selecciono un articulo que pertenece al grupo 2 la columna de cuentas de mayor se debe poner 22
    Cuando selecciono un articulo que pertenece al grupo 3 la columna de cuentas de mayor se debe poner 32
    etc.

    Si por alguna razón el tipo de venta cambia de crédito a contado o viceversa, la columna de cuenta de mayor debe actualizarse nuevamente.

    Como te darás cuenta, la columna de cuenta de mayor se actualiza desde dos momentos, uno, al elegir el articulo y en función del grupo de articulo al que pertenece se determina la cuenta, y el otro momento es cuando cambia el tipo de venta.

    Ya me funciona de las dos formas, el problema es que solo se puede ejecutar una u otra forma, ¿Como puedo hacer para que ambas formas actualicen la misma columna?

  4. Luis Barrantes dice:

    Hola
    Gracias por tu apoyo para los nuevos con SAP

    Deseo hacer una busqueda formateada que me regrese el nombre del formulario o el nombre de la base de datos .

    lo que deseo saber es en que pantalla estoy ubicado .

    Gracias

  5. Jhosser dice:

    Buenos días, me podrías iluminar sobre como hacer una búsqueda formateada usando campos tipo variable?

    Ya que estos campos no tienen un nombre ni una tabla.

    Ejemplo: subtotal de la entrada de mercancías del módulo compras.

    Gracias.

  6. Jose Juan Gonzalez Ugalde dice:

    Buenos días, soy nuevo en sap b1, estoy haciendo una consulta donde utilizo el campo refdate para referenciar la fecha en que se posteo el asiento pero no se si estoy en lo correcto, alguien sabe cual es la fecha del posteo en SAP B1?.
    Gracias por su apoyo

  7. Buenas Tardes,

    De su apoyo para crear la siguiente búsqueda formateada:

    Al generar en SAP el documento \»Factura de proveedores\» requiero que al momento de que el usuario seleccione un registro de la lista de empleados en el campo propietario (Item= 222 Variable=250) llene en automático el campo Departamento de los centros de costos dados de alta en sistema (OPRC, PrcCode).

    Cabe mencionar que la lista de empleados fue dada de alta en el modulo de recursos humanos y la tabla donde se almacenan los mismos es la OHEM.

    De ante mano agradezco el apoyo.

    Saludos

  8. Roger dice:

    como hacer una consulta en SAP B1 9.0, donde al pagar una factura de deudor, me aparezca: fecha de pago, cardcode, nombre del alumno,, concepto de pago y direccion del alumno

  9. Rene dice:

    Estimado,

    Necesito realizar un reporte que me indique las guias de despacho emitidas indicando el producto y la cantidad despachada, segun un rango de fechas, se deben incluir las GD nulas.

  10. Jose Solis dice:

    Estimado Felipe, me han ofrecido el cargo de consultor en SAP Business One y me realizaran una prueba de conocimientos, podrias indicarme como hacer consultas en SAP business one , por medio de una query en sql, desde lo mas basico hasta lo mas usual, por ejemplo un select a una tabla con campo , hasta la busqueda de un registro especifico, como una factura, tengo los TB00100 pero no son muy didacticos, tienes algun manual o algo que me oriente para aprender repidamente.

    gracias

    Jose Solis

  11. Italo Velazquez dice:

    Buenas Tardes :

    me podrian ayudar para la forma de crear un query que me proporcio el total de una factura creada asi como el total por linea

  12. Antonio Romero dice:

    buenas tardes, veo muy interesante, llegue por algo que estaba buscando y que es muy parecido.

    Si me pudieran orientar, estaré muy agradecido.

    Quiero guardar en un campo definido por usuario en SBO, la fecha de Autorización (ORDR.Confirmed) de un Pedido de Venta (Orden de Venta), ya elabore los campos U_U_Liberacion (Fecha de autorización:), U_U_Hora_libe (Hora Autorización:) y U_U_UsuaLibera (Para guardar el usuario que realiza esta actualización), soy honesto estoy perdido pero quiero entender, se que tengo que hacer una consulta, lo que no tengo claro es si se hace en SQL o en el generador de consultas de SBO y cual seria la sintaxis para este caso.

    • Buenas

      Lo que importa es la sintaxis de la consulta, sea donde sea que la generes, hasta en un editor de texto puedes escribir una consulta, el SQL Management Studio y el query manager son «invocadores» de la consulta que tu escribes.

      Saludos

  13. Saúl Quinteros dice:

    Hola Felipe, al igual que Jose estoy iniciando en esto de SAP B1.

    Tengo la siguiente duda:

    ¿Cómo puedo hacer para que una búsqueda formateada genere un resultado con datos que todavía no se han contabilizado?

    Te explico un poco más, se requiere ver el saldo de un cliente según la moneda en la que fue creada una operación, es decir la sumatoria de todos los movimientos que fueron creados en colones y por aparte la sumatoria de todos los movimientos que fueron creados en dólares.

    Actualmente ya tengo montado lo que te comenté anteriormente, creé los siguientes campos de usuario:

    1- Saldo Anterior USD: SELECT SUM(DocTotalFC – PaidFC) FROM OINV WHERE CardCode = $[$5.1.0] AND DocCur = ‘USD’ AND DocSubType = ‘–‘ AND DocStatus = ‘O’

    2- Saldo Anterior CRC: SELECT SUM(DocTotal – PaidToDate) FROM OINV WHERE CardCode = $[$5.1.0] AND DocCur = ‘COL’ AND DocSubType = ‘–‘ AND DocStatus = ‘O’

    3- Saldo Actual USD: Saldo Anterior USD – DocTotalFC (Del documento Actual que todavía no se ha contabilizado.)

    4- Saldo Actual CRC: Saldo Anterior CRC – DocTotal (Del documento Actual que todavía no se ha contabilizado.).

    No obstante, cuando se da un pago recibido se debería restar el pago que se está aplicando en ese momento, esto antes de que se contabilice el pago, para que cuando se contabilice el documento también se guarde en el campo de usuario «Saldo Actual» el saldo actual del cliente. es decir el saldo anterior – el pago que se está registrando en ese momento.

    He notado que una vez que se graba un dato en un campo de usuario, este aunque se modifique no actualiza el valor en la tabla y por lo tanto cuando imprimo lo que me sale es el saldo anterior no el saldo actual.

    Si tienes alguna idea de como ayudarme te lo agradecería mucho.

    Un cordial saludo.

    Saúl

  14. Jose dice:

    Buenas tardes Felipe, apenas ando iniciando enel mundo de SAP B1,
    la duda es la siguiente, tengo un campo definido por usuario llamado: U_NumProyecto, el cual quiero que su contenido se vea reflejado en un campo de sistema, esto antes de crear el documento, por lo cual aun no tengo DocEntry, realize una busqueda formateada de la siguiente manera: select $[$U_NumProyecto.0.0] pero no me funcionó, Conoces alguna forma de realizarlo.

    Gracias de antemano

  15. Jose dice:

    Buenos dias, tengo una duda,

    si utilizo SAP Bussines One con HANA,

    ¿existe alguna tabla en donde yo pueda consultar todos aquellos campos que tengan una busqueda formateada, y el nombre de la consulta que tiene el campo?

    • Buenas tardes.

      No he tenido la oportunidad de usar HANA aún, tengo entendido que la estructura de tablas sigue igual por lo que está consulta debe funcionar aunque esta en T-SQL así que debes cambiar a syntax HANA

          SELECT T0.FormID AS 'Form ID', T0.ItemID AS 'Item o Nombre', T1.QName AS 'Nombre Query', T1.QString AS 'Sintax SQL'    
          FROM  CSHS T0    
          INNER JOIN OUQR T1 ON T0.QueryId = T1.IntrnalKey    
      

      Saludos

Deja una respuesta

Tu dirección de correo electrónico no será publicada.