Ajuda para comparar datas

Boa Noite,

Pessoal criei um ponto de entrada o qual estou enviando em anexo, trata-se do MT130FIN usado para validar o Folder financeiro no documento de entrada. Minha dúvida é:

Criei um parâmetro do tipo Data no formato aaaammdd, porém preciso comparar ele com uma outra data, pois estou validando que nenhum título poderá ser incluído se a data for menor que a informada no parâmetro.

Eu já tentei com STOD, DTOS, DTOC, CTOD, e etc, mas não funcionou, a variável é a

Local nPar := GetMv("MV_DIASUT")

É o trecho onde comparo é:

If dDia < nPar nOpc := Aviso("TOTVS", cMsg, {"Sim", "Não"}, 2, "Liberacao de Documentos") If nOpc == 1 If AllTrim(u_PassLib()) <> AllTrim(SuperGetmv("MV_PASSLIB")) Alert("Senha Invalida !!!") lRet := .F. Else lRet := .T. Endif EndIf Endif

Obrigado.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Boa noite!

Se você criou o parâmetro como tipo Data, provavelmente ele já deve estar vindo corretamente (17/12/2019) dentro do código.

Tente depurar e imprimir o conteúdo da variável nPar. Utilize as funções Type (variáveis do escopo Private) ou ValType (variáveis do escopo Local) para confirmar qual o tipo da variável.

Caso ela estiver como string/caractere (retornou "C"), utilize as funções sToD/cToD para convertê-la.

Realize a mesma tratativa com a variável dDia. Caso ambas retornarem como tipo "D", então sua comparação irá funcionar.

Boa Noite Giordano,

Fiz uso do Valtype e na primeira linha a variável nPar retorna como Data, não consegui debugar a próxima variável pois o programa já erro, ai tentei converter a nPar para aparecer a mensagem na tela da função aviso com DTOC.

Mas não funcionou.

Valeu.

Bom dia,

Altere Local nPar := GetMv("MV_DIASUT") para Local dPar :=SUPERGETMV("MV_DIASUT", .F. , CTOD("//") ), valide também se o dDia está trazendo em formato data com o valtype, se ambos estiverem como "D" vai funcionar.

verifica essa parte tambem:

For nX := 1 to Len(aCols) dDia := aCols[nX,2] Next nX

você está sempre pegando o ultimo acols, ele é a data? acredito que ta nessa variavel seu problema e não no parametro mv.

Anderson Bom Dia,

Tudo bem?

Alterei como você informou, a minha intenção com esse For é porque pode ter condições de pagamento com várias datas, eu preciso verificar a primeira data de pagamento e não deixar que seja superior ao informado no parâmetro.

Valeu.

De onde está buscando a variavel dDIA? quando estiver compilando use a janela de expressões e a protheus commands para analisar...se tiver erro não cai.

Não fixe posição do acols como fez, pois futuramente podem alterar a ordem dos campos e vai dar erro.

Local nOld := n For n:=1 To Len(aCols) nDia := BUSCACOLS("NOMEDOCAMPO") Next

n:= nOld

você precisa debugar, senão não vai conseguir resolver.

:warning: Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.

Bom Dia Bindo,

Tudo bem?

Então a variável dDia, está recebendo o resultado do meu For, For nX := 1 to Len(aCols) dDia := aCols[nX,2] Next nX.

Parabéns pelas aulas no canal do Youtube estão excelentes.

lendo a sua resposta no ultimo tópico, use a função condição: aParcelas := Condicao (1, _cCond,_dEmi)

Bindo, vou tentar com a função condicao logo retorno com os resultados.

Valeu.

Bom dia,

Não sei se já resolveu, mas "Eu já tentei com STOD, DTOS, DTOC, CTOD, e etc, mas não funcionou, a variável é a

Local nPar := GetMv("MV_DIASUT")"

isso aqui que você tentou foi na váriavel nPar? Se realmente o parâmetro for do tipo data, você terá como valor no parâmetro ,algo como 31/12/2019, valor entendido como data, já se a variável dDia é obtida através do valor do acols, acho, não estou 100% certo que ela estará da seguinte forma '20191231' sendo uma string, assim basta colocar STOD(dDia)<nPar, ou na atribuição do valor da dDia já faz a conversão dDia := Stod(aCols[nX,2]), pois se comparar duas variáveis no formato data, o advpl irá retornar true ou falso de acordo com a comparação desejada, exemplo 31/12/2019 < 01/01/2020 resultado .T.

31/12/2019 > 01/01/2020 Resultado .F.

Atenciosamente,

Douglas ainda não resolvi, estou testando todas as opções que vocês informaram. Obrigado pelas explicações também vou tentar e retorno com os resultados.

Grande abraço.

Pessoal,

Consegui converter as datas mas o meu erro agora está no trecho:
If dVencto < dPar

As duas variáveis estão vindo no formato dd/mm/aaaa

Agora só preciso comparar se uma é maior que a outra mas está dando type mismatch.

Valeu.

Pessoal, consegue resolver com a ajuda de todos vocês, obrigado pelo apoio.

Grande abraço e boas festas.