Histórico da Página
VISÃO GERAL
Caso alguma das informações solicitadas nos eventos da serie R-4000 tenham sido inseridas no Backoffice Protheus antes da atualização do ambiente para a EFD-Reinf 2.1.12,
e portanto não tendo as pré-condições necessárias para o envio dos dados ao TAF, uma alternativa é a montagem de um Rkmake para processamento e geração da tabela FKW.Visando facilitar esse procedimento, a seguir passaremos um exemplo de RdMake, cujo intuito é fazer o vinculo automático das Naturezas de Rendimento com os títulos a pagar/receber que devem ser considerados no EFD-Reinf Bloco 40execução da rotina padrão de ajuste de base REINF (U_FIXREINF).
que fará gravação das tabelas FKW (Impostos x Natureza Rendimento) e FKY (Impostos x Nat. Rend. x Baixas).
Nota |
---|
Esta funcionalidade está disponível desde a expedição contínua de. A principio a rotina possuía uma data limite para ser utilizada de , mas o prazo foi prorrogado para . Portanto, a partir de não será possível executar essa rotina. Importante: Em caso de bloqueio antes do novo prazo, certifique-se em seu RPO que o programa FIXREINF esteja com data igual ou superior a . |
Aviso | ||
---|---|---|
| ||
|
EXEMPLO DE UTILIZAÇÃO
- Copie o o bloco de código abaixo para um fonte, faça adaptações se necessário e compile no ambiente;
- Adicione no menu uma nova rotina com a chamada para a User Function FIXREINF;
- Execute o menu adicionado com a rotina do FIX;
- Selecione as filiais que devem ser consideradas e confirme para iniciar o processamento;
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "TbiConn.ch"
#Include 'TOPConn.ch'
#Include "FILEIO.CH"
#INCLUDE "PARMTYPE.CH"
Static __lTemDic As Logical
Static __oTitPaga As Object
Static __oTitRece As Object
Static __aGrpEmp As Array
//-------------------------------------------------------------------
/*/{Protheus.doc} FIXREINF
FIX para fazer o vinculo da(s) Natureza(s) de Rendimento da EFD-REinf
para os títulos lançados no sistema antes da vigência do bloco 40
e que serão baixados após o inicio da vigência (Set/2023).
/*/
//-------------------------------------------------------------------
User Function FIXREINF()
Local aAllGroup As Array
Local aFilial As Array
Local nI As Numeric
Local aButtons As Array
//PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "FIN" TABLES "SE2", "SE5", "SA6", "SED", "SE1", "SEV", "F71", "SE2" //#del
//Inicializa variáveis
aAllGroup := FwLoadSM0()
aFilial := {}
nI := 0
aButtons := {}
Private aGrp := {}
Private aFilGrp := {}
Private oModal := Nil
Private oContainer := Nil
Private oBrw := Nil
Private oOK := LoadBitmap(GetResources(), "NGBIOALERTA_02.png")
Private oNO := LoadBitmap(GetResources(), "NGBIOALERTA_03.png")
Private oProcess := Nil
Private oReinfTable := Nil
Private cReinfLog := "REINFLOG"
Private oProcess := Nil
Private oReinfTable := Nil
Private cReinfLog := "REINFLOG"
Private cDtIni := "20220101" //Data inicial a ser considera para filtrar a emissão dos títulos (Formato AAAAMMDD)
For nI := 1 To Len(aAllGroup)
nPos := aScan(aFilial,{|x| x[1] == aAllGroup[nI,1]} )
If nPos == 0
aAdd(aFilial,{aAllGroup[nI,1],aAllGroup[nI,2]})
aAdd(aGrp,aAllGroup[nI,1])
Else
aFilial[nPos,2] += "|" + aAllGroup[nI,2]
Endif
Next nI
aFilGrp := FIXGRPFIL(aFilial, 1)
aAdd(aButtons, {Nil, "Atualizar", {||FIXALL()}, Nil, 2, .T., Nil})
oModal := FWDialogModal():New()
oModal:SetEscClose(.T.)
oModal:setTitle("Fix - REINF (COM / FAT / FIN)")
oModal:setSubTitle("Documentos de Entrada/Saida e Titulos a Pagar/Receber")
//Seta a largura e altura da janela em pixel
oModal:setSize(280,500)
oModal:createDialog()
oModal:addCloseButton(nil, "Fechar")
oModal:addButtons(aButtons)
oContainer := TPanel():New( ,,, oModal:getPanelMain() )
oContainer:SetCss("TPanel{background-color : white;}")
oContainer:Align := CONTROL_ALIGN_ALLCLIENT
oS1 := TSay():New(10,05,{|| "Descrição: Selecione a(s) filial(ais)"},oContainer,,,,,,.T.,,,180,150)
//Grupo Empresa
oBrw1 := TWBrowse():New(40,05,190,165,,{"Grupo Empresa"},{05,20},oContainer,,,,,,,,,,,,.F.,,.T.,,.F.,,,) //"Grupo Empresa"
oBrw1:SetArray(aGrp)
oBrw1:bLine := {|| {aGrp[oBrw1:nAt]} }
oBrw1:bChange := {|| FIXGRP(oBrw1:nAt, aFilial, oBrw2)}
//Grupo Empresa - Filiais
oBrw2 := TWBrowse():New(10,210,280,195,,{"Sel. Filial","Grp Empresa","Filial","Desc. Filial"},{50,50,50,100},oContainer,,,,,,,,,,,,.F.,,.T.,,.F.,,,)
oBrw2:SetArray(aFilGrp)
oBrw2:bLine := { || {Iif(aFilGrp[oBrw2:nAt,1], oOK, oNO), aFilGrp[oBrw2:nAt,2], aFilGrp[oBrw2:nAt,3], aFilGrp[oBrw2:nAt,4]}}
oBrw2:bLDblClick := {|| FIXFILGRP(oBrw2, @aFilGrp, "I")}
oBrw2:bHeaderClick := {|| FIXFILGRP(oBrw2, @aFilGrp, "A")}
oModal:Activate()
oProcess := MsNewProcess():New({|| U_FIXCFF() },"FIX REINF","Lendo Registros do COM / FAT / FIN",.T.)
oProcess:Activate()
Return
Static Function FIXGRP(nEmpLin, aFilial, oObjFil) //AScan(aFilGrp, {|x| AllTrim(x[2]) == "T1"})
aFilGrp := FIXGRPFIL(aFilial, nEmpLin)
If Len(aFilGrp) > 0
oObjFil:SetArray(aFilGrp)
oObjFil:bLine := {|| {If(aFilGrp[oObjFil:nAT,1], oOK,oNo), aFilGrp[oObjFil:nAt,02], aFilGrp[oObjFil:nAt,03], aFilGrp[oObjFil:nAt, 04]}}
oObjFil:Refresh()
Endif
Return
Static Function FIXFILGRP(oObj, aDados, cOpc)
Local nI := 0
Default cOpc := "I"
If cOpc == "I"
aDados[oObj:nAt,1] := !aDados[oObj:nAt,1]
Elseif cOpc == "A"
For nI := 1 To Len(aDados)
aDados[nI,1] := !aDados[nI,1]
Next nI
Endif
If Len(aDados) > 0
//Atualiza Browse
oObj:SetArray(aDados)
oObj:bLine := {|| {If(aDados[oObj:nAT,1], oOK, oNo), aDados[oObj:nAt,02], aDados[oObj:nAt,03], aDados[oObj:nAt, 04]}}
oObj:Refresh()
Endif
Return
Static Function FIXGRPFIL(aFilial,nEmp)
Local nI As Numeric
Local nPosicao As Numeric
Local aAux As Array
Local aFil As Array
Local aSM0Dados As Array
//Inicializa variáveis.
nI := 0
nPosicao := 0
aAux := {}
aFil := {}
aSM0Dados := {}
If __aGrpEmp == Nil
__aGrpEmp := {}
EndIf
aAux := Separa(aFilial[nEmp,2],"|")
For nI := 1 To Len(aAux)
aSM0Dados := FWSM0Util():GetSM0Data(aFilial[nEmp,1], aAux[nI], {"M0_FILIAL"})
//Verifica se ja possui vinculo com o Transmite (DHW)
aAdd(aFil, {.F., aFilial[nEmp,1], aAux[nI], aSM0Dados[1,2]})
Next nI
If Len(__aGrpEmp) > 0
For nI := 1 To Len(__aGrpEmp)
If (AScan(__aGrpEmp[nI,1], aFilial[nEmp,1])) > 0
nPosicao := nI
Exit
EndIf
Next nI
EndIf
If nPosicao > 0
aFil := Aclone(__aGrpEmp[nPosicao])
Else
AAdd(__aGrpEmp, AClone(aFil))
EndIf
Return aFil
User Function FIXCFF(aFiliais)
oProcess:SetRegua1(3) //COM / FAT / FIN
//Cria Temporario - LOGs
U_REINFLOG()
/* ##del
aFiliais := {}
aAdd(aFiliais,"D MG 01")
aAdd(aFiliais,"D MG 02")
aAdd(aFiliais,"M SP 01")
*/
//Atualiza base de dados
//For nZ:= 1 to Len(aFiliais)
U_FIXCOMREINF() //COM
U_FIXFATREINF() //FAT
U_FIXFINREINF(aFiliais) //FIN
//Endif
Return
User Function REINFLOG()
Local aArea := GetArea()
Local aStruct := {}
aAdd(aStruct,{"GRUPO" ,"C", 008, 00}) //Grupo de empresa
aAdd(aStruct,{"EMPFIL" ,"C", 008, 00}) //Empresa/filial do documento/título
aAdd(aStruct,{"DATAPROC" ,"C", 020, 00}) //Data e hora do processamento
aAdd(aStruct,{"TIPO" ,"C", 002, 00}) //DE=Documento de entrada / DS = Documento de Saída / CP = Contas a Pagar / CR = Contas a Receber
aAdd(aStruct,{"CHAVE" ,"C", 220, 00}) //Chave do documento/título
aAdd(aStruct,{"FATC6" ,"C", 001, 00}) //Identifica se foi atualizada natureza de rendimento no pedido de venda
aAdd(aStruct,{"FATFKW" ,"C", 001, 00}) //Identifica se foi criado o registro na FKW referente ao documento de saída
aAdd(aStruct,{"COMDHR" ,"C", 001, 00}) //Identifica se foi criado/atualizado o registro na tabela DHR referente ao documento de entrada
aAdd(aStruct,{"COMFKW" ,"C", 001, 00}) //Identifica se foi criado o registro na tabela FKW referente ao documento de entrada
aAdd(aStruct,{"FINFKF" ,"C", 001, 00}) //Identifica se foi atualizado o registro na tabela FKF referente ao título avulso
aAdd(aStruct,{"FINFKW" ,"C", 001, 00}) //Identifica se foi criado o registro na tabela FKW referente ao título avulso
If !TCCanOpen(cReinfLog)
MsCreate(cReinfLog, aStruct, 'TOPCONN' )
dbUseArea( .T., 'TOPCONN', cReinfLog, cReinfLog, .T., .F. )
(cReinfLog)->(DBCreateIndex('IND1', 'TIPO + CHAVE'))
else
dbUseArea( .T., 'TOPCONN', cReinfLog, cReinfLog, .T., .F. )
Endif
dbSelectArea( cReinfLog )
RestArea(aArea)
Return (cReinfLog)
/*
Inicio das funções de FIX do módulo SIGACOM
que abrange a gravação da FKW para os
Documentos de Entrada.
*/
User Function FIXCOMREINF(aFiliais As Array)
Default aFiliais := {cFilAnt}
Private aDadosDoc := U_FixDoc(aFiliais)
If Len(aDadosDoc) > 0
oProcess:IncRegua1("Atualizando: " + AllTrim(Str(Len(aDadosDoc))) + " Documentos de Entrada")
oProcess:SetRegua2(Len(aDadosDoc))
U_FIXDHR(aDadosDoc)
Endif
Return
|
DEMAIS INFORMAÇÕES
|
EXEMPLO DE UTILIZAÇÃO
- A execução desse ajuste de base deve ser executado obrigatoriamente no programa inicial do Smartclient: U_FIXREINF
DEMAIS INFORMAÇÕES
Wizard de configuração de ajuste de base Reinf
Após o processamento será gravado um log contendo os registros afetados na tabela REINFLOG do banco de dados. Não há.
ASSUNTOS RELACIONADOS
FAQ - 0015 - Como enviar dados no R-4000 inseridos antes da atualização do sistema?
...