Árvore de páginas

Versões comparadas

Chave

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

...

Bloco de código
languagejava
themeMidnight
titleBloco de Código
collapsetrue
#include
#Include "Protheus.ch"
#Include "RwMake.ch"
#Include "rwmakeTbiConn.ch"
#include#Include 'tbiconnTOPConn.ch'
#Include "FILEIO.CH"
#INCLUDE "PROTHEUSPARMTYPE.CH" 

Static __lTemDic  As Logical
Static __oTitPaga As Object
Static __oTitRece As Object

User Function FinFixB40(aFiliaisStatic __aGrpEmp As Array)
    Local lRetorno   As Logical  
    Local cMAEmpSED  As Char
    Local cMAUniSED  As Char    
    Local cMAFilSED  As Char            
    Local cMAEmpSA1  As Char
    Local cMAUniSA1  As Char
    Local cMAFilSA1  As Char    
    Local cMAEmpSA2  As Char
//-------------------------------------------------------------------
/*/{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 cMAUniSA2aAllGroup  As CharArray
    Local cMAFilSA2aFilial   As CharArray
    Local cMAEmpSE1nI  As Char
    Local cMAUniSE1  As CharNumeric
    Local cMAFilSE1aButtons  As CharArray

    Local//PREPARE cMAEmpSE2ENVIRONMENT EMPRESA As Char
    Local cMAUniSE2  As Char
    Local cMAFilSE2  As Char
    Local nTamFilSED As Numeric
    Local nTamFilSA1 As Numeric
    Local nTamFilSA2 As Numeric    
    Local nTamFilSE1 As Numeric
    Local nTamFilSE2 As Numeric
    Local nTamEmp    As Numeric
	Local nTamUni    As Numeric
    Local nTamFil    As Numeric    
        
    PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "FIN" TABLES "SE2", "SE5", "SA6", "SED", "SE1", "SEV", "F71", "SE2"
    
    //Parâmetros de entrada.
    Default aFiliais := {cFilAnt}    
    
    If __lTemDic == Nil
        __lTemDic := cPaisLoc == "BRA" .And. SED->(ColumnPos("ED_NATREN")) > 0
    EndIf
    
    If (lRetorno := __lTemDic)
        //Inicializa variáveis
        lRetorno := .T.
        cMAEmpSED  := AllTrim(FWModeAccess("SED",1))
        cMAUniSED  := AllTrim(FWModeAccess("SED",2))
        cMAFilSED  := AllTrim(FWModeAccess("SED",3)"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)
        cMAEmpSA1nPos  := AllTrim(FWModeAccess("SA1",1))
   aScan(aFilial,{|x| x[1] == aAllGroup[nI,1]} )
     cMAUniSA1  := AllTrim(FWModeAccess("SA1",2))
        cMAFilSA1If nPos :== AllTrim(FWModeAccess("SA1",3))0
        cMAEmpSA2   := AllTrim(FWModeAccess("SA2",1))aAdd(aFilial,{aAllGroup[nI,1],aAllGroup[nI,2]})
        cMAUniSA2   := AllTrim(FWModeAccess("SA2",2))aAdd(aGrp,aAllGroup[nI,1]) 
        cMAFilSA2Else
  := AllTrim(FWModeAccess("SA2",3))
        cMAEmpSE1  :aFilial[nPos,2] += AllTrim(FWModeAccess("SE1",1))|" + aAllGroup[nI,2] 
        cMAUniSE1Endif
    := AllTrim(FWModeAccess("SE1",2))Next nI
    
    cMAFilSE1aFilGrp  := AllTrim(FWModeAccess("SE1",3)FIXGRPFIL(aFilial, 1)
    aAdd(aButtons, {Nil, "Atualizar", {||FIXALL()}, Nil, 2, .T., Nil})
    
    cMAEmpSE2oModal  := AllTrimFWDialogModal(FWModeAccess("SE2",1))
):New()       
 cMAUniSE2   oModal:= AllTrim(FWModeAccess("SE2",2))SetEscClose(.T.)
    oModal:setTitle("Fix - REINF (COM cMAFilSE2/ FAT := AllTrim(FWModeAccess("SE2",3))/ FIN)")
    oModal:setSubTitle("Documentos de Entrada/Saida e nTamFilSEDTitulos := 0a Pagar/Receber")
    
    nTamFilSA1 := 0
        nTamFilSA2 := 0//Seta a largura e altura da janela em pixel
    oModal:setSize(280,500) 
    oModal:createDialog()
    nTamFilSE1 := 0oModal:addCloseButton(nil, "Fechar") 
        nTamFilSE2 := 0oModal:addButtons(aButtons)
    
    nTamEmpoContainer    := LenTPanel(FwSM0Layout):New(,1) ,,, oModal:getPanelMain() )
    oContainer:SetCss("TPanel{background-color : white;}")
  nTamUni   oContainer:Align := Len(FwSM0Layout(,2))CONTROL_ALIGN_ALLCLIENT
    
    nTamFiloS1    := LenTSay(FwSM0Layout):New(,3))    10,05,{|| "Descrição: Selecione a(s) filial(ais)"},oContainer,,,,,,.T.,,,180,150)
    
        //Grupo Empresa
    oBrw1    If (nTamEmp+nTamUni) == 0:= TWBrowse():New(40,05,190,165,,{"Grupo Empresa"},{05,20},oContainer,,,,,,,,,,,,.F.,,.T.,,.F.,,,) //"Grupo Empresa"
    oBrw1:SetArray(aGrp)
        cMAEmpSED := cMAUniSEDoBrw1:bLine	  := cMAFilSED
  {|| {aGrp[oBrw1:nAt]} }
          cMAEmpSA1 oBrw1:bChange := cMAUniSA1 := cMAFilSA1{|| FIXGRP(oBrw1:nAt, aFilial, oBrw2)}
    
    //Grupo Empresa   cMAEmpSA2 := cMAUniSA2 := cMAFilSA2- Filiais
            cMAEmpSE1 oBrw2 := cMAUniSE1 := cMAFilSE1
            cMAEmpSE2 := cMAUniSE2 := cMAFilSE2
        Else
            If nTamEmp == 0
                cMAEmpSED := cMAUniSED
                cMAEmpSA1 := cMAUniSA1
                cMAEmpSA2 := cMAUniSA2
                cMAEmpSE1 := cMAUniSE1
                cMAEmpSE2 := cMAUniSE2
            ElseIf nTamUni == 0 
                cMAUniSED := cMAFilSED
                cMAUniSA1 := cMAFilSA1
                cMAUniSA2 := cMAFilSA2
                cMAUniSE1 := cMAFilSE1
                cMAUniSE2 := cMAFilSE2        
            EndIf 
        EndIf
        
        nTamFilSED := (IIf(cMAEmpSED == "C", 0, nTamEmp) + IIf(cMAUniSED == "C", 0, nTamUni) + IIf(cMAFilSED == "C", 0, nTamFil))
        nTamFilSA1 := (IIf(cMAEmpSA1 == "C", 0, nTamEmp) + IIf(cMAUniSA1 == "C", 0, nTamUni) + IIf(cMAFilSA1 == "C", 0, nTamFil))
        nTamFilSA2 := (IIf(cMAEmpSA2 == "C", 0, nTamEmp) + IIf(cMAUniSA2 == "C", 0, nTamUni) + IIf(cMAFilSA2 == "C", 0, nTamFil))
        nTamFilSE1 := (IIf(cMAEmpSE1 == "C", 0, nTamEmp) + IIf(cMAUniSE1 == "C", 0, nTamUni) + IIf(cMAFilSE1 == "C", 0, nTamFil))
        nTamFilSE2 := (IIf(cMAEmpSE2 == "C", 0, nTamEmp) + IIf(cMAUniSE2 == "C", 0, nTamUni) + IIf(cMAFilSE2 == "C", 0, nTamFil))
        
        //Atualiza a natureza de rendimentos do contas a pagar        
        FinCPag(aFiliais, nTamFilSED, nTamFilSA2, nTamFilSE2)
        
        //Atualiza a natureza de rendimentos do contas a receber
        FinCRec(aFiliais, nTamFilSED, nTamFilSA1, nTamFilSE1)        
    Else   
        Help(" ", 1, "ATUAMBREINF", Nil, "Ambiente desatualizado", 2, 0, Nil, Nil, Nil, Nil, Nil, {"Para realizar o ajuste da base, é necessário atualizar o ambiente"})
    EndIf
Return lRetorno

/*/{Protheus.doc} FinCPag    
    @type User Function
    @author Sivaldo Oliveira
    @since 28/08/2023
    
    @param aFiliais, array unidimensional, lista de filais que serão processadas
    @return Logical, lRetorno, Logico que indica se ocorreu o processamento de atualização
    da natureza de rendimento do títulos a pagar
/*/
Static Function FinCPag(aFiliais As Array, nTamFilSED As Numeric, nTamFilSA2 As Numeric, nTamFilSE2 As Numeric) As Logical    
    Local lRetorno   As Logical
    Local lAchouFKF  As Logical
    Local cTblPagar  As Char
    Local cQuery     As Char
    Local cIdDocFK7  As Char
    Local cTpImpos   As Char
    Local nMenorFil  As Numeric        
    Local nTpImpos   As Numeric
    Local nVlrImpos  As Numeric
    Local nBaseImpos As Numeric 
    Local aDados     As Array
    
    //Parâmetros de entrada.
    Default aFiliais   := {cFilAnt}
    Default nTamFilSED := 0
    Default nTamFilSA2 := 0
    Default nTamFilSE2 := 0
    
    //Inicializa variáveis.
    Retorno    := .T.
    lAchouFKF  := .T.
    cTblPagar  := ""
    cQuery     := ""
    cIdDocFK7  := ""
    cTpImpos   := "SEMIMP"
    nMenorFil  := 0
    nTpImpos   := 0
    nVlrImpos  := 0
    nBaseImpos := 0
    aDados     := {}
    
    If __oTitPaga == Nil
        cQuery := "SELECT SE2.E2_FILIAL, SE2.E2_PREFIXO, SE2.E2_NUM, SE2.E2_PARCELA, SE2.E2_TIPO, SE2.E2_FORNECE, SE2.E2_LOJA, SE2.E2_FILORIG, "
        cQuery += "SE2.E2_PIS, SE2.E2_COFINS, SE2.E2_CSLL, SE2.E2_IRRF, SE2.E2_VALOR, SE2.E2_SALDO, SE2.E2_BASEIRF, SE2.E2_BASEPIS, SE2.E2_BASECOF, "
        cQuery += "SE2.E2_BASECSL, SE2.R_E_C_N_O_, SED.ED_NATREN, SED.ED_CALCIRF, SED.ED_CALCPIS, SED.ED_CALCCOF, SED.ED_CALCCSL, SED.ED_PERCIRF, "
        cQuery += "SED.ED_PERCPIS, SED.ED_PERCCOF, SED.ED_PERCCSL, SA2.A2_RECPIS, SA2.A2_RECCOFI, SA2.A2_RECCSLL, SA2.A2_CALCIRF "
        cQuery += "FROM ? SE2 "
        
        //Relacionamento: SE2 vs SED
        nMenorFil := IIf(nTamFilSED > nTamFilSE2, nTamFilSE2, nTamFilSED)
        
        cQuery += "INNER JOIN ? SED ON "
        cQuery += "(SUBSTRING(SE2.E2_FILIAL, 1, " + cValToChar(nMenorFil) + ") = SUBSTRING(SED.ED_FILIAL, 1, " + cValToChar(nMenorFil) + ") "
        cQuery += "AND SE2.E2_NATUREZ = SED.ED_CODIGO "
        cQuery += "AND SE2.D_E_L_E_T_ = SED.D_E_L_E_T_) "

        //Relacionamento: SE2 vs SA2
        nMenorFil := IIf(nTamFilSA2 > nTamFilSE2, nTamFilSE2, nTamFilSA2)
        
        cQuery += "INNER JOIN ? SA2 ON "
        cQuery += "(SUBSTRING(SE2.E2_FILIAL, 1, " + cValToChar(nMenorFil) + ") = SUBSTRING(SA2.A2_FILIAL, 1, " + cValToChar(nMenorFil) + ") "
        cQuery += "AND SE2.E2_FORNECE = SA2.A2_COD "
        cQuery += "AND SE2.E2_LOJA = SA2.A2_LOJA "
        cQuery += "AND SE2.D_E_L_E_T_ = SA2.D_E_L_E_T_) "
        
        cQuery += "WHERE "
        cQuery += "SE2.E2_FILIAL IN (?) "
        cQuery += "AND SE2.E2_SALDO > 0 "
        cQuery += "AND SE2.E2_TIPO NOT IN ('PR', 'INS', 'TX', 'AB-', 'ISS', 'SES', 'CH') "
        cQuery += "AND SE2.E2_ORIGEM NOT IN ('MATA100', 'MATA103') "            
        cQuery += "AND SE2.D_E_L_E_T_ = ' ' "
        cQuery += "AND SED.ED_NATREN IS NOT NULL AND SED.ED_NATREN <> ' ' "            
        // cQuery += "AND ((SED.ED_CALCIRF = 'S') OR (SED.ED_CALCPIS = 'S') OR (SED.ED_CALCCOF = 'S') OR (SED.ED_CALCCSL = 'S')) "
        // cQuery += "AND ((A2_RECPIS = '2') OR (A2_RECCOFI = '2') OR (A2_RECCSLL = '2') OR (A2_CALCIRF <> '2')) "
        
        cQuery := ChangeQuery(cQuery)
        __oTitPaga := FwPreparedStatement():New(cQuery)
    EndIf
    
    __oTitPaga:SetNumeric(1, RetSqlName("SE2"))
    __oTitPaga:SetNumeric(2, RetSqlName("SED"))
    __oTitPaga:SetNumeric(3, RetSqlName("SA2"))
    __oTitPaga:SetIn(4, aFiliais)
    cQuery    := __oTitPaga:GetFixQuery()
    cTblPagar := MpSysOpenQuery(cQuery)
    
    DbSelectArea("FKF")
    FKF->(DbSetOrder(1))
    
    While (cTblPagar)->(!Eof())        
        cIdDocFK7 := FINBuscaFK7((cTblPagar)->(E2_FILIAL+"|"+E2_PREFIXO+"|"+E2_NUM+"|"+E2_PARCELA+"|"+E2_TIPO+"|"+E2_FORNECE+"|"+E2_LOJA), "SE2", (cTblPagar)->E2_FILORIG)
        
        If Empty(cIdDocFK7)
            (cTblPagar)->(DbSkip())
            Loop
        EndIf
        
        lAchouFKF := FKF->(MsSeek(xFilial("FKF", (cTblPagar)->E2_FILORIG)+cIdDocFK7))
        
        If (!lAchouFKF .Or. (lAchouFKF .And. !Empty(FKF->FKF_NATREN)))
            (cTblPagar)->(DbSkip())
            Loop
        EndIf
        
        //Atualiza FKF
        RecLock("FKF", .F.)
        FKF->FKF_NATREN := (cTblPagar)->ED_NATREN
        FKF->(MsUnLock())
        
        For nTpImpos := 1 To 5                
            Do Case
                Case nTpImpos == 1 //IRRF                        
                    If (AllTrim((cTblPagar)->ED_CALCIRF) != "S" .Or. (cTblPagar)->ED_PERCIRF <= 0 .Or. AllTrim((cTblPagar)->A2_CALCIRF) != "1")
                        Loop
                    EndIf
                    
                    cTpImpos   := "IRF"
                    nVlrImpos  := (cTblPagar)->E2_IRRF
                    nBaseImpos := (cTblPagar)->E2_BASEIRF                    
                Case nTpImpos == 2 //PIS
                    If (AllTrim((cTblPagar)->ED_CALCPIS) != "S" .Or. (cTblPagar)->ED_PERCPIS <= 0 .Or. AllTrim((cTblPagar)->A2_RECPIS) != "2")
                        Loop
                    EndIf
                    
                    cTpImpos   := "PIS"
                    nVlrImpos  := (cTblPagar)->E2_PIS 
                    nBaseImpos := (cTblPagar)->E2_BASEPIS                    
                Case nTpImpos == 3 //COFINS                        
                    If (AllTrim((cTblPagar)->ED_CALCCOF) != "S" .Or. (cTblPagar)->ED_PERCCOF <= 0 .Or. AllTrim((cTblPagar)->A2_RECCOFI) != "2")
                        Loop
                    EndIf                    
                    
                    cTpImpos   := "COF"
                    nVlrImpos  := (cTblPagar)->E2_COFINS 
                    nBaseImpos := (cTblPagar)->E2_BASECOF                     
                Case nTpImpos == 4 //CSLL                        
                    If (AllTrim((cTblPagar)->ED_CALCCSL) != "S" .Or. (cTblPagar)->ED_PERCCSL <= 0 .Or. AllTrim((cTblPagar)->A2_RECCSLL) != "2")
                        Loop
                    EndIf
                    
                    cTpImpos   := "CSL"
                    nVlrImpos  := (cTblPagar)->E2_CSLL 
                    nBaseImpos := (cTblPagar)->E2_BASECSL
                OtherWise // Títulos sem impostos
                    If Len(aDados) == 0
                        cTpImpos   := "SEMIMP"
                        nVlrImpos  := 0
                        nBaseImpos := (cTblPagar)->E2_VALOR                              
                    EndIf
            EndCase
            
            AAdd(aDados, {;
                (cTblPagar)->E2_FILIAL,;
                cIdDocFK7,;
                cTpImpos,;
                (cTblPagar)->ED_NATREN,;
                100,;
                nBaseImpos,;
                0,;  //valor do impos retido 7
                0,;  //Base imposto nao retido 8
                0,;  //Valor do impoto nao retido 9
                "",; //Numero Processo Judicial 10
                "",; //Tipo Processo 11
                "",; //Cod. Indicativo suspensao 12
                0})
        Next nTpImpos
        
        (cTblPagar)->(DbSkip())
    EndDo    
    
    (cTblPagar)->(DbCloseArea())
    
    //Gravação do FKW
    If Len(aDados) > 0
        F070Grv(aDados, 4, "1")
    EndIf  
Return lRetorno

/*/{Protheus.doc} FinCRec    
    @type User Function
    @author Sivaldo Oliveira
    @since 28/08/2023
    
    @param aFiliais, array unidimensional, lista de filais que serão processadas
    @return Logical, lRetorno, Logico que indica se ocorreu o processamento de atualização
    da natureza de rendimento do títulos a receber
/*/
Static Function FinCRec(aFiliais As Array, nTamFilSED As Numeric, nTamFilSA1 As Numeric, nTamFilSE1 As Numeric) As Logical
    Local lRetorno   As Logical
    Local lAchouFKF  As Logical
    Local cTblTmp    As Char
    Local cQuery     As Char
    Local cIdDocFK7  As Char
    Local cTpImpos   As Char
    Local nMenorFil  As Numeric
    Local aDados     As Array
    
    //Parâmetros de entrada.
    Default aFiliais   := {cFilAnt}
    Default nTamFilSED := 0
    Default nTamFilSA1 := 0
    Default nTamFilSE1 := 0
    
    //Inicializa variáveis.
    Retorno    := .T.
    lAchouFKF  := .T.
    cTblTmp  := ""
    cQuery     := ""
    cIdDocFK7  := ""
    nMenorFil  := 0
    aDados     := {}
    
    If __oTitRece == Nil        
        cQuery := "SELECT SE1.E1_FILIAL, SE1.E1_PREFIXO, SE1.E1_NUM, SE1.E1_PARCELA, SE1.E1_TIPO, SE1.E1_CLIENTE, SE1.E1_LOJA, SE1.E1_FILORIG, SE1.E1_PIS, "
        cQuery += "SE1.E1_COFINS, SE1.E1_CSLL, SE1.E1_IRRF, SE1.E1_VALOR, SE1.E1_SALDO, SE1.E1_BASEIRF, SE1.E1_BASEPIS, SE1.E1_BASECOF, SE1.E1_BASECSL, "
        cQuery += "SE1.R_E_C_N_O_, SED.ED_NATREN, SED.ED_CALCIRF, SED.ED_CALCPIS, SED.ED_CALCCOF, SED.ED_CALCCSL, SED.ED_PERCIRF, SED.ED_PERCPIS, "
        cQuery += "SED.ED_PERCCOF,SED.ED_PERCCSL FROM ? SE1 "        
        
        //Relacionamento: SE1 vs SED
        nMenorFil := IIf(nTamFilSED > nTamFilSE1, nTamFilSE1, nTamFilSED)
        
        cQuery += "INNER JOIN ? SED ON "
        cQuery += "(SUBSTRING(SE1.E1_FILIAL , 1 , " + cValToChar(nMenorFil) + ") = SUBSTRING(SED.ED_FILIAL , 1 , " + cValToChar(nMenorFil) + ") "
        cQuery += "AND SE1.E1_NATUREZ = SED.ED_CODIGO "
        cQuery += "AND SE1.D_E_L_E_T_ = SED.D_E_L_E_T_) "
        
        //Relacionamento: SE1 vs SA1
        nMenorFil := IIf(nTamFilSA1 > nTamFilSE1, nTamFilSE1, nTamFilSA1)
        
        cQuery += "INNER JOIN ? SA1 ON "
        cQuery += "(SUBSTRING(SE1.E1_FILIAL , 1 , " + cValToChar(nMenorFil) + ") = SUBSTRING(SA1.A1_FILIAL , 1 , " + cValToChar(nMenorFil) + ") "
        cQuery += "AND SE1.E1_CLIENTE = SA1.A1_COD "
        cQuery += "AND SE1.E1_LOJA = SA1.A1_LOJA "
        cQuery += "AND SE1.D_E_L_E_T_ = SA1.D_E_L_E_T_)"
        
        //Filtro de linhas
        cQuery += "WHERE "
        cQuery += "SE1.E1_FILIAL IN (?) AND SE1.E1_SALDO > 0 "
        cQuery += "AND SE1.E1_TIPO NOT IN ('PR', 'INS', 'TX', 'AB-', 'ISS', 'SES', 'CH') "
        cQuery += "AND SE1.E1_ORIGEM NOT IN ('MATA460', 'MATA461') "
        cQuery += "AND SED.ED_NATREN IS NOT NULL AND SED.ED_NATREN <> ' ' AND SED.ED_CALCIRF = 'S' "
        cQuery += "AND SA1.A1_RECIRRF = '2' AND SE1.D_E_L_E_T_ = ' ' "
        cQuery := ChangeQuery(cQuery)
        __oTitRece := FwPreparedStatement():New(cQuery)
    EndIf    
    
    __oTitRece:SetNumeric(1, RetSqlName("SE1"))
    __oTitRece:SetNumeric(2, RetSqlName("SED"))
    __oTitRece:SetNumeric(3, RetSqlName("SA1"))
    __oTitRece:SetIn(4, aFiliais)
    cQuery    := __oTitRece:GetFixQuery()
    cTblTmp := MpSysOpenQuery(cQuery)
    
    DbSelectArea("FKF")
    FKF->(DbSetOrder(1))
    
    While (cTblTmp)->(!Eof())        
        cIdDocFK7 := FINBuscaFK7((cTblTmp)->(E1_FILIAL+"|"+E1_PREFIXO+"|"+E1_NUM+"|"+E1_PARCELA+"|"+E1_TIPO+"|"+E1_CLIENTE+"|"+E1_LOJA), "SE1", (cTblTmp)->E1_FILORIG)
        
        If Empty(cIdDocFK7)
            (cTblTmp)->(DbSkip())
            Loop
        EndIf
        
        lAchouFKF := FKF->(MsSeek(xFilial("FKF", (cTblTmp)->E1_FILORIG)+cIdDocFK7))
        
        If (!lAchouFKF .Or. (lAchouFKF .And. !Empty(FKF->FKF_NATREN)))
            (cTblTmp)->(DbSkip())
            Loop
        EndIf
        
        //Atualiza FKF
        RecLock("FKF", .F.)
        FKF->FKF_NATREN := (cTblTmp)->ED_NATREN
        FKF->(MsUnLock())
        
        AAdd(aDados, {;
            (cTblTmp)->E1_FILIAL,;
            cIdDocFK7,;
            "IRF",;
            (cTblTmp)->ED_NATREN,;
            100,;
            (cTblTmp)->E1_BASEIRF,;
            (cTblTmp)->E1_IRRF,;
            0,;  //Base imposto nao retido 8
            0,;  //Valor do impoto nao retido 9
            "",; //Numero Processo Judicial 10
            "",; //Tipo Processo 11
            "",; //Cod. Indicativo suspensao 12
            0})
        
        (cTblTmp)->(DbSkip())
    EndDo
    
     (cTblTmp)->(DbCloseArea())    
    
    //Gravação do FKW
    If Len(aDados) > 0
        F070Grv(aDados, 4, "2")
    EndIf
    
Return lRetorno
 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á.

...