Preencher dados em Um Arquivo um Pouco diferente.
Enviado: 20 Fev 2011 16:10
...
Olá nobres colegas, venho até vcs para dividir um problema e poder compartilhar as possíveis soluções.
Em meu sistema consigo atualmente substituir TAGs por determinadas Strings oriundas ou não deu um Banco de Dados, agora meu dilema é um pouco mais complicado um cliente precisa que eu faça imprimir os pedidos em um determinado Layout pré-impresso, até ai não é o problema o fato é que quero aproveitar e fazer tipo um Arquivo Modelo onde ao manipular as TAGs consiga encaixar em qualquer Layout não so deste cliente mas de qualquer outro.
Ok, pq não usar a rotina que já possuo para Substituir TAGs por Strings, a resposta esta na questão dos itens (produtos ou serviços) a serem impressos ser variável.
Já pensei em algumas possibilidades, mas tem uma que me chamou mais a atenção...
Em ANEXO esta um modelo de arquivo de um outro sistema que conheço o qual é muito interessante os colegas analisarem...
Ele possui no inicio uma descrição dos Numeros q referenciam Campos e tb tem caracteres como () q simbolizam que os campos entre () devam sair condensados e na largura maxima definida, além de outras informações onde possibilita determinar o número maximo de itens e após atingida esta quantidade de ites salta para uma nova pagina continuando, caso existam mais itens.
Atualmente para Carnes, Boletos e Contratos utilizo a função MASCARATXT conseguida aqui no fórum com a ajuda dos colegas e adaptada.
Sds.
:)Pos
Olá nobres colegas, venho até vcs para dividir um problema e poder compartilhar as possíveis soluções.
Em meu sistema consigo atualmente substituir TAGs por determinadas Strings oriundas ou não deu um Banco de Dados, agora meu dilema é um pouco mais complicado um cliente precisa que eu faça imprimir os pedidos em um determinado Layout pré-impresso, até ai não é o problema o fato é que quero aproveitar e fazer tipo um Arquivo Modelo onde ao manipular as TAGs consiga encaixar em qualquer Layout não so deste cliente mas de qualquer outro.
Ok, pq não usar a rotina que já possuo para Substituir TAGs por Strings, a resposta esta na questão dos itens (produtos ou serviços) a serem impressos ser variável.
Já pensei em algumas possibilidades, mas tem uma que me chamou mais a atenção...
Em ANEXO esta um modelo de arquivo de um outro sistema que conheço o qual é muito interessante os colegas analisarem...
Ele possui no inicio uma descrição dos Numeros q referenciam Campos e tb tem caracteres como () q simbolizam que os campos entre () devam sair condensados e na largura maxima definida, além de outras informações onde possibilita determinar o número maximo de itens e após atingida esta quantidade de ites salta para uma nova pagina continuando, caso existam mais itens.
Atualmente para Carnes, Boletos e Contratos utilizo a função MASCARATXT conseguida aqui no fórum com a ajuda dos colegas e adaptada.
Código: Selecionar todos
*----------------------------------------------------------------------------*
FUNCTION MascaraTXT(cArquivo,aPesq,aTroca,nLineLen,nTabSize,lWrap, cArqRet)
*----------------------------------------------------------------------------*
/*
* Exemplo..:
FileCopy("Carne.TXT","Carne.TMP")
cArqBase := "Carne.TMP"
aPesq:= {}
AADD(aPesq,"@empresa" )
AADD(aPesq,"@endemp" )
AADD(aPesq,"@cpf" )
AADD(aPesq,"@rg" )
aTroca:={}
AADD(aTroca, User->NOME)
AADD(aTroca,ALLTRIM(User->ENDERECO)+USER->NUMERO )
AADD(aTroca,IIf( Clientes->TIPO=="F", Clientes->CPF, Clientes->CNPJ ) )
AADD(aTroca,IIf( Clientes->TIPO=="F", Clientes->RG, Clientes->INSCRICAO ) )
Mensag("Aguarde... Imprimindo o carnˆ de pagamentos","")
PrintON()
SetPRC(0,0)
MascaraTXT(cArqBase,aPesq,aTroca,150)
*/
* Objetivo : Pesquisar Tags [@] e substituir por outro valor *
*----------------------------------------------------------------------------*
LOCAL iMax, cText, I
IIf( nLineLen = NIL, 150,)
IIf( nTabSize = NIL, 0,)
IIf( lWrap = NIL, .F.,)
IIF( cArqRet = NIL, "Gerado.TXT",)
cText := MemoRead( cArquivo )
Imax := MLCount( cText, nLineLen, nTabSize, lWrap )
aLine:={}
nElemento:=1
cText2 := ""
ret_line := Chr(13) + Chr(10)
FOR I:=1 TO Imax
cLine := MemoLine( cText, nLineLen, I, nTabSize, lWrap )
For nLenLinha:=1 to Len(cLine)
For J:=1 To Len(aPesq)
If aPesq[J] $ cLine
* Define o TAM da TAG
nTamTAG := Len(aPesq[J])
* Define a Posição Final da TAG
nPosFimTAG := ( AT(aPesq[J],cLine) + nTamTAG )
* Define a Posição Inicial do Prim. Espaço Posterior ao Fim da TAG
nPosInEsp := nPosFimTAG + 2
* Define o Tam. da Cadeia de Caract. q sera Eliminada ;
* Que é Igual ao Tamanho da TAG + Espaços Posteriores a TAG
* com o auxilio da Função: FunConEsp
nTamElimi := nTamTAG + (FunConEsp( cLine, nPosInEsp ) - nPosInEsp )
* Define o q sera inserido na proporção q foi eliminada
OqSeraIns := PADR(aTroca[J],nTamElimi)
* Efetua a Troca da TAG pelo Conteúdo
cLine:=STUFF(cLine,AT(aPesq[J],cLine),nTamElimi,OqSeraIns)
EndIf
Next
Next
cText2 := cText2 + cLine + ret_line
memowrit(cArqRet,cText2)
NEXT
RETURN Nil
*----------------------------------------------------------------------------*
Function FunConEsp( LinhaTXT, PosInEsp )
*----------------------------------------------------------------------------*
* Objetivo : * Função para contar qtos espaços tem posteriores a TAG *
*----------------------------------------------------------------------------*
nPosFinEsp := 0
ForEspaco:=.t.
While ForEspaco =.t.
Eh_Espaco := asc(Substr( LinhaTXT, (PosInEsp), 1 ))
IIf( EH_Espaco = 32, PosInEsp++, ForEspaco:=.f.)
If Eh_espaco=13 .or. eh_espaco=10 //.or. eh_espaco=""
exit
Endif
End
nPosFinEsp += PosInEsp
Return nPosFinEsp
:)Pos