;* EXPD_MRC *******************************************************************
;*  Exporta‡Ćo de Duplicatas em TXT p/ Sistema Cont bil  ** Macro System **    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 01/10/2015 por Anivel Augusto Rodrigues
;Ultima Alteracao: 23/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Lancto Credito, Departamento,Centro de Custo
;Ultima Alteracao: 25/01/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tipo lancamento d/c                         
;Ultima Alteracao: 16/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data credito no banco BB, conta clientes    
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 17/10/2018 por Bruno Carvalho
;Motivo Alteracao: Return no Monta_DadosI() p/ quando nĆo tiver nota
;Ultima Alteracao: 02/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo               
;Ultima Alteracao: 24/03/2021 por Bruno Carvalho
;Motivo Alteracao: Alterado mensagem de confirma‡Ćo ao gerar o arquivo p/ MensagemMP()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SelecionaDuplicatas()
Private CONTA_LANCTOS,i

Aguarde("Aguarde, selecionando dados")                 

If VSDGOPCAO[1] Then
   
    {Ask} {\\Sistemas\\Ctapag\\Titulos}         
    Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
    Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
    Moveto [Tipo do Documento     ] Check
    Moveto [Numero do Documento   ] Check
    Moveto [Codigo do Documento   ] Check

    Moveto [Data Competencia      ] Check
    Moveto [Data de Emissao       ] Check
    Moveto [Data de Vencimento    ] Check
    Moveto [Valor do Documento    ] Check

    Moveto [Codigo do Emitente    ] Check
    Moveto [Razao Social          ] Check 
    Moveto [Lancamento Gerador    ] Check
    Moveto [Sequencia Gerador     ] Check  
    Moveto [Sistema Gerador       ] Check TypeIn "Not Blank, Not MA"               ;<<<< Registros n„o manuais e diferente de branco

    {Ask} {\\Sistemas\\Ctapag\\Titbaixa}            
    Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
    Moveto [Tipo de Operacao      ] Check
    Moveto [Valor do Pagamento    ] Check
    Moveto [Numero do Cheque      ] Check

    Moveto [Sequencia da Baixa    ] Check
    Moveto [Data do Pagamento     ] Check TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
    Moveto [Codigo da Conta       ] Check
    Moveto [Tipo da Conta         ] Check
    Moveto [Valor do Juros        ] Check
    Moveto [Valor do Desconto     ] Check
    Moveto [Lancamento Conta Corrente] Check
    Do_It!
    ClearAll 
    
    If Not IsEmpty("Answer")
       Then
            Sort "Answer" On "Lancamento Gerador","Sequencia Gerador","Numero do Documento"
            ClearAll
            
            ;---- Baixas do Contas a Pagar ---------------------------------
            NR=NRecords("Answer")
            View_Tabelas()
            Coedit "Answer"
            Scan
              Barra(NR, RecNo())
              Aguarde("Aguarde, selecionando baixas do contas a pagar "+BARRA_STRING)
              
              Monta_DadosI("5")
              Moveto "Answer"
            EndScan
            Do_it!
            ClearAll
        
    EndIf
   
EndIf   


If VSDGOPCAO[2] Then

    {Ask} {\\Sistemas\\Ctarec\\Duplic}
    Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
    Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
    Moveto [Tipo do Documento     ] Check
    Moveto [Numero do Documento   ] Check
    Moveto [Codigo do Documento   ] Check
    
    Moveto [Data de Emissao       ] Check
    Moveto [Data de Vencimento    ] Check
    Moveto [Valor do Documento    ] Check

    Moveto [Codigo do Destinatario] Check
    Moveto [Razao Social          ] Check 
    Moveto [Tipo Docto Gerador    ] Check 
    Moveto [Numero Docto Gerador  ] Check                                  
    Moveto [Sequencia Gerador     ] Check  
    Moveto [Sistema Gerador       ] Check TypeIn "Not Blank, Not MA"               ;<<<< Registros n„o manuais e diferente de branco
    
    {Ask} {\\Sistemas\\Ctarec\\Dupbaixa}
    Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
    Moveto [Valor do Recebimento  ] Check

    Moveto [Sequencia da Baixa    ] Check
    Moveto [Data do Pagamento     ] Check TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
    Moveto [Codigo da Conta       ] Check
    Moveto [Tipo da Conta         ] Check
    Moveto [Valor do Juros        ] Check
    Moveto [Valor do Desconto     ] Check
    Moveto [Lancamento Conta Corrente] Check
    Do_It!
    ClearAll 
    
    If Not IsEmpty("Answer")
       Then
            Sort "Answer" On "Tipo Docto Gerador","Numero Docto Gerador", "Sequencia Gerador","Numero do Documento"
            ClearAll

            ;---- Baixas do Contas a Receber -------------------------------
            NR=NRecords("Answer")
            View_Tabelas()
            Coedit "Answer"
            Scan
              Barra(NR, RecNo())
              Aguarde("Aguarde, selecionando baixas do contas a receber "+BARRA_STRING)
              
              Monta_DadosI("6") 
              Moveto "Answer"
            EndScan
            Do_it!
            ClearAll
            
    EndIf
                      
EndIf

EndProc ;Seleciona()

;*******************************************************************************
;* Rotina p/ Inserir Registros                                                 *
;*******************************************************************************
Proc View_Tabelas()
 
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Tpdoctos"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Ctacor\\Conta"
View "\\Sistemas\\Ctacor\\Movcont"

View "MKRC0150"
View "MKRCI050"
View "MKRCI075"
View "MKRCI100"
View "MKRCMS91"
View "MKRCI200"
View "MKRCI250"

EndProc ;View_Tabelas()

;*******************************************************************************
;* Rotina p/ Inserir Registros                                                 *
;*******************************************************************************
Proc Monta_DadosI(PARAM)
Private PARAM                


;-- I200 ------------
DT_LCTO  =BlankDate()     
VL_LCTO  =BlankNUm()
IND_LCTO =""
COD_DEP  =""
OBS      =""

;-- I250 ------------
COD_CTA  =""
COD_CCUS =""
VL_DC    =BlankNum()
IND_DC   =""
COD_HIST =""
HIST     =""
COD_PART =""
ID_LCTO  =""
TIPO_LCTO=""


;---- Numero Documento de Origem ----------------------------------------------- Opera‡äes Internas                   
DOCTO_EMPRESA= [Codigo da Empresa   ]
DOCTO_LANCTO = "LANCTO?"
DOCTO_NUMERO = "NUMERO?"
DOCTO_DATA   = BlankDate()
DOCTO_SERIE  = "SERIE?" 
DOCTO_PARCELA= StrVal([Sequencia Gerador]) 


;---- Contas a Pagar e Nota de Entrada -----------------------------------------
If (PARAM = "5") ;And [Sistema Gerador]="NE"  ;Dupl.Fornecedores 
   Then 
        If [Sistema Gerador]<>"NE"
           Then Return 
        EndIf   
   
        DOCTO_LANCTO = [Lancamento Gerador  ] ;NotaEC
        DOCTO_DATA   = [Data Competencia    ]     
        
        old_dtemis   = [Data Competencia    ]
        
        Dir_Trab=""
        For wi From 1 to 3
          If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC")
             Then GetRecord "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" DOCTO_LANCTO To REG_NOTA 
                  If RetVal
                     Then DOCTO_NUMERO = REG_NOTA["Numero do Documento"] 
                          DOCTO_DATA   = REG_NOTA["Data de Entrada"]
                          DOCTO_CODDOC = REG_NOTA["Codigo do Documento"]
                          DOCTO_SERIE  = REG_NOTA["Serie do Documento" ]
                          QuitLoop
                  EndIf
          EndIf   
          Switch
            Case wi = 1 : [Data Competencia]=Primeiro_Dia_Data([Data Competencia])-1
            Case wi = 2 : [Data Competencia]=Ultimo_Dia_Data([Data Competencia])+1
          EndSwitch
          Dir_Trab="FechaMes\\"+AlinhM(StrVal(Year([Data Competencia])),4)+"_"+AlinhM(StrVal(Month([Data Competencia])),2)+"\\" 
        EndFor  
        [Data Competencia]=old_dtemis
EnDIf
       
;---- Contas a Receber e Nota de Saida -----------------------------------------
If (PARAM = "6") And [Sistema Gerador]<>"MA"   ;Dupli.Clientes  
   Then 
        DOCTO_NUMERO = [Numero Docto Gerador] ;NotaC
        DOCTO_DATA   = [Data de Emissao     ]     
        
        old_dtemis=[Data de Emissao]
     
        Dir_Trab=""
        For wi From 1 to 3
          If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
             Then 
                  DOCTO_CODDOC = [Tipo Docto Gerador]
                  
                  GetRecord "\\Sistemas\\Cadastro\\Tpdoctos" DOCTO_CODDOC To REG_DOCTO                              
                  If RetVal
                     Then DOCTO_SERIE = REG_DOCTO["Serie do Documento" ]
                  EndIf
             
                  GetRecord "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" DOCTO_EMPRESA,DOCTO_NUMERO,DOCTO_SERIE To REG_NOTA 
                  If RetVal
                     Then DOCTO_DATA   = REG_NOTA["Data de Emissao"]                              
                                      
                          QuitLoop
                  EndIf
                  
          EndIf
          Switch
            Case wi = 1 : [Data de Emissao]=Primeiro_Dia_Data([Data de Emissao])-1
            Case wi = 2 : [Data de Emissao]=Ultimo_Dia_Data([Data de Emissao])+1
          EndSwitch
          Dir_Trab="FechaMes\\"+AlinhM(StrVal(Year([Data de Emissao])),4)+"_"+AlinhM(StrVal(Month([Data de Emissao])),2)+"\\" 
        EndFor  
        [Data de Emissao]=old_dtemis
EndIf          

;---- Conta --------------------------------------------------------------------
if [Codigo da Conta]<>contant
   then contant=[Codigo da Conta]

        COD_CTA="COD_CTA?"
        GetRecord "\\Sistemas\\Ctacor\\Conta" [Codigo da Conta] To regconta
        If RetVal
           then COD_CTA=regconta["Conta Contabil"] 
        EndIf
endif

;---- Data do Pagameto ---------------------------------------------------------
DT_LCTO       = [Data do Pagamento]

;---- Movcont data credito banco -----------------------------------------------
if (PARAM = "6") And [Sistema Gerador]<>"MA" 
   and [Tipo da Conta]="C" and regconta["Numero do Banco" ]="001" ; somenta banco do brasil
   then
        old_dtpg=[Data do Pagamento]
     
        Dir_Trab=""
        For wi From 1 to 3
          If IsTable("\\Sistemas\\ctacor\\"+Dir_Trab+"Movcont")
             Then 
                  GetRecord "\\Sistemas\\ctacor\\movcont" [Lancamento Conta Corrente], [Codigo da Conta] to regmovcont
                  If RetVal
                     Then DT_LCTO = regmovcont["Data" ]
                                      
                          QuitLoop
                  EndIf
                  
          EndIf
          Switch
            Case wi = 1 : [Data do Pagamento]=Primeiro_Dia_Data([Data do Pagamento])-1
            Case wi = 2 : [Data do Pagamento]=Ultimo_Dia_Data([Data do Pagamento])+1
          EndSwitch
          Dir_Trab="FechaMes\\"+AlinhM(StrVal(Year([Data do Pagamento])),4)+"_"+AlinhM(StrVal(Month([Data do Pagamento])),2)+"\\" 
        EndFor  
        [Data do Pagamento]=old_dtpg
   
endif   

;---- Identificacao Lancamento -------------------------------------------------
DOCTO_NUMERO = AlinhM(DOCTO_NUMERO,10)
If IsBlank(DOCTO_SERIE)
  Then DOCTO_SERIE="000"
  Else DOCTO_SERIE=COmpleta(DOCTO_SERIE,3," ")
EndIf   
DOCTO_PARCELA= AlinhM(DOCTO_PARCELA,3)
DATA_ID      = AlinhM(StrVal(Day(DOCTO_DATA)),2)+AlinhM(StrVal(Month(DOCTO_DATA)),2)+AlinhM(StrVAl(Year(DOCTO_DATA)),4)
  
ID_LCTO      =DOCTO_NUMERO+DATA_ID+DOCTO_SERIE+DOCTO_PARCELA

;---- Numero da Duplicata ------------------------------------------------------
DOCTO_DUP     = [Numero do Documento]


Switch  
  Case PARAM = "5" : IND_DC  ="D"      ;Dupl.Fornecedores
                     COD_HIST="477" 
                     HIST="Pag. dupl. n "+DOCTO_DUP+" de "+[Razao Social]
                     COD_CCUS="94"
                     COD_DEP="37"

                     ;---- Participante -------------------------------------------------------------
                     VCOD_PART = [Codigo do Emitente]
                     COD_PART  = [Codigo do Emitente]

                     GetRecord "\\Sistemas\\Cadastro\\Destinat" VCOD_PART To REG_PART
                     if retval
                        Then if reg_part["Tipo Pessoa"]="JURIDICA"
                                then COD_PART=Tira_CharNum(reg_part["CGC"])
                                else COD_PART="000"+Tira_CharNum(reg_part["CGC"])
                             endif
                     endif           

                     ;---- Numero do Cheque (Contas a Pagar) ----------------------------------------
                     If [Tipo de Operacao]="05"
                        Then DOCTO_CHEQUE = [Numero do Cheque]
                             COD_HIST="477" 
                             HIST=""
                     EndIf

                     ;---- Valor do Documento -------------------------------------------------------
                     VL_DC = ([Valor do Pagamento  ]-[Valor do Juros])+[Valor do Desconto]

  Case PARAM = "6" : IND_DC  ="C"       ;Dupli.Clientes
                     COD_HIST="125" 
                     HIST="Rec. dupl. n "+DOCTO_DUP+" de "+[Razao Social]
                     COD_CCUS="94"
                     COD_DEP="37"
                     
                     ;---- Participante -------------------------------------------------------------
                     VCOD_PART = [Codigo do Destinatario]
                     COD_PART  = [Codigo do Destinatario]
                     
                     GetRecord "\\Sistemas\\Cadastro\\Destinat" VCOD_PART To REG_PART
                     if retval
                        Then if reg_part["Tipo Pessoa"]="JURIDICA"
                                then COD_PART=Tira_CharNum(reg_part["CGC"])
                                else COD_PART="000"+Tira_CharNum(reg_part["CGC"])
                             endif
                     endif           

                     ;---- Valor do Documento -------------------------------------------------------
                     VL_DC = ([Valor do Recebimento]-[Valor do Juros])+[Valor do Desconto]

EndSwitch  

;---- JUROS/DESCONTO -----------------------------------------------------------
DOCTO_JUROS   = [Valor do Juros]
DOCTO_DESCTO  = [Valor do Desconto]

;**** ADICIONANDO DADOS NA TABEL/Debito*****************************************

VL_LCTO  =VL_DC
IND_LCTO ="N"
OBS      =""
GravaI200()


TIPO_LCTO    =PARAM
GravaI250()

;**** ADICIONANDO DADOS NA TABEL/Credito****************************************
Switch  
  Case PARAM = "5" : ;Dupl.Fornecedores
       COD_CTA=SCI_CONTA_FORNECEDORES
       IND_DC  ="C"

  Case PARAM = "6" : ;Dupli.Clientes
       COD_CTA=SCI_CONTA_CLIENTES
       IND_DC  ="D"

EndSwitch  
GravaI250()


; gravando juros na baixa
if DOCTO_JUROS>0 
   Then VL_LCTO=DOCTO_JUROS
        switch
          case PARAM="5": ;Dupl.Fornecedores
            COD_CTA ="?J"
            IND_DC  ="D"
            COD_HIST="?J"
            HIST="?J"
            TIPO_LCTO="9"
          
          case PARAM="6": ;Dupli.Clientes 
            COD_CTA ="?J"
            IND_DC  ="C"
            COD_HIST="?J" 
            HIST="?J"
            TIPO_LCTO="8"
        endswitch

;       GravaI250()
endif
       
; gravando desconto na baixa
if DOCTO_DESCTO>0
   Then VL_LCTO=DOCTO_DESCTO
        switch
          case PARAM="5": ;Dupl.Fornecedores 
            COD_CTA ="?D"
            IND_DC  ="C"
            COD_HIST="?D" 
            HIST="?D"
            TIPO_LCTO="0"
            
          case PARAM="6": ;Dupli.Clientes 
            COD_CTA ="?D"
            IND_DC  ="D"
            COD_HIST="?D" 
            HIST="?D"
            TIPO_LCTO="0"
        endswitch

;       GravaI250()
endif       
            
EndProc ;Monta_Dados()


;*******************************************************************************
;* Rotina para gravar registro I200                                            *
;*******************************************************************************
Proc GravaI200()

Grava_Departamento(COD_DEP,ID_LCTO)

NLANCTo=NLANCTO+1
NSEQ   =0

Moveto "MKRCI200"
End Down                                                                        
[NUM_LCTO                 ] = NLANCTO     
[DT_LCTO                  ] = DT_LCTO                   
[VL_LCTO                  ] = VL_LCTO
[IND_LCTO                 ] = IND_LCTO
[COD_DEP                  ] = COD_DEP
[OBS                      ] = OBS
UnLockRecord

Moveto "Answer"

EndProc

;*******************************************************************************
;* Rotina para gravar registro I250                                            *
;*******************************************************************************
Proc GravaI250()

Grava_Participantes(VCOD_PART,ID_LCTO)
Grava_PlanoConta(COD_CTA,ID_LCTO)
Grava_CentroCusto(COD_CCUS,ID_LCTO)
Grava_Historico(COD_HIST,ID_LCTO)

NSEQ=NSEQ+1

Moveto "MKRCI250"
End Down                                                                        
[NUM_LCTO                 ] = NLANCTO     
[SEQ                      ] = NSEQ         
[COD_CTA                  ] = COD_CTA
[COD_CCUS                 ] = COD_CCUS
[VL_DC                    ] = VL_DC
[IND_DC                   ] = IND_DC
[COD_HIST                 ] = COD_HIST
[HIST                     ] = HIST
[COD_PART                 ] = COD_PART
[ID_LCTO                  ] = ID_LCTO
[TIPO_LCTO                ] = TIPO_LCTO
UnLockRecord

Moveto "Answer"

EndProc


;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
Proc Valor_Str(Valor,Dec)
Private VrTit,Valor,Dec,Part1,Part2

If IsBlank(Valor)
  Then Valor=0
EndIf  
Switch
 Case dec=0 : VrTit=Format("W13,EI,AL",Valor)
 Case dec=1 : VrTit=Format("W13.1,EI,AL",Valor)
 Case dec=2 : VrTit=Format("W13.2,EI,AL",Valor)
 Case dec=3 : VrTit=Format("W13.3,EI,AL",Valor)
 Case dec=4 : VrTit=Format("W13.4,EI,AL",Valor)
 Case dec=5 : VrTit=Format("W13.5,EI,AL",Valor)
 Case dec=6 : VrTit=Format("W13.6,EI,AL",Valor)
EndSwitch
VrTit=RTrim(LTrim(VrTit))

Return VrTit
EndProc  ; (Valor_Str)

;********************************************************************************
;* CONVERTE DATA PARA STRING                                                    *
;********************************************************************************
Proc Data_Str(Data)
Private DtTit,Data 

If IsBlank(Data)
  Then DtTit=""
  Else DtTit=AlinhM(StrVal(  Day(Data)),2)+
             AlinhM(StrVal(Month(Data)),2)+
             AlinhM(StrVal( Year(Data)),4)
EndIf  

Return DtTit
EndProc  ; (Data_Str)

;*******************************************************************************
;* Rotina para gravar participantes MKRC0150               
;*******************************************************************************
Proc Grava_Participantes(Codigo,Docto)
Private Codigo, TabAtual, Docto 

If IsBlank(Codigo)
   Then Return
EndIf
   
TabAtual=Table()

While True
  Moveto "MKRC0150"
  Moveto [COD_PART]
  Locate COD_PART
  If RetVal
     Then QuitLoop
  EndIf
  
  Moveto "\\Sistemas\\Cadastro\\Destinat"
  Moveto [Codigo]
  Locate Codigo
  If Not Retval
     Then Mensagem("Erro dados PARTICIPANTE-[DESTINAT] : "+Codigo+"//"+Docto)
          End Down
  EndIf  
  
  Moveto "\\Sistemas\\Cadastro\\Cidades"
  Moveto [Cidade]
  Locate [\Sistemas\Cadastro\Destinat->Cidade],
         [\Sistemas\Cadastro\Destinat->UF    ]
  If Not Retval
     Then Mensagem("Erro dados PARTICIPANTE-[CIDADES] : "+[\Sistemas\Cadastro\Destinat->Cidade]+"/"+[\Sistemas\Cadastro\Destinat->UF]+
                   "//PARTICIPANTE-[DESTINAT] : "+Codigo+"//"+Docto)
          End Down
  EndIf  
  
  Moveto "MKRC0150"
  End
  Down   
  [COD_PART      ]=COD_PART                            
  [NOME          ]=[\Sistemas\Cadastro\Destinat->Razao Social]
  [COD_PAIS      ]=StrVal([\Sistemas\Cadastro\Cidades->Codigo_Pais])
  Switch
    Case [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="JURIDICA" : [CNPJ ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->CGC])
                                                                 [IE   ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->IE])
                                                                 If [IE]="ISENTO" Or [IE]="NAOCONTRIBUINTE"
                                                                    Then [IE]=""
                                                                 EndIf   
                                                                 [IE_ST]=Tira_CharNum([\Sistemas\Cadastro\Destinat->IE_ST])
                                                                 [IM   ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->IM])
    Case [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="FISICA"   : [CPF ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->CGC])
                                                                 [IE  ]=""
  EndSwitch
  [UF            ]=[\Sistemas\Cadastro\Destinat->UF]
  [COD_MUN       ]=StrVal([\Sistemas\Cadastro\Cidades->Codigo_Cidade])
  [SUFRAMA       ]=[\Sistemas\Cadastro\Destinat->ISUFRAMA]
  UnLockRecord
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar Plano Contas MKRCI050                   
;*******************************************************************************
Proc Grava_PlanoConta(Codigo,Docto)
Private Codigo, TabAtual, Docto,
        Descricao, Indicador, Nivel 

If IsBlank(Codigo)
   Then Return
EndIf

Descricao ="???"
Indicador="A"
Nivel    =5  

Switch
  Case Codigo="X000": Descricao ="???"
                      Indicador=""
                      Nivel    =0  
  
  Case Codigo="X001": Descricao ="???"
                      Indicador=""
                      Nivel    =0  
  
EndSwitch
   

TabAtual=Table()

While True
  Moveto "MKRCI050"
  Moveto [COD_CTA]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf
  
  Moveto "MKRCI050"
  End
  Down   
  [COD_CTA       ]=Codigo
  [IND_CTA       ]=Indicador       
  [NIVEL         ]=Nivel           
  [CTA           ]=Descricao     
  UnLockRecord
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar Historico MKRCI075                   
;*******************************************************************************
Proc Grava_Historico(Codigo,Docto)
Private Codigo, TabAtual, Docto, Descricao 

If IsBlank(Codigo)
   Then Return
EndIf

Descricao ="???"

Switch
  Case Codigo="X000": Descricao ="???"
  
  Case Codigo="X001": Descricao ="???"
  
EndSwitch
   
   
TabAtual=Table()

While True
  Moveto "MKRCI075"
  Moveto [COD_HIST]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf
  
  Moveto "MKRCI075"
  End
  Down   
  [COD_HIST      ]=Codigo
  [DESCR_HIST    ]=Descricao              
  UnLockRecord
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar Centro Custo MKRCI100                   
;*******************************************************************************
Proc Grava_CentroCusto(Codigo,Docto)
Private Codigo, TabAtual, Docto, Descricao 

If IsBlank(Codigo)
   Then Return
EndIf
   
Descricao ="???"

Switch
  Case Codigo="X000": Descricao ="???"
  
  Case Codigo="X001": Descricao ="???"
  
EndSwitch
   
   
TabAtual=Table()

While True
  Moveto "MKRCI100"
  Moveto [COD_CCUS]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf
  
  Moveto "MKRCI100"
  End
  Down   
  [COD_CCUS      ]=Codigo
  [CCUS          ]=Descricao              
  UnLockRecord
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar Departamento MKRCMS91                   
;*******************************************************************************
Proc Grava_Departamento(Codigo,Docto)
Private Codigo, TabAtual, Docto, Descricao

If IsBlank(Codigo)
   Then Return
EndIf
   
Descricao ="???"

Switch
  Case Codigo="X000": Descricao ="???"
  
  Case Codigo="X001": Descricao ="???"
  
EndSwitch
   
   
TabAtual=Table()

While True
  Moveto "MKRCMS91"
  Moveto [COD_DEP]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf
  
  Moveto "MKRCMS91"
  End
  Down   
  [COD_DEP       ]=Codigo
  [DESCR_DEP     ]=Descricao              
  UnLockRecord
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc


;*******************************************************************************
;* Rotina para montagem do Bloco 0                    
;*******************************************************************************
Proc Monta_Bloco0()

;---- Gera MKRC0000 ------------------------------------------------------------ 
View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Cidades"
CoEdit "MKRC0000"

Moveto "\\Sistemas\\Cadastro\\Empresas"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA
If Not RetVal
   Then Mensagem("Erro dados empresa -[EMPRESAS]")
        Return False
EndIf

Moveto "\\Sistemas\\Cadastro\\Cidades"
Moveto [Cidade]
Locate [\Sistemas\Cadastro\Empresas->Cidade Empresa],
       [\Sistemas\Cadastro\Empresas->UF Empresa    ]
If Not Retval
   Then Mensagem("Erro dados empresa-[CIDADES] : "+[\Sistemas\Cadastro\Empresas->Cidade Empresa]+"/"+[\Sistemas\Cadastro\Empresa->UF Empresa]+
                 "//Empresa: "+VSDGEMPRESA)
        Return False
EndIf  
ECOD_MUN=StrVal([Codigo_Cidade])

Moveto "MKRC0000"
End Down
[DT_INI                  ]=VSDGDTINI
[DT_FIN                  ]=VSDGDTFIM
[NOME                    ]=[\Sistemas\Cadastro\Empresas->Razao Social Empresa]
[CNPJ                    ]=Tira_CharNum([\Sistemas\Cadastro\Empresas->CGC Empresa])
[UF                      ]=[\Sistemas\Cadastro\Empresas->UF Empresa]
[IE                      ]=Tira_CharNum([\Sistemas\Cadastro\Empresas->IE Empresa ])
[COD_MUN                 ]=ECOD_MUN
UnLockRecord

Do_It!
ClearAll

Return True
EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco 0                                
;*******************************************************************************
Proc GERA_BLOCO0()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo bloco 0",45," "))

;==== BLOCO 0: ABERTURA, IDENTIFICA€ÇO E REFERŇNCIAS ===========================

;--- Registro 0000: Abertura do Arquivo Digital e Identifica‡ao da Empresa -----
View "MKRC0000"
Print File ARQ "|0000"+"|"
Print File ARQ Data_Str([DT_INI])+"|"
Print File ARQ Data_Str([DT_FIN])+"|"
Print File ARQ ""+[NOME                    ]+"|"
Print File ARQ ""+[CNPJ                    ]+"|"
Print File ARQ ""+[UF                      ]+"|"
Print File ARQ ""+[IE                      ]+"|"
Print File ARQ ""+[COD_MUN                 ]+"|"+"\n"
ClearImage

;--- Registro 0150: Tabela de Cadastro de Participante -------------------------
View "MKRC0150"
Scan
 Print File ARQ "|0150"+"|"
 Print File ARQ ""+[COD_PART                ]+"|"
 Print File ARQ ""+[NOME                    ]+"|"
 Print File ARQ ""+[COD_PAIS                ]+"|"
 Print File ARQ ""+[CNPJ                    ]+"|"
 Print File ARQ ""+[CPF                     ]+"|"
 Print File ARQ ""+[UF                      ]+"|"
 Print File ARQ ""+[IE                      ]+"|"
 Print File ARQ ""+[IE_ST                   ]+"|"
 Print File ARQ ""+[COD_MUN                 ]+"|"
 Print File ARQ ""+[IM                      ]+"|"
 Print File ARQ ""+[SUFRAMA                 ]+"|"+"\n"
EndScan
ClearImage

EndProc


;*******************************************************************************
;* Rotina gera TXT Bloco I                                
;*******************************************************************************
Proc GERA_BLOCOI()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo bloco I",45," "))

;==== BLOCO I: Cadastros =======================================================

;--- Registro I050: Tabela de Plano de Contas ----------------------------------
View "MKRCI050"
Scan
  Print File ARQ "|I050"+"|"
  Print File ARQ ""+[IND_CTA                 ]+"|"
  Print File ARQ ""+StrVal([NIVEL           ])+"|"
  Print File ARQ ""+[COD_CTA                 ]+"|"
  Print File ARQ ""+[CTA                     ]+"|"+"\n"
EndScan
ClearImage

;--- Registro I075: Tabela de Historico Padrao ---------------------------------
View "MKRCI075"
Scan
  Print File ARQ "|I075"+"|"
  Print File ARQ ""+[COD_HIST                ]+"|"
  Print File ARQ ""+[DESCR_HIST              ]+"|"+"\n"
EndScan
ClearImage

;--- Registro I100: Tabela de Centro de Custo ----------------------------------
View "MKRCI100"
Scan
  Print File ARQ "|I100"+"|"
  Print File ARQ ""+[COD_CCUS                ]+"|"
  Print File ARQ ""+[CCUS                    ]+"|"+"\n"
EndScan
ClearImage

;--- Registro MS91: Tabela de Departamento -------------------------------------
View "MKRCMS91"
Scan
  Print File ARQ "|MS91"+"|"
  Print File ARQ ""+[COD_DEP                 ]+"|"
  Print File ARQ ""+[DESCR_DEP               ]+"|"+"\n"
EndScan
ClearImage


;==== BLOCO I: Lan‡amentos =====================================================

;--- Registro I200: Lan‡amentos ------------------------------------------------
If Not IsEmpty("MKRCI200")
   Then View "MKRCI250","MKRCI200"
        Scan
          NLANC=[NUM_LCTO]

          Print File ARQ "|I200"+"|"
          Print File ARQ ""+StrVal([NUM_LCTO     ])+"|"
          Print File ARQ Data_Str([DT_LCTO])+"|"
          Print File ARQ Valor_Str([VL_LCTO],2)+"|"
          Print File ARQ ""+[IND_LCTO     ]+"|"
          Print File ARQ ""+[COD_DEP      ]+"|"
          Print File ARQ ""+[OBS          ]+"|"+"\n"

          ;--- Registro I250: Registro Partidas Multiplas ----------------------
          Moveto "MKRCI250"
          Moveto [NUM_LCTO]
          Locate NLANC
          If RetVal
             Then While [NUM_LCTO]=NLANC
                    Print File ARQ "|I250"+"|"
                    Print File ARQ ""+[COD_CTA      ]+"|"
                    Print File ARQ ""+[COD_CCUS     ]+"|"
                    Print File ARQ Valor_Str([VL_DC     ],2)+"|"
                    Print File ARQ ""+[IND_DC       ]+"|"
                    Print File ARQ ""+[COD_HIST     ]+"|"
                    Print File ARQ ""+[HIST         ]+"|"
                    Print File ARQ ""+[COD_PART     ]+"|"
                    Print File ARQ ""+[ID_LCTO      ]+"|"
                    Print File ARQ ""+[TIPO_LCTO    ]+"|"+"\n"
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf

          Moveto "MKRCI200"
        EndScan
        ClearAll
EndIf

EndProc


;*******************************************************************************
;* Rotina inicio do processo                    
;*******************************************************************************
Proc Inicio()
Aguarde("Aguarde, preparando dados")

;---- Esvazia Tabelas SPED -----------------------------------------------------

{Tools} {Info} {Inventory} {Files} TypeIn "MKRC*.DB" Enter
Scan
  Empty(SubStr([List->Name],1,8))
EndScan
ClearAll

;---- Define arquivo TXT -------------------------------------------------------
ARQ = "\\Sistemas\\Exporta\\MKR\\"+"MKR"+
       AlinhM(StrVal(Month(VSDGDTFIM)),2)+
       SubStr(StrVal(Year(VSDGDTFIM)),3,2)+".TXT"
Deleta_Arquivo(ARQ)
 
VSDGDRIVE = SubStr(Directory(),1,2)
PASTA     = "\\Sistemas\\Exporta\\MKR"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf

NLANCTO=0  ; Contador de Lancamento para Bloco I200
NSEQ   =0  ; Contador de Lancamento para Bloco I250

return true
EndProc

;*******************************************************************************
;* Rotina de Controle do ShowDialog                                            *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)

Temp=True
TECLA=""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPCOES1"       : Campo="TG_DTFIM"
            Case Campo="TG_OPCOES2"       : Campo="TG_OPCOES1"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    : Campo="TG_DTINI"
                         If IsBlank(VSDGEMPRESA)
                            Then Campo="TG_EMPRESA"
                                 VSDGNOMEMP=""
                         EndIf   
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="TG_OPCOES1"
                    Case Campo="TG_OPCOES1"    : Campo="TG_OPCOES2"
                    Case Campo="TG_OPCOES2"    : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="TG_OPCOES1" Or Campo="TG_OPCOES2" : 
       MSG_CAMPO="Selecione uma ou mais op‡oes se desejar !"
       TECLA    ="=Mover  Barra de espa‡o=Marca/Desmarca  "
EndSwitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
LimpAguarde()

VSDGEMPRESA  =""
VSDGDTINI    =BlankDate()
VSDGDTFIM    =BlankDate()

Array VSDGOPCAO[2]
VSDGOPCAO[1] = False
VSDGOPCAO[2] = True

While True
  ShowDialog "Exporta‡„o de Baixas de Duplicatas - Macro Cont bil I" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 13 Width 72
   
    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

    Label  @ 02,00 "Perˇodo Referente de" For "TG_DTINI"
    Accept @ 03,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 03,16 "at‚" For "TG_DTFIM"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

    Label  @ 05,00 "Op‡oes de Movimentos " For "TG_OPCOES1"
    CheckBoxes @06,00 Height 1 Width 26 Tag "TG_OPCOES1"
    "Duplicatas a Pagar   " to VSDGOPCAO[1]
    CheckBoxes @07,00 Height 1 Width 26 Tag "TG_OPCOES2"
    "Duplicatas a Receber " to VSDGOPCAO[2]
    
    Pushbutton @ 09,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
   
  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Informe a Empresa!")
          Loop
  EndIf   
  
  If Not VSDGOPCAO[1] And Not VSDGOPCAO[2]
     Then Mensagem("N„o h  nenhuma op‡„o marcada para continuar o processo!")
          Loop
  EndIf
  
  AGUARDE("Aguarde, selecionando os registros")
  
  GetRecord "\\Sistemas\\Cadastro\\TpLanc" "C" To REG_FOR ;Fornecedores
  if RetVal
     Then SCI_CONTA_FORNECEDORES =REG_FOR["Conta Contabil"]
     Else SCI_CONTA_FORNECEDORES ="FORN?"
  EndIf
  GetRecord "\\Sistemas\\Cadastro\\TpLanc" "J" To REG_CLIE ;Clientes
  if RetVal
     Then SCI_CONTA_CLIENTES =REG_CLIE["Conta Contabil"]
     Else SCI_CONTA_CLIENTES ="CLIE?"
  EndIf
  
  Release Vars REG_FOR, REG_CLIE
    
  LimpaRodape(0)
  
  If Not Inicio()
     Then Loop
  Endif   


  contant="****"
;--- Monta Blocos --------------------------------------------------------------
  Monta_Bloco0()

  SelecionaDuplicatas()
  If IsEmpty("MKRCI200")
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf
  
;--- Gera TXT Blocos -----------------------------------------------------------
  GERA_BLOCO0()
  GERA_BLOCOI()
  
;--- Libera TXT e exibe MSG ----------------------------------------------------
  Close Printer
  
  LimpaRodape(0)

  GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMP
  ARQIMP2 = VSDGDRIVE+PASTA+"\\MKR_DUP"+  
            AlinhM(StrVal(Month(VSDGDTFIM)),2)+
            StrVal( Year(VSDGDTFIM))+"_"+
            Tira_CharNum(reg_emp["CGC Empresa"])+".TXT"
            
  Copia_Arquivo(ARQ+" "+ARQIMP2)
  Sleep 1000
    
  If Not IsFile(ARQ)
     Then Mensagem("Arquivo n„o foi gerado !")
     Else MensagemMP("Arquivo Gerado !// //"+ARQIMP2,ARQIMP2)
  EndIf
     
EndWhile
ClearAll
Release Vars All
Release Procs All
