;* Sped_efd *******************************************************************
;* Geracao arquivo SPED_EFD                                                   *
;******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/12/2009 por Anivel Augusto Rodrigues
;Ultima Alteracao:   /  /     por                
;Motivo Alteracao:                             

;*******************************************************************************
;* Rotina Estoque                                                              *
;*******************************************************************************
Proc Monta_Estoque()
Aguarde("Aguarde, Processando Invent rio 1/2")

{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"
{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 n„o ser  gerado!")
				Return False
EndIf

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

CoEdit Tabela_ERRO_ITEM,"\\Sistemas\\Estoque\\Itens","Answer"
NR=NRecords("Answer")
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, Processando Invent rio 2/2",45," ")+BARRA_STRING)

  ITEM =[Codigo do Item   ]

  Moveto "\\Sistemas\\Estoque\\Itens"
  Moveto [Codigo do Item]
  Locate ITEM
  If Not RetVal
     Then Moveto Tabela_ERRO_ITEM
          End
          Down
          [Codigo do Item       ]=ITEM
          [MSG_Erro             ]="ITEM NAO CADASTRADO"
          okproces=False
     Else okproces=true
  EndIf

  If okproces
     Then Moveto "Answer"

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

  Moveto "Answer"
EndScan
Do_It!
ClearAll
     
If Not IsEmpty(Tabela_ERRO_ITEM)
   Then 
        Aguarde("Aguarde, Relat¢rio de inconsistˆncia no invent rio 1/2")
        
        {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 inconsistˆncia 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 SPED 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)


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

;---- Esvazia Tabelas SPED ----------------------------------------------------- 
Empty("SPED0000")
Empty("SPED0005")
Empty("SPED0015")
Empty("SPED0100")
Empty("SPED0150")
Empty("SPED0175")
Empty("SPED0190")
Empty("SPED0200")
Empty("SPED0205")

Empty("SPED0400")
Empty("SPED0450")
Empty("SPED0460")

Empty("SPEDC100")
Empty("SPEDC105")
Empty("SPEDC110")
Empty("SPEDC111")
Empty("SPEDC112")
Empty("SPEDC113")
Empty("SPEDC114")
Empty("SPEDC115")
Empty("SPEDC120")
Empty("SPEDC130")
Empty("SPEDC140")
Empty("SPEDC141")
Empty("SPEDC160")
Empty("SPEDC170")
Empty("SPEDC172")
Empty("SPEDC179")
Empty("SPEDC190")
Empty("SPEDC195")

Empty("SPEDC300")
Empty("SPEDC310")
Empty("SPEDC320")
Empty("SPEDC321")
Empty("SPEDC350")
Empty("SPEDC370")
Empty("SPEDC390")

Empty("SPEDC400")
Empty("SPEDC405")
Empty("SPEDC410")
Empty("SPEDC420")
Empty("SPEDC425")
Empty("SPEDC460")
Empty("SPEDC470")
Empty("SPEDC490")

Empty("SPEDC500")
Empty("SPEDC590")
Empty("SPEDC791")

Empty("SPEDD100")
Empty("SPEDD190")

Empty("SPEDD500")
Empty("SPEDD590")

Empty("SPEDE001")

Empty("SPEDH005")
Empty("SPEDH010")

;Empty("SPED1006")
;Empty("SPED1700")

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

;---- 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])
    Case [\Sistemas\Cadastro\Destinat->Tipo Pessoa]="FISICA"   : [CPF ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->CGC])
  EndSwitch
  [IE            ]=Tira_CharNum([\Sistemas\Cadastro\Destinat->IE])
  [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, SPED0190, SPED0205
;*******************************************************************************
Proc Grava_Itens_Unidades(Codigo,Docto)
Private Codigo, TabAtual, UN, DESCR, i, Docto  

TabAtual=Table()

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

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

  For i From 1 to 2
    Switch
     Case i=1 : UN=[\Sistemas\Estoque\Itens->Unidade Fiscal ]
     Case i=2 : UN=[\Sistemas\Estoque\Itens->Unidade Interna]
    EndSwitch
    DESCR=""
    
    Moveto "\\Sistemas\\Estoque\\Unidades"
    Moveto [Sigla da Unidade]
    Locate UN
    If Not Retval
       Then Mensagem("Erro dados UNIDADE-[UNIDADES] : "+UN+"//Item : "+Codigo)
       Else DESCR=[\Sistemas\Estoque\Unidades->Descricao da Unidade]
    EndIf  
    
    Moveto "SPED0190"
    Moveto [UNID]
    Locate UN
    If Not RetVal
       Then End
            Down   
            [UNID  ]=UN
            [DESCR ]=DESCR
            UnLockRecord
    EndIf
  EndFor

  Moveto "SPED0200"
  End
  Down
  [COD_ITEM        ]=Codigo
  [DESCR_ITEM      ]=[\Sistemas\Estoque\Itens->Descricao do Item]
  [COD_BARRA       ]=[\Sistemas\Estoque\Itens->Codigo de Barras]
  [COD_ANT_ITEM    ]=""
  [UNID_INV        ]=UN
  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
  [COD_NCM         ]=[\Sistemas\Estoque\Itens->NCM]
  [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 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
  Moveto "SPED0400"
  Moveto [COD_NAT]
  Locate Codigo
  If RetVal
     Then QuitLoop
  EndIf

  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"
  End
  Down   
  [COD_NAT       ]=Codigo                               
  [DESCR_NAT     ]=DESCR_NAT
  UnLockRecord
  
  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 ------------------------------------------------------------ 
Moveto "SPED0000"
End Down
[COD_VER                 ]="004" ;*** Codigo_Versao_SPED ***
[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]
[IND_ATIV                ]=[\Sistemas\Icms_ipi\DadSped->Empresa_IND_ATIV]
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 "\\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    

  Grava_Participantes([Codigo],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])
  Grava_NaturezaOperacao([Tipo de Operacao],"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          ]=0
      [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 ]
      [CHV_NFE          ]=""
      [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                                             : [IND_PGTO]="9"
      EndSwitch
      [VL_DESC          ]=[\Sistemas\Estoque\NotaEC->Valor Desconto      ]
      [VL_ABAT_NT       ]=0
      [VL_MERC          ]=[\Sistemas\Estoque\NotaEC->Valor Mercadoria    ]
      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
      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 

  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
              OtherWise: ; Notas Fiscais
                Grava_Itens_Unidades([Codigo do Item],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])
                Seq=Seq+1 
                 
                Moveto "SPEDC170"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [NUM_ITEM              ]=[\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               ]=[\Sistemas\Estoque\NotaEI->Preco Total]
                [VL_DESC               ]=0
                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              ]=[\Sistemas\Estoque\NotaEI->Tipo Tributacao]
                [CFOP                  ]=[\Sistemas\Estoque\NotaEI->CFO]
                [COD_NAT               ]=[\Sistemas\Estoque\NotaEC->Tipo de Operacao]

                If [\Sistemas\Estoque\NotaEI->Aliquota de ICMS]>0
                   Then BC =[\Sistemas\Estoque\NotaEI->Preco Total]
                        ARD=[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]
                        If ARD>0
                           Then BC=NDecimal(BC-((BC*ARD)/100),2)
                        EndIf    
                        [VL_BC_ICMS   ]=BC
                        [ALIQ_ICMS    ]=[\Sistemas\Estoque\NotaEI->Aliquota de ICMS]
                        [VL_ICMS      ]=[\Sistemas\Estoque\NotaEI->Valor do ICMS]
                EndIf
                If [\Sistemas\Estoque\NotaEC->Valor BCSubstituicao ICMS]>0 And
                   [\Sistemas\Estoque\NotaEI->Tributacao de ICMS]="S"
                   Then ITST=[\Sistemas\Estoque\NotaEC->Soma Itens Substituicao]
                        TX  =([\Sistemas\Estoque\NotaEI->Preco Total]/ITST)*100
                        [VL_BC_ICMS_ST]=NDecimal(([\Sistemas\Estoque\NotaEC->Valor BCSubstituicao ICMS]*TX)/100,2)
                        [ALIQ_ST      ]=[\Sistemas\Estoque\NotaEC->Aliquota de ICMS]
                        [VL_ICMS_ST   ]=NDecimal(([\Sistemas\Estoque\NotaEC->Valor Substituicao ICMS]*TX)/100,2)
                EndIf   

                Switch
                  Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
                  OtherWise                      :[IND_APUR]="0"
                EndSwitch
                [CST_IPI               ]=[\Sistemas\Estoque\NotaEI->IPI_CST]
                [COD_ENQ               ]=""
                If [\Sistemas\Estoque\NotaEI->Aliquota de IPI]>0
                   Then BC =[\Sistemas\Estoque\NotaEI->Preco Total]
                        ARD=[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCIPI]
                        If ARD>0
                           Then BC=NDecimal(BC-((BC*ARD)/100),2)
                        EndIf    
                        [VL_BC_IPI     ]=BC
                        [ALIQ_IPI      ]=[\Sistemas\Estoque\NotaEI->Aliquota de IPI]
                        [VL_IPI        ]=[\Sistemas\Estoque\NotaEI->Valor do IPI]
                EndIf

                [CST_PIS               ]="99"
                [VL_BC_PIS             ]=0
                [ALIQ_PIS              ]=0
                [QUANT_BC_PIS          ]=0
                [ALIQ_PIS2             ]=0
                [VL_PIS                ]=0
                [CST_COFINS            ]="99"
                [VL_BC_COFINS          ]=0
                [ALIQ_COFINS           ]=0
                [QUANT_BC_COFINS       ]=0
                [ALIQ_COFINS2          ]=0
                [VL_COFINS             ]=0

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

            ;--- Analitico CST,CFOP,ALIQ_ICMS ----------------------------------
            Switch
              Case [\Sistemas\Estoque\NotaEC->Codigo do Documento]="CEM": ; Nota Energia
                CST =[\Sistemas\Estoque\NotaEI->Tipo Tributacao ]
                CFOP=[\Sistemas\Estoque\NotaEI->CFO             ]
                ALIQ=[\Sistemas\Estoque\NotaEI->Aliquota de ICMS]
                If IsBlank(ALIQ) Then ALIQ=0 EndIf

                Moveto "SPEDC590"
                Moveto [Lancamento]
                Locate NLANC,CST,CFOP,ALIQ
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Estoque\NotaEI->Preco Total]
                BC  =0
                RDBC=0
                If [\Sistemas\Estoque\NotaEI->Valor do ICMS]>0
                   Then
                        BC  =[\Sistemas\Estoque\NotaEI->Preco Total]
                        If [\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]>0
                           Then
                        EndIf
                EndIf
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Estoque\NotaEI->Valor do ICMS]
                [VL_BC_ICMS_ST]=[VL_BC_ICMS  ]+0
                [VL_ICMS_ST   ]=[VL_ICMS_ST  ]+0
                [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
                [COD_OBS      ]=""        
                UnLockRecord

              OtherWise: ; Notas Fiscais
                CST =[\Sistemas\Estoque\NotaEI->Tipo Tributacao ]
                CFOP=[\Sistemas\Estoque\NotaEI->CFO             ]
                ALIQ=[\Sistemas\Estoque\NotaEI->Aliquota de ICMS]
                If IsBlank(ALIQ) Then ALIQ=0 EndIf

                Moveto "SPEDC190"
                Moveto [Lancamento]
                Locate NLANC,CST,CFOP,ALIQ
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Estoque\NotaEI->Preco Total]
                BC  =0
                RDBC=0
                If [\Sistemas\Estoque\NotaEI->Valor do ICMS]>0
                   Then
                        BC  =[\Sistemas\Estoque\NotaEI->Preco Total]
                        If [\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]>0
                           Then
                        EndIf
                EndIf
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Estoque\NotaEI->Valor do ICMS]
                [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
                [VL_IPI       ]=[VL_IPI      ]+[\Sistemas\Estoque\NotaEI->Valor do IPI ]
                [COD_OBS      ]=""        
                UnLockRecord

            EndSwitch

            Moveto "\\Sistemas\\Estoque\\NotaEI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  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 "SPEDC100"
View "SPEDC140"
View "SPEDC141"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "\\Sistemas\\Vendas\\Destin"
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 Emissao]<VSDGDTINI Or [Data de Emissao]>VSDGDTFIM)
     Then Loop
  EndIf    
  If [Codigo da Empresa]<>VSDGEMPRESA
     Then Loop
  EndIf    

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

  NLanc=NLanc+1  

  Moveto "SPEDC100"
  End 
  Down 
  [Lancamento       ]=NLanc
  [IND_OPER         ]="0"
  [IND_EMIT         ]="0"
  Switch
    Case [\Sistemas\Vendas\NotaC->Codigo do Documento]="NFE0" : MODELO="55"
    Case [\Sistemas\Vendas\NotaC->Codigo do Documento]="NFE1" : MODELO="55"
    Case [\Sistemas\Vendas\NotaC->Codigo do Documento]="NFE9" : 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  ]
  [NUM_DOC          ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
  [CHV_NFE          ]=[\Sistemas\Vendas\NotaC->Chave_Acesso_NFe    ]
  
  If [COD_SIT]="02" Or
     [COD_SIT]="03" Or
     [COD_SIT]="04" Or
     [COD_SIT]="05"   
     Then UnLockRecord
          Moveto "\\Sistemas\\Vendas\\NotaC"
          Loop
  EndIf        

  [COD_PART         ]=[\Sistemas\Vendas\NotaC->Codigo]
  [DT_DOC           ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
  [DT_E_S           ]=[\Sistemas\Vendas\NotaC->Data de Saida       ]
  [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                                           : [IND_PGTO]="9"
  EndSwitch
  [VL_DESC          ]=[\Sistemas\Vendas\NotaC->Valor Desconto      ]
  [VL_ABAT_NT       ]=0
  [VL_MERC          ]=[\Sistemas\Vendas\NotaC->Valor Mercadoria    ]
  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"
  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           ]=0
  [VL_COFINS        ]=0
  [VL_PIS_ST        ]=0
  [VL_COFINS_ST     ]=0
  UnLockRecord

  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 ]
     
            ;--- Detalhar Item -------------------------------------------------
                Grava_Itens_Unidades([Codigo do Item],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                Seq=Seq+1 
                 
                Moveto "SPEDC170"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [NUM_ITEM              ]=[\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               ]=[\Sistemas\Vendas\NotaI->Preco Total]
                [VL_DESC               ]=0
                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              ]=[\Sistemas\Vendas\NotaI->Tipo Tributacao]
                [CFOP                  ]=[\Sistemas\Vendas\NotaI->CFO]
                [COD_NAT               ]=[\Sistemas\Vendas\NotaC->Codigo da Destinacao]

                If [\Sistemas\Vendas\NotaI->Aliquota de ICMS]>0
                   Then BC =[\Sistemas\Vendas\NotaI->Preco Total]
                        ARD=[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
                        If ARD>0
                           Then BC=NDecimal(BC-((BC*ARD)/100),2)
                        EndIf    
                        [VL_BC_ICMS   ]=BC
                        [ALIQ_ICMS    ]=[\Sistemas\Vendas\NotaI->Aliquota de ICMS]
                        [VL_ICMS      ]=[\Sistemas\Vendas\NotaI->Valor do ICMS]
                EndIf
                If [\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS]>0 And
                   [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="S"
                   Then ITST=[\Sistemas\Vendas\NotaC->Soma Itens Substituicao]
                        TX  =([\Sistemas\Vendas\NotaI->Preco Total]/ITST)*100
                        [VL_BC_ICMS_ST]=NDecimal(([\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS]*TX)/100,2)
                        [ALIQ_ST      ]=[\Sistemas\Vendas\NotaC->Aliquota de ICMS]
                        [VL_ICMS_ST   ]=NDecimal(([\Sistemas\Vendas\NotaC->Valor Substituicao ICMS]*TX)/100,2)
                EndIf   

                Switch
                  Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
                  OtherWise                      :[IND_APUR]="0"
                EndSwitch
                [CST_IPI               ]=[\Sistemas\Vendas\NotaI->IPI_CST]
                [COD_ENQ               ]=""
                If [\Sistemas\Vendas\NotaI->Aliquota de IPI]>0
                   Then BC =[\Sistemas\Vendas\NotaI->Preco Total]
                        ARD=[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCIPI]
                        If ARD>0
                           Then BC=NDecimal(BC-((BC*ARD)/100),2)
                        EndIf    
                        [VL_BC_IPI     ]=BC
                        [ALIQ_IPI      ]=[\Sistemas\Vendas\NotaI->Aliquota de IPI]
                        [VL_IPI        ]=[\Sistemas\Vendas\NotaI->Valor do IPI]
                EndIf

                [CST_PIS               ]="99"
                [VL_BC_PIS             ]=0
                [ALIQ_PIS              ]=0
                [QUANT_BC_PIS          ]=0
                [ALIQ_PIS2             ]=0
                [VL_PIS                ]=0
                [CST_COFINS            ]="99"
                [VL_BC_COFINS          ]=0
                [ALIQ_COFINS           ]=0
                [QUANT_BC_COFINS       ]=0
                [ALIQ_COFINS2          ]=0
                [VL_COFINS             ]=0

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

            ;--- Analitico CST,CFOP,ALIQ_ICMS ----------------------------------
            CST =[\Sistemas\Vendas\NotaI->Tipo Tributacao ]
            CFOP=[\Sistemas\Vendas\NotaI->CFO             ]
            ALIQ=[\Sistemas\Vendas\NotaI->Aliquota de ICMS]
            If IsBlank(ALIQ) Then ALIQ=0 EndIf

            Moveto "SPEDC190"
            Moveto [Lancamento]
            Locate NLANC,CST,CFOP,ALIQ
            If Not RetVAl
               Then End
                    Down
                    [Lancamento   ]=NLANC
                    [CST_ICMS     ]=CST
                    [CFOP         ]=CFOP
                    [ALIQ_ICMS    ]=ALIQ
            EndIf
            [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Vendas\NotaI->Preco Total]
            BC  =0
            RDBC=0
            If [\Sistemas\Vendas\NotaI->Valor do ICMS]>0
               Then
                    BC  =[\Sistemas\Vendas\NotaI->Preco Total]
                    If [\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]>0
                       Then
                    EndIf
            EndIf
            [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
            [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Vendas\NotaI->Valor do ICMS]
            [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
            [VL_IPI       ]=[VL_IPI      ]+[\Sistemas\Vendas\NotaI->Valor do IPI ]
            [COD_OBS      ]=""        
            UnLockRecord

            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\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 ]
                    seq=seq+1

                    Moveto "SPEDC141"
                    End
                    Down
                    [Lancamento       ]=NLanc
                    [Sequencia        ]=Seq
                    [NUM_PARC         ]=Seq
                    [DT_VCTO          ]=[\Sistemas\Vendas\NotaCP->Data de Vencimento]
                    [VL_PARC          ]=[\Sistemas\Vendas\NotaCP->Valor do Documento]
                    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 "SPEDC100"
View "SPEDC140"
View "SPEDC141"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "\\Sistemas\\Vendas\\Destin"
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    

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

  NLanc=NLanc+1  

  Moveto "SPEDC100"
  End 
  Down 
  [Lancamento       ]=NLanc
  [IND_OPER         ]="1"
  [IND_EMIT         ]="0"
  Switch
    Case [\Sistemas\Vendas\NotaC->Codigo do Documento]="NFE0" : MODELO="55"
    Case [\Sistemas\Vendas\NotaC->Codigo do Documento]="NFE1" : MODELO="55"
    Case [\Sistemas\Vendas\NotaC->Codigo do Documento]="NFE9" : 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]
  [NUM_DOC          ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
  [CHV_NFE          ]=[\Sistemas\Vendas\NotaC->Chave_Acesso_NFe    ]

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

  [COD_PART         ]=[\Sistemas\Vendas\NotaC->Codigo]
  [DT_DOC           ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
  [DT_E_S           ]=[\Sistemas\Vendas\NotaC->Data de Saida       ]
  [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                                           : [IND_PGTO]="9"
  EndSwitch
  [VL_DESC          ]=[\Sistemas\Vendas\NotaC->Valor Desconto      ]
  [VL_ABAT_NT       ]=0
  [VL_MERC          ]=[\Sistemas\Vendas\NotaC->Valor Mercadoria    ]
  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"
  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           ]=0
  [VL_COFINS        ]=0
  [VL_PIS_ST        ]=0
  [VL_COFINS_ST     ]=0
  UnLockRecord

  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 ]
     
            ;--- Detalhar Item -------------------------------------------------
            Grava_Itens_Unidades([Codigo do Item],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
            Seq=Seq+1 
             
            Moveto "SPEDC170"
            End
            Down
            [Lancamento            ]=NLanc 
            [Sequencia             ]=Seq
            [NUM_ITEM              ]=[\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               ]=[\Sistemas\Vendas\NotaI->Preco Total]
            [VL_DESC               ]=0
            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              ]=[\Sistemas\Vendas\NotaI->Tipo Tributacao]
            [CFOP                  ]=[\Sistemas\Vendas\NotaI->CFO]
            [COD_NAT               ]=[\Sistemas\Vendas\NotaC->Codigo da Destinacao]

            If [\Sistemas\Vendas\NotaI->Aliquota de ICMS]>0
               Then BC =[\Sistemas\Vendas\NotaI->Preco Total]
                    ARD=[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
                    If ARD>0
                       Then BC=NDecimal(BC-((BC*ARD)/100),2)
                    EndIf    
                    [VL_BC_ICMS   ]=BC
                    [ALIQ_ICMS    ]=[\Sistemas\Vendas\NotaI->Aliquota de ICMS]
                    [VL_ICMS      ]=[\Sistemas\Vendas\NotaI->Valor do ICMS]
            EndIf
            If [\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS]>0 And
               [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="S"
               Then 
                   ;ITST=[\Sistemas\Vendas\NotaC->Soma Itens Substituicao]
                   ;TX  =([\Sistemas\Vendas\NotaI->Preco Total]/ITST)*100
                   ;[VL_BC_ICMS_ST]=NDecimal(([\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS]*TX)/100,2)
                   ;[ALIQ_ST      ]=[\Sistemas\Vendas\NotaC->Aliquota de ICMS]
                   ;[VL_ICMS_ST   ]=NDecimal(([\Sistemas\Vendas\NotaC->Valor Substituicao ICMS]*TX)/100,2)
            EndIf   

            Switch
              Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
              OtherWise                      :[IND_APUR]="0"
            EndSwitch
            [CST_IPI               ]=[\Sistemas\Vendas\NotaI->IPI_CST]
            [COD_ENQ               ]=""
            If [\Sistemas\Vendas\NotaI->Aliquota de IPI]>0
               Then BC =[\Sistemas\Vendas\NotaI->Preco Total]
                    ARD=[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCIPI]
                    If ARD>0
                       Then BC=NDecimal(BC-((BC*ARD)/100),2)
                    EndIf    
                    [VL_BC_IPI     ]=BC
                    [ALIQ_IPI      ]=[\Sistemas\Vendas\NotaI->Aliquota de IPI]
                    [VL_IPI        ]=[\Sistemas\Vendas\NotaI->Valor do IPI]
            EndIf

            [CST_PIS               ]="99"
            [VL_BC_PIS             ]=0
            [ALIQ_PIS              ]=0
            [QUANT_BC_PIS          ]=0
            [ALIQ_PIS2             ]=0
            [VL_PIS                ]=0
            [CST_COFINS            ]="99"
            [VL_BC_COFINS          ]=0
            [ALIQ_COFINS           ]=0
            [QUANT_BC_COFINS       ]=0
            [ALIQ_COFINS2          ]=0
            [VL_COFINS             ]=0

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

            ;--- Analitico CST,CFOP,ALIQ_ICMS ----------------------------------
            CST =[\Sistemas\Vendas\NotaI->Tipo Tributacao ]
            CFOP=[\Sistemas\Vendas\NotaI->CFO             ]
            ALIQ=[\Sistemas\Vendas\NotaI->Aliquota de ICMS]
            If IsBlank(ALIQ) Then ALIQ=0 EndIf

            Moveto "SPEDC190"
            Moveto [Lancamento]
            Locate NLANC,CST,CFOP,ALIQ
            If Not RetVAl
               Then End
                    Down
                    [Lancamento   ]=NLANC
                    [CST_ICMS     ]=CST
                    [CFOP         ]=CFOP
                    [ALIQ_ICMS    ]=ALIQ
            EndIf
            [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Vendas\NotaI->Preco Total]
            BC  =0
            RDBC=0
            If [\Sistemas\Vendas\NotaI->Valor do ICMS]>0
               Then
                    BC  =[\Sistemas\Vendas\NotaI->Preco Total]
                    If [\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]>0
                       Then
                    EndIf
            EndIf
            [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
            [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Vendas\NotaI->Valor do ICMS]
            [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
            [VL_IPI       ]=[VL_IPI      ]+[\Sistemas\Vendas\NotaI->Valor do IPI ]
            [COD_OBS      ]=""        
            UnLockRecord

            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\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 ]
                    seq=seq+1

                    Moveto "SPEDC141"
                    End
                    Down
                    [Lancamento       ]=NLanc
                    [Sequencia        ]=Seq
                    [NUM_PARC         ]=Seq
                    [DT_VCTO          ]=[\Sistemas\Vendas\NotaCP->Data de Vencimento]
                    [VL_PARC          ]=[\Sistemas\Vendas\NotaCP->Valor do Documento]
                    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\\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          ]=[\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
              [COD_CTA           ]=""
              UnLockRecord
      EndIf
  EndSwitch  

  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 ]

            Seq=Seq+1 
     
            ;--- Detalhar Item -------------------------------------------------
            If IND_PERFIL="A"
               Then Grava_Itens_Unidades([Codigo do Item],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                     
                    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          ]=[\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           ]=[\Sistemas\Vendas\NotaI->Preco Total]
                    [VL_DESC           ]=0
                    UnLockRecord
        
                    ;--- Analitico CST,CFOP,ALIQ_ICMS ----------------------------------
                    CST =[\Sistemas\Vendas\NotaI->Tipo Tributacao ]
                    CFOP=[\Sistemas\Vendas\NotaI->CFO             ]
                    ALIQ=ALIQ
                    If IsBlank(ALIQ) Then ALIQ=0 EndIf
        
                    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,CFOP,ALIQ
                    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
                            [CFOP              ]=CFOP
                            [ALIQ_ICMS         ]=ALIQ
                    EndIf
                    [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Vendas\NotaI->Preco Total]
                    BC  =0
                    RDBC=0
                    If [\Sistemas\Vendas\NotaI->Valor do ICMS]>0
                       Then
                            BC  =[\Sistemas\Vendas\NotaI->Preco Total]
                            If [\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]>0
                               Then
                            EndIf
                    EndIf
                    [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                    [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Vendas\NotaI->Valor do ICMS]
                    [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
                    [COD_OBS      ]=""        
                    UnLockRecord
            EndIf
             
            ;--- Analitico CST,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,CFOP,ALIQ
                     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
                             [CFOP              ]=CFOP
                             [ALIQ_ICMS         ]=ALIQ
                     EndIf
                     [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Vendas\NotaI->Preco Total]
                     [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                     [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Vendas\NotaI->Valor do ICMS]
                     [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
                     [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     ]+[\Sistemas\Vendas\NotaI->Preco Total]
                    [VL_DESC      ]=[VL_DESC     ]+0 
                    [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                    [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Vendas\NotaI->Valor do ICMS]
                    [VL_PIS       ]=[VL_PIS      ]+0 
                    [VL_COFINS    ]=[VL_COFINS   ]+0 
                    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    ]
                  [COD_CTA           ]=""
          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\\ECF_T"
CoEdit "\\Sistemas\\Vendas\\ECF_C"
NR = NRecords("\\Sistemas\\Vendas\\ECF_C")

SERIE_ANT="****"
EMPRE_ANT="****"
Inicio=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 [Codigo da Empresa ]<>EMPRE_ANT Or
     [Serie do Documento]<>SERIE_ANT 
     Then 
          EMPRE_ANT  =[Codigo da Empresa ]
          SERIE_ANT  =[Serie do Documento]
          
          Moveto "SPEDC400"
          End
          Down
          [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
          [Serie do Documento]=[\Sistemas\Vendas\ECF_C->Serie do Documento     ]
          [COD_MOD           ]="2D"
          [ECF_MOD           ]=""
          [ECF_FAB           ]=[\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
          [ECF_CX            ]=[\Sistemas\Vendas\ECF_C->Numero do ECF          ]
          UnLockRecord
  EndIf   

  Moveto "SPEDC405"
  End
  Down
  [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
  [Serie do Documento]=[\Sistemas\Vendas\ECF_C->Serie do Documento     ]
  [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
  [DT_DOC            ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
  [CRO               ]=AlinhM(StrVal(NumVal([\Sistemas\Vendas\ECF_C->Contador Reducao])),3)
  [CRZ               ]=[\Sistemas\Vendas\ECF_C->Numero Cupom Inicial   ]
  [NUM_COO_FIN       ]=[\Sistemas\Vendas\ECF_C->Numero Cupom Reducao   ]
  [GT_FIN            ]=[\Sistemas\Vendas\ECF_C->Totalizador Final      ]
  [VL_BRT            ]=[\Sistemas\Vendas\ECF_C->Totalizador Final      ]-
                       [\Sistemas\Vendas\ECF_C->Totalizador Inicial    ]
  UnLockRecord

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

  For wi From 1 To 6
    Moveto "SPEDC420"
    End
    Down
    [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
    [Serie do Documento]=[\Sistemas\Vendas\ECF_C->Serie do Documento     ]
    [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]
    Switch
      Case wi=1: [COD_TOT_PAR ]="F1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Substituicao Tributaria]
      Case wi=2: [COD_TOT_PAR ]="I1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Isento                 ]
      Case wi=3: [COD_TOT_PAR ]="N1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Nao Incidencia         ]
      Case wi=4: [COD_TOT_PAR ]="CANC"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Cancelados             ]
      Case wi=5: [COD_TOT_PAR ]="DESC"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->Descontos              ]
      Case wi=6: [COD_TOT_PAR ]="S1"
                 [VLR_ACUM_TOT]=[\Sistemas\Vendas\ECF_C->ISSQN                  ]
    EndSwitch
    UnLockRecord
  EndFor
  
  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]
    Moveto "SPEDC420"
    End
    Down
    [Codigo da Empresa ]=[\Sistemas\Vendas\ECF_C->Codigo da Empresa      ]
    [Serie do Documento]=[\Sistemas\Vendas\ECF_C->Serie do Documento     ]
    [Data              ]=[\Sistemas\Vendas\ECF_C->Data                   ]    
    [COD_TOT_PAR       ]="T"+Tira_CharNum(Valor_Str([\Sistemas\Vendas\ECF_T->Aliquota de ICMS],2))
    [VLR_ACUM_TOT      ]=[\Sistemas\Vendas\ECF_T->Base de Calculo ICMS]
    UnLockRecord
    
    Moveto "\\Sistemas\\Vendas\\ECF_T"
    Skip
    If Eot() Then QuitLoop EndIf
  EndWhile
  
  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\\NotaI"
Coedit "\\Sistemas\\Vendas\\NotaC"

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

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    

  NLanc=NLanc+1  

  If IND_PERFIL="A"
     Then Moveto "SPEDC460"
          End 
          Down 
          [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
          [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento  ] 
          [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
          [Lancamento        ]=NLanc
          [COD_MOD           ]="2D"  
          [NUM_DOC           ]=[\Sistemas\Vendas\NotaC->Numero do Documento ]
          If [\Sistemas\Vendas\NotaC->Situacao]="C"
             Then [COD_SIT   ]="02"
                  Moveto "\\Sistemas\\Vendas\\NotaC"
                  Loop
             Else [COD_SIT   ]="00"
          EndIf
          [DT_DOC            ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
          [VL_DOC            ]=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal   ]
          [VL_PIS            ]=0
          [VL_COFINS         ]=0
          [CPF_CNPJ          ]=[\Sistemas\Vendas\NotaC->CGC                 ]
          [NOM_ADQ           ]=[\Sistemas\Vendas\NotaC->Razao Social        ]
          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 ]
     
            CST =[\Sistemas\Vendas\NotaI->Tipo Tributacao ]
            CFOP=[\Sistemas\Vendas\NotaI->CFO             ]
            ALIQ=[\Sistemas\Vendas\NotaI->Aliquota de ICMS]
            If [\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]>0
               Then ALIQ=NDecimal(ALIQ-((ALIQ*[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS])/100),2)
            EndIf

            ;--- Detalhar Item -------------------------------------------------
            If IND_PERFIL="A"
               Then Grava_Itens_Unidades([Codigo do Item],"Cupom: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                    Seq=Seq+1 
                     
                    Moveto "SPEDC470"
                    End
                    Down
                    [Codigo da Empresa ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa   ] 
                    [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento  ] 
                    [Data              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
                    [Lancamento        ]=NLanc 
                    [Sequencia         ]=Seq
                    [COD_ITEM          ]=[\Sistemas\Vendas\NotaI->Codigo do Item]
                    [QTD               ]=[\Sistemas\Vendas\NotaI->Quantidade]
                    [QTD_CANC          ]=0
                    [UNID              ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal]
                    [VL_ITEM           ]=[\Sistemas\Vendas\NotaI->Preco Total]
                    [CST_ICMS          ]=[\Sistemas\Vendas\NotaI->Tipo Tributacao]
                    [CFOP              ]=[\Sistemas\Vendas\NotaI->CFO]
        
                    [ALIQ_ICMS         ]=ALIQ
        
                    [VL_PIS            ]=0
                    [VL_COFINS         ]=0
                    UnLockRecord
            EndIf
             
            ;--- Analitico CST,CFOP,ALIQ_ICMS ----------------------------------
            If IsBlank(ALIQ) Then ALIQ=0 EndIf

            Moveto "SPEDC490"
            Moveto [Codigo da Empresa]
            Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa   ],
                   [\Sistemas\Vendas\NotaC->Serie do Documento  ], 
                   [\Sistemas\Vendas\NotaC->Data de Emissao     ],
                   CST,CFOP,ALIQ
            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              ]=[\Sistemas\Vendas\NotaC->Data de Emissao     ] 
                    [CST_ICMS          ]=CST
                    [CFOP              ]=CFOP
                    [ALIQ_ICMS         ]=ALIQ
            EndIf
            [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Vendas\NotaI->Preco Total]

            BC  =0
            RDBC=0
            If [\Sistemas\Vendas\NotaI->Valor do ICMS]>0
               Then
                    BC  =[\Sistemas\Vendas\NotaI->Preco Total]
                    If [\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]>0
                       Then
                    EndIf
            EndIf
            [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
            [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Vendas\NotaI->Valor do ICMS]
            [COD_OBS      ]=""        
            UnLockRecord

            ;--- Resumo de itens do movimento diario ---------------------------
            If IND_PERFIL="B"
               Then COD_TOT_PAR=""
                    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":
                           [COD_TOT_PAR       ]="T"+Tira_CharNum(Valor_Str(ALIQ,2))
                    EndSwitch
        
                    If Not IsBlank(COD_TOT_PAR)
                       Then Moveto "SPEDC425"
                            Moveto [Codigo da Empresa]
                            Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa   ],
                                   [\Sistemas\Vendas\NotaC->Serie do Documento  ], 
                                   [\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   ] 
                                    [Serie do Documento]=[\Sistemas\Vendas\NotaC->Serie do Documento  ] 
                                    [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     ]+[\Sistemas\Vendas\NotaI->Preco Total]
                            [VL_PIS       ]=[VL_PIS      ]+0 
                            [VL_COFINS    ]=[VL_COFINS   ]+0 
                            UnLockRecord
                    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([Codigo],"Nota Entrada: "+[\Sistemas\Estoque\NotaEC->Numero do Documento ])
  Grava_NaturezaOperacao([Tipo de Operacao],"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="12"
        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="09"
        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 ]
      [CHV_CTE          ]=""
      [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 

  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]
     
            ;--- Analitico CST,CFOP,ALIQ_ICMS ----------------------------------
            Switch
              Case MODELO="22": ; Nota Telefone
                CST =[\Sistemas\Estoque\NotaEI->Tipo Tributacao ]
                CFOP=[\Sistemas\Estoque\NotaEI->CFO             ]
                ALIQ=[\Sistemas\Estoque\NotaEI->Aliquota de ICMS]
                If IsBlank(ALIQ) Then ALIQ=0 EndIf

                Moveto "SPEDD590"
                Moveto [Lancamento]
                Locate NLANC,CST,CFOP,ALIQ
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Estoque\NotaEI->Preco Total]
                BC  =0
                RDBC=0
                If [\Sistemas\Estoque\NotaEI->Valor do ICMS]>0
                   Then
                        BC  =[\Sistemas\Estoque\NotaEI->Preco Total]
                        If [\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]>0
                           Then
                        EndIf
                EndIf
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Estoque\NotaEI->Valor do ICMS]
                [VL_BC_ICMS_ST]=[VL_BC_ICMS  ]+0
                [VL_ICMS_ST   ]=[VL_ICMS_ST  ]+0
                [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
                [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
                CST =[\Sistemas\Estoque\NotaEI->Tipo Tributacao ]
                CFOP=[\Sistemas\Estoque\NotaEI->CFO             ]
                ALIQ=[\Sistemas\Estoque\NotaEI->Aliquota de ICMS]
                If IsBlank(ALIQ) Then ALIQ=0 EndIf

                Moveto "SPEDD190"
                Moveto [Lancamento]
                Locate NLANC,CST,CFOP,ALIQ
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+[\Sistemas\Estoque\NotaEI->Preco Total]
                BC  =0
                RDBC=0
                If [\Sistemas\Estoque\NotaEI->Valor do ICMS]>0
                   Then
                        BC  =[\Sistemas\Estoque\NotaEI->Preco Total]
                        If [\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]>0
                           Then
                        EndIf
                EndIf
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+BC
                [VL_ICMS      ]=[VL_ICMS     ]+[\Sistemas\Estoque\NotaEI->Valor do ICMS]
                [VL_RED_BC    ]=[VL_RED_BC   ]+RDBC
                [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()

;CoEdit "SPEDE001"
;End 
;Down
;[DT_INI  ]=VSDGDTINI
;[DT_FIN  ]=VSDGDTFIM
;UnLockRecord

Do_It!
ClearAll

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\\Estoque\\Itens"
View   "\\Sistemas\\Estoque\\Unidades"
View   "SPEDH010"
View   "SPEDH005"
View   "SPED0190"
View   "SPED0200"
CoEdit Tabela_Estoque
NR = NRecords(Tabela_Estoque)
Scan
   Barra(NR, RecNo())
   Aguarde(Completa("Aguarde, Processando Bloco H",45," ")+BARRA_STRING)
   If Not [Saldo Atual]>0
      Then Loop
   EndIf

   CopyToArray REGTB

   Grava_Itens_Unidades(REGTB["Codigo do Item"],"")

   Moveto "SPEDH010"
   End Down
   [COD_ITEM         ]=REGTB["Codigo do Item"]
   [UNID             ]=[SPED0200->UNID_INV        ]
   [QTD              ]=REGTB["Saldo Atual"]
   [VL_UNIT          ]=NDecimal(REGTB["Custo Total Atual"]/REGTB["Saldo Atual"],5)  
   [VL_ITEM          ]=REGTB["Custo Total Atual"]
   
   [IND_PROP         ]="0"
   [COD_PART         ]=""
   [TXT_COMPL        ]=[\Sistemas\Estoque\Itens->Descricao Complementar]
   [COD_CTA          ]=""
   UnLockRecord

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

Moveto "SPEDH005"
End
Down
[DT_INV  ]=DT_INV
[VL_INV  ]=VL_INV
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 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:                  -------------------------------------------
;--- 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
             
             

                   ;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
             
             

                   ;CONTA_REGISTRO("C113","C990")

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

                   ;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)+"|"+"\n"
                    Print File ARQ Valor_Str([PESO_LIQ],2)+"|"+"\n"
                    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 "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
          
          Moveto "SPEDC350"
        EndScan
        ClearAll
        
        View "SPEDC390"              
        Scan
          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")

        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 ]
          SDOCT=[Serie do Documento]

          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,SDOCT
          If RetVal
             Then While [Codigo da Empresa ]=CEMPR And
                        [Serie do Documento]=SDOCT
                    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,SDOCT,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [Serie do Documento]=SDOCT 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,SDOCT,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [Serie do Documento]=SDOCT 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,SDOCT,DTREF,COD_TOT_PAR
                              If RetVal
                                 Then While [Codigo da Empresa ]=CEMPR And
                                            [Serie do Documento]=SDOCT 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,SDOCT,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [Serie do Documento]=SDOCT And
                                  [Data              ]=DTREF
                              Print File ARQ "|C460"+"|"
                              Print File ARQ ""+[COD_MOD      ]+"|"
                              Print File ARQ ""+[COD_SIT      ]+"|"
                              Print File ARQ ""+[NUM_DOC      ]+"|"
                              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"
                              CONTA_REGISTRO("C460","C990")
                              NLANC3=[Lancamento]
                              
                              ;--- Registro C470: Itens do Documento Fiscal Emitido por ECF ---
                              Moveto "SPEDC470"
                              Moveto [Codigo da Empresa]
                              Locate CEMPR,SDOCT,DTREF,NLANC3
                              If RetVal
                                 Then While [Codigo da Empresa ]=CEMPR And
                                            [Serie do Documento]=SDOCT 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 Movimento Diario ---
                    Moveto "SPEDC490"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SDOCT,DTREF
                    If RetVal
                       Then While [Codigo da Empresa ]=CEMPR And
                                  [Serie do Documento]=SDOCT 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("SPEDE001")
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|E001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("E001","E990")

;--- 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)+"|"+"\n"
          CONTA_REGISTRO("H005","H990")
        EndScan
        ClearAll

        ;--- Registro H010: Invent rio -------------------------------
        View "SPEDH010"
        Scan
          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 ""+[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 "1"+"|"+"\n"
CONTA_REGISTRO("1001","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 PARA LIMPAR AGUARDE       *
;************************************
Proc LimpAguarde2L()
@ 23,0 ?? Fill(" ",80)
PaintCanvas Attribute 31 23,0,23,79
@ 24,0 ?? Fill(" ",80)
PaintCanvas Attribute 31 24,0,24,79
EndProc ; (LimpAguarde2L)

;*******************************************************************************
;* 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: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPCOES"        : Campo="TG_DTFIM"
            Case Campo="TG_INVENT"        : Campo="TG_OPCOES"
            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"     : Campo="TG_FINALIDADE"
                    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  "
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]

VSDGEMPRESA  ="0001"
VSDGDTINI    =DateVal("01.01.2011")
VSDGDTFIM    =DateVal("31.01.2011")

VSDGOPCAO[9]= True
VSDGINVENT[1]= True

While True
  ShowDialog "Gera‡„o arquivo SPED/EFD" 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 21 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 07,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]

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

     Pushbutton @ 17,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
     Pushbutton @ 17,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()
     Then Mensagem("Data Invalida !")
          Loop
  EndIf

  LimpAguarde2L()
  
  MES=AlinhM(StrVal(Month(VSDGDTFIM)),2)
  ANO=Year(VSDGDTFIM)
  If MES="02" or VSDGINVENT[1]
     Then
          Tabela_ERRO_ITEM=Cria_Temp(PrivDir())
          Copy "\\Base\\Sistemas\\Estoque\\RM_REPRO" Tabela_ERRO_ITEM
        
          Tabela_Estoque=Cria_Temp(PrivDir())
          If IsTable(Tabela_Estoque) Then Delete(Tabela_Estoque) EndIf

          If MES="02"
             Then MES_ESTQ="12"
                  ANO_ESTQ=StrVal(Year(VSDGDTFIM)-1)
             Else MES_ESTQ=AlinhM(StrVal(Month(VSDGDTFIM)),2)
                  ANO_ESTQ=StrVal(Year(VSDGDTFIM))
          EndIf
          
         If Not Monta_Estoque()
            Then ;Loop
         EndIf
         If IsTable(Tabela_Estoque)
            Then Rename "Answer" Tabela_Estoque
         EndIf
                  
  EndIf

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

  LimpAguarde2L()
  
  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
  
  LimpAguarde2L()
  
  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 => STRG=Sintegra  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

  LimpAguarde2L()

EndWhile
ClearAll
Release Vars All
Release Procs All
