;* EXPD_SCI *******************************************************************
;*  Exporta‡Ćo de Duplicatas em TXT p/ Sistema Cont bil  ** SCI **             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 10/09/2015 por Bruno Carvalho
;Ultima Alteracao: 18/09/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes E implementa‡äes                      
;Ultima Alteracao: 09/10/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes                      
;Ultima Alteracao: 04/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pesquisa NotaEC/Notac mes fechado
;Ultima Alteracao: 12/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta para titulo descontado                
;Ultima Alteracao: 19/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes historico para titulo descontado                
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 24/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao campo INSS                   
;Ultima Alteracao: 09/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste data credito banco             
;Ultima Alteracao: 09/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste DOCTO_INI,DOCTO_FIM nota de entrada         
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 14/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nĆo gerar baixa por cancelamento e devolucao
;Ultima Alteracao: 13/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0370 CHARMY
;Ultima Alteracao: 12/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sistema gerador NE ou IX para Titulos
;Ultima Alteracao: 21/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0404 Almeida Tecidos
;Ultima Alteracao: 12/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie 000            
;Ultima Alteracao: 02/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulo               

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

Aguarde("Aguarde, selecionando dados")                 

CONTAS_APAGAR  =False
CONTAS_ARECEBER=False

Switch
  Case VSDGOPCAO[1] And VSDGOPCAO[2]     : CONTA_LANCTOS  = 4
                                           CONTAS_APAGAR  =True
                                           CONTAS_ARECEBER=True
  Case VSDGOPCAO[1] And Not VSDGOPCAO[2] : CONTA_LANCTOS  = 2
                                           CONTAS_APAGAR  = True
  Case Not VSDGOPCAO[1] And VSDGOPCAO[2] : CONTA_LANCTOS  = 2
                                           CONTAS_ARECEBER=True
EndSwitch    

For i From 1 To CONTA_LANCTOS
  ;**** Lan‡amentos ************************************************************
  If i=1 Or i=3
     Then 
          Switch
            Case (CONTA_LANCTOS=2 And CONTAS_APAGAR And i=1) Or
                 (CONTA_LANCTOS=4 And CONTAS_APAGAR And i=1)  :
                 {Ask} {\\Sistemas\\Ctapag\\Titulos}         
                 Moveto [Codigo do Emitente    ] Check
                 Moveto [Lancamento Gerador    ] Check
                 Moveto [Sequencia Gerador     ] Check  
                 Moveto [Sistema Gerador       ] Check TypeIn "NE or IX"                         ;<<<< Apenas registros c/ Notas de Entrada 
            Case (CONTA_LANCTOS=2 And CONTAS_ARECEBER And i=1) Or
                 (CONTA_LANCTOS=4 And CONTAS_ARECEBER And i=3)  :
                 {Ask} {\\Sistemas\\Ctarec\\Duplic}
                 Moveto [Codigo do Destinatario] Check
                 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
          EndSwitch
          ;dados comuns nas 2 tabelas
          Moveto [Numero do Lancamento  ] Check
          Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
          Moveto [Codigo do Documento   ] Check
          Moveto [Tipo do Documento     ] Check  
          Moveto [Serie do Documento    ] Check
          Moveto [Numero do Documento   ] Check
          Moveto [Data de Emissao       ] Check TypeIn ">=~VSDGDTINI ,<=~VSDGDTFIM"
          Moveto [Data de Vencimento    ] Check
          Moveto [Valor do Documento    ] Check
          
          Do_It!
          ClearAll   
          
          If IsEmpty("Answer") Then Loop EndIf
          Sort "Answer" On "Lancamento Gerador","Tipo do Documento","Numero do Documento"
          ClearAll
          
          Switch
            Case (CONTA_LANCTOS=2 And CONTAS_APAGAR And i=1) Or
                 (CONTA_LANCTOS=4 And CONTAS_APAGAR And i=1)  :
                 ;---- Lan‡amentos do Contas a Pagar ---------------------------
                 NR=NRecords("Answer")
                 View_Tabelas("E")
                 View Tabela
                 Coedit "Answer"
                 Scan
                   Barra(NR, RecNo())
                   Aguarde("Aguarde, selecionando contas a pagar "+BARRA_STRING)                 
                   Monta_Dados("E")
                   Moveto "Answer"
                 EndScan
                 Do_it!
                 ClearAll
            Case (CONTA_LANCTOS=2 And CONTAS_ARECEBER And i=1) Or
                 (CONTA_LANCTOS=4 And CONTAS_ARECEBER And i=3)  :
                 ;---- Lan‡amentos do Contas a Receber -------------------------
                 NR=NRecords("Answer")
                 View_Tabelas("S")
                 View Tabela
                 Coedit "Answer"
                 Scan
                   Barra(NR, RecNo())
                   Aguarde("Aguarde, selecionando contas a receber "+BARRA_STRING)
                   Monta_Dados("S")                                                                       
                   Moveto "Answer"
                 EndScan
                 Do_it!
                 ClearAll
          EndSwitch   
  EndIf             
    
  ;**** Baixas *****************************************************************        
  If i=2 Or i=4 
     Then Switch
           Case (CONTAS_APAGAR   And CONTA_LANCTOS=2 And i=2) Or
                (CONTAS_APAGAR   And CONTA_LANCTOS=4 And i=2)  :
                {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
                Moveto [Lancamento Gerador    ] Check
                Moveto [Sequencia Gerador     ] Check  
                Moveto [Sistema Gerador       ] Check TypeIn "NE Or IX"                      ;<<<< 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 [Tipo da Baixa         ]       typein "NORMAL"
                
           Case (CONTAS_ARECEBER And CONTA_LANCTOS=4 And i=4) Or
                (CONTAS_ARECEBER And CONTA_LANCTOS=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
                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
                Moveto [Tipo da Baixa         ]       typein "NORMAL"

          EndSwitch   
          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
          Do_It!
          ClearAll 
          
          If IsEmpty("Answer") Then Loop EndIf
          Sort "Answer" On "Lancamento Gerador","Tipo do Documento","Numero do Documento"
          ClearAll
          
          Switch
           Case (CONTAS_APAGAR   And CONTA_LANCTOS=2 And i=2) Or
                (CONTAS_APAGAR   And CONTA_LANCTOS=4 And i=2)  :
                ;---- Baixas do Contas a Pagar ---------------------------------
                NR=NRecords("Answer")
                View_Tabelas("PE")
                View Tabela
                Coedit "Answer"
                Scan
                  Barra(NR, RecNo())
                  Aguarde("Aguarde, selecionando baixas do contas a pagar "+BARRA_STRING)
                  Monta_Dados("PE")
                  Moveto "Answer"
                EndScan
                Do_it!
                ClearAll
           Case (CONTAS_ARECEBER And CONTA_LANCTOS=4 And i=4) Or
                (CONTAS_ARECEBER And CONTA_LANCTOS=2 And i=2)  :
                ;---- Baixas do Contas a Receber -------------------------------
                NR=NRecords("Answer")
                View_Tabelas("PS")
                View Tabela
                Coedit "Answer"
                Scan
                  Barra(NR, RecNo())
                  Aguarde("Aguarde, selecionando baixas do contas a receber "+BARRA_STRING)
                  Monta_Dados("PS")
                  Moveto "Answer"
                EndScan
                Do_it!
                ClearAll            
          EndSwitch  
  EndIf        
Endfor          

EndProc ;Seleciona()

;*******************************************************************************
;* Rotina p/ Inserir Registros                                                 *
;*******************************************************************************
Proc View_Tabelas(PARAM)
Private PARAM    
 
If PARAM = "E"
   Then View "\\Sistemas\\Estoque\\Notaec"
EndIf  
If PARAM = "S" 
   Then View "\\Sistemas\\Vendas\\NotaC"
EndIf   
If PARAM = "S"  Or
   PARAM = "PS"   
   Then View "\\Sistemas\\Vendas\\Dupc"
        View "\\Sistemas\\Vendas\\Dupnf"
EndIf  
If PARAM = "PS" Or
   PARAM = "PE"
   Then View "\\Sistemas\\Ctacor\\Conta"
        View "\\Sistemas\\Ctacor\\MovCont"
   
EndIf   
If PARAM = "PE"
   Then View "\\Sistemas\\Ctapag\\Titulos"
EndIf   
If PARAM = "PS"
   Then View "\\Sistemas\\Ctarec\\Duplic"
EndIf    

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Tpdoctos"

EndProc ;View_Tabelas()

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

DOCTO_EMPRESA        = ""
DOCTO_CONTA          = ""
DOCTO_NUMERO         = ""
DOCTO_LANCTO         = ""                    ;01 L,B  (L->Lan‡amento / B->Baixas)
DOCTO_PARCELA        = ""
DOCTO_TIPO           = PARAM                 ;02 L,B
DOCTO_CGC            = ""                    ;03 L,B
DOCTO_IE             = ""                    ;04 L,B
DOCTO_INI            = ""                    ;05 L
DOCTO_FIM            = ""                    ;06 L
DOCTO_DATA           = ""                    ;07 L                               
DOCTO_ESTADO         = ""                    ;08 L                                
DOCTO_SERIE          = ""                    ;09 L
DOCTO_ESPEC          = ""                    ;10 L
DOCTO_MODEL          = ""                    ;11 L
DOCTO_NATOP          = ""                    ;12 L
DOCTO_DEBITO         = ""                    ;13 B
DOCTO_CREDITO        = ""                    ;14 B
DOCTO_HISTOR         = ""                    ;15 B
DOCTO_VALOR          = BlankNum()            ;16 L,B
DOCTO_VENCTO         = ""                    ;17 L
DOCTO_PAGTO          = ""                    ;18 B
DOCTO_CHEQUE         = ""                    ;19 B
DOCTO_DUP            = ""                    ;20 L
DOCTO_PROMIS         = ""                    ;21 X
DOCTO_RECIBO         = ""                    ;22 X
DOCTO_RET_PIS        = "0.00"                ;23 X
DOCTO_RET_COFINS     = "0.00"                ;24 X
DOCTO_RET_CSLL       = "0.00"                ;25 X
DOCTO_RET_IR         = "0.00"                ;26 X
DOCTO_RET_INSS       = "0.00"                ;27 X
DOCTO_RET_ISS        = "0.00"                ;28 X
DOCTO_RET_FUNRUAL    = "0.00"                ;29 X
DOCTO_RET_SEST_SENAT = "0.00"                ;30 X
DOCTO_TPBAIXA        = ""                    ;31 B

;---- Numero Documento de Origem ----------------------------------------------- Opera‡äes Internas                   
DOCTO_NUMERO = [Lancamento Gerador ]
DOCTO_INI    = [Numero do Documento]
DOCTO_FIM    = DOCTO_INI

Switch
  Case DOCTO_TIPO = "E" Or DOCTO_TIPO = "PE" : DOCTO_CODCLI = [Codigo do Emitente]
  Case DOCTO_TIPO = "S" Or DOCTO_TIPO = "PS" : DOCTO_CODCLI = [Codigo do Destinatario]
EndSwitch

;---- [01] Numero de Parcelas/Baixa -------------------------------------------- L,B  <<< INICIO DO LAYOUT >>>
DOCTO_PARCELA = StrVal([Sequencia Gerador])

;---- [03 e 04] CGC Cliente ---------------------------------------------------- L,B
GetRecord "\\Sistemas\\Cadastro\\Destinat" DOCTO_CODCLI To REG_CLIENTE
If RetVal                                                                             
  Then DOCTO_CGC = REG_CLIENTE["CGC"]
       DOCTO_IE  = REG_CLIENTE["IE"]
EndIf   
Release Vars REG_CLIENTE

;---- [09 ao 11] Dados da Nota Fiscal ------------------------------------------ L
DOCTO_EMPRESA= [Codigo da Empresa]

;---- Contas a Pagar e Nota de Entrada ------------
If (DOCTO_TIPO = "E" Or DOCTO_TIPO = "PE") And ([Sistema Gerador]="NE" or [Sistema Gerador]="IX") 
   Then 
        DOCTO_LANCTO = [Lancamento Gerador  ] ;NotaEC
        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_LANCTO To REG_NOTA 
                  If RetVal
                     Then DOCTO_NATOP  = Completa(REG_NOTA["CFO"],7,"0") 
                          DOCTO_DATA   = AlinhM(StrVal(REG_NOTA["Data de Entrada"]),10)
                          DOCTO_DATA   = SubStr(DOCTO_DATA,7,4)+SubStr(DOCTO_DATA,4,2)+SubStr(DOCTO_DATA,1,2)
                          DOCTO_ESTADO = REG_NOTA["UF"]

                          DOCTO_CODDOC = REG_NOTA["Codigo do Documento"]
                          DOCTO_SERIE  = REG_NOTA["Serie do Documento" ]

                          DOCTO_INI    = REG_NOTA["Numero do Documento"]
                          DOCTO_FIM    = 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_TIPO = "S" Or DOCTO_TIPO = "PS") 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]
                  
                  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_NATOP  = Completa(REG_NOTA["CFO"],7,"0") 
                          DOCTO_DATA   = AlinhM(StrVal(REG_NOTA["Data de Emissao"]),10)                              
                          DOCTO_DATA   = SubStr(DOCTO_DATA,7,4)+SubStr(DOCTO_DATA,4,2)+SubStr(DOCTO_DATA,1,2)
                          DOCTO_ESTADO = REG_NOTA["UF"]
                          
                          DOCTO_INI    = REG_NOTA["Numero do Documento"]
                          DOCTO_FIM    = 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          

;---- [05 e 06] Numero da NF Inicial/Final ------------------------------------- L,B                                                                                 
;DOCTO_FIM   = ""
;ACHOU_DOCTO = False
;                                                                                              
;If DOCTO_TIPO = "S" Or
;   DOCTO_TIPO = "PS"                                                  
;   Then GetRecord "\\Sistemas\\Vendas\\Dupc" DOCTO_EMPRESA,DOCTO_NUMERO,DOCTO_SERIE To REG_DUPC
;        If RetVal
;           Then Moveto "\\Sistemas\\Vendas\\Dupnf"
;                Moveto [Codigo da Empresa]
;                Locate DOCTO_EMPRESA,DOCTO_NUMERO,DOCTO_SERIE
;                If Retval
;                   Then CONT_SEQ = 0
;                        SEQ1 = ""
;                        SEQ2 = ""
;                        While DOCTO_EMPRESA =[Codigo da Empresa  ]  And 
;                              DOCTO_NUMERO  =[Numero do Documento]  And
;                              DOCTO_SERIE   =[Serie do Documento ]
;                              
;                          CONT_SEQ = CONT_SEQ + 1
;                          If CONT_SEQ = 1
;                             Then SEQ1 = [Numero da Nota]
;                          EndIf
;                          If CONT_SEQ > 1
;                             Then SEQ2 = [Numero da Nota]
;                          EndIf
;                          Skip
;                          If Eot() Then QuitLoop EndIf     
;                        EndWhile      
;                EndIf
;                Moveto "Answer"
;                                               
;                DOCTO_INI = SEQ1
;                If SEQ2 <> ""
;                   Then DOCTO_FIM = SEQ2
;                   Else DOCTO_FIM = DOCTO_INI
;                EndIf
;                ACHOU_DOCTO = True
;                Release Vars CONT_SEQ,SEQ1,SEQ2,REG_DUPC
;        EndIf
;EndIf        
;
;If Not ACHOU_DOCTO
;   Then If DOCTO_INI<>""
;           Then PosI = Search("/",DOCTO_INI)
;                If PosI>0
;                   Then DOCTO_INI = Substr(DOCTO_INI,1,PosI-1)
;                EndIf
;        EndIf                  
;        DOCTO_FIM = DOCTO_INI
;EndIf
;Release Vars PosI,ACHOU_DOCTO

;---- [13 ao 15] Dados da Baixa ------------------------------------------------ B

If DOCTO_TIPO = "PS" Or
   DOCTO_TIPO = "PE"
   Then DOCTO_CONTA="CONTA?"
        GetRecord "\\Sistemas\\Ctacor\\Conta" [Codigo da Conta] To REG_CONTA
        If RetVal
           then DOCTO_CONTA=REG_CONTA["Conta Contabil"] 
        EndIf
        
        switch
          case sys_codigo_cliente="0370":
            Switch  
              Case DOCTO_TIPO = "PE" : DOCTO_DEBITO  = SCI_CONTA_FORNECEDORES
                                       DOCTO_CREDITO = DOCTO_CONTA
                                       DOCTO_HISTOR  = "267"
                                       
              Case DOCTO_TIPO = "PS" : DOCTO_DEBITO  = DOCTO_CONTA
                                       DOCTO_CREDITO = SCI_CONTA_CLIENTES        
                                       DOCTO_HISTOR  = "32"
    
                                       if [Tipo do Lancamento]="A" ; Titulo Descontado
                                          Then DOCTO_DEBITO  = "213"
                                               DOCTO_HISTOR  = "231"
                                       EndIf    
    
            EndSwitch  
          
          case sys_codigo_cliente="0404":
            Switch  
              Case DOCTO_TIPO = "PE" : DOCTO_DEBITO  = SCI_CONTA_FORNECEDORES
                                       DOCTO_CREDITO = DOCTO_CONTA
                                       DOCTO_HISTOR  = "477"
                                       
              Case DOCTO_TIPO = "PS" : DOCTO_DEBITO  = DOCTO_CONTA
                                       DOCTO_CREDITO = SCI_CONTA_CLIENTES        
                                       DOCTO_HISTOR  = "297"
    
                                       if [Tipo do Lancamento]="A" ; Titulo Descontado
                                          Then DOCTO_DEBITO  = "6440"
                                               DOCTO_HISTOR  = "297"
                                       EndIf    
    
            EndSwitch  
          
          case sys_codigo_cliente="0389":
            Switch  
              Case DOCTO_TIPO = "PE" : DOCTO_DEBITO  = SCI_CONTA_FORNECEDORES
                                       DOCTO_CREDITO = DOCTO_CONTA
                                       DOCTO_HISTOR  = "477"
                                       
              Case DOCTO_TIPO = "PS" : DOCTO_DEBITO  = DOCTO_CONTA
                                       DOCTO_CREDITO = SCI_CONTA_CLIENTES        
                                       DOCTO_HISTOR  = "297"
    
                                       if [Tipo do Lancamento]="A" ; Titulo Descontado
                                          Then DOCTO_DEBITO  = "6440"
                                               DOCTO_HISTOR  = "297"
                                       EndIf    
    
            EndSwitch  
          
          otherwise                     :
            Switch  
              Case DOCTO_TIPO = "PE" : DOCTO_DEBITO  = SCI_CONTA_FORNECEDORES
                                       DOCTO_CREDITO = DOCTO_CONTA
                                       DOCTO_HISTOR  = "477"
                                       
              Case DOCTO_TIPO = "PS" : DOCTO_DEBITO  = DOCTO_CONTA
                                       DOCTO_CREDITO = SCI_CONTA_CLIENTES        
                                       DOCTO_HISTOR  = "297"
    
                                       if [Tipo do Lancamento]="A" ; Titulo Descontado
                                          Then DOCTO_DEBITO  = "6440"
                                               DOCTO_HISTOR  = "1627"
                                       EndIf    
    
            EndSwitch  

        endswitch
        
        
EndIf  

;---- [16] Valor do Documento -------------------------------------------------- L,B
If DOCTO_TIPO = "S" Or
   DOCTO_TIPO = "E"   
   Then DOCTO_VALOR  = Rtrim(Ltrim(StrVal(Format("W14.2",[Valor do Documento]))))
EndIf
   
If DOCTO_TIPO = "PE"
   Then DOCTO_VALOR = ([Valor do Pagamento  ]-[Valor do Juros])+[Valor do Desconto]
        DOCTO_VALOR = Rtrim(Ltrim(StrVal(Format("W14.2",DOCTO_VALOR))))
EndIf
If DOCTO_TIPO = "PS"
   Then DOCTO_VALOR = ([Valor do Recebimento]-[Valor do Juros])+[Valor do Desconto]
        DOCTO_VALOR = Rtrim(Ltrim(StrVal(Format("W14.2",DOCTO_VALOR))))
EndIf      


;---- [17] Data do Vencimento -------------------------------------------------- L
If DOCTO_TIPO = "S" Or 
   DOCTO_TIPO = "E" 
   Then DOCTO_VENCTO = AlinhM(StrVal([Data de Vencimento]),10)
        DOCTO_VENCTO=SubStr(DOCTO_VENCTO,7,4)+SubStr(DOCTO_VENCTO,4,2)+SubStr(DOCTO_VENCTO,1,2)
EndIf

;---- [18] Data do Pagameto ---------------------------------------------------- B
If DOCTO_TIPO = "PS" Or 
   DOCTO_TIPO = "PE"  
   Then DOCTO_PAGTO = AlinhM(StrVal([Data do Pagamento]),10)
   
        If DOCTO_TIPO = "PS" 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 = AlinhM(StrVal(regmovcont["Data"]),10)
                endif
        endif
   
        DOCTO_PAGTO=SubStr(DOCTO_PAGTO,7,4)+SubStr(DOCTO_PAGTO,4,2)+SubStr(DOCTO_PAGTO,1,2)
EndIf      

;---- [19] Numero do Cheque (Contas a Pagar) ----------------------------------- B
If DOCTO_TIPO = "PE"  
   Then If [Tipo de Operacao]="05"
           Then DOCTO_CHEQUE = [Numero do Cheque]
        EndIf   
EndIf

;---- [20] Numero da Duplicata ------------------------------------------------- L
If DOCTO_TIPO = "S" Or 
   DOCTO_TIPO = "E"
   then DOCTO_DUP = [Numero do Documento]
EndIf

;---- [21 ao 30] Promissoria, Recibo, Valor Reten‡Ćo Impostos ------------------ *

;---- [31] Tipo de Baixa ------------------------------------------------------- B
DOCTO_JUROS   = 0
DOCTO_DESCTO  = 0

If DOCTO_TIPO="PS" Or 
   DOCTO_TIPO="PE" 
   Then DOCTO_TPBAIXA = "P"
        DOCTO_JUROS   = [Valor do Juros]
        DOCTO_DESCTO  = [Valor do Desconto]
EndIf 

;**** ADICIONANDO DADOS NA TABELA **********************************************

GravaRegistro()




;-------- temporario acerto s˘ nos testes ---
If DOCTO_TIPO="KKK" 
   then if [Answer->Data de Emissao]<VSDGDTINI
           then 
           
                Moveto Tabela
                copytoarray regtemp
                
                [Tipo de Movimento        ] = "S"
                [Conta Debito             ] = ""
                [Conta Credito            ] = ""
                [Historico                ] = ""
                [Valor da Duplicata_Pagto ] = Rtrim(Ltrim(StrVal(Format("W14.2",[Answer->Valor do Documento]))))
                
                dttemp= AlinhM(StrVal([Answer->Data de Vencimento]),10)
                dttemp=SubStr(dttemp,7,4)+SubStr(dttemp,4,2)+SubStr(dttemp,1,2)
                [Data do Vencimento       ] = dttemp
 
                [Data do Pagamento        ] = ""
                [Numero do Cheque         ] = ""
                [Numero da Duplicata      ] = ""
                [Tipo de Baixa            ] = ""
                UnLockRecord
           
                End Down
                Copyfromarray regtemp
                UnLockRecord
                
                Moveto "Answer"
         Endif  
endif    
;-----------------------------------------



; gravando juros na baixa
if DOCTO_JUROS>0 
   Then DOCTO_TPBAIXA="J"
        DOCTO_VALOR  =Rtrim(Ltrim(StrVal(Format("W14.2",DOCTO_JUROS))))

        switch
          
          case sys_codigo_cliente="0370":
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO ="737"
                DOCTO_CREDITO=DOCTO_CONTA
                DOCTO_HISTOR = "531"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO =DOCTO_CONTA
                DOCTO_CREDITO="743"
                DOCTO_HISTOR = "531"
            endswitch
          
          case sys_codigo_cliente="0404":
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO ="3484"
                DOCTO_CREDITO=DOCTO_CONTA
                DOCTO_HISTOR = "531"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO =DOCTO_CONTA
                DOCTO_CREDITO="2437"
                DOCTO_HISTOR = "1562"
            endswitch
          
          case sys_codigo_cliente="0389":
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO ="3484"
                DOCTO_CREDITO=DOCTO_CONTA
                DOCTO_HISTOR = "531"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO =DOCTO_CONTA
                DOCTO_CREDITO="2437"
                DOCTO_HISTOR = "1562"
            endswitch
          
          otherwise                     :
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO ="3484"
                DOCTO_CREDITO=DOCTO_CONTA
                DOCTO_HISTOR = "531"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO =DOCTO_CONTA
                DOCTO_CREDITO="2437"
                DOCTO_HISTOR = "1562"
            endswitch

        endswitch


        GravaRegistro()
endif
       
; gravando desconto na baixa
if DOCTO_DESCTO>0
   Then DOCTO_TPBAIXA="D"
        DOCTO_VALOR  =Rtrim(Ltrim(StrVal(Format("W14.2",DOCTO_DESCTO))))

        switch
          case sys_codigo_cliente="0370":
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO =SCI_CONTA_FORNECEDORES
                DOCTO_CREDITO="745"
                DOCTO_HISTOR ="655"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO ="739"
                DOCTO_CREDITO=SCI_CONTA_CLIENTES
                DOCTO_HISTOR ="655"
            endswitch
          
          case sys_codigo_cliente="0404":
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO =SCI_CONTA_FORNECEDORES
                DOCTO_CREDITO="2445"
                DOCTO_HISTOR ="1244"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO ="3492"
                DOCTO_CREDITO=SCI_CONTA_CLIENTES
                DOCTO_HISTOR ="1287"
            endswitch
          
          case sys_codigo_cliente="0389":
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO =SCI_CONTA_FORNECEDORES
                DOCTO_CREDITO="2445"
                DOCTO_HISTOR ="1244"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO ="3492"
                DOCTO_CREDITO=SCI_CONTA_CLIENTES
                DOCTO_HISTOR ="1287"
            endswitch
          
          otherwise                     :
            switch
              case DOCTO_TIPO="PE": 
                DOCTO_DEBITO =SCI_CONTA_FORNECEDORES
                DOCTO_CREDITO="2445"
                DOCTO_HISTOR ="1244"
                
              case DOCTO_TIPO="PS": 
                DOCTO_DEBITO ="3492"
                DOCTO_CREDITO=SCI_CONTA_CLIENTES
                DOCTO_HISTOR ="1287"
            endswitch

        endswitch


        GravaRegistro()
endif       
            
EndProc ;Monta_Dados()


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

if DOCTO_ESTADO="MT" And DOCTO_IE<>"ISENTO" And DOCTO_IE<>"NAOCONTRIBUINTE"
   Then DOCTO_IE="00"+DOCTO_IE
endif   
if DOCTO_ESPEC="CT-E" 
   then DOCTO_ESPEC="CTe"
endif     

if DOCTO_MODEL="55" or DOCTO_MODEL="65"
   then DOCTO_SERIE=AlinhM(DOCTO_SERIE,3)
endif    

Moveto Tabela
End Down                                                                        
[Numero da Parcela_Baixa  ] = DOCTO_PARCELA                                    ;01 L,B  (L->Lan‡amento / B->Baixas)
[Tipo de Movimento        ] = DOCTO_TIPO                                      ;02 L,B
[CGC                      ] = DOCTO_CGC                                       ;03 L,B
[IE                       ] = DOCTO_IE                                        ;04 L,B
[Numero da NF Inicial     ] = DOCTO_INI                                       ;05 L
[Numero da NF Final       ] = DOCTO_FIM                                       ;06 L
[Data da NF               ] = DOCTO_DATA                                      ;07 L
[Estado da NF             ] = DOCTO_ESTADO                                    ;08 L
[Serie da NF              ] = DOCTO_SERIE                                     ;09 L
[Especie da NF            ] = DOCTO_ESPEC                                     ;10 L
[Modelo da NF             ] = DOCTO_MODEL                                     ;11 L
[Natureza de Operacao     ] = DOCTO_NATOP                                     ;12 L
[Conta Debito             ] = DOCTO_DEBITO                                    ;13 B
[Conta Credito            ] = DOCTO_CREDITO                                   ;14 B
[Historico                ] = DOCTO_HISTOR                                    ;15 B
[Valor da Duplicata_Pagto ] = DOCTO_VALOR                                     ;16 L,B
[Data do Vencimento       ] = DOCTO_VENCTO                                    ;17 L
[Data do Pagamento        ] = DOCTO_PAGTO                                     ;18 B
[Numero do Cheque         ] = DOCTO_CHEQUE                                    ;19 B
[Numero da Duplicata      ] = DOCTO_DUP                                       ;20 L
[Numero da Promissoria    ] = DOCTO_PROMIS                                    ;21 X
[Numero do Recibo         ] = DOCTO_RECIBO                                    ;22 X
[Valor Retencao PIS       ] = DOCTO_RET_PIS                                   ;23 X
[Valor Retencao COFINS    ] = DOCTO_RET_COFINS                                ;24 X
[Valor Retencao CSLL      ] = DOCTO_RET_CSLL                                  ;25 X
[Valor Retencao IR        ] = DOCTO_RET_IR                                    ;26 X
[Valor Retencao INSS      ] = DOCTO_RET_INSS                                  ;28 X
[Valor Retencao ISS       ] = DOCTO_RET_ISS                                   ;28 X
[Valor Retencao FUNRURAL  ] = DOCTO_RET_FUNRUAL                               ;29 X
[Valor Retencao SEST_SENAT] = DOCTO_RET_SEST_SENAT                            ;30 X
[Tipo de Baixa            ] = DOCTO_TPBAIXA                                   ;31 B
UnLockRecord

Moveto "Answer"

EndProc

;*******************************************************************************
;* Rotina de Controle do ShowDialog                                            *
;*******************************************************************************
Proc Gera_Txt()
Private SEPARADOR,C

;-------- temporario acerto s˘ nos testes ---
;Sort Tabela On "Tipo de Movimento" D,"Especie da NF","Numero da NF Inicial","Numero da Parcela_Baixa"
;-----------------------------------------

SEPARADOR = ","    ;,  Virgula
C         = "\""   ;"  Aspa
NR        = NRecords(Tabela)

View Tabela
Scan          
  Barra(NR, RecNo())
  Aguarde("Aguarde, gerando arquivo TXT "+BARRA_STRING)
  
  Print File ARQIMP AlinhM(StrVal(NumVal([Numero da Parcela_Baixa])),2)+SEPARADOR+        ;01
                    C+[Tipo de Movimento      ]+C+SEPARADOR+                    ;02
                    C+Tira_CharNum([CGC      ])+C+SEPARADOR+                    ;03   >>> No Layout h  o exemplo com aspas e o exemplo do topo sem aspas ???
                    Tira_CharNum([IE         ])+  SEPARADOR+                    ;04
                    [Numero da NF Inicial     ]+  SEPARADOR+                    ;05
                    [Numero da NF Final       ]+  SEPARADOR+                    ;06
                    C+[Data da NF             ]+C+SEPARADOR+                    ;07
                    C+[Estado da NF           ]+C+SEPARADOR+                    ;08
                    C+[Serie da NF            ]+C+SEPARADOR+                    ;09
  
                    C+[Especie da NF          ]+C+SEPARADOR+                    ;10
                    C+[Modelo da NF           ]+C+SEPARADOR+                    ;11
                    C+[Natureza de Operacao   ]+C+SEPARADOR+                    ;12
                    C+[Conta Debito           ]+C+SEPARADOR+                    ;13
                    C+[Conta Credito          ]+C+SEPARADOR+                    ;14
                    C+[Historico              ]+C+SEPARADOR+                    ;15
                    Rtrim(Ltrim([Valor da Duplicata_Pagto]))+SEPARADOR+         ;16
                    C+[Data do Vencimento     ]+C+SEPARADOR+                    ;17
                    C+[Data do Pagamento      ]+C+SEPARADOR+                    ;18
                    C+[Numero do Cheque       ]+C+SEPARADOR+                    ;19
                    C+[Numero da Duplicata    ]+C+SEPARADOR+                    ;20
                    ;---- Inutilizados -----------------------------------------
                    C+[Numero da Promissoria  ]+C+SEPARADOR+                    ;21
                    C+[Numero do Recibo       ]+C+SEPARADOR+                    ;22
                    [Valor Retencao PIS       ]+  SEPARADOR+                    ;23
                    [Valor Retencao COFINS    ]+  SEPARADOR+                    ;24
                    [Valor Retencao CSLL      ]+  SEPARADOR+                    ;25
                    [Valor Retencao IR        ]+  SEPARADOR+                    ;26
                    [Valor Retencao INSS      ]+  SEPARADOR+                    ;28
                    [Valor Retencao ISS       ]+  SEPARADOR+                    ;28
                    [Valor Retencao FUNRURAL  ]+  SEPARADOR+                    ;29
                    [Valor Retencao SEST_SENAT]+  SEPARADOR+                    ;30
                    ;-----------------------------------------------------------
                    C+[Tipo de Baixa          ]+C+"\n"                          ;31
EndScan
ClearAll

EndProc ;Gera_Txt()

;*******************************************************************************
;* 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_SCI.Txt"
VSDGDRIVE = SubStr(Directory(),1,2)
PASTA     = "\\Sistemas\\Exporta\\SCI"
If DirExists(PASTA)=0
   Then Cria_Pasta(PASTA)
        Sleep 2000
EndIf

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

While True
  ShowDialog "Exporta‡„o de Dados Duplicatas e Baixas - SCI CONTABEIS" 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")
  
  Tabela="\\Sistemas\\Exporta\\Expd_sci"
  Empty Tabela

  ARQIMP  = PrivDir()+ARQUIVO
  If IsFile(ARQIMP)
     Then Deleta_Arquivo(ARQIMP)
  EndIf
  
  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
    
    
  Seleciona()
  If IsEmpty(Tabela)
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf
  
  Gera_Txt()
  
  GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMP
  ARQIMP2 = VSDGDRIVE+PASTA+"\\SCI_DUP"+  
            AlinhM(StrVal(Month(VSDGDTFIM)),2)+
            StrVal( Year(VSDGDTFIM))+"_"+
            Tira_CharNum(reg_emp["CGC Empresa"])+".TXT"
            
  Copia_Arquivo(ARQIMP+" "+ARQIMP2)
  Sleep 1000
    
  If Not IsFile(ARQIMP)
     Then Mensagem("Arquivo n„o foi gerado !")
     Else Mensagem("Arquivo Gerado !// //"+ARQIMP2)
  EndIf
     
EndWhile
ClearAll
Release Vars All
Release Procs All
