Ver Mensaje Individual
  #24  
Antiguo 31-05-2007
socger socger is offline
Miembro
 
Registrado: jun 2004
Posts: 89
Reputación: 23
socger Va por buen camino
Chicos tengo otro fallo

Os paso dos ficheros para probarme este error de interpretación (Lector tacógrafos.rar y Fichero_Tarjeta_Digital_Conductor.rar)

Bien me ocurre este problema, existe un tipo de datos según el BOE que conseguí gracias a vosotros que son del tipo time real de hecho esto es lo que dice el BOE:
--------------------------------------------------------------------------------------------------
2.110. TimeReal
Código para un campo combinado de fecha y hora, donde ambos parámetros se expresan como los segundos transcurridos desde las 00h.00m.00s. del 1 de enero de 1970, tiempo medio de Greenwich.

TimeReal{INTEGER:TimeRealRange} ::= INTEGER(0..TimeRealRange)

Asignación de valor . Alineación de octeto: número de segundos transcurridos a partir de la medianoche del día 1 de enero de 1970, tiempo medio de Greenwich.

La fecha/hora máxima posible es en el año 2106.

Definición de valores variables empleados en las definiciones del apartado 2.
TimeRealRange ::= 232-1
--------------------------------------------------------------------------------------------------

Para calcular la fecha que devuelve una variable del tipo he creado primero la clase tTime_Real:
--------------------------------------------------------------------------------------------------
TTime_Real = packed record // 4 byte ver apdo. 2.110. TimeReal
Time_Real: Integer; // [INTEGER:TimeRealRange] ::= INTEGER(0..TimeRealRange) ... TimeRealRange ::= 2^32-1
end;
--------------------------------------------------------------------------------------------------

Y segundo la función Devolver_Fecha:
--------------------------------------------------------------------------------------------------
function TForm1.Devolver_Fecha(Fecha_Integer: Integer): String;
var Cantidad_Dias_Transcurridos: Extended;
Cantidad_Resto_Horas: Extended;
Cantidad_Resto_Minutos: Extended;
Cantidad_Resto_Segundos: Extended;
Resto_Que_Queda_de_Segundos: Extended;
Dia_A_Devolver: tDate;
Mensaje: String;
begin
// Un día = 60 segundos * 60 minutos * 24 horas = 86400 segundos
// Una hora = 60 segundos * 60 minutos = 3600 segundos
// Una minuto = 60 segundos = 60 segundos

Resto_Que_Queda_de_Segundos := Fecha_Integer;
Mensaje := 'Total segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Dias_Transcurridos := Abs(Int(Resto_Que_Queda_de_Segundos / 86400));
Resto_Que_Queda_de_Segundos := Resto_Que_Queda_de_Segundos - (Cantidad_Dias_Transcurridos * 86400);
Mensaje := Trim(Mensaje) + 'Total días transcurridos: ' + FloatToStr(Cantidad_Dias_Transcurridos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Resto_Horas := Abs(Int(Resto_Que_Queda_de_Segundos / 3600));
Resto_Que_Queda_de_Segundos := Resto_Que_Queda_de_Segundos - (Cantidad_Resto_Horas * 3600);
Mensaje := Trim(Mensaje) + 'Resto de horas transcurridas: ' + FloatToStr(Cantidad_Resto_Horas) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Resto_Minutos := Abs(Int(Resto_Que_Queda_de_Segundos / 60));
Resto_Que_Queda_de_Segundos := Resto_Que_Queda_de_Segundos - (Cantidad_Resto_Minutos * 60);
Mensaje := Trim(Mensaje) + 'Resto de minutos transcurridas: ' + FloatToStr(Cantidad_Resto_Minutos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Cantidad_Resto_Segundos := Resto_Que_Queda_de_Segundos;
Mensaje := Trim(Mensaje) + 'Resto de segundos transcurridas: ' + FloatToStr(Cantidad_Resto_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + 'Resto de segundos: ' + FloatToStr(Resto_Que_Queda_de_Segundos) + chr(10) + chr(13);
Mensaje := Trim(Mensaje) + ' ' + chr(10) + chr(13);

Dia_A_Devolver := StrToDate('01/01/1970') + Cantidad_Dias_Transcurridos;
Mensaje := Trim(Mensaje) + 'Dia a devolver: ' + DateToStr(Dia_A_Devolver) + chr(10) + chr(13);

MessageDlg( Mensaje, mtInformation, [mbOk], 0 );

Result := Trim( DateToStr(Dia_A_Devolver) + ' ' +
Trim(FloatToStr(Cantidad_Resto_Horas)) + ':' +
Trim(FloatToStr(Cantidad_Resto_Minutos)) + ':' +
Trim(FloatToStr(Cantidad_Resto_Segundos)) );
end;
--------------------------------------------------------------------------------------------------

El ejemplo que os paso me debería de haber devuelto sobre el tipo de
FID = 0520 ... EF Identification (CardIdentification + DriverCardHolderIdentification)
En Fecha primer día de validez de la tarjeta: 09-09-2006
y en Fecha en la que termina la validez de la tarjeta: 09-09-2011

Estos datos los cargo en la clase TCard_Identification sobre card_Validity_Begin y card_Expiry_Date respectívamente
--------------------------------------------------------------------------------------------------
TCard_Identification = packed record // 65 byte ... ver apdo. BOE 2.20. CardIdentification
card_Issuing_Member_State: Byte; // NationNumeric, ... 1 byte INTEGER(0..255) por defecto (00) ver apdo 2.72. NationNumeric
card_Number: TCard_Number_Conductor; // CardNumber ... 16 byte por defecto (20..20) ver apdo. 2.21 CardNumber
card_Issuing_Authority_Name: TName; // Name, ... 36 byte por defecto (20..20) ver apdo. 2.70 Name
card_Issue_Date: TTime_Real; // TimeReal ... 4 byte por defecto (00..00) ver apd. 2.110 TimeReal
card_Validity_Begin: TTime_Real; // TimeReal ... 4 byte por defecto (00..00) ver apd. 2.110 TimeReal
card_Expiry_Date: TTime_Real; // TimeReal ... 4 byte por defecto (00..00) ver apd. 2.110 TimeReal
end;
--------------------------------------------------------------------------------------------------

Pero como comprobareis con el ejemplo no me devuelve bien los valores de fecha, creo que puede ser o que no he entendido bien que tipo de datos son los TimeReal o que se me escapa algo en la función.

Por si os hacen falta os envío en el fichero Otros_Ficheros_Conductores.rar más capturas de conductores.

Os agradecería me guiaseis ante esta duda. Como veréis en el código que subo voy bastante avanzado gracias a vuestra ayuda.

De antemano, os doy las gracias por vuestra colaboración.
Archivos Adjuntos
Tipo de Archivo: zip Fichero_Tarjeta_Digital_Conductor.zip (2,7 KB, 90 visitas)
Tipo de Archivo: zip Lector tacógrafos_1.zip (16,2 KB, 119 visitas)
Tipo de Archivo: zip Lector tacógrafos_2.zip (16,1 KB, 134 visitas)
Tipo de Archivo: zip Otros_Ficheros_Conductores.zip (7,6 KB, 80 visitas)
Responder Con Cita