|
Bem Vindo, Visitante
|
Todos os Fórums
Diversos
|
Imprimir
Enviar Para um Amigo Precisa estar Logado
|
|
|
Assunto: |
Dúvidas - Totalizador |
|
Versão: |
11 |
|
Plataforma: |
Microsoft |
Complemento: |
|
|
DB: |
SQL Server |
Complemento: |
|
|
|
|
|
Mensagem do
HARDJF
em 15/09/2017, 16:53 h
Local: MG Registro: 10/05/2016 Postagens: 35 |
Prezados
Estou começando a pouco tempo e tenho algumas dúvidas com relação a linguagem, estou alterando um relatório onde preciso guardar a soma de duas colunas "D2_TOTAL" e "D2_CUSTO1" em duas variáveis, cTotal, cCusto.. preciso testar algumas condições.
Ex:
if (cTotal - cCusto) / cTotal * 100 < = 40
nPercent := ZA3->ZA3_COMISS + 1
else
nPercent := ZA3->ZA3_COMISS
Meu fonte está assim
IF !dbSeek(xFilial("ZA3")+cVend)
APMsgAlert("O vendedor "+cVend+" não possui comissões cadastradas. Processamento interrompido.","Atenção!")
Return()
Else
While ZA3->ZA3_VEND == cVend
IF (SUBSTR(cProd,1,Len(Alltrim(ZA3->ZA3_CODPAR))) == Alltrim(ZA3->ZA3_CODPAR)) .And. (Alltrim(ZA3->ZA3_FUNCAO) $ cFuncao)
nPercent := ZA3->ZA3_COMISS
//Preciso testar a condição aqui, se caso for < = 40, vou somar mais 1 a minha variável nPercent, senao buscará o percentual cadastrado na tabela ZA3
nComis := nPercent * nLBruto / 100
nValor := nValor + nComis
EndIf
dbSkip()
EndDo
EndIf
|
|
|
Mensagem do
CRISTIAM
em 16/09/2017, 12:01 h
Local: SP Registro: 10/05/2012 Postagens: 157 |
Bom dia!
não sei o restante do código... mas está meio estranho.
Bom, vamos a sua dúvida...
Vc quer aglutinar os dados da NF de saída ( SD2 ), certo? Caso vc não tenha um laço (while/end) vai precisar criar um... recomendo que vc coloque antes do While ZA3->ZA3_VEND == cVend, seria algo assim:
cCusto := 0
cTotal := 0
SD2->( dbSetOrder(3) ) // D2_FILIAL+D2_DOC+D2_SERIE+...
SD2->( dbSeek( xFilial("SD2") + SF2->F2_DOC + SF2->F2_SERIE ) ) // suponhando que a SF2 esteja posicionada, senão vc substitui pelo Número e Série do Documento lembrando que o tamanho é fundamental!
while ! SD2->( EOF() ) .and. SD2->(D2_FILIAL+D2_DOC+D2_SERIE) == xFilial("SD2")+SF2->(F2_DOC+F2_SERIE)
cCusto += SD2->D2_CUSTO1
cTotal += SD2->D2_TOTAL
SD2->( dbSkip() )
end
if cTotal == 0 // evitar possivel error log
cTotal := 1
endif
// o bloco acima vc acumula as variáveis, agora aplique onde vc colocou o comentário... segue código:
if (cTotal - cCusto) / cTotal * 100 < = 40
nPercent++
endif
// repare que o nPercent já tem o valor do campo, se a condição for verdadeira, apenas soma 1 como vc solicitou.
Recomendo que olhe as boas práticas que coloquei e ajuste seu fonte, pois o dbSkip() quando não tem um Alias informando antes, vai pular para o próximo registro na área que estiver e talvez não seja da tabela que vc deseja.
boa sorte, espero ter ajudado.
abraços
Cristiam
|
|
Para postar no Fórum você precisa efetuar o seu login ou se registrar
|
|