Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

  1. Copie o o bloco de código abaixo para um fonte, faça adaptações se necessário e compile no ambiente;
  2. Adicione no menu uma nova rotina com a chamada para a User Function FIXREINF;
  3. Execute o menu adicionado com a rotina do FIX;
  4. Selecione as filiais que devem ser consideradas e confirme para iniciar o processamento;
Bloco de código
languagejava
themeMidnight
titleBloco de Código
collapsetrue

#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

Não há.

...