cancel
Showing results for 
Search instead for 
Did you mean: 

BF en documentos destino.

marco_ramirez
Active Contributor
0 Kudos

Estimados todos

En mis documentos de marketing he creado un campo de usuario a nivel de encabezado de manera que en el pueda grabar la hora en que se graba el documento.

En la oferta de venta, documento inicial, no veo incovenientes la hora se graba perfectamente, sin embargo, si el usuario copia a una orden de venta el campo de usuario de hora en este documento se llena con el dato de la hora que fue fijada en la oferta de venta lo cual para mi no es correcto pues el propósito final es determinar tiempos de creación de documentos entre uno y otro.

Cómo entonces se podrá grabar la hora en que se crea el documento, por medio de una BF, en campos de usuario cuando los documentos se copian a o bien se copian de?

Agradezco su apoyo

Accepted Solutions (0)

Answers (4)

Answers (4)

Former Member
0 Kudos

Buenas Tardes

He leído sus comentarios, suena interesante.

Quisiera saber si existe alguna forma de ver el tiempo de captura de un documento, es decir, saber la hora en la que el usuario inicia y la hora  en la que termina, mi tiempo de inicio puede ser desde que se selecciona a un cliente.

Agradezco de su apoyo

Saludos

marco_ramirez
Active Contributor
0 Kudos

Se decidió usar los campos nativos de la BD de SAP para ver las horas de los documentos y, por el momento, no realizar diferencia entre los valores de horas.

Gracias a todos por sus aportes.

Former Member
0 Kudos

La mejor de las decisiones. Veras que todo funciona super.

Pero después de todo no hay ningún puntito?

marco_ramirez
Active Contributor
0 Kudos

Estimado Rulius

Por error de procedimiento no asigne la puntuación debida pues hice el cierre del hilo desde el panel de mis preguntas, sin embargo, me parece que la ampliación en la información sobre el formato de datos y la forma en como funciona claro que merece algún puntito, como dices.

Saludos

former_member929140
Discoverer
0 Kudos

Estimado Julio

He consultado un par de cosas en SAP y me doy cuenta que Ud. tiene amplio conocimiento de ello.  Por favor me puede ayudar, ¿Cómo puedo revisar la hora de creación de un documento?. El procedimiento que realizo es consultarlo desde el "log de modificaciones" pero este solo me muestra la fecha y usuario.

Le agradezco

Ana

javier_facessantos
Contributor
0 Kudos

Hola Ana

En el log de modificaciones no figura la hora y no es posible traérsela mediante las parametrizaciones del formulario ni nada por el estilo. Pero en las tablas de cabecera de cada tipo de documento figura un campo llamado DocTime del que podrás extraer esa información. Por ejemplo si quieres conocer la hora de creación de un pedido de compras concreto, tendrás que consultar el campo DocTime de la tabla OPOR.

Un saludo

former_member929140
Discoverer
0 Kudos

Gracias por tu apoyo Javier, pero intento visualizar el DocTime de algún documento y no me aparece ningún campo en la cabecera, será que tendré que activarlo? Por otro lado, disculpa que significa OPOR?
Una vez más muchas gracias!

Ana

javier_facessantos
Contributor
0 Kudos

Hola Ana

Eso es debido a que el campo DocTime no es un campo de los que se visualizan en los formularios de los documentos, sino que simplemente se almacena en la tabla. OPOR es el nombre de la tabla de cabecera de los pedidos.

Si quieres consultar la hora de creación de un documento tendrás que generar una consulta contra la tabla de cabecera del documento en cuestión. Las consultas se construyen en leguaje SQL y las puedes generar a través de la siguiente ruta:

Herramientas > Consultas > Generador de consultas

Una vez ahí haz clic en "Ejecutar" y se te mostrará una pantalla de resultados de consulta, clica en el icono del lapicero y sustituye "SELECT *" que aparece por lo siguiente:

SELECT T0.DocNum, T0.DocTime FROM OPOR T0 WHERE T0.DocNum = [%0]

Haz clic en ejecutar y el sistema te mostrará una ventana de selección pidiéndote un número de pedido, introduce el pedido para el que quieras chequear la hora y haz clic en "OK".

Si quieres grabar la consulta para ejecutarla cuando tú quieras dale a botón "Grabar" y te aparecerá una ventana para que lo incluyas en una de las carpetas de consultas. Esas carpetas son accesibles desde la ruta:


Herramientas > Consultas > Consultas usuarios   

Un saludo

former_member929140
Discoverer
0 Kudos

Javier, te agradezco infinitamente el apoyo, de verdad que me ha sido de mucha ayuda.

Lo puedo ejecutar tal cual me indicas en el mensaje anterior.
Quisiera preguntarte otra cosa, ¿cual sería la consulta en lenguaje SQL para una orden de Venta?, por que entiendo que la ruta indicada me arroja el DocTime de una orden de Compra.

Por otro lado se puede hacer esta consulta para un rango de documentos?

Gracias y excelente día.

saludos!

javier_facessantos
Contributor
0 Kudos

Hola Ana

Para una orden de venta simplemente tendrías que cambiar el nombre de la tabla de pedidos (OPOR) por ORDR que es la tabla de pedidos de ventas, pues las tablas de los documentos de marketing (compras y ventas) tienen estructuras idénticas. La consulta quedaría así:

SELECT T0.DocNum, T0.DocTime FROM ORDR T0 WHERE T0.DocNum = [%0]



Si lo que quieres es que te muestre la hora de creación para un rango de documentos tienes que definir dos parámetros en vez de uno solo ( [%0] y [%1] ) indicando la claúsula IS BETWEEN antes de ellos:

SELECT T0.DocNum, T0.DocTime FROM ORDR T0 WHERE T0.DocNum IS BETWEEN [%0] AND [%1]



Un Saludo

former_member929140
Discoverer
0 Kudos

Javier, una vez más ha salvado mi día.

Te agradezco infinitamente.

Saludos!

Former Member
0 Kudos

Podrías usar una consulta formateada para lograr ese objetivo.

La idea es que tengas una consulta guardada que sea lo siguiente:

select substring(cast(getdate() as varchar(20)),11,16)

una vez guardad la consulta, configura el campo de usuario que creaste para que se vuelva un campo llenado por consulta formateada. Aquí lo ideal sería que revises en tu proceso de captura que campo siempre debe modificar tu usario y sobre ese campo configurar la consulta formateada para que cuando se modifique

selecciona el campo y da cntrlshiftF2

confura la consulta así.

Buscar en valores definidos segun consulta guardada

Actualización automática si se producen modificaciones

Ligar el cambio al campo que te comentaba, el que siempre modificque tu usuario al crear la factura

Actualizar regularmente.

Por ejemplo, yo ligué el campo donde mi usuario selecciona si se crea factura electrrónica, Eso asegura un campoq ue siempre es modificado.

Espero te sea útil

marco_ramirez
Active Contributor
0 Kudos

Gracias David Manuel

Sin embargo en los documentos en los que no se debe cambiar ningún campo la BF no funcionará y es ahí donde radica el poder encontrar la solución que tome en cuanta dos aspectos:

1. Que es un documento que va de Copiar a o bien Copiar de (de documento base a destino)

2. Existe la posibilidad que el usuario no deba cambiar ninguno de los campos copiados, por lo tanto el valor del campo del documento base es el que queda.

Saludos

Former Member
0 Kudos

¿porqué no lo haces con trabsaction que te permite cambiar el campo al añadir o actualizar el documento?

Saludos

Tere

marco_ramirez
Active Contributor
0 Kudos

Este TN que me suguieres debería ser el del tipo error?

es decir, valido el campo de hora par que me de error y en base a ello que el usuario ingrese la hora?

Trate con este código pero no me realiza nada, tienes alguna sugerencia, gracias

Former Member
0 Kudos

Porque de una vez no utilizas los campos estandar de CreateDate e CreateTime???

Si bien no estan visibles, estos existen y son exactos, a los más perderias la traza de 1 minuto. ya que el campo CreateTime guarda HH:MM (en formato militar).

Usando estos campos, no necesitas ni BF ni UDF, o TN.

slds.

marco_ramirez
Active Contributor
0 Kudos

Estimado Rulius

Gracias por tu aporte

en uanto a los campos que menciones puedo encontrar el campo CreateDate, sin embargo, CreateTime no.

Encontré un campo llamado DocTime pero tengo el inconveniente que es de formato Int y al momento de querer hacer una resta entre dos tiempos en minutos me hace la diferencia entre dos números enteros, por ejemplo:

si en un documento la hora de creación es 16:40 y en el siguiente 17:40 el resultado que me da es un * pues creo lo toma como número entero.

Cómo puedo encontrar ese campo CreateTime? este es de formato Time o datetime?

Agradezco tu ayuda

Saludos

Former Member
0 Kudos

Disculpa DocTime es el campo, lo que pasa es que te lo dije de memoria y en las tablas de usuario el campo se llama CreateTime

Ahora lo que dices sobre ese campo tienes toda la razon SAP B1 toma la hora como te dije en formato militar, por eso el campo es un INT pequeño (smallInt).

Pero no me cuadra que al realizar la resta entre uno y otro te de *. Pues la resta de 1740-1640=100, que es igual que decir 17:40-16:40=1:00

revisalo bien yo hice las operaciones en excel y no me dio ningun problema.

Sin embargo te dejo un link que te puede ayudar.

SmallInt a DateTime

slds.

marco_ramirez
Active Contributor
0 Kudos

Ampliando el tema

hago dos pruebas con distintas formulaciones, siendo:

datediff(mi, t0.[U_Hinicio],t2.[U_HinicioOv])[HH:MM111], en donde

t0.[U_Hinicio] = 16:37

t2.[U_HinicioOv] = 17:37

Resultado = 144000

En este caso en la función datediff ingrese un datepart = minutos por lo que esperaba obtener como respuesta 60, sin embargo, el resultado es 144000

Convert(Char(4),((T2.[U_HinicioOv] - T0.[U_Hinicio] )),114)[HH:MM],

en donde

t0.[U_Hinicio] = 16:37

t2.[U_HinicioOv] = 17:37

Resultado = 100

Este otro caso entiendo que la diferencia la está tomando como bien dices antes con datos 1737 - 1637 = 100

La objeción es la siguiente:

Si ambos campos, dentro de SAP, fueron declarados como Time el resultado de la diferencia no lo debería mostrar así: 1:00

Agradezco tu enlace lo pondré en práctica

Saludos

Former Member
0 Kudos

El resultado lo estas mostrando en una consulta de usuario o un campo de usuario definido como time??

Porque cuando defines un campo de usuario de tipo TIEMPO en SB1, lo que estas haciendo en la base de datos fisica es definiendo un campo de tipo SMALLINT, no un cmapo de tipo DATETIME. Por lo tanto, al operar dos campos de tipo TIEMPO en SB1, en realidad sólo estas haciendo una operación de enteros, no de horas.

slds.

marco_ramirez
Active Contributor
0 Kudos

El resultado lo estoy mostrando en una consulta de usuario a traves del generador de consultas de SAP y los campos en cuestión son dos campos de usuario.

Lo que me explicas, entonces, me llevaría a la propuesta que me enviaste en el link anterior para hacer la conversión de un smallInt a datetime.

Vamos como me va con este tema pues será la primera vez que haga una función.

De nuevo gracias

Former Member
0 Kudos

Y si creas otro campo en el otro docuemento y que se ejecute la BF sólo en ese docuemnto para ese campo, así tendrías en el mismo documento la fecha de creación del primer documento en un campo y la de ese documento en otro.

Saludos,

Tere

marco_ramirez
Active Contributor
0 Kudos

Es decir un campo de usuario para cada formulario.

Resulta lógica tu propuesta, haré las pruebas.

Saludos

marco_ramirez
Active Contributor
0 Kudos

Solo hay un detalle o varios

en el caso de los documentos que se copian a un destino, generalmente no se cambia nada o no ser que sea necesario, lo cual es poco usual.

En este caso sobre que probable cambio podría hacer que funcione la BF pues prácticamente no hay campo que cambiar?

Lo anterior lo planteo en base a las pruebas realizadas pues he creado 4 campos de usuario con formato Fecha/hora configurando en cada formulario una BF distinta para que la del documento anterior quede únicamente como referencia.

Se me ocurre usar un Case dentro del la BF pero me pregunto cual será la condición.

gracias por la ayuda