- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Loop para exibição de dados não imprime o ultimo registro.
×
Linguagem de Programação ADVPL
Perguntas Loop para exibição de dados não imprime o ultimo registro.
- cintra_daniel
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 95
- Obrigados Recebidos: 0
10 anos 11 meses atrás #19277
por cintra_daniel
Pessoal Bom dia!
Fiz um loop para imprimir os registros de uma tabela virtual que eu criei, só que eu precisava imprimir o veiculo somente 1 vez e contar quantas registros existem desse veiculo na tabela. Consegui fazer com o loop abaixo, porém como eu sempre imprimo os valores do registro anterior, o ultimo registro ele desconsidera. Eu já fiquei sem idéias, sem alguém puder me ajudar... To com muita urgência de entregar isso e fiquei agarrado.. rs
While ("TRB1")->(!Eof())
If oReport:Cancel()
Exit
EndIf
If (cVeic == TRB1->CODBEB)
cTot++
("TRB1")->(DbSkip())
Else
If !Empty(cVeic)
oSection2:Cell("PLACA"):SetValue(cVeic)
oSection2:Cell("FAMILIA"):SetValue(cFam)
oSection2:Cell("MODELO"):SetValue(cMod)
oSection2:Cell("ANO"):SetValue(cAno)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
EndIf
cVeic := TRB1->CODBEB
cFam := TRB1->CODFAMI
cMod := TRB1->NOMEBE
cAno := TRB1->ANO
cTot := 0
("TRB1")->(DbSkip())
EndIf
EndDo
Fiz um loop para imprimir os registros de uma tabela virtual que eu criei, só que eu precisava imprimir o veiculo somente 1 vez e contar quantas registros existem desse veiculo na tabela. Consegui fazer com o loop abaixo, porém como eu sempre imprimo os valores do registro anterior, o ultimo registro ele desconsidera. Eu já fiquei sem idéias, sem alguém puder me ajudar... To com muita urgência de entregar isso e fiquei agarrado.. rs
While ("TRB1")->(!Eof())
If oReport:Cancel()
Exit
EndIf
If (cVeic == TRB1->CODBEB)
cTot++
("TRB1")->(DbSkip())
Else
If !Empty(cVeic)
oSection2:Cell("PLACA"):SetValue(cVeic)
oSection2:Cell("FAMILIA"):SetValue(cFam)
oSection2:Cell("MODELO"):SetValue(cMod)
oSection2:Cell("ANO"):SetValue(cAno)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
EndIf
cVeic := TRB1->CODBEB
cFam := TRB1->CODFAMI
cMod := TRB1->NOMEBE
cAno := TRB1->ANO
cTot := 0
("TRB1")->(DbSkip())
EndIf
EndDo
Por favor Acessar ou Registrar para participar da conversa.
- THALESCOTR
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 124
- Obrigados Recebidos: 0
10 anos 11 meses atrás - 10 anos 11 meses atrás #19300
por THALESCOTR
Respondido por THALESCOTR no tópico Loop para exibição de dados não imprime o ultimo registro.
Bom dia Daniel,
apenas coloque abaixo do seu endDo, a impressão novamente para que saia o ultimo registro.
Ajustei o seu loop tbm.
Tente assim:
While ("TRB1")->(!Eof())
If oReport:Cancel()
Exit
EndIf
If (cVeic == TRB1->CODBEB)
cTot++
Else
If !Empty(cVeic)
oSection2:Cell("PLACA"):SetValue(cVeic)
oSection2:Cell("FAMILIA"):SetValue(cFam)
oSection2:Cell("MODELO"):SetValue(cMod)
oSection2:Cell("ANO"):SetValue(cAno)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
cVeic := TRB1->CODBEB
cFam := TRB1->CODFAMI
cMod := TRB1->NOMEBE
cAno := TRB1->ANO
cTot := 0
EndIf
("TRB1")->(DbSkip())
EndDo
//---SOLUÇÃO
If !Empty(cVeic)
oSection2:Cell("PLACA"):SetValue(cVeic)
oSection2:Cell("FAMILIA"):SetValue(cFam)
oSection2:Cell("MODELO"):SetValue(cMod)
oSection2:Cell("ANO"):SetValue(cAno)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
EndIf
Att
Thales
apenas coloque abaixo do seu endDo, a impressão novamente para que saia o ultimo registro.
Ajustei o seu loop tbm.
Tente assim:
While ("TRB1")->(!Eof())
If oReport:Cancel()
Exit
EndIf
If (cVeic == TRB1->CODBEB)
cTot++
Else
If !Empty(cVeic)
oSection2:Cell("PLACA"):SetValue(cVeic)
oSection2:Cell("FAMILIA"):SetValue(cFam)
oSection2:Cell("MODELO"):SetValue(cMod)
oSection2:Cell("ANO"):SetValue(cAno)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
cVeic := TRB1->CODBEB
cFam := TRB1->CODFAMI
cMod := TRB1->NOMEBE
cAno := TRB1->ANO
cTot := 0
EndIf
("TRB1")->(DbSkip())
EndDo
//---SOLUÇÃO
If !Empty(cVeic)
oSection2:Cell("PLACA"):SetValue(cVeic)
oSection2:Cell("FAMILIA"):SetValue(cFam)
oSection2:Cell("MODELO"):SetValue(cMod)
oSection2:Cell("ANO"):SetValue(cAno)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
EndIf
Att
Thales
Ultima edição: 10 anos 11 meses atrás por THALESCOTR.
Por favor Acessar ou Registrar para participar da conversa.
- cintra_daniel
- Autor do Tópico
- Desconectado
- Membro Especialista
Menos
Mais
- Postagens: 95
- Obrigados Recebidos: 0
10 anos 11 meses atrás #19304
por cintra_daniel
Respondido por cintra_daniel no tópico Loop para exibição de dados não imprime o ultimo registro.
Bom dia Thales!
Muito Obrigado desde já meu amigo. Ótima a sua solução... porém eu resolvi de outra forma, segue abaixo como eu fiz.
Após o EndDo
("TRB1")->(dbSkip(-1))
oSection2:Cell("PLACA"):SetValue(TRB1->CODBEB)
oSection2:Cell("FAMILIA"):SetValue(TRB1->CODFAMI)
oSection2:Cell("MODELO"):SetValue(TRB1->NOMEBE)
oSection2:Cell("ANO"):SetValue(TRB1->ANO)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
Mas fica ai no post as duas formas de resolver esse problema.. ;D
Muito Obrigado desde já meu amigo. Ótima a sua solução... porém eu resolvi de outra forma, segue abaixo como eu fiz.
Após o EndDo
("TRB1")->(dbSkip(-1))
oSection2:Cell("PLACA"):SetValue(TRB1->CODBEB)
oSection2:Cell("FAMILIA"):SetValue(TRB1->CODFAMI)
oSection2:Cell("MODELO"):SetValue(TRB1->NOMEBE)
oSection2:Cell("ANO"):SetValue(TRB1->ANO)
oSection2:Cell("QTD2"):SetValue(cTot+1)
oSection2:PrintLine()
Mas fica ai no post as duas formas de resolver esse problema.. ;D
Por favor Acessar ou Registrar para participar da conversa.
- Fórum
- Protheus/Microsiga/Totvs
- AdvPL (Advanced Protheus Language)
- Dúvidas Gerais
- Loop para exibição de dados não imprime o ultimo registro.
Tempo para a criação da página:0.068 segundos