PERGUNTAS E RESPOSTAS
 
Bem Vindo, Visitante  Todos os Fórums
  Diversos
Enviar para a impressoraImprimir  Enviar e-mail para um amigoEnviar Para um Amigo
Precisa estar Logado

Subject Assunto:
Dúvidas - Totalizador
Versão:
11
Plataforma:
Microsoft
Complemento:
DB:
SQL Server
Complemento:
LinkedIn
Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário HARDJF 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


Foto
Mensagem do Enviar e-mail Abrir o Perfil do usuário CRISTIAM 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

 Mudar para Fórum

 

 

 
 
   
Pagina Principal Shopping PROTHEUS Tire suas duvidas Vagas Microsiga em todo Brasil Aprofunde seus conhecimentos Noticias Online Fale Conosco Pagina Principal