Tiempo de duración en llamada de servicio

Buen día Estimados

Tengo un layout en crystal el cual me funcionaba bien hasta la actualizacion de sap, resulta que el campo Durtype me lo cambio a S y por ende el campo duration guarda el tiempo en segundos, si alguien me puede echar una mano para que me diga como corregir esto o de que puedo adecuar mi layout para que el personal siga viendo su duración en horas y minutos

Este es el query que he estado utilizando para el layout en crystal

SELECT
T0.CallId,
T1.SrvcCallId,
convert(VARCHAR(10), t2.Recontact, 103) as 'Fecha de Inicio',
Case when Len(T2.BeginTime)='3' then substring(convert(nvarchar(10),T2.BeginTime),1,1) +':'+substring(convert(nvarchar(10),T2.BeginTime),2,Len(T2.BeginTime))+'AM' when len (T2.BeginTime)='4' then substring(convert(nvarchar(10),T2.BeginTime),1,2) +':'+substring(convert(nvarchar(10),T2.BeginTime),3,Len(T2.BeginTime))+'PM' end as 'Hora de Inicio',
convert(VARCHAR(10), t2.endDate, 103) as 'Fecha Final',
Case when Len(T2.EndTime)='3' then substring(convert(nvarchar(10),T2.EndTime),1,1) +':'+substring(convert(nvarchar(10),T2.EndTime),2,Len(T2.EndTime))+'AM' when len (T2.EndTime)='4' then substring(convert(nvarchar(10),T2.EndTime),1,2) +':'+substring(convert(nvarchar(10),T2.EndTime),3,Len(T2.EndTime))+'PM' end as 'Hora Final',
T2.Duration,
T2.Location


FROM
OSCL T0  
INNER JOIN SCL5 T1 ON T0.[callID] = T1.[SrvcCallId]
INNER JOIN OCLG T2 ON T1.[ClgID] = T2.[ClgCode]

1 me gusta

Buen dia.

Veo que pones que hay una actualización cambiaste de versión 9.2 a9.3 por ejemplo, entonces en este link te dejo h_ttp://www.saptables.co.uk/ las tables de sap por versión, así ya solo buscas la tabla en la versión nueva y aplicas el cambio, seguramente lo podrás solucionar asi.

El campo que mencionas te Indica D=Days, H=Hours, M=Minutes, S=Seconds porque ahí esta la UOM del campo Duration por lo que tendrás que hacer la conversión de lo que te ahí te indique.a hora minutos y segundos.

por ejemplo 3666 segundos es 1 Hora , 1 Minuto and 6 Segundos. en HH:MMSS queda así: 1:1:6
y el query es mas o menos asi:

select “FullSeconds”
,TO_INT(“FullSeconds” / 3600) as “HORAS”
,TO_INT(“FullSeconds” / 60) as “MINUTOS”
,”FullSeconds” as “SEGUNDOS”
,TO_INT(“FullSeconds” / 3600) as “Horas”
,TO_INT(MOD(“FullSeconds” , 3600) / 60) as “Minutos”
,MOD(MOD(MOD(“FullSeconds” , 3600) , 60), 60) as “Segundos”
,concat(
concat(
CONCAT(TO_CHAR( TO_INT(“FullSeconds” / 3600)), ‘:’) ,
CONCAT(TO_CHAR( TO_INT(MOD(“FullSeconds” , 3600) / 60)),’:’)
), TO_CHAR(MOD(MOD(MOD(“FullSeconds” , 3600) , 60), 60))) as “TimeFormat”
from ( select 3666 as “FullSeconds” from dummy )

si estas en hana prueba con CTime({segundos} / 86400)

1 me gusta

Si de hecho saptables menciona que para la versión 9.3 por default viene la M en el tipo de duración que es como nos funcionaba antes de la migración, hay alguna opcion de cambiar la S por la M?

1 me gusta

no lo se la verdad, pero creo que te conviene mas aplicar el query que te propongo y te evitas de problemas.

Saludos.

este query me funciona en SQL?

Porque el sap lo tengo sobre sql server

Ok yo lo manejo en hana y la única diferencia es que tienes que quitar las " " para que te funcione en sql al campo FullSeconds y los de Horas, minutos y segundos cámbialas por ’ te quedaría ‘Horas’.

Saludos.

Para cerrar este tema, lo pude solucionar de forma diferente a lo que me respondió @jose_saul_san, en sql no me funcionó aunque me dio una luz de como hacer, luego investigue en un post de microsoft y vi que alguien tenía una duda similar a la mía asi que utilice la respuesta y al final me ayudó con la conversión.

adjunto el query por si alguien tiene la misma duda

SELECT
T0.CallId,
T1.SrvcCallId,
convert(VARCHAR(10), t2.Recontact, 103) as 'Fecha de Inicio',
Case when Len(T2.BeginTime)='3' then substring(convert(nvarchar(10),T2.BeginTime),1,1) +':'+substring(convert(nvarchar(10),T2.BeginTime),2,Len(T2.BeginTime))+'AM' when len (T2.BeginTime)='4' then substring(convert(nvarchar(10),T2.BeginTime),1,2) +':'+substring(convert(nvarchar(10),T2.BeginTime),3,Len(T2.BeginTime))+'PM' end as 'Hora de Inicio',
convert(VARCHAR(10), t2.endDate, 103) as 'Fecha Final',
Case when Len(T2.EndTime)='3' then substring(convert(nvarchar(10),T2.EndTime),1,1) +':'+substring(convert(nvarchar(10),T2.EndTime),2,Len(T2.EndTime))+'AM' when len (T2.EndTime)='4' then substring(convert(nvarchar(10),T2.EndTime),1,2) +':'+substring(convert(nvarchar(10),T2.EndTime),3,Len(T2.EndTime))+'PM' end as 'Hora Final',
T2.Duration,
CONVERT(NVARCHAR, CAST((T2.Duration+0.001) /86400.0 AS DateTime), 8) as 'Tiempo de Duración',
T2.Location


FROM
OSCL T0  
INNER JOIN SCL5 T1 ON T0.[callID] = T1.[SrvcCallId]
INNER JOIN OCLG T2 ON T1.[ClgID] = T2.[ClgCode]