Preencher o nome do arquivo automaticamente na Apuração de ICMS e IPI | Ti Responde 0237

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

Deixe uma resposta

Terminal de Informação