;** Expcmv2 *********************************************************************
;*  Exportacao de Lancamentos Contabies p/ arquivo TXT - ALTERDATA             *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 04/07/2013 por Anivel Augusto Rodrigues
;Ultima Alteracao: 17/07/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes lancamento de partidas multiplas
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Æo para Impostos 
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 11/03/2020 por Kamila Gomes
;Motivo Alteracao: Ajustes tabela Tmp_parc
;Ultima Alteracao: 13/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0370 contas            
;Ultima Alteracao: 30/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes titulos_Descontados     

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc GERA_C()
AGUARDE("Aguarde, Processando Dados Financeiros")
{Ask} {\\Sistemas\\Ctacor\\MovCont} Check
Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
Moveto [Tipo da Conta    ] TypeIn "X or C"
Moveto [Data             ] TypeIn ">= ~VSDGDTINI, <= ~VSDGDTFIM"
Do_It!
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf

Sort "Answer" on "Codigo da Empresa","Codigo da Conta",
                 "Data","Numero do Cheque","Codigo do EmitDest"
ClearAll

LANC_OK=True
NR=NRecords("Answer")
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\TpLanc"
View "\\Sistemas\\Ctacor\\PlContas"
View "\\Sistemas\\Ctacor\\Conta"
View "\\Sistemas\\Exporta\\Alterdct"
CoEdit "Answer"

CONTA   ="****"
CTATL   ="*"

Scan
   Barra(NR, RecNo())
   AGUARDE("Aguarde, Exportando Dados "+BARRA_STRING)

   ;****** Localiza Conta Caixa/Banco *****
   If CONTA<>[Answer->Codigo da Conta]
      Then CONTA=[Answer->Codigo da Conta]
           Moveto "\\Sistemas\\Ctacor\\Conta"
           Moveto [Codigo da Conta]
           Locate CONTA
           If RetVal
              Then CDCXBC               = [Conta Contabil           ]
                   DEPOSITO_EFETUADO    = [CC Deposito Efetuado     ]
                   CHEQUE_TRANSITO      = [CC Cheques em Transito   ]
                   CHEQUE_CAIXA         = [CC Cheques p/ Caixa      ]
                   CHEQUES_NAPRES       = [CC Cheques Emitidos/NApre]
                   TITULOS_DESCONTADOS  = [CC Titulos Descontados   ]
              Else CDCXBC               = "*0001"
                   DEPOSITO_EFETUADO    = "*0002"
                   CHEQUE_TRANSITO      = "*0003"
                   CHEQUE_CAIXA         = "*0004"
                   CHEQUES_NAPRES       = "*0005"
                   TITULOS_DESCONTADOS  = "*0006"
           EndIf
   EndIf

   ;****** Localiza Conta Tipo Lancamento *****
   If [Answer->Tipo do Lancamento]<>CTATL
      Then CTATL=[Answer->Tipo do Lancamento]
           Moveto "\\Sistemas\\Cadastro\\TpLanc"
           Moveto [Tipo de Lancamento]
           Locate CTATL
           If RetVal
              Then CODRED = [Conta Contabil]
              Else CODRED = "*0006"
           EndIf
   EndIf

   HISTOR =[Answer->Descricao do Historico]

   ;****** Localiza Conta Destinatario\Emitente *****
   CGC_CD="00000000"
   If [Answer->Tipo da Conta Trf]=""
      Then Moveto "\\Sistemas\\Cadastro\\Destinat"
           Moveto [Codigo]
           Locate [Answer->Codigo do EmitDest]
           If RetVal
              Then If [Answer->Tipo do Lancamento]="A"
                      Then CODRED = "*0007"
                           If [Answer->Sistema Gerador]<>""
                              Then HISTOR=HISTOR+" "+[Razao Social  ]
                           EndIf
                      Else If LTrim(RTrim([Conta Contabil]))<>""
                              Then CODRED = [Conta Contabil]
                           EndIf
                           If [Tipo]="C" or [Tipo]="F"
                              Then If SubStr([CGC],03,1)="." and
                                      SubStr([CGC],07,1)="." and
                                      SubStr([CGC],11,1)="/" and
                                      SubStr([CGC],16,1)="-"
                                      Then WVR=""               ;CGC
                                           WVR=SubStr([CGC],01,2)+
                                               SubStr([CGC],04,3)+
                                               SubStr([CGC],08,3)+
                                               SubStr([CGC],12,4)+
                                               SubStr([CGC],17,2)
                                           CHECACGC(WVR)
                                           If WB=0
                                              Then CGC_CD=WVR
                                           EndIf
                                      Else If SubStr([CGC],04,1)="." and
                                              SubStr([CGC],08,1)="." and
                                              SubStr([CGC],12,1)="-"
                                              Then WVR=""               ;CPF
                                                   WVR=SubStr([CGC],01,3)+
                                                       SubStr([CGC],05,3)+
                                                       SubStr([CGC],09,3)+
                                                       SubStr([CGC],13,2)
                                                   CHECACPF(WVR)
                                                   If WB=0
                                                      Then CGC_CD=WVR
                                                   EndIf
                                           EndIf
                                   EndIf
                           EndIf
                   EndIf
           EndIf
   EndIf

   ;; ***** CAIXA *****
   If [Answer->Tipo da Conta    ] = "X" And
      [Answer->Tipo da Conta Trf] = "C"
      Then ;****** Localiza Conta Banco *****
           Moveto "\\Sistemas\\Ctacor\\Conta"
           Moveto [Codigo da Conta]
           Locate [Answer->Codigo da Conta Trf]
           If RetVal
              Then If [Answer->Tipo de Operacao]="09"
                      Then If [Answer->Tipo do Lancamento]="O"
                              Then CODRED =[CC Cheques em Transito]
                              Else CODRED =[CC Cheques p/ Caixa   ]
                           EndIf
                   EndIf
                   If [Answer->Tipo de Operacao]="08"
                      Then CODRED =[CC Deposito Efetuado]
                   EndIf
           EndIf
   EndIf

   If [Answer->Tipo da Conta    ]="X"   And
      [Answer->Tipo da Conta Trf]="A"   And
      [Answer->Tipo de Operacao ]="01"
      Then  Moveto "\\Sistemas\\Ctacor\\Conta"
            Moveto [Codigo da Conta]
            Locate [Answer->Codigo da Conta Trf]
            If RetVal
               Then CODRED =[CC Aplicacoes Financeiras]
            EndIf
   EndIf

   ;; ***** BANCO *****
   If [Answer->Tipo da Conta]="C" And
      [Answer->Tipo da Conta Trf]="C"
      Then CODRED = "*0008"
   EndIf

   If [Answer->Tipo da Conta]="C" And
      [Answer->Tipo da Conta Trf]="X"
      Then If [Answer->Tipo de Operacao]="08"
              Then If [Answer->Tipo do Lancamento]="O"
                      Then CODRED = CHEQUE_TRANSITO
                      Else CODRED = CHEQUE_CAIXA
                   EndIf
           EndIf
           If [Answer->Tipo de Operacao]="09"
              Then CODRED = DEPOSITO_EFETUADO
           EndIf
   EndIf

   If [Answer->Tipo da Conta]="C" And
      [Answer->Tipo da Conta Trf]="A" And
      ([Answer->Tipo de Operacao]="01" Or
       [Answer->Tipo de Operacao]="02")
      Then  Moveto "\\Sistemas\\Ctacor\\Conta"
            Moveto [Codigo da Conta]
            Locate [Answer->Codigo da Conta Trf]
            If RetVal
               Then CODRED = [CC Aplicacoes Financeiras]
               Else CODRED = "*0009"
            EndIf
   EndIf

   If [Answer->Tipo de Operacao]="13" ;Tarifa Bancaria
      Then Switch
             Case SYS_CODIGO_CLIENTE="0000": CODRED = "0000"
             Case SYS_CODIGO_CLIENTE="0370": CODRED = "3486"
             OtherWise                     : CODRED = "*0010"
           EndSwitch
   EndIf

   plcontasok=False
   If ([Answer->Tipo da Conta]="C" Or [Answer->Tipo da Conta]="X")  And
       [Answer->Tipo da Conta Trf]="" And
      ([Answer->Tipo de Operacao]="05" Or [Answer->Tipo de Operacao]="06" Or
       [Answer->Tipo de Operacao]="14" Or [Answer->Tipo de Operacao]="13")
       Then plcontasok=True
   EndIf
   If ([Answer->Tipo da Conta]="C" Or [Answer->Tipo da Conta]="X")  And
       [Answer->Tipo da Conta Trf]="" And
       [Answer->Tipo de Operacao]="07" And [Answer->Tipo do Lancamento]="L"
       Then plcontasok=True
   EndIf
   
   If [Answer->Tipo da Conta     ]="C"  And
      [Answer->Tipo de Operacao  ]="07" And [Answer->Tipo do Lancamento]="L" And
      [Answer->Sistema Gerador   ]="AC" And
      [Answer->Codigo do EmitDest]=""   And
      Search("VR. REF. DUPL. DESC. BORDERO ",[Answer->Descricao do Historico])>0
      Then plcontasok=False
           CODRED = TITULOS_DESCONTADOS
   EndIf
   
   If plcontasok
       Then Moveto "\\Sistemas\\Ctacor\\Plcontas"
            Moveto [Codigo Plano_Conta]
            Locate [Answer->Codigo Plano_Conta]
            If RetVal
               Then If LTrim(RTrim([Conta Contabil]))<>""
                       Then CODRED = [Conta Contabil]
                    EndIf
            EndIf
   EndIf

   ;****** Gera Lancamento *****
   SeqLanc=SeqLanc+1
   
   Moveto "\\Sistemas\\Exporta\\Alterdct"
   End Down
   [Numero do Lancamento   ]=SeqLanc  
   [Sequencia do Lancamento]=BlankNum()
   [Lancamento_Automatico  ]=BlankNum()
   If [Answer->Tipo Movimento]="S"
      Then [Conta_Debito   ]=CODRED   
           [Conta_Credito  ]=CDCXBC        
      Else [Conta_Debito   ]=CDCXBC   
           [Conta_Credito  ]=CODRED        
   EndIf
   [Data                   ]=[Answer->Data]
   If [Answer->Valor do Juros]>0
      Then [Valor          ]=[Answer->Valor]-[Answer->Valor do Juros]
      Else [Valor          ]=[Answer->Valor]
   EndIf
   [Codigo_Historico       ]=BlankNum()
   [Descricao_Historico    ]=HISTOR    
   [Numero_Documento       ]=[Answer->Numero do Documento]
   UnLockRecord
   
   ;********** Gera Lancamento de Descontos ***************

   ;********** Gera Lancamento de Juros ***************
   If [Answer->Valor do Juros] > 0
      Then If [Answer->Tipo Movimento]="S"
              Then CODRED = "*0011"
                   HISTOR = "PG JUROS "+[Answer->Tipo do Documento]+"-"+[Answer->Numero do Documento]
              Else                          
                   Switch
                     Case SYS_CODIGO_CLIENTE="0370": 
                       CODRED = "1351"
                       HISTOR = "JUROS RECEBIDOS "+[Answer->Tipo do Documento]+"-"+[Answer->Numero do Documento]

                     OtherWise                     : 
                       CODRED = "*0012"
                       HISTOR = "REC JUROS "+[Answer->Tipo do Documento]+"-"+[Answer->Numero do Documento]
                   EndSwitch
           EndIf

           SeqLanc=SeqLanc+1

           Moveto "\\Sistemas\\Exporta\\Alterdct"
           End Down
           [Numero do Lancamento   ]=SeqLanc  
           [Sequencia do Lancamento]=BlankNum()
           [Lancamento_Automatico  ]=BlankNum()
           If [Answer->Tipo Movimento]="S"
              Then [Conta_Debito   ]=CODRED   
                   [Conta_Credito  ]=CDCXBC        
              Else [Conta_Debito   ]=CDCXBC   
                   [Conta_Credito  ]=CODRED        
           EndIf
           [Data                   ]=[Answer->Data]
           [Valor                  ]=[Answer->Valor do Juros]
           [Codigo_Historico       ]=BlankNum()
           [Descricao_Historico    ]=HISTOR    
           [Numero_Documento       ]=[Answer->Numero do Documento]
           UnLockRecord
   EndIf

   Moveto "Answer"
EndScan

Do_It!
ClearAll
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros Movimentos de Entrada                *
;*******************************************************************************
Proc GERA_E()
AGUARDE("Aguarde, Processando Dados Entrada de Notas")

;**** Nota de Entradas pelo Faturamento ******
SetDir "\\Sistemas\\Vendas"
View "\\Sistemas\\CtaCor\\Tmp_Parc"
View "\\Sistemas\\Vendas\\NotaI"
CoEdit "\\Sistemas\\Vendas\\NotaC"
Scan For [Situacao]<>"C" And [Tipo de Pagamento]="P" And
         [Tipo Movimento Estoque]="E"

  If [Data de Emissao]<VSDGDTINI Or
     [Data de Emissao]>VSDGDTFIM
     Then Loop
  EndIf
  If Search("COMPRA",[Descricao da Destinacao])=0
     Then Loop
  EndIf
  If Not IsBlank(VSDGEMPRESA)
     Then If [Codigo da Empresa]<>VSDGEMPRESA
             Then Loop
          EndIf
  EndIf

  Limpa_Array()
  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [NotaC->Codigo da Empresa], [NotaC->Numero do Documento], [NotaC->Serie do Documento]
  While [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] And
        [Numero do Documento]=[NotaC->Numero do Documento] And
        [Serie do Documento ]=[NotaC->Serie do Documento ]

    If [Situacao_Item]<>"C" Then
        TIPO_ITEM=[Tipo do Item]
       ; If TIPO_ITEM="P" Or
       ;    TIPO_ITEM="M" Or
       ;    TIPO_ITEM="T" Or
       ;    TIPO_ITEM="O" Or
       ;    TIPO_ITEM=""
       ;    Then TIPO_ITEM="M"
       ; EndIf

       vrct=([Preco Total]-[Valor Desconto Total])+
             [Valor Frete Total       ]+
             [Valor Seguro Total      ]+
             [Valor OutDesp Total     ]+
             [Valor do IPI            ]+
             [ICMS_ST_Valor           ] 

        For q From 1 to 20
          If TpItem[q]=TIPO_ITEM Or TpItem[q]=""
             Then TpItem[q]  =TIPO_ITEM
                  VrTpItem[q]=VrTpItem[q]+vrct
                  QuitLoop
          EndIf
        EndFor
        VRTOT_ITENS=VRTOT_ITENS+vrct
    EndIf
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile

  Moveto "\\Sistemas\\CtaCor\\Tmp_Parc"
  For q From 1 to 20
    If TpItem[q]="" Then QuitLoop EndIf
    End
    Down
    [Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
    [Codigo             ]=[\Sistemas\Vendas\NotaC->Codigo             ]
    [CGC                ]=[\Sistemas\Vendas\NotaC->CGC                ]
    [Tipo do Item       ]=TpItem[q]
    [Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
    [Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento]
    [Data de Entrada    ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
    [Preco Total        ]=VrTpItem[q]
  EndFor
  UnLockRecord
  Moveto "\\Sistemas\\Vendas\\NotaC"
EndScan
Do_It!
ClearAll

;**** Nota de Entradas pelo Estoque ******
SetDir "\\Sistemas\\Estoque"
View "\\Sistemas\\CtaCor\\Tmp_Parc"
View "\\Sistemas\\Estoque\\NotaEI"
CoEdit "\\Sistemas\\Estoque\\NotaEC"
Scan For ([Tipo de Operacao]="C" or [Tipo de Operacao]="A" or [Tipo de Operacao]="I") And [Tipo de Pagamento]="P"

  If [Data de Entrada]<VSDGDTINI Or
     [Data de Entrada]>VSDGDTFIM
     Then Loop
  EndIf
  If Not IsBlank(VSDGEMPRESA)
     Then If [Codigo da Empresa]<>VSDGEMPRESA
             Then Loop
          EndIf
  EndIf

  Limpa_Array()
  Moveto "\\Sistemas\\Estoque\\NotaEI"
  Moveto [Numero do Lancamento]
  Locate [NotaEC->Numero do Lancamento]
  While [Numero do Lancamento]=[NotaEC->Numero do Lancamento]
    TIPO_ITEM=[Tipo do Item]
   ; If TIPO_ITEM="P" Or
   ;    TIPO_ITEM="M" Or
   ;    TIPO_ITEM="T" Or
   ;    TIPO_ITEM="O" Or
   ;    TIPO_ITEM=""
   ;    Then TIPO_ITEM="M"
   ; EndIf

   vrct=([Preco Total]-[Valor Desconto Total])+
         [Valor Frete Total       ]+
         [Valor Seguro Total      ]+
         [Valor OutDesp Total     ]+
         [Valor do IPI            ]+
         [ICMS_ST_Valor           ] 

    For q From 1 to 20
      If TpItem[q]=TIPO_ITEM Or TpItem[q]=""
         Then TpItem[q]  =TIPO_ITEM
              VrTpItem[q]=VrTpItem[q]+vrct
              QuitLoop
      EndIf
    EndFor
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile

  Moveto "\\Sistemas\\CtaCor\\Tmp_Parc"
  For q From 1 to 20
    If TpItem[q]="" Then QuitLoop EndIf
    End
    Down
    [Codigo da Empresa  ]=[\Sistemas\Estoque\NotaEC->Codigo da Empresa  ]
    [Codigo             ]=[\Sistemas\Estoque\NotaEC->Codigo             ]
    [CGC                ]=[\Sistemas\Estoque\NotaEC->CGC                ]
    [Tipo do Item       ]=TpItem[q]
    [Serie do Documento ]=[\Sistemas\Estoque\NotaEC->Serie do Documento ]
    [Numero do Documento]=[\Sistemas\Estoque\NotaEC->Numero do Documento]
    [Data de Entrada    ]=[\Sistemas\Estoque\NotaEC->Data de Entrada    ]
    [Preco Total        ]=VrTpItem[q]
  EndFor
  UnLockRecord

  Moveto "\\Sistemas\\Estoque\\NotaEC"

EndScan
Do_It!
ClearAll

SetDir "\\Sistemas\\Exporta"
Copy "\\Sistemas\\CtaCor\\Tmp_Parc" "Answer"
If IsEmpty("Answer")
   Then Return
EndIf
Empty("\\Sistemas\\CtaCor\\Tmp_Parc")

Sort "Answer" on "Codigo da Empresa","Tipo do Item","Codigo",
                 "Serie do Documento","Numero do Documento"
ClearAll


LANC_OK=True
NR=NRecords("Answer")
View "\\Sistemas\\Exporta\\Alterdct"
View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Estoque\\TpItem"
CoEdit "Answer"

SeqLanc  =8000
SeqLancPM=0     

TPITEM=[Tipo do Item      ]
CODIGO=[Codigo            ]
TpItem()
Fornecedor()
CDOC  =[Serie do Documento]
NDOCI =NumVal([Numero do Documento])
NDOCF =NumVal([Numero do Documento])-1
NDOCCB=NumVal([Numero do Documento])
HIST  =""
VALORT=0
VRLANC=0
ULTIMO_LANC_PM=False

Scan
  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Dados Parcial (Entradas) "+BARRA_STRING)

  If TPITEM<>[Tipo do Item]
     Then MontaHist("E")
          ULTIMO_LANC_PM=True
          Grava_LCE()
          Grava_LDE()
          Muda_Fornecedor()
  EndIf

  If CODIGO<>[Codigo]
     Then MontaHist("E")
          Grava_LCE()
          Muda_Fornecedor()
  EndIf

  If CDOC<>[Serie do Documento]
     Then MontaHist("E")
          NDOCF =NumVal([Numero do Documento])-1
          Grava_LCE()
  EndIf

  If NumVal([Numero do Documento])<>NDOCCB
     Then If NumVal([Numero do Documento])<>(NDOCF+1)
             Then MontaHist("E")
          EndIf
  EndIf

  VRLANC=VRLANC+[Preco Total]
  VALORT=VALORT+[Preco Total]
  NDOCF =NumVal([Numero do Documento])

  NDOC  =[Numero do Documento]

EndScan
MontaHist("E")
ULTIMO_LANC_PM=True
Grava_LCE()
Grava_LDE()
Do_It!
ClearAll
EndProc

;*******************************************************************************
;* Rotina Localiza Tipo do Ittem p/ Debito da Entrada                          *
;*******************************************************************************
Proc TpItem()
Moveto "\\Sistemas\\Estoque\\TpItem"
Moveto [Tipo do Item]
Locate TPITEM
If RetVal
   Then CONTA_DB=[Conta Contabil]
   Else CONTA_DB="*0013"
EndIf
Moveto "Answer"
EndProc

;*******************************************************************************
;* Rotina Localiza Fornecedor p/ Credito da Entrada                            *
;*******************************************************************************
Proc Fornecedor()
CONTA_CR="*0014"
NOME_CR =""
CGC_CR  =""

Moveto "\\Sistemas\\Cadastro\\Destinat"
Moveto [Codigo]
Locate CODIGO
If RetVal
   Then If Not IsBlank([Conta Contabil])
           Then CONTA_CR=[Conta Contabil]
           Else CONTA_CR="*0015"
        EndIf

        NOME_CR=[Nome Fantasia EmitDest]
        If SubStr([CGC],03,1)="." and
           SubStr([CGC],07,1)="." and
           SubStr([CGC],11,1)="/" and
           SubStr([CGC],16,1)="-"
           Then WVR=""               ;CGC
                WVR=SubStr([CGC],01,2)+
                    SubStr([CGC],04,3)+
                    SubStr([CGC],08,3)+
                    SubStr([CGC],12,4)+
                    SubStr([CGC],17,2)
                CHECACGC(WVR)
                If WB=0
                   Then CGC_CR=WVR
                EndIf
           Else If SubStr([CGC],04,1)="." and
                   SubStr([CGC],08,1)="." and
                   SubStr([CGC],12,1)="-"
                   Then WVR=""               ;CPF
                        WVR=SubStr([CGC],01,3)+
                            SubStr([CGC],05,3)+
                            SubStr([CGC],09,3)+
                            SubStr([CGC],13,2)
                        CHECACPF(WVR)
                        If WB=0
                           Then CGC_CR=WVR
                        EndIf
                EndIf
        EndIf
EndIf

Moveto "Answer"
EndProc

;*******************************************************************************
;* Rotina Gravacao do Lancamento Debito p/ Entrada e Totalizadores             *
;*******************************************************************************
Proc Grava_LDE()

;****** Gera Lancamento *****
HISTORICO="VR NF's A PRAZO CF REGISTRO EM "+AlinhM(StrVal(Month(VSDGDTFIM)),2)+"/"+StrVal(Year(VSDGDTFIM))


Moveto "\\Sistemas\\Exporta\\Alterdct"
End Down
[Numero do Lancamento   ]=SeqLanc  
[Sequencia do Lancamento]=0             
[Lancamento_Automatico  ]=BlankNum()
[Conta_Debito           ]=CONTA_DB
[Conta_Credito          ]=""
[Data                   ]=VSDGDTFIM
[Valor                  ]=VALORT 
[Codigo_Historico       ]=BlankNum()
[Descricao_Historico    ]=HISTORICO
[Numero_Documento       ]=""
UnLockRecord

SeqLanc=SeqLanc+1

Moveto "Answer"
TPITEM  =[Tipo do Item       ]
DATALANC=VSDGDTFIM
VALORT  =0

TpItem()
SeqLancPM=0          
ULTIMO_LANC_PM=False
EndProc

;*******************************************************************************
;* Rotina Gravacao do Lancamento Credito p/ Entrada                            *
;*******************************************************************************
Proc Grava_LCE()

;****** Gera Lancamento *****
If Search(",", HIST)>0 Or
   Search("a", HIST)>0
   Then HISTORICO=NOME_CR+" /VR. NF's "+CDOC+" "+HIST
   Else HISTORICO=NOME_CR+" /VR. NF "+CDOC+" "+HIST
EndIf

SeqLancPM=SeqLancPM+1

Moveto "\\Sistemas\\Exporta\\Alterdct"
End Down
[Numero do Lancamento   ]=SeqLanc  
[Sequencia do Lancamento]=SeqLancPM
[Lancamento_Automatico  ]=BlankNum()
[Conta_Debito           ]=""         
[Conta_Credito          ]=CONTA_CR
[Data                   ]=VSDGDTFIM
[Valor                  ]=VRLANC 
[Codigo_Historico       ]=BlankNum()
[Descricao_Historico    ]=HISTORICO
[Numero_Documento       ]=""
UnLockRecord

Moveto "Answer"
CODIGO=[Codigo]
CDOC  =[Serie do Documento ]
NDOCF =NumVal([Numero do Documento])-1
HIST  =""
VRLANC=0

EndProc

;*******************************************************************************
;* Rotina Mudanca de Fornecedor                                                *
;*******************************************************************************
Proc Muda_Fornecedor()
CODIGO=[Answer->Codigo]
NDOCF =NumVal([Answer->Numero do Documento])-1
Fornecedor()
DATALANC=VSDGDTFIM
HIST  =""
EndProc


;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros Movimentos de Saida                  *
;*******************************************************************************
Proc GERA_S()
AGUARDE("Aguarde, Processando Dados Notas de Saida")

{Ask} {\\Sistemas\\Vendas\\NotaC} Check
Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao        ] TypeIn ">= ~VSDGDTINI , <= ~VSDGDTFIM"
Moveto [Descricao da Destinacao] TypeIn "..VEND.."
Moveto [Tipo de Pagamento      ] TypeIn "P"
Moveto [Tipo Movimento Estoque ] TypeIn "S"
Moveto [Situacao               ] TypeIn "Not C"
Do_It!
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf

Sort "Answer" on "Codigo da Empresa", "Forma de Pagamento", "Serie do Documento",
                 "Data de Emissao",  "Numero do Documento"
ClearAll

LANC_OK=True
NR=NRecords("Answer")
View "\\Sistemas\\Exporta\\Alterdct"
View "\\Sistemas\\Cadastro\\Empresas"
CoEdit "Answer"

FORMAPG =[Forma de Pagamento]
DATALANC=[Data de Emissao  ]
NDOCI   =NumVal([Numero do Documento])
NDOCF   =NumVal([Numero do Documento])-1
CDOC    =[Serie do Documento ]
HIST    =""
VALORT  =0
VRLANC  =0
ULTIMO_LANC_PM=False

SeqLanc  =9000
SeqLancPM=0    

Scan
  Barra(NR, RecNo())
  AGUARDE("Aguarde, Exportando Dados Parcial (Saidas) "+BARRA_STRING)

  If FORMAPG<>[Forma de Pagamento]
     Then MontaHist("S")
          NDOCF =NumVal([Numero do Documento])-1
          Grava_LDS()
          Grava_LCS()
  EndIf

  If DATALANC<>[Data de Emissao]
     Then MontaHist("S")
          Grava_LDS()
  EndIf

  If CDOC<>[Serie do Documento]
     Then MontaHist("S")
          NDOCF =NumVal([Numero do Documento])-1
          Grava_LDS()
  EndIf

  If NumVal([Numero do Documento])<>(NDOCF+1)
     Then MontaHist("S")
  EndIf

  VRLANC=VRLANC+[Valor Nota Fiscal]
  VALORT=VALORT+[Valor Nota Fiscal]
  NDOCF =NumVal([Numero do Documento])

  NDOC  =[Numero do Documento]

  Switch
    Case [Forma de Pagamento]="CT":
      CONTA_DB="*0016"
      CONTA_CR="*0017"
    Case [Forma de Pagamento]="CL":
      CONTA_DB="*0016"
      CONTA_CR="*0017"
    Case [Forma de Pagamento]="CD":
      CONTA_DB="*0018"
      CONTA_CR="*0019"
    OtherWise                     :
      CONTA_DB="*0020"
      CONTA_CR="*0021"
  EndSwitch

EndScan
MontaHist("S")
ULTIMO_LANC_PM=True
Grava_LDS()
Grava_LCS()
Do_It!
ClearAll
EndProc

;*******************************************************************************
;* Rotina Gravacao do Lancamento Debito p/ Saidas                              *
;*******************************************************************************
Proc Grava_LDS()

;****** Gera Lancamento *****
If Search(",", HIST)>0 Or
   Search("a", HIST)>0
   Then HISTORICO=AlinhM(StrVal(DATALANC),10)+" VR. NF's "+CDOC+" "+HIST
   Else HISTORICO=StrVal(DATALANC)+" VR. NF "+CDOC+" "+HIST
EndIf

SeqLancPM=SeqLancPM+1

Moveto "\\Sistemas\\Exporta\\Alterdct"
End Down
[Numero do Lancamento   ]=SeqLanc  
[Sequencia do Lancamento]=SeqLancPM
[Lancamento_Automatico  ]=BlankNum()
[Conta_Debito           ]=CONTA_DB  
[Conta_Credito          ]=""          
[Data                   ]=VSDGDTFIM
[Valor                  ]=VRLANC
[Codigo_Historico       ]=BlankNum()
[Descricao_Historico    ]=HISTORICO
[Numero_Documento       ]=""
UnLockRecord

Moveto "Answer"
FORMAPG =[Forma de Pagamento]
DATALANC=[Data de Emissao ]
CDOC    =[Serie do Documento ]
NDOCF   =NumVal([Numero do Documento])-1
HIST    =""
VRLANC  =0
EndProc

;*******************************************************************************
;* Rotina Gravacao do Lancamento Credito p/ Saidas e Totalizadores             *
;*******************************************************************************
Proc Grava_LCS()

;****** Gera Lancamento *****
HISTORICO="VR VENDAS A PRAZO CF REGISTRO EM "+AlinhM(StrVal(Month(VSDGDTFIM)),2)+"/"+StrVal(Year(VSDGDTFIM))

Moveto "\\Sistemas\\Exporta\\Alterdct"
End Down
[Numero do Lancamento   ]=SeqLanc  
[Sequencia do Lancamento]=0             
[Lancamento_Automatico  ]=BlankNum()
[Conta_Debito           ]=""          
[Conta_Credito          ]=CONTA_CR
[Data                   ]=VSDGDTFIM
[Valor                  ]=VALORT
[Codigo_Historico       ]=BlankNum()
[Descricao_Historico    ]=HISTORICO
[Numero_Documento       ]=""
UnLockRecord

SeqLanc=SeqLanc+1

Moveto "Answer"
VALORT  =0

SeqLancPM=0              
ULTIMO_LANC_PM=False
EndProc

;*******************************************************************************
;* Rotina p/ Montar Historico                                                  *
;*******************************************************************************
Proc MontaHist(TIPO_MOVIMENTO)
Private NHIST, TIPO_MOVIMENTO
While True
  NHIST=HIST
  If NDOCI=NDOCF
     Then If NHIST=""
             Then NHIST=NHIST+StrVal(NDOCI)
             Else NHIST=NHIST+", "+StrVal(NDOCI)
          EndIf
     Else If NHIST=""
             Then If (NDOCI+1)=NDOCF
                     Then NHIST=NHIST+StrVal(NDOCI)+", "+StrVal(NDOCF)
                     Else NHIST=NHIST+StrVal(NDOCI)+" a "+StrVal(NDOCF)
                  EndIf
             Else If (NDOCI+1)=NDOCF
                     Then NHIST=NHIST+", "+StrVal(NDOCI)+", "+StrVal(NDOCF)
                     Else NHIST=NHIST+", "+StrVal(NDOCI)+" a "+StrVal(NDOCF)
                  EndIf
          EndIf
  EndIf
  If TIPO_MOVIMENTO="E"
     Then If (Len(NHIST)+Len(NOME_CR)+2)>255
             Then Grava_LCE()
             Else QuitLoop
          EndIf
     Else If Len(NHIST)>255
             Then Grava_LDS()
             Else QuitLoop
          EndIf
  EndIf

EndWhile
HIST  =NHIST
NDOCI =NumVal([Numero do Documento])
NDOCCB=NumVal([Numero do Documento])
EndProc

;*******************************************************************************
;* ROTINA LIMPA_ARRAY                                                          *
;*******************************************************************************
Proc Limpa_Array()
For q from 1 to 20
  TpItem[q]=""
  VrTpItem[q]=BlankNum()
EndFor
EndProc

;******************************************************************************
; CONVERTE DATA DE GRAVACAO PARA STRING                                       *
;******************************************************************************
PROC DATA2STR_S2(DATA)
DTGRAV=AlinhM(LTrim(Format("D13",DATA)),10)
RETURN DTGRAV
ENDPROC                                       

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
PROC VALOR2STR_S(VALOR,TAM)
VRTIT=STRVAL(VALOR)
PART1=LEN(VRTIT)-3
PART2=LEN(VRTIT)-1
VRTIT=SUBSTR(VRTIT,1,PART1)+","+SUBSTR(VRTIT,PART2,2)
RETURN VRTIT
ENDPROC


;********************************************************************************
;* Rotina Gravar Texto                                                         *
;********************************************************************************
Proc Gravar_Texto()           


View "\\Sistemas\\Exporta\\Alterdct"
Scan

 Print File ARQ Chr(34)+StrVal([Lancamento_Automatico])+Chr(34)+Chr(44)
 Print File ARQ Chr(34)+[Conta_Debito     ]            +Chr(34)+Chr(44)
 Print File ARQ Chr(34)+[Conta_Credito    ]            +Chr(34)+Chr(44)
 Print File ARQ Chr(34)+DATA2STR_S2([Data ]   )        +Chr(34)+Chr(44)
 Print File ARQ Chr(34)+VALOR2STR_S([Valor],15)        +Chr(34)+Chr(44)
 Print File ARQ Chr(34)+StrVal([Codigo_Historico])     +Chr(34)+Chr(44)
 Print File ARQ Chr(34)+[Descricao_Historico]          +Chr(34)+Chr(44)
 Print File ARQ Chr(34)+[Numero_Documento   ]          +Chr(34)
 Print File ARQ "\n"

EndScan
ClearAll

EndPRoc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************

Empty("\\Sistemas\\CtaCor\\Tmp_Parc")
Empty("\\Sistemas\\Exporta\\Alterdct")

;****** Localiza Empresa *****
SeqLanc=4000

ARQ="\\Sistemas\\Exporta\\Dados\\ALTERDAT\\MV"+"0"+PREFIXO+MES+"."+ANO
arquivos=arquivos+Completa(ARQ,62," ")+"//"

gerou_arquivos=True
Deleta_Arquivo(ARQ)

Array TpItem[20]
Array VrTpItem[20]

LANC_OK=False
GERA_C()
GERA_E()
If SYS_CODIGO_CLIENTE="0092"
   Then GERA_TIT()
   Else GERA_S()
EndIf
If Not LANC_OK
   Then MENSAGEM("N„o Existem Registros a Processar, Lan‡amentos Contabil !")
        Return
EndIf

Gravar_Texto()

Delete "Answer"
ClearAll
LimpAguarde()
Release Procs Gera_C, Gera_E, Grava_LDE, Grava_LCE, Grava_LCTE, MontaHist,
              VALOR2STR_S, DATA2STR_S2, Limpa_Array
