Calculo no get

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Calculo no get

Mensagem por JoséQuintas »

Dá pra dizer que aperfeiçoei a rotina... kkkk

Código: Selecionar todos

FUNCTION CalculoNoGet( ... )

   RETURN .T.
Pra que serve?
Imagine vários cálculos no GET... a complicação que fica.
Agora com essa função - apenas exemplo:

Código: Selecionar todos

@ 3, 5 GET mQtde PICTURE "@E 999,999,999.99" VALID ;
   CalculoNoGet( mValorItem := mQtde * mValorUnitario, ;
      mDesconto := mValorItem * mPercentualDesconto, ;
      mIcms        := ( mValorItem - mDesconto ) * mAliquotaIcms )
Substituiu minha anterior ReturnValue( .T., cálculos )
A função não precisa fazer nada, apenas serve pra "organizar" todos os possíveis cálculos.
Um OkQtde() poderia ser interessante, mas precisaria passar muitas variáveis como parâmetro.


Mas a mais legal de hoje foi esta:
A ANP não aceita quantidade fracionada, e isso pode acontecer com combustível.
Como resolver?
Colocar algo específico para o cliente, para o grupo combustíveis, para uma lista de NCM, indicar no produto se aceita decimal?
Ué.. o que vai pra ANP tem código da ANP.... pronto... resolvido.

Código: Selecionar todos

STATIC FUNCTION QtdeOk( mipQtde )

   IF SubStr( jpitem->ieUnid, 1, 2 ) == "UN" .AND. Str( Int( mipQtde ), 16, 5 ) != Str( mipQtde, 16, 5 )
      MsgStop( "INVÁLIDO!" + hb_eol() + "Se produto vendido por unidade, quantidade NÃO pode conter decimais" )
      RETURN .F.
   ENDIF
   IF ! Empty( SoNumeros( jpitem->ieAnp ) ) ) .AND. Str( Int( mipQtde ), 16, 5 ) != Str( mipQtde, 16, 5 )
      MsgStop( "INVÁLIDO!" + hb_eol() + "ANP NÃO aceita quantidade com decimais" )
      RETURN .F.
   ENDIF

   RETURN .T.
Pronto.
Pode ser usado pra qualquer cliente e qualquer produto, sem exceção.
Nada de gambiarra, nada de complicação, nada de parâmetros adicionais, manutenção fácil.
E quando cadastrarem produtos novos... com código ANP... não precisa alterar mais nada.

Aproveitando, pra "apertar novamente a tecla":

Não tem nada aí de "expert", são coisas simples que todos podem fazer.
E um aplicativo.... pode até ser complicado... mas é feito com a combinação de muitas coisas simples.

A pergunta que todos devem fazer:
Estão fazendo muitas coisas simples pra resolver algo complexo, ou estão complicando até o que é simples?
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Calculo no get

Mensagem por JoséQuintas »

Achei tão interessante postar que coloquei antes de terminar.
erro.png
E aproveitar pra comentar o seguinte: Esse é um recurso do HBMK2 + Harbour

O HBMK2 e o Harbour estão prontos para serem usados em IDE.
Basta indicar -ge1, que é um formato de saída mais padrão pra IDE.
Nessas horas facilita muito, porque basta clicar no erro... (mas aí já é recurso do PNotepad)
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder