Página 1 de 1

Função e/ou nome pra BetweenValue()

Enviado: 13 Abr 2020 12:00
por JoséQuintas
Criei esta função inicialmente pra checagem de intervalo.
Era IsBetween().
Agora estou fazendo maior uso, pra ajustar valores, então renomeei.
Tem alguma função pronta pra isso?
Ou... teria um nome mais adequado pra isso?

Código: Selecionar todos

FUNCTION BetweenValue( xValue, xMin, xMax )

   LOCAL lIsBetween

   lIsBetween := ( xValue < xMin .OR. xValue > xMax )
   xValue     := Max( Min( xMax, xValue ), xMin )

   RETURN lIsBetween
Exemplos de uso:

relatório do financeiro com intervalo de datas
Ao invés de Vencto >= datainicial .and. vencto <= datafinal
BetweenValue( Vencto, datainicial, datafinal )

numa escolha de 1 a 6, onde o default poderia ser 9
betweenValue( @nOpc, 1, 6 )
assim, o valor fica ajustado pra não ultrapassar os limites

É só pra ter um nome mais comum, talvez igual a outra linguagem de programação, caso não exista no Harbour.

Na GETSYS tem até o RangeCheck() que não é STATIC, mas só funciona pra GETSYS.

Função e/ou nome pra BetweenValue()

Enviado: 13 Abr 2020 14:05
por JoséQuintas
Na verdade não serve uma única função.
É que tem horas que o resultado vém de outra origem, e juntar as funções não adianta pra isso.
nOpc := FixInRange( LeCnf( "ALGO" ), 1, 5 )

Já tinha feito isso antes: FixInRange() e IsBetween(), acabei deixando as duas.
Talvez altere pra IsRange(), mais fácil de digitar, se não tiver incompatibilidade com alguma outra.

Função e/ou nome pra BetweenValue()

Enviado: 13 Abr 2020 21:06
por Fernando queiroz
JoséQuintas escreveu:Na verdade não serve uma única função.
É que tem horas que o resultado vém de outra origem, e juntar as funções não adianta pra isso.
nOpc := FixInRange( LeCnf( "ALGO" ), 1, 5 )

Já tinha feito isso antes: FixInRange() e IsBetween(), acabei deixando as duas.
Talvez altere pra IsRange(), mais fácil de digitar, se não tiver incompatibilidade com alguma outra.

Quintas você usa essa função no SQL???

Não sei se estamos falando das mesmas coisas, mas estou usando assim:

cQuery := "SELECT ENTRADA_UFORNEC, ENTRADA_C_UF, ENTRADA_C_XNOME, SUM(ENTRADA_w_vNF) AS TOTALCALC FROM entrada "
cQuery += "WHERE ENTRADA_UFORNEC = '" + strzero(UFORNEC,4,0) + "' AND "
cQuery += "ENTRADA_DATMOV BETWEEN "
cQuery += "'" + Transform(Dtos(PERINI),"@R 9999-99-99" ) + "' "
cQuery += "AND "
cQuery += "'" + Transform(Dtos(PERFIN),"@R 9999-99-99" ) + "'"

Função e/ou nome pra BetweenValue()

Enviado: 13 Abr 2020 22:12
por JoséQuintas
Sim, mas digo outra, pra usar no Harbour.

Por exemplo:
Eu permito salvar as configurações do relatório pra uso futuro.
Mas posso adicionar/remover opções.
Uma limitação acaba sendo útil.
Digamos até array, ou dbedit, ou outro.

A análise se torna mais interessante à medida que os nomes de variáveis envolvem fórmulas e outras coisas mais.