Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

wilsoncrescencio

subistituindo contrato via word por via delphi

Recommended Posts

Eu tenho em um sistema esse contrato http://www.freewebs.com/wilsonfilho/contract.doc

acontece que eu gostaria de substitui-lo por um feito em Quick Report ou Rave Reports.

Qual dos dois seria melhor para o que quero?

Que componentes eu deveria utilizar para que o texto fica-se assim bonito em duas colunas com os dados fornecidos pelo sitema?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom cara, eu utilizo o seguinte...

 

mando o word fazer o trabalho pra mim mesmo...

 

hehe!!!

 

segue abaixo um exemplo de como faço....

 

Parte do USES...

 

uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, FrmCadPadrao, Buttons, ExtCtrls, StdCtrls, Grids, DBGrids,  ComCtrls, DB, DBTables, ComObj;

 

procedure TFrmCadContrato.SpeedButton1Click(Sender: TObject);Var WinWord, Docs, Doc: Variant;	arquivo, prazo : string;	anoinic, mesinic, diainic,anofim, mesfim, diafim : Word;	subtrair : integer;Const mes30 = [4,6,9,11];	  mes31 = [1,3,5,7,8,12];begin  inherited;  // Pega o nome do arquivo...  arquivo := ExtractFilePath(Application.ExeName) + 'CONTRATOESTACIONAMENTO.doc';  // Cria objeto principal de controle  WinWord := CreateOleObject('Word.Application');  //Não Mostra o Word  WinWord.Visible := False;  // Pega uma interface para o objeto que manipula documentos  Docs := WinWord.Documents;  // Abre um Documento  Doc := Docs.Open(arquivo);  //Substitui texto via "name parameters"  //Nome nossa empresa  Doc.Content.Find.Execute(FindText := '(Nome da Empresa)', ReplaceWith := Table8Contrato.Text);  //Sede nossa empresa  Doc.Content.Find.Execute(FindText := '(SEDE)', ReplaceWith := FormIniciar.Label1.Caption); // Cliente  //Cnpj nossa empresa  Doc.Content.Find.Execute(FindText := '(CNPJ)', ReplaceWith := FormIniciar.Label17.Caption);  //Ie nossa empresa  Doc.Content.Find.Execute(FindText := '(IE)', ReplaceWith := FormIniciar.Label18.Caption);  //nome da empresa/nome do cliente  Doc.Content.Find.Execute(FindText := '(EMPRESA)', ReplaceWith := FormIniciar.Label21.Caption);  //sede da empresa do cliente  Doc.Content.Find.Execute(FindText := '(SEDEEMRPESA)', ReplaceWith := FormIniciar.Label19.Caption);  //cnpj da emrpesa do cliente  Doc.Content.Find.Execute(FindText := '(CNPJEMPRESA)', ReplaceWith := FormIniciar.Label16.Caption);  //ie da empresa do cliente  Doc.Content.Find.Execute(FindText := '(IEEMPRESA)', ReplaceWith := FormIniciar.Label13.Caption);  // Grava documento  Doc.SaveAs(ExtractFilePath(Application.ExeName)+'\Contratos\Contrato'+TblContratoCod_cont.AsString);  // Imprime  Doc.PrintOut(false);  // Fecha o Word  WinWord.Quit;end;

Doc.Content.Find.Execute(FindText := '(CNPJEMPRESA)', ReplaceWith := FormIniciar.Label16.Caption);
Nesse caso, nessa parte...Ele procura pela palavra CNPJEMPRESA e substitui pelo desejado...

 

agora cabe a você ver o que mais lhe agrada...

 

 

flw aew!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pô Hugo... essa saída q você me deu foi dez cara.você mandou muito bem...Brigadão...Agora, quando eu colocar o sistema em rede eu tenho que compartilhar a pasta do contrato junto com o sistema?Ou o Word da máquina do usuário faz o resto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, qq é isso cara, to aqui pra tal!!!

 

Então, vamos as explicações...

 

Compartilhando o sistema, eu acho q seria bom...

 

// Pega o nome do arquivo...  arquivo := ExtractFilePath(Application.ExeName) + 'CONTRATOESTACIONAMENTO.doc';

Com trecho acima ele faz o seguinte... pega o caminho e nome do arquivo que é o molde, o alicerce para a construção do contrato...

 

no caso, se você for utilizar muitas pessoas mexendo com o base ao mesmo tempo eu sugiro que você inverta um pouco a ordem... e copie o arquivo primeiro, porque? Para não ocorrer o erro de somente leitura pois outro usuário está utilizando esse arquivo, mas acredito que não seja necessário...

 

Quanto ao compartilhamento da pasta dos contratos, inclusive a que possui o contrato fonte acho fundamental...

 

Beleza??

 

QQ dúvida é só postar... vlw?

 

abraço! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu...Desculpa a demora em responder mas aqui na aminha cidade está acoantecendo o dilúvio bíblico e minha conexão é a rádio... aí já viu... tem vez q fico literalmente no ar...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais uma coisinha....Essa linha de código: // Grava documento Doc.SaveAs(ExtractFilePath(Application.ExeName)+'\Contratos\Contrato'+TblContratoCod_cont.AsString);Ela está salvando o contrato dentro de uma pasta chamada contratos certo?Sendo assim ela vai gravar com o nome "contrato" mais o número do Codigo do Contrato. É isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu usei a linha de código dessa maneira Doc.Content.Find.Execute(FindText := '(ALUNO)', ReplaceWith := DM1.NOMEALUNO.Text);Não sofreu nenhuma alteração o documento.no documento eu coloquei "ALUNO" para ser subistituido pelo nome do aluno mas não deu resultado.O que fiz de errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá aí Hugo

O código está dcolocado em um botão (imprimir)

 

procedure TMATRICULAS.Button21Click(Sender: TObject);

Var WinWord, Docs, Doc: Variant;

arquivo, prazo : string;

anoinic, mesinic, diainic,anofim, mesfim, diafim : Word;

 

 

begin

inherited;

 

 

// Pega o nome do arquivo...

arquivo := ExtractFilePath(Application.ExeName) + 'costa.doc';

 

// Cria objeto principal de controle

WinWord := CreateOleObject('Word.Application');

 

//Não Mostra o Word

// WinWord.Visible := False;

 

// Pega uma interface para o objeto que manipula documentos

Docs := WinWord.Documents;

 

// Abre um Documento

Doc := Docs.Open(arquivo);

end;

 

procedure TMATRICULAS.Button18Click(Sender: TObject);

Var WinWord, Docs, Doc: Variant;

arquivo, prazo : string;

anoinic, mesinic, diainic,anofim, mesfim, diafim : Word;

subtrair : integer;

 

Const mes30 = [4,6,9,11];

mes31 = [1,3,5,7,8,12];

 

begin

inherited;

 

 

// Pega o nome do arquivo...

arquivo := ExtractFilePath(Application.ExeName) + 'contrato.doc';

 

// Cria objeto principal de controle

WinWord := CreateOleObject('Word.Application');

 

//Não Mostra o Word

WinWord.Visible := False;

 

// Pega uma interface para o objeto que manipula documentos

Docs := WinWord.Documents;

 

// Abre um Documento

Doc := Docs.Open(arquivo);

 

 

//Substitui texto via "name parameters"

 

//Ano Letivo

Doc.Content.Find.Execute(FindText := '(ANOLETIVO)', ReplaceWith := DM1.ANOLETIVO_MATRANO.Text);

 

//Nome do Aluno

Doc.Content.Find.Execute(FindText := '(ALUNO)', ReplaceWith := DM1.NOMEALUNO.Text);

 

//RG do Aluno

Doc.Content.Find.Execute(FindText := '(RGALUNO)', ReplaceWith := DM1.RGALUNO.Text);

 

//CPF do Aluno

Doc.Content.Find.Execute(FindText := '(CPFALUNO)', ReplaceWith := DM1.CPFALUNO.Text);

 

//Data de nascimento do aluno

Doc.Content.Find.Execute(FindText := '(NASCIALUNO)', ReplaceWith := DM1.NASCIMENTOALUNO.Text);

 

//Endereço do aluno

Doc.Content.Find.Execute(FindText := '(RUALUNO)', ReplaceWith := DM1.RUAALUNO.Text);

 

//Bairro do aluno

Doc.Content.Find.Execute(FindText := '(BAIRALUNO)', ReplaceWith := DM1.BAIRROALUNO.Text);

 

//Cidade do aluno

Doc.Content.Find.Execute(FindText := '(CIDALUNO)', ReplaceWith := DM1.CIDADEALUNO.Text);

 

//CEP do aluno

Doc.Content.Find.Execute(FindText := '(CEPALUNO)', ReplaceWith := DM1.CEPALUNO.Text);

 

//Estado do aluno

Doc.Content.Find.Execute(FindText := '(ESNO)', ReplaceWith := DM1.ESTADOALUNO.Text);

 

//Telefone residencial do aluno

Doc.Content.Find.Execute(FindText := '(RESALUNO)', ReplaceWith := DM1.RESIDENCIALALUNO.Text);

 

//Nome do Pai

Doc.Content.Find.Execute(FindText := '(NOMPAI)', ReplaceWith := DM1.NOMEPAI.Text);

 

//Nome da Mãe

Doc.Content.Find.Execute(FindText := '(NOMMAE)', ReplaceWith := DM1.NOMEMAE.Text);

 

//Profissão do Pai

Doc.Content.Find.Execute(FindText := '(PROFPAI)', ReplaceWith := DM1.CARGOPAI.Text);

 

//Profissão da Mãe

Doc.Content.Find.Execute(FindText := '(PROFMAE)', ReplaceWith := DM1.CARGOMAE.Text);

 

//CPF do Pai

Doc.Content.Find.Execute(FindText := '(CPFPAI)', ReplaceWith := DM1.CPFPAI.Text);

 

//CPF da Mãe

Doc.Content.Find.Execute(FindText := '(CPFMAE)', ReplaceWith := DM1.CPFMAE.Text);

 

//RG do Pai

Doc.Content.Find.Execute(FindText := '(RGPAI)', ReplaceWith := DM1.RGPAI.Text);

 

//RG da Mãe

Doc.Content.Find.Execute(FindText := '(RGMAE)', ReplaceWith := DM1.RGMAE.Text);

 

//Nome do Responsável Pedagógico

Doc.Content.Find.Execute(FindText := '(NOMERESP)', ReplaceWith := DM1.NOMERESP.Text);

 

//CPF do RESP

Doc.Content.Find.Execute(FindText := '(CPFRESP)', ReplaceWith := DM1.CPFRESP.Text);

 

//TELEFONE RESIDENDIAL Responsável Pedagógico

Doc.Content.Find.Execute(FindText := '(RESRESP)', ReplaceWith := DM1.RESIDENCIALRESP.Text);

 

//RG do RESP

Doc.Content.Find.Execute(FindText := '(RGRESP)', ReplaceWith := DM1.RGRESP.Text);

 

//Nome do Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(NOMERESF)', ReplaceWith := DM1.NOMERESF.Text);

 

//RG do Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(RGRESF)', ReplaceWith := DM1.RGRESF.Text);

 

//CPF Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(CPFRESF)', ReplaceWith := DM1.CPFRESF.Text);

 

//RUA Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(RUARESF)', ReplaceWith := DM1.RUARESF.Text);

 

//BAIRRO Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(BAIRRESF)', ReplaceWith := DM1.BAIRRORESF.Text);

 

//CIDADE Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(CIDRESF)', ReplaceWith := DM1.CIDADERESF.Text);

 

//CEPResponsável Financeiro

Doc.Content.Find.Execute(FindText := '(CEPRESF)', ReplaceWith := DM1.CEPRESF.Text);

 

//ESTADO Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(ESRESF)', ReplaceWith := DM1.ESTADORESF.Text);

 

//TELEFONE RESIDENDIAL Responsável Financeiro

Doc.Content.Find.Execute(FindText := '(RESRESF)', ReplaceWith := DM1.RESIDENCIALRESF.Text);

 

//SÉRIE

Doc.Content.Find.Execute(FindText := '(SERAL)', ReplaceWith := DM1.BAIRRORESF.Text);

 

//VALOR INTEGRAL

Doc.Content.Find.Execute(FindText := '(VLRINTE)', ReplaceWith := DM1.CIDADERESF.Text);

 

//MENSALIDADE

Doc.Content.Find.Execute(FindText := '(MENSDADE)', ReplaceWith := DM1.CEPRESF.Text);

 

// Grava documento

Doc.SaveAs(ExtractFilePath(Application.ExeName)+'\Contratos\Contrato'+DM1.NOMEALUNO.Text);

 

// Imprime

Doc.PrintOut(false);

// Fecha o Word

WinWord.Quit;

 

 

aqui tá uma amostra do contrato http://www.wilsonfilho.v10.com.br/contrato.doc

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo... desculpa cara mil desculpas....Achei o Problema.... eu coloquei entre parênteses nas linhas código, como você pode ver... mas no documento deixei sem o parênteses.Coisa de principiante....Brigadão cara...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Q isso cara, acontece...

 

vi o code, ta legal, era isso mesmo!!!

 

 

 

deu certo??? com o reultado q você queria?

 

 

begininherited;

você TB TA USANDO HERANÇA???

 

ou só copiou o meu code????

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hugo, obrigado pela dica, mas na verdade eu tenho é que extrair os textos de um campo tipo blob em arquivos do ms-access e gravar em um único documento do word e apresentar na tela, estou ajustando esse teu código para ver se consigo fazer funcionar, mas se você puder me adiantar como posso fazer isso, desde já te agradeço. Obrigado

Bom cara, eu utilizo o seguinte...mando o word fazer o trabalho pra mim mesmo...hehe!!!segue abaixo um exemplo de como faço....Parte do USES...

uses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, FrmCadPadrao, Buttons, ExtCtrls, StdCtrls, Grids, DBGrids,  ComCtrls, DB, DBTables, ComObj;
procedure TFrmCadContrato.SpeedButton1Click(Sender: TObject);Var WinWord, Docs, Doc: Variant;	arquivo, prazo : string;	anoinic, mesinic, diainic,anofim, mesfim, diafim : Word;	subtrair : integer;Const mes30 = [4,6,9,11];	  mes31 = [1,3,5,7,8,12];begin  inherited;  // Pega o nome do arquivo...  arquivo := ExtractFilePath(Application.ExeName) + 'CONTRATOESTACIONAMENTO.doc';  // Cria objeto principal de controle  WinWord := CreateOleObject('Word.Application');  //Não Mostra o Word  WinWord.Visible := False;  // Pega uma interface para o objeto que manipula documentos  Docs := WinWord.Documents;  // Abre um Documento  Doc := Docs.Open(arquivo);  //Substitui texto via "name parameters"  //Nome nossa empresa  Doc.Content.Find.Execute(FindText := '(Nome da Empresa)', ReplaceWith := Table8Contrato.Text);  //Sede nossa empresa  Doc.Content.Find.Execute(FindText := '(SEDE)', ReplaceWith := FormIniciar.Label1.Caption); // Cliente  //Cnpj nossa empresa  Doc.Content.Find.Execute(FindText := '(CNPJ)', ReplaceWith := FormIniciar.Label17.Caption);  //Ie nossa empresa  Doc.Content.Find.Execute(FindText := '(IE)', ReplaceWith := FormIniciar.Label18.Caption);  //nome da empresa/nome do cliente  Doc.Content.Find.Execute(FindText := '(EMPRESA)', ReplaceWith := FormIniciar.Label21.Caption);  //sede da empresa do cliente  Doc.Content.Find.Execute(FindText := '(SEDEEMRPESA)', ReplaceWith := FormIniciar.Label19.Caption);  //cnpj da emrpesa do cliente  Doc.Content.Find.Execute(FindText := '(CNPJEMPRESA)', ReplaceWith := FormIniciar.Label16.Caption);  //ie da empresa do cliente  Doc.Content.Find.Execute(FindText := '(IEEMPRESA)', ReplaceWith := FormIniciar.Label13.Caption);  // Grava documento  Doc.SaveAs(ExtractFilePath(Application.ExeName)+'\Contratos\Contrato'+TblContratoCod_cont.AsString);  // Imprime  Doc.PrintOut(false);  // Fecha o Word  WinWord.Quit;end;
Doc.Content.Find.Execute(FindText := '(CNPJEMPRESA)', ReplaceWith := FormIniciar.Label16.Caption);
Nesse caso, nessa parte...Ele procura pela palavra CNPJEMPRESA e substitui pelo desejado...agora cabe a você ver o que mais lhe agrada...flw aew!!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Márcio, obrigao pelo link, mas infelizmente ainda não ajudou, estou fazendo uns ajustes no código do hugo, mas ao invés de gravar o conteúdo do arquivo gerado a partir das tabelas, esta gravando apenas o camilho e o nome do aqruivo, preciso mesmo é gravar o conteúdo do campo Blob, pois ele contém os textos que precisam ser apresentados!!

No caso você quer gerar o arquivo, veja se isto lhe ajuda -> link

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, você entendeu o sentido desse recurso que eu postei acima???

 

é só você colocar no Texto uma palavra Chave...

 

que será substituida por algo que você queira...

 

No caso...

 

EX.:

 

// Pega o nome do arquivo...  arquivo := ExtractFilePath(Application.ExeName) + 'Blob.doc';  // Cria objeto principal de controle  WinWord := CreateOleObject('Word.Application');  //Não Mostra o Word  WinWord.Visible := False;  // Pega uma interface para o objeto que manipula documentos  Docs := WinWord.Documents;  // Abre um Documento  Doc := Docs.Open(arquivo);  //Substitui texto via "name parameters"  //Nome nossa empresa  Doc.Content.Find.Execute(FindText := '(TEXTO)', ReplaceWith := Table1CampoBlob.Value);  // Grava documento  Doc.SaveAs(ExtractFilePath(Application.ExeName)+'\TextoBlob');  // Fecha o Word  WinWord.Quit;

 

Será que assim vai?

 

 

Se não for manda um exemplo do que está acontecendo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ola teria como descrever esta linha por gentileza Doc.Content.Find.Execute(FindText := '(ANOLETIVO)', ReplaceWith := DM1.ANOLETIVO_MATRANO.Text);DM1.ANOLETIVO_MATRANO.Text); ISTO SERIA UM EDIT

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.