× Linguagem de Programação ADVPL

Perguntas While em Alias filtrado no Browse

Mais
9 anos 10 meses atrás #27160 por joaocarloscorrea
Boa tarde! houve a necessidade de eu precisar somar alguns valores de uns campos virtuais da browse, estou com dificuldade em como fazer um loop para percorrer apenas os registros filtrados pelo usuario no Browse.

Estou fazendo algo como:

Local aAreaAB6
aAreaAB6 := AB6->(GetArea())
nSoma := 0

while AB6->(!EOF())
_cQuery2 := "Select SUM(AB8_TOTAL) as TOTAL "
_cQuery2 += "from AB8010 "
_cQuery2 += "Where substring(AB8_NUMOS,1,6) = '"+AB6->AB6_NUMOS+"' and D_E_L_E_T_ <> '*' and AB8_FILIAL = '01' "
cAlias2 := CriaTrab(,.F.)
TcQuery _cQuery2 NEW Alias cAlias2
DbSelectArea("cAlias2")
dbGoTop()
nSoma := nSoma + cAlias2->TOTAL

AB6->(dbSkip())
enddo

Porem ao debuggar ele começa no registro ok, porem percorre até o final do AB6, como faço para ele fazer o loop apena nos registros filtrados?

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #27161 por afppellegrini
Boa tarde João Carlos,
Faltou um while para percorrer o resultado da sua query, segue exemplo abaixo:

Local aAreaAB6
aAreaAB6 := AB6->(GetArea())
nSoma := 0

while AB6->(!EOF())
	_cQuery2 := "Select SUM(AB8_TOTAL) as TOTAL "
	_cQuery2 += "from AB8010 "
	_cQuery2 += "Where substring(AB8_NUMOS,1,6) = '"+AB6->AB6_NUMOS+"' and D_E_L_E_T_ <> '*' and AB8_FILIAL = '01' "
	TcQuery _cQuery2 NEW Alias "cAlias2"
	DbSelectArea("cAlias2")
	dbGoTop()
	If !Eof("cAlias2")
		ConOut("|Iniciando Soma...                                         |")
		While  !Eof("cAlias2")
			nSoma := nSoma + cAlias2->TOTAL
			dbSkip()
		EndDo
	Else
		nSoma := 0
		MsgStop("Nenhum registro encontrado em cAlias2!","ATENÇÃO")
	EndIf
	dbCloseArea("TF100")
	AB6->(dbSkip())
enddo

Espero ter ajudado!


Obrigado.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #27162 por joaocarloscorrea
Opa! agradeço pela resposta rapida! porem essa query que eu criei ela serve apenas para somar o valor da OS, então o retorno dela é apenas um campo: cAlias2->TOTAL que contem o valor total da OS, o que eu preciso é fazer essa query rodar em CADA OS filtrada no browse, por exemplo:

O usuario filtrou as OS abertas dele mesmo e resultou em:

Filial | OS | CLIENTE | TOTAL |
01 0001346 CLIENTE 1 190,00
01 0001347 CLIENTE 2 200,00
01 0001348 CLIENTE 3 300,00

Ao usar esse filtro feito pelo usuario, criei uma função para executar a soma das OS (pois por padrão o sistema n armazena o valor da OS em nenhuma variavel, por isso eu uso a query pra somar) assim que o usuario selecionar a opção era pro meu programa percorrer cada OS, obter seu valor, e retornar na tela a soma das OS, como nesse exemplo R$: 690,00.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #27163 por afppellegrini
Ok, Entendi.
Qual o ponto de entrada que está utilizando?

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 10 meses atrás #27164 por joaocarloscorrea
Não estou usando nenhum ponto de entrada, apenas usando mBrowse() no alias AB6 onde vou criar algumas legendas customizada, trazer algumas funções.

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.103 segundos
Joomla templates by a4joomla