;* Sped_efd *******************************************************************
;* Geracao arquivo SPED_EFD ICMS/IPI                                          *
;******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/12/2009 por Anivel Augusto Rodrigues
;Ultima Alteracao: 14/02/2011 por Anivel Augusto Rodrigues               
;Motivo Alteracao: Ajustes CRO - SPEDC405      
;Ultima Alteracao: 14/02/2011 por Anivel Augusto Rodrigues               
;Motivo Alteracao: Ajustes SOMA_ITENS_???      
;Ultima Alteracao: 16/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Reducao ICMS sem Desconto          
;Ultima Alteracao: 17/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Bloco E          
;Ultima Alteracao: 18/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indices ICMS - Agel
;Ultima Alteracao: 21/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Destinacao          
;Ultima Alteracao: 21/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP e CST_ICMS Itens do Cupom Fiscal
;Ultima Alteracao: 23/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DT_E_S<>DT_DOC situacao extemporanea "01"                       
;Ultima Alteracao: 24/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Novo Layout NotaEC/NotaEI           
;Ultima Alteracao: 10/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ALIQ_ST                     
;Ultima Alteracao: 14/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variaveis/calculos          
;Ultima Alteracao: 07/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes vracres por item vl_bc_icms2 para vl_RED
;Ultima Alteracao: 09/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ltrim/RTrim na Descricao do Item/ NUM_ITEM sequencial
;Ultima Alteracao: 11/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_SIT DTEMIS<>DTSAID                                
;Ultima Alteracao: 17/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem de item de cupom com tributa‡Æo invalida
;Ultima Alteracao: 29/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao C113, C114 e C160 a justes PIS/COFINS Saidas     
;Ultima Alteracao: 04/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dados item nota CEMIG     
;Ultima Alteracao: 07/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tabela NotaR                                 
;Ultima Alteracao: 14/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Sintax                        
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFE pra todas as series
;Ultima Alteracao: 22/09/2011 por Cidinha Ferreira
;Motivo Alteracao: Ajustes COD_PART
;Ultima Alteracao: 17/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes documental             
;Ultima Alteracao: 17/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Vl_BRT Redu‡Æo Z       
;Ultima Alteracao: 25/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo de Documentos 
;Ultima Alteracao: 01/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data de Saida fora do Mes
;Ultima Alteracao: 16/12/2011 por Karina Andrade
;Motivo Alteracao: Add Tira_Char() para caracter '|'
;Ultima Alteracao: 21/12/2011 por Karina Andrade
;Motivo Alteracao: Alterado NOTACP para NOTAV
;Ultima Alteracao: 06/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_VER Registro 0000      
;Ultima Alteracao: 21/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem de periodo de data informado               
;Ultima Alteracao: 29/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Chave de acesso Nfe entradas
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MODELO Documento "02" e "2D" Venda a consumidor e ECF
;Ultima Alteracao: 18/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Chave de acesso CT-e entradas
;Ultima Alteracao: 29/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Emitida de Entrada, Fitrar por data de saida
;Ultima Alteracao: 05/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SPEDC4?? totalizando por serie fabricacao da impressora
;Ultima Alteracao: 20/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Loop ECF_C/ECF_T
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Removido CALCULA_ST 
;Ultima Alteracao: 15/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_VER - codigo do layout                           
;Ultima Alteracao: 15/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IND_PGTO- Outros = 2                                 
;Ultima Alteracao: 22/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tratamento item de cupom cancelado      
;Ultima Alteracao: 27/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome de campo digitado errado IND_PGTO Conforme versÆo
;Ultima Alteracao: 21/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grava_Itens conforme perfil para cupons c/ item cancelado
;Ultima Alteracao: 24/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_MOD "2D" PARA ECF
;Ultima Alteracao: 04/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ECF_FAB locate empr, serie, dia -> c425,c460,c470,c490
;Ultima Alteracao: 29/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes itesm CST ?60 sem credito icms
;Ultima Alteracao: 06/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ignorar nota s¢ de servi‡o na entrada
;Ultima Alteracao: 11/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0450, C110, C113                     
;Ultima Alteracao: 03/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valor Mercadorias+Servicos registro C100
;Ultima Alteracao: 05/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SPED0450 criar apenas se existir obs na nota
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LimpaRodape()                  
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes GERA_BLOCO1()                  
;Ultima Alteracao: 07/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes GERA_BLOCO1()   
;Ultima Alteracao: 08/02/2012 por Karina Andrade
;Motivo Alteracao: Ajustes COD_VER Registro 0000
;Ultima Alteracao: 08/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tipo de frete em 2012     
;Ultima Alteracao: 11/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Itens propriedade de terceiros                 
;Ultima Alteracao: 06/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Versao/Data                                    
;Ultima Alteracao: 11/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Motivo Inventario                              

;*******************************************************************************
;* Rotina Estoque                                                              *
;*******************************************************************************
Proc Monta_Estoque()
Private posse, posse_cd, posse_cgc, posse_ie, posse_uf

Aguarde("Aguarde, processando invent rio 1/3")

{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item        ] Example "ITEM"
Moveto [Tipo do Item          ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I, Not O"
{Ask}  "\\Sistemas\\Estoque\\Sdestq" Enter Check
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] Example "ITEM"
Moveto [Ano Referencia        ] TypeIn ANO_ESTQ
Moveto [Mes Referencia        ] TypeIn MES_ESTQ
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Mensagem("Fichas de Estoque referente a "+MES_ESTQ+"."+ANO_ESTQ+" n„o encontrado, Verificar !// //Arquivo do SPED ser  gerado com erro !")
				Return False
EndIf

TabelaI=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Estoque\\Invent" TabelaI
Empty TabelaI

Tabela_ERRO_ITEM=Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Estoque\\RM_REPRO" Tabela_ERRO_ITEM
Empty Tabela_ERRO_ITEM

NR = NRecords("Answer")

View TabelaI
View Tabela_ERRO_ITEM
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Estoque\\Marcas"
View "\\Sistemas\\Estoque\\Itens"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando invent rio 2/3",45," ")+BARRA_STRING)

  ;-- Verifica cadastro --------------------------------------------------------
  Moveto "\\Sistemas\\Estoque\\Itens"
  Moveto [Codigo do Item]
  Locate [Answer->Codigo do Item]
  If Not RetVal
     Then Moveto Tabela_ERRO_ITEM
          End
          Down
          [Codigo do Item       ]=[Answer->Codigo do Item]
          [MSG_Erro             ]="ITEM SEM CADASTRADO"

          Moveto "Answer"
          Loop 
  EndIf

  ;-- Consiste irregularidades no inventario -----------------------------------
  INCONSISTENTE=False
  If Not IsBlank([Answer->Saldo Atual]) Or
     Not IsBlank([Answer->Custo Total Atual])
     Then If [Answer->Saldo Atual] < 0 Or [Answer->Custo Total Atual] < 0
             Then INCONSISTENTE=True
          EndIf
          If [Answer->Saldo Atual] > 0 And [Answer->Custo Total Atual] <= 0
             Then INCONSISTENTE=True
          EndIf
          If [Answer->Custo Total Atual] > 0 And [Answer->Saldo Atual] <= 0
             Then INCONSISTENTE=True
          EndIf
  EndIf
  If INCONSISTENTE
     Then Moveto Tabela_ERRO_ITEM
          End
          Down
          [Codigo do Item       ]=[Answer->Codigo do Item]
          [MSG_Erro             ]="SALDO/CUSTO INCONSISTENTE"

          Moveto "Answer"
          Loop 
  EndIf

  ;-- Verifica posse -----------------------------------------------------------
  posse    ="0"
  posse_cd =""
  posse_cgc=""
  posee_ie =""
  posee_uf =""
  If [\Sistemas\Estoque\Itens->Propriedade_Terceiro]="S"
     Then 
          Moveto "\\Sistemas\\Estoque\\Marcas"
          Moveto [Codigo da Marca]
          Locate [\Sistemas\Estoque\Itens->Codigo da Marca]
          If Not RetVal
             Then Moveto Tabela_ERRO_ITEM
                  End
                  Down
                  [Codigo do Item       ]=[Answer->Codigo do Item]
                  [MSG_Erro             ]="MARCA SEM CADASTRO/TERCEIRO"
        
                  Moveto "Answer"
                  Loop 
          EndIf             
     
          Moveto "\\Sistemas\\Cadastro\\Destinat"
          Moveto [Codigo]
          Locate [\Sistemas\Estoque\Marcas->Codigo_Fornecedor_Marca]
          If Not RetVal
             Then Moveto Tabela_ERRO_ITEM
                  End
                  Down
                  [Codigo do Item       ]=[Answer->Codigo do Item]
                  [MSG_Erro             ]="TERCEIRO SEM CADASTRO/MARCA"
        
                  Moveto "Answer"
                  Loop 
          EndIf             

          posse    ="2"
          posse_cd =[\Sistemas\Estoque\Marcas->Codigo_Fornecedor_Marca] 
          posse_cgc=[CGC] 
          posse_ie =[IE ] 
          posse_uf =[UF ] 
     
  EndIf   

  Moveto TabelaI
  End
  If Not IsBlank([Codigo da Empresa])
     Then Down
  EndIf
  [Codigo da Empresa    ]=[Answer->Codigo da Empresa]
  [Posse_Estoque        ]=posse
  [Codigo do Item       ]=[Answer->Codigo do Item   ]
  [Saldo Atual          ]=[Answer->Saldo Atual      ]
  [Custo Total Atual    ]=[Answer->Custo Total Atual]
  [Descricao do Item    ]=[\Sistemas\Estoque\Itens->Descricao do Item]
  [Unidade Interna      ]=[\Sistemas\Estoque\Itens->Unidade Fiscal   ]
  Switch
    Case posse="2":
      [Codigo_Terceiro  ]=posse_cd
      [CGC              ]=posse_cgc
      [Razao Social     ]=posse_ie ; campo temporario IE
      [Localizacao      ]=posse_uf ; campo temporario UF
  EndSwitch
  [Ano Referencia       ]=[Answer->Ano Referencia]        
  [Mes Referencia       ]=[Answer->Mes Referencia]        
          
  Moveto "Answer"
EndScan
Do_It!
ClearAll
     
If Not IsEmpty(Tabela_ERRO_ITEM)
   Then 
        Aguarde("Aguarde, relat¢rio de inconsistˆncia no invent rio 3/3")

        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item   ] Example "cite"
        Moveto [Descricao do Item] Example "dite"
        {Ask} TypeIn Tabela_ERRO_ITEM Enter TypeIn "Fast"
        Moveto [Codigo do Item   ] Example "cite"
        Moveto [Descricao do Item] TypeIn "Changeto _dite"
        Do_It!
        ClearAll

        MSG=""
				MSG=MSG+"O Sistema detectou inconsistlncia de dados,//"
        MSG=MSG+"referente ao Estoque de "+MES_ESTQ+"."+ANO_ESTQ+".//"
				MSG=MSG+"Ser  exibido um Relat¢rio dos mesmos !// //"
        MSG=MSG+"Arquivo do sintegra n„o ser  gerado !//"
				MSG=MSG+"Execute o Invent rio com CONSISTIR ERROS = SIM !"
        Mensagem(MSG)

        DISPOSITIVO()
        If OK<>""
           Then IMPRIREL(Tabela_ERRO_ITEM,"R")
        EndIf
        Return False
EndIf

Return True
EndProc

;*******************************************************************************
;* Rotina p/ verificar serie documento                                         *
;*******************************************************************************
Proc Pega_Serie(TpMov,TpDoc,Serie)
Private TpMov,TpDoc,Serie

Switch

 Case TpMov="S":
  Switch
   Case TpDoc="":
   OtherWise:
    Switch
     Case Serie="M1" : Serie="1"
     Case Serie="M-1": Serie="1"
     Case Serie="M_1": Serie="1"
     Case Serie="S-1": Serie="2"
     Case Serie="S1" : Serie="2"
     Case Serie="S-2": Serie="2"
     Case Serie="S2" : Serie="2"
     Case Serie="D"  : Serie="2"
    EndSwitch
  EndSwitch

 Case TpMov="E":
  Switch
   Case TpDoc="":
   OtherWise:
    Switch
     Case Serie="M1" : Serie="1"
     Case Serie="M-1": Serie="1"
     Case Serie="M_1": Serie="1"
     Case Serie="S-1": Serie="2"
     Case Serie="S1" : Serie="2"
     Case Serie="S-2": Serie="2"
     Case Serie="S2" : Serie="2"
     Case Serie="D"  : Serie="2"
    EndSwitch
  EndSwitch

EndSwitch

Return Serie
EndProc

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

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

Return VrTit
EndProc  ; (Valor_Str)

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

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

Return DtTit
EndProc  ; (Data_Str)

;********************************************************************************
;* Totalizadores Reducao ICMS                                                   *
;********************************************************************************
Proc NR_TOTC420T(Aliq)
Private Aliq,s1,s2,i 

s1=AlinhM(Tira_CharNum(Valor_Str(Aliq,2)),4)
For i From 1 To 20
  If NR_TOTC420T[i]=""
     Then s2=AlinhM(StrVal(i),2)
          NR_TOTC420T[i]="T"+s1+"|"+s2
          
          s2="ERRO"
          
          QuitLoop
     Else If SubStr(NR_TOTC420T[i],2,4)=s1
             Then s2=AlinhM(StrVal(i),2)
                  QuitLoop
          EndIf
  EndIf      
EndFor
   
Return s2
EndProc  

;********************************************************************************
;* Totalizadores Reducao ISSQN                                                  *
;********************************************************************************
Proc NR_TOTC420S(Aliq)
Private Aliq,s1,s2,i 

s1=AlinhM(Tira_CharNum(Valor_Str(Aliq,2)),4)
For i From 1 To 20
  If NR_TOTC420S[i]=""
     Then s2=AlinhM(StrVal(i),2)
          NR_TOTC420S[i]="S"+s1+"|"+s2

          s2="ERRO"

          QuitLoop
     Else If SubStr(NR_TOTC420S[i],2,4)=s1
             Then s2=AlinhM(StrVal(i),2)
                  QuitLoop
          EndIf
  EndIf      
EndFor
   
Return s2
EndProc  

;*******************************************************************************
;* Rotina inicio do processo                    
;*******************************************************************************
Proc Inicio()

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

{Tools} {Info} {Inventory} {Files} TypeIn "SPED*.DB" Enter
Scan
  If [List->Name]="Speddad.db" Then Loop EndIf
  
  Empty(SubStr([List->Name],1,8))
EndScan
ClearAll

;---- Cria/Zera Totalizadores -------------------------------------------------- 
Array REG_BLC[100]
Array TOT_BLC[020]
Array NR_TOTC420T[20]
Array NR_TOTC420S[20]
For I From 1 To 100
  REG_BLC[I]=""
EndFor
For I From 1 To 20 
  TOT_BLC[I]    =""
  NR_TOTC420T[I]=""
  NR_TOTC420S[I]=""
EndFor

;---- Define valore padräes para totalizadores redu‡Æo z -----------------------

;* fazer levandamentos dos totalizadores utilizadoes no ECF nos clientes assumir padrao para todos *
;* caso nÆo exista o totalizadores criar um NOVO indice na rela‡Æo depois do £ltimo informado

;--- ICMS -----------
NR_TOTC420T[1]="T0000|01"
NR_TOTC420T[2]="T0500|02"
NR_TOTC420T[3]="T0700|03"
NR_TOTC420T[4]="T1200|04"       
NR_TOTC420T[5]="T1800|05"
NR_TOTC420T[6]="T2500|06"

Switch
  Case SYS_CODIGO_CLIENTE="0207":
    NR_TOTC420T[1]="T0700|01"
    NR_TOTC420T[2]="T1200|02"
    NR_TOTC420T[3]="T1800|03"
    NR_TOTC420T[4]="T2500|04"       
    NR_TOTC420T[5]=""
    NR_TOTC420T[6]=""
EndSwitch

;--- ISSQN ----------
NR_TOTC420S[1]="S0000|01"
NR_TOTC420S[2]="S0500|02"
NR_TOTC420S[3]="S0700|03"

;---- Define arquivo TXT ------------------------------------------------------- 
ARQ = "\\Sistemas\\Exporta\\Dados\\"+"SPED"+
       AlinhM(StrVal(Month(VSDGDTFIM)),2)+
       SubStr(StrVal(Year(VSDGDTFIM)),3,2)+".TXT"
Deleta_Arquivo(ARQ)

;---- Paramentros empresa ------------------------------------------------------ 
View "\\Sistemas\\Cadastro\\Empresas"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA
If Not RetVal
   Then Mensagem("Erro dados contribuinte SPED-[EMPRESAS]")
        Return False
EndIf
ATIVIDADE=[\Sistemas\Cadastro\Empresas->Atividade ]
UFEMPRESA=[\Sistemas\Cadastro\Empresas->Uf Empresa]
PREFIXO  =Substr([Conta Contabil Empresa],1,3)
ClearAll

Return True
EndProc

;*******************************************************************************
;* Desmembra campo endereco em Logradouro, Numero e Complemento                *
;*******************************************************************************
Proc PegaEndereco(s)
Private s,posl,posn

End_Logradouro =""
End_Numero     =""
End_Complemento=""

posl=SearchFrom(",",s,1)
If posl<2
   Then End_Logradouro =s
   Else End_Logradouro=LTrim(RTrim(SubStr(s,1,posl-1)))
       
        posn=SearchFrom(",",s,posl+1)
        If posn>1
           Then End_Numero     =LTrim(RTrim(SubStr(s,posl+1,(posn-posl)-1)))
                End_Complemento=LTrim(RTrim(SubStr(s,posn+1,40)))
           Else End_Numero     =LTrim(RTrim(SubStr(s,posl+1,40)))     
        EndIf
EndIf   
EndProc

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

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

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

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar itens e unidades SPED0200, SPED0205
;*******************************************************************************
Proc Grava_Itens(Codigo,Docto)
Private Codigo, TabAtual, Docto  

TabAtual=Table()

While True
  Moveto "\\Sistemas\\Estoque\\Itens"
  Moveto [Codigo do Item]
  Locate Codigo
  If Not Retval
     Then Mensagem("Erro dados ITEM-[ITENS] : "+Codigo+"//"+Docto)
          End Down
  EndIf  

  Grava_Unidades([\Sistemas\Estoque\Itens->Unidade Interna],"Item: "+Codigo)

  Moveto "SPED0200"
  Moveto [COD_ITEM]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf

  Moveto "SPED0200"
  End
  Down
  [COD_ITEM        ]=Codigo
  [DESCR_ITEM      ]=RTrim(LTrim([\Sistemas\Estoque\Itens->Descricao do Item]))
  [COD_BARRA       ]=[\Sistemas\Estoque\Itens->Codigo de Barras]
  [COD_ANT_ITEM    ]=""
  [UNID_INV        ]=[\Sistemas\Estoque\Itens->Unidade Interna]
  Switch
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="A" : [TIPO_ITEM]="01"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="C" : [TIPO_ITEM]="09"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="D" : [TIPO_ITEM]="07"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="E" : [TIPO_ITEM]="02"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="G" : [TIPO_ITEM]="08"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="H" : [TIPO_ITEM]="08"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="I" : [TIPO_ITEM]="08"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="M" : [TIPO_ITEM]="01"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="P" : [TIPO_ITEM]="04"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="S" : [TIPO_ITEM]="03"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="T" : [TIPO_ITEM]="00"
    OtherWise               : [TIPO_ITEM]="99"
  EndSwitch
  If [TIPO_ITEM]="07" Or [TIPO_ITEM]="08" Or [TIPO_ITEM]="09" Or
     [TIPO_ITEM]="10" Or [TIPO_ITEM]="99"
     Then [COD_NCM         ]=""
     Else [COD_NCM         ]=[\Sistemas\Estoque\Itens->NCM]
  EndIf   
  [EX_IPI          ]=[\Sistemas\Estoque\Itens->EX_TIPI]
  [COD_GEN         ]=[\Sistemas\Estoque\Itens->Genero]
  [COD_LST         ]=StrVal([\Sistemas\Estoque\Itens->Codigo_Servico])
  [ALIQ_ICMS       ]=[\Sistemas\Estoque\Itens->Aliquota de ICMS]
  UnLockRecord

  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar unidades SPED0190
;*******************************************************************************
Proc Grava_Unidades(Codigo,Docto)
Private Codigo, TabAtual, Docto  

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

While True

  Moveto "SPED0190"
  Moveto [UNID]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf   

  Moveto "\\Sistemas\\Estoque\\Unidades"
  Moveto [Sigla da Unidade]
  Locate Codigo
  If Not Retval
     Then Mensagem("Erro dados UNIDADE-[UNIDADES] : "+Codigo+"//"+Docto)
          End Down
  EndIf  
  
  Moveto "SPED0190"
  Moveto [UNID]
  End
  Down   
  [UNID  ]=Codigo
  [DESCR ]=[\Sistemas\Estoque\Unidades->Descricao da Unidade]
  UnLockRecord

  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar natureza da opera‡Æo/presta‡Æo SPED0400
;*******************************************************************************
Proc Grava_NaturezaOperacao(Codigo,Docto)
Private Codigo, TabAtual, DESCR_NAT , Docto

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

While True
  Switch
    Case Len(Codigo)=1:
      Switch
        Case Codigo="A" : DESCR_NAT="COMPRA APLICACAO DIRETA"
        Case Codigo="C" : DESCR_NAT="COMPRAS"
        Case Codigo="D" : DESCR_NAT="DEVOLUCAO"
        Case Codigo="T" : DESCR_NAT="TRANSFERENCIA"
        Case Codigo="O" : DESCR_NAT="OUTRAS ENTRADAS"
        OtherWise       : DESCR_NAT="OUTRAS ENTRADAS"
      EndSwitch
    OtherWise         :
      Moveto "\\Sistemas\\Vendas\\Destin"
      Moveto [Codigo da Destinacao]
      Locate Codigo
      If Not Retval
         Then Mensagem("Erro dados NATUREZA OPERACAO-[DESTIN] : "+Codigo+"//"+Docto)
              DESCR_NAT     =""
         Else DESCR_NAT     =[\Sistemas\Vendas\Destin->Descricao da Destinacao]
      EndIf  
  EndSwitch

  Moveto "SPED0400"
  Moveto [COD_NAT]
  Locate Codigo
  If Not RetVal
     Then End
          Down   
          [COD_NAT       ]=Codigo                               
          [DESCR_NAT     ]=DESCR_NAT
          UnLockRecord
  EndIf
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar Informacao complementar SPED0450    
;*******************************************************************************
Proc Grava_InformacaoComplementar(Codigo,Texto)
Private Codigo, Texto, TabAtual

If IsBlank(Codigo)
   Then Return
EndIf

Codigo="000001" ; Valor fixo, pendente cadastro de informacao complementar
Texto ="XX"
   
TabAtual=Table()

While True
  Moveto "SPED0450"
  Moveto [COD_INF]
  Locate Codigo
  If Not RetVal
     Then End
          Down   
          [COD_INF       ]=Codigo
          [TXT           ]=Texto    
          UnLockRecord
  EndIf
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc

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

;---- Gera SPED0??? ------------------------------------------------------------ 
View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Icms_ipi\\Dadsped"

View "SPED0000"
View "SPED0005"
View "SPED0015"
CoEdit "SPED0100"

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

Moveto "\\Sistemas\\Cadastro\\Destinat"
Moveto [Codigo]
Locate VSDGEMPRESA
If Not RetVal
   Then Mensagem("Erro dados contribuinte SPED-[DESTINAT]")
        Return False
EndIf

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

Moveto "\\Sistemas\\ICMS_IPI\\Dadsped"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA
If Not RetVal
   Then Mensagem("Erro dados contribuinte SPED-[DADSPED]")
        Return False
EndIf
IND_PERFIL=[\Sistemas\Icms_ipi\DadSped->Empresa_IND_PERFIL]

Moveto "\\Sistemas\\Cadastro\\Cidades"
Moveto [Cidade]
Locate [\Sistemas\Icms_ipi\Dadsped->Contador_Cidade],
       [\Sistemas\Icms_ipi\Dadsped->Contador_UF    ]
If Not Retval
   Then Mensagem("Erro dados contador-[CIDADES] : "+[\Sistemas\Icms_ipi\Dadsped->Contador_Cidade]+"/"+[\Sistemas\Icms_ipi\Dadsped->Contador_UF])
        Return False
EndIf  
CCOD_MUN=StrVal([Codigo_Cidade])

;---- Gera SPED0000 ------------------------------------------------------------ 

COD_VER=""
Switch
  Case Year(VSDGDTFIM)=2008                          : COD_VER="001"
  Case Year(VSDGDTFIM)=2009                          : COD_VER="002"
  Case Year(VSDGDTFIM)=2010                          : COD_VER="003"
  Case Year(VSDGDTFIM)=2011                          : COD_VER="004"
  Case Year(VSDGDTINI)=2012 And Month(VSDGDTINI)<7   : COD_VER="005" 
  Case Year(VSDGDTINI)=2012 And Month(VSDGDTINI)<=12 : COD_VER="006"            
  OtherWise                                          : COD_VER="007"           
EndSwitch

Moveto "SPED0000"
End Down
[COD_VER                 ]=COD_VER 
[COD_FIN                 ]=FINALIDADE
[DT_INI                  ]=VSDGDTINI
[DT_FIN                  ]=VSDGDTFIM
[NOME                    ]=[\Sistemas\Cadastro\Destinat->Razao Social]
Switch
  Case [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="JURIDICA": [CNPJ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->CGC ])
  OtherWise                                                 : [CPF ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->CGC ])
EndSwitch
[UF                      ]=[\Sistemas\Cadastro\Destinat->UF]
[IE                      ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->IE  ])
[COD_MUN                 ]=ECOD_MUN
[IM                      ]=[\Sistemas\Cadastro\Destinat->IM     ]
[SUFRAMA                 ]=[\Sistemas\Cadastro\Destinat->ISuframa]
[IND_PERFIL              ]=[\Sistemas\Icms_ipi\DadSped->Empresa_IND_PERFIL]
If [\Sistemas\Icms_ipi\DadSped->Empresa_IND_ATIV]<>"0"
   Then [IND_ATIV        ]="1"
   Else [IND_ATIV        ]="0"
EndIf   
UnLockRecord

;---- Gera SPED0005 ------------------------------------------------------------ 
Moveto "SPED0005"
End Down
[FANTASIA                ]=[\Sistemas\Cadastro\Destinat->Nome Fantasia EmitDest]
[CEP                     ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->CEP])
PegaEndereco([\Sistemas\Cadastro\Destinat->Endereco])
[END                     ]=End_Logradouro
[NUM                     ]=End_Numero
[COMPL                   ]=End_Complemento
[BAIRRO                  ]=[\Sistemas\Cadastro\Destinat->Bairro]
[FONE                    ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->Telefone])
[FAX                     ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->Fax])
[EMAIL                   ]=[\Sistemas\Cadastro\Destinat->Endereco_Eletronico]
UnLockRecord

;---- Gera SPED0015 ------------------------------------------------------------ 
If Not IsBlank([\Sistemas\Cadastro\Destinat->IE_ST])
   Then
        Moveto "SPED0005"
        End Down
        [UF_ST                   ]=[\Sistemas\Cadastro\Destinat->UF]
        [IE_ST                   ]=[\Sistemas\Cadastro\Destinat->IE_ST]
        UnLockRecord
EndIf

;---- Gera SPED0100 ------------------------------------------------------------ 
Moveto "SPED0100"
End Down
[NOME                    ]=[DadSped->Contador_NOME]
[CPF                     ]=Tira_CharNum([DadSped->Contador_CPF]) 
[CRC                     ]=[DadSped->Contador_CRC]
[CNPJ                    ]=Tira_CharNum([DadSped->Contador_CNPJ])
[CEP                     ]=Tira_CharNum([DadSped->Contador_CEP])
[END                     ]=[DadSped->Contador_END]
[NUM                     ]=[DadSped->Contador_NUM]
[COMPL                   ]=[DadSped->Contador_COMPL]
[BAIRRO                  ]=[DadSped->Contador_BAIRRO]
[FONE                    ]=Tira_CharNum([DadSped->Contador_FONE])
[FAX                     ]=Tira_CharNum([DadSped->Contador_FAX])
[EMAIL                   ]=[DadSped->Contador_EMAIL]
[COD_MUN                 ]=CCOD_MUN
UnLockRecord

Do_It!
ClearAll

Return True
EndProc

;*******************************************************************************
;* Rotina para montagem do Bloco C                    
;*******************************************************************************
Proc Monta_BlocoC()
Private MODELO, NLanc, wi

;==== Entradas Estoque =========================================================

NLanc=100000

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Unidades"
View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPED0400"
View "SPEDC100"
View "SPEDC140"
View "SPEDC141"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "SPEDC500"
View "SPEDC590"
View "SPEDE510"
View "\\Sistemas\\Estoque\\NotaEI"
View "\\Sistemas\\Estoque\\NotaECP"
Coedit "\\Sistemas\\Estoque\\NotaEC"

NR=NRecords("\\Sistemas\\Estoque\\NotaEC")

Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 1/6",45," ")+BARRA_STRING)

  If [\Sistemas\Estoque\NotaEC->Codigo do Documento]<>"CEM" And        ; Nota Energia
     SubStr([\Sistemas\Estoque\NotaEC->Codigo do Documento],1,2)<>"NF" ; Notas Fiscais
     Then Loop
  EndIf   

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

  If [\Sistemas\Estoque\NotaEC->Valor Mercadoria]<=0 And                            
     [\Sistemas\Estoque\NotaEC->Valor Servico   ]>0                                 
     Then Loop
  EndIf   

  Grava_Participantes([\Sistemas\Estoque\NotaEC->Codigo],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])

  NLanc=NLanc+1  

  Switch
    Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CEM": ; Nota Energia
      Moveto "SPEDC500"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[\Sistemas\Estoque\NotaEC->Codigo]
      [COD_MOD          ]="06"
      [COD_SIT          ]="00"
      [SER              ]=[\Sistemas\Estoque\NotaEC->Serie do Documento]
      Switch
        Case Search("IND",ATIVIDADE)>0 : [COD_CONS]="04" 
        OtherWise                      : [COD_CONS]="01"
      EndSwitch
      [NUM_DOC          ]=[\Sistemas\Estoque\NotaEC->Numero do Documento ]
      [DT_DOC           ]=[\Sistemas\Estoque\NotaEC->Data de Emissao     ] 
      [DT_E_S           ]=[\Sistemas\Estoque\NotaEC->Data de Entrada     ]      
      [VL_DOC           ]=[\Sistemas\Estoque\NotaEC->Valor Nota Fiscal   ]
      [VL_DESC          ]=[\Sistemas\Estoque\NotaEC->Valor Desconto      ]
      [VL_FORN          ]=[\Sistemas\Estoque\NotaEC->Valor Mercadoria    ]
      [VL_SERV_NT       ]=[\Sistemas\Estoque\NotaEC->Valor Servico       ]
      [VL_TERC          ]=0
      [VL_DA            ]=[\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]
      [VL_BC_ICMS       ]=[\Sistemas\Estoque\NotaEC->Valor BCICMS]
      [VL_ICMS          ]=[\Sistemas\Estoque\NotaEC->Valor ICMS]
      [VL_BC_ICMS_ST    ]=[\Sistemas\Estoque\NotaEC->Valor BCSubstituicao ICMS]
      [VL_ICMS_ST       ]=[\Sistemas\Estoque\NotaEC->Valor Substituicao ICMS]
      [COD_INF          ]=""
      [VL_PIS           ]=0
      [VL_COFINS        ]=0
      Switch
        Case SYS_CODIGO_CLIENTE="0000": [TP_LIGACAO      ]="1"
                                        [COD_GRUPO_TENSAO]="01"
        OtherWise                     : [TP_LIGACAO      ]="1"  
                                        [COD_GRUPO_TENSAO]="01"
      EndSwitch
      UnLockRecord
      
    OtherWise: ; Notas Fiscais
      Moveto "SPEDC100"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[\Sistemas\Estoque\NotaEC->Codigo]
      Switch
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="NF-E" : MODELO="55"
        OtherWise                                                   : MODELO="01"
      EndSwitch
      [COD_MOD          ]=MODELO
      [COD_SIT          ]="00"
      [SER              ]=[\Sistemas\Estoque\NotaEC->Serie do Documento]
      [NUM_DOC          ]=[\Sistemas\Estoque\NotaEC->Numero do Documento ]
      If [COD_MOD]="55"
         Then [CHV_NFE          ]=[\Sistemas\Estoque\NotaEC->Chave_Acesso_NFe    ]
         Else [CHV_NFE          ]=""
      EndIf
      [DT_DOC           ]=[\Sistemas\Estoque\NotaEC->Data de Emissao     ] 
      [DT_E_S           ]=[\Sistemas\Estoque\NotaEC->Data de Entrada     ]
      [VL_DOC           ]=[\Sistemas\Estoque\NotaEC->Valor Nota Fiscal   ]
      Switch
        Case [\Sistemas\Estoque\NotaEC->Tipo de Pagamento]="V": [IND_PGTO]="0"
        Case [\Sistemas\Estoque\NotaEC->Tipo de Pagamento]="P": [IND_PGTO]="1"
        OtherWise:                                    
          If COD_VER>="006"
             Then [IND_PGTO]="2"
             Else [IND_PGTO]="9"
          EndIf
      EndSwitch
      [VL_DESC          ]=[\Sistemas\Estoque\NotaEC->Valor Desconto      ]
      [VL_ABAT_NT       ]=0
      [VL_MERC          ]=[\Sistemas\Estoque\NotaEC->Valor Mercadoria    ]+
                          [\Sistemas\Estoque\NotaEC->Valor Servico       ]

      Switch 
        Case Year([\Sistemas\Estoque\NotaEC->Data de Entrada])<2012: 
          Switch
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="0": [IND_FRT]="9"
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="1": [IND_FRT]="1"
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="2": [IND_FRT]="2"
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="3": [IND_FRT]="0"
            OtherWise                                    : [IND_FRT]="9"
          EndSwitch
        OtherWise:
          Switch
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="0": [IND_FRT]="9"
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="1": [IND_FRT]="0"
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="2": [IND_FRT]="1"
            Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="3": [IND_FRT]="2"
            OtherWise                                    : [IND_FRT]="9"
          EndSwitch
      EndSwitch

      If [\Sistemas\Estoque\NotaEC->Frete Incluso na Nota]="+"
         Then [VL_FRT   ]=[\Sistemas\Estoque\NotaEC->Valor do Frete]
         Else [VL_FRT   ]=0
      Endif   
      [VL_SEG           ]=[\Sistemas\Estoque\NotaEC->Valor do Seguro        ]
      [VL_OUT_DA        ]=[\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]
      [VL_BC_ICMS       ]=[\Sistemas\Estoque\NotaEC->Valor BCICMS]
      [VL_ICMS          ]=[\Sistemas\Estoque\NotaEC->Valor ICMS]
      [VL_BC_ICMS_ST    ]=[\Sistemas\Estoque\NotaEC->Valor BCSubstituicao ICMS]
      [VL_ICMS_ST       ]=[\Sistemas\Estoque\NotaEC->Valor Substituicao ICMS]
      [VL_IPI           ]=[\Sistemas\Estoque\NotaEC->Valor IPI]
      [VL_PIS           ]=0
      [VL_COFINS        ]=0
      [VL_PIS_ST        ]=0
      [VL_COFINS_ST     ]=0
      UnLockRecord

  EndSwitch 

  vl_doc_bcicms=0 
  vl_doc_icms  =0 

  TXDESCTO_TOTAL  =([\Sistemas\Estoque\NotaEC->Valor Desconto]/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100

  VRACRESC_TOTAL  =[\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]+
                   [\Sistemas\Estoque\NotaEC->Valor do Seguro          ]+
                   [\Sistemas\Estoque\NotaEC->Valor do Frete           ]
  TXACRESC_TOTAL=(VRACRESC_TOTAL/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100
          
  Moveto "\\Sistemas\\Estoque\\NotaEI"
  Moveto [Numero do Lancamento]
  Locate [\Sistemas\Estoque\NotaEC->Numero do Lancamento]
  If RetVal
     Then 

          Seq=0
          While [Numero do Lancamento]=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]
     
            ;--- Detalhar Item -------------------------------------------------
            Switch
              Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CEM": ; Nota Energia


                CFOP           =[\Sistemas\Estoque\NotaEI->CFO                     ]
                VL_ITEM        =[\Sistemas\Estoque\NotaEI->Preco Total             ]
                VL_DESC        =NDecimal((VL_ITEM*TXDESCTO_TOTAL)/100,2)

                CST_ICMS       =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
                ALIQ_ICMS      =[\Sistemas\Estoque\NotaEI->Aliquota de ICMS        ]
                ALIQ_RD_ICMS   =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]
                ALIQ_ST        =[\Sistemas\Estoque\NotaEC->Aliquota de ICMS        ]
                If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
                If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
                If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
                VL_BC_ICMS     =[\Sistemas\Estoque\NotaEI->ICMS_BC                 ]
                VL_ICMS        =[\Sistemas\Estoque\NotaEI->Valor do ICMS           ]
                If Search("60",CST_ICMS)>0
                   Then ALIQ_ICMS =0
                        VL_BC_ICMS=0
                        VL_ICMS   =0
                EndIf    

                VL_BC_ICMS_ST  =[\Sistemas\Estoque\NotaEI->ICMS_ST_BC              ]
                VL_ICMS_ST     =[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]
                VL_RED_BC      =0

                If ALIQ_ICMS>0 
                   Then VL_RED_BC =NDecimal(((VL_ITEM-VL_DESC)*ALIQ_RD_ICMS)/100,2)
                EndIf

                CST_IPI        =[\Sistemas\Estoque\NotaEI->IPI_CST                 ]
                VL_BC_IPI      =[\Sistemas\Estoque\NotaEI->IPI_BC                  ]
                VL_IPI         =[\Sistemas\Estoque\NotaEI->Valor do IPI            ]

                VL_ICMS_ST     =[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]

                PORC_IT_MERC   =([\Sistemas\Estoque\NotaEI->Preco Total]/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100 
                VR_ACRESC      =NDecimal((VRACRESC_TOTAL*PORC_IT_MERC)/100,2)

                VL_OPR=(VL_ITEM-VL_DESC)+
                       (VL_IPI+VL_ICMS_ST)+
                       VR_ACRESC

              OtherWise: ; Notas Fiscais
                Grava_NaturezaOperacao([\Sistemas\Estoque\NotaEC->Tipo de Operacao],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])
                Grava_Itens([\Sistemas\Estoque\NotaEI->Codigo do Item],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])
                Grava_Unidades([\Sistemas\Estoque\NotaEI->Unidade Entrada],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])
                Seq=Seq+1 

              ;--- C lculo p/ escritura‡Æo -------------------------------------
                CFOP           =[\Sistemas\Estoque\NotaEI->CFO                     ]
                VL_ITEM        =[\Sistemas\Estoque\NotaEI->Preco Total             ]
                VL_DESC        =NDecimal((VL_ITEM*TXDESCTO_TOTAL)/100,2)

                CST_ICMS       =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
                ALIQ_ICMS      =[\Sistemas\Estoque\NotaEI->Aliquota de ICMS        ]
                If [\Sistemas\Estoque\NotaEC->ICMS sobre Total NF]="1" 
                   Then ALIQ_ICMS=[\Sistemas\Estoque\NotaEC->Aliquota de ICMS      ]
                EndIf
                ALIQ_RD_ICMS   =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]
                ALIQ_ST        =[\Sistemas\Estoque\NotaEC->Aliquota de ICMS        ]
                If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
                If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
                If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
                VL_BC_ICMS     =[\Sistemas\Estoque\NotaEI->ICMS_BC                 ]
                VL_ICMS        =[\Sistemas\Estoque\NotaEI->Valor do ICMS           ]
                If Search("60",CST_ICMS)>0
                   Then ALIQ_ICMS =0
                        VL_BC_ICMS=0
                        VL_ICMS   =0
                EndIf    

                VL_BC_ICMS_ST  =[\Sistemas\Estoque\NotaEI->ICMS_ST_BC              ]
                VL_ICMS_ST     =[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]
                VL_RED_BC      =0

                CST_IPI        =[\Sistemas\Estoque\NotaEI->IPI_CST                 ]
                COD_ENQ        =""
                ALIQ_IPI       =[\Sistemas\Estoque\NotaEI->Aliquota de IPI         ]
                ALIQ_RD_IPI    =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCIPI ]
                If IsBlank(ALIQ_IPI)     Or ALIQ_IPI<=0     Then ALIQ_IPI=0     EndIf
                If IsBlank(ALIQ_RD_IPI)  Or ALIQ_RD_IPI<=0  Then ALIQ_RD_IPI=0  EndIf
                VL_BC_IPI      =[\Sistemas\Estoque\NotaEI->IPI_BC                  ]
                VL_IPI         =[\Sistemas\Estoque\NotaEI->Valor do IPI            ]

                CST_PIS        =[\Sistemas\Estoque\NotaEI->PIS_CST                 ]
                VL_BC_PIS      =[\Sistemas\Estoque\NotaEI->PIS_BC                  ]
                ALIQ_PIS       =[\Sistemas\Estoque\NotaEI->PIS_Aliquota            ]
                QUANT_BC_PIS   =0
                ALIQ_PIS2      =0
                VL_PIS         =[\Sistemas\Estoque\NotaEI->PIS_Valor               ]

                CST_COFINS     =[\Sistemas\Estoque\NotaEI->COFINS_CST              ]
                VL_BC_COFINS   =[\Sistemas\Estoque\NotaEI->COFINS_BC               ]
                ALIQ_COFINS    =[\Sistemas\Estoque\NotaEI->COFINS_Aliquota         ]
                QUANT_BC_COFINS=0
                ALIQ_COFINS2   =0
                VL_COFINS      =[\Sistemas\Estoque\NotaEI->COFINS_Valor            ]

                VL_OPR         =0

                PORC_IT_MERC   =([\Sistemas\Estoque\NotaEI->Preco Total]/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100 
                VR_ACRESC      =NDecimal((VRACRESC_TOTAL*PORC_IT_MERC)/100,2)

                If ALIQ_ICMS>0 
                   Then VL_RED_BC =NDecimal(((VL_ITEM-VL_DESC)*ALIQ_RD_ICMS)/100,2)
                EndIf

                VL_OPR=(VL_ITEM-VL_DESC)+
                       (VL_IPI+VL_ICMS_ST)+
                       VR_ACRESC

              ;-----------------------------------------------------------------

                Moveto "SPEDC170"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [NUM_ITEM              ]=Seq  ;;;[\Sistemas\Estoque\NotaEI->Sequencia do Lancamento]
                [COD_ITEM              ]=[\Sistemas\Estoque\NotaEI->Codigo do Item]
                [DESCR_COMPL           ]=""
                [QTD                   ]=[\Sistemas\Estoque\NotaEI->Quantidade]
                [UNID                  ]=[\Sistemas\Estoque\NotaEI->Unidade Entrada]
                [VL_ITEM               ]=VL_ITEM
                [VL_DESC               ]=VL_DESC
                If [\Sistemas\Estoque\NotaEC->Tipo de Operacao]="A" Or
                   IsBlank([\Sistemas\Estoque\NotaEI->Codigo do Item]) Or
                   [\Sistemas\Estoque\NotaEI->Tipo do Item]="C" Or
                   [\Sistemas\Estoque\NotaEI->Tipo do Item]="D" Or
                   [\Sistemas\Estoque\NotaEI->Tipo do Item]="G" Or
                   [\Sistemas\Estoque\NotaEI->Tipo do Item]="H" Or
                   [\Sistemas\Estoque\NotaEI->Tipo do Item]="I"
                   Then [IND_MOV       ]="1"
                   Else [IND_MOV       ]="0"
                EndIf
                [CST_ICMS              ]=CST_ICMS
                [CFOP                  ]=CFOP
                [COD_NAT               ]=[\Sistemas\Estoque\NotaEC->Tipo de Operacao]
                [VL_BC_ICMS            ]=VL_BC_ICMS
                [ALIQ_ICMS             ]=ALIQ_ICMS
                [VL_ICMS               ]=VL_ICMS

                [VL_BC_ICMS_ST         ]=VL_BC_ICMS_ST
                [ALIQ_ST               ]=ALIQ_ST
                [VL_ICMS_ST            ]=VL_ICMS_ST

                Switch
                  Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
                  OtherWise                      :[IND_APUR]="0"
                EndSwitch
                [CST_IPI               ]=CST_IPI
                [COD_ENQ               ]=COD_ENQ
                [VL_BC_IPI             ]=VL_BC_IPI
                [ALIQ_IPI              ]=ALIQ_IPI
                [VL_IPI                ]=VL_IPI

                [CST_PIS               ]=CST_PIS
                [VL_BC_PIS             ]=VL_BC_PIS
                [ALIQ_PIS              ]=ALIQ_PIS
                [QUANT_BC_PIS          ]=QUANT_BC_PIS
                [ALIQ_PIS2             ]=ALIQ_PIS2
                [VL_PIS                ]=VL_PIS

                [CST_COFINS            ]=CST_COFINS
                [VL_BC_COFINS          ]=VL_BC_COFINS
                [ALIQ_COFINS           ]=ALIQ_COFINS
                [QUANT_BC_COFINS       ]=QUANT_BC_COFINS
                [ALIQ_COFINS2          ]=ALIQ_COFINS2
                [VL_COFINS             ]=VL_COFINS

                Switch
                  Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
                  OtherWise                     : [COD_CTA         ]="?"  
                EndSwitch
                UnLockRecord
                
            EndSwitch

            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Switch
              Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CEM": ; Nota Energia
                Moveto "SPEDC590"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR       ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
                [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
                [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
                [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
                [COD_OBS      ]=""        
                UnLockRecord

              OtherWise: ; Notas Fiscais
                Moveto "SPEDC190"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
                [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
                [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
                [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
                [VL_IPI       ]=[VL_IPI       ]+VL_IPI
                [COD_OBS      ]=""        
                UnLockRecord

            EndSwitch

            ;--- Analitico CFOP,CST_IPI ----------------------------------------
            If Search("IND",ATIVIDADE)>0
               Then 
                    PORC_IT_NF     =([\Sistemas\Estoque\NotaEI->Preco Total]/[\Sistemas\Estoque\NotaEC->Valor Nota Fiscal])*100 
                    VL_CONT_IPI    =NDecimal(([\Sistemas\Estoque\NotaEC->Valor Nota Fiscal]*PORC_IT_NF)/100,2)
                    
                    Moveto "SPEDE510"
                    Moveto [CFOP]
                    Locate CFOP,CST_IPI
                    If Not RetVAl
                       Then End
                            Down
                            [CFOP         ]=CFOP
                            [CST_IPI      ]=CST_IPI 
                    EndIf
                    [VL_CONT_IPI  ]=[VL_CONT_IPI  ]+VL_CONT_IPI        
                    [VL_BC_IPI    ]=[VL_BC_IPI    ]+VL_BC_IPI 
                    [VL_IPI       ]=[VL_IPI       ]+VL_IPI 
                    UnLockRecord
            EndIf

            vl_doc_bcicms=vl_doc_bcicms+vl_bc_icms 
            vl_doc_icms  =vl_doc_icms  +vl_icms 

            Moveto "\\Sistemas\\Estoque\\NotaEI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
          
          Moveto "SPEDC100"
          Moveto [Lancamento]
          Locate NLanc
          If RetVal
             Then
                  [VL_BC_ICMS       ]=vl_doc_bcicms
                  [VL_ICMS          ]=vl_doc_icms
                  UnLockRecord
          EndIf 

  EndIf
  
  If [\Sistemas\Estoque\NotaEC->Tipo de Pagamento]="P" And MODELO="01"
     Then     
          Seq=0
          Moveto "\\Sistemas\\Estoque\\NotaECP"
          Moveto [Numero do Lancamento]
          Locate [\Sistemas\Estoque\NotaEC->Numero do Lancamento]
          If RetVal
             Then While [Numero do Lancamento]=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]
                    seq=seq+1

                    Moveto "SPEDC141"
                    End
                    Down
                    [Lancamento       ]=NLanc
                    [Sequencia        ]=Seq
                    [NUM_PARC         ]=Seq
                    [DT_VCTO          ]=[\Sistemas\Estoque\NotaECP->Data de Vencimento]
                    [VL_PARC          ]=[\Sistemas\Estoque\NotaECP->Valor do Documento]
                    UnLockRecord
             
                    Moveto "\\Sistemas\\Estoque\\NotaECP" 
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
          
          If Seq>0
             Then Moveto "SPEDC140"
                  End
                  Down
                  [Lancamento       ]=NLanc
                  [IND_EMIT         ]="1"
                  [IND_TIT          ]="00"
                  [DESC_TIT         ]=""
                  [NUM_TIT          ]=[\Sistemas\Estoque\NotaEC->Numero do Documento]
                  [QTD_PARC         ]=Seq
                  [VL_TIT           ]=[\Sistemas\Estoque\NotaEC->Valor Nota Fiscal  ]
                  UnLockRecord
          EndIf
          
  EndIf   

  Moveto "\\Sistemas\\Estoque\\NotaEC"
EndScan
Do_It!
ClearAll



;==== Entradas Faturamento/Notas ===============================================

NLanc=200000

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Unidades"
View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPED0400"
View "SPED0450"
View "SPEDC100"
View "SPEDC110"
View "SPEDC113"
View "SPEDC114"
View "SPEDC140"
View "SPEDC141"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "SPEDE510"
View "\\Sistemas\\Vendas\\Estados"
View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Vendas\\NotaR"
View "\\Sistemas\\Vendas\\NotaI"
View "\\Sistemas\\Vendas\\NotaV"
Coedit "\\Sistemas\\Vendas\\NotaC"

NR=NRecords("\\Sistemas\\Vendas\\NotaC")

Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 2/6",45," ")+BARRA_STRING)

  If [\Sistemas\Vendas\NotaC->Tipo Movimento Estoque]<>"E" ; Entrada
     Then Loop
  EndIf   

  If SubStr([\Sistemas\Vendas\NotaC->Codigo do Documento],1,2)<>"NF" ; Notas Fiscais
     Then Loop
  EndIf   

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

  NLanc=NLanc+1  

  Moveto "SPEDC100"
  End 
  Down 
  [Lancamento       ]=NLanc
  [IND_OPER         ]="0"
  [IND_EMIT         ]="0"
  Switch
    Case SubStr([\Sistemas\Vendas\NotaC->Codigo do Documento],1,3)="NFE" : MODELO="55"
    OtherWise                                                            : MODELO="01"
  EndSwitch
  [COD_MOD          ]=MODELO
  Switch
    Case [\Sistemas\Vendas\NotaC->Situacao]="C" And 
         Search("INUTILIZ",[\Sistemas\Vendas\NotaC->Descricao da Destinacao])>0:
         [COD_SIT          ]="05"
    Case [\Sistemas\Vendas\NotaC->Situacao]="C":
         [COD_SIT          ]="02"
    Case Search("COMPLEMENT",[\Sistemas\Vendas\NotaC->Descricao da Destinacao])>0:
         [COD_SIT          ]="06"
    OtherWise:
         [COD_SIT          ]="00"
  EndSwitch
  [SER              ]=[\Sistemas\Vendas\NotaC->Serie do Documento  ]
  If [COD_MOD]="55"
     Then [NUM_DOC  ]=AlinhM([\Sistemas\Vendas\NotaC->Numero do Documento ],9)
          [CHV_NFE  ]=[\Sistemas\Vendas\NotaC->Chave_Acesso_NFe    ]
     Else [NUM_DOC  ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
          [CHV_NFE  ]=""
  EndIf   
  
  If [COD_SIT]="02" Or
     [COD_SIT]="03" Or
     [COD_SIT]="04" Or
     [COD_SIT]="05"   
     Then UnLockRecord
          Moveto "\\Sistemas\\Vendas\\NotaC"
          Loop
  EndIf        

  Grava_Participantes([\Sistemas\Vendas\NotaC->Codigo],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])

  [COD_PART         ]=[\Sistemas\Vendas\NotaC->Codigo]
  [DT_DOC           ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
  [DT_E_S           ]=[\Sistemas\Vendas\NotaC->Data de Saida       ]
  If [DT_E_S]>VSDGDTFIM
     Then [DT_E_S   ]=BlankDate()
  EndIF   
  
  [VL_DOC           ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal   ]
  Switch
    Case [\Sistemas\Vendas\NotaC->Tipo de Pagamento]="V": [IND_PGTO]="0"
    Case [\Sistemas\Vendas\NotaC->Tipo de Pagamento]="P": [IND_PGTO]="1"
    OtherWise:                                    
      If COD_VER>="006"
         Then [IND_PGTO]="2"
         Else [IND_PGTO]="9"
      EndIf
  EndSwitch
  [VL_DESC          ]=[\Sistemas\Vendas\NotaC->Valor Desconto      ]
  [VL_ABAT_NT       ]=0
  [VL_MERC          ]=[\Sistemas\Vendas\NotaC->Valor Mercadoria    ]+
                      [\Sistemas\Vendas\NotaC->Valor Servico       ]

  Switch 
    Case Year([\Sistemas\Vendas\NotaC->Data de Emissao])<2012: 
      Switch
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="0": [IND_FRT]="9"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="1": [IND_FRT]="1"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="2": [IND_FRT]="2"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="3": [IND_FRT]="0"
        OtherWise                                         : [IND_FRT]="9"
      EndSwitch
    OtherWise:
      Switch
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="0": [IND_FRT]="9"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="1": [IND_FRT]="0"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="2": [IND_FRT]="1"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="3": [IND_FRT]="2"
        OtherWise                                         : [IND_FRT]="9"
      EndSwitch
  EndSwitch

  If [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+"
     Then [VL_FRT   ]=[\Sistemas\Vendas\NotaC->Valor do Frete]
     Else [VL_FRT   ]=0
  Endif   
  [VL_SEG           ]=[\Sistemas\Vendas\NotaC->Valor do Seguro        ]
  [VL_OUT_DA        ]=[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]
  [VL_BC_ICMS       ]=[\Sistemas\Vendas\NotaC->Valor BCICMS]
  [VL_ICMS          ]=[\Sistemas\Vendas\NotaC->Valor ICMS]
  [VL_BC_ICMS_ST    ]=[\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS]
  [VL_ICMS_ST       ]=[\Sistemas\Vendas\NotaC->Valor Substituicao ICMS]
  [VL_IPI           ]=[\Sistemas\Vendas\NotaC->Valor IPI]
  [VL_PIS           ]=[\Sistemas\Vendas\NotaC->Valor PIS]
  [VL_COFINS        ]=[\Sistemas\Vendas\NotaC->Valor COFINS]
  [VL_PIS_ST        ]=0
  [VL_COFINS_ST     ]=0
  UnLockRecord

  Moveto "\\Sistemas\\Vendas\\Destin"
  Moveto [Codigo da Destinacao]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Destinacao] 
  If Not Retval
     Then MSG="Erro dados NATUREZA OPERACAO-[DESTIN] : "+[\Sistemas\Vendas\NotaC->Codigo da Destinacao]+"//"+
              "Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ]
          Mensagem(MSG)
          SEM_RED_BCICMS="1"
     Else SEM_RED_BCICMS=[\Sistemas\Vendas\Destin->Sem Reducao BCICMS]
  EndIf  
          
  Moveto "\\Sistemas\\Vendas\\Estados"
  Moveto [UF]
  Locate [\Sistemas\Vendas\NotaC->UF]
  If RetVal
     Then UF_ALIQUOTA_ICMS_INTERNA =[\Sistemas\Vendas\Estados->Aliquota de ICMS_INTERNA]
     Else UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
  EndIf
          
  VRACRESC_TOTAL  =[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]+
                   [\Sistemas\Vendas\NotaC->Valor do Seguro          ]
  If [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+" 
      Then VRACRESC_TOTAL=VRACRESC_TOTAL+[\Sistemas\Vendas\NotaC->Valor do Frete]
  EndIf


  Moveto "\\Sistemas\\Vendas\\NotaR"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
         [\Sistemas\Vendas\NotaC->Numero do Documento],
         [\Sistemas\Vendas\NotaC->Serie do Documento ]
  If RetVal
     Then Seq=0
          While [\Sistemas\Vendas\NotaR->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaR->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                [\Sistemas\Vendas\NotaR->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
     
            Seq=Seq+1 
            Switch
              Case [Modelo_Documento]="2B" Or
                   [Modelo_Documento]="2C" Or
                   [Modelo_Documento]="2D":
                Moveto "SPEDC114"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [COD_MOD               ]=[\Sistemas\Vendas\NotaR->Modelo_Documento        ]
                [ECF_FAB               ]=[\Sistemas\Vendas\NotaR->Numero_Serie_ECF        ]
                [ECF_CX                ]=[\Sistemas\Vendas\NotaR->Numero_ECF              ]
                [NUM_DOC               ]=[\Sistemas\Vendas\NotaR->Numero_Documento        ]
                [DT_DOC                ]=[\Sistemas\Vendas\NotaR->Data_Documento          ]
                UnLockRecord
              OtherWise:
                Grava_Participantes([\Sistemas\Vendas\NotaR->Codigo_Participante],"Nota Entrada/DocRefer: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])

                If Seq=1 And Not IsBlank([\Sistemas\Vendas\NotaC->Observacao na Nota Fiscal])
                   Then Grava_InformacaoComplementar("?","") 
                   
                        Moveto "SPEDC110"
                        End
                        Down
                        [Lancamento            ]=NLanc 
                        [Sequencia             ]=Seq
                        [COD_INF               ]="000001"
                        [TXT_COMPL             ]=Tira_CharEspecial([\Sistemas\Vendas\NotaC->Observacao na Nota Fiscal])
                        UnLockRecord
                EndIf   

                Moveto "SPEDC113"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [IND_OPER              ]="0"
                [IND_EMIT              ]="0"
                [COD_PART              ]=[\Sistemas\Vendas\NotaR->Codigo_Participante     ]
                [COD_MOD               ]=[\Sistemas\Vendas\NotaR->Modelo_Documento        ]
                [DT_DOC                ]=[\Sistemas\Vendas\NotaR->Data_Documento          ]
                [SER                   ]=[\Sistemas\Vendas\NotaR->Serie_Documento         ]
                [SUB                   ]=[\Sistemas\Vendas\NotaR->SubSerie_Documento      ]
                [NUM_DOC               ]=[\Sistemas\Vendas\NotaR->Numero_Documento        ]
                UnLockRecord
            EndSwitch

            Moveto "\\Sistemas\\Vendas\\NotaR" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
         [\Sistemas\Vendas\NotaC->Numero do Documento],
         [\Sistemas\Vendas\NotaC->Serie do Documento ]
  If RetVal
     Then Seq=0
          While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
     

            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =[\Sistemas\Vendas\NotaI->Valor Desconto Total    ]

            CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
            ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
            ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
            VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
            VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
            MVA_ST         =[\Sistemas\Vendas\NotaI->MVA                     ]
            VL_RED_BC      =0

            CST_IPI        =[\Sistemas\Vendas\NotaI->IPI_CST                 ]
            COD_ENQ        =""
            ALIQ_IPI       =[\Sistemas\Vendas\NotaI->Aliquota de IPI         ]
            ALIQ_RD_IPI    =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCIPI ]
            If IsBlank(ALIQ_IPI)     Or ALIQ_IPI<=0     Then ALIQ_IPI=0     EndIf
            If IsBlank(ALIQ_RD_IPI)  Or ALIQ_RD_IPI<=0  Then ALIQ_RD_IPI=0  EndIf
            VL_BC_IPI      =[\Sistemas\Vendas\NotaI->IPI_BC                  ]
            VL_IPI         =[\Sistemas\Vendas\NotaI->Valor do IPI            ]

            CST_PIS        =[\Sistemas\Vendas\NotaI->PIS_CST                 ]
            VL_BC_PIS      =[\Sistemas\Vendas\NotaI->PIS_BC                  ]
            ALIQ_PIS       =[\Sistemas\Vendas\NotaI->PIS_Aliquota            ]
            QUANT_BC_PIS   =0
            ALIQ_PIS2      =0
            VL_PIS         =[\Sistemas\Vendas\NotaI->PIS_Valor               ]

            CST_COFINS     =[\Sistemas\Vendas\NotaI->COFINS_CST              ]
            VL_BC_COFINS   =[\Sistemas\Vendas\NotaI->COFINS_BC               ]
            ALIQ_COFINS    =[\Sistemas\Vendas\NotaI->COFINS_Aliquota         ]
            QUANT_BC_COFINS=0
            ALIQ_COFINS2   =0
            VL_COFINS      =[\Sistemas\Vendas\NotaI->COFINS_Valor            ]

            VL_OPR         =0

            PORC_IT_MERC   =([\Sistemas\Vendas\NotaI->Preco Total]/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100 
            VR_ACRESC      =[\Sistemas\Vendas\NotaI->Valor Frete Total  ]+
                            [\Sistemas\Vendas\NotaI->Valor Seguro Total ]+
                            [\Sistemas\Vendas\NotaI->Valor OutDesp Total]

            If ALIQ_ICMS>0 
               Then If SEM_RED_BCICMS<>"3"
                       Then VL_BC_ICMS2=VL_ITEM
                            VL_BC_ICMS2=VL_BC_ICMS2-VL_DESC
                       Else VL_BC_ICMS2=VL_ITEM
                    EndIf
                    VL_RED_BC =NDecimal((VL_BC_ICMS2*ALIQ_RD_ICMS)/100,2)
            EndIf

            VL_OPR=(VL_ITEM-VL_DESC)+
                   (VL_IPI+VL_ICMS_ST)+
                   VR_ACRESC
            ;-----------------------------------------------------------------

            If MODELO<>"55"
               Then
                    ;--- Detalhar Item -------------------------------------------------
                    Grava_NaturezaOperacao([\Sistemas\Vendas\NotaC->Codigo da Destinacao],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Seq=Seq+1 
                     
                    Moveto "SPEDC170"
                    End
                    Down
                    [Lancamento            ]=NLanc 
                    [Sequencia             ]=Seq
                    [NUM_ITEM              ]=Seq   ;;[\Sistemas\Vendas\NotaI->Item do Documento]
                    [COD_ITEM              ]=[\Sistemas\Vendas\NotaI->Codigo do Item]
                    [DESCR_COMPL           ]=""
                    [QTD                   ]=[\Sistemas\Vendas\NotaI->Quantidade]
                    [UNID                  ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal]
                    [VL_ITEM               ]=VL_ITEM
                    [VL_DESC               ]=VL_DESC
                    If [\Sistemas\Vendas\NotaC->Atualiza Estoque]="S" And
                       Not IsBlank([\Sistemas\Vendas\NotaI->Codigo do Item]) And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"C" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"D" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"G" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"H" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"I"
                       Then [IND_MOV       ]="0"
                       Else [IND_MOV       ]="1"
                    EndIf
                    [CST_ICMS              ]=CST_ICMS
                    [CFOP                  ]=CFOP
                    [COD_NAT               ]=[\Sistemas\Vendas\NotaC->Codigo da Destinacao]
                    [VL_BC_ICMS            ]=VL_BC_ICMS
                    [ALIQ_ICMS             ]=ALIQ_ICMS
                    [VL_ICMS               ]=VL_ICMS
                    [VL_BC_ICMS_ST         ]=VL_BC_ICMS_ST
                    [ALIQ_ST               ]=ALIQ_ST
                    [VL_ICMS_ST            ]=VL_ICMS_ST
                    Switch
                      Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
                      OtherWise                      :[IND_APUR]="0"
                    EndSwitch
                    [CST_IPI               ]=CST_IPI
                    [COD_ENQ               ]=COD_ENQ
                    [VL_BC_IPI             ]=VL_BC_IPI
                    [ALIQ_IPI              ]=ALIQ_IPI
                    [VL_IPI                ]=VL_IPI
    
                    [CST_PIS               ]=CST_PIS
                    [VL_BC_PIS             ]=VL_BC_PIS
                    [ALIQ_PIS              ]=ALIQ_PIS
                    [QUANT_BC_PIS          ]=QUANT_BC_PIS
                    [ALIQ_PIS2             ]=ALIQ_PIS2
                    [VL_PIS                ]=VL_PIS
    
                    [CST_COFINS            ]=CST_COFINS
                    [VL_BC_COFINS          ]=VL_BC_COFINS
                    [ALIQ_COFINS           ]=ALIQ_COFINS
                    [QUANT_BC_COFINS       ]=QUANT_BC_COFINS
                    [ALIQ_COFINS2          ]=ALIQ_COFINS2
                    [VL_COFINS             ]=VL_COFINS

                    Switch
                      Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
                      OtherWise                     : [COD_CTA         ]="?"  
                    EndSwitch
                    UnLockRecord
            EndIf


            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Moveto "SPEDC190"
            Moveto [Lancamento]
            Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
            If Not RetVAl
               Then End
                    Down
                    [Lancamento   ]=NLANC
                    [CST_ICMS     ]=CST_ICMS
                    [CFOP         ]=CFOP
                    [ALIQ_ICMS    ]=ALIQ_ICMS
            EndIf
            [VL_OPR       ]=[VL_OPR       ]+VL_OPR
            [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
            [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
            [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
            [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
            [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
            [VL_IPI       ]=[VL_IPI       ]+VL_IPI
            [COD_OBS      ]=""        
            UnLockRecord

            ;--- Analitico CFOP,CST_IPI ----------------------------------------
            If Search("IND",ATIVIDADE)>0
               Then 
                    PORC_IT_NF     =([\Sistemas\Vendas\NotaI->Preco Total]/[\Sistemas\Vendas\NotaC->Valor Nota Fiscal])*100 
                    VL_CONT_IPI    =NDecimal(([\Sistemas\Vendas\NotaC->Valor Nota Fiscal]*PORC_IT_NF)/100,2)
                    
                    Moveto "SPEDE510"
                    Moveto [CFOP]
                    Locate CFOP,CST_IPI
                    If Not RetVAl
                       Then End
                            Down
                            [CFOP         ]=CFOP
                            [CST_IPI      ]=CST_IPI 
                    EndIf
                    [VL_CONT_IPI  ]=[VL_CONT_IPI  ]+VL_CONT_IPI        
                    [VL_BC_IPI    ]=[VL_BC_IPI    ]+VL_BC_IPI 
                    [VL_IPI       ]=[VL_IPI       ]+VL_IPI 
                    UnLockRecord
            EndIf

            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
  
  If [\Sistemas\Vendas\NotaC->Tipo de Pagamento]="P" And MODELO="01"
     Then     
          Seq=0
          Moveto "\\Sistemas\\Vendas\\NotaV"
          Moveto [Codigo da Empresa]
          Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
                 [\Sistemas\Vendas\NotaC->Numero do Documento],
                 [\Sistemas\Vendas\NotaC->Serie do Documento ]
          If RetVal
             Then Seq=0
                  While [\Sistemas\Vendas\Notav->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                        [\Sistemas\Vendas\Notav->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                        [\Sistemas\Vendas\Notav->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                    seq=seq+1

                    Moveto "SPEDC141"
                    End
                    Down
                    [Lancamento       ]=NLanc
                    [Sequencia        ]=Seq
                    [NUM_PARC         ]=Seq
                    [DT_VCTO          ]=[\Sistemas\Vendas\NotaV->Data ]
                    [VL_PARC          ]=[\Sistemas\Vendas\NotaV->Valor]
                    UnLockRecord
             
                    Moveto "\\Sistemas\\Vendas\\NotaV" 
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
          
          If Seq>0
             Then Moveto "SPEDC140"
                  End
                  Down
                  [Lancamento       ]=NLanc
                  [IND_EMIT         ]="1"
                  [IND_TIT          ]="00"
                  [DESC_TIT         ]=""
                  [NUM_TIT          ]=[\Sistemas\Vendas\NotaC->Numero do Documento]
                  [QTD_PARC         ]=Seq
                  [VL_TIT           ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal  ]
                  UnLockRecord
          EndIf
          
  EndIf   

  Moveto "\\Sistemas\\Vendas\\NotaC"
EndScan
Do_It!
ClearAll


;==== Saidas Faturamento/Notas =================================================

NLanc=300000

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Unidades"
View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPED0400"
View "SPED0450"
View "SPEDC100"
View "SPEDC110"
View "SPEDC113"
View "SPEDC114"
View "SPEDC140"
View "SPEDC141"
View "SPEDC160"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "SPEDE510"
View "\\Sistemas\\Vendas\\Estados"
View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Vendas\\NotaR"
View "\\Sistemas\\Vendas\\NotaI"
View "\\Sistemas\\Vendas\\NotaV"
Coedit "\\Sistemas\\Vendas\\NotaC"

NR=NRecords("\\Sistemas\\Vendas\\NotaC")

Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 3/6",45," ")+BARRA_STRING)

  If [\Sistemas\Vendas\NotaC->Tipo Movimento Estoque]<>"S" ; Saida  
     Then Loop
  EndIf   

  If SubStr([\Sistemas\Vendas\NotaC->Codigo do Documento],1,2)<>"NF" ; Notas Fiscais
     Then Loop
  EndIf   
  If [\Sistemas\Vendas\NotaC->Serie do Documento ]="D" Or
     [\Sistemas\Vendas\NotaC->Serie do Documento ]="D1"
     Then Loop
  EndIf

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

  NLanc=NLanc+1  

  Moveto "SPEDC100"
  End 
  Down 
  [Lancamento       ]=NLanc
  [IND_OPER         ]="1"
  [IND_EMIT         ]="0"
  Switch
    Case SubStr([\Sistemas\Vendas\NotaC->Codigo do Documento],1,3)="NFE" : MODELO="55"
    OtherWise                                                            : MODELO="01"
  EndSwitch
  [COD_MOD          ]=MODELO
  Switch
    Case [\Sistemas\Vendas\NotaC->Situacao]="C" And 
         Search("INUTILIZ",[\Sistemas\Vendas\NotaC->Descricao da Destinacao])>0:
         [COD_SIT          ]="05"
    Case [\Sistemas\Vendas\NotaC->Situacao]="C":
         [COD_SIT          ]="02"
    Case Search("COMPLEMENT",[\Sistemas\Vendas\NotaC->Descricao da Destinacao])>0:
         [COD_SIT          ]="06"
    OtherWise:
         [COD_SIT          ]="00"
  EndSwitch
  [SER              ]=[\Sistemas\Vendas\NotaC->Serie do Documento]
  If [COD_MOD]="55"
     Then [NUM_DOC  ]=AlinhM([\Sistemas\Vendas\NotaC->Numero do Documento ],9)
          [CHV_NFE  ]=[\Sistemas\Vendas\NotaC->Chave_Acesso_NFe    ]
     Else [NUM_DOC  ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
          [CHV_NFE  ]=""
  EndIf   

  If [COD_SIT]="02" Or
     [COD_SIT]="03" Or
     [COD_SIT]="04" Or
     [COD_SIT]="05"   
     Then UnLockRecord
          Moveto "\\Sistemas\\Vendas\\NotaC"
          Loop
  EndIf        

  Grava_Participantes([\Sistemas\Vendas\NotaC->Codigo],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])

  [COD_PART         ]=[\Sistemas\Vendas\NotaC->Codigo]
  [DT_DOC           ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
  [DT_E_S           ]=[\Sistemas\Vendas\NotaC->Data de Saida       ]
  If [DT_E_S]>VSDGDTFIM
     Then [DT_E_S   ]=BlankDate()
  EndIF   

  [VL_DOC           ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal   ]
  Switch
    Case [\Sistemas\Vendas\NotaC->Tipo de Pagamento]="V": [IND_PGTO]="0"
    Case [\Sistemas\Vendas\NotaC->Tipo de Pagamento]="P": [IND_PGTO]="1"
    OtherWise:                                    
      If COD_VER>="006"
         Then [IND_PGTO]="2"
         Else [IND_PGTO]="9"
      EndIf
  EndSwitch
  [VL_DESC          ]=[\Sistemas\Vendas\NotaC->Valor Desconto      ]
  [VL_ABAT_NT       ]=0
  [VL_MERC          ]=[\Sistemas\Vendas\NotaC->Valor Mercadoria    ]+
                      [\Sistemas\Vendas\NotaC->Valor Servico       ]

  Switch 
    Case Year([\Sistemas\Vendas\NotaC->Data de Emissao])<2012: 
      Switch
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="0": [IND_FRT]="9"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="1": [IND_FRT]="1"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="2": [IND_FRT]="2"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="3": [IND_FRT]="0"
        OtherWise                                         : [IND_FRT]="9"
      EndSwitch
    OtherWise:
      Switch
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="0": [IND_FRT]="9"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="1": [IND_FRT]="0"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="2": [IND_FRT]="1"
        Case [\Sistemas\Vendas\NotaC->Frete por Conta]="3": [IND_FRT]="2"
        OtherWise                                         : [IND_FRT]="9"
      EndSwitch
  EndSwitch

  If [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+"
     Then [VL_FRT   ]=[\Sistemas\Vendas\NotaC->Valor do Frete]
     Else [VL_FRT   ]=0
  Endif   
  [VL_SEG           ]=[\Sistemas\Vendas\NotaC->Valor do Seguro        ]
  [VL_OUT_DA        ]=[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]
  [VL_BC_ICMS       ]=[\Sistemas\Vendas\NotaC->Valor BCICMS]
  [VL_ICMS          ]=[\Sistemas\Vendas\NotaC->Valor ICMS]
  [VL_BC_ICMS_ST    ]=[\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS]
  [VL_ICMS_ST       ]=[\Sistemas\Vendas\NotaC->Valor Substituicao ICMS]
  [VL_IPI           ]=[\Sistemas\Vendas\NotaC->Valor IPI]
  [VL_PIS           ]=[\Sistemas\Vendas\NotaC->Valor PIS]
  [VL_COFINS        ]=[\Sistemas\Vendas\NotaC->Valor COFINS]
  [VL_PIS_ST        ]=0
  [VL_COFINS_ST     ]=0
  UnLockRecord

  Moveto "\\Sistemas\\Vendas\\Destin"
  Moveto [Codigo da Destinacao]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Destinacao] 
  If Not Retval
     Then MSG="Erro dados NATUREZA OPERACAO-[DESTIN] : "+[\Sistemas\Vendas\NotaC->Codigo da Destinacao]+"//"+
              "Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ]
          Mensagem(MSG)
          SEM_RED_BCICMS="1"
     Else SEM_RED_BCICMS=[\Sistemas\Vendas\Destin->Sem Reducao BCICMS]
  EndIf  
          
  Moveto "\\Sistemas\\Vendas\\Estados"
  Moveto [UF]
  Locate [\Sistemas\Vendas\NotaC->UF]
  If RetVal
     Then UF_ALIQUOTA_ICMS_INTERNA =[\Sistemas\Vendas\Estados->Aliquota de ICMS_INTERNA]
     Else UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
  EndIf

  TXDESCTO_TOTAL  =([\Sistemas\Vendas\NotaC->Valor Desconto]/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100

  VRACRESC_TOTAL  =[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]+
                   [\Sistemas\Vendas\NotaC->Valor do Seguro          ]
  If [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+" 
      Then VRACRESC_TOTAL=VRACRESC_TOTAL+[\Sistemas\Vendas\NotaC->Valor do Frete]
  EndIf


  Moveto "\\Sistemas\\Vendas\\NotaR"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
         [\Sistemas\Vendas\NotaC->Numero do Documento],
         [\Sistemas\Vendas\NotaC->Serie do Documento ]
  If RetVal
     Then Seq=0
          While [\Sistemas\Vendas\NotaR->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaR->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                [\Sistemas\Vendas\NotaR->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
     
            Seq=Seq+1 
            Switch
              Case [Modelo_Documento]="2B" Or
                   [Modelo_Documento]="2C" Or
                   [Modelo_Documento]="2D":
                Moveto "SPEDC114"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [COD_MOD               ]=[\Sistemas\Vendas\NotaR->Modelo_Documento        ]
                [ECF_FAB               ]=[\Sistemas\Vendas\NotaR->Numero_Serie_ECF        ]
                [ECF_CX                ]=[\Sistemas\Vendas\NotaR->Numero_ECF              ]
                [NUM_DOC               ]=[\Sistemas\Vendas\NotaR->Numero_Documento        ]
                [DT_DOC                ]=[\Sistemas\Vendas\NotaR->Data_Documento          ]
                UnLockRecord
              OtherWise:
                Grava_Participantes([\Sistemas\Vendas\NotaR->Codigo_Participante],"Nota Entrada/DocRefer: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])

                If Seq=1 And Not IsBlank([\Sistemas\Vendas\NotaC->Observacao na Nota Fiscal])
                   Then Grava_InformacaoComplementar("?","") 

                        Moveto "SPEDC110"
                        End
                        Down
                        [Lancamento            ]=NLanc 
                        [Sequencia             ]=Seq
                        [COD_INF               ]="000001"
                        [TXT_COMPL             ]=Tira_CharEspecial([\Sistemas\Vendas\NotaC->Observacao na Nota Fiscal])
                        UnLockRecord
                EndIf   

                Moveto "SPEDC113"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [IND_OPER              ]="1"
                [IND_EMIT              ]="0"
                [COD_PART              ]=[\Sistemas\Vendas\NotaR->Codigo_Participante     ]
                [COD_MOD               ]=[\Sistemas\Vendas\NotaR->Modelo_Documento        ]
                [DT_DOC                ]=[\Sistemas\Vendas\NotaR->Data_Documento          ]
                [SER                   ]=[\Sistemas\Vendas\NotaR->Serie_Documento         ]
                [SUB                   ]=[\Sistemas\Vendas\NotaR->SubSerie_Documento      ]
                [NUM_DOC               ]=[\Sistemas\Vendas\NotaR->Numero_Documento        ]
                UnLockRecord
            EndSwitch

            Moveto "\\Sistemas\\Vendas\\NotaR" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  If Not IsBlank([\Sistemas\Vendas\NotaC->Placa do Veiculo        ]) And MODELO="01"
     Then
          Moveto "SPEDC160"
          End
          Down
          [Lancamento            ]=NLanc 
         ;[COD_PART              ]=[\Sistemas\Vendas\NotaC->                        ]
          [VEIC_ID               ]=Tira_CharNum([\Sistemas\Vendas\NotaC->Placa do Veiculo        ])
          [QTD_VOL               ]=[\Sistemas\Vendas\NotaC->Numero de Volumes       ]
          [PESO_BRT              ]=[\Sistemas\Vendas\NotaC->Peso Bruto              ]
          [PESO_LIQ              ]=[\Sistemas\Vendas\NotaC->Peso Liquido            ]
          [UF_ID                 ]=[\Sistemas\Vendas\NotaC->UF Veiculo              ]
          UnLockRecord
  EndIf

  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
         [\Sistemas\Vendas\NotaC->Numero do Documento],
         [\Sistemas\Vendas\NotaC->Serie do Documento ]
  If RetVal
     Then Seq=0
          While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
     
            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =[\Sistemas\Vendas\NotaI->Valor Desconto Total    ]

            CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
            ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
            ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
            VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
            VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
            MVA_ST         =[\Sistemas\Vendas\NotaI->MVA                     ]
            VL_RED_BC      =0

            CST_IPI        =[\Sistemas\Vendas\NotaI->IPI_CST                 ]
            COD_ENQ        =""
            ALIQ_IPI       =[\Sistemas\Vendas\NotaI->Aliquota de IPI         ]
            ALIQ_RD_IPI    =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCIPI ]
            If IsBlank(ALIQ_IPI)     Or ALIQ_IPI<=0     Then ALIQ_IPI=0     EndIf
            If IsBlank(ALIQ_RD_IPI)  Or ALIQ_RD_IPI<=0  Then ALIQ_RD_IPI=0  EndIf
            VL_BC_IPI      =[\Sistemas\Vendas\NotaI->IPI_BC                  ]
            VL_IPI         =[\Sistemas\Vendas\NotaI->Valor do IPI            ]

            CST_PIS        =[\Sistemas\Vendas\NotaI->PIS_CST                 ]
            VL_BC_PIS      =[\Sistemas\Vendas\NotaI->PIS_BC                  ]
            ALIQ_PIS       =[\Sistemas\Vendas\NotaI->PIS_Aliquota            ]
            QUANT_BC_PIS   =0
            ALIQ_PIS2      =0
            VL_PIS         =[\Sistemas\Vendas\NotaI->PIS_Valor               ]

            CST_COFINS     =[\Sistemas\Vendas\NotaI->COFINS_CST              ]
            VL_BC_COFINS   =[\Sistemas\Vendas\NotaI->COFINS_BC               ]
            ALIQ_COFINS    =[\Sistemas\Vendas\NotaI->COFINS_Aliquota         ]
            QUANT_BC_COFINS=0
            ALIQ_COFINS2   =0
            VL_COFINS      =[\Sistemas\Vendas\NotaI->COFINS_Valor            ]

            VL_OPR         =0

            PORC_IT_MERC   =([\Sistemas\Vendas\NotaI->Preco Total]/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100 
            VR_ACRESC      =[\Sistemas\Vendas\NotaI->Valor Frete Total  ]+
                            [\Sistemas\Vendas\NotaI->Valor Seguro Total ]+
                            [\Sistemas\Vendas\NotaI->Valor OutDesp Total]

            If ALIQ_ICMS>0 
               Then If SEM_RED_BCICMS<>"3"
                       Then VL_BC_ICMS2=VL_ITEM
                            VL_BC_ICMS2=VL_BC_ICMS2-VL_DESC
                       Else VL_BC_ICMS2=VL_ITEM
                    EndIf
                    VL_RED_BC =NDecimal((VL_BC_ICMS2*ALIQ_RD_ICMS)/100,2)
            EndIf

            VL_OPR=(VL_ITEM-VL_DESC)+
                   (VL_IPI+VL_ICMS_ST)+
                   VR_ACRESC
            ;-----------------------------------------------------------------

            If MODELO<>"55"
               Then
                    ;--- Detalhar Item -------------------------------------------------
                    Grava_NaturezaOperacao([\Sistemas\Vendas\NotaC->Codigo da Destinacao],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Seq=Seq+1 
                     
                    Moveto "SPEDC170"
                    End
                    Down
                    [Lancamento            ]=NLanc 
                    [Sequencia             ]=Seq
                    [NUM_ITEM              ]=Seq  ;;[\Sistemas\Vendas\NotaI->Item do Documento]
                    [COD_ITEM              ]=[\Sistemas\Vendas\NotaI->Codigo do Item]
                    [DESCR_COMPL           ]=""
                    [QTD                   ]=[\Sistemas\Vendas\NotaI->Quantidade]
                    [UNID                  ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal]
                    [VL_ITEM               ]=VL_ITEM
                    [VL_DESC               ]=VL_DESC
                    If [\Sistemas\Vendas\NotaC->Atualiza Estoque]="S" And
                       Not IsBlank([\Sistemas\Vendas\NotaI->Codigo do Item]) And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"C" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"D" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"G" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"H" And
                       [\Sistemas\Vendas\NotaI->Tipo do Item]<>"I"
                       Then [IND_MOV       ]="0"
                       Else [IND_MOV       ]="1"
                    EndIf
                    [CST_ICMS              ]=CST_ICMS
                    [CFOP                  ]=CFOP
                    [COD_NAT               ]=[\Sistemas\Vendas\NotaC->Codigo da Destinacao]
                    [VL_BC_ICMS            ]=VL_BC_ICMS
                    [ALIQ_ICMS             ]=ALIQ_ICMS
                    [VL_ICMS               ]=VL_ICMS
                    [VL_BC_ICMS_ST         ]=VL_BC_ICMS_ST
                    [ALIQ_ST               ]=ALIQ_ST
                    [VL_ICMS_ST            ]=VL_ICMS_ST
                    Switch
                      Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
                      OtherWise                      :[IND_APUR]="0"
                    EndSwitch
                    [CST_IPI               ]=CST_IPI
                    [COD_ENQ               ]=COD_ENQ
                    [VL_BC_IPI             ]=VL_BC_IPI
                    [ALIQ_IPI              ]=ALIQ_IPI
                    [VL_IPI                ]=VL_IPI
    
                    [CST_PIS               ]=CST_PIS
                    [VL_BC_PIS             ]=VL_BC_PIS
                    [ALIQ_PIS              ]=ALIQ_PIS
                    [QUANT_BC_PIS          ]=QUANT_BC_PIS
                    [ALIQ_PIS2             ]=ALIQ_PIS2
                    [VL_PIS                ]=VL_PIS
    
                    [CST_COFINS            ]=CST_COFINS
                    [VL_BC_COFINS          ]=VL_BC_COFINS
                    [ALIQ_COFINS           ]=ALIQ_COFINS
                    [QUANT_BC_COFINS       ]=QUANT_BC_COFINS
                    [ALIQ_COFINS2          ]=ALIQ_COFINS2
                    [VL_COFINS             ]=VL_COFINS

                    Switch
                      Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
                      OtherWise                     : [COD_CTA         ]="?"  
                    EndSwitch
                    UnLockRecord
            EndIf
            
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Moveto "SPEDC190"
            Moveto [Lancamento]
            Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
            If Not RetVAl
               Then End
                    Down
                    [Lancamento   ]=NLANC
                    [CST_ICMS     ]=CST_ICMS
                    [CFOP         ]=CFOP
                    [ALIQ_ICMS    ]=ALIQ_ICMS
            EndIf
            [VL_OPR       ]=[VL_OPR      ]+VL_OPR
            [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
            [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
            [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
            [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
            [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
            [VL_IPI       ]=[VL_IPI       ]+VL_IPI
            [COD_OBS      ]=""        
            UnLockRecord

            ;--- Analitico CFOP,CST_IPI ----------------------------------------
            If Search("IND",ATIVIDADE)>0
               Then 
                    PORC_IT_NF     =([\Sistemas\Vendas\NotaI->Preco Total]/[\Sistemas\Vendas\NotaC->Valor Nota Fiscal])*100 
                    VL_CONT_IPI    =NDecimal(([\Sistemas\Vendas\NotaC->Valor Nota Fiscal]*PORC_IT_NF)/100,2)
                    
                    Moveto "SPEDE510"
                    Moveto [CFOP]
                    Locate CFOP,CST_IPI
                    If Not RetVAl
                       Then End
                            Down
                            [CFOP         ]=CFOP
                            [CST_IPI      ]=CST_IPI 
                    EndIf
                    [VL_CONT_IPI  ]=[VL_CONT_IPI  ]+VL_CONT_IPI        
                    [VL_BC_IPI    ]=[VL_BC_IPI    ]+VL_BC_IPI 
                    [VL_IPI       ]=[VL_IPI       ]+VL_IPI 
                    UnLockRecord
            EndIf

            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
  
  If [\Sistemas\Vendas\NotaC->Tipo de Pagamento]="P" And MODELO="01"
     Then     
          Seq=0
          Moveto "\\Sistemas\\Vendas\\NotaV"
          Moveto [Codigo da Empresa]
          Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
                 [\Sistemas\Vendas\NotaC->Numero do Documento],
                 [\Sistemas\Vendas\NotaC->Serie do Documento ]
          If RetVal
             Then Seq=0
                  While [\Sistemas\Vendas\Notav->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                        [\Sistemas\Vendas\Notav->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                        [\Sistemas\Vendas\Notav->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                    seq=seq+1

                    Moveto "SPEDC141"
                    End
                    Down
                    [Lancamento       ]=NLanc
                    [Sequencia        ]=Seq
                    [NUM_PARC         ]=Seq
                    [DT_VCTO          ]=[\Sistemas\Vendas\NotaV->Data ]
                    [VL_PARC          ]=[\Sistemas\Vendas\NotaV->Valor]
                    UnLockRecord
             
                    Moveto "\\Sistemas\\Vendas\\NotaV" 
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
          
          If Seq>0
             Then Moveto "SPEDC140"
                  End
                  Down
                  [Lancamento       ]=NLanc
                  [IND_EMIT         ]="1"
                  [IND_TIT          ]="00"
                  [DESC_TIT         ]=""
                  [NUM_TIT          ]=[\Sistemas\Vendas\NotaC->Numero do Documento]
                  [QTD_PARC         ]=Seq
                  [VL_TIT           ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal  ]
                  UnLockRecord
          EndIf
          
  EndIf   

  Moveto "\\Sistemas\\Vendas\\NotaC"
EndScan
Do_It!
ClearAll


;==== Saidas Faturamento/Notas Consumidor Final ================================

NLanc=400000

View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Unidades"
View "SPED0190"
View "SPED0200"
View "SPEDC300"
View "SPEDC310"
View "SPEDC320"
View "SPEDC321"
View "SPEDC350"
View "SPEDC370"
View "SPEDC390"
View "\\Sistemas\\Vendas\\NotaI"
Coedit "\\Sistemas\\Vendas\\NotaC"

NR=NRecords("\\Sistemas\\Vendas\\NotaC")

Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 4/6",45," ")+BARRA_STRING)

  If [\Sistemas\Vendas\NotaC->Tipo Movimento Estoque]<>"S" ; Saida  
     Then Loop
  EndIf   

  If SubStr([\Sistemas\Vendas\NotaC->Codigo do Documento],1,2)<>"NF" ; Notas Fiscais
     Then Loop
  EndIf   
  If [\Sistemas\Vendas\NotaC->Serie do Documento ]<>"D" And
     [\Sistemas\Vendas\NotaC->Serie do Documento ]<>"D1"
     Then Loop
  EndIf

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

  NLanc=NLanc+1  

  Switch
    Case [\Sistemas\Vendas\NotaC->Situacao]="C":
      If IND_PERFIL="B"
         Then Moveto "SPEDC310"
              End 
              Down 
              [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
              [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
              [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
              [Lancamento        ]=NLanc
              [NUM_DOC           ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
              UnLockRecord
      EndIf
      Moveto "\\Sistemas\\Vendas\\NotaC"
      Loop
      
    OtherWise:
      If IND_PERFIL="A"
         Then Moveto "SPEDC350"
              End 
              Down 
              [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
              [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
              [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
              [Lancamento        ]=NLanc
              [SER               ]=[\Sistemas\Vendas\NotaC->Serie do Documento  ]
              [SUB_SER           ]=""
              [NUM_DOC           ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
              [DT_DOC            ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
              [CNPJ_CPF          ]=Tira_CharNum([\Sistemas\Vendas\NotaC->CGC    ]) 
              [VL_MERC           ]=[\Sistemas\Vendas\NotaC->Valor Mercadoria    ]
              [VL_DOC            ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal   ]
              [VL_DESC           ]=[\Sistemas\Vendas\NotaC->Valor Desconto      ]
              [VL_PIS            ]=0
              [VL_COFINS         ]=0
              Switch
                Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
                OtherWise                     : [COD_CTA         ]="?"  
              EndSwitch
              UnLockRecord
      EndIf
  EndSwitch  

  Moveto "\\Sistemas\\Vendas\\Destin"
  Moveto [Codigo da Destinacao]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Destinacao] 
  If Not Retval
     Then MSG="Erro dados NATUREZA OPERACAO-[DESTIN] : "+[\Sistemas\Vendas\NotaC->Codigo da Destinacao]+"//"+
              "Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ]
          Mensagem(MSG)
          SEM_RED_BCICMS="1"
     Else SEM_RED_BCICMS=[\Sistemas\Vendas\Destin->Sem Reducao BCICMS]
  EndIf  
          
  VRACRESC_TOTAL  =[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]+
                   [\Sistemas\Vendas\NotaC->Valor do Seguro          ]
  If [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+" 
      Then VRACRESC_TOTAL=VRACRESC_TOTAL+[\Sistemas\Vendas\NotaC->Valor do Frete]
  EndIf

  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
         [\Sistemas\Vendas\NotaC->Numero do Documento],
         [\Sistemas\Vendas\NotaC->Serie do Documento ]
  If RetVal
     Then Seq=0
          While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]

            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =[\Sistemas\Vendas\NotaI->Valor Desconto Total    ]

            CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
            ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
            VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
            VL_RED_BC      =0


            CST_PIS        =[\Sistemas\Vendas\NotaI->PIS_CST                 ]
            VL_BC_PIS      =[\Sistemas\Vendas\NotaI->PIS_BC                  ]
            ALIQ_PIS       =[\Sistemas\Vendas\NotaI->PIS_Aliquota            ]
            QUANT_BC_PIS   =0
            ALIQ_PIS2      =0
            VL_PIS         =[\Sistemas\Vendas\NotaI->PIS_Valor               ]

            CST_COFINS     =[\Sistemas\Vendas\NotaI->COFINS_CST              ]
            VL_BC_COFINS   =[\Sistemas\Vendas\NotaI->COFINS_BC               ]
            ALIQ_COFINS    =[\Sistemas\Vendas\NotaI->COFINS_Aliquota         ]
            QUANT_BC_COFINS=0
            ALIQ_COFINS2   =0
            VL_COFINS      =[\Sistemas\Vendas\NotaI->COFINS_Valor            ]

            VL_OPR         =0

            PORC_IT_MERC   =([\Sistemas\Vendas\NotaI->Preco Total]/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100 
            VR_ACRESC      =NDecimal((VRACRESC_TOTAL*PORC_IT_MERC)/100,2)

            If ALIQ_ICMS>0 
               Then If SEM_RED_BCICMS<>"3"
                       Then VL_BC_ICMS2=VL_ITEM
                            VL_BC_ICMS2=VL_BC_ICMS2-VL_DESC
                       Else VL_BC_ICMS2=VL_ITEM
                    EndIf
                    VL_RED_BC =NDecimal((VL_BC_ICMS2*ALIQ_RD_ICMS)/100,2)
            EndIf

            VL_OPR=(VL_ITEM-VL_DESC)+
                   VR_ACRESC
            ;-----------------------------------------------------------------


            Seq=Seq+1 
            Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
            Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
     
            ;--- Detalhar Item -------------------------------------------------
            If IND_PERFIL="A"
               Then  
                    Moveto "SPEDC370"
                    End
                    Down
                    [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
                    [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                    [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
                    [Lancamento        ]=NLanc
                    [Sequencia         ]=Seq
                    [NUM_ITEM          ]=Seq  ;;[\Sistemas\Vendas\NotaI->Item do Documento]
                    [COD_ITEM          ]=[\Sistemas\Vendas\NotaI->Codigo do Item]
                    [QTD               ]=[\Sistemas\Vendas\NotaI->Quantidade]
                    [UNID              ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal]
                    [VL_ITEM           ]=VL_ITEM
                    [VL_DESC           ]=VL_DESC
                    UnLockRecord
        
                    ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS ---------------------
                    Moveto "SPEDC390"
                    Moveto [Codigo da Empresa]
                    Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa   ],
                           [\Sistemas\Vendas\NotaC->Serie do Documento  ], 
                           [\Sistemas\Vendas\NotaC->Data de Emissao     ],
                           NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                    If Not RetVAl
                       Then End
                            Down
                            [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
                            [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento  ] 
                            [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
                            [Lancamento        ]=NLanc
                            [CST_ICMS          ]=CST_ICMS
                            [CFOP              ]=CFOP
                            [ALIQ_ICMS         ]=ALIQ_ICMS
                    EndIf
                    [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                    [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                    [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                    [VL_RED_BC    ]=[VL_RED_BC   ]+VL_RED_BC
                    [COD_OBS      ]=""        
                    UnLockRecord
            EndIf
             
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS Diario ----------------------
            If IND_PERFIL="B"
               Then  Moveto "SPEDC320"
                     Moveto [Codigo da Empresa]
                     Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa   ],
                            [\Sistemas\Vendas\NotaC->Serie do Documento  ], 
                            [\Sistemas\Vendas\NotaC->Data de Emissao     ],
                            CST_ICMS,CFOP,ALIQ_ICMS
                     If Not RetVAl
                        Then End
                             Down
                             [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
                             [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                             [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
                             [CST_ICMS          ]=CST_ICMS
                             [CFOP              ]=CFOP
                             [ALIQ_ICMS         ]=ALIQ_ICMS
                     EndIf
                     [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                     [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                     [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                     [VL_RED_BC    ]=[VL_RED_BC   ]+VL_RED_BC
                     [COD_OBS      ]=""        
                     UnLockRecord
            EndIf 

            ;--- Itens do Resumo Diario dos Documentos (codigo 02) -------------
            If IND_PERFIL="B"
               Then Moveto "SPEDC321"
                    Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa ],
                           [\Sistemas\Vendas\NotaC->Serie do Documento],
                           [\Sistemas\Vendas\NotaC->Data de Emissao   ],
                           [\Sistemas\Vendas\NotaI->Codigo do Item    ]
                    If Not RetVAl
                       Then End
                            Down
                            [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
                            [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                            [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
                            [COD_ITEM          ]=[\Sistemas\Vendas\NotaI->Codigo do Item     ]
                            [UNID              ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal     ]
                    EndIf
                    [QTD          ]=[QTD         ]+[\Sistemas\Vendas\NotaI->Quantidade]
                    [VL_ITEM      ]=[VL_ITEM     ]+VL_ITEM
                    [VL_DESC      ]=[VL_DESC     ]+VL_DESC
                    [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                    [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                    [VL_PIS       ]=[VL_PIS      ]+VL_PIS
                    [VL_COFINS    ]=[VL_COFINS   ]+VL_COFINS
                    UnLockRecord
            EndIf 
            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  If IND_PERFIL="B"
     Then Moveto "SPEDC300"
          Moveto [Codigo da Empresa]
          Moveto [Codigo da Empresa]
          Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa ],
                 [\Sistemas\Vendas\NotaC->Serie do Documento],
                 [\Sistemas\Vendas\NotaC->Data de Emissao   ]
          If Not Retval
             Then End
                  Down
                  [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
                  [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                  [Data de Emissao   ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
                  [COD_MOD           ]="02"
                  [SER               ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                  [SUB               ]=""
                  [NUM_DOC_INI       ]=[\Sistemas\Vendas\NotaC->Numero do Documento]
                  [DT_DOC            ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
                  Switch
                    Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
                    OtherWise                     : [COD_CTA         ]="?"  
                  EndSwitch
          EndIf   
          [NUM_DOC_FIN  ]=[\Sistemas\Vendas\NotaC->Numero do Documento]
          [VL_DOC       ]=[VL_DOC   ]+[\Sistemas\Vendas\NotaC->Valor Nota Fiscal]
          [VL_PIS       ]=[VL_PIS   ]+0
          [VL_COFINS    ]=[VL_COFINS]+0
          UnLockRecord
  EndIf
  Moveto "\\Sistemas\\Vendas\\NotaC"
EndScan
Do_It!
ClearAll


;==== Saidas Faturamento/Cupons Redu‡Æo ========================================

NLanc=500000

View "SPEDC400"
View "SPEDC405"
View "SPEDC410"
View "SPEDC420"

View   "\\Sistemas\\Vendas\\OPAF_ECF"
View   "\\Sistemas\\Vendas\\ECF_T"
CoEdit "\\Sistemas\\Vendas\\ECF_C"
NR = NRecords("\\Sistemas\\Vendas\\ECF_C")

Inicio=True

NSER  ="**"
EMPANT="*"
EMPOk =True
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 5/6",45," ")+BARRA_STRING)
  
  If ([Data]<VSDGDTINI Or [Data]>VSDGDTFIM)
     Then Loop
  EndIf    
  If [Codigo da Empresa]<>VSDGEMPRESA
     Then Loop
  EndIf    

  If [\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]<>NSER
     Then NSER=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]  
          Moveto "\\Sistemas\\Vendas\\OPAF_ECF"
          Moveto [Numero de Serie]
          Locate [\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
          If RetVal
             Then ECF_MOD=[Modelo Impressora]
             Else ECF_MOD="?"
          EndIf   
          Moveto "\\Sistemas\\Vendas\\ECF_C"     
  EndIf

  Moveto "SPEDC400"
  Moveto [Codigo da Empresa]
  Locate  [\Sistemas\Vendas\ECF_C->Codigo da Empresa      ],
          [\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
  If Not RetVal
     Then End
          Down
          [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
          [ECF_FAB           ]=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
          [COD_MOD           ]="2D"
          [ECF_MOD           ]=ECF_MOD
          [ECF_CX            ]=[\Sistemas\Vendas\ECF_C->Numero do ECF          ]
          UnLockRecord
  EndIf   

  VL_BRT=(([\Sistemas\Vendas\ECF_C->Totalizador Final     ]*1)-
          ([\Sistemas\Vendas\ECF_C->Totalizador Inicial   ]*1))-
          ([\Sistemas\Vendas\ECF_C->Cancelados]*1)

  If VL_BRT<=0
     Then VL_BRT=0
  EndIf   
  
  Moveto "SPEDC405"
  End
  Down
  [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
  [ECF_FAB           ]=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
  [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
  [DT_DOC            ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
  [CRO               ]=[\Sistemas\Vendas\ECF_C->Reinicio Operacao      ]
  [CRZ               ]=[\Sistemas\Vendas\ECF_C->Contador Reducao       ]
  [NUM_COO_FIN       ]=[\Sistemas\Vendas\ECF_C->Numero Cupom Reducao   ]
  [GT_FIN            ]=[\Sistemas\Vendas\ECF_C->Totalizador Final      ]
  [VL_BRT            ]=VL_BRT
  UnLockRecord

  Moveto "SPEDC410"
  End
  Down
  [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
  [ECF_FAB           ]=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
  [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
  [VL_PIS            ]=0
  [VL_COFINS         ]=0
  UnLockRecord

  Moveto "\\Sistemas\\Vendas\\ECF_T"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\ECF_C->Codigo da Empresa      ],
         [\Sistemas\Vendas\ECF_C->Serie do Documento     ],
         [\Sistemas\Vendas\ECF_C->Data                   ]
  While [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa  ] And
        [Serie do Documento]=[\Sistemas\Vendas\ECF_C->Serie do Documento ] And
        [Data              ]=[\Sistemas\Vendas\ECF_C->Data               ]


    If [\Sistemas\Vendas\ECF_T->Base de Calculo ICMS]>0 
       Then 
            NR_TOT     =NR_TOTC420T([\Sistemas\Vendas\ECF_T->Aliquota de ICMS])
            COD_TOT_PAR=NR_TOT+"T"+AlinhM(Tira_CharNum(Valor_Str([\Sistemas\Vendas\ECF_T->Aliquota de ICMS],2)),4)

            Moveto "SPEDC420"
            End
            Down
            [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
            [ECF_FAB           ]=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
            [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
            [COD_TOT_PAR       ]=COD_TOT_PAR
            [VLR_ACUM_TOT      ]=[\Sistemas\Vendas\ECF_T->Base de Calculo ICMS]
            [NR_TOT            ]=NR_TOT
            UnLockRecord
    EndIf
    
    Moveto "\\Sistemas\\Vendas\\ECF_T"
    Skip
    If Eot() Then QuitLoop EndIf
  EndWhile

  Moveto "\\Sistemas\\Vendas\\ECF_C"
  For wi From 1 To 6
    Moveto "SPEDC420"
    End
    Down
    [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
    [ECF_FAB           ]=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
    [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]
    Switch
      Case wi=1: 
                 
                 ;** fazer levantamento das aliquotas utilizadas no ECF do Cliente
                 Switch
                   Case SYS_CODIGO_CLIENTE="0000" : ALIQ_ISSQN=0.00
                   OtherWise                      : ALIQ_ISSQN=0.00
                 EndSwitch
                 NR_TOT     =NR_TOTC420S(ALIQ_ISSQN)
                 COD_TOT_PAR=NR_TOT+"S"+AlinhM(Tira_CharNum(Valor_Str(ALIQ_ISSQN,2)),4)
                 
                 [COD_TOT_PAR ]=COD_TOT_PAR
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->ISSQN]
                 [NR_TOT      ]=NR_TOT

      Case wi=2: [COD_TOT_PAR ]="F1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Substituicao Tributaria]
      Case wi=3: [COD_TOT_PAR ]="I1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Isento]
      Case wi=4: [COD_TOT_PAR ]="N1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Nao Incidencia]

      Case wi=5: [COD_TOT_PAR ]="DT" ;???????
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Descontos]

      Case wi=6: [COD_TOT_PAR ]="Can-O" ;????????
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Cancelados]

    EndSwitch

    If [VLR_ACUM_TOT]=0 Then Del EndIf
    
    UnLockRecord
  EndFor
  
  Moveto "\\Sistemas\\Vendas\\ECF_C"
EndScan
Do_It!
ClearAll

;==== Saidas Faturamento/Cupons ================================================

NLanc=600000

View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Unidades"
View "SPED0190"
View "SPED0200"
View "SPEDC425"
View "SPEDC460"
View "SPEDC470"
View "SPEDC490"
View "\\Sistemas\\Vendas\\ECF_C"
View "\\Sistemas\\Vendas\\NotaI"
Coedit "\\Sistemas\\Vendas\\NotaC"

NR=NRecords("\\Sistemas\\Vendas\\NotaC")

ECF_EMP="****"
ECF_SER="****"
ECF_FAB=""

Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 6/6",45," ")+BARRA_STRING)

  If Search("CUP",[\Sistemas\Vendas\NotaC->Tipo do Documento])=0 ; Cupons
     Then Loop
  EndIf   

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

  If [Codigo da Empresa ]<>ECF_EMP Or
     [Serie do Documento]<>ECF_SER
     Then Moveto "\\Sistemas\\Vendas\\ECF_C"
          Moveto [Codigo da Empresa]
          Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
                 [\Sistemas\Vendas\NotaC->Serie do Documento ],
                 [\Sistemas\Vendas\NotaC->Data de Emissao    ]
          If RetVal
             Then ECF_FAB=[Numero Serie Fabricacao]
             Else ECF_FAB="???????????????"
          EndIf
          ECF_EMP=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
          ECF_SER=[\Sistemas\Vendas\NotaC->Serie do Documento ]

          Moveto "\\Sistemas\\Vendas\\NotaC"
  EndIf        
                    
  NLanc=NLanc+1  

  If IND_PERFIL="A"
     Then 
          If [\Sistemas\Vendas\NotaC->Situacao]="C"
             Then Moveto "SPEDC460"
                  End 
                  Down 
                  [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]
                  [ECF_FAB           ]=ECF_FAB
                  [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao    ]
                  [Lancamento        ]=NLanc
                  [COD_MOD           ]="2D"  
                  [NUM_DOC           ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
                  [COD_SIT           ]="02"
                  UnLockRecord
                  Moveto "\\Sistemas\\Vendas\\NotaC"
                  Loop
          EndIf
          
          Moveto "SPEDC460"
          End 
          Down 
          [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
          [ECF_FAB           ]=ECF_FAB
          [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
          [Lancamento        ]=NLanc
          [COD_MOD           ]="2D"  
          [NUM_DOC           ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
          [COD_SIT           ]="00"
          [DT_DOC            ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
          [VL_DOC            ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal   ]
          [VL_PIS            ]=0
          [VL_COFINS         ]=0
          CPF_CNPJ            =Tira_CharNum([\Sistemas\Vendas\NotaC->CGC    ])
          If NumVal(CPF_CNPJ)=0
             Then CPF_CNPJ=""
          EndIf   
          [CPF_CNPJ          ]=CPF_CNPJ
          [NOM_ADQ           ]=[\Sistemas\Vendas\NotaC->Razao Social        ]
          UnLockRecord
  EndIf

  If [\Sistemas\Vendas\NotaC->Situacao]="C"
     Then Moveto "\\Sistemas\\Vendas\\NotaC"
          Loop
  EndIf        

  CFOP_PAI=[\Sistemas\Vendas\NotaC->CFO]

  TXDESCTO_TOTAL  =([\Sistemas\Vendas\NotaC->Valor Desconto]/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100

  VRACRESC_TOTAL  =[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]+
                   [\Sistemas\Vendas\NotaC->Valor do Seguro          ]
  If [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+" 
      Then VRACRESC_TOTAL=VRACRESC_TOTAL+[\Sistemas\Vendas\NotaC->Valor do Frete]
  EndIf
  TXACRESC_TOTAL=(VRACRESC_TOTAL/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100

  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
         [\Sistemas\Vendas\NotaC->Numero do Documento],
         [\Sistemas\Vendas\NotaC->Serie do Documento ]
  If RetVal
     Then Seq=0
          While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
     
            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            If IsBlank(CFOP) Or CFOP="000" Or CFOP="0000"
               Then CFOP=CFOP_PAI
            EndIf   
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =NDecimal((VL_ITEM*TXDESCTO_TOTAL)/100,2)

            CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
            If IsBlank(CST_ICMS) or Len(CST_ICMS)<3
               Then CST_ICMS=[\Sistemas\Estoque\Itens->Tipo Tributacao]
            EndIf     
            ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
            If ALIQ_RD_ICMS>0
               Then ALIQ_ICMS=NDecimal(ALIQ_ICMS-((ALIQ_ICMS*ALIQ_RD_ICMS)/100),2)
            EndIf
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf

            VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
            VL_RED_BC      =0


            VL_BC_PIS      =[\Sistemas\Vendas\NotaI->PIS_BC                  ]
            VL_PIS         =[\Sistemas\Vendas\NotaI->PIS_Valor               ]

            VL_BC_COFINS   =[\Sistemas\Vendas\NotaI->COFINS_BC               ]
            VL_COFINS      =[\Sistemas\Vendas\NotaI->COFINS_Valor            ]

            VL_OPR         =0

            PORC_IT_MERC   =([\Sistemas\Vendas\NotaI->Preco Total]/[\Sistemas\Vendas\NotaC->Valor Mercadoria])*100 

            VR_ACRESC      =NDecimal((VRACRESC_TOTAL*PORC_IT_MERC)/100,2)

            If ALIQ_ICMS>0 
               Then VL_BC_ICMS2=VL_ITEM
                    VL_BC_ICMS2=VL_BC_ICMS2-VL_DESC
                    VL_RED_BC =NDecimal((VL_BC_ICMS2*ALIQ_RD_ICMS)/100,2)
            EndIf

            VL_OPR=(VL_ITEM-VL_DESC)+
                   VR_ACRESC
            ;-----------------------------------------------------------------

            ;--- Detalhar Item -------------------------------------------------
            If IND_PERFIL="A"
               Then 
                    Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Cupom: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Cupom: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])

                    Seq=Seq+1 

                    Moveto "SPEDC470"
                    End
                    Down
                    [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
                    [ECF_FAB           ]=ECF_FAB
                    [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
                    [Lancamento        ]=NLanc 
                    [Sequencia         ]=Seq
                    [COD_ITEM          ]=[\Sistemas\Vendas\NotaI->Codigo do Item]
                    [QTD               ]=[\Sistemas\Vendas\NotaI->Quantidade]
                    If [\Sistemas\Vendas\NotaI->Situacao_Item]="C"
                       Then [QTD_CANC  ]=[QTD]
                       Else [QTD_CANC  ]=0
                    EndIf   
                    [UNID              ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal]
                    [VL_ITEM           ]=VL_OPR
                    [CST_ICMS          ]=CST_ICMS
                    [CFOP              ]=CFOP
                    [ALIQ_ICMS         ]=ALIQ_ICMS
                    [VL_PIS            ]=VL_PIS
                    [VL_COFINS         ]=VL_COFINS
                    UnLockRecord
                    
                    
               Else Moveto "\\Sistemas\\Estoque\\Itens"
                    Moveto [Codigo do Item]
                    Locate [\Sistemas\Vendas\NotaI->Codigo do Item]
                    If RetVal
                       Then CST_ICMS=[\Sistemas\Estoque\Itens->Tipo Tributacao]
                       Else Mensagem("Item nÆo cadastro: "+[\Sistemas\Vendas\NotaI->Codigo do Item])
                            CST_ICMS=""
                    EndIf
                    Moveto "\\Sistemas\\Vendas\\NotaI"
            EndIf
             
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            If [\Sistemas\Vendas\NotaI->Situacao_Item]<>"C"
               Then Moveto "SPEDC490"
                    Moveto [Codigo da Empresa]
                    Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa   ],
                           ECF_FAB,
                           [\Sistemas\Vendas\NotaC->Data de Emissao     ],
                           CST_ICMS,CFOP,ALIQ_ICMS
                    If Not RetVAl
                       Then End
                            Down
                            [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
                            [ECF_FAB           ]=ECF_FAB
                            [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ]
                            [CST_ICMS          ]=CST_ICMS
                            [CFOP              ]=CFOP
                            [ALIQ_ICMS         ]=ALIQ_ICMS
                    EndIf
                    [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                    [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                    [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                    [COD_OBS      ]=""        
                    UnLockRecord
            EndIf

            ;--- Resumo de itens do movimento diario ---------------------------
            If IND_PERFIL="B" And [\Sistemas\Vendas\NotaI->Situacao_Item]<>"C"
               Then 
                    COD_TOT_PAR=""
                    If [\Sistemas\Vendas\NotaI->Tipo do Item]<>"C"
                       Then Switch
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="I":
                                   COD_TOT_PAR="I1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="N" Or
                                   [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="O":   
                                   COD_TOT_PAR="N1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="S":
                                   COD_TOT_PAR="F1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="D":
                                   NR_TOT     =NR_TOTC420T(ALIQ_ICMS)
                                   COD_TOT_PAR=NR_TOT+"T"+AlinhM(Tira_CharNum(Valor_Str(ALIQ_ICMS,2)),4)
                            EndSwitch
                       Else Switch
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="I":
                                   COD_TOT_PAR="IS1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="N" Or
                                   [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="O":   
                                   COD_TOT_PAR="NS1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="S":
                                   COD_TOT_PAR="FS1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="D":
                                   NR_TOT     =NR_TOTC420S(ALIQ_ISSQN)
                                   COD_TOT_PAR=NR_TOT+"S"+AlinhM(Tira_CharNum(Valor_Str(ALIQ_ISSQN,2)),4)
                            EndSwitch
                    EndIf
        
                    If Not IsBlank(COD_TOT_PAR)
                       Then 
                            Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Cupom: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                            Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Cupom: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])

                            Moveto "SPEDC425"
                            Moveto [Codigo da Empresa]
                            Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa   ],
                                   ECF_FAB,  
                                   [\Sistemas\Vendas\NotaC->Data de Emissao     ],
                                   COD_TOT_PAR,
                                   [\Sistemas\Vendas\NotaI->Codigo do Item      ]                   
                            If Not RetVAl
                               Then End
                                    Down
                                    [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
                                    [ECF_FAB           ]=ECF_FAB
                                    [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
                                    [COD_TOT_PAR       ]=COD_TOT_PAR
                                    [COD_ITEM          ]=[\Sistemas\Vendas\NotaI->Codigo do Item      ]
                                    [UNID              ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal      ]
                            EndIf
                            [QTD          ]=[QTD         ]+[\Sistemas\Vendas\NotaI->Quantidade ]
                            [VL_ITEM      ]=[VL_ITEM     ]+VL_OPR
                            [VL_PIS       ]=[VL_PIS      ]+VL_PIS 
                            [VL_COFINS    ]=[VL_COFINS   ]+VL_COFINS 
                            UnLockRecord
                       Else MSG="Cupom ->"+[\Sistemas\Vendas\NotaC->Codigo da Empresa  ]+"/"+
                                           [\Sistemas\Vendas\NotaC->Numero do Documento]+"/"+
                                           [\Sistemas\Vendas\NotaC->Serie do Documento ]+"//"
                            MSG=MSG+"Conta o item->"+[\Sistemas\Vendas\NotaI->Codigo do Item      ]+" com tributa‡Æo inv lida ICMS/ISSQN!//"
                            MSG=MSG+"Anote para corre‡Æo posterior !"
                            Mensagem(MSG)
                    EndIf
            EndIf
            
            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
  
  Moveto "\\Sistemas\\Vendas\\NotaC"
EndScan
Do_It!
ClearAll

Endproc


;*******************************************************************************
;* Rotina para montagem do Bloco D                    
;*******************************************************************************
Proc Monta_BlocoD()
Private MODELO, NLanc

;==== Entradas Estoque =========================================================

NLanc=800000

View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "SPED0150"
View "SPED0400"
View "SPEDD100"
View "SPEDD190"
View "SPEDD500"
View "SPEDD590"
View "\\Sistemas\\Estoque\\NotaEI"
Coedit "\\Sistemas\\Estoque\\NotaEC"

NR=NRecords("\\Sistemas\\Estoque\\NotaEC")

Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco D",45," ")+BARRA_STRING)

  If [\Sistemas\Estoque\NotaEC->Codigo do Documento]<>"TEL" And ; Nota Telefone
     SubStr([\Sistemas\Estoque\NotaEC->Codigo do Documento],1,2)<>"CT" And ; Conhecimentos Transporte
     [\Sistemas\Estoque\NotaEC->Codigo do Documento]<>"CA"
      Then Loop
  EndIf       

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

  Grava_Participantes([\Sistemas\Estoque\NotaEC->Codigo],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])

  NLanc=NLanc+1  

  Switch
    Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="TEL": ; Nota Telefone
      Moveto "SPEDD500"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[\Sistemas\Estoque\NotaEC->Codigo]
      MODELO             ="22"
      [COD_MOD          ]=MODELO
      [COD_SIT          ]="00"
      [SER              ]=[\Sistemas\Estoque\NotaEC->Serie do Documento]
      [SUB              ]=""
      [NUM_DOC          ]=[\Sistemas\Estoque\NotaEC->Numero do Documento ]
      [DT_DOC           ]=[\Sistemas\Estoque\NotaEC->Data de Emissao     ] 
      [DT_A_P           ]=[\Sistemas\Estoque\NotaEC->Data de Entrada     ]      
      [VL_DOC           ]=[\Sistemas\Estoque\NotaEC->Valor Nota Fiscal   ]
      [VL_DESC          ]=[\Sistemas\Estoque\NotaEC->Valor Desconto      ]
      [VL_SERV          ]=[\Sistemas\Estoque\NotaEC->Valor Servico       ]
      [VL_SERV_NT       ]=[\Sistemas\Estoque\NotaEC->Valor Servico       ]
      [VL_TERC          ]=0
      [VL_DA            ]=[\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]
      [VL_BC_ICMS       ]=[\Sistemas\Estoque\NotaEC->Valor BCICMS]
      [VL_ICMS          ]=[\Sistemas\Estoque\NotaEC->Valor ICMS]
      [COD_INF          ]=""
      [VL_PIS           ]=0
      [VL_COFINS        ]=0
      Switch
        Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
        OtherWise                     : [COD_CTA         ]="?"  
      EndSwitch
      Switch
        Case SYS_CODIGO_CLIENTE="0000": [TP_ASSINANTE    ]="1"
        OtherWise                     : [TP_ASSINANTE    ]="1"  
      EndSwitch
      UnLockRecord
      
    Case SubStr([\Sistemas\Estoque\NotaEC->Codigo do Documento],1,2)="CT" Or ; Conhecimentos Transporte
         [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CA":
      Moveto "SPEDD100"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[\Sistemas\Estoque\NotaEC->Codigo]
      Switch
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CA"              : MODELO="10"
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CTA"             : MODELO="8B"
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CTAC"            : MODELO="09"
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CTRC"            : MODELO="08"
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CTFC"            : MODELO="11"
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CTRM"            : MODELO="26"
        Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CT-E"            : MODELO="57"
        Case SubStr([\Sistemas\Estoque\NotaEC->Codigo do Documento],1,3)="CTR" : MODELO="08"
      EndSwitch
      [COD_MOD          ]=MODELO
      [COD_SIT          ]="00"
      [SER              ]=[\Sistemas\Estoque\NotaEC->Serie do Documento]
      [SUB              ]=""
      [NUM_DOC          ]=[\Sistemas\Estoque\NotaEC->Numero do Documento ]
      If [COD_MOD]="57"
         Then [CHV_CTE          ]=[\Sistemas\Estoque\NotaEC->Chave_Acesso_NFe    ]
         Else [CHV_CTE          ]=""
      EndIf
      [DT_DOC           ]=[\Sistemas\Estoque\NotaEC->Data de Emissao     ] 
      [DT_A_P           ]=[\Sistemas\Estoque\NotaEC->Data de Entrada     ]
      [TP_CT-e          ]=""
      [CHV_CTE_REF      ]=""
      [VL_DOC           ]=[\Sistemas\Estoque\NotaEC->Valor Nota Fiscal   ]
      [VL_DESC          ]=[\Sistemas\Estoque\NotaEC->Valor Desconto      ]
      Switch
        Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="0": [IND_FRT]="9"
        Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="1": [IND_FRT]="1"
        Case [\Sistemas\Estoque\NotaEC->Tipo CTR]="2": [IND_FRT]="2"
      EndSwitch
      [VL_SERV          ]=[\Sistemas\Estoque\NotaEC->Valor Servico       ]
      [VL_BC_ICMS       ]=[\Sistemas\Estoque\NotaEC->Valor BCICMS]
      [VL_ICMS          ]=[\Sistemas\Estoque\NotaEC->Valor ICMS]
      [VL_NT            ]=0
      [COD_INF          ]=""
      Switch
        Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
        OtherWise                     : [COD_CTA         ]="?"  
      EndSwitch
      UnLockRecord

  EndSwitch 

  TXDESCTO_TOTAL  =([\Sistemas\Estoque\NotaEC->Valor Desconto]/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100
  
  VRACRESC_TOTAL  =[\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]+
                   [\Sistemas\Estoque\NotaEC->Valor do Seguro          ]+
                   [\Sistemas\Estoque\NotaEC->Valor do Frete           ]
  TXACRESC_TOTAL=(VRACRESC_TOTAL/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100
            
  Moveto "\\Sistemas\\Estoque\\NotaEI"
  Moveto [Numero do Lancamento]
  Locate [\Sistemas\Estoque\NotaEC->Numero do Lancamento]
  If RetVal
     Then Seq=0
          While [Numero do Lancamento]=[\Sistemas\Estoque\NotaEC->Numero do Lancamento]

            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Estoque\NotaEI->CFO                     ]
            VL_ITEM        =[\Sistemas\Estoque\NotaEI->Preco Total             ]
            VL_DESC        =NDecimal((VL_ITEM*TXDESCTO_TOTAL)/100,2)
            
            CST_ICMS       =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
            ALIQ_ICMS      =[\Sistemas\Estoque\NotaEI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]
            ALIQ_ST        =[\Sistemas\Estoque\NotaEC->Aliquota de ICMS        ]
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_BC_ICMS     =[\Sistemas\Estoque\NotaEI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Estoque\NotaEI->Valor do ICMS           ]
            VL_BC_ICMS_ST  =[\Sistemas\Estoque\NotaEI->ICMS_ST_BC              ]
            VL_ICMS_ST     =[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]
            VL_RED_BC      =0
            
            VL_OPR         =0
            
            PORC_IT_MERC   =([\Sistemas\Estoque\NotaEI->Preco Total]/[\Sistemas\Estoque\NotaEC->Valor Mercadoria])*100 
            VR_ACRESC      =NDecimal((VRACRESC_TOTAL*PORC_IT_MERC)/100,2)
            
            If ALIQ_ICMS>0 
               Then VL_RED_BC =NDecimal(((VL_ITEM-VL_DESC)*ALIQ_RD_ICMS)/100,2)
            EndIf
            
            VL_OPR=(VL_ITEM-VL_DESC)+
                   (VL_ICMS_ST)+
                   VR_ACRESC
            ;-------------------------------------------------------------------
            
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Switch
              Case MODELO="22": ; Nota Telefone
                Moveto "SPEDD590"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR       ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
                [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
                [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
                [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
                [COD_OBS      ]=""        
                UnLockRecord
            
              Case MODELO="07" Or MODELO="08" Or MODELO="8B" Or MODELO="09" Or
                   MODELO="10" Or MODELO="11" Or 
                   MODELO="26" Or MODELO="27" Or MODELO="57": ; Conhecimentos Transporte
                Moveto "SPEDD190"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                [VL_RED_BC    ]=[VL_RED_BC   ]+VL_RED_BC
                [COD_OBS      ]=""        
                UnLockRecord
            
            EndSwitch
            
            Moveto "\\Sistemas\\Estoque\\NotaEI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
  
  Moveto "\\Sistemas\\Estoque\\NotaEC"
EndScan
Do_It!
ClearAll

Endproc

;*******************************************************************************
;* Rotina para montagem do Bloco E                    
;*******************************************************************************
Proc Monta_BlocoE()

If Not IsEmpty("SPEDC190") Or
   Not IsEmpty("SPEDD190") 
   Then 
        CoEdit "SPEDE100"
        End 
        Down
        [DT_INI  ]=VSDGDTINI
        [DT_FIN  ]=VSDGDTFIM
        UnLockRecord
        Do_It!
        ClearAll

        VL_TOT_DEBITOS           =0
        VL_AJ_DEBITOS            =0
        VL_TOT_AJ_DEBITOS        =0
        VL_ESTORNOS_CRED         =0
        VL_TOT_CREDITOS          =0
        VL_AJ_CREDITOS           =0
        VL_TOT_AJ_CREDITOS       =0
        VL_ESTORNOS_DEB          =0
        VL_SLD_CREDOR_ANT        =0
        VL_SLD_APURADO           =0
        VL_TOT_DED               =0
        VL_ICMS_RECOLHER         =0
        VL_SLD_CREDOR_TRANSPORTAR=0
        DEB_ESP                  =0

        For ww From 1 to 7
            Switch
              Case ww=1 : View "SPEDC190"
              Case ww=2 : View "SPEDC320"
              Case ww=3 : View "SPEDC390"
              Case ww=4 : View "SPEDC490"
              Case ww=5 : View "SPEDC590"
              Case ww=6 : View "SPEDD190"
              Case ww=7 : View "SPEDD590"
            EndSwitch 
            Scan
              If SubStr([CFOP],1,1)="1" Or
                 SubStr([CFOP],1,1)="2" Or
                 SubStr([CFOP],1,1)="3"
                 Then VL_TOT_CREDITOS=VL_TOT_CREDITOS+[VL_ICMS]
              EndIf   
              If SubStr([CFOP],1,1)="5" Or
                 SubStr([CFOP],1,1)="6" Or   
                 SubStr([CFOP],1,1)="7"   
                 Then VL_TOT_DEBITOS =VL_TOT_DEBITOS +[VL_ICMS]
              EndIf
            EndScan
            ClearAll
        EndFor

        CoEdit "SPEDE110"
        [VL_TOT_DEBITOS           ]=VL_TOT_DEBITOS
        [VL_AJ_DEBITOS            ]=VL_AJ_DEBITOS
        [VL_TOT_AJ_DEBITOS        ]=VL_TOT_AJ_DEBITOS
        [VL_ESTORNOS_CRED         ]=VL_ESTORNOS_CRED
        [VL_TOT_CREDITOS          ]=VL_TOT_CREDITOS
        [VL_AJ_CREDITOS           ]=VL_AJ_CREDITOS
        [VL_TOT_AJ_CREDITOS       ]=VL_TOT_AJ_CREDITOS
        [VL_ESTORNOS_DEB          ]=VL_ESTORNOS_DEB
        [VL_SLD_CREDOR_ANT        ]=VL_SLD_CREDOR_ANT
        [VL_SLD_APURADO           ]=VL_SLD_APURADO
        [VL_TOT_DED               ]=VL_TOT_DED
        [VL_ICMS_RECOLHER         ]=VL_ICMS_RECOLHER
        [VL_SLD_CREDOR_TRANSPORTAR]=VL_SLD_CREDOR_TRANSPORTAR
        [DEB_ESP                  ]=DEB_ESP
        UnLockRecord
        Do_It!
        ClearAll
        
EndIf


If Not IsEmpty("SPEDE510")
   Then 
        CoEdit "SPEDE500"
        Switch
          Case SYS_CODIGO_CLIENTE="0000" : [IND_APUR]="0"
          OtherWise                      : [IND_APUR]="0"
        EndSwitch
        [DT_INI  ]=VSDGDTINI
        [DT_FIN  ]=VSDGDTFIM
        UnLockRecord
        Do_It!
        ClearAll
        
        VL_SD_ANT_IPI =0
        VL_DEB_IPI    =0
        VL_CRED_IPI   =0
        VL_OD_IPI     =0
        VL_OC_IPI     =0
        VL_SC_IPI     =0
        VL_SD_IPI     =0

        CoEdit "SPEDE520","SPEDE510"
        Scan
          If SubStr([CFOP],1,1)="1" Or
             SubStr([CFOP],1,1)="2" Or
             SubStr([CFOP],1,1)="3"
             Then VL_CRED_IPI=VL_CRED_IPI+[VL_IPI]
          EndIf   
          If SubStr([CFOP],1,1)="5" Or
             SubStr([CFOP],1,1)="6"   
             Then VL_DEB_IPI =VL_DEB_IPI +[VL_IPI]
          EndIf
        EndScan
        
        VL_SD_IPI =(VL_SD_ANT_IPI+VL_CRED_IPI+VL_OC_IPI)-
                   (VL_DEB_IPI+VL_OD_IPI)
        If VL_SD_IPI>0
           Then VL_SC_IPI=VL_SD_IPI
                VL_SD_IPI=0
           Else VL_SC_IPI=0
                VL_SD_IPI=VL_SD_IPI*-1
        EndIf              
        
        Moveto "SPEDE520"
        [VL_SD_ANT_IPI ]=VL_SD_ANT_IPI
        [VL_DEB_IPI    ]=VL_DEB_IPI
        [VL_CRED_IPI   ]=VL_CRED_IPI
        [VL_OD_IPI     ]=VL_OD_IPI
        [VL_OC_IPI     ]=VL_OC_IPI
        [VL_SC_IPI     ]=VL_SC_IPI
        [VL_SD_IPI     ]=VL_SD_IPI
        UnLockRecord
        Do_It!
        ClearAll
        
EndIf

EndProc

;*******************************************************************************
;* Rotina para montagem do Bloco G                    
;*******************************************************************************
Proc Monta_BlocoG()

EndProc

;*******************************************************************************
;* Rotina para montagem do Bloco H                    
;*******************************************************************************
Proc Monta_BlocoH()
Private VL_INV, DT_INV, REGTB

If MES<>"02" And Not VSDGINVENT[1]
   Then Return 
EndIf

VL_INV=0
DT_INV=VSDGDTFIM

If IsAssigned(REGTB)
   Then Release vars REGTB
EndIf
DynArray REGTB[]

View   "\\Sistemas\\Cadastro\\Destinat"
View   "\\Sistemas\\Estoque\\Itens"
View   "\\Sistemas\\Estoque\\Unidades"
View   "SPEDH010"
View   "SPEDH005"
View   "SPED0150"
View   "SPED0190"
View   "SPED0200"
CoEdit TabelaI
NR = NRecords(TabelaI)
Scan
   Barra(NR, RecNo())
   Aguarde(Completa("Aguarde, processando bloco H",45," ")+BARRA_STRING)

   If Not [Saldo Atual]>0
      Then Loop
   EndIf

   CopyToArray REGTB

   If Not IsBlank(REGTB["Codigo_Terceiro"])
      Then Grava_Participantes(REGTB["Codigo_Terceiro"],"Invent rio")
   EndIf   
   Grava_Itens(REGTB["Codigo do Item"],"Invent rio")

   Moveto "SPEDH010"
   End Down
   [COD_ITEM         ]=REGTB["Codigo do Item"]
   [UNID             ]=REGTB["Unidade Interna"]
   [QTD              ]=REGTB["Saldo Atual"]
   [VL_ITEM          ]=REGTB["Custo Total Atual"]
   [VL_UNIT          ]=NDecimal(REGTB["Custo Total Atual"]/REGTB["Saldo Atual"],5)  
   [IND_PROP         ]=REGTB["Posse_Estoque"]
   [COD_PART         ]=REGTB["Codigo_Terceiro"]
   [TXT_COMPL        ]=[\Sistemas\Estoque\Itens->Descricao Complementar]
   Switch
     Case SYS_CODIGO_CLIENTE="0000": [COD_CTA         ]=""
     OtherWise                     : [COD_CTA         ]="?"  
   EndSwitch
   UnLockRecord

   VL_INV=VL_INV+REGTB["Custo Total Atual"]
   
   Moveto TabelaI
EndScan

Moveto "SPEDH005"
End
Down
[DT_INV  ]=DT_INV
[VL_INV  ]=VL_INV
[MOT_INV ]=VSDGMOTINV
UnLockRecord

Do_It!
ClearAll

Endproc

;*******************************************************************************
;* Rotina para montagem do Bloco 1                    
;*******************************************************************************
Proc Monta_Bloco1()

EndProc

;*******************************************************************************
;* Rotina para contagem de bloco                      
;*******************************************************************************
Proc Conta_REGISTRO(Reg,Bloc)
Private Reg,bloc,I

For I From 1 To 100
  If SubStr(REG_BLC[I],1,4)=Reg 
     Then C=Numval(SubStr(REG_BLC[I],6,7))
          QuitLoop
  EndIf   
  If IsBlank(REG_BLC[I])
     Then c=0
          QuitLoop
  EndIf   
EndFor
C=C+1   
REG_BLC[I]=Reg+"|"+StrVal(C)
;123456789012
;9999|1234567


For I From 1 To 20 
  If SubStr(TOT_BLC[I],1,4)=Bloc 
     Then C=Numval(SubStr(TOT_BLC[I],6,7))
          QuitLoop
  EndIf   
  If IsBlank(TOT_BLC[I])
     Then c=0
          QuitLoop
  EndIf   
EndFor
C=C+1   
TOT_BLC[I]=Bloc+"|"+StrVal(C)

EndProc

;*******************************************************************************
;* Rotina pega valor contador do bloco                
;*******************************************************************************
Proc Contador_REGISTRO(Reg)
Private Reg,I,C

c=0
For I From 1 To 10 
  If IsBlank(TOT_BLC[I])
     Then QuitLoop
  EndIf   
  If SubStr(TOT_BLC[I],1,4)=Reg
     Then C=Numval(SubStr(TOT_BLC[I],6,7)) 
          QuitLoop
  EndIf   
EndFor

Return C+1
EndProc

;*******************************************************************************
;* Rotina Converte caracter especial '|' e passa para blank                    *
;*******************************************************************************                     
Proc Tira_Char(String)
private String, Tam, Pos

Tam=Len(String)
Pos=SearchFrom("|",String,1)
While Pos<>0 
  If Pos>0
     Then String=SubStr(String,1,Pos-1)+" "+SubStr(String,Pos+1,Tam)
          Pos=SearchFrom("|",String,1)
  EndIf
EndWhile

Return String
EndProc

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

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

;--- Registro 0000: Abertura do Arquivo Digital e Identifica‡ao da Entidade ----
View "SPED0000"
Print File ARQ "|0000"+"|"
Print File ARQ AlinhM([COD_VER             ],03)+"|"
Print File ARQ AlinhM([COD_FIN             ],01)+"|"
Print File ARQ Data_Str([DT_INI])+"|"
Print File ARQ Data_Str([DT_FIN])+"|"
Print File ARQ ""+[NOME                    ]+"|"
Print File ARQ ""+[CNPJ                    ]+"|"
Print File ARQ ""+[CPF                     ]+"|"
Print File ARQ ""+[UF                      ]+"|"
Print File ARQ ""+[IE                      ]+"|"
Print File ARQ ""+[COD_MUN                 ]+"|"
Print File ARQ ""+[IM                      ]+"|"
Print File ARQ ""+[SUFRAMA                 ]+"|"
Print File ARQ ""+[IND_PERFIL              ]+"|"
Print File ARQ ""+[IND_ATIV                ]+"|"+"\n"
CONTA_REGISTRO("0000","0990")
ClearImage

;--- Registro 0001: Abertura do Bloco 0 ----------------------------------------
Print File ARQ "|0001"+"|"
Print File ARQ "0"+"|"+"\n"
CONTA_REGISTRO("0001","0990")

;--- Registro 0005: Dados Complementares da Entidade ---------------------------
View "SPED0005"
Print File ARQ "|0005"+"|"
Print File ARQ ""+[FANTASIA                ]+"|"
Print File ARQ ""+[CEP                     ]+"|"
Print File ARQ ""+[END                     ]+"|"
Print File ARQ ""+[NUM                     ]+"|"
Print File ARQ ""+[COMPL                   ]+"|"
Print File ARQ ""+[BAIRRO                  ]+"|"
Print File ARQ ""+[FONE                    ]+"|"
Print File ARQ ""+[FAX                     ]+"|"
Print File ARQ ""+[EMAIL                   ]+"|"+"\n"
CONTA_REGISTRO("0005","0990")
ClearImage

;--- Registro 0015: Dados do Contribuinte Substituto ---------------------------
If Not IsEmpty("SPED0015")
   Then View "SPED0015"
        Print File ARQ "|0015"+"|"
        Print File ARQ ""+[UF_ST                   ]+"|"
        Print File ARQ ""+[IE_ST                   ]+"|"+"\n"
        CONTA_REGISTRO("0015","0990")
        ClearImage
EndIf

;--- Registro 0100: Dados do Contabilista --------------------------------------
View "SPED0100"
Print File ARQ "|0100"+"|"
Print File ARQ ""+[NOME                  ]+"|"
Print File ARQ ""+[CPF                   ]+"|"
Print File ARQ ""+[CRC                   ]+"|"
Print File ARQ ""+[CNPJ                  ]+"|"
Print File ARQ ""+[CEP                   ]+"|"
Print File ARQ ""+[END                   ]+"|"
Print File ARQ ""+[NUM                   ]+"|"
Print File ARQ ""+[COMPL                 ]+"|"
Print File ARQ ""+[BAIRRO                ]+"|"
Print File ARQ ""+[FONE                  ]+"|"
Print File ARQ ""+[FAX                   ]+"|"
Print File ARQ ""+[EMAIL                 ]+"|"
Print File ARQ ""+[COD_MUN               ]+"|"+"\n"
CONTA_REGISTRO("0100","0990")
ClearImage

;--- Registro 0150: Tabela de Cadastro de Participante -------------------------
View "SPED0150"
Scan
 Print File ARQ "|0150"+"|"
 Print File ARQ ""+[COD_PART                ]+"|"
 Print File ARQ ""+[NOME                    ]+"|"
 Print File ARQ ""+[COD_PAIS                ]+"|"
 Print File ARQ ""+[CNPJ                    ]+"|"
 Print File ARQ ""+[CPF                     ]+"|"
 Print File ARQ ""+[IE                      ]+"|"
 Print File ARQ ""+[COD_MUN                 ]+"|"
 Print File ARQ ""+[SUFRAMA                 ]+"|"
 Print File ARQ ""+[END                     ]+"|"
 Print File ARQ ""+[NUM                     ]+"|"
 Print File ARQ ""+[COMPL                   ]+"|"
 Print File ARQ ""+[BAIRRO                  ]+"|"+"\n"
 CONTA_REGISTRO("0150","0990")
EndScan
ClearImage

;--- Registro 0175: Alter‡ao da Tabela de Cadastro de Participante -------------
View "SPED0175"
Scan
 Print File ARQ "|0175"+"|"
 Print File ARQ ""+[DT_ALT                  ]+"|"
 Print File ARQ ""+[NR_CAMPO                ]+"|"
 Print File ARQ ""+[CONT_ANT                ]+"|"+"\n"
 CONTA_REGISTRO("0175","0990")
EndScan
ClearImage

;--- Registro 0190: Identifica‡Æo das Unidades de Medida -----------------------
View "SPED0190"
Scan
 Print File ARQ "|0190"+"|"
 Print File ARQ ""+[UNID                    ]+"|"
 Print File ARQ ""+[DESCR                   ]+"|"+"\n"
 CONTA_REGISTRO("0190","0990")
EndScan
ClearImage

;--- Registro 0200: Tabela de Identifica‡Æo do Item (Produto e Servi‡os) -------
View "SPED0200"
Scan
 Print File ARQ "|0200"+"|"
 Print File ARQ ""+[COD_ITEM                ]+"|"
 Print File ARQ ""+[DESCR_ITEM              ]+"|"
 Print File ARQ ""+[COD_BARRA               ]+"|"
 Print File ARQ ""+[COD_ANT_ITEM            ]+"|"
 Print File ARQ ""+[UNID_INV                ]+"|"
 Print File ARQ ""+[TIPO_ITEM               ]+"|"
 Print File ARQ ""+[COD_NCM                 ]+"|"
 Print File ARQ ""+[Ex_IPI                  ]+"|"
 Print File ARQ ""+[COD_GEN                 ]+"|"
 Print File ARQ ""+[COD_LST                 ]+"|"
 Print File ARQ Valor_Str([ALIQ_ICMS],2)+"|"+"\n"
 CONTA_REGISTRO("0200","0990")
EndScan
ClearImage

;--- Registro 0205: Alter‡ao do Item -------------------------------------------
View "SPED0205"
Scan
 Print File ARQ "|0205"+"|"
 Print File ARQ ""+[DESCR_ANT_ITEM          ]+"|"
 Print File ARQ ""+[DT_INI                  ]+"|"
 Print File ARQ ""+[DT_FIM                  ]+"|"
 Print File ARQ ""+[CONT_ANT_ITEM           ]+"|"+"\n"
 CONTA_REGISTRO("0175","0990")
EndScan
ClearImage

;--- Registro 0206:                  -------------------------------------------
;--- Registro 0220:                  -------------------------------------------
;--- Registro 0300:                  -------------------------------------------
;--- Registro 0305:                  -------------------------------------------

;--- Registro 0400: Tabela de Natureza da Opera‡Æo/Presta‡Æo--------------------
View "SPED0400"
Scan
 Print File ARQ "|0400"+"|"
 Print File ARQ ""+[COD_NAT                 ]+"|"
 Print File ARQ ""+[DESCR_NAT               ]+"|"+"\n"
 CONTA_REGISTRO("0400","0990")
EndScan
ClearImage

;--- Registro 0450: Tabela de Informa‡Æo Complementar --------------------------
View "SPED0450"
Scan
 Print File ARQ "|0450"+"|"
 Print File ARQ ""+[COD_INF                 ]+"|"
 Print File ARQ ""+[TXT                     ]+"|"+"\n"
 CONTA_REGISTRO("0450","0990")
EndScan
ClearImage

;--- Registro 0460:                  -------------------------------------------
;--- Registro 0500:                  -------------------------------------------
;--- Registro 0600:                  -------------------------------------------

;--- Registro 0990: Encerramento do Bloco o ------------------------------------
Print File ARQ "|0990"+"|"+StrVal(Contador_REGISTRO("0990"))+"|"+"\n"

EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco C                                
;*******************************************************************************
Proc GERA_BLOCOC()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco C",45," "))

;==== BLOCO C: DOCUMENTOS FISCAIS I - MERCADORIAS (ICMS/IPI) ===================

;--- Registro C001: Abertura do Bloco C ----------------------------------------
If IsEmpty("SPEDC100") And 
   IsEmpty("SPEDC300") And 
   IsEmpty("SPEDC400") And 
   IsEmpty("SPEDC500") 
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|C001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("C001","C990")

;--- Registro C100: Nota Fiscal ------------------------------------------------
If Not IsEmpty("SPEDC100")
   Then View "SPEDC105","SPEDC110","SPEDC111","SPEDC112","SPEDC113","SPEDC114","SPEDC115",
             "SPEDC120","SPEDC130","SPEDC140","SPEDC141","SPEDC160","SPEDC170",
             "SPEDC172",
             "SPEDC179","SPEDC190","SPEDC195",
             "SPEDC100"
        Scan
          NLANC=[Lancamento]
          
          If [COD_SIT]="02" Or [COD_SIT]="03" Or
             [COD_SIT]="04" Or [COD_SIT]="05"
             Then Print File ARQ "|C100"+"|"
                  Print File ARQ ""+[IND_OPER             ]+"|"
                  Print File ARQ ""+[IND_EMIT             ]+"|"
                  Print File ARQ ""+"|"
                  Print File ARQ ""+[COD_MOD              ]+"|"
                  Print File ARQ ""+[COD_SIT              ]+"|"
                  Print File ARQ ""+[SER                  ]+"|"
                  Print File ARQ ""+[NUM_DOC              ]+"|"
                  Print File ARQ ""+[CHV_NFE              ]+"|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"
                  Print File ARQ "|"+"\n"
             Else Print File ARQ "|C100"+"|"
                  Print File ARQ ""+[IND_OPER             ]+"|"
                  Print File ARQ ""+[IND_EMIT             ]+"|"
                  Print File ARQ ""+[COD_PART             ]+"|"
                  Print File ARQ ""+[COD_MOD              ]+"|"
                  Print File ARQ ""+[COD_SIT              ]+"|"
                  Print File ARQ ""+[SER                  ]+"|"
                  Print File ARQ ""+[NUM_DOC              ]+"|"
                  Print File ARQ ""+[CHV_NFE              ]+"|"
                  Print File ARQ Data_Str([DT_DOC])+"|"
                  Print File ARQ Data_Str([DT_E_S])+"|"
                  Print File ARQ Valor_Str([VL_DOC       ],2)+"|"
                  Print File ARQ ""+[IND_PGTO            ]+"|"
                  Print File ARQ Valor_Str([VL_DESC      ],2)+"|"
                  Print File ARQ Valor_Str([VL_ABAT_NT   ],2)+"|"
                  Print File ARQ Valor_Str([VL_MERC      ],2)+"|"
                  Print File ARQ ""+[IND_FRT             ]+"|"
                  Print File ARQ Valor_Str([VL_FRT       ],2)+"|"
                  Print File ARQ Valor_Str([VL_SEG       ],2)+"|"
                  Print File ARQ Valor_Str([VL_OUT_DA    ],2)+"|"
                  Print File ARQ Valor_Str([VL_BC_ICMS   ],2)+"|"
                  Print File ARQ Valor_Str([VL_ICMS      ],2)+"|"
                  Print File ARQ Valor_Str([VL_BC_ICMS_ST],2)+"|"
                  Print File ARQ Valor_Str([VL_ICMS_ST   ],2)+"|"
                  Print File ARQ Valor_Str([VL_IPI       ],2)+"|"
                  Print File ARQ Valor_Str([VL_PIS       ],2)+"|"
                  Print File ARQ Valor_Str([VL_COFINS    ],2)+"|"
                  Print File ARQ Valor_Str([VL_PIS_ST    ],2)+"|"
                  Print File ARQ Valor_Str([VL_COFINS_ST ],2)+"|"+"\n"
          EndIf
          CONTA_REGISTRO("C100","C990")
          
          
          Moveto "SPEDC105"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C105","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC110"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
                    Print File ARQ "|C110"+"|"
                    Print File ARQ ""+[COD_INF      ]+"|"
                    Print File ARQ ""+[TXT_COMPL    ]+"|"+"\n"
                    CONTA_REGISTRO("C110","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC111"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C111","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC112"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C112","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC113"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C113"+"|"
                    Print File ARQ ""+[IND_OPER     ]+"|"
                    Print File ARQ ""+[IND_EMIT     ]+"|"
                    Print File ARQ ""+[COD_PART     ]+"|"
                    Print File ARQ ""+[COD_MOD      ]+"|"
                    Print File ARQ ""+[SER          ]+"|"
                    Print File ARQ ""+[SUB          ]+"|"
                    Print File ARQ ""+[NUM_DOC      ]+"|"
                    Print File ARQ Data_Str([DT_DOC])+"|"+"\n"
                    CONTA_REGISTRO("C113","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC114"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C114"+"|"
                    Print File ARQ ""+[COD_MOD      ]+"|"
                    Print File ARQ ""+[ECF_FAB      ]+"|"
                    Print File ARQ ""+[ECF_CX       ]+"|"
                    Print File ARQ ""+[NUM_DOC      ]+"|"
                    Print File ARQ Data_Str([DT_DOC])+"|"+"\n"
                    CONTA_REGISTRO("C114","C990")
             
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          
          Moveto "SPEDC115"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C115","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC120"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C120","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC130"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C130","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC140"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C140"+"|"
                    Print File ARQ ""+[IND_EMIT     ]+"|"
                    Print File ARQ ""+[IND_TIT      ]+"|"
                    Print File ARQ ""+[DESC_TIT     ]+"|"
                    Print File ARQ ""+[NUM_TIT      ]+"|"
                    Print File ARQ Valor_Str([QTD_PARC],0)+"|"
                    Print File ARQ Valor_Str([VL_TIT ],2)+"|"+"\n"
                    CONTA_REGISTRO("C140","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          
          Moveto "SPEDC141"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C141"+"|"
                    Print File ARQ Valor_Str([NUM_PARC],0)+"|"
                    Print File ARQ Data_Str([DT_VCTO])+"|"
                    Print File ARQ Valor_Str([VL_PARC],2)+"|"+"\n"
                    CONTA_REGISTRO("C141","C990")
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPEDC160"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C160"+"|"
                    Print File ARQ ""+[COD_PART     ]+"|"
                    Print File ARQ ""+[VEIC_ID      ]+"|"
                    Print File ARQ Valor_Str([QTD_VOL],0)+"|"
                    Print File ARQ Valor_Str([PESO_BRT],2)+"|"
                    Print File ARQ Valor_Str([PESO_LIQ],2)+"|"
                    Print File ARQ ""+[UF_ID]+"|"+"\n"
                    CONTA_REGISTRO("C160","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          
          Moveto "SPEDC170"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C170"+"|"
                    Print File ARQ Valor_Str([NUM_ITEM],0)+"|"
                    Print File ARQ ""+[COD_ITEM     ]+"|"
                    Print File ARQ ""+[DESCR_COMPL  ]+"|"
                    Print File ARQ Valor_Str([QTD   ],3)+"|"
                    Print File ARQ ""+[UNID         ]+"|"
                    Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                    Print File ARQ Valor_Str([VL_DESC   ],2)+"|"
                    Print File ARQ ""+[IND_MOV      ]+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ ""+[COD_NAT      ]+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS   ],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS    ],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS      ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS_ST],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_ST      ],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS_ST   ],2)+"|"
                    Print File ARQ ""+[IND_APUR     ]+"|"
                    Print File ARQ ""+[CST_IPI      ]+"|"
                    Print File ARQ ""+[COD_ENQ      ]+"|"
                    Print File ARQ Valor_Str([VL_BC_IPI    ],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_IPI     ],2)+"|"
                    Print File ARQ Valor_Str([VL_IPI       ],2)+"|"
                    Print File ARQ ""+[CST_PIS      ]+"|"
                    Print File ARQ Valor_Str([VL_BC_PIS    ],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_PIS     ],2)+"|"
                    Print File ARQ Valor_Str([QUANT_BC_PIS ],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_PIS2    ],2)+"|"
                    Print File ARQ Valor_Str([VL_PIS       ],2)+"|"
                    Print File ARQ ""+[CST_COFINS   ]+"|"
                    Print File ARQ Valor_Str([VL_BC_COFINS ],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_COFINS  ],2)+"|"
                    Print File ARQ Valor_Str([QUANT_BC_COFINS],2)+"|"
                    Print File ARQ Valor_Str([ALIQ_COFINS2 ],2)+"|"
                    Print File ARQ Valor_Str([VL_COFINS    ],2)+"|"
                    Print File ARQ ""+[COD_CTA ]+"|"+"\n"
                    CONTA_REGISTRO("C170","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC172"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C172","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC190"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C190"+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_OPR],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS_ST],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS_ST],2)+"|"
                    Print File ARQ Valor_Str([VL_RED_BC],2)+"|"
                    Print File ARQ Valor_Str([VL_IPI],2)+"|"
                    Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                    CONTA_REGISTRO("C190","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC100"
        EndScan
        ClearAll
        
EndIf



;--- Registro C300: Resumo Diario das Notas Fiscais de Venda a Consumidor ------
If Not IsEmpty("SPEDC300")
   Then View "SPEDC321","SPEDC320","SPEDC310","SPEDC300"
        Scan
          CEMPR=[Codigo da Empresa ]
          SDOCT=[Serie do Documento]
          DTREF=[Data de Emissao   ]

          Print File ARQ "|C300"+"|"
          Print File ARQ ""+[COD_MOD      ]+"|"
          Print File ARQ ""+[SER          ]+"|"
          Print File ARQ ""+[SUB          ]+"|"
          Print File ARQ ""+[NUM_DOC_INI  ]+"|"
          Print File ARQ ""+[NUM_DOC_FIN  ]+"|"
          Print File ARQ Data_Str([DT_DOC])+"|"
          Print File ARQ Valor_Str([VL_DOC],2)+"|"
          Print File ARQ Valor_Str([VL_PIS],2)+"|"
          Print File ARQ Valor_Str([VL_COFINS],2)+"|"
          Print File ARQ ""+[COD_CTA      ]+"|"+"\n"
          CONTA_REGISTRO("C300","C990")

          ;--- Registro C310: Documentos Cancelados de Notas Fiscais de Venda a Consumidor ------
          Moveto "SPEDC310"
          Moveto [Codigo da Empresa]
          Locate CEMPR,SDOCT,DTREF
          If RetVal
             Then While [Codigo da Empresa ]=CEMPR And
                        [Serie do Documento]=SDOCT And
                        [Data de Emissao   ]=DTREF
             
                    Print File ARQ "|C310"+"|"
                    Print File ARQ ""+[NUM_DOC_CANC ]+"|"
                    CONTA_REGISTRO("C310","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          ;--- Registro C320: Registro Analitico do Resumo Diario das Notas Fiscais de Venda a Consumidor ------
          Moveto "SPEDC320"
          Moveto [Codigo da Empresa]
          Locate CEMPR,SDOCT,DTREF
          If RetVal
             Then While [Codigo da Empresa ]=CEMPR And
                        [Serie do Documento]=SDOCT And
                        [Data de Emissao   ]=DTREF
             
                    Print File ARQ "|C320"+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS ],2)+"|"
                    Print File ARQ Valor_Str([VL_OPR    ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
                    Print File ARQ Valor_Str([VL_RED_BC ],2)+"|"
                    Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                    CONTA_REGISTRO("C320","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          ;--- Registro C321: Registro Analitico do Resumo Diario das Notas Fiscais de Venda a Consumidor ------
          Moveto "SPEDC321"
          Moveto [Codigo da Empresa]
          Locate CEMPR,SDOCT,DTREF
          If RetVal
             Then While [Codigo da Empresa ]=CEMPR And
                        [Serie do Documento]=SDOCT And
                        [Data de Emissao   ]=DTREF
             
                    Print File ARQ "|C321"+"|"
                    Print File ARQ ""+[COD_ITEM     ]+"|"
                    Print File ARQ Valor_Str([QTD],3)+"|"
                    Print File ARQ ""+[UNID         ]+"|"
                    Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                    Print File ARQ Valor_Str([VL_DESC   ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
                    Print File ARQ Valor_Str([VL_PIS    ],2)+"|"
                    Print File ARQ Valor_Str([VL_COFINS ],2)+"|"+"\n"
                    CONTA_REGISTRO("C321","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC300"
        EndScan
        ClearAll
EndIf

;--- Registro C350: Notas Fiscais de Venda a Consumidor ------
If Not IsEmpty("SPEDC350")
   Then View "SPEDC390","SPEDC370","SPEDC350"
        Scan
          NLANC=[Lancamento]

          Print File ARQ "|C350"+"|"
          Print File ARQ ""+[SER          ]+"|"
          Print File ARQ ""+[SUB_SER      ]+"|"
          Print File ARQ ""+[NUM_DOC      ]+"|"
          Print File ARQ Data_Str([DT_DOC])+"|"
          Print File ARQ ""+[CNPJ_CPF     ]+"|"
          Print File ARQ Valor_Str([VL_MERC ],2)+"|"
          Print File ARQ Valor_Str([VL_DOC  ],2)+"|"
          Print File ARQ Valor_Str([VL_DESC ],2)+"|"
          Print File ARQ Valor_Str([VL_PIS  ],2)+"|"
          Print File ARQ Valor_Str([VL_COFINS],2)+"|"
          Print File ARQ ""+[COD_CTA      ]+"|"+"\n"
          CONTA_REGISTRO("C350","C990")

          ;--- Registro C370: Itens do Documento -------------------------------
          Moveto "SPEDC370"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
                    Print File ARQ "|C370"+"|"
                    Print File ARQ Valor_Str([NUM_ITEM],0)+"|"
                    Print File ARQ ""+[COD_ITEM     ]+"|"
                    Print File ARQ Valor_Str([QTD],3)+"|"
                    Print File ARQ ""+[UNID         ]+"|"
                    Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                    Print File ARQ Valor_Str([VL_DESC   ],2)+"|"+"\n"
                    CONTA_REGISTRO("C370","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf

          ;--- Registro C390: Analitico do documento ---------------------------
          Moveto "SPEDC390"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC

                    Print File ARQ "|C390"+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS ],2)+"|"
                    Print File ARQ Valor_Str([VL_OPR    ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
                    Print File ARQ Valor_Str([VL_RED_BC ],2)+"|"
                    Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                    CONTA_REGISTRO("C390","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf

          Moveto "SPEDC350"
        EndScan
        ClearAll
EndIf


;--- Registro C400: Equipamento ECF --------------------------------------------
If Not IsEmpty("SPEDC400")
   Then View "SPEDC490","SPEDC470","SPEDC460","SPEDC425","SPEDC420",
             "SPEDC410","SPEDC405","SPEDC400"
        Scan
          CEMPR=[Codigo da Empresa ]
          SFABR=[ECF_FAB           ]

          Print File ARQ "|C400"+"|"
          Print File ARQ ""+[COD_MOD      ]+"|"
          Print File ARQ ""+[ECF_MOD      ]+"|"
          Print File ARQ ""+[ECF_FAB      ]+"|"
          Print File ARQ Valor_Str([ECF_CX],0)+"|"+"\n"
          CONTA_REGISTRO("C400","C990")

          ;--- Registro C405: Redu‡Æo Z ----------------------------------------
          Moveto "SPEDC405"
          Moveto [Codigo da Empresa]
          Locate CEMPR,SFABR
          If RetVal
             Then While [Codigo da Empresa ]=CEMPR And
                        [ECF_FAB           ]=SFABR
                    Print File ARQ "|C405"+"|"
                    Print File ARQ Data_Str([DT_DOC])+"|"
                    Print File ARQ ""+[CRO          ]+"|"
                    Print File ARQ ""+[CRZ          ]+"|"
                    Print File ARQ ""+[NUM_COO_FIN  ]+"|"
                    Print File ARQ Valor_Str([GT_FIN],2)+"|"
                    Print File ARQ Valor_Str([VL_BRT],2)+"|"+"\n"
                    CONTA_REGISTRO("C405","C990")
                    DTREF=[Data              ]

                    ;--- Registro C410: PIS e COFINS Totalizados no Dia --------
                    Moveto "SPEDC410"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SFABR,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [ECF_FAB           ]=SFABR And
                                  [Data              ]=DTREF
                              Print File ARQ "|C410"+"|"
                              Print File ARQ Valor_Str([VL_PIS   ],2)+"|"
                              Print File ARQ Valor_Str([VL_COFINS],2)+"|"+"\n"
                              CONTA_REGISTRO("C410","C990")
          
                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf
                    
                    ;--- Registro C420: Registro dos Totalizados Parcias da Redu‡Æo Z --- 
                    Moveto "SPEDC420"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SFABR,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [ECF_FAB           ]=SFABR And
                                  [Data              ]=DTREF
                              Print File ARQ "|C420"+"|"
                              Print File ARQ ""+[COD_TOT_PAR  ]+"|"
                              Print File ARQ Valor_Str([VLR_ACUM_TOT],2)+"|"
                              Print File ARQ ""+[NR_TOT       ]+"|"
                              Print File ARQ ""+[DESCR_NR_TOT ]+"|"+"\n"
                              CONTA_REGISTRO("C420","C990")
                              COD_TOT_PAR=[COD_TOT_PAR  ]
   
                              ;--- Registro C425: Resumo de Itens do Movimento Diario ----
                              Moveto "SPEDC425"
                              Moveto [Codigo da Empresa]
                              Locate CEMPR,SFABR,DTREF,COD_TOT_PAR
                              If RetVal
                                 Then While [Codigo da Empresa ]=CEMPR And
                                            [ECF_FAB           ]=SFABR And
                                            [Data              ]=DTREF And
                                            [COD_TOT_PAR       ]=COD_TOT_PAR

                                        Print File ARQ "|C425"+"|"
                                        Print File ARQ ""+[COD_ITEM     ]+"|"
                                        Print File ARQ Valor_Str([QTD],3)+"|"
                                        Print File ARQ ""+[UNID         ]+"|"
                                        Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                                        Print File ARQ Valor_Str([VL_PIS    ],2)+"|"
                                        Print File ARQ Valor_Str([VL_COFINS ],2)+"|"+"\n"
                                        CONTA_REGISTRO("C425","C990")
                    
                                        Skip
                                        If EOT() Then QuitLoop EndIf
                                      EndWhile
                              EndIf

                              Moveto "SPEDC420"
                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf
                    
   
                    ;--- Registro C460: Documento Fiscal Emitido por ECF -------
                    Moveto "SPEDC460"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SFABR,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [ECF_FAB           ]=SFABR And
                                  [Data              ]=DTREF
                              Print File ARQ "|C460"+"|"
                              Print File ARQ ""+[COD_MOD      ]+"|"
                              Print File ARQ ""+[COD_SIT      ]+"|"
                              Print File ARQ ""+[NUM_DOC      ]+"|"
                              If [COD_SIT]="02"
                                 Then Print File ARQ "|"
                                      Print File ARQ "|"
                                      Print File ARQ "|"
                                      Print File ARQ "|"
                                      Print File ARQ "|"
                                      Print File ARQ "|"+"\n"
                                 Else Print File ARQ Data_Str([DT_DOC])+"|"
                                      Print File ARQ Valor_Str([VL_DOC   ],2)+"|"
                                      Print File ARQ Valor_Str([VL_PIS   ],2)+"|"
                                      Print File ARQ Valor_Str([VL_COFINS],2)+"|"
                                      Print File ARQ ""+[CPF_CNPJ     ]+"|"
                                      Print File ARQ ""+[NOM_ADQ      ]+"|"+"\n"
                              EndIf
                              CONTA_REGISTRO("C460","C990")
                              NLANC3=[Lancamento]
                              
                              ;--- Registro C470: Itens do Documento Fiscal Emitido por ECF ---
                              Moveto "SPEDC470"
                              Moveto [Codigo da Empresa]
                              Locate CEMPR,SFABR,DTREF,NLANC3
                              If RetVal
                                 Then While [Codigo da Empresa ]=CEMPR And
                                            [ECF_FAB           ]=SFABR And
                                            [Data              ]=DTREF And
                                            [Lancamento        ]=NLANC3
                                        Print File ARQ "|C470"+"|"
                                        Print File ARQ ""+[COD_ITEM     ]+"|"
                                        Print File ARQ Valor_Str([QTD     ],3)+"|"
                                        Print File ARQ Valor_Str([QTD_CANC],3)+"|"
                                        Print File ARQ ""+[UNID         ]+"|"
                                        Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                                        Print File ARQ ""+[CST_ICMS     ]+"|"
                                        Print File ARQ ""+[CFOP         ]+"|"
                                        Print File ARQ Valor_Str([ALIQ_ICMS ],2)+"|"
                                        Print File ARQ Valor_Str([VL_PIS    ],2)+"|"
                                        Print File ARQ Valor_Str([VL_COFINS ],2)+"|"+"\n"
                                        CONTA_REGISTRO("C470","C990")
                    
                                        Skip
                                        If EOT() Then QuitLoop EndIf
                                      EndWhile
                              EndIf

                              Moveto "SPEDC460"
                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf

                    ;--- Registro C490: Registro Analitico do documento ----------
                    Moveto "SPEDC490"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SFABR,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [ECF_FAB           ]=SFABR And
                                  [Data              ]=DTREF 
          
                              Print File ARQ "|C490"+"|"
                              Print File ARQ ""+[CST_ICMS     ]+"|"
                              Print File ARQ ""+[CFOP         ]+"|"
                              Print File ARQ Valor_Str([ALIQ_ICMS ],2)+"|"
                              Print File ARQ Valor_Str([VL_OPR    ],2)+"|"
                              Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                              Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
                              Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                              CONTA_REGISTRO("C490","C990")

                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf

                    Moveto "SPEDC405"
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf

         ;Print File ARQ "|C495"+"|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"
         ;Print File ARQ "|"+"\n"
         ;CONTA_REGISTRO("C495","C990")

          Moveto "SPEDC400"
        EndScan
        ClearAll
EndIf


;--- Registro C500: Nota Fiscal Energia ----------------------------------------
If Not IsEmpty("SPEDC500")
   Then View "SPEDC590","SPEDC500"
        Scan
          NLANC=[Lancamento]
          
          Print File ARQ "|C500"+"|"
          Print File ARQ ""+[IND_OPER             ]+"|"
          Print File ARQ ""+[IND_EMIT             ]+"|"
          Print File ARQ ""+[COD_PART             ]+"|"
          Print File ARQ ""+[COD_MOD              ]+"|"
          Print File ARQ ""+[COD_SIT              ]+"|"
          Print File ARQ ""+[SER                  ]+"|"
          Print File ARQ ""+[SUB                  ]+"|"
          Print File ARQ ""+[COD_CONS             ]+"|"
          Print File ARQ ""+[NUM_DOC              ]+"|"
          Print File ARQ Data_Str([DT_DOC])+"|"
          Print File ARQ Data_Str([DT_E_S])+"|"
          Print File ARQ Valor_Str([VL_DOC       ],2)+"|"
          Print File ARQ Valor_Str([VL_DESC      ],2)+"|"
          Print File ARQ Valor_Str([VL_FORN      ],2)+"|"
          Print File ARQ Valor_Str([VL_SERV_NT   ],2)+"|"
          Print File ARQ Valor_Str([VL_TERC      ],2)+"|"
          Print File ARQ Valor_Str([VL_DA        ],2)+"|"
          Print File ARQ Valor_Str([VL_BC_ICMS   ],2)+"|"
          Print File ARQ Valor_Str([VL_ICMS      ],2)+"|"
          Print File ARQ Valor_Str([VL_BC_ICMS_ST],2)+"|"
          Print File ARQ Valor_Str([VL_ICMS_ST   ],2)+"|"
          Print File ARQ ""+[COD_INF              ]+"|"
          Print File ARQ Valor_Str([VL_PIS       ],2)+"|"
          Print File ARQ Valor_Str([VL_COFINS    ],2)+"|"
          Print File ARQ ""+[TP_LIGACAO           ]+"|"
          Print File ARQ ""+[COD_GRUPO_TENSAO     ]+"|"+"\n"
          CONTA_REGISTRO("C500","C990")

          Moveto "SPEDC590"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C590"+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_OPR],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS_ST],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS_ST],2)+"|"
                    Print File ARQ Valor_Str([VL_RED_BC],2)+"|"
                    Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                    CONTA_REGISTRO("C590","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          Moveto "SPEDC500"
        EndScan
        ClearAll
        
EndIf

;--- Registro C990: Encerramento do Bloco C ------------------------------------
Print File ARQ "|C990"+"|"+StrVal(Contador_REGISTRO("C990"))+"|"+"\n"
EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco D                                
;*******************************************************************************
Proc GERA_BLOCOD()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco D",45," "))

;==== BLOCO D: DOCUMENTOS FISCAIS II - SERVI€OS (ICMS) =========================

;--- Registro D001: Abertura do Bloco D ----------------------------------------
If IsEmpty("SPEDD100") And 
   IsEmpty("SPEDD500")     
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|D001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("D001","D990")

;--- Registro D100: Nota Fiscal de Servi‡o de Transporte -----------------------
If Not IsEmpty("SPEDD100")
   Then View "SPEDD190","SPEDD100"
        Scan
          NLANC=[Lancamento]

          Print File ARQ "|D100"+"|"
          Print File ARQ ""+[IND_OPER     ]+"|"
          Print File ARQ ""+[IND_EMIT     ]+"|"
          Print File ARQ ""+[COD_PART     ]+"|"
          Print File ARQ ""+[COD_MOD      ]+"|"
          Print File ARQ ""+[COD_SIT      ]+"|"
          Print File ARQ ""+[SER          ]+"|"
          Print File ARQ ""+[SUB          ]+"|"
          Print File ARQ ""+[NUM_DOC      ]+"|"
          Print File ARQ ""+[CHV_CTE      ]+"|"
          Print File ARQ Data_Str([DT_DOC])+"|"
          Print File ARQ Data_Str([DT_A_P])+"|"
          Print File ARQ ""+[TP_CT-e      ]+"|"
          Print File ARQ ""+[CHV_CTE_REF  ]+"|"
          Print File ARQ Valor_Str([VL_DOC ],2)+"|"
          Print File ARQ Valor_Str([VL_DESC],2)+"|"
          Print File ARQ ""+[IND_FRT      ]+"|"
          Print File ARQ Valor_Str([VL_SERV   ],2)+"|"
          Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
          Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
          Print File ARQ Valor_Str([VL_NT     ],2)+"|"
          Print File ARQ ""+[COD_INF      ]+"|"
          Print File ARQ ""+[COD_CTA      ]+"|"+"\n"
          CONTA_REGISTRO("D100","D990")
          NLANC=[Lancamento]

          ;--- Registro D190: Registro Analitico do Documento - Servi‡o --------
          Moveto "SPEDD190"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|D190"+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS ],2)+"|"
                    Print File ARQ Valor_Str([VL_OPR    ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
                    Print File ARQ Valor_Str([VL_RED_BC ],2)+"|"
                    Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                    CONTA_REGISTRO("D190","D990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf

          Moveto "SPEDD100"
        EndScan
        ClearAll
EndIf

;--- Registro D500: Nota Fiscal de Servi‡o de Comunica‡Æo/Telecomunica‡Æo ------
If Not IsEmpty("SPEDD500")
   Then View "SPEDD590","SPEDD500"
        Scan
          NLANC=[Lancamento]

          Print File ARQ "|D500"+"|"
          Print File ARQ ""+[IND_OPER     ]+"|"
          Print File ARQ ""+[IND_EMIT     ]+"|"
          Print File ARQ ""+[COD_PART     ]+"|"
          Print File ARQ ""+[COD_MOD      ]+"|"
          Print File ARQ ""+[COD_SIT      ]+"|"
          Print File ARQ ""+[SER          ]+"|"
          Print File ARQ ""+[SUB          ]+"|"
          Print File ARQ ""+[NUM_DOC      ]+"|"
          Print File ARQ Data_Str([DT_DOC])+"|"
          Print File ARQ Data_Str([DT_A_P])+"|"
          Print File ARQ Valor_Str([VL_DOC    ],2)+"|"
          Print File ARQ Valor_Str([VL_DESC   ],2)+"|"
          Print File ARQ Valor_Str([VL_SERV   ],2)+"|"
          Print File ARQ Valor_Str([VL_SERV_NT],2)+"|"
          Print File ARQ Valor_Str([VL_TERC   ],2)+"|"
          Print File ARQ Valor_Str([VL_DA     ],2)+"|"
          Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
          Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
          Print File ARQ ""+[COD_INF      ]+"|"
          Print File ARQ Valor_Str([VL_PIS    ],2)+"|"
          Print File ARQ Valor_Str([VL_COFINS ],2)+"|"
          Print File ARQ ""+[COD_CTA      ]+"|"
          Print File ARQ ""+[TP_ASSINANTE ]+"|"+"\n"
          CONTA_REGISTRO("D500","D990")
          NLANC=[Lancamento]

          ;--- Registro D590: Registro Analitico do Documento - Servi‡o --------
          Moveto "SPEDD590"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|D590"+"|"
                    Print File ARQ ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    Print File ARQ Valor_Str([ALIQ_ICMS    ],2)+"|"
                    Print File ARQ Valor_Str([VL_OPR       ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS   ],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS      ],2)+"|"
                    Print File ARQ Valor_Str([VL_BC_ICMS_ST],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS_ST   ],2)+"|"
                    Print File ARQ Valor_Str([VL_RED_BC    ],2)+"|"
                    Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                    CONTA_REGISTRO("D590","D990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf

          Moveto "SPEDD500"
        EndScan
        ClearAll
EndIf

;--- Registro D990: Encerramento do Bloco D ------------------------------------
Print File ARQ "|D990"+"|"+StrVal(Contador_REGISTRO("D990"))+"|"+"\n"

EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco E                                
;*******************************************************************************
Proc GERA_BLOCOE()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco E",45," "))

;==== BLOCO E: APURA€ÇO DO ICMS E IPI ==========================================

;--- Registro E001: Per¡odo da apura‡Æo do ICMS --------------------------------
If IsEmpty("SPEDC190") And
   IsEmpty("SPEDC320") And
   IsEmpty("SPEDC390") And
   IsEmpty("SPEDC490") And
   IsEmpty("SPEDC590") And
   IsEmpty("SPEDD190") And
   IsEmpty("SPEDD590") And
   IsEmpty("SPEDE100")        
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|E001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("E001","E990")

If IND_MOV="0"
  Then
        ;--- Registro E100: Apuracao ICMS --------------------------------------
        View "SPEDE100"
        Scan
          Print File ARQ "|E100"+"|"
          Print File ARQ Data_Str([DT_INI ])+"|"
          Print File ARQ Data_Str([DT_FIN ])+"|"+"\n"
          CONTA_REGISTRO("E100","E990")
        EndScan
        ClearAll
   
        View "SPEDE110"
        Scan
          Print File ARQ "|E110"+"|"
          Print File ARQ Valor_Str([VL_TOT_DEBITOS           ],2)+"|"
          Print File ARQ Valor_Str([VL_AJ_DEBITOS            ],2)+"|"
          Print File ARQ Valor_Str([VL_TOT_AJ_DEBITOS        ],2)+"|"
          Print File ARQ Valor_Str([VL_ESTORNOS_CRED         ],2)+"|"
          Print File ARQ Valor_Str([VL_TOT_CREDITOS          ],2)+"|"
          Print File ARQ Valor_Str([VL_AJ_CREDITOS           ],2)+"|"
          Print File ARQ Valor_Str([VL_TOT_AJ_CREDITOS       ],2)+"|"
          Print File ARQ Valor_Str([VL_ESTORNOS_DEB          ],2)+"|"
          Print File ARQ Valor_Str([VL_SLD_CREDOR_ANT        ],2)+"|"
          Print File ARQ Valor_Str([VL_SLD_APURADO           ],2)+"|"
          Print File ARQ Valor_Str([VL_TOT_DED               ],2)+"|"
          Print File ARQ Valor_Str([VL_ICMS_RECOLHER         ],2)+"|"
          Print File ARQ Valor_Str([VL_SLD_CREDOR_TRANSPORTAR],2)+"|"
          Print File ARQ Valor_Str([DEB_ESP                  ],2)+"|"+"\n"
          CONTA_REGISTRO("E110","E990")
        EndScan
        ClearAll

        ;--- Registro E500: Apuracao IPI ---------------------------------------
        View "SPEDE500"
        Scan
          Print File ARQ "|E500"+"|"
          Print File ARQ ""+[IND_APUR     ]+"|"
          Print File ARQ Data_Str([DT_INI ])+"|"
          Print File ARQ Data_Str([DT_FIN ])+"|"+"\n"
          CONTA_REGISTRO("E500","E990")
        EndScan
        ClearAll
   
        View "SPEDE510"
        Scan
          Print File ARQ "|E510"+"|"
          Print File ARQ ""+[CFOP         ]+"|"
          Print File ARQ ""+[CST_IPI      ]+"|"
          Print File ARQ Valor_Str([VL_CONT_IPI  ],2)+"|"
          Print File ARQ Valor_Str([VL_BC_IPI    ],2)+"|"
          Print File ARQ Valor_Str([VL_IPI       ],2)+"|"+"\n"
          CONTA_REGISTRO("E510","E990")
        EndScan
        ClearAll

        View "SPEDE520"
        Scan
          Print File ARQ "|E520"+"|"
          Print File ARQ Valor_Str([VL_SD_ANT_IPI ],2)+"|"
          Print File ARQ Valor_Str([VL_DEB_IPI    ],2)+"|"
          Print File ARQ Valor_Str([VL_CRED_IPI   ],2)+"|"
          Print File ARQ Valor_Str([VL_OD_IPI     ],2)+"|"
          Print File ARQ Valor_Str([VL_OC_IPI     ],2)+"|"
          Print File ARQ Valor_Str([VL_SC_IPI     ],2)+"|"
          Print File ARQ Valor_Str([VL_SD_IPI     ],2)+"|"+"\n"
          CONTA_REGISTRO("E520","E990")
        EndScan
        ClearAll

EndIf

;--- Registro E990: Encerramento do Bloco E ------------------------------------
Print File ARQ "|E990"+"|"+StrVal(Contador_REGISTRO("E990"))+"|"+"\n"

EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco G                                
;*******************************************************************************
Proc GERA_BLOCOG()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco G",45," "))

;==== BLOCO G:                    ==============================================

Print File ARQ "|G001"+"|"
Print File ARQ "1"+"|"+"\n"
CONTA_REGISTRO("G001","G990")

;--- Registro G990: Encerramento do Bloco G ------------------------------------
Print File ARQ "|G990"+"|"+StrVal(Contador_REGISTRO("G990"))+"|"+"\n"

EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco H                                
;*******************************************************************************
Proc GERA_BLOCOH()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco H",45," "))

;==== BLOCO H: INVENTµRIO FÖSICO ===============================================

;--- Registro H001: Abertura do Bloco H-----------------------------------------
If IsEmpty("SPEDH010")
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|H001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("H001","H990")

If Not IsEmpty("SPEDH010")
   Then 
        ;--- Registro H005: Totais do Invent rio -------------------------------
        View "SPEDH005"
        Scan
          Print File ARQ "|H005"+"|"
          Print File ARQ Data_Str([DT_INV])+"|"
          Print File ARQ Valor_Str([VL_INV],2)+"|"
          Print File ARQ ""+[MOT_INV]+"|"+"\n"
          CONTA_REGISTRO("H005","H990")
        EndScan
        ClearAll

        ;--- Registro H010: Invent rio -------------------------------
        View "SPEDH010"
        Scan
          ;[]=Tira_Char([])
          Print File ARQ "|H010"+"|"
          Print File ARQ ""+[COD_ITEM]+"|"
          Print File ARQ ""+[UNID    ]+"|"
          Print File ARQ Valor_Str([QTD],3)+"|"
          Print File ARQ Valor_Str([VL_UNIT],6)+"|"
          Print File ARQ Valor_Str([VL_ITEM],2)+"|"
          Print File ARQ ""+[IND_PROP]+"|"
          Print File ARQ ""+[COD_PART]+"|"
          Print File ARQ ""+Tira_Char([TXT_COMPL])+"|"           
          Print File ARQ ""+[COD_CTA]+"|"+"\n"
          CONTA_REGISTRO("H010","H990")
        EndScan
        ClearAll
EndIf

;--- Registro H990: Encerramento do Bloco H ------------------------------------
Print File ARQ "|H990"+"|"+StrVal(Contador_REGISTRO("H990"))+"|"+"\n"

EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco 1                                
;*******************************************************************************
Proc GERA_BLOCO1()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco 1",45," "))

;==== BLOCO 1: OUTRAS INFORMA€åES ==============================================

Print File ARQ "|1001"+"|"
Print File ARQ "0"+"|"+"\n"
CONTA_REGISTRO("1001","1990")

Print File ARQ "|1010"+"|N|N|N|N|N|N|N|N|N|"+"\n"
CONTA_REGISTRO("1010","1990")

;--- Registro 1990: Encerramento do Bloco 1 ------------------------------------
Print File ARQ "|1990"+"|"+StrVal(Contador_REGISTRO("1990"))+"|"+"\n"

EndProc

;*******************************************************************************
;* Rotina gera TXT Bloco 9                                
;*******************************************************************************
Proc GERA_BLOCO9()
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco 9",45," "))

;==== BLOCO 9: CONTROLE E ENCERRAMENTO DO ARQUIVO DIGITAL ======================

;--- Registro 9001: Abertura do Bloco 9-----------------------------------------
Print File ARQ "|9001|0|"+"\n"

C9900=0
C9999=0
For I From 1 To 100
  ;--- Registro 9900: Registros do Arquivo -------------------------------------  
  If IsBlank(REG_BLC[I])
     Then QuitLoop
  EndIf
  If i=1
     Then bl=SubStr(REG_BLC[I],1,1)
     Else If SubStr(REG_BLC[I],1,1)<>bl
             Then Print File ARQ "|9900|"+bl+"990|1|"+"\n"
                  C9900=C9900+1
                  C9999=C9999+1

                  bl=SubStr(REG_BLC[I],1,1)
          EndIf    
  EndIf   
  Print File ARQ "|9900|"+SubStr(REG_BLC[I],1,4)+"|"+StrVal(Numval(SubStr(REG_BLC[I],06,7)))+"|"+"\n"
  
  C9900=C9900+1
  C9999=C9999+Numval(SubStr(REG_BLC[I],06,7))
EndFor
Print File ARQ "|9900|"+bl+"990|1|"+"\n"
C9900=C9900+1
C9999=C9999+1


C9900=C9900+4
C9990=C9900+3    
C9999=C9999+C9990

Print File ARQ "|9900|9001|1|"+"\n"
Print File ARQ "|9900|9900|"+StrVal(C9900)+"|"+"\n"
Print File ARQ "|9900|9990|1|"+"\n"
Print File ARQ "|9900|9999|1|"+"\n"

;--- Registro 9990: Encerramento do Bloco 9 ------------------------------------
Print File ARQ "|9990|"+StrVal(C9990)+"|"+"\n"

;--- Registro 9999: Encerramento do Arquivo Digital ----------------------------
Print File ARQ "|9999|"+StrVal(C9999)+"|"+"\n"

EndProc  ; (Gera_Arquivo_Texto)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
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: 
       Switch
         Case Campo="TG_MOTINV" :
            ShowPopup " Motivos do invent rio " CENTERED
            "~1~=No final do per¡odo                                                      " : "" : "01",
            "~2~=Na mundan‡a de forma de tributa‡Æo da mercadoria (ICMS)                  " : "" : "02",
            "~3~=Solicita‡Æo da baixa cadastral, paralisa‡Æo tempor ria e outras situa‡äes" : "" : "03",
            "~4~=Na altera‡Æo de regime de pagamento- condi‡Æo do contribuinte            " : "" : "04",
            "~5~=Por determina‡Æo do fisco                                                " : "" : "05",
            "~C~ancelar          " : " Cancelar a Opera‡„o"             : "CANCELAR"
            EndMenu
             To MenuVar
             VSDGMOTINV=MenuVar 
            Switch
             Case MenuVar="01" : VSDGNOMMOTINV="PERIODO" 
             Case MenuVar="02" : VSDGNOMMOTINV="MUDAN€A ICMS"
             Case MenuVar="03" : VSDGNOMMOTINV="BAIXA CADASTRAL"
             Case MenuVar="04" : VSDGNOMMOTINV="ALTERA€ÇO REGIME PAGTO"
             Case MenuVar="05" : VSDGNOMMOTINV="ORDEM FISCO"
             OtherWise         : VSDGMOTINV="" VSDGNOMMOTINV=""
            EndSwitch            
         OtherWise              : Dialog_F1()
       EndSwitch
     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_OPCOES"        : Campo="TG_DTFIM"
            Case Campo="TG_INVENT"        : Campo="TG_OPCOES"
            Case Campo="TG_MOTINV"        : Campo="TG_INVENT"
            Case Campo="TG_FINALIDADE"    : Campo="TG_INVENT"
            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"    :
                         If Not IsBlank(VSDGEMPRESA)
                            Then Campo="TG_DTINI"
                            Else VSDGNOMEMP=""
                         EndIf
                    Case Campo="TG_DTINI"      :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"      : Campo="TG_OPCOES"
                    Case Campo="TG_OPCOES"     : Campo="TG_INVENT"
                    Case Campo="TG_INVENT"     : 
                         If VSDGINVENT[1]
                            Then Campo="TG_MOTINV"  
                            Else Campo="TG_FINALIDADE"
                         EndIf
                    Case Campo="TG_MOTINV"     : 
                         VSDGMOTINV=ControlValue("TG_MOTINV")
                         If Not ISBlank(VSDGMOTINV)
                            Then 
                                  Switch
                                   Case VSDGMOTINV="01" : VSDGNOMMOTINV="PERIODO" 
                                   Case VSDGMOTINV="02" : VSDGNOMMOTINV="MUDAN€A ICMS"
                                   Case VSDGMOTINV="03" : VSDGNOMMOTINV="BAIXA CADASTRAL"
                                   Case VSDGMOTINV="04" : VSDGNOMMOTINV="ALTERA€ÇO REGIME PAGTO"
                                   Case VSDGMOTINV="05" : VSDGNOMMOTINV="ORDEM FISCO"
                                   OtherWise            : VSDGMOTINV="" VSDGNOMMOTINV=""
                                  EndSwitch            
                                 
                                 Campo="TG_FINALIDADE"  
                            Else FastMSg("C¢digo invalido !") 
                         EndIf
                    Case Campo="TG_FINALIDADE" : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe uma Empresa"
  Case Campo="TG_DTINI":
       MSG_CAMPO="Informe a Data Inicial"
  Case Campo="TG_FINALIDADE":
       MSG_CAMPO="Selecione uma op‡„o !"
       TECLA    ="=Selecionar  "
  Case Campo="TG_OPCOES" Or
       Campo="TG_INVENT":
       MSG_CAMPO="Selecione uma ou mais op‡oes se desejar !"
       TECLA    ="=Mover  Barra de espa‡o=Marca/Desmarca  "
  Case Campo="TG_MOTINV":
       MSG_CAMPO="Informe o motivo do invent rio"
       TECLA    ="F1=Consultar"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
LimpAguarde()

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

Array VSDGOPCAO[9]
Array VSDGINVENT[1]

VSDGOPCAO[9] =True

VSDGMOTINV   =""
VSDGNOMMOTINV=""

While True
  ShowDialog "Gera‡„o arquivo SPED/EFD ICMS/IPI" Proc "SD_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140    
     @ 02,19   Height 20 Width 70

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 1,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA" To VSDGEMPRESA
    Accept @ 1,09 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMP" To VSDGNOMEMP

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

    Frame Single From 05,01 to 15,25
    Label  @ 05,02 "Op‡”es de Blocos " For "TG_OPCOES"
    CheckBoxes @6,02 Height 9 Width 17 Tag "TG_OPCOES"
    "Bloco 0             " to VSDGOPCAO[1],
    "Bloco C             " to VSDGOPCAO[2],
    "Bloco D             " to VSDGOPCAO[3],
    "Bloco E             " to VSDGOPCAO[4],
    "Bloco G             " to VSDGOPCAO[5],
    "Bloco H             " to VSDGOPCAO[6],
    "Bloco 1             " to VSDGOPCAO[7],
    "Bloco 9             " to VSDGOPCAO[8],
    "Todos               " to VSDGOPCAO[9]

    Frame Single From 05,26 to 08,66
    Label  @ 05,27 "Op‡„o Invent rio " For "TG_INVENT"
    CheckBoxes @06,27 Height 1 Width 26 Tag "TG_INVENT"
    "Per¡odo referente" to VSDGINVENT[1]

    Label  @ 07,27 "Motivo"  For "TG_MOTINV"
    Accept @ 07,35 Width 05 "A2"  Picture "[&,#][#*#]" Tag "TG_MOTINV" To VSDGMOTINV
    Accept @ 07,40 Width 25 "A20" Picture "!*!" Tag "TG_NOMMOTINV" To VSDGNOMMOTINV

    Frame Single From 09,26 to 13,66
    Label @ 10,27 "Finalidade " For "TG_FINALIDADE"
    RadioButtons @ 11,27 Height 2 Width 38
      "~0~ Remessa do arquivo original",
      "~1~ Remessa do arquivo substituto"
        Tag "TG_FINALIDADE"
        To VSDGFINAL

     Pushbutton @ 16,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
     Pushbutton @ 16,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf

  If (VSDGDTFIM=BlankDate() or VSDGDTINI=BlankDate()) Or
     (Month(VSDGDTINI)<>Month(VSDGDTFIM)) Or
     (Year(VSDGDTINI)<>Year(VSDGDTFIM))
     Then Mensagem("Per¡odo de data invalida !")
          Loop
  EndIf

  LimpaRodape(0)
  
  MES=AlinhM(StrVal(Month(VSDGDTFIM)),2)
  ANO=Year(VSDGDTFIM)
  If MES="02" or VSDGINVENT[1]
     Then If MES="02"
             Then MES_ESTQ="12"
                  ANO_ESTQ=AlinhM(StrVal(Year(VSDGDTFIM)-1),4)
             Else MES_ESTQ=AlinhM(StrVal(Month(VSDGDTFIM)),2)
                  ANO_ESTQ=AlinhM(StrVal(Year(VSDGDTFIM)),4)
           EndIf
          
           If Not Monta_Estoque()
              Then ;Loop
           EndIf
  EndIf

  Switch
    Case VSDGFINAL=1 : FINALIDADE="0"
    Case VSDGFINAL=2 : FINALIDADE="1"
  EndSwitch

  LimpaRodape(0)
  
  If Not Inicio()
     Then Loop
  Endif   

;--- Monta Blocos --------------------------------------------------------------
  If VSDGOPCAO[9] Or VSDGOPCAO[1]
     Then If Not Monta_Bloco0()
            Then Do_It!
                 ClearAll
                 Loop
          EndIf
  EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[2] Then Monta_BlocoC() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[3] Then Monta_BlocoD() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[4] Then Monta_BlocoE() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[5] Then Monta_BlocoG() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[6] Then Monta_BlocoH() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[7] Then Monta_Bloco1() EndIf

;--- Gera TXT Blocos -----------------------------------------------------------
  If VSDGOPCAO[9] Or VSDGOPCAO[1] Then GERA_BLOCO0() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[2] Then GERA_BLOCOC() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[3] Then GERA_BLOCOD() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[4] Then GERA_BLOCOE() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[5] Then GERA_BLOCOG() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[6] Then GERA_BLOCOH() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[7] Then GERA_BLOCO1() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[8] Then GERA_BLOCO9() EndIf

;--- Libera TXT e exibe MSG ----------------------------------------------------
  Close Printer
  
  LimpaRodape(0)
  
  COR_MENSAGEM="1"
  MSG=    "// Gerado o arquivo: // //["+SubStr(Directory(),1,2)+ARQ+"] // //"
  MSG=MSG+"* Salve sempre este arquivo, em uma pasta de controle para o SPED;     //"
  MSG=MSG+"* Organize os mesmos em pastas por ano e mˆs referente;                //"
  MSG=MSG+"* Fa‡a sempre o BACKUP dos mesmos;                                     //"
  MSG=MSG+"* SPEDMMAA => SPED=SPED ICMS/IPI  MM=Mˆs  AA=Ano                       //"
  MSG=MSG+"* Envie este arquivo para seu contador prosseguir com a escritura‡Æo ! //"
  Mensagem(MSG)
  Release Vars COR_MENSAGEM

  If IsTable("Answer")   Then Delete("Answer")   EndIf
  If IsAssigned(TabelaI) And
     IsTable(TabelaI)    Then Delete(TabelaI)     EndIf
  If IsAssigned(Tabela_ERRO_ITEM) And
     IsTable(Tabela_ERRO_ITEM) Then Delete(Tabela_ERRO_ITEM) EndIf

  LimpaRodape(0)

EndWhile
ClearAll
Release Vars All
Release Procs All
