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.
Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.
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.
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.
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.
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.
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.
Atenção: Esta publicação foi transferida automaticamente do fórum antigo, mas os anexos não foram incluídos.
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.
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.