No vídeo de hoje, vamos demonstrar em como buscar o nome do arquivo da apuração do ICMS ou IPI do mês anterior.
A dúvida de hoje, nos perguntaram, como poderíamos criar um gatilho ao digitar o ano e o mês na apuração de ICMS e IPI e o sistema já buscar automaticamente o arquivo do mês anterior.
Pensando nisso, montamos um exemplo, onde vai ser demonstrado a criação de uma função e amarração dela na validação dos parâmetros do grupo de perguntas.
Segue abaixo o vídeo exemplificando:
E abaixo o código fonte desenvolvido:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} zVid0237
Função que preenche o nome do arquivo da apuração anterior do IPI ou ICMS
@type user function
@author Atilio
@since 27/01/2026
@see https://centraldeatendimento.totvs.com/hc/pt-br/articles/360019082872-CROSS-Segmentos-TOTVS-Backoffice-Linha-Protheus-FIS-Nomenclatura-do-Arquivo-de-Apura%C3%A7%C3%A3o-de-Impostos
@obs
Função baseada em uma que foi desenvolvida pelo Lucas Santiago
A nomenclatura do arquivo é:
A => Fixo
A até L => Número do mês: A = Janeiro, B = Fevereiro, C = Março...
Dois últimos digitos do ano da apuração
Código da empresa
Código da filial
Extensão do arquivo (.ip0 para apuração de IPI ou .ic0 para a de ICMS)
Ex: ab259901.ip0
Essa função u_zVid0237() deve ser colocada na validação (X1_VALID) dos campos ano e mês dos grupos de perguntas:
* MTA951 - usada na MATA953, de apuração do ICMS
* MTA952 - usada na MATA952, de apuração do IPI
/*/
User Function zVid0237()
Local aArea := FWGetArea()
Local lContinua := .T.
Local cAnoDApur := ""
Local cLetraMes := ""
Local cArquivo := ""
Local cFuncMenu := FunName()
//Somente se tiver conteúdo no mês e ano
If MV_PAR01 != 0 .And. MV_PAR02 != 0
//Se for Janeiro no parâmetro, o mês anterior é dezembro (letra L), a o ano, vai diminuir 1 (por exemplo 2026 -> 2025 -> 25)
If MV_PAR01 == 1
cLetraMes := "l"
cAnoDApur := Right(cValToChar(MV_PAR02 - 1), 2)
//Senão, vai pegar a letra, e usar a função chr para encontrar o código ascii dela, e o ano vai ser o atual (por exemplo 2025 -> 25)
Else
cLetraMes := Chr(96 + MV_PAR01 - 1)
cAnoDApur := Right(cValToChar(MV_PAR02), 2)
EndIf
//Se for a apuração de ICMS
If cFuncMenu == "MATA953"
cArquivo := "a" + cLetraMes + cAnoDApur + cEmpAnt + cFilAnt + ".ic0"
//Ou se for apuração de IPI
ElseIf cFuncMenu == "MATA952"
cArquivo := "a" + cLetraMes + cAnoDApur + cEmpAnt + cFilAnt + ".ip0"
EndIf
/*
//Se você quiser adicionar uma validação pra ver se o arquivo existe, poderia ser algo como
If ! File(cArquivo)
ExibeHelp(...
lContinua := .F.
EndIf
*/
//Define o sexto parâmetro com o caminho do arquivo
MV_PAR06 := cArquivo
EndIf
FWRestArea(aArea)
Return lContinua
Bom pessoal, por hoje é só.
Abraços e até a próxima.