Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #5  
Antiguo 03-07-2020
ludan508 ludan508 is offline
Miembro
 
Registrado: ago 2004
Posts: 17
Poder: 0
ludan508 Va por buen camino
Threads para Timbrar Documentos

Cita:
Empezado por Neftali [Germán.Estévez] Ver Mensaje
Vale. La cosa está un poco más clara...

Haces el Create con el parámetro a False, por lo tanto el thread se inicia automáticamente después de crearlo.
En ese momento se ejecuta el método Execute, que por lo que veo no hace nada (lo tienes vacío).
Ahí acabó la ejecución de tu hilo.
En ese momento llamas al Terminate ¿Para qué?
Luego lo que haces es ejecutar un método de tu clase (pTimbrado a través de la propiedad) que se ejecuta como cualquier otro método de cualquier otra clase, es decir, en el hilo principal de la aplicación.

=> Por eso tu ejecución es secuencial. Has creado una clase que deriva de TThread y no la usas.

Creo que tienes un error de concepto con los Threads. Revisa esto:
http://docwiki.embarcadero.com/Libra...TThread.Create

O en mi blog tienes algunos ejemplos sencillos que te ayudarán a entender cómo funcionan.
https://neftali.clubdelphi.com/ejemp...-sin-utilidad/
https://neftali.clubdelphi.com/ejemp...-ampliado-v-2/
https://neftali.clubdelphi.com/pendi...nd-tcontext3d/

Resumiendo mucho...
(1) Meter muchas cosas dentro de una clase que derive de TThread no significa que estés utilizando Threads.
(2) El método básico de la clase TThead es el método Execute. Lo que pongas ahí es lo que se ejecuta en un thread diferente al principal de la aplicación (en tu clase está vacío)
(3) Importantes además de Execute, son el Terminate y el Synchronize.

No se si me he explicado...
*****************************************************************************************

Buen día, definitivamente soy nuevo en esto de los Threads, realice estas modificaciones, y ya no hace nada

Revise tus códigos y veo que usas el Create y Synchonize y me siento muy confundido, como puedo realizar el llamada pTimbrado dentro del hilo.

Código Delphi [-]
type
  TTimbrado = class(TThread)
  protected
    procedure Execute; override;
    procedure pTimbrado;
  public
    wXMLxTimbrar: WideString;
    wXMLTimbrado: WideString;
    constructor Create(wXMLPendiente: WideString);
  end;

{ TTimbrado }

constructor TTimbrado.Create(wXMLPendiente: WideString);
begin
    inherited Create(False);
    wXMLxTimbrar := wXMLPendiente;
end;

procedure TTimbrado.Execute;
begin
    FreeOnTerminate := True;
    Synchronize(pTimbrado);
end;

procedure TTimbrado.pTimbrado;
var wResult: WideString;
    lError: Longint;
    lUUID: Array[0..255] of Char;
    sRFC: String;
    sRutaSave: String;
    bEsPago: Boolean;
begin
    inherited;
    FreeOnTerminate := True;

    wResult   := '';
    sRutaSave := EmptyStr;
    bEsPago   := False;

    if (Pos('Pago', wXMLxTimbrar) > 0) then
        bEsPago := True;

    sRFC := fExtraeRFC(wXMLxTimbrar);

    if sRFC <> EmptyStr then
    begin
        xRutaXML    := wXMLxTimbrar;
        xRutaTimbre := StringReplace(wXMLxTimbrar, 'CFDI_Pendientes', 'CFDI_Timbrados', [rfReplaceAll]);
        xRutaTimbre := TrimLeft(TrimRight(xRutaTimbre));

        if not fAbreArchivoRutas(sRFC) then
            wResult := 'No se encuentra el archivo sRutaContpaq'
        else
        begin
            try
                lError := fInicializaSDK();

                if lError <> 0 then
                    wResult := PChar(fMensajeError(lError))
                else
                begin
                    lError := fSetNombrePAQ(PChar(kFACTURACION_I));

                    if lError <> 0 then
                    begin
                        fTerminaSDK();
                        wResult := PChar(fMensajeError(lError))
                    end
                    else
                    begin
                        lError := fAbreEmpresa(PChar(sRutaEmpresa));

                        if lError <> 0 then
                        begin
                            fTerminaSDK();
                            wResult := PChar(fMensajeError(lError))
                        end
                        else
                        begin
                            lError := fInicializaLicenseInfo(1); // <-- Sistema:    0 = AdminPAQ    1 = CONTPAQ i® Factura Electrónica

                            if lError <> 0 then
                            begin
                                fTerminaSDK();
                                wResult := PChar(fMensajeError(lError))                            
                            end
                            else
                            begin
                                try
                                    if not bEsPago then
                                    begin
                                        lError := fTimbraXML(PChar(xRutaXML),
                                            '5',
                                            lUUID,
                                            '',
                                            PChar(sRutaXMLSave),
                                            PChar(sPasswd),
                                            PChar('c:\compacw\empresas\reportes\factiracopm\plantilla_factura_cfdi_1.htm'));
                                    end
                                    else
                                    begin
                                        lError := fTimbraComplementoPagoXML(PChar(xRutaXML),
                                            '5',
                                            lUUID,
                                            '',
                                            PChar(sRutaXMLSave),
                                            PChar(sPasswd),
                                            PChar('c:\compacw\empresas\reportes\factiracopm\Plantilla_REP_1.htm'));
                                    end;

                                    if lError <> 0 then
                                        wResult := PChar(fMensajeError(lError))
                                    else
                                    begin
                                        sRutaSave := xRutaTimbre;

                                        try
                                            if FileExists(sRutaXMLSave + lUUID + '.xml') then
                                                CopyFile(PChar(sRutaXMLSave + lUUID + '.xml'), PChar(sRutaSave), True);
                                        except
                                            on e: Exception do
                                            begin
                                                wResult := e.Message;
                                            end;
                                        end;

                                        fCierraEmpresa();
                                        fTerminaSDK();

                                        wResult := '';
                                    end;
                                except
                                    on e: Exception do
                                    begin
                                        wResult := e.Message;

                                        fCierraEmpresa();
                                        fTerminaSDK();
                                    end;
                                end;
                            end;
                        end;
                    end;
                end;
            except
                on e: Exception do
                begin
                    fCierraEmpresa();
                    fTerminaSDK();

                    wResult := e.Message;
                end;
            end;
        end;
    end
    else
        wResult := 'El XML por Timbrar no existe';

    wXMLTimbrado := wResult;
end;

y así lo llamo

Código Delphi [-]
CoInitialize(nil);

TimbradoXML := TTimbrado.Create(wRuta);
wResultado := TimbradoXML.wXMLTimbrado;
__________________
Atte.

«° ßåRôµ Dâµµ¥-Bõ¥ °»
v. 2007
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
threads DarkSton Varios 5 13-06-2017 14:40:07
"Plantillas" para tipos de documentos. santiago14 Varios 1 17-10-2013 19:53:57
Formato de partición para "Mis Documentos" Ñuño Martínez Windows 9 12-06-2008 16:31:18
Threads in DLL's Gianni Varios 0 20-07-2007 22:18:23
Propiedades y Métodos para Documentos Word elixir_Gabriela Servers 2 28-12-2006 15:22:42


La franja horaria es GMT +2. Ahora son las 14:49:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi