Ver Mensaje Individual
  #4  
Antiguo 04-08-2018
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Reputación: 20
gmontes Va por buen camino
en delphi 7 yo tomo el archivo xml formado y lo convierto asi:


Código Delphi [-]
function TProveedorFinkOk.FileToByteArray( const FileName : string ) : TByteDynArray;
const BLOCK_SIZE=1024;
var BytesRead, BytesToWrite, Count : integer;
 F : FIle of Byte;
 pTemp : Pointer;
begin
 AssignFile( F, FileName );
 Reset(F);
try
 Count := FileSize( F );
 SetLength(Result, Count );
 pTemp := @Result[0];
 BytesRead := BLOCK_SIZE;
 while (BytesRead = BLOCK_SIZE ) do
 begin
  BytesToWrite := Min(Count, BLOCK_SIZE);
  BlockRead(F, pTemp^, BytesToWrite , BytesRead );
   pTemp := Pointer(LongInt(pTemp) + BLOCK_SIZE);
  Count := Count-BytesRead;
 end;
finally
  CloseFile( F );
 end;
end;

hago esto porque la rutina original no me tomaba la Ñ , ñ, y otros campos mas

esta rutina es la original

Código Delphi [-]

function TProveedorFinkOk.UTF8Bytes(const s: UTF8String): TBytedynArray; // sacada de http://stackoverflow.com/questions/5...array-in-utf-8
begin
 {$IF Compilerversion >= 20}Assert(StringElementSize(s)=1){$IFEND};
  SetLength(Result, Length(s));
  if Length(Result)>0 then
    Move(s[1], Result[0], Length(s));
end;

y esta es la rutina que timbra en finkok

Código Delphi [-]
function TProveedorFinkOk.TimbrarDocumento2(const aComprobante:
    string; const aTransaccion: Int64): TCadenaUTF8;
var
  respuestaTimbrado: TFinkOkRespuestaTimbrado;
  sXML:TByteDynArray;
begin
  //sXML := UTF8Bytes(aComprobante.XML);

  sXML := FIleToByteArray(aComprobante);

  respuestaTimbrado := fwsTimbradoFinkOk.stamp(sXML,fCredencialesPAC.RFC,fCredencialesPAC.Clave);
  if Trim(respuestaTimbrado.CodEstatus) <> '' then
    Result := ExtraerNodoTimbre(respuestaTimbrado.xml);
  if Trim(respuestaTimbrado.CodEstatus) = '' then
   begin
   {$IFDEF CODESITE}
    CodeSite.Send('Falla Validacion Error No.', respuestaTimbrado.Incidencias[0].CodigoError+'/Detalle :'+respuestaTimbrado.Incidencias[0].MensajeIncidencia);
   {$ELSE}
    raise exception.Create('Falla Validacion Error No.'+ respuestaTimbrado.Incidencias[0].CodigoError+'/Detalle :'+respuestaTimbrado.Incidencias[0].MensajeIncidencia);
   {$ENDIF}
   end;
end;

lo hice asi porque en delphi 7 tengo problemas con las conversiones de tipos que en versiones mas recientes no hay problema

espero empezar a migrar de delphi 7 a lo mas reciente pronto

estas rutinas las cambie del original que se encuentra en el proyecto bambucode para construir el cfdi 3.3 y timbrar en finkok
__________________
Todos llevamos nuestros demonios a cuestas..
Responder Con Cita