GARANTIR DESCONTO

Fórum Contrato no Word via Delphi #273014

18/03/2005

0

Bom galera estou precisando fazer um contrato no word via delphi mas o contrato ja esta pronto, um modelo e eu só tenho que alterar os valores. Até ai eu consegui fazer blz, o problema sao os itens do contrato que é de soja e por isso o numero de itens varia muito de um contrato para outro.
Um um contrato tem 3 variedades de soja e outro tem 5. ja usei obejto do Excel, tabela do word e tal... mas nao consegui formatar usando OlEvARIANT ...

Gostaria de continuar usando OleVariant mas se tiverem tutorias com WordApplication tambem server... obrigado.


Xanatos

Xanatos

Responder

Post mais votado

21/03/2005

Bom ...pesquisei muito e consegui fazer o que queria e gostaria de postar para que os membros do forum possam utilizar.


procedure TrocarString(Str1, Str2: string; R: Range);
var
  Texto1, Texto2: OleVariant;
  M: OleVariant;

begin
  Texto1:= Str1;
  Texto2:= Str2;
  M:= ´2´; // 0 - nao mudar 1 - Mudar a primeira ocorrencia 2 - Mudar todas as ocorrencias

  R.Find.Execute(Texto1, M,EmptyParam,EmptyParam,EmptyParam,
        EmptyParam,EmptyParam,EmptyParam, EmptyParam, Texto2, M,
          EmptyParam,EmptyParam,EmptyParam, EmptyParam);

end;

// Preenchimento do Contrato
procedure TfrmPedidoVenda.BitBtn1Click(Sender: TObject);
Var
  Doc: _Document;
  T: Table;
  FileName: OleVariant;
  Linha:OleVariant;
  teste: boolean;
  Ini, Fim: OleVariant;
  R: Range;
  Direction: OleVariant;
  Texto,Texto2: Olevariant;
  Cont: integer;
  TotalQtd: integer;
  TotalValor: Currency;
  Vencimentos: string;
begin
  // Especificando o nome do Documento Modelo para o Contrato
  FileName := ´c:\CONTRATO DE VENDA SEMENTE SOJA2.doc´;
  WordApplication1.Connect;
  // Abertura do Documento
  WordApplication1.Documents.Open(FileName, EmptyParam, EmptyParam, EmptyParam,
        EmptyParam, EmptyParam, EmptyParam, EmptyParam,
      EmptyParam, EmptyParam, EmptyParam, EmptyParam);


  WordDocument1.ConnectTo(WordApplication1.ActiveDocument);


  WordApplication1.Visible:=True; // Mostrando o Word
  Doc := WordApplication1.ActiveDocument;

  R:= WordApplication1.Selection.Range;

   // Cabeçalho do Contrato
  TrocarString(´´, DM.QueryPedidosVendaNR_PEDIDO.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaNOME_SAFRA.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaNOME_CLIENTE.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaDESC_ENDERECO.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaCIDADE.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaUF.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaCPF.AsString+DM.QueryPedidosVendaDIGITO_CPF.AsString, R);
  TrocarString(´´, DM.QueryPedidosVendaINSC_ESTADUAL.AsString, R);

  // Manipulacao da Tabela...
  T := Doc.Tables.Item(1); // Selecionando a Tabela
  T.Cell(2,1).Select; 

  Linha:= T.Rows.Item(2);
  Cont:= 1;
  // Calculando o Numero de linhas em funcao do numero de Itens
  while Cont < DM.QueryPedidosVendaItens.RecordCount do
  begin
    T.Rows.Add(Linha);
    Inc(Cont);
  end;

  TotalQtd:=0;
  TotalValor:= 0;
  DM.QueryPedidosVendaItens.First;
  Cont:=2;
  // Looping para o preenchimento da Tabela de Itens do Contrato
  While not DM.QueryPedidosVendaItens.Eof do
  begin
    T.Cell(Cont, 1).Range.Text  := DM.QueryPedidosVendaItensNOME_PRODUTO.AsString+´/´+DM.QueryPedidosVendaItensCLASSE.AsString;

    T.Cell(Cont, 2).Range.Text  := DM.QueryPedidosVendaItensPENEIRA.AsString;

    T.Cell(Cont, 3).Range.Text  := DM.QueryPedidosVendaItensQUANTIDADE.AsString;

    T.Cell(Cont, 4).Range.Text  :=  FloatToStrF(DM.QueryPedidosVendaItensVALOR_TOTAL.asFloat / DM.QueryPedidosVendaItensQuantidade.AsFloat,ffNumber,10,2);

    T.Cell(Cont, 5).Range.Text  :=   FloatToStrF(DM.QueryPedidosVendaItensVALOR_TOTAL.Value,ffNumber,15,2); 
    TotalQtd:= totalQtd + DM.QueryPedidosVendaItensQUANTIDADE.AsInteger;
    TotalVAlor:= TotalValor + DM.QueryPedidosVendaItensVALOR_TOTAL.Value;
    DM.QueryPedidosVendaItens.Next;
    Inc(Cont);
  end;

  T.Cell(T.Rows.Count, 3).Range.Text:= IntToStr(TotalQtd); // Quantidade Total
  T.Cell(T.Rows.Count, 5).Range.Text:= FloatToStrF(TotalValor,ffNumber,15,2); // Valor Total dos Itens


  DM.QueryContasReceber.First;
  Vencimentos:=´´;
  while not DM.QueryContasReceber.Eof do
  begin
    Vencimentos:= Vencimentos + DM.QueryContasReceberDATA_VCTO.AsString+´ R$´+
            FloatToStrF(DM.QueryContasReceberVALOR_DOCUM.Value,ffNumber,15,2);
    DM.QueryContasReceber.Next;
    if not DM.QueryContasReceber.Eof then
      vencimentos:= Vencimentos + ´ - ´;

  end;
  //Corpo do Contrato

  TrocarString(´´, Vencimentos, R);
  TrocarString(´´, dm.QueryObsOBSERVACOES.AsString, R);

  TrocarString(´´, FormatDateTime(´"Rondonópolis," dd "de" mmmm "de" yyyy´, Date), R);
  TrocarString(´´, DM.QueryPedidosVendaTESTE1.AsString , R);
  TrocarString(´´, DM.QueryPedidosVendaCPF_TESTE1.AsString+´-´+DM.QueryPedidosVendaDIGITO_CPF_TESTE1.AsString , R);
  TrocarString(´´, DM.QueryPedidosVendaTESTE2.AsString , R);
  TrocarString(´´, DM.QueryPedidosVendaCPF_TESTE2.AsString+´-´+DM.QueryPedidosVendaDIGITO_CPF_TESTE2.AsString , R);
  WordApplication1.Disconnect;
end;



Xanatos

Xanatos
Responder

Gostei + 2

Mais Posts

22/02/2016

Renato Freitas

Não consegui identificar esse tipo: _document , você poderia me ajudar?
Responder

Gostei + 0

22/02/2016

Renato Freitas

Acho que é necessário adicionar essas units na uses:

- ComObj
- OleServer
- WordXP
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar