Objetivo desta rotina é efetuar um cadastro de regra de Apuração , vinculando a uma Regra de Documentos Fiscais que será criada pelo usuário conforme sua escrituração e com isso identicando o valor do Tributo da nota Cancelada e o Codigo de Lançamento que irá realizar esse estorno com base na nota Substituta.
Dessa forma com esse cadastro iremos:
CJV com as informações do cabeçalho do Cadastro de Regra de Apuração, onde temos os campos:
CJw -Regra de Apuração- Itens , onde iremos relacionar quais códigos de lançamento, Regra de Apuração, Origem do Tributo e vigência
CJW_FILIAL - Filial do Sistema: Grava a filial onde ocorreu a inclusão do registro - Grupo de campo 033.
CJW_ID - ID do Cadastro: Gera um ID com MD5 utilizando a função FWUUIDV1().
CJW_ID_CAB - ID do Cabeçalho.
CJW_REGAPU - Regra de Apuração: Retorna a opção 01 - Nota Cancelada através da função XRegraApu, onde o cliente informa qual situação deve ser considerada para buscar o valor do tributo e amarrar com o código de lançamento informado.
CJW_CODTAB - Tabela de Lançamento: Este campo disponibiliza 2 tabelas de lançamento (5.1.1 - CDO, 5.2 - CDY).
CJW_CODLAN - Código de Lançamento: A tabela selecionada no campo CJW_CODLAN atualiza a consulta padrão, retornando os códigos de lançamento de cada tabela.
CJW_VIGINI - Data Início Vigência Apuração: O usuário informa a data de início da vigência do código de lançamento, que consta nos arquivos TXT baixados no site da http://sped.rfb.gov.br/.
CJW_VIGFIM - Data Final Vigência Apuração: O usuário informa a data de término da vigência do código de lançamento, que consta nos arquivos TXT baixados no site da http://sped.rfb.gov.br/.
CJW_ORIVLR - Origem do Tributo: O usuário informa qual foi a forma usada para escriturar: 01 - Configurador de Tributos; 02 - Sistema Legado.
CJW_TRIB - Tributo do Configurador: Selecione a regra que está amarrada com o tributo configurado para utilizar na escrituração.
CJW_VALOR - Considerar Valor: Selecione qual valor será buscado: Valor Tributado, Outros, Isento, Diferido, Base, Alíquota.
CJW_TRILEG - Tributo Legado: Este campo é habilitado quando o campo CJW_ORIVLR for igual a 02 - Legado, e com isso o usuário poderá selecionar qual tributo deverá ser considerado para buscar o valor.
Fontes
FISA315.PRW
Localizados na GITEA: https://code.engpro.totvs.com.br/totvs-fiscal/livros_fiscais/src/branch/DSERFISE-9196_Criar_cadastro_Controle_Regra_Apuracao
Criação da Tela em MVC com estrutura de ABAS (FOLDERs), foi estruturado em 2 modelos - MASTER e GRID.
X315ChgF3 - Função para alterar a consulta padrão do campo CJW_CODTAB onde irá
trazer a tabela 5.1.1 ou 5.2
---------------------------------------------------------------------------------------------------------------------------
A função BuscaLanc
e tem como objetivo buscar os lançamentos de ajuste e as notas fiscais de saída canceladas em um determinado período. Essas informações são utilizadas no processamento de estorno ou crédito, além de compor a apuração do ICMS e gravar na tabela CDA.
A função recebe dois parâmetros: dDtIni
, que representa a data de início do período, e aRegApur
, que é um array com os códigos de lançamento e outras informações relacionadas à apuração do ICMS.
A função começa inicializando algumas variáveis locais, como nCount
e nCountNf
, que serão utilizadas para percorrer os arrays de lançamentos e notas fiscais canceladas, respectivamente. Também são criados arrays vazios, como aLancAjuste
e aCDAIC
, que serão preenchidos com os dados encontrados.
Em seguida, a função chama a função RetNfCanc
para obter as notas fiscais canceladas no período especificado. Essa função retorna um array chamado aNfCanc
.
A função BuscaLanc
percorre os arrays aRegApur
e aNfCanc
utilizando loops for
. Para cada combinação de lançamento de ajuste e nota fiscal cancelada, são realizadas algumas operações.
Primeiro, são extraídas informações relevantes da nota fiscal cancelada, como número, série, cliente/fornecedor, loja, valor do ICMS, espécie e tipo de movimento. Essas informações são armazenadas em variáveis locais.
Em seguida, é verificado se o código de lançamento é igual ao código de lançamento anterior. Se for diferente, é adicionado um novo item ao array aLancAjuste
contendo o código de lançamento, a descrição do destino, o valor acumulado do ICMS e a base de cálculo do ICMS. Caso contrário, os valores acumulados são atualizados.
Depois disso, é construída uma chave única chamada cChaveCDA
que será utilizada para buscar registros na tabela CDA. Essa chave é composta pelo tipo de movimento, espécie, fórmula, número da nota fiscal, série, cliente/fornecedor, loja e número do item.
Em seguida, é feita uma busca na tabela CDA utilizando a chave cChaveCDA
. Se o registro for encontrado, é realizado um loop para excluir todos os registros encontrados com a mesma chave. Em seguida, é adicionado um novo registro na tabela CDA com os dados atualizados.
Caso o registro não seja encontrado na tabela CDA, é adicionado um novo registro com os dados informados.
Após percorrer todos os lançamentos e notas fiscais canceladas, é fechado o objeto oBulk
, que é responsável por inserir os registros na tabela CDA. Em seguida, é criado um novo array chamado aCDAIC
que irá compor a apuração do ICMS.
Por fim, a função retorna o array aCDAIC
, que contém os lançamentos de ajuste e as notas fiscais de saída canceladas para a apuração do ICMS.
Função que filtrar as notas emitidas em períodos anteriores e canceladas no período atual, a fim de facilitar o processamento de estorno ou crédito.
Retorna uma query na SFT
SELECT
FT_FILIAL,
FT_NFISCAL,
FT_SERIE,
FT_ESPECIE,
FT_CLIEFOR,
FT_TIPOMOV,
FT_ITEM,
FT_FORMUL,
FT_BASEICM,
FT_ALIQICM,
FT_LOJA,
FT_CFOP,
FT_DTCANC,
FT_VALICM,
R_E_C_N_O_ SFTRECNO
FROM
SFTT10 SFT
WHERE
SFT.FT_FILIAL = 'XIFIS26 '
AND SFT.FT_CFOP >= '5'
AND SFT.FT_ESPECIE = 'BPE'
AND SFT.FT_TIPOMOV = 'S'
AND FT_ENTRADA < '20240501'
AND FT_DTCANC BETWEEN '20240501'
AND '20240531'
AND SFT.D_E_L_E_T_ = ' '
SELECT
CJW.CJW_FILIAL,
CJW.CJW_CODTAB,
CJW.CJW_CODLAN,
CJW.CJW_TRIB,
CJW.CJW_REGAPU,
CJW.CJW_TRILEG,
CJW.CJW_VALOR,
CJV.CJV_CODREG,
CDO.CDO_DESCR,
CDY.CDY_DESCR
FROM
CJVT10 CJV
INNER JOIN CJWT10 CJW ON(
CJW.CJW_FILIAL = 'XIFIS26 '
AND CJW.CJW_ID_CAB = CJV.CJV_ID
AND CJV.D_E_L_E_T_ = ' '
)
LEFT JOIN CDOT10 CDO ON(
CDO.CDO_FILIAL = 'XIFIS '
AND CDO.CDO_CODAJU = CJW.CJW_CODLAN
AND CDO.D_E_L_E_T_ = ' '
)
LEFT JOIN CDYT10 CDY ON(
CDY.CDY_FILIAL = 'XIFIS26 '
AND CDY.CDY_CODAJU = CJW.CJW_CODLAN
AND CDY.D_E_L_E_T_ = ' '
)
WHERE
CJV.CJV_FILIAL = 'XIFIS26 '
AND '20240501' >= CJV.CJV_VIGINI
AND (
'20240531' <= CJV.CJV_VIGFIM
OR CJV.CJV_VIGFIM = ''
)
AND CJW.D_E_L_E_T_ = ''
ORDER BY
CJW.CJW_REGAPU
Função que busca os lançamentos de ajuste e as notas fiscais de saída canceladas no período atual, a fim de facilitar o processamento de estorno ou crédito.
Gerando um array com os lançamentos de ajuste e as notas fiscais de saída canceladas para lançar na apuração de ICMS e gravar na tabela CDA.
Campos da CDA, que serão gravados com dados da SFT e dados da CJW.
"CDA_FILIAL"
"CDA_TPMOVI"
"CDA_ESPECI"
"CDA_NUMERO"
"CDA_SERIE "
"CDA_CLIFOR"
"CDA_LOJA "
"CDA_CODLAN"
"CDA_VALOR "
"CDA_ORIGEM"
"CDA_NUMITE"
"CDA_CALPRO"
"CDA_FORMUL"
"CDA_BASE"
"CDA_ALIQ"
"CDA_TPLANC"
"CDA_SDOC"
"CDA_SEQ"
Criado o Array aLancAjuste que será utilizado para montar as informações que serão utilizados no aCDAIC para apuração do ICMS:
(aLancAjuste ,{;
cCodLan,; //0 - Código do Ajuste
cDescLanc,; //1 - Descrição destino
cValIcm,; //6 - Valor Acumulado
cBaseIcm}) //11 - Base ICM
---------------------------------------------------------------------------------------------------------------------------
As chamadas RetRegApu e BuscaLanc são funções que estão sendo utilizadas no código fornecido C:\Fontes_Azure_Gitea\livros_fiscais\Livros Fiscais\Retnfcanc.prw .
RetRegApu: Essa função recebe um parâmetro dDtIni e retorna um array de registros de apuração. O objetivo dessa função é obter os registros de apuração com base na data de início da apuração de ICMS (dDtIni).
BuscaLanc: Essa função recebe dois parâmetros, dDtIni e @aRegApur. Ela retorna um array de lançamentos. O objetivo dessa função é buscar os lançamentos X Cadastro na CJW relacionados aos registros de apuração fornecidos e inserir na apuração os valores da notas canceladas e adicionar na apuração com
o codigo de lançamento cadastrado na FISA315.
Essas funções estão sendo utilizadas da seguinte maneira:
Nesse trecho de código, primeiro é feita uma verificação condicional para garantir que as variáveis lRetNfCanc, aApurSX2[AI_CJV] e aApurSX2[AI_CJW] sejam verdadeiras. Se todas forem verdadeiras, a função RetRegApu é chamada passando o valor de dDtIni como parâmetro.
O resultado é armazenado na variável aRegApur.
Em seguida, é verificado se o tamanho do array aRegApur é maior que zero. Se for, significa que foram encontrados registros de apuração. Nesse caso, a função BuscaLanc é chamada passando dDtIni e o array @aRegApur como parâmetros. O resultado é armazenado na variável aCDAIC.
Este array ira ser utilizado para lancar os valores das notas canceladas , codigo de lançamento e Descrição do Codigo de Lançamento, alem de gerar uma CDA que será utilizada pra gerar os Registros E113.
Objetivo desta rotina é efetuar um cadastro de regra de Apuração , vinculando a uma Regra de Documentos Fiscais que será criada pelo usuário conforme sua escrituração e com isso identicando o valor do Tributo da nota Cancelada e o Codigo de Lançamento que irá realizar esse estorno com base na nota Substituta.
Dessa forma com esse cadastro iremos:
CJV com as informações do cabeçalho do Cadastro de Regra de Apuração, onde temos os campos:
CJw -Regra de Apuração- Itens , onde iremos relacionar quais códigos de lançamento, Regra de Apuração, Origem do Tributo e vigência
CJW_FILIAL - Filial do Sistema: Grava a filial onde ocorreu a inclusão do registro - Grupo de campo 033.
CJW_ID - ID do Cadastro: Gera um ID com MD5 utilizando a função FWUUIDV1().
CJW_ID_CAB - ID do Cabeçalho.
CJW_REGAPU - Regra de Apuração: Retorna a opção 01 - Nota Cancelada através da função XRegraApu, onde o cliente informa qual situação deve ser considerada para buscar o valor do tributo e amarrar com o código de lançamento informado.
CJW_CODTAB - Tabela de Lançamento: Este campo disponibiliza 2 tabelas de lançamento (5.1.1 - CDO, 5.2 - CDY).
CJW_CODLAN - Código de Lançamento: A tabela selecionada no campo CJW_CODLAN atualiza a consulta padrão, retornando os códigos de lançamento de cada tabela.
CJW_VIGINI - Data Início Vigência Apuração: O usuário informa a data de início da vigência do código de lançamento, que consta nos arquivos TXT baixados no site da http://sped.rfb.gov.br/.
CJW_VIGFIM - Data Final Vigência Apuração: O usuário informa a data de término da vigência do código de lançamento, que consta nos arquivos TXT baixados no site da http://sped.rfb.gov.br/.
CJW_ORIVLR - Origem do Tributo: O usuário informa qual foi a forma usada para escriturar: 01 - Configurador de Tributos; 02 - Sistema Legado.
CJW_TRIB - Tributo do Configurador: Selecione a regra que está amarrada com o tributo configurado para utilizar na escrituração.
CJW_VALOR - Considerar Valor: Selecione qual valor será buscado: Valor Tributado, Outros, Isento, Diferido, Base, Alíquota.
CJW_TRILEG - Tributo Legado: Este campo é habilitado quando o campo CJW_ORIVLR for igual a 02 - Legado, e com isso o usuário poderá selecionar qual tributo deverá ser considerado para buscar o valor.
Fontes
FISA315.PRW
Localizados na GITEA: https://code.engpro.totvs.com.br/totvs-fiscal/livros_fiscais/src/branch/DSERFISE-9196_Criar_cadastro_Controle_Regra_Apuracao
Criação da Tela em MVC com estrutura de ABAS (FOLDERs), foi estruturado em 2 modelos - MASTER e GRID.
X315ChgF3 - Função para alterar a consulta padrão do campo CJW_CODTAB onde irá
trazer a tabela 5.1.1 ou 5.2
---------------------------------------------------------------------------------------------------------------------------
A função BuscaLanc
e tem como objetivo buscar os lançamentos de ajuste e as notas fiscais de saída canceladas em um determinado período. Essas informações são utilizadas no processamento de estorno ou crédito, além de compor a apuração do ICMS e gravar na tabela CDA.
A função recebe dois parâmetros: dDtIni
, que representa a data de início do período, e aRegApur
, que é um array com os códigos de lançamento e outras informações relacionadas à apuração do ICMS.
A função começa inicializando algumas variáveis locais, como nCount
e nCountNf
, que serão utilizadas para percorrer os arrays de lançamentos e notas fiscais canceladas, respectivamente. Também são criados arrays vazios, como aLancAjuste
e aCDAIC
, que serão preenchidos com os dados encontrados.
Em seguida, a função chama a função RetNfCanc
para obter as notas fiscais canceladas no período especificado. Essa função retorna um array chamado aNfCanc
.
A função BuscaLanc
percorre os arrays aRegApur
e aNfCanc
utilizando loops for
. Para cada combinação de lançamento de ajuste e nota fiscal cancelada, são realizadas algumas operações.
Primeiro, são extraídas informações relevantes da nota fiscal cancelada, como número, série, cliente/fornecedor, loja, valor do ICMS, espécie e tipo de movimento. Essas informações são armazenadas em variáveis locais.
Em seguida, é verificado se o código de lançamento é igual ao código de lançamento anterior. Se for diferente, é adicionado um novo item ao array aLancAjuste
contendo o código de lançamento, a descrição do destino, o valor acumulado do ICMS e a base de cálculo do ICMS. Caso contrário, os valores acumulados são atualizados.
Depois disso, é construída uma chave única chamada cChaveCDA
que será utilizada para buscar registros na tabela CDA. Essa chave é composta pelo tipo de movimento, espécie, fórmula, número da nota fiscal, série, cliente/fornecedor, loja e número do item.
Em seguida, é feita uma busca na tabela CDA utilizando a chave cChaveCDA
. Se o registro for encontrado, é realizado um loop para excluir todos os registros encontrados com a mesma chave. Em seguida, é adicionado um novo registro na tabela CDA com os dados atualizados.
Caso o registro não seja encontrado na tabela CDA, é adicionado um novo registro com os dados informados.
Após percorrer todos os lançamentos e notas fiscais canceladas, é fechado o objeto oBulk
, que é responsável por inserir os registros na tabela CDA. Em seguida, é criado um novo array chamado aCDAIC
que irá compor a apuração do ICMS.
Por fim, a função retorna o array aCDAIC
, que contém os lançamentos de ajuste e as notas fiscais de saída canceladas para a apuração do ICMS.
Função que filtrar as notas emitidas em períodos anteriores e canceladas no período atual, a fim de facilitar o processamento de estorno ou crédito.
Retorna uma query na SFT
SELECT
FT_FILIAL,
FT_NFISCAL,
FT_SERIE,
FT_ESPECIE,
FT_CLIEFOR,
FT_TIPOMOV,
FT_ITEM,
FT_FORMUL,
FT_BASEICM,
FT_ALIQICM,
FT_LOJA,
FT_CFOP,
FT_DTCANC,
FT_VALICM,
R_E_C_N_O_ SFTRECNO
FROM
SFTT10 SFT
WHERE
SFT.FT_FILIAL = 'XIFIS26 '
AND SFT.FT_CFOP >= '5'
AND SFT.FT_ESPECIE = 'BPE'
AND SFT.FT_TIPOMOV = 'S'
AND FT_ENTRADA < '20240501'
AND FT_DTCANC BETWEEN '20240501'
AND '20240531'
AND SFT.D_E_L_E_T_ = ' '
SELECT
CJW.CJW_FILIAL,
CJW.CJW_CODTAB,
CJW.CJW_CODLAN,
CJW.CJW_TRIB,
CJW.CJW_REGAPU,
CJW.CJW_TRILEG,
CJW.CJW_VALOR,
CJV.CJV_CODREG,
CDO.CDO_DESCR,
CDY.CDY_DESCR
FROM
CJVT10 CJV
INNER JOIN CJWT10 CJW ON(
CJW.CJW_FILIAL = 'XIFIS26 '
AND CJW.CJW_ID_CAB = CJV.CJV_ID
AND CJV.D_E_L_E_T_ = ' '
)
LEFT JOIN CDOT10 CDO ON(
CDO.CDO_FILIAL = 'XIFIS '
AND CDO.CDO_CODAJU = CJW.CJW_CODLAN
AND CDO.D_E_L_E_T_ = ' '
)
LEFT JOIN CDYT10 CDY ON(
CDY.CDY_FILIAL = 'XIFIS26 '
AND CDY.CDY_CODAJU = CJW.CJW_CODLAN
AND CDY.D_E_L_E_T_ = ' '
)
WHERE
CJV.CJV_FILIAL = 'XIFIS26 '
AND '20240501' >= CJV.CJV_VIGINI
AND (
'20240531' <= CJV.CJV_VIGFIM
OR CJV.CJV_VIGFIM = ''
)
AND CJW.D_E_L_E_T_ = ''
ORDER BY
CJW.CJW_REGAPU
Função que busca os lançamentos de ajuste e as notas fiscais de saída canceladas no período atual, a fim de facilitar o processamento de estorno ou crédito.
Gerando um array com os lançamentos de ajuste e as notas fiscais de saída canceladas para lançar na apuração de ICMS e gravar na tabela CDA.
Campos da CDA, que serão gravados com dados da SFT e dados da CJW.
"CDA_FILIAL"
"CDA_TPMOVI"
"CDA_ESPECI"
"CDA_NUMERO"
"CDA_SERIE "
"CDA_CLIFOR"
"CDA_LOJA "
"CDA_CODLAN"
"CDA_VALOR "
"CDA_ORIGEM"
"CDA_NUMITE"
"CDA_CALPRO"
"CDA_FORMUL"
"CDA_BASE"
"CDA_ALIQ"
"CDA_TPLANC"
"CDA_SDOC"
"CDA_SEQ"
Criado o Array aLancAjuste que será utilizado para montar as informações que serão utilizados no aCDAIC para apuração do ICMS:
(aLancAjuste ,{;
cCodLan,; //0 - Código do Ajuste
cDescLanc,; //1 - Descrição destino
cValIcm,; //6 - Valor Acumulado
cBaseIcm}) //11 - Base ICM
---------------------------------------------------------------------------------------------------------------------------
A função RetCdaSeq
é usada para recuperar o número de sequência máximo da tabela CDA com base nos parâmetros fornecidos. Os parâmetros incluem a data de início para a pesquisa, o tipo de movimento, a espécie, o número da NF, a série, o código do cliente ou fornecedor e o código da loja.
A função começa inicializando variáveis locais, incluindo cQuery
para a consulta SQL que será construída, cAliasCDA
para o alias da tabela CDA, e cData
e cDataFim
para as datas de início e fim da pesquisa.
A consulta seleciona o valor máximo da coluna CDA_SEQ
da tabela CDA. Ela junta a tabela CDA com as tabelas SFT e SB1 com base em várias condições. A consulta também inclui várias condições WHERE, incluindo que a filial CDA deve ser igual a um valor específico, o tipo de movimento e a espécie devem ser iguais aos parâmetros fornecidos, a origem deve ser '6', e a data de cancelamento deve estar entre as datas de início e fim fornecidas.
Depois que a consulta é construída, ela é executada usando o método FwExecStatement():New(cQuery)
. Os parâmetros da consulta são definidos usando os métodos SetUnsafe
e SetString
do objeto oMontQry
.
Finalmente, o alias da tabela CDA é aberto usando o método OpenAlias
do objeto oMontQry
, e esse alias é retornado pela função. Antes do retorno, o objeto oMontQry
é destruído e definido como Nil
para liberar recursos.
A função DelCDA
é usada para deletar registros de uma tabela com base em uma condição específica. A função é estática, o que significa que ela pertence à classe em vez de uma instância da classe.
A função começa inicializando duas variáveis locais: cQuery
, que será usada para armazenar a consulta SQL que será executada, e oDelCDA
, que será usada para preparar e executar a consulta SQL.
A consulta SQL é definida como "DELETE FROM ? WHERE D_E_L_E_T_ = ' ' AND CDA_ORIGEM = ?". Esta consulta deleta registros de uma tabela (que será especificada mais tarde) onde o campo 'D_E_L_E_T_' não está marcado para exclusão (ou seja, é igual a ' ') e o campo 'CDA_ORIGEM' corresponde a um valor específico (que também será especificado mais tarde).
A consulta SQL é preparada usando o método FWPreparedStatement():New()
, que retorna um novo objeto PreparedStatement. A consulta é então definida no objeto PreparedStatement usando o método SetQuery
.
Os parâmetros da consulta são definidos usando os métodos SetUnsafe
e SetString
do objeto PreparedStatement. O primeiro parâmetro é o nome da tabela "CDA", e o segundo parâmetro é a string "6".
Finalmente, a consulta é executada usando a função TCSqlExec
, que executa uma consulta SQL fixa. A consulta fixa é obtida do objeto PreparedStatement usando o método GetFixQuery
.
A função RetCdaLanc(dDtIni)
éusada para recuperar informações de lançamentos na CDA. Ela recebe uma data inicial como parâmetro.
A variável cQuery
é usada para construir uma consulta SQL que será executada posteriormente. Esta consulta SQL seleciona várias colunas de três tabelas CDA, SFT e SB1. A consulta também inclui várias condições e agrupamentos.
Depois de construir a consulta SQL, a função cria um objeto oMontQry
usando o método FwExecStatement():New(cQuery)
. Este objeto é usado para executar a consulta SQL.
Em seguida, a função define várias variáveis para a consulta SQL usando os métodos SetUnsafe
e SetString
. Estes métodos são usados para definir os valores de parâmetros na consulta SQL.
A função então executa a consulta SQL e itera sobre os resultados. Para cada linha de resultado, ela cria uma string cCdaLanc
que parece ser uma concatenação de várias colunas. Se cCdaLanc
não estiver vazia, a função adiciona várias colunas a um array aCdaLanc
e adiciona este array a um objeto JSON oJCdalanc
com a chave sendo cCdaLanc
, que será utilizado na função RetApurE113 pra compor o E113.
Finalmente, a função limpa o objeto oMontQry
e retorna o alias da consulta SQL.