Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Servers (https://www.clubdelphi.com/foros/forumdisplay.php?f=9)
-   -   Combinar correspondencia (https://www.clubdelphi.com/foros/showthread.php?t=49880)

GustavoCruz 02-11-2007 01:25:54

Combinar correspondencia
 
Hola a todos, tengo una inquietud, bueno realmente en esto estoy totalmente en blanco.

Estoy desarrollando una aplicación que lleva información de prestamos y libranzas, dicha aplicación necesita informar a los clientes, por medio de cartas o correpondencias, que se encuentran en mora o atrasados con sus cuotas; cómo hago, para que mi aplicación invíe esto a word, en el caso que sea necesario modificar las leyendas de las notificaciones.

Espero haberme explicado.

de antemano gracias por sus aportes...:)

Neftali [Germán.Estévez] 02-11-2007 10:07:22

Hace bastante tiempo, en un programa utilizé la combinación de correspondencia de word y la verdad es que funcionaba bastante bien.

Lo que hacía era lo siguiente:
(1) Creaba un fichero de texto (Base de Datos en formato TEXTO) desde el programa con datos de ejemplo; Un único registro con todos los campos de la exportación. Combi.txt
(2) Con este fichero (el Cliente o yo) se prepara el documento de "Combinar correspondencia desde Word"; Se añadían los campos desde Word y servía para diseñar la plantilla.
(3) Luego a la hora de generar los documentos, en el mismo lugar y con el mismo nombre se generaba el fichero con datos reales para realizar el MailMerge.

He buscado el código que hacía el MailMerge; Te lo pongo aquí a ver si te sirve; Está bastante comentado y es bastante sencillo de entender. Está en Delphi 5, que es lo que usaba entonces.

Código Delphi [-]
procedure TFLaunchWord._LaunchImpresion;
var
  JobsIniciales:Integer;
  TP, CP:Integer;
begin

  // Bloque de proteccion de la creacion del Objeto
  try
    // Está vacio ?
    if( VarIsEmpty( WinWord ) ) then begin
      // Self._FLogEnlace1.Add('Creamos el enlace');
      WinWord := CreateOleObject('Word.Basic');
      // Self._FLogEnlace1.Add('Finalizamos el enlace');
    end
    else begin
      //Self._FLogEnlace1.Add('Objeto WinWord Asignado');
      WinWord.AppClose('');
      // Si aun está que lo cierre
      Self._ForceCloseWinword();

      WinWord := CreateOleObject('Word.Basic');
    end;

  except
    MessageDlg('Error en la creación de objeto OLE Revise la configuración', mtError, [mbOK], 0);
    Exit;
  end;

  // A partir de aqui empieza la combinacion
  //.........................................................

  // try .. finally
  try

    // try .. except
    try

      // No está asignado ?
      if VarType(WinWord) <> VarDispatch Then begin
        // Self._FLogEnlace1.Add('Error al iniciar MS-Word');
        ShowMessage('Error al iniciar MS-Word')
      end
      Else Begin
        //Self._FLogEnlace1.Add('Abrimos el fichero: ' + Self._FFileName);
        WinWord.FileOpen(Self._FFileName);

        // Bloque de proteccion para el MailMerge (por si el doc no tiene campos)
        try

          //Self._FLogEnlace1.Add('Realizamos el "merge" entre Word y Base Datos');
          WinWord.MailMergeToDoc;
          //Self._FLogEnlace1.Add('Imprimimos el fichero Word');

        except on E:EOLEException do begin

            // Nada

          end;
        end;

        // Lobs en cola antyes de enviar la impresión
        JobsIniciales := _EnumJobs;
        WinWord.FilePrint(,,,,,,,Self._FCopias);
        sleep(500);

        // Mientras no se haya finalizado el proceso...
        while (_EnumJobs <> JobsIniciales) do begin

          Self._GetPagesLastJob(TP, CP);
          Self.LabelProceso.Caption := Format('Enviando página  %d',[TP]);
          Self.LabelProceso.Repaint;
          Self.LabelProceso.Refresh;
          Application.ProcessMessages;
          sleep(500);

        end;

        // Por seguridad
        sleep(3000);

        // LAbel de proceso completado
        Self.LabelProceso.Caption := 'Completado';
        Self.LabelProceso.Repaint;
        Self.LabelProceso.Refresh;

        // cerrar los ficheros abiertos
        WinWord.FileCloseAll(2);

      End;
    except

      //Self._FLogEnlace1.Add('Error en el enlace con Word');
      MessageDlg('Error en el enlace con Word'#13#13 +
               'Revise la configuración'#13#13 + 'Fichero: ' + Self._FFileName, mtError, [mbOK], 0);
    end;

  finally

    // Cerrar y liberar
    WinWord.AppClose('');
    WinWord := UnAssigned;

    Self.Close;

  End;
end;


La franja horaria es GMT +2. Ahora son las 13:52:43.

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