| Autor |
Tópico  |
|
marcio
Membro Avançado
   
Brasil
1158 Mensagens |
Postado - 28/07/2010 : 07:56:45
olá amigo,s bom diaEstou precisando de gerar no meu sistema cartas de cobrança. Até ai blz, mas queria poder pesonaliza gerando para o word. Por exemplo o lojista 001 TEM UM MODELO DE CARTA, já o lojista 002 TEM OUTRO e assim por diante. Dai minha pergunta seria. Como gerar isso para o word. Por exemplo seria assim usando 02 tabelas. A tabela de Clientes, onde pegaria os dados cadastrais dele. e a tabela de Débitos que pegaria os débitos dele em aberto. Algo parecido com isso
*========================================================== Nome da Loja Endereço da Loja Bairro da Loja Tel da Loja *========================================================== Prezado cliente <dados do cliente>, informamos que constam em nossas arquivos os seguintes títulos em aberto. Numero Vencimento Valor 00023/03 01/01/2010 1.235,80 00034/02 05/01/2010 2.345,67 00043/01 10/01/2010 4.567,90 Demais dados da carta etc..... *-------------------------------------------------------Fim Porem esta carta seria para um cliente ou para vários clientes de uma vez. Então seria legal gerar em um unico arquivo de word tudo, com as devidas quebras de páginas. ou se for complicar demais um por vez, dai tento fazer um outra forma para funcionar..
informaisvrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 / fwh808+sqllib(atual) Msn.: mastermarvrb@msn.com |
Luisão
Membro Avançado
   
Brasil
618 Mensagens |
Postado - 28/07/2010 : 09:02:34
Márcio, eu ainda não usei a TRichEdit, mas acho que serviria para este caso.Você pode criar os documentos diretamente no word e salvar como RTF. Nesse RTF você teria textos como $CODIGO, $NOME, $VALOR, etc. No RichEdit você abriria o modelo a sua escolha e trocaria, $CODIGO por Cli->Codigo, $NOME por Cli->Nome, etc. Acho que por esse modo seria mais fácil, já que esta classe já possui métodos para trocar string, impressão, edição, etc. Luis Fernando Jr. (Luisão) Leme/SP -- "Death smiles at us all. All a man can do is smile back" FWH8.01 + SQLLIB 1.9d + xHB 1.10 + xDev 0.65 + @SAY + [Ghost/Java]Script E-Mail: juninho.luisao@gmail.com MSN: juninho_luisao@hotmail.com |
marcio
Membro Avançado
   
Brasil
1158 Mensagens |
Postado - 28/07/2010 : 09:13:45
OK amigo Obrigado por responder. Se souber algo. informaisvrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 / fwh808+sqllib(atual) Msn.: mastermarvrb@msn.com
|
marcio
Membro Avançado
   
Brasil
1158 Mensagens |
Postado - 28/07/2010 : 12:50:37
olá amigos, tentei usar os exemplos de pesquisa aqui, mas não funcionouinformaisvrb@gmail.com FWHX 2.6+ SQLLIB + xDev + rpv + MYSQL 5.0 / fwh808+sqllib(atual) Msn.: mastermarvrb@msn.com |
Theotokos
Membro Avançado
   
Brasil
406 Mensagens |
Postado - 28/07/2010 : 17:00:27
Eu utilizo no meu sistema a classe TWord, assim: citação:
Procedure CartaCobranca(nCliente) LOCAL dDtVencimento, oDlg, oSay, cDBF, nNTX DEFAULT nCliente := 0 cDBF := DBF() nNTX := INDEXORD() dDtVencimento := Date() cPOrigem := "\ARQUIVOS\CartaCobranca.doc" // Arquivo Modelo Para Impressao da OS If Empty(nCliente) DEFINE DIALOG oDlg TITLE "Até o Vencimento" FROM 10, 10 TO 18, 40 ; COLOR RGB(250, 250, 0), RGB(128, 128, 250) OF oDlg @ 000, 001 SAY oSay PROMPT "Carta até o Vencimento" OF oDlg COLOR RGB(0,0,0), RGB(128,128,250) @ 0.8, 0.5 GET dDtVencimento Picture "99/99/9999" OF oDlg Valid (!Empty(dDtVencimento)) @ 1.2,10 BUTTON oBtn PROMPT "OK" SIZE 50, 20 ACTION (oDlg:End()) UPDATE OF oDlg ACTIVATE DIALOG oDlg CENTERED End Sel("BanClien",1) DbGoTop() While !EOF() If !Empty(nCliente) If D_NUMERO <> nCliente DbSkip(1) Loop End End cArq := "C"+StrZero(D_NUMERO,5) If !File("DBF\PRAZO\"+cArq+".DBF") DbSkip(1) Loop End cStrNota := '' cStrVenc := '' nTotal := 0.00 Sel(cArq,3) DbGoTop() While !EOF() If VA_DATVENC <= dDtVencimento nTotal += CalcPrestacao(VA_VALPRES,VA_DATVENC) cStrVenc += ", "+DtoC(VA_DATVENC) cStrNota += ", "+AllTrim(Str(VA_NUMPEDI)) End DbSkip(1) End DbCloseArea() If !Empty(nCliente) If Empty(nTotal) MsgStop( "ESTE CLIENTE NAO ESTA INADIMPLENTE","INADIMPLENTE") Exit End End Sel('BanClien',1) cPArqDoc1 := "\OS\Carta_"+cArq+".doc" * aCampos := { } AADD(aCampos, {"cliente" , D_NOME }) AADD(aCampos, {"cpf" , "CPF : "+D_CNPJ+", "+"RG : "+D_INSCRICA }) AADD(aCampos, {"endereco" , D_Endereco}) AADD(aCampos, {"bairro" , D_Bairro }) AADD(aCampos, {"cidade" , D_Cidade }) AADD(aCampos, {"estado" , D_ESTADO }) AADD(aCampos, {"cep" , D_CEP }) * AADD(aCampos, {"nota" , cStrNota }) AADD(aCampos, {"vencimento" , cStrVenc }) AADD(aCampos, {"total" , Transform(nTotal,"@E R$ 9,999.99")}) * nCopia := 1 * PrtWord( aCampos, cPOrigem, cPArqDoc1, .f., nCopia ) * If !Empty(nCliente) If D_NUMERO = nCliente Exit End End * DbSkip(1) * End DbCloseArea() If !Empty(cDBF) Sel(cDBF,nNTX) End Return Function PrtWord( aCampos, cPOrigem, cPArqDoc, lTela, nPrtCopia ) Local oWord DEFAULT lTela := .F. DEFAULT nPrtCopia := 1 // Copia Modelo do Recibo cOrigem := curdrive()+":\"+GetCurDir()+cPOrigem cArqDoc := curdrive()+":\"+GetCurDir()+cPArqDoc COPY FILE (cOrigem) TO (cArqDoc) // Imprime Recibo oWord := TWord():New() If ( oWord:IsVisible() ) oWord:Hide() Endif oWord:OpenDoc( cArqDoc ) // Inicio for x=1 to len( aCampos ) oWord:Replace( '['+aCampos[x,1]+']' , aCampos[x,2] ) next // Fim If lTela oWord:Save( cArqDoc ) // ASSIM PARA VISUALIZAR oWord:Visualizar() Else oWord:Save( cArqDoc ) oWord:PrintDoc( .f., , , , , , , nPrtcopia) oWord:Close() End Return(.T.)
Desta forma eu crio o arquivo no Word com suas formatações necessarias, imagem o que precisar, e os campos que precisa substituir tipo [cliente], [endereco], etc.
Editado por - theotokos on 28/07/2010 17:02:32 |
|