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.1, 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 40.
|
#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 |
Não há.
FAQ - 0015 - Como enviar dados no R-4000 inseridos antes da atualização do sistema?