;* EXPD_DMS ********************************************************************
;*  Exporta‡Ćo de Duplicatas em TXT p/ Sistema Cont bil  ** Domˇnio Sistemas   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 20/09/2015 por Anivel Augusto Rodrigues
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 17/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes contas, historico, e arquivos diferentes
;Ultima Alteracao: 27/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes na exporta‡Ćo
;Ultima Alteracao: 09/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nĆo gerar lan‡to juros titulo descontado
;Ultima Alteracao: 10/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0144 - Pintacor                              
;Ultima Alteracao: 20/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0112 - Michelle                              
;Ultima Alteracao: 02/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo               
;Ultima Alteracao: 22/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novo layout 0144 Gera_Txt02()    
;Ultima Alteracao: 04/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_Txt02() data, ultimo registro, vr descto/juros

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Seleciona()
Private i

DOCTO_SEQ=0

Aguarde("Aguarde, selecionando dados")                 

;**** Baixas *****************************************************************        
For i From 1 To 2

  Switch
   Case VSDGOPCAO[1] and i=1:
        {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 de Emissao       ] Check
        Moveto [Data de Vencimento    ] Check
        Moveto [Valor do Documento    ] Check

        Moveto [Codigo do Emitente    ] Check typein "as Codigo da Pessoa"
        Moveto [Lancamento Gerador    ] Check
        Moveto [Sequencia Gerador     ] Check  
        Moveto [Sistema Gerador       ] Check TypeIn "NE"                              ;<<<< Apenas registros c/ Notas de Entrada 

        {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 [Valor do Juros           ] Check
        Moveto [Valor do Desconto        ] Check
        Moveto [Lancamento Conta Corrente] Check
        Moveto [Tipo da Baixa            ] Check
        Do_It!
        ClearAll 
        
        If IsEmpty("Answer") Then Loop EndIf
        Sort "Answer" On "Lancamento Gerador","Tipo do Documento","Numero do Documento"
        ClearAll
        
        ;---- Baixas do Contas a Pagar ---------------------------------
        NR=NRecords("Answer")
        View_Tabelas("01")
        Coedit "Answer"
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, selecionando baixas do contas a pagar "+BARRA_STRING)

          if [valor do pagamento]>0 then Monta_Dados("01") endif

          Moveto "Answer"
        EndScan
        Do_it!
        ClearAll
        
   Case VSDGOPCAO[2] and i=2:
        {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 typein "as Codigo da Pessoa"
        Moveto [Tipo Docto Gerador    ] Check 
        Moveto [Numero Docto Gerador  ] Check TypeIn "as Lancamento Gerador"
        Moveto [Sequencia Gerador     ] Check  
        Moveto [Sistema Gerador       ] Check TypeIn "Not Blank, Not MA"               ;<<<< Registros n„o manuais e diferente de branco
        Moveto [Tipo do Lancamento    ] Check
        
        {Ask} {\\Sistemas\\Ctarec\\Dupbaixa}
        Moveto [Numero do Lancamento  ] Check TypeIn "_NLanc"
        Moveto [Valor do Recebimento  ] Check TypeIn "as Valor do Pagamento"
        Moveto [Sequencia da Baixa       ] Check
        Moveto [Data do Pagamento        ] Check TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
        Moveto [Codigo da Conta          ] Check
        Moveto [Valor do Juros           ] Check
        Moveto [Valor do Desconto        ] Check
        Moveto [Lancamento Conta Corrente] Check
        Moveto [Tipo da Baixa            ] Check
        Do_It!
        ClearAll 
        
        If IsEmpty("Answer") Then Loop EndIf
        Sort "Answer" On "Lancamento Gerador","Tipo do Documento","Numero do Documento"
        ClearAll
        
        ;---- Baixas do Contas a Receber -------------------------------
        NR=NRecords("Answer")
        View_Tabelas("02")
        Coedit "Answer"
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, selecionando baixas do contas a receber "+BARRA_STRING)
          if [valor do pagamento]>0 then Monta_Dados("02") endif

          Moveto "Answer"
        EndScan
        Do_it!
        ClearAll            

  EndSwitch   
Endfor          

EndProc ;Seleciona()

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

View "\\Sistemas\\Ctacor\\Conta"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Tpdoctos"
 
If PARAM = "01"
   Then View "\\Sistemas\\Estoque\\Notaec"
        View "\\Sistemas\\Ctapag\\Titulos"
        View "\\Sistemas\\Ctacor\\MovCont"
EndIf  
If PARAM = "02" 
   Then View "\\Sistemas\\Vendas\\NotaC"
        View "\\Sistemas\\Ctarec\\Duplic"
EndIf   

View "\\Sistemas\\Exporta\\Expd_DS4"
View "\\Sistemas\\Exporta\\Expd_DS3"

EndProc ;View_Tabelas()

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

DOCTO_SEQ            = DOCTO_SEQ+1

DOCTO_TPNOTA         = PARAM                 

DOCTO_LANCTOGER      = ""                    
DOCTO_NUMDUP         = ""
DOCTO_PARCELA        = ""
DOCTO_CODDOC         = ""
DOCTO_TIPDOC         = ""
DOCTO_NUMERO         = ""                    
DOCTO_SERIE          = ""                    
DOCTO_CGC            = ""                    
DOCTO_TPPESSOA       = ""                    
DOCTO_RAZAO          = ""                    

DOCTO_PAGTO          = blankdate()                    
DOCTO_VRPAGTO        = BlankNum()                
DOCTO_JUROS          = BlankNum()                
DOCTO_VRMUL          = BlankNum()                
DOCTO_DESCTO         = BlankNum()                
DOCTO_VENCTO         = blankdate()        
DOCTO_VRDEV          = BlankNum()                
DOCTO_VRPIS          = BlankNum()                
DOCTO_VRCOFINS       = BlankNum()                
DOCTO_VRCSOC         = BlankNum()                
DOCTO_VRIRRF         = BlankNum()                
DOCTO_VRCRFOPPIS     = BlankNum()                
DOCTO_VRCRFOPCOFINS  = BlankNum()                
DOCTO_VRCRFOPCSLL    = BlankNum()                
DOCTO_VRCRFOPIRPJ    = BlankNum()                
DOCTO_VRIRRFP        = BlankNum()                
DOCTO_VRCRF          = BlankNum()                

DOCTO_VARIACAO       = BlankNum()
DOCTO_LANCTO         = blankdate()                    
DOCTO_DEBITO         = ""                    
DOCTO_CREDITO        = ""                    
DOCTO_VALOR          = BlankNum()            
DOCTO_USUARIO        = ""                    
DOCTO_ORIGEM         = ""                    
DOCTO_CODEMP2        = ""                    
DOCTO_TPLANCTO       = ""                    
DOCTO_HISTOR         = ""                    
DOCTO_CHEQUE         = ""   

;---- Dados do Documento -------------------------------------------------------
DOCTO_EMPRESA   = [Codigo da Empresa  ]
DOCTO_LANCTOGER = [Lancamento Gerador ]
DOCTO_NUMDUP    = [Numero do Documento]
DOCTO_PARCELA   = [Sequencia Gerador  ]
DOCTO_VENCTO    = [Data de Vencimento ]
DOCTO_CODCLI    = [Codigo da Pessoa   ]

GetRecord "\\Sistemas\\Cadastro\\Destinat" DOCTO_CODCLI To REG_CLIENTE
If RetVal                                                                             
  Then DOCTO_CGC     =REG_CLIENTE["CGC"         ]
       DOCTO_TPPESSOA=REG_CLIENTE["Tipo Pessoa" ]                    
       DOCTO_RAZAO   =REG_CLIENTE["Razao Social"]                    
EndIf   
Release Vars REG_CLIENTE

;---- Contas a Pagar e Nota de Entrada ------------
If (DOCTO_TPNOTA = "01") And [Sistema Gerador]="NE" 
   Then 
        old_dtemis=[Data de Emissao]
        
        Dir_Trab=""
        For wi From 1 to 3
          If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC")
             Then GetRecord "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" DOCTO_LANCTOGER To REG_NOTA 
                  If RetVal
                     Then
                          DOCTO_CODDOC = REG_NOTA["Codigo do Documento"]
                          DOCTO_TIPDOC = REG_NOTA["Tipo do Documento"  ]
                          DOCTO_SERIE  = REG_NOTA["Serie do Documento" ]
                          DOCTO_NUMERO = REG_NOTA["Numero do Documento"]

                          GetRecord "\\Sistemas\\Cadastro\\Tpdoctos" DOCTO_CODDOC To REG_DOCTO                              
                          If RetVal
                             Then DOCTO_ESPEC = REG_DOCTO["Tipo do Documento"  ]
                                  DOCTO_MODEL = REG_DOCTO["Modelo do Documento"]
                          EndIf
                          Release Vars REG_DOCTO        
                          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       

;---- Contas a Receber e Nota de Saida ------------        
If (DOCTO_TPNOTA = "02") And [Sistema Gerador]<>"MA"  
   Then
        Dir_Trab=""
        For wi From 1 to 2
          If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
             Then 
                  DOCTO_CODDOC = [Tipo Docto Gerador  ]
                  DOCTO_NUMERO = [Lancamento Gerador  ]
                  
                  GetRecord "\\Sistemas\\Cadastro\\Tpdoctos" DOCTO_CODDOC To REG_DOCTO                              
                  If RetVal
                     Then DOCTO_ESPEC = REG_DOCTO["Tipo do Documento"  ]
                          DOCTO_MODEL = REG_DOCTO["Modelo do Documento"]
                          DOCTO_SERIE = REG_DOCTO["Serie do Documento" ]
                  EndIf
                  Release Vars REG_DOCTO        
             
                  GetRecord "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" DOCTO_EMPRESA,DOCTO_NUMERO,DOCTO_SERIE To REG_NOTA 
                  If RetVal
                     Then 
                          DOCTO_TIPDOC    = REG_NOTA["Tipo do Documento"  ]
                          DOCTO_SERIE     = REG_NOTA["Serie do Documento" ]
                          DOCTO_NUMERO    = REG_NOTA["Numero do Documento"]
                          QuitLoop
                  EndIf
          EndIf
          Dir_Trab="FechaMes\\"+AlinhM(StrVal(Year([Data de Emissao])),4)+"_"+AlinhM(StrVal(Month([Data de Emissao])),2)+"\\"
        EndFor  
EndIf          

;---- Dados da Baixa -----------------------------------------------------------
DOCTO_PAGTO  = [Data do Pagamento    ]
DOCTO_VRPAGTO= [Valor do Pagamento   ]
DOCTO_VALOR  = ([Valor do Pagamento  ]-[Valor do Juros])+[Valor do Desconto]

switch
  case [Tipo da Baixa]<>"NORMAL"  : DOCTO_VRDEV  = DOCTO_VRPAGTO
  
  otherwise                       :
  
endswitch

DOCTO_JUROS  = [Valor do Juros    ]
DOCTO_DESCTO = [Valor do Desconto ]

;---- Dados da Conta -----------------------------------------------------------  
DOCTO_CONTA ="CONTA?"
DOCTO_NBANCO=""
GetRecord "\\Sistemas\\Ctacor\\Conta" [Codigo da Conta] To REG_CONTA
If RetVal
   then DOCTO_CONTA =REG_CONTA["Conta Contabil"]
        DOCTO_NBANCO=REG_CONTA["Nome do Banco" ]
EndIf


Switch  
  case [Tipo da Baixa            ]="NORMAL":
    Switch  
      Case DOCTO_TPNOTA="01" : 
        switch
          case sys_Codigo_Cliente="0144":
           DOCTO_DEBITO  = DMS_CONTA_FORNECEDORES
           DOCTO_CREDITO = DOCTO_CONTA
           DOCTO_HISTOR  = "Pagto Duplicata n§ "+DOCTO_NUMDUP+" Ref "+DOCTO_TIPDOC+" S‚rie "+DOCTO_SERIE+" n§ "+DOCTO_NUMERO+
                           " de "+DOCTO_RAZAO 

           ;---- Numero do Cheque =----------------------------- 
           If [Tipo de Operacao]="05"
              Then DOCTO_CHEQUE = [Numero do Cheque]
                   DOCTO_HISTOR = DOCTO_HISTOR+" Conf.Ch. "+DOCTO_CHEQUE+" do "+DOCTO_NBANCO
           EndIf   
           
          case sys_Codigo_Cliente="0112":
           DOCTO_DEBITO  = "" ;DMS_CONTA_FORNECEDORES
           DOCTO_CREDITO = DOCTO_CONTA
           DOCTO_HISTOR  = "Pg. dupl. ref. "+DOCTO_TIPDOC+" n§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 

           ;---- Numero do Cheque =----------------------------- 
           If [Tipo de Operacao]="05"
              Then DOCTO_CHEQUE = [Numero do Cheque]
                   DOCTO_HISTOR = DOCTO_HISTOR+" c/ ch n§ "+DOCTO_CHEQUE
           EndIf   
           
        endswitch
      
      Case DOCTO_TPNOTA="02" : 
        switch
          case sys_codigo_Cliente="0144":
           DOCTO_DEBITO  = DOCTO_CONTA
           DOCTO_CREDITO = DMS_CONTA_CLIENTES        
           DOCTO_HISTOR  = "Valor Recto Duplicata Ref "+DOCTO_TIPDOC+" Serie "+DOCTO_SERIE+" n. "+DOCTO_NUMDUP+
                           " de "+DOCTO_RAZAO 

           ;---- Titulo Descontado ----------------------------- 
           if [Tipo do Lancamento]="A" 
              Then DOCTO_DEBITO  = "12"
                   DOCTO_HISTOR  = "Valor Recto Dup.Descontada Anteriormente n. "+DOCTO_NUMDUP+
                                   " de "+DOCTO_RAZAO 
           EndIf          
          
          case sys_codigo_Cliente="0112":
           DOCTO_DEBITO  = DOCTO_CONTA
           DOCTO_CREDITO = "" ;DMS_CONTA_CLIENTES        
           DOCTO_HISTOR  = "Rec. dupl. "+DOCTO_TIPDOC+" n§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 

           ;---- Titulo Descontado ----------------------------- 
           if [Tipo do Lancamento]="A" 
              Then DOCTO_DEBITO  = "5000"
                   DOCTO_HISTOR  = "Valor Recto Dup.Descontada Anteriormente n§ "+DOCTO_NUMDUP+
                                   " de "+DOCTO_RAZAO 
           EndIf          
          
        endswitch
    EndSwitch  
  
  case [Tipo da Baixa            ]="DEVOLUCAO":
    Switch  
      Case DOCTO_TPNOTA="01" : 
        switch
          case sys_Codigo_Cliente="0144":
            DOCTO_DEBITO  = "" 
            DOCTO_CREDITO = DOCTO_CONTA
            DOCTO_HISTOR  = "DEVOLUCAO COMPRA ?"

          case sys_Codigo_Cliente="0112":
            DOCTO_DEBITO  = "442" 
            DOCTO_CREDITO = DOCTO_CONTA
            DOCTO_HISTOR  = "Pg. dupl. ref. NF N§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO

        endswitch
                               
      Case DOCTO_TPNOTA="02" : 
        switch
          case sys_Codigo_Cliente="0144":
            DOCTO_DEBITO  = DOCTO_CONTA
            DOCTO_CREDITO = "224"         
            DOCTO_HISTOR  = "Valor Devolucao de Mercadorias Vendidas Ref "+DOCTO_TIPDOC+" "+DOCTO_NUMDUP+
                            " de "+DOCTO_RAZAO 

          case sys_Codigo_Cliente="0112":
            DOCTO_DEBITO  = DOCTO_CONTA
            DOCTO_CREDITO = "159"         
            DOCTO_HISTOR  = "Rec. dupl. N§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 

        endswitch
    
    EndSwitch  
  
endSwitch  

If DOCTO_TPNOTA = "02" and REG_CONTA["Tipo da Conta"]="C" and [Lancamento Conta Corrente]<>""
   then
        getrecord "\\sistemas\\ctacor\\movcont" [Lancamento Conta Corrente],[Codigo da Conta] to regmovcont
        if retval
           then DOCTO_PAGTO = regmovcont["Data"]
        endif
endif
DOCTO_LANCTO = DOCTO_PAGTO

;---- Gravar tabela ------------------------------------------------------------  

if DOCTO_NUMERO=""
   then return
endif   

GravaRegistro("02")
GravaRegistro("03")

DOCTO_TPLANCTO  = "01"
switch
  Case DOCTO_TPNOTA="01" : DOCTO_ORIGEM="06"
  Case DOCTO_TPNOTA="02" : DOCTO_ORIGEM="05"
endswitch
DOCTO_USUARIO        = "IMPORT"                    
GravaRegistro("04")

; gravando juros na baixa
if DOCTO_JUROS>0.01 and [Answer->Tipo do Lancamento]<>"A" ; descontada 
   Then DOCTO_TPLANCTO="02"
        DOCTO_VALOR   =DOCTO_JUROS
        DOCTO_VARIACAO=DOCTO_VARIACAO+1

        switch
          case DOCTO_TPNOTA="01": 
            switch
              case sys_Codigo_Cliente="0144":
                DOCTO_DEBITO ="195"
                DOCTO_CREDITO=DOCTO_CONTA
                DOCTO_HISTOR ="Pagto Juros de Mora Duplicata n§ "+DOCTO_NUMDUP+" Ref "+DOCTO_TIPDOC+" S‚rie "+DOCTO_SERIE+" n§ "+DOCTO_NUMERO+
                              " de "+DOCTO_RAZAO 
                
              case sys_Codigo_Cliente="0112":
                DOCTO_DEBITO ="372"
                DOCTO_CREDITO=DOCTO_CONTA
                DOCTO_HISTOR ="Pg juros e encargos s/ dupl. "+DOCTO_TIPDOC+" n§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 
                
            endswitch
            
          case DOCTO_TPNOTA="02": 
            switch
              case sys_Codigo_Cliente="0144":
                DOCTO_DEBITO =DOCTO_CONTA
                DOCTO_CREDITO="256"
                DOCTO_HISTOR ="Valor Recto Juros Ativos Ref.: Duplicata "+DOCTO_NUMDUP+
                              " de "+DOCTO_RAZAO 

              case sys_Codigo_Cliente="0112":
                DOCTO_DEBITO =DOCTO_CONTA
                DOCTO_CREDITO="433"
                DOCTO_HISTOR ="Rec. juros s/ dupl. "+DOCTO_TIPDOC+" n§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 

            endswitch
        endswitch

        GravaRegistro("04")
endif
       
; gravando desconto na baixa
if DOCTO_DESCTO>0.01
   Then DOCTO_TPLANCTO="04"
        DOCTO_VALOR   =DOCTO_DESCTO
        DOCTO_VARIACAO=DOCTO_VARIACAO+1

        switch
          case DOCTO_TPNOTA="01": 
            switch
              case sys_Codigo_Cliente="0144":
                DOCTO_DEBITO =DMS_CONTA_FORNECEDORES
                DOCTO_CREDITO="234"
                DOCTO_HISTOR ="Valor descto obtido Duplicata "+DOCTO_NUMDUP+
                              " de "+DOCTO_RAZAO 

              case sys_Codigo_Cliente="0112":
                DOCTO_DEBITO =DMS_CONTA_FORNECEDORES
                DOCTO_CREDITO="434"
                DOCTO_HISTOR ="Vr desconto obtido s/ "+DOCTO_TIPDOC+" n§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 

            endswitch
            
          case DOCTO_TPNOTA="02": 
            switch
              case sys_Codigo_Cliente="0144":
                DOCTO_DEBITO ="196"
                DOCTO_CREDITO=DMS_CONTA_CLIENTES
                DOCTO_HISTOR ="Valor descto concedido Duplicata "+DOCTO_NUMDUP+
                              " de "+DOCTO_RAZAO 

              case sys_Codigo_Cliente="0112":
                DOCTO_DEBITO ="371"
                DOCTO_CREDITO=DMS_CONTA_CLIENTES
                DOCTO_HISTOR ="Vr desconto s/ "+DOCTO_TIPDOC+" n§ "+DOCTO_NUMDUP+" de "+DOCTO_RAZAO 

            endswitch
        endswitch

        GravaRegistro("04")
endif       
            
EndProc ;Monta_Dados()


;*******************************************************************************
;* Rotina para gravar registro                                                 *
;*******************************************************************************
Proc GravaRegistro(id)
private id

switch
  case id="02":
    Moveto "EXPD_DS3"
    End Down                                                                        
    [Codigo da Empresa      ]=DOCTO_EMPRESA
    [Tipo de Nota           ]=DOCTO_TPNOTA
    [Sequencial             ]=DOCTO_SEQ
    [Identificador          ]=id
    [Numero do Documento    ]=DOCTO_NUMERO
    [Serie da Nota          ]=DOCTO_SERIE
    [Inscricao da Pessoa    ]=DOCTO_CGC
    [Segmento               ]=DMS_SEGMENTO_EMPRESA
    [Numero da Duplicata    ]=DOCTO_NUMDUP
    UnLockRecord
    
  case id="03":
    Moveto "EXPD_DS3"
    End Down                                                                        
    [Codigo da Empresa      ]=DOCTO_EMPRESA
    [Tipo de Nota           ]=DOCTO_TPNOTA
    [Sequencial             ]=DOCTO_SEQ
    [Identificador          ]=id
    [Numero do Documento    ]=DOCTO_NUMERO
    [Serie da Nota          ]=DOCTO_SERIE
    [Inscricao da Pessoa    ]=DOCTO_CGC
    [Segmento               ]=DMS_SEGMENTO_EMPRESA
    [Numero da Duplicata    ]=DOCTO_NUMDUP
                              
    [Data do Pagamento      ]=DOCTO_PAGTO
    [Valor Pago             ]=DOCTO_VRPAGTO
    [Valor Juros            ]=DOCTO_JUROS
    [Valor Multas           ]=DOCTO_VRMUL
    [Valor Desconto         ]=DOCTO_DESCTO
    [Data de Vencimento     ]=DOCTO_VENCTO
    [Valor Devolucao        ]=DOCTO_VRDEV
    [Valor PIS              ]=DOCTO_VRPIS
    [Valor COFINS           ]=DOCTO_VRCOFINS
    [Valor CSOC             ]=DOCTO_VRCSOC
    [Valor IRRF             ]=DOCTO_VRIRRF
    [Valor PIS do CRFOP     ]=DOCTO_VRCRFOPPIS
    [Valor COFINS do CRFOP  ]=DOCTO_VRCRFOPCOFINS
    [Valor CSLL do CRFOP    ]=DOCTO_VRCRFOPCSLL
    [Valor IRPJ do CRFOP    ]=DOCTO_VRCRFOPIRPJ
    [Valor IRRFP            ]=DOCTO_VRIRRFP
    [Valor CRF              ]=DOCTO_VRCRF  
    UnLockRecord
    
  case id="04":
    Moveto "EXPD_DS4"
    End Down                                                                        
    [Codigo da Empresa      ]=DOCTO_EMPRESA
    [Tipo de Nota           ]=DOCTO_TPNOTA
    [Sequencial             ]=DOCTO_SEQ
    [Identificador          ]=id
    [Variacao               ]=DOCTO_VARIACAO
    [Data de Lancamentos    ]=DOCTO_LANCTO
    [Codigo da Conta Debito ]=DOCTO_DEBITO
    [Codigo da Conta Credito]=DOCTO_CREDITO
    [Valor                  ]=DOCTO_VALOR
    [Usuario                ]=DOCTO_USUARIO
    [Origem                 ]=DOCTO_ORIGEM
    [Codigo da Empresa2     ]=DMS_CODIGO_EMPRESA
    [Tipo do Lancamentos    ]=DOCTO_TPLANCTO
    [Historico              ]=DOCTO_HISTOR
    UnLockRecord
  
endswitch

Moveto "Answer"

EndProc

;*******************************************************************************
;* Rotina de Controle do ShowDialog                                            *
;*******************************************************************************
Proc Gera_Txt(tipo)
Private tpnf, nr, s

Aguarde("Aguarde, gerando arquivo TXT")

ARQIMP  = PrivDir()+ARQUIVO
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
        Sleep 1000
EndIf

tpnf="***"

NR = NRecords("EXPD_DS3")

View "EXPD_DS4" 
View "EXPD_DS3" 
Scan          
  Barra(NR, RecNo())
  switch
    case tipo="P": Aguarde("Aguarde, gerando arquivo TXT/Pagamentos "  +BARRA_STRING)
    case tipo="R": Aguarde("Aguarde, gerando arquivo TXT/Recebimentos "+BARRA_STRING)
  endswitch

  if tipo="P" and [Tipo de Nota]<>"01" then loop endif
  if tipo="R" and [Tipo de Nota]<>"02" then loop endif

  if [Tipo de Nota]<>tpnf
     then 
     
          s=""
          s="01"+DMS_CODIGO_EMPRESA+DMS_CGC_EMPRESA+[Tipo de Nota]+"4"+spaces(50)+"\n"

          if tpnf="***"
             then FileWrite        ARQIMP from s
             else FileWrite append ARQIMP from s
          endif   
          
          tpnf=[Tipo de Nota]
  endif

  switch
    case [Identificador]="02":
      s=""
      s=[Identificador          ]+
        alinhm(strval([Sequencial]),7)+
        alinhm([Numero do Documento],7)+
        completa([Serie da Nota],7," ")+
        format("W14,AR",Tira_CharNum([Inscricao da Pessoa]))+
        alinhm([Segmento],7)+
        spaces(022)+"\n"

        FileWrite append ARQIMP from s
      
    case [Identificador]="03":
      s=""
      s=[Identificador          ]+
        alinhm(strval([Sequencial]),7)+
         Data_Str([Data do Pagamento      ]  )+
        Valor_Str([Valor Pago             ],13,2)+
        Valor_Str([Valor Juros            ],13,2)+
        Valor_Str([Valor Multas           ],13,2)+
        Valor_Str([Valor Desconto         ],13,2)+
         Data_Str([Data de Vencimento     ]  )+
        Valor_Str([Valor Devolucao        ],13,2)+
        Valor_Str([Valor PIS              ],13,2)+
        Valor_Str([Valor COFINS           ],13,2)+
        Valor_Str([Valor CSOC             ],13,2)
        

        switch
          case  tipo="P":
            s=s+
            Valor_Str([Valor CRF              ],13,2)+
            Valor_Str([Valor IRRF             ],13,2)+
            spaces(050)+"\n"

          case  tipo="R":
            s=s+
            Valor_Str([Valor IRRF             ],13,2)+
            Valor_Str([Valor PIS do CRFOP     ],13,2)+
            Valor_Str([Valor COFINS do CRFOP  ],13,2)+
            Valor_Str([Valor CSLL do CRFOP    ],13,2)+
            Valor_Str([Valor IRPJ do CRFOP    ],13,2)+
            Valor_Str([Valor IRRFP            ],13,2)+
            spaces(100)+"\n"
          
        endswitch

        FileWrite append ARQIMP from s
      

      ;-- Lancamento Contabil --------------------------------------------------
      moveto "EXPD_DS4"
      moveto [Codigo da Empresa]
      locate [EXPD_DS3->Codigo da Empresa],[EXPD_DS3->Tipo de Nota],[EXPD_DS3->Sequencial],"04"
      if retval
         then
              while [Codigo da Empresa]=[EXPD_DS3->Codigo da Empresa] and
                    [Tipo de Nota     ]=[EXPD_DS3->Tipo de Nota     ] and
                    [Sequencial       ]=[EXPD_DS3->Sequencial       ]
              
                s=""
                s=[Identificador          ]+
                  alinhm(strval([Sequencial]),7)+
                  Data_Str([Data de Lancamentos])+
                  alinhm([Codigo da Conta Debito ],7)+
                  alinhm([Codigo da Conta Credito],7)+
                  Valor_Str([Valor        ],13,2)+
                  completa([Usuario],30," ")+
                  [Origem                 ]+
                  alinhm([Codigo da Empresa2],7)+
                  [Tipo do Lancamentos    ]+
                  completa([Historico],512," ")+
                  spaces(100)+"\n"

                  FileWrite append ARQIMP from s
      
              skip
              if eot() then quitloop endif

              endwhile                  
      endif   
      moveto "EXPD_DS3"
      ;-------------------------------------------------------------------------
       
  endswitch
              
EndScan
ClearAll

GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMP
if tipo="P"
   then 
        ARQIMPP = VSDGDRIVE+PASTA+"\\DMS_DUPP"+  
                  AlinhM(StrVal(Month(VSDGDTFIM)),2)+
                  StrVal( Year(VSDGDTFIM))+"_"+
                  Tira_CharNum(reg_emp["CGC Empresa"])+".TXT"
                  
        Copia_Arquivo(ARQIMP+" "+ARQIMPP)
        Sleep 1000
endif

if tipo="R"
   then 
        ARQIMPR = VSDGDRIVE+PASTA+"\\DMS_DUPR"+  
                  AlinhM(StrVal(Month(VSDGDTFIM)),2)+
                  StrVal( Year(VSDGDTFIM))+"_"+
                  Tira_CharNum(reg_emp["CGC Empresa"])+".TXT"
                  
        Copia_Arquivo(ARQIMP+" "+ARQIMPR)
        Sleep 1000
endif

EndProc ;Gera_Txt()


;*******************************************************************************
;* Rotina de Controle do ShowDialog                                            *
;*******************************************************************************
Proc Gera_Txt02(tipo)
Private tpnf, nr, s

Aguarde("Aguarde, gerando arquivo CSV")

ARQIMP  = PrivDir()+ARQUIVO
If IsFile(ARQIMP)
   Then Deleta_Arquivo(ARQIMP)
        Sleep 1000
EndIf

tpnf="***"

NR = NRecords("EXPD_DS3")

View "EXPD_DS4" 
View "EXPD_DS3" 
Scan          
  Barra(NR, RecNo())
  switch
    case tipo="P": Aguarde("Aguarde, gerando arquivo TXT/Pagamentos "  +BARRA_STRING)
    case tipo="R": Aguarde("Aguarde, gerando arquivo TXT/Recebimentos "+BARRA_STRING)
  endswitch

  if tipo="P" and [Tipo de Nota]<>"01" then loop endif
  if tipo="R" and [Tipo de Nota]<>"02" then loop endif

  if [Tipo de Nota]<>tpnf
     then 
          tpnf=[Tipo de Nota]
  endif

  switch
    case [Identificador]="02":
      s=""
      
    case [Identificador]="03":
      s=""

      ;-- Lancamento Contabil --------------------------------------------------
      moveto "EXPD_DS4"
      moveto [Codigo da Empresa]
      locate [EXPD_DS3->Codigo da Empresa],[EXPD_DS3->Tipo de Nota],[EXPD_DS3->Sequencial],"04"
      if retval
         then
              while [Codigo da Empresa]=[EXPD_DS3->Codigo da Empresa] and
                    [Tipo de Nota     ]=[EXPD_DS3->Tipo de Nota     ] and
                    [Sequencial       ]=[EXPD_DS3->Sequencial       ]
              
                s=""
                if tipo="R" then s=s+"Importacao contas a receber;" endif
                if tipo="P" then s=s+"Importacao contas a pagar;"   endif

                s=s+
                  alinhM(ltrim(Format("D13",[Data de Lancamentos])),10)+";"+
                  ltrim(Format("W15.2,EIC",[Valor]))+";"+
                  [Codigo da Conta Debito ]+";"+
                  [Codigo da Conta Credito]+";"+
                  [Historico]+"\n"

                  FileWrite append ARQIMP from s
      
              skip
              if eot() then quitloop endif

              endwhile                  
      endif   
      moveto "EXPD_DS3"
      ;-------------------------------------------------------------------------
       
  endswitch
              
EndScan
ClearAll

GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMP
if tipo="P"
   then 
        ARQIMPP = VSDGDRIVE+PASTA+"\\DMS_DUPP"+  
                  AlinhM(StrVal(Month(VSDGDTFIM)),2)+
                  StrVal( Year(VSDGDTFIM))+"_"+
                  Tira_CharNum(reg_emp["CGC Empresa"])+".CSV"
                  
        Copia_Arquivo(ARQIMP+" "+ARQIMPP)
        Sleep 1000
endif

if tipo="R"
   then 
        ARQIMPR = VSDGDRIVE+PASTA+"\\DMS_DUPR"+  
                  AlinhM(StrVal(Month(VSDGDTFIM)),2)+
                  StrVal( Year(VSDGDTFIM))+"_"+
                  Tira_CharNum(reg_emp["CGC Empresa"])+".CSV"
                  
        Copia_Arquivo(ARQIMP+" "+ARQIMPR)
        Sleep 1000
endif

EndProc ;Gera_Txt()


;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
Proc Valor_Str(Valor,Tam,Dec)
Private VrTit,Valor,Tam,Dec,Part1,Part2
VrTit=StrVal(Valor)
If SearchFrom(".",VrTit,1)>0
   Then Part1=SubStr(VrTit,1,SearchFrom(".",VrTit,1)-1)
        Part2=SubStr(VRTit,SearchFrom(".",VrTit,1)+1,Dec)
        Part2=PART2+Fill(0,DEC-Len(Part2))
   Else Part1=VrTit
        Part2=Fill(0,Dec)
EndIf
Vrtit=Part1+Part2
VrTit=Fill("0",Tam-Len(VrTit))+VrTit
Return VrTit
EndProc  ; (Valor_Str)

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

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

Return DtTit
EndProc  ; (Data_Str)

;*******************************************************************************
;* 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()

sys_Valor()

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

ARQUIVO   = "EXPD_DS.Txt"
VSDGDRIVE = SubStr(Directory(),1,2)
PASTA     = "\\Sistemas\\Exporta\\DOMINIOS"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf

Array VSDGOPCAO[2]
switch
  case sys_codigo_cliente="0144" : 
    VSDGOPCAO[1] = False
    VSDGOPCAO[2] = True
  otherwise                      : 
    VSDGOPCAO[1] = True 
    VSDGOPCAO[2] = True
endswitch

While True
  ShowDialog "Exporta‡„o de Baixa de Duplicatas - Domˇnio Sistemas 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")
  
  Empty "Expd_DS3"
  Empty "Expd_DS4"

  GetRecord "\\Sistemas\\Cadastro\\TpLanc" "C" To REG_FOR ;Fornecedores
  if RetVal
     Then DMS_CONTA_FORNECEDORES =REG_FOR["Conta Contabil"]
     Else DMS_CONTA_FORNECEDORES ="FORN?"
  EndIf
  GetRecord "\\Sistemas\\Cadastro\\TpLanc" "J" To REG_CLIE ;Clientes
  if RetVal
     Then DMS_CONTA_CLIENTES =REG_CLIE["Conta Contabil"]
     Else DMS_CONTA_CLIENTES ="CLIE?"
  EndIf
  getrecord "\\sistemas\\cadastro\\empresas" VSDGEMPRESA to regempresas
  if retval
     then DMS_CODIGO_EMPRESA  =alinhm(regempresas["Conta Contabil Empresa"],07)
          DMS_CGC_EMPRESA     =alinhm(Tira_CharNum(regempresas["CGC Empresa"]),14)
          DMS_SEGMENTO_EMPRESA="0000"
  endif   
  Release Vars REG_FOR, REG_CLIE, regempresas
    
  Seleciona()
  If IsEmpty("\\Sistemas\\Exporta\\Expd_DS3")
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf
  
  ARQIMPP=""
  ARQIMPR=""
  if VSDGOPCAO[1]=true
     then 
          switch
            case sys_codigo_cliente="0144" : Gera_Txt02("P")
            otherwise                      : Gera_Txt("P")
          endswitch
  endif
  if VSDGOPCAO[2]=true
     then 
          switch
            case sys_codigo_cliente="0144" : Gera_Txt02("R")
            otherwise                      : Gera_Txt("R")
          endswitch
  endif
    
  If Not IsFile(ARQIMP)
     Then Mensagem("Arquivo n„o foi gerado !")
     Else Mensagem("Arquivo(s) Gerado(s) !// //"+ARQIMPR+"// //"+ARQIMPP)
  EndIf
     
EndWhile
ClearAll
Release Vars All
Release Procs All
