- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Tratar quebra de linha campo Memo em relatório
×
Linguagem de Programação ADVPL
Perguntas Tratar quebra de linha campo Memo em relatório
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
9 anos 6 meses atrás #28237
por inocenciojr
Tratar quebra de linha campo Memo em relatório foi criado por inocenciojr
Boa Noite Pessoal,
Alguém consegue me dar uma luz de como tratar as quebras de linha nos campos MEMO?
Estou tentando corrigir um fonte aqui mas não consigo corrigir isso. Registros mais antigos ele imprime certinho com as quebras de linha certas. Os registros mais novos ele não faz isso, ele trunca as frases.
Vou postar aqui o trecho que trata a impressão:
Obrigado,
Inocêncio
Alguém consegue me dar uma luz de como tratar as quebras de linha nos campos MEMO?
Estou tentando corrigir um fonte aqui mas não consigo corrigir isso. Registros mais antigos ele imprime certinho com as quebras de linha certas. Os registros mais novos ele não faz isso, ele trunca as frases.
Vou postar aqui o trecho que trata a impressão:
Do While !oReport:Cancel() .And. !(cAliasQry)->(Eof()) .And. (cAliasQry)->ZC_NUMOS == cNumOS
cNumOS := (cAliasQry)->ZC_NUMOS
If oReport:Cancel()
Exit
EndIf
oReport:IncMeter()
For nVias := 1 to MV_PAR14
//nBegin := 1
oReport:nRow := oReport:LineHeight() * 80
//TRATAMENTO PARA CAMPO MEMO
cAuxDet := SZC->ZC_DIARION//MSMM((cAliasQry)->ZC_DIARIO) // Leitura do campo memo da descricao detalhada
_nLinh := MLCount(cAuxDet,_nTamC)
While (nBegin <= _nLinh)
If oReport:Row() > oReport:LineHeight() * 72
oReport:nRow := 10
oReport:nCol := 10
oReport:EndPage()
oReport:nRow := 10
oReport:nCol := 10
oReport:Box( oReport:Row(),oReport:Col(),oReport:Row() + oReport:LineHeight() * ( 93 - nPrinted ) , 2290 )
oReport:Say(oReport:LineHeight() * ( 92 - nPrinted ),2000,STR0014+Space(1)+;
StrZero(If((nBegin/53)<=Int(nBegin/53),Int(nBegin/53),Int(nBegin/53)+1),2)+"/"+;
StrZero(If((_nLinh/53)<=Int(_nLinh/53),Int(_nLinh/53),Int(_nLinh/53)+1),2),oFont2)
EndIf
cTxt := Memoline(OemToAnsi(cAuxDet),_nTamC,nBegin)+' '//(STRTRAN(STRTRAN(STRTRAN(Memoline(OemToAnsi(cAuxDet),_nTamC,nBegin,,.t.),CHR(13),""),CHR(10),""),'\13\10',""))+' '
MSGINFO(cTXT)
oReport:Say(oReport:Row(),300,cTxt)//oReport:PrintText(cTxt,oReport:Row(),300)
oReport:SkipLine()
nBegin++
End
Next nVias
nPrinted ++
(cAliasQry)->(DbSkip())
EndDo
Obrigado,
Inocêncio
Por favor Acessar ou Registrar para participar da conversa.
- Darkbeo
- Desconectado
- Membro Júnior
Menos
Mais
- Postagens: 33
- Obrigados Recebidos: 0
9 anos 6 meses atrás - 9 anos 6 meses atrás #28250
por Darkbeo
Respondido por Darkbeo no tópico Tratar quebra de linha campo Memo em relatório
Você poderia tentar utilizar as funções
MLCount
junto com a
MemoLine
Exemplo:
Onde o tamanho é a quantidade de caracteres de cada linha.
Exemplo:
For x := 1 To MLCount(CampoMemo, Tamanho)
If !Empty( MLCount(CampoMemo, Tamanho) )
If !Empty( MemoLine(CampoMemo, Tamanho, x) )
oPrint:Say( nLin, 0001, OemToAnsi( MemoLine(CampoMemo, Tamanho, x) ))
EndIf
EndIf
Next x
Onde o tamanho é a quantidade de caracteres de cada linha.
Ultima edição: 9 anos 6 meses atrás por Darkbeo.
Por favor Acessar ou Registrar para participar da conversa.
- inocenciojr
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 114
- Obrigados Recebidos: 1
9 anos 6 meses atrás #28266
por inocenciojr
Respondido por inocenciojr no tópico Tratar quebra de linha campo Memo em relatório
Bom dia Roberto,
Obrigado pela ajuda. O fonte que tenho faz isso que passou com algumas "firulas" do antigo programador e utiliza a função PrintText ao invés da Say pois funciona melhor.(Testei com a função SAY, mas não ficou legal e também não fez o que eu precisava)
Porém descobri que na minha base local o mesmo fonte faz o que tem de ser feito.
Acredito que meu problema pode ter alguma relação com a versão do Top Connect e/ou com o Banco de Dados. Pois a minha base local é Sql Server e no servidor é DB2.
Se mais alguém tiver uma dica pode dizer e se eu encontrar a solução posto aqui.
Obrigado
Obrigado pela ajuda. O fonte que tenho faz isso que passou com algumas "firulas" do antigo programador e utiliza a função PrintText ao invés da Say pois funciona melhor.(Testei com a função SAY, mas não ficou legal e também não fez o que eu precisava)
Porém descobri que na minha base local o mesmo fonte faz o que tem de ser feito.
Acredito que meu problema pode ter alguma relação com a versão do Top Connect e/ou com o Banco de Dados. Pois a minha base local é Sql Server e no servidor é DB2.
Se mais alguém tiver uma dica pode dizer e se eu encontrar a solução posto aqui.
Obrigado
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Tratar quebra de linha campo Memo em relatório
Tempo para a criação da página:0.116 segundos