;* Sped_efd *******************************************************************
;* Geracao arquivo SPED_EFD ICMS/IPI                                          *
;******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/12/2009 por Anivel Augusto Rodrigues
;Ultima Alteracao: 14/02/2011 por Anivel Augusto Rodrigues               
;Motivo Alteracao: Ajustes CRO - SPEDC405      
;Ultima Alteracao: 14/02/2011 por Anivel Augusto Rodrigues               
;Motivo Alteracao: Ajustes SOMA_ITENS_???      
;Ultima Alteracao: 16/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Reducao ICMS sem Desconto          
;Ultima Alteracao: 17/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Bloco E          
;Ultima Alteracao: 18/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Indices ICMS - Agel
;Ultima Alteracao: 21/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Destinacao          
;Ultima Alteracao: 21/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP e CST_ICMS Itens do Cupom Fiscal
;Ultima Alteracao: 23/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DT_E_S<>DT_DOC situacao extemporanea "01"                       
;Ultima Alteracao: 24/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Novo Layout NotaEC/NotaEI           
;Ultima Alteracao: 10/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ALIQ_ST                     
;Ultima Alteracao: 14/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variaveis/calculos          
;Ultima Alteracao: 07/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes vracres por item vl_bc_icms2 para vl_RED
;Ultima Alteracao: 09/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ltrim/RTrim na Descricao do Item/ NUM_ITEM sequencial
;Ultima Alteracao: 11/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_SIT DTEMIS<>DTSAID                                
;Ultima Alteracao: 17/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem de item de cupom com tributa‡Æo invalida
;Ultima Alteracao: 29/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao C113, C114 e C160 a justes PIS/COFINS Saidas     
;Ultima Alteracao: 04/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dados item nota CEMIG     
;Ultima Alteracao: 07/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tabela NotaR                                 
;Ultima Alteracao: 14/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Sintax                        
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFE pra todas as series
;Ultima Alteracao: 22/09/2011 por Cidinha Ferreira
;Motivo Alteracao: Ajustes COD_PART
;Ultima Alteracao: 17/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes documental             
;Ultima Alteracao: 17/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Vl_BRT Redu‡Æo Z       
;Ultima Alteracao: 25/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo de Documentos 
;Ultima Alteracao: 01/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data de Saida fora do Mes
;Ultima Alteracao: 16/12/2011 por Karina Andrade
;Motivo Alteracao: Add Tira_Char() para caracter '|'
;Ultima Alteracao: 21/12/2011 por Karina Andrade
;Motivo Alteracao: Alterado NOTACP para NOTAV
;Ultima Alteracao: 06/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_VER Registro 0000      
;Ultima Alteracao: 21/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem de periodo de data informado               
;Ultima Alteracao: 29/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Chave de acesso Nfe entradas
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MODELO Documento "02" e "2D" Venda a consumidor e ECF
;Ultima Alteracao: 18/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Chave de acesso CT-e entradas
;Ultima Alteracao: 29/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Emitida de Entrada, Fitrar por data de saida
;Ultima Alteracao: 05/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SPEDC4?? totalizando por serie fabricacao da impressora
;Ultima Alteracao: 20/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Loop ECF_C/ECF_T
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Removido CALCULA_ST 
;Ultima Alteracao: 15/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_VER - codigo do layout                           
;Ultima Alteracao: 15/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IND_PGTO- Outros = 2                                 
;Ultima Alteracao: 22/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tratamento item de cupom cancelado      
;Ultima Alteracao: 27/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome de campo digitado errado IND_PGTO Conforme versÆo
;Ultima Alteracao: 21/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grava_Itens conforme perfil para cupons c/ item cancelado
;Ultima Alteracao: 24/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_MOD "2D" PARA ECF
;Ultima Alteracao: 04/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ECF_FAB locate empr, serie, dia -> c425,c460,c470,c490
;Ultima Alteracao: 29/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes itesm CST ?60 sem credito icms
;Ultima Alteracao: 06/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ignorar nota s¢ de servi‡o na entrada
;Ultima Alteracao: 11/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0450, C110, C113                     
;Ultima Alteracao: 03/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Valor Mercadorias+Servicos registro C100
;Ultima Alteracao: 05/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SPED0450 criar apenas se existir obs na nota
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LimpaRodape()                  
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes GERA_BLOCO1()                  
;Ultima Alteracao: 07/02/2013 por Karina Andrade
;Motivo Alteracao: Ajustes GERA_BLOCO1()   
;Ultima Alteracao: 08/02/2012 por Karina Andrade
;Motivo Alteracao: Ajustes COD_VER Registro 0000
;Ultima Alteracao: 08/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tipo de frete em 2012     
;Ultima Alteracao: 11/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Itens propriedade de terceiros                 
;Ultima Alteracao: 06/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Versao/Data                                    
;Ultima Alteracao: 11/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Motivo Inventario                              
;Ultima Alteracao: 14/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Carga dos totalizadores por ECF para Redu‡Æo Z, identifica‡Æo do indice da aliquota 
;Ultima Alteracao: 18/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes movito do inventario checagem                                                        
;Ultima Alteracao: 18/03/2013 por Karina Andrade
;Motivo Alteracao: Altera‡Æo no nome gerado para o SPED (Ex: SPED_EMPRESA_MMAAAA)
;Ultima Alteracao: 21/03/2013 por Anivel Augusto Rodrigues/Karina
;Motivo Alteracao: Ajustes nome arquivo, Totalizadores de ICMS e ACRESCIMO
;Ultima Alteracao: 23/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Item_CST_ICMS="?60"
;Ultima Alteracao: 28/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes inventario com item tipo OUTROS pra todos ver clientes 
;                  que nÆo querem gerar este tipo de item                
;Ultima Alteracao: 05/04/2013 por Karina Andrade
;Motivo Alteracao: Corre‡Æo ECF_T para ECF_S nos totalizadores de ISSQN
;Ultima Alteracao: 09/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tributa‡Æo de IPI=Outros sem credito do ipi/Modamil   
;Ultima Alteracao: 19/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes totalizador acrescimo da redu‡Æo z   
;Ultima Alteracao: 20/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ipi itens mesmo sendo outros informar o valor do ipi
;Ultima Alteracao: 22/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste nome de campo NUM_DOC -> NUM_DOC_CANC "SPEDC310"
;Ultima Alteracao: 24/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateios descontos/despesas ja vem pronto nos itens    
;Ultima Alteracao: 25/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome do arquivo sped_fiscal_                       
;Ultima Alteracao: 04/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item cupom cancelado                               
;Ultima Alteracao: 15/05/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes item cupom bc icms com reducao, nÆo gerar tributos redu‡Æo zerados no dia
;Ultima Alteracao: 03/07/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C110 obs nf em branco
;Ultima Alteracao: 08/08/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usa campo "ICMS sobre Total NF]" na tabela NOTAEC 
;Ultima Alteracao: 29/11/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Notas Denegadas e Cancelamento Extemporaneo
;Ultima Alteracao: 09/12/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes e510 campo VL_CONT_IPI
;Ultima Alteracao: 16/01/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes Nota cancelada Extemporƒneo 
;Ultima Alteracao: 23/01/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes altera‡Æo de layout 008 
;Ultima Alteracao: 14/02/2014 por Karina Andrade
;Motivo Alteracao: Ajustes CPF_CPNJ para 111.111.111-11 
;Ultima Alteracao: 14/02/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes CPF_CPNJ para 11111111111 
;Ultima Alteracao: 18/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloco E, se teve ou nÆo moveimento
;Ultima Alteracao: 26/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloco 1, 1600 resumo opera‡äes com cartäes debito/credito
;Ultima Alteracao: 28/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tributa‡ao na entrada regras=regentra
;Ultima Alteracao: 28/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Registros 0460, C195
;Ultima Alteracao: 10/03/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Registros C510, Ajustes C500 CEM,AGUA,GAS
;Ultima Alteracao: 10/03/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grupo C300.. com SubSerie
;Ultima Alteracao: 17/03/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes H005 mes Fevereiro
;Ultima Alteracao: 04/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C405, VL_BRT=NDecimal(VL_BRT,2)        
;Ultima Alteracao: 10/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ALIQ_ST Notaei, Notai                  
;Ultima Alteracao: 14/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SEM_RED_BCICMS Destin                                 
;Ultima Alteracao: 15/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes s¢ gera C510 nas opera‡äes de saida                 
;Ultima Alteracao: 23/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Registros C197
;Ultima Alteracao: 28/04/2014 por Bruno/Andrey
;Motivo Alteracao: Ajuste na Proc Monta_BlocoC(), atribuicao do MODELO
;Ultima Alteracao: 05/05/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item aplicacao direta pode ter credito icms - caso CEMIG
;Ultima Alteracao: 07/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao buscar o custo na Ficha de Estoque
;Ultima Alteracao: 20/08/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data Acerto Nota cancelada extemporanea                   
;Ultima Alteracao: 22/08/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes codigo de barras no item                                  
;Ultima Alteracao: 03/09/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C320 Pai e C321 Filho                                               
;Ultima Alteracao: 04/09/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registros sem C510, Ajustes C500 CEM,AGUA,GAS
;Ultima Alteracao: 15/09/2014 por Andrey Fillipe
;Motivo Alteracao: Ajuste Se [COD_SIT]="01" recebe [DT_A_P]=[Data de Emissao]
;Ultima Alteracao: 15/09/2014 Kamila Gomes
;Motivo Alteracao: Ajuste NF Avulsa Eletronica modelo 55, COD_SIT=08
;Ultima Alteracao: 08/10/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes texto maximo 255 no C110
;Ultima Alteracao: 11/11/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rotina pegar aliq_icms_empr                          
;Ultima Alteracao: 12/11/2014 por Luis Gustavo
;Motivo Alteracao: Ajuste no Saidas Faturamento/Notas. Ao mudar de tabela nao encontrava o Campo[COD_MOD] 
;Ultima Alteracao: 12/11/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desprezar notas de saida de apenas servi‡os  
;Ultima Alteracao: 21/11/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes notas de entrada do faturamento, pega pela data de sa¡da     
;Ultima Alteracao: 08/12/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item com ST na devolu‡Æo nÆo gera debito ICMS    
;Ultima Alteracao: 03/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_VER ano 2015 = 009         
;Ultima Alteracao: 19/02/2015 por Kamila Gomes
;Motivo Alteracao: Adicionado campo VL_ITEM_IR bloco H registro H010 
;Ultima Alteracao: 04/03/2015 por Luis Gustavo
;Motivo Alteracao: Implementado na Proc Monta_BlocoC(), pra checar nos parametros ao calcular o diferencial de aliquota
;Ultima Alteracao: 17/03/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Pega_PlanoContaItem(), Pega_PlanoContaDocumento() s¢ nas entradas
;Motivo Alteracao: Ajustes Monta_Estoque() criar primeiro a TabelaI
;Ultima Alteracao: 19/03/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste diferencial de aliquota
;Ultima Alteracao: 23/03/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BlocoH Pega_PlanoContaItem()
;Ultima Alteracao: 15/04/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BlocoC Notas Saidas/Somar novos valores de impostos na nota C100
;Ultima Alteracao: 07/05/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes BlocoC Registro C110 sempre sai quando tem nota referenciada
;Ultima Alteracao: 29/05/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C100, C170, C190, C195 icms st sem credito                          
;Ultima Alteracao: 08/06/2015 por Bruno Carvalho           
;Motivo Alteracao: Corre‡Æo #Gera SPED0015# onde "SPED0015" estava como "SPED0005"
;Ultima Alteracao: 11/06/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes D100, 
;Ultima Alteracao: 23/06/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes TP CT-e no registro D100
;Ultima Alteracao: 10/08/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado Proc Tira_Caractere()
;Ultima Alteracao: 10/08/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado onde o campo [Sequencia] recebe 0 nas rotinas onde ‚ feito o SPEDC110
;Ultima Alteracao: 16/09/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes na Proc Tira_Caractere() no Sped aceita somente 250 caracteres
;Ultima Alteracao: 07/10/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IND_FRT D100 Conhecimento Transporte  
;Ultima Alteracao: 22/10/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes diferencial de aliquota de ou para Simples Nacional
;Ultima Alteracao: 11/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C500 nÆo informar TP_LIGACAO,COD_GRUPO_TENSAO
;Ultima Alteracao: 27/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Bloco1                                            
;Ultima Alteracao: 30/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BlocoC                                          
;Ultima Alteracao: 02/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C425,c470, C490
;Ultima Alteracao: 09/12/2015 por Bruno Carvalho
;Motivo Alteracao: Adiconado BlocoK() - Apenas o Esqueleto e processo do blocok comentado
;Ultima Alteracao: 09/12/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado a TabelaI p/ TabelaIH, onde a TabelaI agora ser  uma referˆncia para TabelaIH e TabelaIK                                            
;Ultima Alteracao: 14/12/2015 por Kamila Gomes
;Motivo Alteracao: InclusÆo do Registro 0220 - Unidade e fator de conversÆo dos itens de entrada
;Ultima Alteracao: 15/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IND_MOV 1001
;Ultima Alteracao: 21/01/2016 por Kamila Gomes 
;Motivo Alteracao: Ajustes IE = NAOCONTRIBUINTE
;Ultima Alteracao: 29/01/2016 por Bruno Carvalho 
;Motivo Alteracao: Adicionado GERA_BLOCOK() para constar no SPED sem movimenta‡Æo, e renomeado o original p/ GERA_BLOCOK_2018()
;Ultima Alteracao: 10/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Vr ipi e st para somar no vl_item de vl_merc quando nÆo tem credito volks bens
;Ultima Alteracao: 18/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes credito ipi conforme origem do produto
;Ultima Alteracao: 18/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes registrar notas de servico               
;Ultima Alteracao: 15/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Gera_BlocoK a partir do ano 2016 
;Ultima Alteracao: 28/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C195, C197 SIRI           
;Ultima Alteracao: 04/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 1900, 1910, 1920 SIRI           
;Ultima Alteracao: 14/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C195, C197, 1900, 1910, 1920 MODAMIL       
;Ultima Alteracao: 18/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C425, PIS/COFINS Vazio clientes que j  geram sped contribui‡äes
;Ultima Alteracao: 23/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MODAMIL
;Ultima Alteracao: 03/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIRI   
;Ultima Alteracao: 09/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0150 Participante exterior CNPJ/CPF vazio
;Ultima Alteracao: 21/05/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [EX_TIPI] e [Genero]
;Ultima Alteracao: 31/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIRI   
;Ultima Alteracao: 06/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIRI  
;Ultima Alteracao: 06/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes array NR_TOTC420 tamanho de 20 para 30 
;Ultima Alteracao: 02/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Aplica‡Æo direta desprezar CFO 1923,2923 Vitoria Textil
;Ultima Alteracao: 16/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Documentos Referenciados Entradas     
;Ultima Alteracao: 21/06/2016 por Bruno Carvalho
;Motivo Alteracao: Erro de Sintaxe, ausˆncia de aspa -> "\\Sistemas\\Estoque\\NotaER 
;Ultima Alteracao: 28/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS Desonerado
;Ultima Alteracao: 02/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Documentos Referenciados Entradas     
;Ultima Alteracao: 04/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes dados partilha icms C101    
;Ultima Alteracao: 23/08/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes registro H010 campo VL_ITEM_IR a partir de 2015                       
;Ultima Alteracao: 06/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes quebra linha c310           
;Ultima Alteracao: 06/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes quebra linha c300   
;Ultima Alteracao: 09/09/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes registro 0150 - IE = "NAOCONTRIBUINT"         
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 03/10/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Grava‡Æo de documentos referenciados.  
;Ultima Alteracao: 11/10/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Tipo de nota de Complemento
;Ultima Alteracao: 21/10/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes valor opera‡Æo do item abatimento icms desonerado C190
;Ultima Alteracao: 26/10/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado "P_CARTAO" p/ GetRecord na proc Grava_Cartoes()
;Ultima Alteracao: 28/11/2016 por Heverton Amaral
;Motivo Alteracao: Corre‡Æo MSG Inconsistencia estoque 
;Ultima Alteracao: 01/12/2016 por Bruno Carvalho
;Motivo Alteracao: [Modelo_Documento] -> Adicionado tabela junto ao campo [\Sistemas\Estoque\NotaER->Modelo_Documento]
;Ultima Alteracao: 22/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes erros Notas Referenciadas
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Æo para Impostos
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog MensagemRadioButtons() 
;Ultima Alteracao: 01/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes layout 2017
;Ultima Alteracao: 02/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes c113 emitente docto
;Ultima Alteracao: 02/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RET para Ecletica   
;Ultima Alteracao: 18/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RET para Ecletica   
;Ultima Alteracao: 06/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_BlocoH() Cidades, Valor_Str()
;Ultima Alteracao: 06/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registros C197 agrupar
;Ultima Alteracao: 06/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IND_EMIT doctos referenciados
;Ultima Alteracao: 06/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes escolher mes/ano para inventario, maximo 2 inventarios
;Ultima Alteracao: 23/03/2017 por Anivel Augusto Rodrigues   
;Motivo Alteracao: Ajustes pesquia se item st=60
;Ultima Alteracao: 04/04/2017 por Anivel Augusto Rodrigues   
;Motivo Alteracao: Ajustes Conhecimento de Transporte emissÆo pr¢pria
;Ultima Alteracao: 07/04/2017 por Kamila Gomes   
;Motivo Alteracao: Ajustes Calculo do difAl na entrada
;Ultima Alteracao: 04/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RET para Roli Jeans, H-Roper
;Ultima Alteracao: 22/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST_IPÞ="" se nÆo for industria
;Ultima Alteracao: 03/07/2017 por Anivel Augusto Rodrigues   
;Motivo Alteracao: Ajustes Gravar no NotaEI diferencial de aliquota
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 01/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ao verificar o tributo fiscal [ICMS Calculo Diferencial de Aliquota], registro apontava p/ "Answer", alterado p/ NotaEi
;Ultima Alteracao: 07/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SERIE 55, 65 000        
;Ultima Alteracao: 13/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modalidade de frete
;Ultima Alteracao: 26/09/2017 por Bruno Carvalho
;Motivo Alteracao: Alterado os campos -> VFCPUFDest, VRICMS_Part_UF_Dest; VRICMS_Part_UF_Emit *Datam de 09.2017
;Ultima Alteracao: 09/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_CTAItem
;Ultima Alteracao: 01/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes filtrar registro partilha
;Ultima Alteracao: 07/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloco H020 - 0112             
;Ultima Alteracao: 16/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Exclusao Pega_PlanoContaDocumento()
;Ultima Alteracao: 16/11/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Pega_PlanoConta()
;Ultima Alteracao: 23/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloco H020 - 0112             
;Ultima Alteracao: 05/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloco 0220 - Grava_Unidade_Conversao()
;Ultima Alteracao: 22/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes credito icms no entrada emissao propria
;Ultima Alteracao: 30/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos campos registro D100
;Ultima Alteracao: 31/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_VER 2018
;Ultima Alteracao: 01/02/2018 por Bruno Carvalho
;Motivo Alteracao: Ausˆncia do View tabela "Empresas" -> Monta_BlocoD()
;Ultima Alteracao: 02/02/2018 por Kamila Gomes
;Motivo Alteracao: Ajustes -> Monta_BlocoD() municipio origem/destino
;Ultima Alteracao: 08/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_SIT CT-e                              
;Ultima Alteracao: 16/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 1900, 1920 indicador                      
;Ultima Alteracao: 19/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0200 layout 2014                          
;Ultima Alteracao: 20/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COD_SIT CT-e                              
;Ultima Alteracao: 20/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C113 layout 2014                          
;Ultima Alteracao: 05/03/2018 por Bruno Carvalho
;Motivo Alteracao: Ausˆncia ta tabela "SPED0150" -> Monta_BlocoH()
;Ultima Alteracao: 06/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grava_Participantes() no Inventario                           
;Ultima Alteracao: 06/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes C490                           
;Ultima Alteracao: 10/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes c197 ENTRADA AQUISICAO SIMPLES NACIONAL
;Ultima Alteracao: 13/04/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes c195 ENTRADA AQUISICAO SIMPLES NACIONAL
;Ultima Alteracao: 02/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes c195 ENTRADA AQUISICAO SIMPLES NACIONAL
;Ultima Alteracao: 09/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem de inventario     
;Ultima Alteracao: 10/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ask redu‡Æo do tempo de processamento
;Ultima Alteracao: 11/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RET Pierre
;Ultima Alteracao: 11/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes grava c195, c197
;Ultima Alteracao: 14/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ask redu‡Æo do tempo de processamento
;Ultima Alteracao: 16/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ tirar os privates do NLANC nas procs -> Monta_BlocoC()
;Ultima Alteracao: 22/05/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes Monta_BlocoC400Cupons() -> Fechando NOTAI sem ter a mesma aberta 
;Ultima Alteracao: 28/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RET Pierre ignorar NAOCONTRIBUINTE

;******************************************************************************* 
;* Rotina prepara estoque                                                      *
;******************************************************************************* 
Proc Monta_Estoque()
private dadosok, mes

dadosok=false
MES    =AlinhM(StrVal(Month(VSDGDTFIM)),2)

If MES="02" or VSDGINVENT[1] and ( VSDGOPCAO[9] Or VSDGOPCAO[6] )
   then dadosok=true
endif   

if not dadosok 
   then return
endif    

If MES="02"
   Then 
        MES_ESTQ="12"
        ANO_ESTQ=AlinhM(StrVal(Year(VSDGDTFIM)-1),4)
        Monta_BlocoH(DateVal("31."+MES_ESTQ+"."+ANO_ESTQ),"01")
EndIf           

If VSDGINVENT[1]
   Then
        MES_ESTQ=Substr(VSDGMESANO,1,2)
        ANO_ESTQ=Substr(VSDGMESANO,4,4)
        Monta_BlocoH(Ultimo_Dia(MES_ESTQ+ANO_ESTQ),VSDGMOTINV)
EndIf           

endproc
       
;******************************************************************************* 
;* Rotina Estoque                                                              *
;******************************************************************************* 
Proc Monta_BlocoH(DT_INV, MOT_INV)
Private posse, posse_cd,  
        regitens, regmarcas, regdestinat, VL_INV, vricms

Aguarde("Aguarde, processando invent rio 1/3 "+MES_ESTQ+"."+ANO_ESTQ)

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

If IsTable("\\FechAno\\"+ANO_ESTQ+"\\Estoque\\Sdestq") 
   Then TAB_TEMP = "\\FechAno\\"+ANO_ESTQ+"\\Estoque\\Sdestq"
   Else TAB_TEMP = "\\Sistemas\\Estoque\\SdEstq"
EndIf 

{Ask}  TypeIn TAB_TEMP Enter Check
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Ano Referencia        ] TypeIn ANO_ESTQ
Moveto [Mes Referencia        ] TypeIn MES_ESTQ
Do_It!
ClearAll

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

NR = NRecords("Answer")

VL_INV=0

View Tabela_ERRO_ITEM
View   "\\Sistemas\\Cadastro\\Destinat"
View   "\\Sistemas\\Cadastro\\Cidades"
View   "\\Sistemas\\Estoque\\Itens"
View   "\\Sistemas\\Estoque\\TpItem"
View   "\\Sistemas\\Estoque\\Marcas"
View   "\\Sistemas\\Estoque\\Familia"
View   "\\Sistemas\\Estoque\\Unidades"
 
View   "SPED0150"
View   "SPED0190"
View   "SPED0200"
View   "SPEDH020"
View   "SPEDH010"
View   "SPEDH005"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando invent rio 2/3",45," ")+BARRA_STRING)

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

          Moveto "Answer"
          Loop 
  EndIf
  
  if search(regitens["Tipo do Item"],"C,D,F,G,H,I")>0
     then Moveto "Answer"
          Loop 
  EndIf

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

          Moveto "Answer"
          Loop 
  EndIf

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

          posse    ="2"
          posse_cd =regdestinat["Codigo"] 

          If [Answer->Saldo Atual]>0
             Then 
                  Grava_Participantes(posse_cd,"Invent rio")
          EndIf
  EndIf   

  If Not [Answer->Saldo Atual]>0
     Then 
          Moveto "Answer"
          Loop 
  EndIf

  Grava_Itens([Answer->Codigo do Item],"Invent rio")

  Moveto "SPEDH010"
  End Down
  [DT_INV           ]=DT_INV
  [COD_ITEM         ]=[Answer->Codigo do Item]
  [UNID             ]=regitens["Unidade Interna"]
  [QTD              ]=[Answer->Saldo Atual   ]
  [VL_ITEM          ]=NDecimal([Answer->Custo Total Atual],2)
  [VL_UNIT          ]=NDecimal([Answer->Custo Total Atual]/[Answer->Saldo Atual],5)  
  [IND_PROP         ]=posse
  [COD_PART         ]=posse_cd
  [TXT_COMPL        ]=ltrim(rtrim(regitens["Descricao Complementar"]))
  [COD_CTA          ]=COD_CTAItem ; Pega_PlanoContaItem()  
  [VL_ITEM_IR       ]=NDecimal([Answer->Custo Total Atual],2);recebe mesmo vlr do [VL_ITEM]
  UnLockRecord

  VL_INV=VL_INV+NDecimal([Answer->Custo Total Atual],2)

  switch
    case MOT_INV="02" :

      if sys_codigo_Cliente="0112" and
         DT_INV=DateVal("31.10.2017") 
         then
              vricms=0
              seq   =0
            
              if regitens["Tipo Tributacao"]="000" or
                 regitens["Tipo Tributacao"]="010"    
                 then
                      seq=seq+1
                      Moveto "SPEDH020"
                      End Down
                      [DT_INV           ]=DT_INV
                      [COD_ITEM         ]=[Answer->Codigo do Item]
                      [Sequencia        ]=seq
                      [CST_ICMS         ]="000"   
                      [BC_ICMS          ]=NDecimal([Answer->Custo Total Atual],2)
                      [VL_ICMS          ]=round(([BC_ICMS]*regitens["Aliquota de ICMS"])/100,2)
                      vricms             =[VL_ICMS]
                      UnLockRecord
              endif
              
              if regitens["Tipo Tributacao"]="010"
                 then
                      seq=seq+1
                      Moveto "SPEDH020"
                      End Down
                      [DT_INV           ]=DT_INV
                      [COD_ITEM         ]=[Answer->Codigo do Item]
                      [Sequencia        ]=seq
                      [CST_ICMS         ]="060"   
                      [BC_ICMS          ]=NDecimal([Answer->Custo Total Atual],2)
                      [BC_ICMS          ]=[BC_ICMS]+Round(([BC_ICMS]*regitens["MVA_1"])/100,2)
                      [VL_ICMS          ]=round(([BC_ICMS]*regitens["Aliquota de ICMS"])/100,2)-vricms
                      UnLockRecord
              endif
      endif
         
  endswitch

  Moveto "Answer"
EndScan

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

Do_It!
ClearAll

If Not IsEmpty(Tabela_ERRO_ITEM)
   Then 
        Aguarde("Aguarde, relat¢rio de inconsistˆncia no invent rio 3/3")

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

        MSG=""
				MSG=MSG+"O Sistema detectou inconsistencia 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 fiscal 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

If IsAssigned(Tabela_ERRO_ITEM) And IsTable(Tabela_ERRO_ITEM) Then Delete(Tabela_ERRO_ITEM) 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("W20,EI,AL",Valor)
 Case dec=1 : VrTit=Format("W20.1,EI,AL",Valor)
 Case dec=2 : VrTit=Format("W20.2,EI,AL",Valor)
 Case dec=3 : VrTit=Format("W20.3,EI,AL",Valor)
 Case dec=4 : VrTit=Format("W20.4,EI,AL",Valor)
 Case dec=5 : VrTit=Format("W20.5,EI,AL",Valor)
 Case dec=6 : VrTit=Format("W20.6,EI,AL",Valor)
EndSwitch
VrTit=RTrim(LTrim(VrTit))

Return VrTit
EndProc  ; (Valor_Str)

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

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

Return DtTit
EndProc  ; (Data_Str)

;********************************************************************************
;* Totalizadores Reducao ICMS                                                   *
;********************************************************************************
Proc NR_TOTC420(ns,trib,Aliq)
Private ns,trib,Aliq,s1,s2,i 

ns  =Upper(RTrim(ns))
trib=Upper(trib)
s1  =AlinhM(Tira_CharNum(Valor_Str(Aliq,2)),4)
For i From 1 To 30
  If NR_TOTC420[i]=""
     Then s2=AlinhM(StrVal(i),2)
          NR_TOTC420[i]=Completa(RTrim(ns),25," ")+"|"+trib+s1+"|"+s2
          
          s2="ERRO"
          
          QuitLoop
     Else If RTrim(SubStr(NR_TOTC420[i],01,25))=ns And
             SubStr(NR_TOTC420[i],27,01)=trib And
             SubStr(NR_TOTC420[i],28,04)=s1
             Then s2=SubStr(NR_TOTC420[i],33,02)
                  QuitLoop
          EndIf
  EndIf      
EndFor
   
Return s2
EndProc  

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

Aguarde("Aguarde, preparando dados")

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

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

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

;---- Carrega valores de totalizadores por ecf redu‡Æo z -----------------------
i=0
View "\\Sistemas\\Vendas\\Opaf_tot"
Scan  
  Switch
    Case [Tipo]="ICMS"  :
      i=i+1
      NR_TOTC420[i]=Completa([Numero de Serie],25," ")+"|T"+AlinhM(StrVal([Aliquota]*100),4)+"|"+[Indice Aliquota]
    Case [Tipo]="ISSQN" : 
      i=i+1
      NR_TOTC420[i]=Completa([Numero de Serie],25," ")+"|S"+AlinhM(StrVal([Aliquota]*100),4)+"|"+[Indice Aliquota]
  EndSwitch
EndScan
ClearImage

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

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

Return True
EndProc

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

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

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

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

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

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

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para pegar plano de conta do item                  
;*******************************************************************************
Proc Pega_PlanoContaItem(Codigo)
Private Codigo

TabAtual=Table()

If Not IsBlank(Codigo)   ; s¢ fazer se nÆo tinha lido o itens antes pelo Grava_Itens()
   Then
        Moveto "\\Sistemas\\Estoque\\Itens"
        Moveto [Codigo do Item]
        Locate Codigo
        If Not Retval
           Then Mensagem("Erro dados ITEM-[ITENS] : "+Codigo+"//"+Docto)
                End Down
        EndIf  
EndIf  

COD_CTAItem="?"

Moveto "\\Sistemas\\Estoque\\Familia"
Moveto [Codigo da Familia]
Locate [\Sistemas\Estoque\Itens->Codigo da Familia]
If Retval
   Then COD_CTAItem=[Conta Contabil]
EndIf  

Moveto "\\Sistemas\\Estoque\\TpItem"
Moveto [Tipo do Item]
Locate [\Sistemas\Estoque\Itens->Tipo do Item]
If Retval
   Then COD_CTAItem=[Conta Contabil]
EndIf  

Moveto TabAtual

EndProc  

;*******************************************************************************
;* Rotina para pegar plano de conta                           
;*******************************************************************************
Proc Pega_PlanoConta(cempresa,cdocto,cpessoa,cfop)
Private codcta,cempresa,cdocto,cpessoa,cfop, wi, regtpdoctos, codmodelo

codcta   =""
codmodelo=""

TabAtual=Table()

getrecord "\\sistemas\\cadastro\\tpdoctos" cdocto to regtpdoctos
if retval
   then codmodelo=regtpdoctos["Modelo do Documento"]
endif   

for wi from 1 to 2
  Moveto "ctp_0500"
  Moveto [Codigo da Empresa]
  Locate cempresa,codmodelo,cpessoa
  If Retval
     Then
          while [Codigo da Empresa  ]=cempresa  and
                [CodigoModelo       ]=codmodelo and
                [Codigo             ]=cpessoa         
                
            if search(cfop,[CFOPs])>0
               then codcta=[COD_CTA]
                    quitloop 
            endif   
  
            skip
            if eot() then quitloop endif               
          endwhile      
  EndIf
  if codcta<>"" then quitloop   endif  
  if wi=1       then cpessoa="" endif  
endfor

Moveto TabAtual

return codcta
EndProc  

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

TabAtual=Table()

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

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

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

  Moveto "SPED0200"
  End
  Down
  [COD_ITEM        ]=Codigo
  [DESCR_ITEM      ]=RTrim(LTrim([\Sistemas\Estoque\Itens->Descricao do Item]))
  Switch
    Case [\Sistemas\Estoque\Itens->Tipo Codigo_Barras]="A-EAN13" : [COD_BARRA       ]=[\Sistemas\Estoque\Itens->Codigo de Barras]
    Case [\Sistemas\Estoque\Itens->Tipo Codigo_Barras]="B-EAN8"  : [COD_BARRA       ]=[\Sistemas\Estoque\Itens->Codigo de Barras]
    Case [\Sistemas\Estoque\Itens->Tipo Codigo_BarraS]="F-EAN14" : [COD_BARRA       ]=[\Sistemas\Estoque\Itens->Codigo de Barras]
    OtherWise                                                    : [COD_BARRA       ]=""
  EndSwitch
  [COD_ANT_ITEM    ]=""
  [UNID_INV        ]=[\Sistemas\Estoque\Itens->Unidade Interna]
  Switch
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="A" : [TIPO_ITEM]="01"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="C" : [TIPO_ITEM]="09"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="D" : [TIPO_ITEM]="07"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="E" : [TIPO_ITEM]="02"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="G" : [TIPO_ITEM]="08"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="H" : [TIPO_ITEM]="08"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="I" : [TIPO_ITEM]="08"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="M" : [TIPO_ITEM]="01"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="P" : [TIPO_ITEM]="04"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="S" : [TIPO_ITEM]="03"
    Case [\Sistemas\Estoque\Itens->Tipo do Item]="T" : [TIPO_ITEM]="00"
    OtherWise               : [TIPO_ITEM]="99"
  EndSwitch
  If [TIPO_ITEM]="07" Or [TIPO_ITEM]="08" Or [TIPO_ITEM]="09" Or
     [TIPO_ITEM]="10" Or [TIPO_ITEM]="99"
     Then [COD_NCM         ]=""
     Else [COD_NCM         ]=[\Sistemas\Estoque\Itens->NCM]
  EndIf 
  GetRecord "\\Sistemas\\Estoque\\Iten_Com" Codigo To REG_ITCOM 
  If RetVal
     Then [EX_IPI ]=REG_ITCOM["EX_TIPI"]
          [COD_GEN]=REG_ITCOM["Genero"]
          [CEST   ]=REG_ITCOM["CEST"]
     Else [EX_IPI ]=""
          [COD_GEN]=""
          [CEST   ]=""
  EndIf
  [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 Unidade e Fator de conversao SPED0220                    *
;*******************************************************************************
Proc Grava_Unidade_Conversao(CodItem,Un,Ftc,Docto)
Private CodItem,Un,Ftc,Docto 

TabAtual=Table()

While True
  Moveto "\\Sistemas\\Estoque\\Itens"
  Moveto [Codigo do Item]
  Locate CodItem
  If Not RetVal
     Then 
          Mensagem("Erro: Cadastro do Item "+CodItem+"//"+Docto+" nÆo encontrado !")
     Else
          If Un <> [\Sistemas\Estoque\Itens->Unidade Interna]
             Then Moveto "SPED0220"
                  Moveto [COD_ITEM]
                  Locate CodItem,Un
                  If not RetVal
                     Then
                          End 
                          Down
                          [COD_ITEM ] = CodItem
                          [UNID_CONV] = Un
                          [FAT_CONV ] = Ftc
                          UnLockRecord 
                  EndIf
          EndIf
  EndIf        
  
  QuitLoop
EndWhile

Moveto TabAtual

EndProc ;Grava_Formula()

;*******************************************************************************
;* Rotina para gravar itens e unidades SPED0200, SPED0205                      *
;*******************************************************************************
Proc Grava_Formula(Codigo)
Private Codigo,QTD_PROD,SEQ  

TabAtual=Table()

While True
  Moveto "\\Sistemas\\Producao\\FormulaC"
  Moveto [Codigo do Produto]
  Locate Codigo
  If Not RetVal
     Then Mensagem("Erro dados da Formula-[ITENS] : "+Codigo+"//"+Docto)
          End Down
  EndIf        

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

  QTD_PROD = [\Sistemas\Producao\FormulaC->Quantidade Produzida]
  Moveto "\\Sistemas\\Producao\\FormulaI"
  Moveto [Codigo do Produto]
  Locate Codigo
  If Not RetVal
     Then Mensagem("Erro dados do item da Formula-[ITENS] : "+Codigo+"//"+Docto)
          QuitLoop                                 
  EndIf
   
  SEQ=0   
  While [Codigo do Produto]=Codigo
    If [Tipo do Item]="A" Or
       [Tipo do Item]="E" Or
       [Tipo do Item]="M" Or
       [Tipo do Item]="P" Or
       [Tipo do Item]="S" Or
       [Tipo do Item]="T"
       Then Moveto "SPED0210"
            If QTD_PROD>1
               Then QTD_ITEM = [\Sistemas\Producao\FormulaI->Quantidade]/QTD_PROD
                    ;---- Conferir ap¢s a utiliza‡Æo do procedimento da porcentagem da perda -----
                    POR_ITEM = [\Sistemas\Producao\FormulaI->Porc_Perda]/QTD_PROD
               Else QTD_ITEM = [\Sistemas\Producao\FormulaI->Quantidade]
                    POR_ITEM = [\Sistemas\Producao\FormulaI->Porc_Perda]
            EndIf
            Grava_Itens([\Sistemas\Producao\FormulaI->Codigo do Material],"FormulaI: "+Codigo)
            
            Moveto "SPED0210"  
            End 
            Down
            SEQ=SEQ+1
            [COD_ITEM     ] = Codigo
            [Sequencia    ] = SEQ 
            [COD_ITEM_COMP] = [\Sistemas\Producao\FormulaI->Codigo do Material]
            [QTD_COMP     ] = QTD_ITEM
            [PERDA        ] = POR_ITEM
            UnLockRecord
            Moveto "\\Sistemas\\Producao\\FormulaI"
    EndIf
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile 
  QuitLoop
EndWhile

Moveto TabAtual

EndProc ;Grava_Formula()

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

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

While True

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

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

  QuitLoop
EndWhile

Moveto TabAtual

EndProc

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

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

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

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

Moveto TabAtual

EndProc

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

If IsBlank(Codigo)
   Then Return
EndIf

switch
  case Codigo="?":
    Codigo="000001" ; Valor fixo, pendente cadastro de informacao complementar
    Texto ="XX"
   
endswitch
   
TabAtual=Table()

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

Moveto TabAtual

EndProc

;*******************************************************************************
;* Rotina para gravar observacoes docto fiscal SPED0460    
;*******************************************************************************
Proc Grava_Obs0460(Codigo,Texto)
Private Codigo, Texto, TabAtual

If IsBlank(Codigo)
   Then Return
EndIf

TabAtual=Table()

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

Moveto TabAtual

EndProc

;*******************************************************************************
;*                                                          
;*******************************************************************************
Proc Grava_1900(Codigo,Texto)
Private Codigo, Texto, indicador, TabAtual

If IsBlank(Codigo)
   Then Return
EndIf

indicador=substr(codigo,4,1)

If indicador<"3"
   Then Return
EndIf

;;switch
;;  case indicador="3" : indicador="1"
;;  case indicador="4" : indicador="2"
;;  case indicador="5" : indicador="3"
;;  case indicador="6" : indicador="4"
;;  case indicador="7" : indicador="5"
;;  case indicador="8" : indicador="6"
;;endswitch

TabAtual=Table()

Moveto "SPED1900"
Moveto [IND_APUR_ICMS]
Locate indicador
If Not RetVal
   Then End
        Down   
        [IND_APUR_ICMS           ]=indicador
        [DESCR_COMPL_OUT_APUR    ]=Texto    
        UnLockRecord
EndIf

Moveto "SPED1910"
Moveto [IND_APUR_ICMS]
Locate indicador
If Not RetVal
   Then End
        Down   
        [IND_APUR_ICMS           ]=indicador
        [DT_INI                  ]=VSDGDTINI
        [DT_FIN                  ]=VSDGDTFIM
        UnLockRecord
EndIf

Moveto TabAtual

EndProc

;*******************************************************************************
;*                                                          
;*******************************************************************************
Proc Grava_1920(Codigo,campo,valor)
Private Codigo, campo, valor, indicador, TabAtual

If IsBlank(Codigo)
   Then Return
EndIf

indicador=substr(codigo,4,1)

If indicador<"3"
   Then Return
EndIf

;switch
;  case indicador="3" : indicador="1"
;  case indicador="4" : indicador="2"
;  case indicador="5" : indicador="3"
;  case indicador="6" : indicador="4"
;  case indicador="7" : indicador="5"
;  case indicador="8" : indicador="6"
;endswitch

TabAtual=Table()

Moveto "SPED1920"
Moveto [IND_APUR_ICMS]
Locate indicador
If Not RetVal
   Then End
        Down   
        [IND_APUR_ICMS ]=indicador
EndIf
switch
  case campo="02" : [VL_TOT_TRANSF_DEBITOS_OA ]=[VL_TOT_TRANSF_DEBITOS_OA ]+valor
  
  case campo="03" : [VL_TOT_AJ_DEBITOS_OA     ]=[VL_TOT_AJ_DEBITOS_OA     ]+valor
  
  case campo="04" : [VL_ESTORNOS_CRED_OA      ]=[VL_ESTORNOS_CRED_OA      ]+valor
  
  case campo="05" : [VL_TOT_TRANSF_CREDITOS_OA]=[VL_TOT_TRANSF_CREDITOS_OA]+valor
  
  case campo="06" : [VL_TOT_AJ_CREDITOS_OA    ]=[VL_TOT_AJ_CREDITOS_OA    ]+valor
  
  case campo="07" : [VL_ESTORNOS_DEB_OA       ]=[VL_ESTORNOS_DEB_OA       ]+valor
  
  case campo="08" : [VL_SLD_CREDOR_ANT_OA     ]=[VL_SLD_CREDOR_ANT_OA     ]+valor
  
  case campo="09" : [VL_SLD_APURADO_OA        ]=[VL_SLD_APURADO_OA        ]+valor
  
  case campo="10" : [VL_TOT_DED               ]=[VL_TOT_DED               ]+valor
  
  case campo="11" : [VL_ICMS_RECOLHER_OA      ]=[VL_ICMS_RECOLHER_OA      ]+valor
  
  case campo="12" : [VL_SLD_CREDOR_TRANSP_OA  ]=[VL_SLD_CREDOR_TRANSP_OA  ]+valor
  
  case campo="13" : [DEB_ESP_OA               ]=[DEB_ESP_OA               ]+valor
  
endswitch
unlockRecord

Moveto TabAtual

EndProc

;*******************************************************************************
;*                                                          
;*******************************************************************************
Proc Grava_E110(campo,valor)
Private campo, valor, TabAtual

TabAtual=Table()

Moveto "SPEDE110"
switch
  case campo="02" : [VL_TOT_DEBITOS           ]=[VL_TOT_DEBITOS            ]+valor
  
  case campo="03" : [VL_AJ_DEBITOS            ]=[VL_AJ_DEBITOS             ]+valor
  
  case campo="04" : [VL_TOT_AJ_DEBITOS        ]=[VL_TOT_AJ_DEBITOS         ]+valor
  
  case campo="05" : [VL_ESTORNOS_CRED         ]=[VL_ESTORNOS_CRED          ]+valor
  
  case campo="06" : [VL_TOT_CREDITOS          ]=[VL_TOT_CREDITOS           ]+valor
  
  case campo="07" : [VL_AJ_CREDITOS           ]=[VL_AJ_CREDITOS            ]+valor
  
  case campo="08" : [VL_TOT_AJ_CREDITOS       ]=[VL_TOT_AJ_CREDITOS        ]+valor
  
  case campo="09" : [VL_ESTORNOS_DEB          ]=[VL_ESTORNOS_DEB           ]+valor
  
  case campo="10" : [VL_SLD_CREDOR_ANT        ]=[VL_SLD_CREDOR_ANT         ]+valor
  
  case campo="11" : [VL_SLD_APURADO           ]=[VL_SLD_APURADO            ]+valor
  
  case campo="12" : [VL_TOT_DED               ]=[VL_TOT_DED                ]+valor
  
  case campo="13" : [VL_ICMS_RECOLHER         ]=[VL_ICMS_RECOLHER          ]+valor
  
  case campo="13" : [VL_SLD_CREDOR_TRANSPORTAR]=[VL_SLD_CREDOR_TRANSPORTAR ]+valor
  
  case campo="13" : [DEB_ESP                  ]=[DEB_ESP                   ]+valor
  
endswitch
unlockRecord

Moveto TabAtual

EndProc

;*******************************************************************************
;*                                                          
;*******************************************************************************
Proc Grava_1921(Codigo,Texto,valor)
Private Codigo, Texto, valor, TabAtual

If IsBlank(Codigo)
   Then Return
EndIf

TabAtual=Table()

Moveto "SPED1921"
Moveto [COD_AJ_APUR  ]
Locate Codigo
If Not RetVal
   Then End
        Down   
        [COD_AJ_APUR   ]=Codigo
        [DESCR_COMPL_AJ]=Texto
EndIf
[VL_AJ_APUR         ]=[VL_AJ_APUR         ]+valor
unlockRecord

Moveto TabAtual

EndProc

;*******************************************************************************
;*                                                          
;*******************************************************************************
Proc Grava_C195(nlanc,cod_obs,txt_compl)
private nlanc,cod_obs,txt_compl, TabAtual

TabAtual=Table()

seqc195=seqc195+1

Moveto "SPEDC195"
End
Down
[Lancamento   ]=nlanc
[Sequencia    ]=seqc195
[COD_OBS      ]=cod_obs
[TXT_COMPL    ]=txt_compl        
UnLockRecord

Moveto TabAtual

EndProc

;*******************************************************************************
;*                                                          
;*******************************************************************************
Proc Grava_C197(nlanc,cod_obs,cod_aj,cod_item,descr_compl_aj,vl_bc_icms,aliq_icms,vl_icms,vl_outros)
Private nlanc,cod_obs,cod_aj,descr_compl_aj,cod_item,vl_bc_icms,aliq_icms,vl_icms,vl_outros, TabAtual

TabAtual=Table()

Moveto "SPEDC197"
moveto [Lancamento]
locate NLanc,cod_obs,cod_aj,cod_item
if not retval
   then  
        End
        Down
        [Lancamento            ]=nlanc 
        [COD_OBS               ]=cod_obs
        [COD_AJ                ]=cod_aj
        [COD_ITEM              ]=cod_item
        [DESCR_COMPL_AJ        ]=descr_compl_aj
        [ALIQ_ICMS             ]=aliq_icms
endif
[VL_BC_ICMS            ]=[VL_BC_ICMS            ]+vl_bc_icms
[VL_ICMS               ]=[VL_ICMS               ]+vl_icms
[VL_OUTROS             ]=[VL_OUTROS             ]+vl_outros
UnLockRecord

Moveto TabAtual

EndProc

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

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

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

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

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

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

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

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

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

COD_VER=""
Switch
  Case Year(VSDGDTFIM)=2008                          : COD_VER="001"
  Case Year(VSDGDTFIM)=2009                          : COD_VER="002"
  Case Year(VSDGDTFIM)=2010                          : COD_VER="003"
  Case Year(VSDGDTFIM)=2011                          : COD_VER="004"
  Case Year(VSDGDTINI)=2012 And Month(VSDGDTINI)<7   : COD_VER="005" 
  Case Year(VSDGDTINI)=2012 And Month(VSDGDTINI)<=12 : COD_VER="006"            
  Case Year(VSDGDTFIM)=2013                          : COD_VER="007"            
  Case Year(VSDGDTFIM)=2014                          : COD_VER="008"            
  Case Year(VSDGDTFIM)=2015                          : COD_VER="009"            
  Case Year(VSDGDTFIM)=2016                          : COD_VER="010"            
  Case Year(VSDGDTFIM)=2017                          : COD_VER="011"            
  OtherWise                                          : COD_VER="012"
EndSwitch

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

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

;---- Gera SPED0015 ------------------------------------------------------------ 
If Not IsBlank([\Sistemas\Cadastro\Destinat->IE_ST])
   Then
        Moveto "SPED0015"           
        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()

NLanc=100000
Monta_BlocoCEntradas1()

NLanc=200000
Monta_BlocoCEntradas2()

NLanc=300000
Monta_BlocoCSaidas1()

NLanc=400000
Monta_BlocoCSaidas2()

NLanc=500000
Monta_BlocoC400ECF()

NLanc=600000
Monta_BlocoC400Cupons()

Endproc

;*******************************************************************************
;* Rotina para montagem do Bloco C - Entradas - NotaEC         
;*******************************************************************************
Proc Monta_BlocoCEntradas1()
Private MODELO,  wi, tpdoctook,
        vr_bcicms2, vr_bcicmsd, vr_Icms1, vr_icms2, itemok,
        regdestinat

{Ask} {\\sistemas\\estoque\\notaec} Check
moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
moveto [Data de Entrada    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Codigo do Documento] TypeIn "CEM or AGUA or GAS or NF.. or NC.. or NS.."
do_it!
ClearAll

if isempty("Answer")
   then return
endif   

NR   =NRecords("Answer")

Empr_Ant="????"

View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPED0220"
View "SPED0400"
View "SPED0450"
View "SPED0460"
View "SPEDC100"
View "SPEDC110"
View "SPEDC113"
View "SPEDC114"
View "SPEDC140"
View "SPEDC141"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "SPEDC197"
View "SPEDC500"
View "SPEDC510"
View "SPEDC590"
View "SPEDE510"
View "SPED1900"
View "SPED1910"
View "SPED1920"
View "SPED1921"
View "SPEDE110"
View "CTP_0500"
View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Tpdoctos"
View "\\Sistemas\\Vendas\\Estados"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\TpItem"
View "\\Sistemas\\Estoque\\Familia"
View "\\Sistemas\\Estoque\\Unidades"
View "\\Sistemas\\Estoque\\NotaEI"
View "\\Sistemas\\Estoque\\NotaECP"
View "\\Sistemas\\Estoque\\NotaER"
Coedit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 1/6",45," ")+BARRA_STRING)

  switch
    case [Answer->Codigo do Documento]="CEM"            : tpdoctook=true  ; Nota Energia
    case [Answer->Codigo do Documento]="AGUA"           : tpdoctook=true  ; Nota Agua
    case [Answer->Codigo do Documento]="GAS"            : tpdoctook=true  ; Nota Gas
    case SubStr([Answer->Codigo do Documento],1,2)="NF" : tpdoctook=true  ; Notas Fiscais todas
    case SubStr([Answer->Codigo do Documento],1,2)="NC" : tpdoctook=true  ; Notas Fiscais consumidor final
    case SubStr([Answer->Codigo do Documento],1,2)="NS" : tpdoctook=true  ; Notas Fiscais Servico            
    otherwise                                                             : tpdoctook=false
  endswitch
  if not tpdoctook then loop endif

 ;If ([Data de Entrada]<VSDGDTINI Or [Data de Entrada]>VSDGDTFIM)
 ;   Then Loop
 ;EndIf
 ;If [Codigo da Empresa]<>VSDGEMPRESA
 ;   Then Loop
 ;EndIf    
 ;If [Answer->Valor Mercadoria]<=0 And   aceitar notas de servico                            
 ;   [Answer->Valor Servico   ]>0                                 
 ;   Then Loop
 ;EndIf   

  If [Codigo da Empresa]<>Empr_Ant
     Then Moveto "\\Sistemas\\Cadastro\\Empresas"
          Moveto [Codigo da Empresa]
          Locate [Answer->Codigo da Empresa]
          If RetVal
             Then ATIVIDADE =[Atividade      ]
                  TPEMPR    =[Tipo da Empresa]
                  UFEMPR    =[UF Empresa     ]
             Else ATIVIDADE =""
                  TPEMPR    =""
                  UFEMPR    =""
          EndIf
          Empr_Ant=[Codigo da Empresa]
          
          ALIQ_ICMS_EMPR=BlankNum()
          Moveto "\\Sistemas\\Vendas\\Estados"
          Moveto [UF]
          Locate UFEMPR
          If RetVal
             Then ALIQ_ICMS_EMPR=[Aliquota de ICMS]
          EndIf
          
          Moveto "Answer"
  EndIf

  Grava_Participantes([Answer->Codigo],"Nota Entrada: "+[Answer->Numero do Documento ])

  NLanc=NLanc+1  

  Switch
    Case [Answer->Codigo do Documento]="CEM"  Or  ; Nota Energia
         [Answer->Codigo do Documento]="AGUA" Or  ; Nota Agua   
         [Answer->Codigo do Documento]="GAS"    : ; Nota Gas       
      Moveto "SPEDC500"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[Answer->Codigo]
      Switch
        Case [Answer->Codigo do Documento]="CEM"  : MODELO="06"
        Case [Answer->Codigo do Documento]="AGUA" : MODELO="29"  
        Case [Answer->Codigo do Documento]="GAS"  : MODELO="28"
      EndSwitch
      [COD_MOD] = MODELO
      
      If [Answer->Tipo de NF] = "N" OR
         [Answer->Tipo de NF] = "0"
         Then [COD_SIT          ]="00"
         Else If [Answer->Tipo de NF] = "C"
                Then [COD_SIT   ]="06"
                Else [COD_SIT   ]="01"
              EndIf
      EndIf
         
      [SER              ]=[Answer->Serie do Documento   ]
      [SUB              ]=[Answer->SubSerie do Documento]
      
      Switch
        Case Search("IND",ATIVIDADE)>0 : [COD_CONS]="04" 
        OtherWise                      : [COD_CONS]="01"
      EndSwitch
      [NUM_DOC          ]=[Answer->Numero do Documento ]
      [DT_DOC           ]=[Answer->Data de Emissao     ] 
      If [COD_SIT]="01"
         Then [DT_E_S]=[Answer->Data de Emissao]  
         Else [DT_E_S]=[Answer->Data de Entrada]
      EndIf
      [VL_DOC           ]=[Answer->Valor Nota Fiscal   ]
      [VL_DESC          ]=[Answer->Valor Desconto      ]
      [VL_FORN          ]=[Answer->Valor Mercadoria    ]
      [VL_SERV_NT       ]=[Answer->Valor Servico       ]
      [VL_TERC          ]=0
      [VL_DA            ]=[Answer->Valor Despesas Acessorias]
      [VL_BC_ICMS       ]=[Answer->Valor BCICMS]
      [VL_ICMS          ]=[Answer->Valor ICMS]
      [VL_BC_ICMS_ST    ]=[Answer->Valor BCSubstituicao ICMS]
      [VL_ICMS_ST       ]=[Answer->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         ]=[Answer->Codigo]
      Switch
        Case [Answer->Codigo do Documento]="NF-E" : MODELO="55"
        Case [Answer->Codigo do Documento]="NFE1" : MODELO="55"
        Case [Answer->Codigo do Documento]="NFE9" : MODELO="55"
        Case [Answer->Codigo do Documento]="NFAE" : MODELO="55"
        Case [Answer->Codigo do Documento]="NFAV" : MODELO="1B"
        OtherWise                                                   : MODELO="01"
      EndSwitch
      [COD_MOD          ]=MODELO
      Switch
        Case [Answer->Tipo de NF] = "N"           : [COD_SIT          ]="00" 
        Case [Answer->Tipo de NF] = "0"           : [COD_SIT          ]="00"  
        Case [Answer->Tipo de NF] = "C"           : [COD_SIT          ]="06"    
        Case [Answer->Codigo do Documento]="NFAE" : [COD_SIT          ]="08"    
        Otherwise                                 : [COD_SIT          ]="01"   
      EndSwitch
      
      [SER              ]=[Answer->Serie do Documento]
      if [COD_MOD]="55" or [COD_MOD]="65" 
         then [SER]=AlinhM([SER],3) 
      endif
      [NUM_DOC          ]=[Answer->Numero do Documento ]
      If [COD_MOD]="55" 
         Then [CHV_NFE          ]=[Answer->Chave_Acesso_NFe    ]
         Else [CHV_NFE          ]=""
      EndIf
      [DT_DOC           ]=[Answer->Data de Emissao     ] 
      If [COD_SIT]="01"
         Then [DT_E_S]=[Answer->Data de Emissao]
         Else [DT_E_S]=[Answer->Data de Entrada]
      EndIf
      [VL_DOC           ]=[Answer->Valor Nota Fiscal   ]
      Switch
        Case [Answer->Tipo de Pagamento]="V": [IND_PGTO]="0"
        Case [Answer->Tipo de Pagamento]="P": [IND_PGTO]="1"
        OtherWise:                                    
          If COD_VER>="006"
             Then [IND_PGTO]="2"
             Else [IND_PGTO]="9"
          EndIf
      EndSwitch
      [VL_DESC          ]=[Answer->Valor Desconto      ]
      [VL_ABAT_NT       ]=0
      [VL_MERC          ]=[Answer->Valor Mercadoria    ]+
                          [Answer->Valor Servico       ]

      Switch 
        Case Year([Answer->Data de Entrada])<2012: 
          Switch
            Case [Answer->Tipo CTR]="0": [IND_FRT]="9"
            Case [Answer->Tipo CTR]="1": [IND_FRT]="1"
            Case [Answer->Tipo CTR]="2": [IND_FRT]="2"
            Case [Answer->Tipo CTR]="3": [IND_FRT]="0"
            OtherWise                                    : [IND_FRT]="9"
          EndSwitch
        OtherWise:
          Switch
            Case [Answer->Tipo CTR]="0": [IND_FRT]="9"
            Case [Answer->Tipo CTR]="1": [IND_FRT]="0"
            Case [Answer->Tipo CTR]="2": [IND_FRT]="1"
            Case [Answer->Tipo CTR]="3": [IND_FRT]="2"
            Case [Answer->Tipo CTR]="4": [IND_FRT]="2"
            Case [Answer->Tipo CTR]="5": [IND_FRT]="2"
            OtherWise                                    : [IND_FRT]="9"
          EndSwitch
      EndSwitch

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

      ObsOk=False
      NOTALANC =[Answer->Numero do Lancamento]
      GetRecord "\\Sistemas\\Estoque\\NotaEIA" NOTALANC To NTEIA_OBS 
      If RetVal
         Then Grava_InformacaoComplementar("?","") 
         
              Moveto "SPEDC110"
              End
              Down
              [Lancamento            ]=NLanc 
              [Sequencia             ]=0
              [COD_INF               ]="000001"
              [TXT_COMPL             ]=Tira_CharEspecial(NTEIA_OBS["Informacoes_Adicionais"])
              [TXT_COMPL             ]=Tira_Caractere([TXT_COMPL])
              UnLockRecord
              
              ObsOk=True
      EndIf 

  EndSwitch 

  doctorefok=false

  Moveto "\\Sistemas\\Estoque\\NotaER"
  Moveto [Numero do Lancamento]
  Locate [Answer->Numero do Lancamento]
  If RetVal
      Then seq=0 
           While [Numero do Lancamento]=[Answer->Numero do Lancamento]

            Seq=Seq+1
            
            Switch
              Case [\Sistemas\Estoque\NotaER->Modelo_Documento]="2B" Or
                   [\Sistemas\Estoque\NotaER->Modelo_Documento]="2C" Or
                   [\Sistemas\Estoque\NotaER->Modelo_Documento]="2D":
                   
                Moveto "SPEDC114"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [COD_MOD               ]=[\Sistemas\Estoque\NotaER->Modelo_Documento        ]
                [ECF_FAB               ]=[\Sistemas\Estoque\NotaER->Numero_Serie_ECF        ]
                [ECF_CX                ]=[\Sistemas\Estoque\NotaER->Numero_ECF              ]
                [NUM_DOC               ]=[\Sistemas\Estoque\NotaER->Numero_Documento        ]
                [DT_DOC                ]=[\Sistemas\Estoque\NotaER->Data_Documento          ]
                UnLockRecord

                doctorefok=true

              OtherWise:
                Grava_Participantes([\Sistemas\Estoque\NotaER->Codigo_Participante],"Nota Entrada/DocRefer: "+[Answer->Numero do Documento ])

                Moveto "SPEDC113"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [IND_OPER              ]="0"
                [IND_EMIT              ]=[\Sistemas\Estoque\NotaER->IND_EMIT                ]
                if isblank([IND_EMIT])
                   then [IND_EMIT      ]="1"
                        Switch
                          Case [Answer->Tipo de Operacao]="D" : [IND_EMIT ]="0"
                          Case [Answer->Tipo de Operacao]="T" : [IND_EMIT ]="0"
                        EndSwitch
                endif   
                [COD_PART              ]=[\Sistemas\Estoque\NotaER->Codigo_Participante     ]
                [COD_MOD               ]=[\Sistemas\Estoque\NotaER->Modelo_Documento        ]
                [DT_DOC                ]=[\Sistemas\Estoque\NotaER->Data_Documento          ]
                [SER                   ]=[\Sistemas\Estoque\NotaER->Serie_Documento         ]
                [SUB                   ]=[\Sistemas\Estoque\NotaER->SubSerie_Documento      ]
                [NUM_DOC               ]=[\Sistemas\Estoque\NotaER->Numero_Documento        ]
                if [COD_MOD]="55" or [COD_MOD]="57"
                   then [CHV_DOCe      ]=[\Sistemas\Estoque\NotaER->Chave_Acesso            ]
                endif   
                UnLockRecord

                doctorefok=true

            EndSwitch

            If Seq=1 And doctorefok And Not ObsOk And COD_VER>"004"
               Then Grava_InformacaoComplementar("?","") 
               
                    Moveto "SPEDC110"
                    End
                    Down
                    [Lancamento            ]=NLanc 
                    [Sequencia             ]=0
                    [COD_INF               ]="000001"
                    [TXT_COMPL             ]="OBS"
                    UnLockRecord
            EndIf

            Moveto "\\Sistemas\\Estoque\\NotaER" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  ;-- variaveis para atualizar total dos tributos no documento -----------------
  vl_doc_bcicms  =0 
  vl_doc_icms    =0
  vl_doc_bcicmsst=0 
  vl_doc_icmsst  =0
  vl_doc_ipi     =0
  vl_doc_pis     =0
  vl_doc_cofins  =0
  
  vl_add_ipi     =0 
  vl_add_st      =0 
  
  vl_bc_icms_estorno=0 ; siri
  vl_bc_icms_ajuste =0 ; modamil

  vl_icms_devefetivo =0 ; pierre
  vl_icms_devexcedido=0 ; pierre

  vltot_icms_devefetivo =0 ; pierre
  vltot_icms_devexcedido=0 ; pierre

  vl_icms_credsn =0

  seq    =0
  seqc195=0
            
  Moveto "\\Sistemas\\Estoque\\NotaEI"
  Moveto [Numero do Lancamento]
  Locate [Answer->Numero do Lancamento]
  If RetVal
      Then  While [Numero do Lancamento]=[Answer->Numero do Lancamento]
     
              ;--- Memorizando dados do item -----------------------------------
              If [Answer->Codigo do Documento]="CEM"  Or  ; Nota Energia
                 [Answer->Codigo do Documento]="AGUA" Or  ; Nota Agua   
                 [Answer->Codigo do Documento]="GAS"      ; Nota Gas       
                 Then Item_CST_ICMS  =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
                 
                 Else Grava_NaturezaOperacao([Answer->Tipo de Operacao],"Nota Entrada: "+[Answer->Numero do Documento ])
                      Grava_Itens([\Sistemas\Estoque\NotaEI->Codigo do Item],"Nota Entrada: "+[Answer->Numero do Documento ])
                      Grava_Unidade_Conversao([\Sistemas\Estoque\NotaEI->Codigo do Item    ],
                                              [\Sistemas\Estoque\NotaEI->Unidade Entrada   ], 
                                              [\Sistemas\Estoque\NotaEI->Fator de Conversao],
                                              "Nota Entrada: "+[Answer->Numero do Documento ])
                      Grava_Unidades([\Sistemas\Estoque\NotaEI->Unidade Entrada],"Nota Entrada: "+[Answer->Numero do Documento ])
  
                      ;--- verifica cst/icms do cadastro ------------------------------------------
                      ;--- checar item sem icms st no estado de origem 
                      ;---         mas com icms st no estado de destino 
                      Item_CST_ICMS  =""
                      Item_CST_ICMS  =[\Sistemas\Estoque\Itens->Tipo Tributacao          ]
              EndIf        
              Seq=Seq+1 
  
              CFOP           =[\Sistemas\Estoque\NotaEI->CFO                     ]
              VL_ITEM        =[\Sistemas\Estoque\NotaEI->Preco Total             ]
              VL_DESC        =[\Sistemas\Estoque\NotaEI->Valor Desconto Total    ]
              VR_ACRESC      =[\Sistemas\Estoque\NotaEI->Valor Frete Total       ]+
                              [\Sistemas\Estoque\NotaEI->Valor Seguro Total      ]+
                              [\Sistemas\Estoque\NotaEI->Valor OutDesp Total     ] 
  
              CST_ICMS       =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
              ALIQ_ICMS      =[\Sistemas\Estoque\NotaEI->Aliquota de ICMS        ]
              ALIQ_RD_ICMS   =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]
              If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
              If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
              VL_BC_ICMS     =[\Sistemas\Estoque\NotaEI->ICMS_BC                 ]
              VL_ICMS        =[\Sistemas\Estoque\NotaEI->Valor do ICMS           ]
              VL_RED_BC      =0
  
              VL_BC_ICMS_ST  =[\Sistemas\Estoque\NotaEI->ICMS_ST_BC              ]
              ALIQ_ST        =[\Sistemas\Estoque\NotaEI->ICMS_ST_Aliquota        ]
              If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
              VL_ICMS_ST     =[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]
  
              CST_IPI        =[\Sistemas\Estoque\NotaEI->IPI_CST                 ]
              COD_ENQ        =""
              ALIQ_IPI       =[\Sistemas\Estoque\NotaEI->Aliquota de IPI         ]
              ALIQ_RD_IPI    =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCIPI ]
              If IsBlank(ALIQ_IPI)     Or ALIQ_IPI<=0     Then ALIQ_IPI=0     EndIf
              If IsBlank(ALIQ_RD_IPI)  Or ALIQ_RD_IPI<=0  Then ALIQ_RD_IPI=0  EndIf
              VL_BC_IPI      =[\Sistemas\Estoque\NotaEI->IPI_BC                  ]
              VL_IPI         =[\Sistemas\Estoque\NotaEI->Valor do IPI            ]
  
              CST_PIS        =[\Sistemas\Estoque\NotaEI->PIS_CST                 ]
              VL_BC_PIS      =[\Sistemas\Estoque\NotaEI->PIS_BC                  ]
              ALIQ_PIS       =[\Sistemas\Estoque\NotaEI->PIS_Aliquota            ]
              QUANT_BC_PIS   =0
              ALIQ_PIS2      =0
              VL_PIS         =[\Sistemas\Estoque\NotaEI->PIS_Valor               ]
  
              CST_COFINS     =[\Sistemas\Estoque\NotaEI->COFINS_CST              ]
              VL_BC_COFINS   =[\Sistemas\Estoque\NotaEI->COFINS_BC               ]
              ALIQ_COFINS    =[\Sistemas\Estoque\NotaEI->COFINS_Aliquota         ]
              QUANT_BC_COFINS=0
              ALIQ_COFINS2   =0
              VL_COFINS      =[\Sistemas\Estoque\NotaEI->COFINS_Valor            ]
  
              VL_OPR=(VL_ITEM-VL_DESC)+(VL_IPI+VL_ICMS_ST)+VR_ACRESC
  
              If ALIQ_ICMS>0 
                 Then VL_RED_BC =NDecimal(((VL_ITEM-VL_DESC)*ALIQ_RD_ICMS)/100,2)
              EndIf
  
              ;--- classifica as opera‡äes com ou sem credito do tributo -------------------
              tem_credito_icmsst=true 
              tem_credito_icms  =true 
              tem_credito_ipi   =true 
    
              ;--- Verificando se ‚ comercio --------------------------------------
              If Search("IND",ATIVIDADE)=0                       ; nÆo ‚ Industria entÆo comercio/servi‡o
                 Then CST_IPI        =""
              EndIf

              If Search("IND",ATIVIDADE)=0   and                 ; nÆo ‚ Industria entÆo comercio/servi‡o
                 [\Sistemas\Estoque\NotaEI->Tipo do Item ]<>"T"  ; Item Diferente Terceiros/Revenda
                 Then Tem_Credito_ipi=False
              EndIf
    
              ;--- Verificando se ‚ comercio e item de revenda --------------------
              If Search("COM",ATIVIDADE)>0   and                 ; ‚ comercio
                 [\Sistemas\Estoque\NotaEI->Tipo do Item ]="T"   ; Item Terceiros/Revenda
                 Then
                      If SubStr(Item_CST_ICMS,1,1)="0" Or  ; origem do produto              
                         SubStr(Item_CST_ICMS,1,1)="2" Or         
                         SubStr(Item_CST_ICMS,1,1)="3" Or         
                         SubStr(Item_CST_ICMS,1,1)="4" Or         
                         SubStr(Item_CST_ICMS,1,1)="5" Or         
                         SubStr(Item_CST_ICMS,1,1)="6"            
                         Then Tem_Credito_ipi=False
                      EndIf
              EndIf   
    
              ;--- Verificando se ‚ opera‡Æo com uso,consumo e imobilizado --------
              If SearchFrom("155",CFOP,1)>0 Or  ; 155.. 255.. uso, consumo e imobilizado
                 SearchFrom("255",CFOP,1)>0 Or
                  
                 ( [Answer->Tipo de Operacao]="A" and
                   CFOP<>"1923" and CFOP<>"2923" )   Or  ; Nota de entrada/estoque de Aplica‡Æo Direta
                    
                 ;;;;;[\Sistemas\Estoque\NotaEI->Tipo do Item ]="D"      Or  ; Item Aplica‡Æo Direta    -- nÆo se aplica caso CEMIG
                 [\Sistemas\Estoque\NotaEI->Tipo do Item ]="G"      Or  ; Item Moveis e Utensilios
                 [\Sistemas\Estoque\NotaEI->Tipo do Item ]="H"      Or  ; Item Maquinas e Equipamentos
                 [\Sistemas\Estoque\NotaEI->Tipo do Item ]="I"          ; Item Bens em Geral    
                 Then 
                       tem_credito_icmsst=false 
                       tem_credito_icms  =false 
                       tem_credito_ipi   =false 
              EndIf

              ;--- Verificando se ‚ industria e com credito -----------------------
              If Search("IND",ATIVIDADE)>0 and tem_credito_ipi   ; ‚ Industria 
                 Then if search(CST_IPI,"02,03,04,05")>0         ; nÆo tem credito
                         then tem_credito_ipi   =false
                      endif    
              EndIf
               
              ;--- Verificando se ‚ item com icms st no cadastro -------------------
              If Search(SubStr(Item_CST_ICMS,2,2),"60")>0 ; produto com ST nao aproveita ICMS
                 Then Switch 
                        Case [Answer->Tipo de Operacao]<>"D":
                             tem_credito_icmsst=false 
                             tem_credito_icms  =false 
                         
                      EndSwitch
              EndIf
               
              ;--- NÆo vai ter credito de icms na opera‡Æo --------------------------------
              If not tem_credito_icms
                 Then 
                      ALIQ_ICMS                 =0
                      VL_BC_ICMS                =BlankNum()
                      VL_ICMS                   =BlankNum()
                      VL_RED_BC                  =0
              EndIf   
          
              ;--- NÆo vai ter credito de icmssta opera‡Æo --------------------------------
              If not tem_credito_icmsst
                 Then 
                      ALIQ_ST                   =0
                      VL_BC_ICMS_ST             =BlankNum()
                      VL_ICMS_ST                =BlankNum()
                      
                      vl_item = vl_item +[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]
              EndIf   
          
              ;--- NÆo vai ter credito de ipi  na opera‡Æo --------------------------------
              If not tem_credito_ipi 
                 Then 
                      ALIQ_IPI                  =0
                      VL_IPI_BC                 =BlankNum()
                      VL_IPI                    =BlankNum()

                      vl_item = vl_item +[\Sistemas\Estoque\NotaEI->Valor do IPI            ]
              EndIf   
       
              ;--- ICMS Calculo Diferencial de Aliquota -----------------------------------
              vr_dif_icms=0
              if [\Sistemas\Estoque\NotaEi->INCIDENCIA DIF_ALIQ_ICMS]="1" ; tributo fiscal
                 then vr_dif_icms=[\Sistemas\Estoque\NotaEi->VALOR DIF_ALIQ_ICMS]
              endif
          
              Switch
                Case [Answer->Codigo do Documento]="CEM"  Or  ; Nota Energia
                     [Answer->Codigo do Documento]="AGUA" Or  ; Nota Agua   
                     [Answer->Codigo do Documento]="GAS"    : ; Nota Gas       

                  ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -------------------------
                  Moveto "SPEDC590"
                  Moveto [Lancamento]
                  Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                  If Not RetVAl
                     Then End
                          Down
                          [Lancamento   ]=NLANC
                          [CST_ICMS     ]=CST_ICMS
                          [CFOP         ]=CFOP
                          [ALIQ_ICMS    ]=ALIQ_ICMS
                  EndIf
                  [VL_OPR       ]=[VL_OPR       ]+VL_OPR
                  [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
                  [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
                  [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
                  [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
                  [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
                  [COD_OBS      ]=""        
                  UnLockRecord
  
                OtherWise                                                 : ; Notas Fiscais
                  Moveto "SPEDC170"
                  End
                  Down
                  [Lancamento            ]=NLanc 
                  [Sequencia             ]=Seq
                  [NUM_ITEM              ]=Seq  
                  [COD_ITEM              ]=[\Sistemas\Estoque\NotaEI->Codigo do Item]
                  [DESCR_COMPL           ]=""
                  [QTD                   ]=[\Sistemas\Estoque\NotaEI->Quantidade]
                  [UNID                  ]=[\Sistemas\Estoque\NotaEI->Unidade Entrada]
                  [VL_ITEM               ]=VL_ITEM
                  [VL_DESC               ]=VL_DESC
                  If [Answer->Tipo de Operacao]="A" Or
                     [Answer->Tipo de Operacao]="I" Or
                     IsBlank([\Sistemas\Estoque\NotaEI->Codigo do Item]) Or
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="C" Or
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="D" Or
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="G" Or
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="H" Or
                     [\Sistemas\Estoque\NotaEI->Tipo do Item]="I"
                     Then [IND_MOV       ]="1"
                     Else [IND_MOV       ]="0"
                  EndIf
                  [CST_ICMS              ]=CST_ICMS
                  [CFOP                  ]=CFOP
                  [COD_NAT               ]=[Answer->Tipo de Operacao]
                  [VL_BC_ICMS            ]=VL_BC_ICMS
                  [ALIQ_ICMS             ]=ALIQ_ICMS
                  [VL_ICMS               ]=VL_ICMS
  
                  [VL_BC_ICMS_ST         ]=VL_BC_ICMS_ST
                  [ALIQ_ST               ]=ALIQ_ST
                  [VL_ICMS_ST            ]=VL_ICMS_ST
  
                  Switch
                    Case SYS_CODIGO_CLIENTE="0000" :[IND_APUR]="0"
                    OtherWise                      :[IND_APUR]="0"
                  EndSwitch
                  [CST_IPI               ]=CST_IPI
                  [COD_ENQ               ]=COD_ENQ
                  [VL_BC_IPI             ]=VL_BC_IPI
                  [ALIQ_IPI              ]=ALIQ_IPI
                  [VL_IPI                ]=VL_IPI
  
                  [CST_PIS               ]=CST_PIS
                  [VL_BC_PIS             ]=VL_BC_PIS
                  [ALIQ_PIS              ]=ALIQ_PIS
                  [QUANT_BC_PIS          ]=QUANT_BC_PIS
                  [ALIQ_PIS2             ]=ALIQ_PIS2
                  [VL_PIS                ]=VL_PIS
  
                  [CST_COFINS            ]=CST_COFINS
                  [VL_BC_COFINS          ]=VL_BC_COFINS
                  [ALIQ_COFINS           ]=ALIQ_COFINS
                  [QUANT_BC_COFINS       ]=QUANT_BC_COFINS
                  [ALIQ_COFINS2          ]=ALIQ_COFINS2
                  [VL_COFINS             ]=VL_COFINS
  
                  [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                                           [Answer->Codigo do Documento],
                                                           [Answer->Codigo             ],CFOP)  
                  UnLockRecord
  
                  ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -------------------------
                  Moveto "SPEDC190"
                  Moveto [Lancamento]
                  Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                  If Not RetVAl
                     Then End
                          Down
                          [Lancamento   ]=NLANC
                          [CST_ICMS     ]=CST_ICMS
                          [CFOP         ]=CFOP
                          [ALIQ_ICMS    ]=ALIQ_ICMS
                  EndIf
                  [VL_OPR       ]=[VL_OPR       ]+VL_OPR
                  [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
                  [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
                  [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
                  [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
                  [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
                  [VL_IPI       ]=[VL_IPI       ]+VL_IPI
                  [COD_OBS      ]=""
                  
                  [VL_IPI nao creditado ]=[VL_IPI nao creditado ]+([\Sistemas\Estoque\NotaEI->Valor do IPI]-VL_IPI)        
                  [VL_ICMS Dif. Aliquota]=[VL_ICMS Dif. Aliquota]+vr_dif_icms
                  
                  [VL_BCICMSST nao creditado ]=[VL_BCICMSST nao creditado ]+([\Sistemas\Estoque\NotaEI->ICMS_ST_BC   ]-VL_BC_ICMS_ST)        
                  [VL_ICMSST nao creditado   ]=[VL_ICMSST nao creditado   ]+([\Sistemas\Estoque\NotaEI->ICMS_ST_Valor]-VL_ICMS_ST)        
                  
                  UnLockRecord

                  ;--- Diferencial de Aliquota ICMS ------------------------------
                  If vr_dif_icms>0
                     Then
                          Grava_C197(NLanc,"0105","MG70000001",[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                     "",
                                     blankNum(),
                                     blankNum(),
                                     blankNum(),
                                     vr_dif_icms)
                  Endif

                  ;--- Credito de Origem Simples Nacional ------------------------
                  If tem_credito_icms and [\Sistemas\Estoque\NotaEI->ICMS_CredSN_Valor   ]>0
                     Then
                          Grava_C197(NLanc,"0250","MG10990505",[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                     "AJUSTE DE CREDITO POR AQUISICAO EMPRESA SIMPLES NACIONAL",
                                     blankNum(),
                                     [\Sistemas\Estoque\NotaEI->ICMS_CredSN_Aliquota],
                                     [\Sistemas\Estoque\NotaEI->ICMS_CredSN_Valor   ],
                                     blanknum())
                     
                          vl_icms_credsn =vl_icms_credsn +[\Sistemas\Estoque\NotaEI->ICMS_CredSN_Valor   ]
                  Endif

                  If Search("IND",ATIVIDADE)>0 ; ‚ industria ou equiparado ! 
                     Then 
                         ;--- Analitico CFOP,CST_IPI -----------------------------
                          Moveto "SPEDE510"
                          Moveto [CFOP]
                          Locate CFOP,CST_IPI
                          If Not RetVAl
                             Then End
                                  Down
                                  [CFOP         ]=CFOP
                                  [CST_IPI      ]=CST_IPI 
                          EndIf
                          [VL_CONT_IPI  ]=[VL_CONT_IPI  ]+VL_OPR        
                          [VL_BC_IPI    ]=[VL_BC_IPI    ]+VL_BC_IPI 
                          [VL_IPI       ]=[VL_IPI       ]+VL_IPI 
                          UnLockRecord
                  EndIf

                  ;--- MODAMIL -------------------------------------------------------
                  if sys_Codigo_Cliente         ="0051"     and 
                     [Answer->Codigo da Empresa]="0001"     and 
                     ALIQ_ICMS>0                            and
                     [Answer->TIPO PESSOA      ]="JURIDICA" and 
                     [Answer->Tipo de Operacao ]="D"        and
                     substr(CST_ICMS,1,1)="1" 
                     Then
                          itemok=false
                          getrecord "\\sistemas\\estoque\\itens" [\Sistemas\Estoque\NotaEI->Codigo do Item] to regitens
                          if retval
                             then if regitens["Codigo do Grupo"]="003"
                                     then itemok=true
                                  endif
                          endif   
                          if itemok
                             then
                                  aliq_imcs_ajuste =0
                                  aliq_imcs_efetiva=0
                                  vl_icms_efetiva  =0 
                                  switch
                                    case substr(CFOP,1,1)="2" and ALIQ_ICMS=4  : aliq_imcs_ajuste=2.5
              
                                    case substr(CFOP,1,1)="1" and ALIQ_ICMS<25 : aliq_imcs_ajuste=4
               
                                    case substr(CFOP,1,1)="1" and ALIQ_ICMS=25 : aliq_imcs_ajuste=5
              
                                  endswitch
                                  vl_bc_icms_ajuste =vl_bc_icms_ajuste+vl_bc_icms
                                  
                                  aliq_imcs_efetiva =ALIQ_ICMS-aliq_imcs_ajuste
                                  vl_icms_efetiva   =round((vl_bc_icms*vl_icms_efetiva)/100,2) 
                                  
                                  Grava_C197(NLanc,"0006","MG54000999",[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             "credito para sub-apuracao do produto "+[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             vl_bc_icms,
                                             aliq_imcs_efetiva,
                                             vl_icms_efetiva,
                                             blanknum())

                                  Grava_1920("MG54000999","05",vl_icms)

                                  
                                  Grava_C197(NLanc,"0006","MG50000999",[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             "Estorno de credito de devolucao do produto "+[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             blanknum(),
                                             blanknum(),
                                             (vl_icms-vl_icms_efetiva),
                                             blanknum())
                          endif    
                  Endif
                  ;-------------------------------------------------------------------


                  ;--- Pierre --------------------------------------------------------
                  if sys_Codigo_Cliente         ="0413" and 
                     ALIQ_ICMS>0                        and
                     [Answer->Tipo de Operacao ]="D"        
                     Then
                          getrecord "\\Sistemas\\Cadastro\\Destinat" [Answer->Codigo] to regdestinat
                          if retval and regdestinat["TIPO PESSOA"]="JURIDICA" and regdestinat["IE"]<>"NAOCONTRIBUINTE"
                             then 
                                  aliq_imcs_efetivo =2
                                  aliq_imcs_excedido=ALIQ_ICMS-2
                                   
                                  vl_icms_efetivo   =round((vl_bc_icms*aliq_imcs_efetivo )/100,2) 
                                  vl_icms_excedido  =round((vl_bc_icms*aliq_imcs_excedido)/100,2) 


                                  Grava_C197(NLanc,"0200","MG53000999",[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             "credito para sub-apuracao do produto "+[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             vl_bc_icms,
                                             aliq_imcs_efetivo,
                                             vl_icms_efetivo,
                                             blanknum())
                                   
                                  Grava_1920("MG53000999","05",vl_icms_efetivo)
                                  Grava_E110("03",vl_icms_efetivo)
                                  

                                  Grava_C197(NLanc,"0202","MG50000100",[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             "estorno de credito de devolucao do produto "+[\Sistemas\Estoque\NotaEI->Codigo do Item],
                                             blanknum(),
                                             blanknum(),
                                             vl_icms_excedido,
                                             blanknum())

                                  Grava_1920("MG50000100","05",vl_icms_excedido)
                                  Grava_E110("03",vl_icms_excedido)

                                  
                                  vltot_icms_devefetivo =vltot_icms_devefetivo +vl_icms_efetivo
                                  vltot_icms_devexcedido=vltot_icms_devexcedido+vl_icms_excedido
                          endif
                  endif   
                  ;-------------------------------------------------------------------

              EndSwitch
  
              vl_doc_bcicms  =vl_doc_bcicms   +vl_bc_icms 
              vl_doc_icms    =vl_doc_icms     +vl_icms

              vl_doc_bcicmsst=vl_doc_bcicmsst +vl_bc_icms_st 
              vl_doc_icmsst  =vl_doc_icmsst   +vl_icms_st

              vl_doc_ipi     =vl_doc_ipi      +vl_ipi
              vl_doc_pis     =vl_doc_pis      +vl_pis
              vl_doc_cofins  =vl_doc_cofins   +vl_cofins
              
              If not tem_credito_icmsst
                 Then vl_add_st  = vl_add_st +[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor]
              EndIf                                                                   
              If not tem_credito_ipi 
                 Then vl_add_ipi = vl_add_ipi+[\Sistemas\Estoque\NotaEI->Valor do IPI ]
              EndIf   
              
             
              Moveto "\\Sistemas\\Estoque\\NotaEI" 
              Skip
              If EOT() Then QuitLoop EndIf
            EndWhile

            Moveto "SPEDC100"
            Moveto [Lancamento]
            Locate NLanc
            If RetVal
               Then
                    [VL_BC_ICMS       ]=vl_doc_bcicms
                    [VL_ICMS          ]=vl_doc_icms
                    [VL_BC_ICMS_ST    ]=vl_doc_bcicmsst
                    [VL_ICMS_ST       ]=vl_doc_icmsst
                    [VL_IPI           ]=vl_doc_ipi
                    [VL_PIS           ]=vl_doc_pis
                    [VL_COFINS        ]=vl_doc_cofins
                    
                    [VL_MERC          ]=[VL_MERC          ]+
                                        vl_add_ipi+vl_add_St
                    
                    UnLockRecord
            EndIf
            
            
            Moveto "SPEDC190"
            Moveto [Lancamento]
            Locate NLanc
            If RetVal
               Then vr_ipi_nao_creditado     =0
                    vr_icms_dif_aliquota     =0
                    vr_bcicmsst_nao_creditado=0
                    vr_icmsst_nao_creditado  =0
                    
                    While [Lancamento]=Nlanc
                      vr_ipi_nao_creditado     =vr_ipi_nao_creditado+[VL_IPI nao creditado ]
                      vr_icms_dif_aliquota     =vr_icms_dif_aliquota+[VL_ICMS Dif. Aliquota]
                      
                      vr_bcicmsst_nao_creditado=vr_bcicmsst_nao_creditado+[VL_BCICMSST nao creditado]
                      vr_icmsst_nao_creditado  =vr_icmsst_nao_creditado  +[VL_ICMSST nao creditado  ]
                      
                      Skip
                      If EOT() Then QuitLoop EndIf
                    EndWhile
                    
                    If vr_ipi_nao_creditado>0
                       Then
                       
                            Grava_Obs0460("0100","VR IPI NAO CREDITADO")
                       
                            Grava_C195(NLANC,"0100",LTrim(StrVal(Format("W14.2,EIC",vr_ipi_nao_creditado))))                   
                    EndIf   
                    If vr_icms_dif_aliquota>0
                       Then

                            Grava_Obs0460("0105","VR ICMS DIFERENCIAL DE ALIQUOTA")

                            Grava_C195(NLANC,"0105",LTrim(StrVal(Format("W14.2,EIC",vr_icms_dif_aliquota))))                   
                    EndIf
                    If vr_bcicmsst_nao_creditado>0 or vr_icmsst_nao_creditado>0
                       Then
                       
                            Grava_Obs0460("0110","ICMS ST NAO CREDITADO")

                            Grava_C195(NLANC,"0110",LTrim(StrVal(Format("W14.2,EIC",vr_icmsst_nao_creditado))))                   
                    EndIf
            EndIf

            ;--- RET Pierre -------------------------------------------------------------
            if sys_Codigo_Cliente ="0413" 
               Then
                    if vltot_icms_devefetivo>0 
                       then
                            Grava_Obs0460("0200","Estorno de credito - e-PTA n. 45.000014353-45")

                            Grava_C195(NLANC,"0200","Credito para a sub-apuracao")                   

                            Grava_1900("MG53000999","")
                    endif
                            
                    if vltot_icms_devexcedido>0 
                       then
                            Grava_Obs0460("0202","Estorno de estorno de credito - e-PTA n. 45.000014353-45")

                            Grava_C195(NLANC,"0202","Estorno de estorno de credito devido a devolucao de mercadoria alcancada com o credito presumido")                   

                            Grava_1900("MG50000999","")
                    endif
            endif           
            
            ;--- RET SIRI,ECLETICA ------------------------------------------------------
            if (sys_Codigo_Cliente ="0227" and [Answer->Codigo da Empresa]="0001") 
               Then
                    if vl_doc_icms>0 
                       then
                            Grava_Obs0460("0200","Estorno de credito - RET PTA n. 45.000008168.41")

                            Grava_C195(NLANC,"0200",LTrim(StrVal(Format("W14.2,EIC",vl_doc_icms))))                   
                       
                            Grava_C197(NLanc,"0200","MG53000999","",
                                       "credito para sub-apuracao da nota",
                                       blanknum(),
                                       blanknum(),
                                       vl_doc_icms,
                                       blanknum())
                       
                            Grava_1900("MG53000999","")
                            Grava_1920("MG53000999","04",vl_doc_icms)
                    endif
            Endif
            ;---------------------------------------------------------------

            ;--- MODAMIL ---------------------------------------------------
            if sys_Codigo_Cliente="0051" and 
               vl_bc_icms_ajuste>0                                                 
               Then
                    Grava_Obs0460("0006","Corredor de Importacao e-PTA n. 45.000006725-30")

                    Grava_C195(NLANC,"0006","Credito para a sub-apuracao")                   

                    Grava_1900("MG54000999","Corredor de Importacao")
                    
                    Grava_C195(NLANC,"0006","Estorno de credito devido a devolucao de mercadoria alcancada com credito presumido")                   
            Endif
            ;---------------------------------------------------------------

            ;--- Credito de Origem Simples Nacional ------------------------
            if vl_icms_credsn>0
               Then
                    Grava_Obs0460("0250","AJUSTE DE CREDITO POR AQUISICAO EMPRESA SIMPLES NACIONAL")

                    Grava_C195(NLANC,"0250","AJUSTE DE CREDITO POR AQUISICAO EMPRESA SIMPLES NACIONAL")                   

                    ;;;Grava_1900("MG10990505","AJUSTE DE CREDITO POR AQUISICAO EMPRESA SIMPLES NACIONAL")
            Endif
  EndIf
  
  If [Answer->Tipo de Pagamento]="P" And MODELO="01"
     Then     
          Seq=0
          Moveto "\\Sistemas\\Estoque\\NotaECP"
          Moveto [Numero do Lancamento]
          Locate [Answer->Numero do Lancamento]
          If RetVal
             Then While [Numero do Lancamento]=[Answer->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          ]=[Answer->Numero do Documento]
                  [QTD_PARC         ]=Seq
                  [VL_TIT           ]=[Answer->Valor Nota Fiscal  ]
                  UnLockRecord
          EndIf
          
  EndIf   

  Moveto "Answer"
EndScan
Do_It!

moveto "\\Sistemas\\Estoque\\NotaEI" clearimage      
moveto "Answer"                      clearimage

ClearAll

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco C - Entradas - NotaC         
;*******************************************************************************
Proc Monta_BlocoCEntradas2()
Private MODELO, wi, tpdoctook,
        vr_bcicms2, vr_bcicmsd, vr_Icms1, vr_icms2, itemok,
        regdestinat, Tabela

Tabela=Cria_Temp(PrivDir())

;-- Notas nÆo extemporaneas ----------------------------------------------------
{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Codigo do Documento   ] TypeIn "NF.. or NS.."
moveto [Tipo Movimento Estoque] typein "E"   
moveto [Data de Saida         ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Sistema Gerador       ] TypeIn "Not EX"
do_it!
ClearAll
Rename "Answer" Tabela
ClearAll
;-------------------------------------------------------------------------------

;-- Notas Extemporaneas --------------------------------------------------------
{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Codigo do Documento   ] TypeIn "NF.. or NS.."
moveto [Tipo Movimento Estoque] typein "E"   
moveto [Data de Acerto        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Data de Emissao       ] TypeIn "<=~VSDGDTFIM"
moveto [Sistema Gerador       ] TypeIn "EX"
do_it!
ClearAll
;-------------------------------------------------------------------------------

Add "Answer" Tabela
ClearAll

{Ask} typein Tabela Enter Check
do_it!
ClearAll

delete Tabela

if isempty("Answer")
   then return
endif   

NR   =NRecords("Answer")

Empr_Ant="????"

View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Tpdoctos"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\TpItem"
View "\\Sistemas\\Estoque\\Familia"
View "\\Sistemas\\Estoque\\Unidades"
View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPED0400"
View "SPED0450"
View "SPED0460"
View "SPEDC100"
View "SPEDC110"
View "SPEDC113"
View "SPEDC114"
View "SPEDC140"
View "SPEDC141"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "SPEDC197"
View "SPEDE510"
View "SPED1900"
View "SPED1900"
View "SPED1910"
View "SPED1920"
View "SPED1921"
View "SPEDE110"
View "CTP_0500"
View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Vendas\\NotaR"
View "\\Sistemas\\Vendas\\NotaI"
View "\\Sistemas\\Vendas\\NotaV"
Coedit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 2/6",45," ")+BARRA_STRING)

; If [Answer->Tipo Movimento Estoque]<>"E" ; Entrada
;    Then Loop
; EndIf   

  switch
    case SubStr([Answer->Codigo do Documento],1,2)="NF" : tpdoctook=true  ; Notas Fiscais todas
    case SubStr([Answer->Codigo do Documento],1,2)="NS" : tpdoctook=true  ; Notas Fiscais Servico            
    otherwise                                           : tpdoctook=false
  endswitch
  if not tpdoctook then loop endif

  If [Sistema Gerador] <> "EX"  
     Then If ([Data de Saida]<VSDGDTINI Or [Data de Saida]>VSDGDTFIM)
             Then Loop
          EndIf
     Else If ([Data de Acerto ]<VSDGDTINI Or [Data de Acerto ]>VSDGDTFIM)
             Then Loop
             Else If [Data de Emissao]>VSDGDTFIM
                     Then Loop
                  EndIf
          EndIf
  EndIf    
 ;If [Codigo da Empresa]<>VSDGEMPRESA
 ;   Then Loop
 ;EndIf    

  If [Codigo da Empresa]<>Empr_Ant
     Then Moveto "\\Sistemas\\Cadastro\\Empresas"
          Moveto [Codigo da Empresa]
          Locate [Answer->Codigo da Empresa]
          If RetVal
             Then ATIVIDADE =[Atividade      ]
             Else ATIVIDADE =""
          EndIf
          Empr_Ant=[Codigo da Empresa]
  EndIf

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

  NLanc=NLanc+1  

  Moveto "SPEDC100"
  End 
  Down 
  [Lancamento       ]=NLanc
  [IND_OPER         ]="0"
  [IND_EMIT         ]="0"
  Switch
    Case SubStr([Answer->Codigo do Documento],1,3)="NFE" : MODELO="55"
    Case [Answer->Codigo do Documento]="NFAE"            : MODELO="55"
    OtherWise                                                            : MODELO="01"
  EndSwitch
  [COD_MOD          ]=MODELO
  Switch
    Case [Answer->Situacao]="C" And 
         Search("INUTILIZ",[Answer->Descricao da Destinacao])>0:
         [COD_SIT          ]="05"
    Case [Answer->Situacao]="C" And 
         [Answer->Sistema Gerador]="EX":
         Switch
             Case  [Answer->Data de Emissao]< VSDGDTINI And 
                  ([Answer->Data de Acerto ]>=VSDGDTINI And
                   [Answer->Data de Acerto ]<=VSDGDTFIM): 
                   [COD_SIT     ]="03"
             Case ([Answer->Data de Emissao]>=VSDGDTINI  And
                   [Answer->Data de Emissao]<=VSDGDTFIM) And 
                  ([Answer->Data de Acerto ]>=VSDGDTINI  And
                   [Answer->Data de Acerto ]<=VSDGDTFIM): 
                   [COD_SIT     ]="02"
             OtherWise: 
                   [COD_SIT     ]="00" 
         EndSwitch
    Case [Answer->Situacao]="C" And 
         [Answer->Sistema Gerador]="DN":
         [COD_SIT          ]="04"
    Case [Answer->Situacao]="C":
         [COD_SIT          ]="02"
    Case Search("COMPLEMENT",[Answer->Descricao da Destinacao])>0:
         [COD_SIT          ]="06"
    Case [Answer->Codigo do Documento]="NFAE"                    :
         [COD_SIT          ]="08"
    OtherWise:
         [COD_SIT          ]="00"
  EndSwitch
  [SER              ]=[Answer->Serie do Documento  ]
  if [COD_MOD]="55" or [COD_MOD]="65" 
     then [SER]=AlinhM([SER],3) 
  endif
  If [COD_MOD]="55" 
     Then [NUM_DOC  ]=AlinhM([Answer->Numero do Documento ],9)
          [CHV_NFE  ]=[Answer->Chave_Acesso_NFe    ]
     Else [NUM_DOC  ]=[Answer->Numero do Documento ]
          [CHV_NFE  ]=""
  EndIf   
  
  If [COD_SIT]="02" Or
     [COD_SIT]="03" Or
     [COD_SIT]="04" Or
     [COD_SIT]="05"   
     Then UnLockRecord
          Moveto "Answer"
          Loop
  EndIf        

  Grava_Participantes([Answer->Codigo],"Nota Entrada: "+[Answer->Numero do Documento ])

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

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

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


  ObsOk=False
  If Not IsBlank([Answer->Observacao na Nota Fiscal]) And COD_VER>"004" 
     Then Grava_InformacaoComplementar("?","")
     
          Moveto "SPEDC110"             
          End Down
          [Lancamento            ]=NLanc 
          [Sequencia             ]=0
          [COD_INF               ]="000001"
          [TXT_COMPL             ]=Tira_CharEspecial([Answer->Observacao na Nota Fiscal])
          [TXT_COMPL             ]=Tira_Caractere([TXT_COMPL])
          UnLockRecord
          
          ObsOk=True
  EndIf    

  doctorefok=false

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

                doctorefok=true

              OtherWise:
                Grava_Participantes([\Sistemas\Vendas\NotaR->Codigo_Participante],"Nota Entrada/DocRefer: "+[Answer->Numero do Documento ])

                Moveto "SPEDC113"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [IND_OPER              ]="0"
                [IND_EMIT              ]=[\Sistemas\Vendas\NotaR->IND_EMIT                ]
                if isblank([IND_EMIT])
                   then [IND_EMIT      ]="0"
                endif   
                [COD_PART              ]=[\Sistemas\Vendas\NotaR->Codigo_Participante     ]
                [COD_MOD               ]=[\Sistemas\Vendas\NotaR->Modelo_Documento        ]
                [DT_DOC                ]=[\Sistemas\Vendas\NotaR->Data_Documento          ]
                [SER                   ]=[\Sistemas\Vendas\NotaR->Serie_Documento         ]
                [SUB                   ]=[\Sistemas\Vendas\NotaR->SubSerie_Documento      ]
                [NUM_DOC               ]=[\Sistemas\Vendas\NotaR->Numero_Documento        ]
                if [COD_MOD]="55" or [COD_MOD]="57"
                   then [CHV_DOCe      ]=[\Sistemas\Vendas\NotaR->Chave_Acesso            ]
                endif   
                UnLockRecord

                doctorefok=true

            EndSwitch

            If Seq=1 And doctorefok And Not ObsOk And COD_VER>"004"
               Then 
                    Grava_InformacaoComplementar("?","") 
               
                    Moveto "SPEDC110"
                    End
                    Down
                    [Lancamento            ]=NLanc 
                    [Sequencia             ]=0
                    [COD_INF               ]="000001"
                    [TXT_COMPL             ]="OBS"
                    UnLockRecord
            EndIf
            
            Moveto "\\Sistemas\\Vendas\\NotaR" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  ;-- variaveis para atualizar total dos tributos no documento -----------------
  vl_doc_bcicms  =0 
  vl_doc_icms    =0
  vl_doc_bcicmsst=0 
  vl_doc_icmsst  =0
  vl_doc_ipi     =0
  vl_doc_pis     =0
  vl_doc_cofins  =0
  
  vl_add_ipi     =0 
  vl_add_st      =0 
  
  vl_bc_icms_estorno=0 ; siri
  vl_bc_icms_ajuste =0 ; modamil

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

            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =[\Sistemas\Vendas\NotaI->Valor Desconto Total    ]
            VR_ACRESC      =[\Sistemas\Vendas\NotaI->Valor Frete Total       ]+
                            [\Sistemas\Vendas\NotaI->Valor Seguro Total      ]+
                            [\Sistemas\Vendas\NotaI->Valor OutDesp Total     ]

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

            VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
            ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
            MVA_ST         =[\Sistemas\Vendas\NotaI->MVA                     ]

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

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

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

            ;--- C lculo p/ escritura‡Æo -------------------------------------
            If ALIQ_ICMS>0 
               Then If SEM_RED_BCICMS<>"3"
                       Then VL_BC_ICMS2=VL_ITEM
                            VL_BC_ICMS2=VL_BC_ICMS2-VL_DESC
                       Else VL_BC_ICMS2=VL_ITEM
                    EndIf
                    VL_RED_BC =NDecimal((VL_BC_ICMS2*ALIQ_RD_ICMS)/100,2)
            EndIf


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

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

            Item_CST_ICMS  =""
            getrecord "\\sistemas\\estoque\\itens" [\Sistemas\Vendas\NotaI->Codigo do Item] to regitens2
            if retval
               then Item_CST_ICMS  =regitens2["Tipo Tributacao"]
            endif        

            ;--- classifica as opera‡äes com ou sem credito do tributo -------------------
            tem_credito_icmsst=true 
            tem_credito_icms  =true 
            tem_credito_ipi   =true 
  
            ;--- Verificando se ‚ comercio --------------------------------------
            If Search("IND",ATIVIDADE)=0                       ; nÆo ‚ Industria entÆo comercio/servi‡o
               Then CST_IPI        =""
            EndIf

            If Search("IND",ATIVIDADE)=0   and                 ; nÆo ‚ Industria entÆo comercio/servi‡o
               [\Sistemas\Vendas\NotaI->Tipo do Item ]<>"T"  ; Item Diferente Terceiros/Revenda
               Then Tem_Credito_ipi=False
            EndIf
  
            ;--- Verificando se ‚ comercio e item de revenda --------------------
            If Search("COM",ATIVIDADE)>0   and                 ; ‚ comercio
               [\Sistemas\Vendas\NotaI->Tipo do Item ]="T"   ; Item Terceiros/Revenda
               Then
                    If SubStr(Item_CST_ICMS,1,1)="0" Or  ; origem do produto              
                       SubStr(Item_CST_ICMS,1,1)="2" Or         
                       SubStr(Item_CST_ICMS,1,1)="3" Or         
                       SubStr(Item_CST_ICMS,1,1)="4" Or         
                       SubStr(Item_CST_ICMS,1,1)="5" Or         
                       SubStr(Item_CST_ICMS,1,1)="6"            
                       Then Tem_Credito_ipi=False
                    EndIf
            EndIf   
  
            ;--- Verificando se ‚ opera‡Æo com uso,consumo e imobilizado --------
            If SearchFrom("155",CFOP,1)>0 Or  ; 155.. 255.. uso, consumo e imobilizado
               SearchFrom("255",CFOP,1)>0 Or
                
               ;;;;;[\Sistemas\Estoque\NotaEI->Tipo do Item ]="D"      Or  ; Item Aplica‡Æo Direta    -- nÆo se aplica caso CEMIG
               [\Sistemas\Vendas\NotaI->Tipo do Item ]="G"      Or  ; Item Moveis e Utensilios
               [\Sistemas\Vendas\NotaI->Tipo do Item ]="H"      Or  ; Item Maquinas e Equipamentos
               [\Sistemas\Vendas\NotaI->Tipo do Item ]="I"          ; Item Bens em Geral    
               Then 
                     tem_credito_icmsst=false 
                     tem_credito_icms  =false 
                     tem_credito_ipi   =false 
            EndIf

            ;--- Verificando se ‚ industria e com credito -----------------------
            If Search("IND",ATIVIDADE)>0 and tem_credito_ipi   ; ‚ Industria 
               Then if search(CST_IPI,"02,03,04,05")>0         ; nÆo tem credito
                       then tem_credito_ipi   =false
                    endif    
            EndIf
             
            ;--- Verificando se ‚ item com icms st no cadastro -------------------
            If Search(SubStr(Item_CST_ICMS,2,2),"60")>0 ; produto com ST nao aproveita ICMS
               Then Switch 
                      Case Search("DEVOL",[Answer->Descricao da Destinacao])=0:
                           tem_credito_icmsst=false 
                           tem_credito_icms  =false 
                       
                    EndSwitch
            EndIf
             
            ;--- NÆo vai ter credito de icms na opera‡Æo --------------------------------
            If not tem_credito_icms
               Then 
                    ALIQ_ICMS                 =0
                    VL_BC_ICMS                =BlankNum()
                    VL_ICMS                   =BlankNum()
                    VL_RED_BC                  =0
            EndIf   
        
            ;--- NÆo vai ter credito de icmssta opera‡Æo --------------------------------
            If not tem_credito_icmsst
               Then 
                    ALIQ_ST                   =0
                    VL_BC_ICMS_ST             =BlankNum()
                    VL_ICMS_ST                =BlankNum()
                    
                    vl_item = vl_item +[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
            EndIf   
        
            ;--- NÆo vai ter credito de ipi  na opera‡Æo --------------------------------
            If not tem_credito_ipi 
               Then 
                    ALIQ_IPI                  =0
                    VL_IPI_BC                 =BlankNum()
                    VL_IPI                    =BlankNum()

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

                    [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                                             [Answer->Codigo do Documento],
                                                             [Answer->Codigo             ],CFOP)  
                    UnLockRecord
            EndIf

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

            ;--- Analitico CFOP,CST_IPI ----------------------------------------
            If Search("IND",ATIVIDADE)>0
               Then Moveto "SPEDE510"
                    Moveto [CFOP]
                    Locate CFOP,CST_IPI
                    If Not RetVAl
                       Then End
                            Down
                            [CFOP         ]=CFOP
                            [CST_IPI      ]=CST_IPI 
                    EndIf
                    [VL_CONT_IPI  ]=[VL_CONT_IPI  ]+VL_OPR             
                    [VL_BC_IPI    ]=[VL_BC_IPI    ]+VL_BC_IPI 
                    [VL_IPI       ]=[VL_IPI       ]+VL_IPI 
                    UnLockRecord
            EndIf

            vl_doc_bcicms  =vl_doc_bcicms   +vl_bc_icms 
            vl_doc_icms    =vl_doc_icms     +vl_icms

            vl_doc_bcicmsst=vl_doc_bcicmsst +vl_bc_icms_st 
            vl_doc_icmsst  =vl_doc_icmsst   +vl_icms_st

            vl_doc_ipi     =vl_doc_ipi      +vl_ipi
            vl_doc_pis     =vl_doc_pis      +vl_pis
            vl_doc_cofins  =vl_doc_cofins   +vl_cofins
            
            If not tem_credito_icmsst
               Then vl_add_st  = vl_add_st +[\Sistemas\Vendas\NotaI->ICMS_ST_Valor]
            EndIf                                                                   
            If not tem_credito_ipi 
               Then vl_add_ipi = vl_add_ipi+[\Sistemas\Vendas\NotaI->Valor do IPI ]
            EndIf   

            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
          
          Moveto "SPEDC100"
          Moveto [Lancamento]
          Locate NLanc
          If RetVal
             Then
                  [VL_BC_ICMS       ]=vl_doc_bcicms
                  [VL_ICMS          ]=vl_doc_icms
                  [VL_BC_ICMS_ST    ]=vl_doc_bcicmsst
                  [VL_ICMS_ST       ]=vl_doc_icmsst
                  [VL_IPI           ]=vl_doc_ipi
                  [VL_PIS           ]=vl_doc_pis
                  [VL_COFINS        ]=vl_doc_cofins
                  
                  [VL_MERC          ]=[VL_MERC          ]+
                                      vl_add_ipi+vl_add_St
                  
                  UnLockRecord
          EndIf
  EndIf

  ;--- RET SIRI,ECLETICA ------------------------------------------------------
  if (sys_Codigo_Cliente ="0227" and [Answer->Codigo da Empresa]="0001") 
     Then
          if [Answer->Valor ICMS]>0
             then
                  Grava_Obs0460("0200","Estorno de credito - RET PTA n. 45.000008168.41")

                  Grava_C195(NLANC,"0200",LTrim(StrVal(Format("W14.2,EIC",[Answer->Valor ICMS]))))                   

                  Grava_C197(NLanc,"0200","MG53000999","",
                             "credito para sub-apuracao da nota",
                             blanknum(),
                             blanknum(),
                             [Answer->Valor ICMS],
                             blanknum())
                  
                  Grava_1900("MG53000999","")
                  Grava_1920("MG53000999","04",[Answer->Valor ICMS])
          endif
  Endif
  ;---------------------------------------------------------------

  If [Answer->Tipo de Pagamento]="P" And MODELO="01"
     Then     
          Seq=0
          Moveto "\\Sistemas\\Vendas\\NotaV"
          Moveto [Codigo da Empresa]
          Locate [Answer->Codigo da Empresa  ],
                 [Answer->Numero do Documento],
                 [Answer->Serie do Documento ]
          If RetVal
             Then Seq=0
                  While [\Sistemas\Vendas\Notav->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                        [\Sistemas\Vendas\Notav->Numero do Documento]=[Answer->Numero do Documento] And
                        [\Sistemas\Vendas\Notav->Serie do Documento ]=[Answer->Serie do Documento ]
                    seq=seq+1

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

  Moveto "Answer"
EndScan
Do_It!

moveto "\\Sistemas\\Vendas\\NotaI"   clearimage      
moveto "\\Sistemas\\Vendas\\NotaV"   clearimage      
moveto "Answer"                      clearimage

ClearAll

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco C - Saidas                                    *
;*******************************************************************************
Proc Monta_BlocoCSaidas1()
Private MODELO, wi, tpdoctook,
        vr_bcicms2, vr_bcicmsd, vr_Icms1, vr_icms2, itemok, Tabela

Tabela=Cria_Temp(PrivDir())

;-- Notas nÆo extemporaneas ----------------------------------------------------
{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Codigo do Documento   ] TypeIn "NF.."
moveto [Tipo Movimento Estoque] typein "S" ; Saida  
moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Sistema Gerador       ] TypeIn "Not EX"
do_it!
ClearAll
Rename "Answer" Tabela
ClearAll
;-------------------------------------------------------------------------------

;-- Notas Extemporaneas --------------------------------------------------------
{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Codigo do Documento   ] TypeIn "NF.."
moveto [Tipo Movimento Estoque] typein "S" ; Saida  
moveto [Data de Acerto        ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Data de Emissao       ] TypeIn "<=~VSDGDTFIM"
moveto [Sistema Gerador       ] TypeIn "EX"
do_it!
ClearAll
;-------------------------------------------------------------------------------

Add "Answer" Tabela
ClearAll

{Ask} typein Tabela Enter Check
do_it!
ClearAll

delete Tabela

if isempty("Answer")
   then return
endif   

NR   =NRecords("Answer")

Empr_Ant="????"

View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPED0400"
View "SPED0450"
View "SPED0460"
View "SPEDC100"
View "SPEDC101"
View "SPEDC110"
View "SPEDC113"
View "SPEDC114"
View "SPEDC140"
View "SPEDC141"
View "SPEDC160"
View "SPEDC170"
View "SPEDC190"
View "SPEDC195"
View "SPEDC197"
View "SPEDE510"
View "SPED1600"
View "SPED1900"
View "SPED1910"
View "SPED1920"
View "SPED1921"
View "SPEDE110"
View "CTP_0500"
View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Tpdoctos"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\TpItem"
View "\\Sistemas\\Estoque\\Familia"
View "\\Sistemas\\Estoque\\Unidades"
View "\\Sistemas\\Vendas\\P_cartao"
;;View "\\Sistemas\\Vendas\\Estados"
View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Vendas\\NotaR"
View "\\Sistemas\\Vendas\\NotaICM"
View "\\Sistemas\\Vendas\\NotaI"
View "\\Sistemas\\Vendas\\NotaV"
Coedit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 3/6",45," ")+BARRA_STRING)

 ;If [Answer->Tipo Movimento Estoque]<>"S" ; Saida  
 ;   Then Loop
 ;EndIf   

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

; If [Answer->Valor Mercadoria]<=0 And                            
;    [Answer->Valor Servico   ]>0                                 
;    Then Loop
; EndIf   
  
  If [Sistema Gerador] <> "EX"  
     Then If ([Data de Emissao]<VSDGDTINI Or [Data de Emissao]>VSDGDTFIM)
             Then Loop
          EndIf
     Else If ([Data de Acerto ]<VSDGDTINI Or [Data de Acerto ]>VSDGDTFIM)
             Then Loop
             Else If [Data de Emissao]>VSDGDTFIM
                     Then Loop
                  EndIf
          EndIf
  EndIf    
 ;If [Codigo da Empresa]<>VSDGEMPRESA
 ;   Then Loop
 ;EndIf    

  If [Codigo da Empresa]<>Empr_Ant
     Then Moveto "\\Sistemas\\Cadastro\\Empresas"
          Moveto [Codigo da Empresa]
          Locate [Answer->Codigo da Empresa]
          If RetVal
             Then ATIVIDADE =[Atividade      ]
             Else ATIVIDADE =""
          EndIf
          Empr_Ant=[Codigo da Empresa]
  EndIf

  NLanc=NLanc+1  

  Moveto "SPEDC100"
  End 
  Down 
  [Lancamento       ]=NLanc
  [IND_OPER         ]="1"
  [IND_EMIT         ]="0"
  Switch
    Case SubStr([Answer->Codigo do Documento],1,3)="NFE" : MODELO="55"
    Case [Answer->Codigo do Documento]="NFAE"            : MODELO="55"
    OtherWise                                            : MODELO="01"
  EndSwitch
  [COD_MOD          ]=MODELO
  Switch
    Case [Answer->Situacao]="C" And 
         Search("INUTILIZ",[Answer->Descricao da Destinacao])>0:
         [COD_SIT          ]="05"
    Case [Answer->Situacao]="C" And 
         [Answer->Sistema Gerador]="EX":
         Switch
             Case  [Answer->Data de Emissao]< VSDGDTINI And 
                  ([Answer->Data de Acerto ]>=VSDGDTINI And
                   [Answer->Data de Acerto ]<=VSDGDTFIM): 
                   [COD_SIT     ]="03"
             Case ([Answer->Data de Emissao]>=VSDGDTINI  And
                   [Answer->Data de Emissao]<=VSDGDTFIM) And 
                  ([Answer->Data de Acerto ]>=VSDGDTINI  And
                   [Answer->Data de Acerto ]<=VSDGDTFIM): 
                   [COD_SIT     ]="02"
             Case [Answer->Codigo do Documento]="NFAE"  :
                  [COD_SIT     ]="08"
             OtherWise: 
                   [COD_SIT     ]="00" 
         EndSwitch
    Case [Answer->Situacao]="C" And 
         [Answer->Sistema Gerador]="DN":
         [COD_SIT          ]="04"
    Case [Answer->Situacao]="C":
         [COD_SIT          ]="02"
    Case Search("COMPLEMENT",[Answer->Descricao da Destinacao])>0:
         [COD_SIT          ]="06"
    OtherWise:
         [COD_SIT          ]="00"
  EndSwitch
  
  ;-- especial Pierre ----------------------------------------------------------------------------------
  if sys_Codigo_Cliente="0413" and [Answer->CFO]="5949" and [Answer->Codigo]=[Answer->Codigo da Empresa]
     then [COD_SIT          ]="08"
  endif       
  ;-----------------------------------------------------------------------------------------------------
  
  [SER              ]=[Answer->Serie do Documento]
  if [COD_MOD]="55" or [COD_MOD]="65" 
     then [SER]=AlinhM([SER],3) 
  endif
  If [COD_MOD]="55" 
     Then [NUM_DOC  ]=AlinhM([Answer->Numero do Documento ],9)
          [CHV_NFE  ]=[Answer->Chave_Acesso_NFe    ]
     Else [NUM_DOC  ]=[Answer->Numero do Documento ]
          [CHV_NFE  ]=""
  EndIf   

  If [COD_SIT]="02" Or
     [COD_SIT]="03" Or
     [COD_SIT]="04" Or
     [COD_SIT]="05"   
     Then UnLockRecord
          Moveto "Answer"
          Loop
  EndIf        

  Grava_Participantes([Answer->Codigo],"Nota Saida: "+[Answer->Numero do Documento ])

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

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

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

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

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


  ObsOk=False
  If Not IsBlank([Answer->Observacao na Nota Fiscal]) And COD_VER>"004" 
     Then Grava_InformacaoComplementar("?","") 
     
          Moveto "SPEDC110"
          End
          Down
          [Lancamento            ]=NLanc 
          [Sequencia             ]=0
          [COD_INF               ]="000001"
          [TXT_COMPL             ]=Tira_CharEspecial([Answer->Observacao na Nota Fiscal])
          [TXT_COMPL             ]=Tira_Caractere([TXT_COMPL])
          UnLockRecord
          
          ObsOk=True
  EndIf   


  doctorefok=false

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

                Moveto "SPEDC113"
                End
                Down
                [Lancamento            ]=NLanc 
                [Sequencia             ]=Seq
                [IND_OPER              ]="1"
                [IND_EMIT              ]=[\Sistemas\Vendas\NotaR->IND_EMIT                ]
                if isblank([IND_EMIT])
                   then 
                        [IND_EMIT              ]="0"
                        switch
                          Case Search("DEVOL",[Answer->Descricao da Destinacao])>0: [IND_EMIT ]="1"
                        endswitch
                endif   
                [COD_PART              ]=[\Sistemas\Vendas\NotaR->Codigo_Participante     ]
                [COD_MOD               ]=[\Sistemas\Vendas\NotaR->Modelo_Documento        ]
                [DT_DOC                ]=[\Sistemas\Vendas\NotaR->Data_Documento          ]
                [SER                   ]=[\Sistemas\Vendas\NotaR->Serie_Documento         ]
                [SUB                   ]=[\Sistemas\Vendas\NotaR->SubSerie_Documento      ]
                [NUM_DOC               ]=[\Sistemas\Vendas\NotaR->Numero_Documento        ]
                if [COD_MOD]="55" or [COD_MOD]="57"
                   then [CHV_DOCe      ]=[\Sistemas\Vendas\NotaR->Chave_Acesso            ]
                endif   
                UnLockRecord
                
                doctorefok=false
                
            EndSwitch

            If Seq=1 And doctorefok and Not ObsOk And COD_VER>"004"
               Then 
                    c110cod="?"
                    c110obs="XX"
                    c110txt="OBS ?"

                    switch
                      case Search("xxx ?? DEVOL",[Answer->Descricao da Destinacao])>0:

                        c110cod="001001"
                        c110obs="DOCUMENTO REFERENCIADO"
                        c110txt="DEVOLUCAO REF MODELO DOCTO \""+[\Sistemas\Vendas\NotaR->Modelo_Documento]+"\""+
                                [\Sistemas\Vendas\NotaR->Numero_Documento]+" DE "+
                                format("D13",[\Sistemas\Vendas\NotaR->Data_Documento  ])
                        
                    endswitch
                    Grava_InformacaoComplementar(c110cod,c110obs)
                    
                    Moveto "SPEDC110"
                    End
                    Down
                    [Lancamento            ]=NLanc 
                    [Sequencia             ]=0
                    [COD_INF               ]=c110cod
                    [TXT_COMPL             ]=c110txt
                    UnLockRecord
            EndIf   
            
            Moveto "\\Sistemas\\Vendas\\NotaR" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

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


  ;-- variaveis para atualizar total dos tributos no documento -----------------
  vl_doc_bcicms=0 
  vl_doc_icms  =0
  vl_doc_ipi   =0
  vl_doc_pis   =0
  vl_doc_cofins=0 

  vl_icms_estorno   =0   ; siri
  vl_bc_icms_ajuste =0   ; modamil

  ret_vl_icms  =0   ; pierre
  ret_bc_icms  =0   ; pierre
  ret_aliq_icms=0   ; pierre
  retok        =true

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

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

            VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
            ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
            MVA_ST         =[\Sistemas\Vendas\NotaI->MVA                     ]

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

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

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

            If Search("IND",ATIVIDADE)=0                       ; nÆo ‚ Industria entÆo comercio/servi‡o
               Then CST_IPI        =""
            EndIf

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

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


            If Search("DEVOL",[Answer->Descricao da Destinacao])>0
               Then
                    ;--- Verificando se ‚ item com icms st no cadastro -------------------
                    Item_CST_ICMS=""
        
                    Moveto "\\Sistemas\\Estoque\\Itens"
                    Moveto [Codigo do Item]
                    Locate [\Sistemas\Vendas\NotaI->Codigo do Item]
                    If RetVal
                       Then Item_CST_ICMS  =[Tipo Tributacao]
                    EndIf
                    Moveto "\\Sistemas\\Vendas\\NotaI" 
                    
                    if Search(SubStr(Item_CST_ICMS,2,2),"60")>0 or ; produto com ST nao aproveita ICMS
                       Search(SubStr(Item_CST_ICMS,2,2),"10")>0 
                       Then 
                            ALIQ_ICMS                 =0
                            VL_BC_ICMS                =BlankNum()
                            VL_ICMS                   =BlankNum()
                            VL_RED_BC                 =0
                    EndIf
            EndIf
            ;-----------------------------------------------------------------

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

                    [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                                             [Answer->Codigo do Documento],
                                                             [Answer->Codigo             ],CFOP)  
                    UnLockRecord
            EndIf
            
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Moveto "SPEDC190"
            Moveto [Lancamento]
            Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
            If Not RetVAl
               Then End
                    Down
                    [Lancamento   ]=NLANC
                    [CST_ICMS     ]=CST_ICMS
                    [CFOP         ]=CFOP
                    [ALIQ_ICMS    ]=ALIQ_ICMS
            EndIf
            [VL_OPR       ]=[VL_OPR       ]+VL_OPR
            [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
            [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
            [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
            [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
            [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
            [VL_IPI       ]=[VL_IPI       ]+VL_IPI
            [COD_OBS      ]=""        
            UnLockRecord

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

            vl_doc_bcicms =vl_doc_bcicms +vl_bc_icms 
            vl_doc_icms   =vl_doc_icms   +vl_icms
            vl_doc_ipi    =vl_doc_ipi    +vl_ipi
            vl_doc_pis    =vl_doc_pis    +vl_pis
            vl_doc_cofins =vl_doc_cofins +vl_cofins

            ;--- RET SIRI,ECLETICA ------------------------------------------------------
            if (sys_Codigo_Cliente="0227" and [Answer->Codigo da Empresa]="0001") or 
               (sys_Codigo_Cliente="0325" and [Answer->Codigo da Empresa]="0003") or 
               (sys_Codigo_Cliente="0326" and [Answer->Codigo da Empresa]="0003") or 
                sys_Codigo_Cliente="0328"
               Then
                    if VL_ICMS>0 and
                       [Answer->TIPO PESSOA      ]="JURIDICA" and 
                       [Answer->IE               ]<>"ISENTO"  and 
                       ( Search("VEND" ,[Answer->Descricao da Destinacao])>0 or 
                         Search("BONIF",[Answer->Descricao da Destinacao])>0 ) 
                       Then
                            Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Saida: "+[Answer->Numero do Documento ])
                            Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Nota Saida: "+[Answer->Numero do Documento ])

                            Grava_C197(NLanc,"0201","MG23000999",[\Sistemas\Vendas\NotaI->Codigo do Item],
                                       "debito para sub-apuracao do produto "+[\Sistemas\Vendas\NotaI->Codigo do Item],
                                       vl_bc_icms,
                                       ALIQ_ICMS,
                                       VL_ICMS,
                                       blanknum())

                            Moveto "\\Sistemas\\Vendas\\NotaI" 
                       
                            vl_icms_estorno=vl_icms_estorno+VL_ICMS
                    endif
            Endif
            ;-------------------------------------------------------------------

            ;--- RET Pierre -------------------------------------------------------------
            if sys_Codigo_Cliente="0413"  
               Then
                    if VL_ICMS>0 and
                       [Answer->TIPO PESSOA      ]="JURIDICA" and 
                       [Answer->IE               ]<>"NAOCONTRIBUINTE"  and 
                       ( Search("VEND" ,[Answer->Descricao da Destinacao])>0 or 
                         Search("COMPL",[Answer->Descricao da Destinacao])>0 or 
                         Search("BONIF",[Answer->Descricao da Destinacao])>0 ) 
                       Then
                           ;Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Saida: "+[Answer->Numero do Documento ])
                           ;Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Nota Saida: "+[Answer->Numero do Documento ])
                           ;
                           ;Grava_C197(NLanc,"0201","MG23000999",[\Sistemas\Vendas\NotaI->Codigo do Item],
                           ;           "debito para sub-apuracao do produto "+[\Sistemas\Vendas\NotaI->Codigo do Item],
                           ;           vl_bc_icms,
                           ;           ALIQ_ICMS,
                           ;           VL_ICMS,
                           ;           blanknum())
                           ;
                           ;Grava_E110("07",VL_ICMS)
                           ;
                           ;Moveto "\\Sistemas\\Vendas\\NotaI" 

                            if Search("COMPL",[Answer->Descricao da Destinacao])>0 and [Answer->Codigo]=[Answer->Codigo da Empresa]
                               then retok=false           
                            endif  

                            if retok
                               then
                                    ret_vl_icms  =ret_vl_icms+VL_ICMS
                                    ret_bc_icms  =ret_bc_icms+vl_bc_icms
                                    ret_aliq_icms=ALIQ_ICMS
                            endif
                    endif
            Endif
            ;-------------------------------------------------------------------

            ;--- MODAMIL -------------------------------------------------------
            if sys_Codigo_Cliente         ="0051"     and 
               [Answer->Codigo da Empresa]="0001"     and 
               vl_icms>0                              and
               [Answer->TIPO PESSOA      ]="JURIDICA" and 
               [Answer->IE               ]<>"ISENTO"  and 
               Search("DEVOL",[Answer->Descricao da Destinacao])=0 and
               substr(CST_ICMS,1,1)="1" 
               Then
                    itemok=false
                    getrecord "\\sistemas\\estoque\\itens" [\Sistemas\Vendas\NotaI->Codigo do Item] to regitens
                    if retval
                       then if regitens["Codigo do Grupo"]="003"
                               then itemok=true
                            endif
                    endif   
                    if itemok
                       then
                            Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Saida: "+[Answer->Numero do Documento ])

                            Grava_C197(NLanc,"0006","MG24000999",[\Sistemas\Vendas\NotaI->Codigo do Item],
                                       "debito para sub-apuracao do produto "+[\Sistemas\Vendas\NotaI->Codigo do Item],
                                       vl_bc_icms,
                                       ALIQ_ICMS,
                                       VL_ICMS,
                                       blanknum())
                       
                            Grava_1920("MG24000999","02",vl_icms)
                            
                            
                            aliq_imcs_ajuste=0
                            vl_icms_ajuste  =0
                            switch
                              case substr(CFOP,1,1)="6" and ALIQ_ICMS=4  : aliq_imcs_ajuste=2.5
            
                              case substr(CFOP,1,1)="5" and ALIQ_ICMS<25 : aliq_imcs_ajuste=4
            
                              case substr(CFOP,1,1)="5" and ALIQ_ICMS=25 : aliq_imcs_ajuste=5
            
                            endswitch
                            vl_bc_icms_ajuste =vl_bc_icms_ajuste+vl_bc_icms
                            vl_icms_ajuste    =round((vl_bc_icms*aliq_imcs_ajuste)/100,2)
            
                            Grava_1920("MG24000999","06",vl_icms_ajuste)
                            Grava_1921("MG020002","Credito presumido - Corredor de Importacao",vl_icms_ajuste)
                            
                    Endif
            Endif
            ;-------------------------------------------------------------------

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

  ;--- RET Pierre -------------------------------------------------------------
  if sys_Codigo_Cliente="0413"  
     Then
          if ret_vl_icms>0
             then                                                 
                  Grava_Obs0460("0201","Estorno de debito - e-PTA n. 45.000014353-45")
             
                  Grava_C195(NLANC,"0201","Debito para sub-apuracao")                   

                  Grava_C197(NLanc,"0201","MG23000999","",
                             "debito para sub-apuracao",
                             ret_bc_icms,
                             ret_aliq_icms,
                             ret_vl_icms,
                             blanknum())
                  
                  Grava_E110("07",ret_vl_icms)

                  Grava_1900("MG23000999","")
                  Grava_1920("MG23000999","02",ret_vl_icms)
               
                  Grava_1921("MG020002","Credito presumido - RET e-PTA n. 45.000014353-45",0)
          endif
               
          if [Answer->CFO]="5949" and [Answer->Codigo]=[Answer->Codigo da Empresa]
             Then
                 ;if [Answer->Valor ICMS]>0
                 ;   then
                          Grava_Obs0460("0203","Estorno de credito, nos termos do inciso I do s2o do artigo 19 do Regime Especial - e-PTA n. 45.000014353-45")
                     
                          Grava_C195(NLANC,"0203","")                   

                          Grava_C197(NLanc,"0203","MG50000100","",
                                     "Estorno de credito ??",
                                     blanknum(),
                                     blanknum(),
                                     blanknum(),
                                     blanknum())
        
                         ;Grava_E110("03",[Answer->Valor ICMS])
                 ;endif
          Endif
  Endif
  ;---------------------------------------------------------------

  ;--- RET SIRI,ECLETICA ------------------------------------------------------
  if  sys_Codigo_Cliente="0227" or  
     (sys_Codigo_Cliente="0325" and [Answer->Codigo da Empresa]="0003") or 
     (sys_Codigo_Cliente="0326" and [Answer->Codigo da Empresa]="0003") or 
      sys_Codigo_Cliente="0328"        
     Then
          if vl_icms_estorno>0
             then                                                 
                  Grava_Obs0460("0201","Estorno de debito - RET PTA n. 45.000008168.41")

                  Grava_C195(NLANC,"0201",LTrim(StrVal(Format("W14.2,EIC",vl_icms_estorno))))                   
             
                  Grava_1900("MG23000999","")
                  Grava_1920("MG23000999","07",vl_icms_estorno)
          endif
  Endif
  ;---------------------------------------------------------------


  ;--- MODAMIL ---------------------------------------------------
  if sys_Codigo_Cliente="0051" and 
     vl_bc_icms_ajuste>0                                                 
     Then
          Grava_Obs0460("0006","Corredor de Importacao e-PTA n. 45.000006725-30")

          Grava_C195(NLANC,"0006","Debito para a sub-apuracao")                   

          Grava_1900("MG24000999","Corredor de Importacao")
  Endif
  ;---------------------------------------------------------------

  Moveto "SPEDC100"
  Moveto [Lancamento]
  Locate NLanc
  If RetVal
     Then
          [VL_BC_ICMS       ]=vl_doc_bcicms
          [VL_ICMS          ]=vl_doc_icms
          [VL_IPI           ]=vl_doc_ipi
          [VL_PIS           ]=vl_doc_pis
          [VL_COFINS        ]=vl_doc_cofins
          UnLockRecord
  EndIf

  Moveto "\\Sistemas\\Vendas\\NotaICM"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then seq=0
          While [\Sistemas\Vendas\NotaICM->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaICM->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\NotaICM->Serie do Documento ]=[Answer->Serie do Documento ]
                
             if [\Sistemas\Vendas\NotaICM->ICMS_UFDest_Valor  ]>0 or
                [\Sistemas\Vendas\NotaICM->ICMS_UFRemet_Valor ]>0
                then
                     Moveto "SPEDC101"
                     if seq=0
                        then End
                             Down
                             [Lancamento       ]=NLanc
                     endif                
                     
                     [VL_FCP_UF_DEST ]=[VL_FCP_UF_DEST ]+[\Sistemas\Vendas\NotaICM->FCP_UFDest_Valor   ] ;VFCPUFDest
                     [VL_ICMS_UF_DEST]=[VL_ICMS_UF_DEST]+[\Sistemas\Vendas\NotaICM->ICMS_UFDest_Valor  ] ;VRICMS_Part_UF_Dest
                     [VL_ICMS_UF_REM ]=[VL_ICMS_UF_REM ]+[\Sistemas\Vendas\NotaICM->ICMS_UFRemet_Valor ] ;VRICMS_Part_UF_Emit
                     UnLockRecord
                     
                     seq=seq+1
             endif

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


  Seq=0
  Moveto "\\Sistemas\\Vendas\\NotaV"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then While [\Sistemas\Vendas\Notav->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\Notav->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\Notav->Serie do Documento ]=[Answer->Serie do Documento ]
            seq=seq+1

            If [Answer->Tipo de Pagamento]="P" And MODELO="01"
               Then
                    Moveto "SPEDC141"
                    End
                    Down
                    [Lancamento       ]=NLanc
                    [Sequencia        ]=Seq
                    [NUM_PARC         ]=Seq
                    [DT_VCTO          ]=[\Sistemas\Vendas\NotaV->Data ]
                    [VL_PARC          ]=[\Sistemas\Vendas\NotaV->Valor]
                    UnLockRecord
            EndIf

            Grava_Cartoes()
     
            Moveto "\\Sistemas\\Vendas\\NotaV" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
          
          If [Answer->Tipo de Pagamento]="P" And MODELO="01" And Seq>0
             Then Moveto "SPEDC140"
                  End
                  Down
                  [Lancamento       ]=NLanc
                  [IND_EMIT         ]="1"
                  [IND_TIT          ]="00"
                  [DESC_TIT         ]=""
                  [NUM_TIT          ]=[Answer->Numero do Documento]
                  [QTD_PARC         ]=Seq
                  [VL_TIT           ]=[Answer->Valor Nota Fiscal  ]
                  UnLockRecord
          EndIf
  EndIf
  
  Moveto "Answer"
EndScan
Do_It!

moveto "\\Sistemas\\Vendas\\NotaI"   clearimage      
moveto "\\Sistemas\\Vendas\\NotaV"   clearimage      
moveto "Answer"                      clearimage

ClearAll

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco C - Saidas - Consumidor Final                 *
;*******************************************************************************
Proc Monta_BlocoCSaidas2()
Private MODELO, wi, tpdoctook,
        vr_bcicms2, vr_bcicmsd, vr_Icms1, vr_icms2, itemok

{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Codigo do Documento   ] TypeIn "NF.."
moveto [Serie do Documento    ] TypeIn "D.."
moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Tipo Movimento Estoque] typein "S" ; Saida  
do_it!
ClearAll

if isempty("Answer")
   then return
endif   

NR   =NRecords("Answer")

COD_DOC_ANT="????"

View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPEDC300"
View "SPEDC310"
View "SPEDC320"
View "SPEDC321"
View "SPEDC350"
View "SPEDC370"
View "SPEDC390"
View "SPED1600"
View "SPEDE110"
View "CTP_0500"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\TpDoctos"
View "\\Sistemas\\Vendas\\Destin"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\TpItem"
View "\\Sistemas\\Estoque\\Familia"
View "\\Sistemas\\Estoque\\Unidades"
View "\\Sistemas\\Vendas\\P_cartao"
View "\\Sistemas\\Vendas\\NotaI"
View "\\Sistemas\\Vendas\\NotaV"
Coedit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 4/6",45," ")+BARRA_STRING)

 ;If [Answer->Tipo Movimento Estoque]<>"S" ; Saida  
 ;   Then Loop
 ;EndIf   
 ;If SubStr([Answer->Codigo do Documento],1,2)<>"NF" ; Notas Fiscais
 ;   Then Loop
 ;EndIf   
 ;If [Answer->Serie do Documento ]<>"D" And
 ;   [Answer->Serie do Documento ]<>"D1"
 ;   Then Loop
 ;EndIf

  If [Answer->Valor Mercadoria]<=0 And                            
     [Answer->Valor Servico   ]>0                                 
     Then Loop
  EndIf   
  
 ;If ([Data de Emissao]<VSDGDTINI Or [Data de Emissao]>VSDGDTFIM)
 ;   Then Loop
 ;EndIf    
 ;If [Codigo da Empresa]<>VSDGEMPRESA
 ;   Then Loop
 ;EndIf    

  If [Answer->Codigo do Documento  ]<>COD_DOC_ANT
     Then Moveto "\\Sistemas\\Cadastro\\TpDoctos"
          Moveto [Codigo do Documento]
          Locate [Answer->Codigo do Documento  ]
          If RetVal
             Then SubSerie=[SubSerie do Documento]
             Else SubSerie=""
          EndIf   
          COD_DOC_ANT=[Answer->Codigo do Documento  ]            
  EndIf


  If IND_PERFIL="B"
     Then 
          vl_doc=[Answer->Valor Nota Fiscal]

          if [Answer->Situacao]="C"
             Then Moveto "SPEDC310"
                  End 
                  Down 
                  [Codigo da Empresa    ]=[Answer->Codigo da Empresa  ]
                  [Serie do Documento   ]=[Answer->Serie do Documento ]
                  [SubSerie do Documento]=SubSerie
                  [Data de Emissao      ]=[Answer->Data de Emissao    ]
                  [Lancamento           ]=NLanc
                  [NUM_DOC_CANC         ]=[Answer->Numero do Documento ]
                  UnLockRecord
                  
                  vl_doc=0
          endif   
          
          Moveto "SPEDC300"
          Moveto [Codigo da Empresa]
          Locate [Answer->Codigo da Empresa ],
                 [Answer->Serie do Documento],
                 SubSerie,
                 [Answer->Data de Emissao   ]
          If Not Retval
             Then End
                  Down                 
                  [Codigo da Empresa    ]=[Answer->Codigo da Empresa  ]
                  [Serie do Documento   ]=[Answer->Serie do Documento ]
                  [SubSerie do Documento]=SubSerie
                  [Data de Emissao      ]=[Answer->Data de Emissao    ]
                  [COD_MOD              ]="02"
                  [SER                  ]=[Answer->Serie do Documento ]
                  [SUB                  ]=SubSerie
                  [NUM_DOC_INI          ]=[Answer->Numero do Documento]
                  [DT_DOC               ]=[Answer->Data de Emissao    ]
                  
                  [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                                           [Answer->Codigo do Documento],
                                                           [Answer->Codigo             ],  
                                                           [Answer->CFO                ])  
                  
          EndIf   
          [NUM_DOC_FIN  ]=[Answer->Numero do Documento]
          [VL_DOC       ]=[VL_DOC   ]+vl_doc
          [VL_PIS       ]=[VL_PIS   ]+0
          [VL_COFINS    ]=[VL_COFINS]+0
          UnLockRecord
  EndIf

  NLanc=NLanc+1  

  Switch
    Case [Answer->Situacao]="C":
      Moveto "Answer"
      Loop
      
    OtherWise:
      If IND_PERFIL="A"
         Then 
              Moveto "SPEDC350"
              End 
              Down 
              [Codigo da Empresa    ]=[Answer->Codigo da Empresa  ]
              [Serie do Documento   ]=[Answer->Serie do Documento ]
              [SubSerie do Documento]=SubSerie
              [Data de Emissao      ]=[Answer->Data de Emissao    ]
              [Lancamento           ]=NLanc
              [SER                  ]=[Answer->Serie do Documento  ]
              [SUB_SER              ]=SubSerie
              [NUM_DOC              ]=[Answer->Numero do Documento ]
              [DT_DOC               ]=[Answer->Data de Emissao     ] 
              [CNPJ_CPF             ]=Tira_CharNum([Answer->CGC    ]) 
              [VL_MERC              ]=[Answer->Valor Mercadoria    ]
              [VL_DOC               ]=[Answer->Valor Nota Fiscal   ]
              [VL_DESC              ]=[Answer->Valor Desconto      ]
              [VL_PIS               ]=0
              [VL_COFINS            ]=0

              [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                                       [Answer->Codigo do Documento],
                                                       [Answer->Codigo             ],  
                                                       [Answer->CFO                ])  
              UnLockRecord
      EndIf
  EndSwitch  

  Moveto "\\Sistemas\\Vendas\\Destin"
  Moveto [Codigo da Destinacao]
  Locate [Answer->Codigo da Destinacao] 
  If Not Retval
     Then MSG="Erro dados NATUREZA OPERACAO-[DESTIN] : "+[Answer->Codigo da Destinacao]+"//"+
              "Nota Entrada: "+[Answer->Numero do Documento ]
          Mensagem(MSG)
          SEM_RED_BCICMS="1"
     Else SEM_RED_BCICMS=[\Sistemas\Vendas\Destin->Sem Reducao BCICMS]
  EndIf  
          
  seq    =0
  seqc195=0
            
  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then  While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[Answer->Serie do Documento ]

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

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


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

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

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

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


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

                    ;--- Itens do Resumo Diario dos Documentos (codigo 02) -------------
                    Moveto "SPEDC321"
                    Locate [Answer->Codigo da Empresa ],
                           [Answer->Serie do Documento],
                           SubSerie,
                           [Answer->Data de Emissao   ],
                           CST_ICMS,CFOP,ALIQ_ICMS,
                           [\Sistemas\Vendas\NotaI->Codigo do Item    ]
                    If Not RetVAl
                       Then End
                            Down
                            [Codigo da Empresa    ]=[Answer->Codigo da Empresa  ]
                            [Serie do Documento   ]=[Answer->Serie do Documento ]
                            [SubSerie do Documento]=SubSerie
                            [Data de Emissao      ]=[Answer->Data de Emissao    ]

                            [CST_ICMS             ]=CST_ICMS
                            [CFOP                 ]=CFOP
                            [ALIQ_ICMS            ]=ALIQ_ICMS

                            [COD_ITEM             ]=[\Sistemas\Vendas\NotaI->Codigo do Item     ]
                            [UNID                 ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal     ]
                    EndIf
                    [QTD          ]=[QTD         ]+[\Sistemas\Vendas\NotaI->Quantidade]
                    [VL_ITEM      ]=[VL_ITEM     ]+VL_ITEM
                    [VL_DESC      ]=[VL_DESC     ]+VL_DESC
                    [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                    [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                    [VL_PIS       ]=[VL_PIS      ]+VL_PIS
                    [VL_COFINS    ]=[VL_COFINS   ]+VL_COFINS
                    UnLockRecord
            EndIf 
            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  Seq=0
  Moveto "\\Sistemas\\Vendas\\NotaV"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then While [\Sistemas\Vendas\Notav->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\Notav->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\Notav->Serie do Documento ]=[Answer->Serie do Documento ]
            seq=seq+1

            Grava_Cartoes()
     
            Moveto "\\Sistemas\\Vendas\\NotaV" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
  
  Moveto "Answer"
EndScan
Do_It!

moveto "\\Sistemas\\Vendas\\NotaI"   clearimage      
moveto "\\Sistemas\\Vendas\\NotaV"   clearimage      
moveto "Answer"                      clearimage

ClearAll

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco C400 Redu‡Æo Z                                *
;*******************************************************************************
Proc Monta_BlocoC400ECF()
Private wi

{Ask} {\\sistemas\\vendas\\ecf_c} Check
moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
moveto [Data               ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
do_it!
ClearAll

if isempty("Answer")
   then return
endif   

NR   =NRecords("Answer")

Inicio=True
NSER  ="**"
EMPANT="*"
EMPOk =True

View "SPEDC400"
View "SPEDC405"
View "SPEDC410"
View "SPEDC420"
View "\\Sistemas\\Vendas\\OPAF_ECF"
View "\\Sistemas\\Vendas\\ECF_T"
View "\\Sistemas\\Vendas\\ECF_S"
CoEdit "Answer"
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 [Answer->Numero Serie Fabricacao]<>NSER
     Then NSER=[Answer->Numero Serie Fabricacao]  
          Moveto "\\Sistemas\\Vendas\\OPAF_ECF"
          Moveto [Numero de Serie]
          Locate [Answer->Numero Serie Fabricacao]
          If RetVal
             Then ECF_MOD=[Modelo Impressora]
             Else ECF_MOD="?"
          EndIf   
          Moveto "Answer"     
  EndIf

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

  VL_BRT=(([Answer->Totalizador Final     ]*1)-
          ([Answer->Totalizador Inicial   ]*1))-
          ([Answer->Cancelados]*1)
  VL_BRT=NDecimal(VL_BRT,2)        

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

  If VL_BRT=0
     Then Moveto "Answer"
          Loop
  EndIf

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

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


    If [\Sistemas\Vendas\ECF_T->Base de Calculo ICMS]>0 
       Then 
            If IsBlank([\Sistemas\Vendas\ECF_T->Indice Aliquota])
               Then NR_TOT=NR_TOTC420([Answer->Numero Serie Fabricacao],"T",[\Sistemas\Vendas\ECF_T->Aliquota de ICMS])
               Else NR_TOT=[\Sistemas\Vendas\ECF_T->Indice Aliquota]
            EndIf   
            COD_TOT_PAR=NR_TOT+"T"+AlinhM(Tira_CharNum(Valor_Str([\Sistemas\Vendas\ECF_T->Aliquota de ICMS],2)),4)

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


    If [\Sistemas\Vendas\ECF_S->Base de Calculo ISSQN]>0 
       Then 
            If IsBlank([\Sistemas\Vendas\ECF_S->Indice Aliquota])
               Then NR_TOT=NR_TOTC420([Answer->Numero Serie Fabricacao],"S",[\Sistemas\Vendas\ECF_S->Aliquota de ISSQN])
               Else NR_TOT=[\Sistemas\Vendas\ECF_S->Indice Aliquota]
            EndIf   
            COD_TOT_PAR=NR_TOT+"S"+AlinhM(Tira_CharNum(Valor_Str([\Sistemas\Vendas\ECF_S->Aliquota de ISSQN],2)),4)

            Moveto "SPEDC420"
            End
            Down
            [Codigo da Empresa ]=[Answer->Codigo da Empresa      ]
            [ECF_FAB           ]=[Answer->Numero Serie Fabricacao]
            [Data              ]=[Answer->Data                   ]    
            [COD_TOT_PAR       ]=COD_TOT_PAR
            [VLR_ACUM_TOT      ]=[\Sistemas\Vendas\ECF_S->Base de Calculo ISSQN]
            [NR_TOT            ]=NR_TOT
            UnLockRecord
    EndIf
    
    Moveto "\\Sistemas\\Vendas\\ECF_S"
    Skip
    If Eot() Then QuitLoop EndIf
  EndWhile
  
  Moveto "Answer"
  For wi From 1 To 6
    Moveto "SPEDC420"
    End
    Down
    [Codigo da Empresa ]=[Answer->Codigo da Empresa      ]
    [ECF_FAB           ]=[Answer->Numero Serie Fabricacao]
    [Data              ]=[Answer->Data                   ]
    Switch
      Case wi=1: [COD_TOT_PAR ]="F1"
                 [VLR_ACUM_TOT]=[Answer->Substituicao Tributaria]
      Case wi=2: [COD_TOT_PAR ]="I1"
                 [VLR_ACUM_TOT]=[Answer->Isento]
      Case wi=3: [COD_TOT_PAR ]="N1"
                 [VLR_ACUM_TOT]=[Answer->Nao Incidencia]

      Case wi=4: [COD_TOT_PAR ]="DT" ;???????
                 [VLR_ACUM_TOT]=[Answer->Descontos]

      Case wi=5: [COD_TOT_PAR ]="Can-O" ;????????
                 [VLR_ACUM_TOT]=[Answer->Cancelados]

      Case wi=6: [COD_TOT_PAR ]="AT" ;???????
                 [VLR_ACUM_TOT]=[Answer->Acrescimos]

    EndSwitch

    If [VLR_ACUM_TOT]=0 Then Del EndIf
    
    UnLockRecord
  EndFor
  
  Moveto "Answer"
EndScan
Do_It!
ClearAll

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco C400 Cupons           
;*******************************************************************************
Proc Monta_BlocoC400Cupons()
Private wi

{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Tipo do Documento     ] TypeIn "CUP.."
moveto [Tipo Movimento Estoque] TypeIn "S"  ; Saida
do_it!
ClearAll

if isempty("Answer")
   then return
endif   

NR   =NRecords("Answer")

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

View "SPED0150"
View "SPED0190"
View "SPED0200"
View "SPEDC425"
View "SPEDC460"
View "SPEDC470"
View "SPEDC490"
View "SPED1600"
View "SPEDE110"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\TpItem"
View "\\Sistemas\\Estoque\\Familia"
View "\\Sistemas\\Estoque\\Unidades"
View "\\Sistemas\\Vendas\\P_cartao"
View "\\Sistemas\\Vendas\\ECF_C"
View "\\Sistemas\\Vendas\\NotaI"
View "\\Sistemas\\Vendas\\NotaV"
Coedit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco C 6/6",45," ")+BARRA_STRING)

 ;If Search("CUP",[Answer->Tipo do Documento])=0 ; Cupons
 ;   Then Loop
 ;EndIf   
 ;If ([Data de Emissao]<VSDGDTINI Or [Data de Emissao]>VSDGDTFIM)
 ;   Then Loop
 ;EndIf    
 ;If [Codigo da Empresa]<>VSDGEMPRESA
 ;   Then Loop
 ;EndIf    

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

          Moveto "Answer"
  EndIf        

  NLanc=NLanc+1  

  If IND_PERFIL="A"
     Then 
          If [Answer->Situacao]="C"
             Then Moveto "SPEDC460"
                  End 
                  Down 
                  [Codigo da Empresa ]=[Answer->Codigo da Empresa  ]
                  [ECF_FAB           ]=ECF_FAB
                  [Data              ]=[Answer->Data de Emissao    ]
                  [Lancamento        ]=NLanc
                  [COD_MOD           ]="2D"  
                  [NUM_DOC           ]=[Answer->Numero do Documento ]
                  [COD_SIT           ]="02"
                  UnLockRecord

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

  If [Answer->Situacao]="C"
     Then Moveto "Answer"
          Loop
  EndIf        

  CFOP_PAI=[Answer->CFO]

  seq    =0
  seqc195=0
            
  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[Answer->Serie do Documento ]
     
            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            If IsBlank(CFOP) Or CFOP="000" Or CFOP="0000"
               Then CFOP=CFOP_PAI
            EndIf   
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =[\Sistemas\Vendas\NotaI->Valor Desconto Total    ]
            VR_ACRESC      =[\Sistemas\Vendas\NotaI->Valor Frete Total       ]+
                            [\Sistemas\Vendas\NotaI->Valor Seguro Total      ]+
                            [\Sistemas\Vendas\NotaI->Valor OutDesp Total     ]

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

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

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

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


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

            If [\Sistemas\Vendas\NotaI->Tributacao de ICMS]<>"D"
               Then VL_BC_ICMS=BlankNum()
                    VL_RED_BC =BlankNum()
                    ALIQ_ICMS =BlankNum()
                    VL_ICMS   =BlankNum()

            EndIf

            VL_OPR=(VL_ITEM-VL_DESC)+VR_ACRESC
            
            ;--- Detalhar Item -------------------------------------------------
            If IND_PERFIL="A" And [\Sistemas\Vendas\NotaI->Situacao_Item]<>"C"

               Then 
                    Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Cupom: "+[Answer->Numero do Documento ])
                    Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Cupom: "+[Answer->Numero do Documento ])

                    Seq=Seq+1 

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

            ;--- Resumo de itens do movimento diario ---------------------------
            If IND_PERFIL="B" And [\Sistemas\Vendas\NotaI->Situacao_Item]<>"C"
               Then 
                    COD_TOT_PAR=""
                    If [\Sistemas\Vendas\NotaI->Tipo do Item]<>"C"
                       Then Switch
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="I":
                                   COD_TOT_PAR="I1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="N" Or
                                   [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="O":   
                                   COD_TOT_PAR="N1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="S":
                                   COD_TOT_PAR="F1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ICMS]="D":
                                   NR_TOT     =NR_TOTC420(ECF_FAB,"T",ALIQ_ICMS)
                                   COD_TOT_PAR=NR_TOT+"T"+AlinhM(Tira_CharNum(Valor_Str(ALIQ_ICMS,2)),4)

                            EndSwitch
                       Else Switch
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="I":
                                   COD_TOT_PAR="IS1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="N" Or
                                   [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="O":   
                                   COD_TOT_PAR="NS1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="S":
                                   COD_TOT_PAR="FS1"
                              Case [\Sistemas\Vendas\NotaI->Tributacao de ISSQN]="D":
                                   NR_TOT     =NR_TOTC420(ECF_FAB,"S",ALIQ_ISSQN)
                                   COD_TOT_PAR=NR_TOT+"S"+AlinhM(Tira_CharNum(Valor_Str(ALIQ_ISSQN,2)),4)
                            EndSwitch
                    EndIf

                    If Not IsBlank(COD_TOT_PAR)
                       Then 
                            Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Cupom: "+[Answer->Numero do Documento ])
                            Grava_Unidades([\Sistemas\Vendas\NotaI->Unidade Fiscal],"Cupom: "+[Answer->Numero do Documento ])

                            Moveto "SPEDC425"
                            Moveto [Codigo da Empresa]
                            Locate [Answer->Codigo da Empresa   ],
                                   ECF_FAB,  
                                   [Answer->Data de Emissao     ],
                                   COD_TOT_PAR,
                                   [\Sistemas\Vendas\NotaI->Codigo do Item      ]                   
                            If Not RetVAl
                               Then End
                                    Down
                                    [Codigo da Empresa ]=[Answer->Codigo da Empresa   ] 
                                    [ECF_FAB           ]=ECF_FAB
                                    [Data              ]=[Answer->Data de Emissao     ] 
                                    [COD_TOT_PAR       ]=COD_TOT_PAR
                                    [COD_ITEM          ]=[\Sistemas\Vendas\NotaI->Codigo do Item      ]
                                    [UNID              ]=[\Sistemas\Vendas\NotaI->Unidade Fiscal      ]
                            EndIf
                            [QTD          ]=[QTD         ]+[\Sistemas\Vendas\NotaI->Quantidade ]
                            [VL_ITEM      ]=[VL_ITEM     ]+VL_OPR
                            [VL_PIS       ]=[VL_PIS      ]+VL_PIS 
                            [VL_COFINS    ]=[VL_COFINS   ]+VL_COFINS
                            if sys_Codigo_Cliente="0059"  ; cliente j  gera sped contribui‡äes
                               then
                                    [VL_PIS       ]=blanknum()
                                    [VL_COFINS    ]=blanknum()
                            endif 
                            UnLockRecord
                       Else MSG="Cupom ->"+[Answer->Codigo da Empresa  ]+"/"+
                                           [Answer->Numero do Documento]+"/"+
                                           [Answer->Serie do Documento ]+"//"
                            MSG=MSG+"Conta o item->"+[\Sistemas\Vendas\NotaI->Codigo do Item      ]+" com tributa‡Æo inv lida ICMS/ISSQN!//"
                            MSG=MSG+"Anote para corre‡Æo posterior !"
                            Mensagem(MSG)
                    EndIf
            EndIf
            
            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf
  
  Seq=0
  Moveto "\\Sistemas\\Vendas\\NotaV"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then While [\Sistemas\Vendas\Notav->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\Notav->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\Notav->Serie do Documento ]=[Answer->Serie do Documento ]
            seq=seq+1

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

  Moveto "Answer"
EndScan
Do_It!
ClearAll

;--- Verifica Cupom cancelado no dia se tem redu‡Æo com cancelaamentos ---------
View   "SPEDC420"
CoEdit "SPEDC460"
Scan
  If [Codigo da Empresa]<>VSDGEMPRESA
     Then Loop
  EndIf    
  If [COD_SIT          ]<>"02"
     Then Loop
  EndIf    

  Moveto "SPEDC420"
  Moveto [Codigo da Empresa]
  Locate [SPEDC460->Codigo da Empresa ], 
         [SPEDC460->ECF_FAB           ],
         [SPEDC460->Data              ], 
         "Can-O"
  If Not RetVal
     Then End
          Down
          [Codigo da Empresa ]=[SPEDC460->Codigo da Empresa ]
          [ECF_FAB           ]=[SPEDC460->ECF_FAB           ]
          [Data              ]=[SPEDC460->Data              ]
          [COD_TOT_PAR       ]="Can-O"
          [VLR_ACUM_TOT      ]=0
          UnLockRecord
  EndIf

  Moveto "SPEDC460"
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Rotina movimenta‡Æo com cartoes 1600               
;*******************************************************************************
Proc Grava_Cartoes()

If [\Sistemas\Vendas\NotaV->Forma de Pagamento]="CT" Or
   [\Sistemas\Vendas\NotaV->Forma de Pagamento]="CD" Or   
   [\Sistemas\Vendas\NotaV->Forma de Pagamento]="CL"   
   Then TipoCartao="D" 
        CodiCartao="SEM PESSOA P_CARTAO"

        GetRecord "\\Sistemas\\Vendas\\P_cartao" [Answer->Codigo da Empresa],[\Sistemas\Vendas\NotaV->Nome do Cartao] To REGP_CARTAO 
        If RetVal
           Then If Not IsBlank(REGP_CARTAO["Debito_Credito"])  Then TipoCartao = SubStr(REGP_CARTAO["Debito_Credito"],1,1) EndIf
                If Not IsBlank(REGP_CARTAO["Codigo Destinat"]) Then CodiCartao = REGP_CARTAO["Codigo Destinat"]            EndIf
                Grava_Participantes(CodiCartao,[\Sistemas\Vendas\NotaV->Nome do Cartao])
        EndIf
        Release Vars REGP_CARTAO   
        
        Moveto "Sped1600"
        Moveto [COD_PART]
        Locate CodiCartao
        If Not RetVal
           Then Moveto "Sped1600"
                End Down
                [COD_PART      ]=CodiCartao
        EndIf
        If TipoCartao="D" Then [TOT_DEBITO ]=[TOT_DEBITO ]+[\Sistemas\Vendas\NotaV->Valor] EndIf   
        If TipoCartao="C" Then [TOT_CREDITO]=[TOT_CREDITO]+[\Sistemas\Vendas\NotaV->Valor] EndIf  
        UnLockRecord
EndIf

EndProc

;*******************************************************************************
;* Rotina para montagem do Bloco D                    
;*******************************************************************************
Proc Monta_BlocoD()

Monta_BlocoDEntradas()

Monta_BlocoDSaidas()

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco D - Entradas         
;*******************************************************************************
Proc Monta_BlocoDEntradas()
Private MODELO, NLanc, tpdoctook,cod_mun_orig,cod_mun_dest

{Ask} {\\sistemas\\estoque\\notaec} Check
moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
moveto [Data de Entrada    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Codigo do Documento] TypeIn "TEL or CA or CT.."
do_it!
ClearAll

if isempty("Answer")
   then return
endif   

NLanc=800000
NR   =NRecords("Answer")

View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Tpdoctos"
View "SPED0150"
View "SPED0400"
View "SPED0460"
View "SPEDD100"
View "SPEDD190"
View "SPEDD195"
View "SPEDD197"
View "SPEDD500"
View "SPEDD590"
View "SPED1900"
View "SPED1910"
View "SPED1920"
View "SPED1921"
View "SPEDE110"
View "CTP_0500"
View "\\Sistemas\\Estoque\\NotaEI"
View "\\Sistemas\\Estoque\\NotaER"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco D 1/2",45," ")+BARRA_STRING)

  tpdoctook=false
  switch
    case [Answer->Codigo do Documento]="TEL"            : tpdoctook=true ; Nota Telefone
    case SubStr([Answer->Codigo do Documento],1,2)="CT" : tpdoctook=true ; Conhecimentos Transporte
    case [Answer->Codigo do Documento]="CA"             : tpdoctook=true ; Conhecimentos Transporte Avulso
  endswitch
  If not tpdoctook
     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([Answer->Codigo],"Nota Entrada: "+[Answer->Numero do Documento ])

  NLanc=NLanc+1  

  Switch
    Case [Answer->Codigo do Documento]="TEL": ; Nota Telefone
      Moveto "SPEDD500"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[Answer->Codigo]
      MODELO             ="22"
      [COD_MOD          ]=MODELO
      Switch
        Case [Answer->Tipo de NF] = "N"           : [COD_SIT]="00" 
        Case [Answer->Tipo de NF] = "0"           : [COD_SIT]="00"  
        Case [Answer->Tipo de NF] = "C"           : [COD_SIT]="06"    
        Case [Answer->Codigo do Documento]="NFAE" : [COD_SIT]="08"    
        Otherwise                                 : [COD_SIT]="01"   
      EndSwitch
      [SER              ]=[Answer->Serie do Documento]
      [SUB              ]=[Answer->SubSerie do Documento]
      [NUM_DOC          ]=[Answer->Numero do Documento ]
      [DT_DOC           ]=[Answer->Data de Emissao     ] 
      If [COD_SIT]="01"
         Then [DT_A_P]=[Answer->Data de Emissao]      
         Else [DT_A_P]=[Answer->Data de Entrada]
      EndIf
      [VL_DOC           ]=[Answer->Valor Nota Fiscal   ]
      [VL_DESC          ]=[Answer->Valor Desconto      ]
      [VL_SERV          ]=[Answer->Valor Servico       ]
      [VL_SERV_NT       ]=[Answer->Valor Servico       ]
      [VL_TERC          ]=0
      [VL_DA            ]=[Answer->Valor Despesas Acessorias]
      [VL_BC_ICMS       ]=[Answer->Valor BCICMS]
      [VL_ICMS          ]=[Answer->Valor ICMS]
      [COD_INF          ]=""
      [VL_PIS           ]=0
      [VL_COFINS        ]=0
      
      [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                               [Answer->Codigo do Documento],
                                               [Answer->Codigo             ],  
                                               [Answer->CFO                ])  
      
      Switch
        Case SYS_CODIGO_CLIENTE="0000": [TP_ASSINANTE    ]="1"
        OtherWise                     : [TP_ASSINANTE    ]="1"  
      EndSwitch
      UnLockRecord
      
    Case SubStr([Answer->Codigo do Documento],1,2)="CT" Or ; Conhecimentos Transporte
         [Answer->Codigo do Documento]="CA":

      Moveto "SPEDD100"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="0"
      [IND_EMIT         ]="1"
      [COD_PART         ]=[Answer->Codigo]
      Switch
        Case [Answer->Codigo do Documento]="CA"              : MODELO="10"
        Case [Answer->Codigo do Documento]="CTA"             : MODELO="8B"
        Case [Answer->Codigo do Documento]="CTAC"            : MODELO="09"
        Case [Answer->Codigo do Documento]="CTRC"            : MODELO="08"
        Case [Answer->Codigo do Documento]="CTFC"            : MODELO="11"
        Case [Answer->Codigo do Documento]="CTRM"            : MODELO="26"
        Case [Answer->Codigo do Documento]="CT-E"            : MODELO="57"
        Case SubStr([Answer->Codigo do Documento],1,3)="CTR" : MODELO="08"
      EndSwitch
      [COD_MOD          ]=MODELO
      switch
        case [Answer->Tipo de NF]="0" : [COD_SIT          ]="00" ;normal
        case [Answer->Tipo de NF]="1" : [COD_SIT          ]="06" ;complemento
        case [Answer->Tipo de NF]="2" : [COD_SIT          ]="00" ;anula‡Æo   
        case [Answer->Tipo de NF]="3" : [COD_SIT          ]="00" ;substituto 
      endswitch

      [SER              ]=[Answer->Serie do Documento]
      [SUB              ]=[Answer->SubSerie do Documento]
      [NUM_DOC          ]=[Answer->Numero do Documento ]
      If [COD_MOD]="57"
         Then [CHV_CTE          ]=[Answer->Chave_Acesso_NFe    ]
         Else [CHV_CTE          ]=""
      EndIf
      [DT_DOC           ]=[Answer->Data de Emissao     ] 
      If [COD_SIT]="01"
         Then [DT_A_P]=[Answer->Data de Emissao]      
         Else [DT_A_P]=[Answer->Data de Entrada]
      EndIf
      if MODELO="57"
         then [TP_CT-e          ]=[Answer->Tipo de NF]
         else [TP_CT-e          ]=""
      endif
      [CHV_CTE_REF      ]=""
      [VL_DOC           ]=[Answer->Valor Nota Fiscal   ]
      [VL_DESC          ]=[Answer->Valor Desconto      ]
      Switch 
        Case Year([Answer->Data de Entrada])<2012: 
          Switch
            Case [Answer->Tipo CTR]="0": [IND_FRT]="9"
            Case [Answer->Tipo CTR]="1": [IND_FRT]="1"
            Case [Answer->Tipo CTR]="2": [IND_FRT]="2"
            Case [Answer->Tipo CTR]="3": [IND_FRT]="0"
            OtherWise                                    : [IND_FRT]="9"
          EndSwitch
        OtherWise:
          Switch
            Case [Answer->Tipo CTR]="0": [IND_FRT]="9"
            Case [Answer->Tipo CTR]="1": [IND_FRT]="0"
            Case [Answer->Tipo CTR]="2": [IND_FRT]="1"
            Case [Answer->Tipo CTR]="3": [IND_FRT]="2"
            Case [Answer->Tipo CTR]="4": [IND_FRT]="2"
            Case [Answer->Tipo CTR]="5": [IND_FRT]="2"
            OtherWise                                    : [IND_FRT]="9"
          EndSwitch
      EndSwitch
      [VL_SERV          ]=[VL_DOC]
      [VL_BC_ICMS       ]=[Answer->Valor BCICMS]
      [VL_ICMS          ]=[Answer->Valor ICMS]
      [VL_NT            ]=0
      [COD_INF          ]=""

      [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                               [Answer->Codigo do Documento],
                                               [Answer->Codigo             ],  
                                               [Answer->CFO                ])
      If COD_VER="012"
         then [COD_MUN_ORIG     ]=[Answer->Cod_Mun_Origem ]
              [COD_MUN_DEST     ]=[Answer->Cod_Mun_Destino]
      EndIf
      UnLockRecord

  EndSwitch 

  seq    =0
  seqc195=0
            
  Moveto "\\Sistemas\\Estoque\\NotaEI"
  Moveto [Numero do Lancamento]
  Locate [Answer->Numero do Lancamento]
  If RetVal
     Then While [Numero do Lancamento]=[Answer->Numero do Lancamento]

            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Estoque\NotaEI->CFO                     ]
            VL_ITEM        =[\Sistemas\Estoque\NotaEI->Preco Total             ]
            VL_DESC        =[\Sistemas\Estoque\NotaEI->Valor Desconto Total    ]
            VR_ACRESC      =[\Sistemas\Estoque\NotaEI->Valor Frete Total       ]+
                            [\Sistemas\Estoque\NotaEI->Valor Seguro Total      ]+
                            [\Sistemas\Estoque\NotaEI->Valor OutDesp Total     ]
            
            CST_ICMS       =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
            ALIQ_ICMS      =[\Sistemas\Estoque\NotaEI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Estoque\NotaEI->Aliquota Reduzida BCICMS]
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
            VL_BC_ICMS     =[\Sistemas\Estoque\NotaEI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Estoque\NotaEI->Valor do ICMS           ]
            VL_RED_BC      =0

            VL_BC_ICMS_ST  =[\Sistemas\Estoque\NotaEI->ICMS_ST_BC              ]
            ALIQ_ST        =[\Sistemas\Estoque\NotaEI->ICMS_ST_Aliquota        ]
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_ICMS_ST     =[\Sistemas\Estoque\NotaEI->ICMS_ST_Valor           ]
            
            If ALIQ_ICMS>0 
               Then VL_RED_BC =NDecimal(((VL_ITEM-VL_DESC)*ALIQ_RD_ICMS)/100,2)
            EndIf
            
            VL_OPR=(VL_ITEM-VL_DESC)+(VL_ICMS_ST)+VR_ACRESC
            ;-------------------------------------------------------------------
            
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Switch
              Case MODELO="22": ; Nota Telefone
                Moveto "SPEDD590"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR       ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS   ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS      ]+VL_ICMS
                [VL_BC_ICMS_ST]=[VL_BC_ICMS_ST]+VL_BC_ICMS_ST
                [VL_ICMS_ST   ]=[VL_ICMS_ST   ]+VL_ICMS_ST
                [VL_RED_BC    ]=[VL_RED_BC    ]+VL_RED_BC
                [COD_OBS      ]=""        
                UnLockRecord
            
              Case MODELO="07" Or MODELO="08" Or MODELO="8B" Or MODELO="09" Or
                   MODELO="10" Or MODELO="11" Or 
                   MODELO="26" Or MODELO="27" Or MODELO="57": ; Conhecimentos Transporte
                Moveto "SPEDD190"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                [VL_RED_BC    ]=[VL_RED_BC   ]+VL_RED_BC
                [COD_OBS      ]=""        
                UnLockRecord
            
            EndSwitch
            
            Moveto "\\Sistemas\\Estoque\\NotaEI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  ;--- RET SIRI,ECLETICA ------------------------------------------------------
  if (sys_Codigo_Cliente ="0227" and [Answer->Codigo da Empresa]="0001") 
     Then
          if [Answer->Valor ICMS       ]>0
             Then
                  Grava_Obs0460("0200","Estorno de credito - RET PTA n. 45.000008168.41")
                  Seq=Seq+1
             
                  Moveto "SPEDD195"
                  End
                  Down
                  [Lancamento   ]=NLANC
                  [Sequencia    ]=Seq
                  [COD_OBS      ]="0200"
                  [TXT_COMPL    ]=LTrim(StrVal(Format("W14.2,EIC",[Answer->Valor ICMS])))        
                  UnLockRecord
             
                  Seq=Seq+1
                  Moveto "SPEDD197"
                  End
                  Down
                  [Lancamento            ]=NLanc 
                  [Sequencia             ]=Seq
                  [COD_AJ                ]="MG53000999"
                  [DESCR_COMPL_AJ        ]="cr‚dito para sub-apura‡Æo da nota"
                  [COD_ITEM              ]=""
                  [VL_ICMS               ]=[Answer->Valor ICMS]
                  UnLockRecord
        
                  Grava_1900("MG53000999","")
                  Grava_1920("MG53000999","04",[Answer->Valor ICMS])
        
          Endif
  Endif
  ;---------------------------------------------------------------
  
  Moveto "Answer"
EndScan
Do_It!
ClearAll

endproc

;*******************************************************************************
;* Rotina para montagem do Bloco D - Saidas           
;*******************************************************************************
Proc Monta_BlocoDSaidas()
Private MODELO, NLanc, tpdoctook,cod_mun_orig,cod_mun_dest

{Ask} {\\sistemas\\vendas\\notac} Check
moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
moveto [Data de Emissao       ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
moveto [Tipo do Documento     ] TypeIn "CT.. or CA"
moveto [Tipo Movimento Estoque] TypeIn "S"  ; Saida
do_it!
ClearAll

if isempty("Answer")
   then return
endif   

NLanc=900000
NR   =NRecords("Answer")

View "\\Sistemas\\Cadastro\\Empresas"
View "\\Sistemas\\Cadastro\\Destinat"
View "\\Sistemas\\Cadastro\\Cidades"
View "\\Sistemas\\Cadastro\\Tpdoctos"
View "SPED0150"
View "SPED0400"
View "SPED0460"
View "SPEDD100"
View "SPEDD190"
View "SPEDD195"
View "SPEDD197"
View "SPEDD500"
View "SPEDD590"
View "SPED1900"
View "SPED1910"
View "SPED1920"
View "SPED1921"
View "SPEDE110"
View "CTP_0500"
View "\\Sistemas\\Vendas\\NotaI"
CoEdit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco D 2/2",45," ")+BARRA_STRING)

  tpdoctook=false
  switch
    case SubStr([Answer->Codigo do Documento],1,2)="CT" : tpdoctook=true ; Conhecimentos Transporte
    case [Answer->Codigo do Documento]="CA"             : tpdoctook=true ; Conhecimentos Transporte Avulso
  endswitch
  If not tpdoctook
     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([Answer->Codigo],"Conhecimento: "+[Answer->Numero do Documento ])

  NLanc=NLanc+1  

  Switch
    Case SubStr([Answer->Codigo do Documento],1,2)="CT" Or ; Conhecimentos Transporte
         [Answer->Codigo do Documento]="CA":
      Moveto "SPEDD100"
      End 
      Down 
      [Lancamento       ]=NLanc
      [IND_OPER         ]="1"
      [IND_EMIT         ]="0"
      [COD_PART         ]=[Answer->Codigo]
      Switch
        Case [Answer->Codigo do Documento]="CA"              : MODELO="10"
        Case [Answer->Codigo do Documento]="CTA"             : MODELO="8B"
        Case [Answer->Codigo do Documento]="CTAC"            : MODELO="09"
        Case [Answer->Codigo do Documento]="CTRC"            : MODELO="08"
        Case [Answer->Codigo do Documento]="CTFC"            : MODELO="11"
        Case [Answer->Codigo do Documento]="CTRM"            : MODELO="26"
        Case [Answer->Codigo do Documento]="CT-E"            : MODELO="57"
        Case SubStr([Answer->Codigo do Documento],1,3)="CTR" : MODELO="08"
      EndSwitch
      [COD_MOD          ]=MODELO
      If [Answer->Situacao] = "C"
        Then [COD_SIT   ]="02"
        Else [COD_SIT   ]="00"
      EndIf
      [SER              ]=[Answer->Serie do Documento]
      ;[SUB              ]=[Answer->SubSerie do Documento]
      [NUM_DOC          ]=[Answer->Numero do Documento ]
      If [COD_MOD]="57"
         Then [CHV_CTE          ]=[Answer->Chave_Acesso_NFe    ]
         Else [CHV_CTE          ]=""
      EndIf
      [DT_DOC           ]=[Answer->Data de Emissao     ] 
      [DT_A_P           ]=[Answer->Data de Emissao     ]      
      if MODELO="57"
         then [TP_CT-e          ]="0"
         else [TP_CT-e          ]=""
      endif
      [CHV_CTE_REF      ]=""
      [VL_DOC           ]=[Answer->Valor Nota Fiscal   ]
      [VL_DESC          ]=[Answer->Valor Desconto      ]
      Switch 
        Case [Answer->Frete por Conta]="0": [IND_FRT]="9"
        Case [Answer->Frete por Conta]="1": [IND_FRT]="0"
        Case [Answer->Frete por Conta]="2": [IND_FRT]="1"
        Case [Answer->Frete por Conta]="3": [IND_FRT]="2"
        Case [Answer->Frete por Conta]="4": [IND_FRT]="2"
        Case [Answer->Frete por Conta]="5": [IND_FRT]="2"
        OtherWise                                         : [IND_FRT]="9"
      EndSwitch
      [VL_SERV          ]=[VL_DOC]
      [VL_BC_ICMS       ]=[Answer->Valor BCICMS]
      [VL_ICMS          ]=[Answer->Valor ICMS]
      [VL_NT            ]=0
      [COD_INF          ]=""
      
      [COD_CTA               ]=Pega_PlanoConta([Answer->Codigo da Empresa  ],
                                               [Answer->Codigo do Documento],
                                               [Answer->Codigo             ],  
                                               [Answer->CFO                ])  
      UnLockRecord

  EndSwitch 

  seq    =0
  seqc195=0
            
  Moveto "\\Sistemas\\Vendas\\NotaI"
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa  ],
         [Answer->Numero do Documento],
         [Answer->Serie do Documento ]
  If RetVal
     Then While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[Answer->Codigo da Empresa  ] And
                [\Sistemas\Vendas\NotaI->Numero do Documento]=[Answer->Numero do Documento] And
                [\Sistemas\Vendas\NotaI->Serie do Documento ]=[Answer->Serie do Documento ]
     
            ;--- C lculo p/ escritura‡Æo -------------------------------------
            CFOP           =[\Sistemas\Vendas\NotaI->CFO                     ]
            VL_ITEM        =[\Sistemas\Vendas\NotaI->Preco Total             ]
            VL_DESC        =[\Sistemas\Vendas\NotaI->Valor Desconto Total    ]
            VR_ACRESC      =[\Sistemas\Vendas\NotaI->Valor Frete Total       ]+
                            [\Sistemas\Vendas\NotaI->Valor Seguro Total      ]+
                            [\Sistemas\Vendas\NotaI->Valor OutDesp Total     ]
            
            CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
            ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
            ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
            If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
            If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
            VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
            VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
            VL_RED_BC      =0

            VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
            ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
            If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
            VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
            
            If ALIQ_ICMS>0 
               Then VL_RED_BC =NDecimal(((VL_ITEM-VL_DESC)*ALIQ_RD_ICMS)/100,2)
            EndIf
            
            VL_OPR=(VL_ITEM-VL_DESC)+(VL_ICMS_ST)+VR_ACRESC
            ;-------------------------------------------------------------------
            
            ;--- Analitico CST_ICMS,CFOP,ALIQ_ICMS -----------------------------
            Switch
              Case MODELO="07" Or MODELO="08" Or MODELO="8B" Or MODELO="09" Or
                   MODELO="10" Or MODELO="11" Or 
                   MODELO="26" Or MODELO="27" Or MODELO="57": ; Conhecimentos Transporte
                Moveto "SPEDD190"
                Moveto [Lancamento]
                Locate NLANC,CST_ICMS,CFOP,ALIQ_ICMS
                If Not RetVAl
                   Then End
                        Down
                        [Lancamento   ]=NLANC
                        [CST_ICMS     ]=CST_ICMS
                        [CFOP         ]=CFOP
                        [ALIQ_ICMS    ]=ALIQ_ICMS
                EndIf
                [VL_OPR       ]=[VL_OPR      ]+VL_OPR
                [VL_BC_ICMS   ]=[VL_BC_ICMS  ]+VL_BC_ICMS
                [VL_ICMS      ]=[VL_ICMS     ]+VL_ICMS
                [VL_RED_BC    ]=[VL_RED_BC   ]+VL_RED_BC
                [COD_OBS      ]=""        
                UnLockRecord
            
            EndSwitch
            
            Moveto "\\Sistemas\\Vendas\\NotaI" 
            Skip
            If EOT() Then QuitLoop EndIf
          EndWhile
  EndIf

  Moveto "Answer"
EndScan
Do_It!
ClearAll

Endproc

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

CoEdit "SPEDE100"
End 
Down
[DT_INI  ]=VSDGDTINI
[DT_FIN  ]=VSDGDTFIM
UnLockRecord
Do_It!
ClearAll

VL_TOT_DEBITOS           =0
VL_TOT_CREDITOS          =0

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

CoEdit "SPEDE110"
[VL_TOT_DEBITOS           ]=VL_TOT_DEBITOS
[VL_TOT_CREDITOS          ]=VL_TOT_CREDITOS
UnLockRecord
Do_It!
ClearAll

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

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

EndProc

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

EndProc

;*******************************************************************************
;* Rotina para montagem do Bloco I                    
;*******************************************************************************
Proc Monta_Bloco1()
       
EndProc

;*******************************************************************************
;* Rotina para montagem do Bloco K                    
;*******************************************************************************
Proc Monta_Blocok()
Private REG_EMP

If Not BLOCOK
   Then Return
EndIf   

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

;---- SPEDK100 -> Per¡odo de Apura‡Æo do ICMS/IPI ------------------------------
NR = NRecords(TabelaIK)

View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\TpItem"
View "\\Sistemas\\Estoque\\Familia"
View "\\Sistemas\\Estoque\\Unidades"        
View "SPED0190"
View "SPED0200"
View "SPEDK200"
Coedit TabelaIK
Scan
  Barra(NR, RecNo())
  Aguarde(Completa("Aguarde, processando bloco K - K200 ",45," ")+BARRA_STRING)
   
  Grava_Itens([Codigo do Item],"Estoque Escriturado: "+[Codigo do Item])
  Grava_Unidades([Unidade Interna],"Item: "+[Codigo do Item])
  
  Moveto TabelaIK
  posse    = [Posse_Estoque  ]
  posse_cd = [Codigo_Terceiro]
  
  COD_ITE = [Codigo do Item]
  SLD_ITE = [Saldo Atual   ]
  
  Moveto "SPEDK200"  
  End
  Down
  [DT_EST       ] = VSDGDTFIM
  [COD_ITEM     ] = COD_ITE 
  [QTD          ] = SLD_ITE
  [IND_EST      ] = posse
  [COD_PART     ] = posse_cd
  UnLockRecord
  
  Moveto TabelaIK
EndScan
Do_it!
ClearAll 

;---- Requisi‡Æo de Entrada de Produ‡Æo ---------------------------------------- 
Aguarde("Aguarde, processando as requisi‡”es de entrada da produ‡„o")
{Ask} {\\Sistemas\\Estoque\\RqCabeca}
Moveto [Numero do Lancamento     ] Check
Moveto [Tipo de Movimento        ] TypeIn "E"
Moveto [Tipo de Operacao         ] TypeIn "P"
Moveto [Data de Ocorrencia       ] Check TypeIn  ">=~VSDGDTINI ,<=~VSDGDTFIM"
Moveto [Tipo do Documento        ] Check
Moveto [Numero do Documento      ] Check
Do_It!
ClearAll

Tab_RqCabeca = Cria_Temp(PrivDir())
Copy "Answer" Tab_RqCabeca

If Not IsEmpty(Tab_RqCabeca)
   Then ;---- BlocoK - K230/K235 -----------------------------------------------
        
        NLanc=1000000
        NR = NRecords(Tab_RqCabeca)
        
        View "\\Sistemas\\Estoque\\Itens"
        View "\\Sistemas\\Estoque\\TpItem"
        View "\\Sistemas\\Estoque\\Familia"
        View "\\Sistemas\\Estoque\\Unidades"
        View "\\Sistemas\\Estoque\\RqMatPri"
        View "\\Sistemas\\Estoque\\RqItem"
        View "\\Sistemas\\Producao\\FormulaC"
        View "\\Sistemas\\Producao\\FormulaI"
        View "SPED0190"
        View "SPED0200"
        View "SPED0210"
        View "SPED0220"
        View "SPEDK100"
        View "SPEDK200"
        View "SPEDK230"
        View "SPEDK235"
        CoEdit Tab_RqCabeca
        Scan
           Barra(NR, RecNo())
           Aguarde(Completa("Aguarde, processando bloco K230/K235",45," ")+BARRA_STRING)
        
           Moveto Tab_RqCabeca
           RQCABECA_NLANC  = [Numero do Lancamento]
           RQCABECA_DATA   = [Data de Ocorrencia]   
           RQCABECA_CODDOC = [Numero do Lancamento]+": "+ [Tipo do Documento]+" "+[Numero do Documento]
           
           Moveto "\\Sistemas\\Estoque\\RqItem"
           Moveto [Numero do Lancamento]
           Locate RQCABECA_NLANC 
           If Retval
              Then While RQCABECA_NLANC = [Numero do Lancamento]
                     ;----SPEDK0220 Outras Movimenta‡äes Internas Entre Mercadorias ----
                     ;Moveto "SPEDK220"
                     ;End Down
                     ;[DT_MOV       ] = ""
                     ;[COD_ITEM_ORI ] = ""
                     ;[COD_ITEM_DEST] = ""
                     ;[QTD          ] = ""
                     ;UnLockRecord
           
                     ;---- SPEDK0230 -> Itens Produzidos -----------------------
                     ACHOU_LANCTO = False
                     Moveto "SPEDK230"
                     Moveto [COD_DOC_OP]
                     Locate RQCABECA_CODDOC
                     If RetVal
                        Then While RQCABECA_CODDOC = [COD_DOC_OP]
                               If [COD_ITEM] = [\Sistemas\Estoque\RqItem->Codigo do Item]
                                  Then ACHOU_LANCTO = True 
                               EndIf
                               Skip
                               If Eot() Then QuitLoop EndIf
                             EndWhile
                     EndIf   
                     
                     If Not ACHOU_LANCTO
                        Then Grava_Itens([\Sistemas\Estoque\RqItem->Codigo do Item],"Requisicao: "+RQCABECA_NLANC)
                             Grava_Formula([\Sistemas\Estoque\RqItem->Codigo do Item])
                             
                             NLanc = NLanc + 1
                             Moveto "SPEDK230"
                             End Down
                             [Lancamento   ] = NLanc
                             [DT_INI_OP    ] = RQCABECA_DATA
                             [DT_FIN_OP    ] = RQCABECA_DATA
                             [COD_DOC_OP   ] = RQCABECA_CODDOC
                             [COD_ITEM     ] = [\Sistemas\Estoque\RqItem->Codigo do Item]
                        Else NLanc = [Lancamento]     
                     EndIf        
                     [QTD_ENC] = [QTD_ENC]+[\Sistemas\Estoque\RqItem->Quantidade]
                     UnLockRecord 
                     
                     Seq_Ind_Aux = 0
                     ;---- SPEDK0235 -> Insumos Consumidos -----------------------------
                     If ACHOU_LANCTO
                        Then Moveto "SPEDK235"
                             Moveto [Lancamento]
                             Locate NLanc
                             If RetVal
                                Then While NLanc = [Lancamento]
                                       If Seq_Ind_Aux < [Sequencia]
                                           Then Seq_Ind_Aux = [Sequencia]
                                       EndIf   
                                       Skip
                                       If Eot() Then QuitLoop EndIf
                                     EndWhile
                             EndIf 
                             Seq_Pro = Seq_Ind_Aux
                        Else Seq_Pro=0 
                     EndIf   
                     
                     Moveto "\\Sistemas\\Estoque\\Rqmatpri"
                     Moveto [Numero do Lancamento]
                     Locate RQCABECA_NLANC,[\Sistemas\Estoque\RqItem->Sequencia do Lancamento]
                     If RetVal
                        Then While [Numero do Lancamento] = RQCABECA_NLANC And [Sequencia do Item]=[\Sistemas\Estoque\RqItem->Sequencia do Lancamento]
                               ACHOU_ITEM = False
                               Moveto "SPEDK235"
                               Moveto [Lancamento]
                               Locate NLanc
                               If RetVal
                                  Then While NLanc = [Lancamento]
                                         If [COD_ITEM     ] =[\Sistemas\Estoque\Rqmatpri->Codigo do Item]             And
                                            [COD_INS_SUBST] = [\Sistemas\Estoque\Rqmatpri->Codigo do Item Substituto]
                                             Then ACHOU_ITEM=True
                                                  QuitLoop
                                          EndIf
                                          Skip
                                          If Eot() Then QuitLoop EndIf
                                        EndWhile
                               EndIf   
                                   
                               If Not ACHOU_ITEM
                                  Then Seq_Pro = Seq_Pro + 1
                                       End Down
                                       [Lancamento   ] = NLanc
                                       [Sequencia    ] = Seq_Pro
                                       [DT_SAIDA     ] = RQCABECA_DATA
                                       [COD_ITEM     ] = [\Sistemas\Estoque\Rqmatpri->Codigo do Item]
                                       [COD_INS_SUBST] = [\Sistemas\Estoque\Rqmatpri->Codigo do Item Substituto]
                               EndIf        
                               [QTD] = [QTD]+[\Sistemas\Estoque\Rqmatpri->Quantidade]
                               UnLockRecord      
                                   
                               Moveto "\\Sistemas\\Estoque\\Rqmatpri"    
                               Skip
                               If Eot() Then QuitLoop EndIf                               
                             EndWhile
                     EndIf 
                     Moveto "\\Sistemas\\Estoque\\RqItem"
                     Skip
                     If Eot() Then QuitLoop EndIf             
                   EndWhile            
           EndIf 
           Moveto Tab_RqCabeca
        EndScan
        Do_It!
        ClearAll
EndIf
Delete(Tab_RqCabeca)

;---- Requisi‡Æo de Entrada de Industrializa‡Æo  ------------------------------- 
Aguarde("Aguarde, processando as requisi‡”es de entrada da produ‡„o")
{Ask} {\\Sistemas\\Estoque\\RqCabeca}
Moveto [Numero do Lancamento     ] Check
Moveto [Tipo de Movimento        ] TypeIn "E"
Moveto [Tipo de Operacao         ] TypeIn "I"
Moveto [Data de Ocorrencia       ] Check TypeIn  ">=~VSDGDTINI ,<=~VSDGDTFIM"
Moveto [Tipo do Documento        ] Check
Moveto [Numero do Documento      ] Check
Do_It!
ClearAll

Tab_RqCabeca = Cria_Temp(PrivDir())
Copy "Answer" Tab_RqCabeca

If Not IsEmpty(Tab_RqCabeca)
   Then ;---- BlocoK - K250/K255 -----------------------------------------------
        NR = NRecords(Tab_RqCabeca)
        
        View "\\Sistemas\\Estoque\\Itens"
        View "\\Sistemas\\Estoque\\TpItem"
        View "\\Sistemas\\Estoque\\Familia"
        View "\\Sistemas\\Estoque\\Unidades"
        View "\\Sistemas\\Estoque\\RqMatPri"
        View "\\Sistemas\\Estoque\\RqItem"
        View "\\Sistemas\\Producao\\FormulaC"
        View "\\Sistemas\\Producao\\FormulaI"
        View "SPED0190"
        View "SPED0200"
        View "SPED0210"
        View "SPED0220"
        View "SPEDK100"
        View "SPEDK200"
        View "SPEDK250"
        View "SPEDK255"
        CoEdit Tab_RqCabeca
        Scan
           Barra(NR, RecNo())
           Aguarde(Completa("Aguarde, processando bloco K",45," ")+BARRA_STRING)
           
           Moveto Tab_RqCabeca
           RQCABECA_NLANC  = [Numero do Lancamento]
           RQCABECA_DATA   = [Data de Ocorrencia]   
           
           Moveto "\\Sistemas\\Estoque\\RqItem"
           Moveto [Numero do Lancamento]
           Locate RQCABECA_NLANC 
           If Retval
              Then While RQCABECA_NLANC = [Numero do Lancamento]
                     ;---- Industrializa‡Æo Efetuada por Terceiros - Itens Produzidos --
                     Moveto "SPEDK250"
                     Moveto [DT_PROD]
                     Locate RQCABECA_DATA,[\Sistemas\Estoque\RqItem->Codigo do Item]
                     If Not RetVal
                        Then Grava_Itens([\Sistemas\Estoque\RqItem->Codigo do Item],"Requisicao: "+RQCABECA_NLANC)
                             Grava_Formula([\Sistemas\Estoque\RqItem->Codigo do Item])
                             Moveto "SPEDK250"
                             End Down
                             [DT_PROD      ] = RQCABECA_DATA
                             [COD_ITEM     ] = [\Sistemas\Estoque\RqItem->Codigo do Item]       
                     EndIf
                     [QTD] = [QTD]+[\Sistemas\Estoque\RqItem->Quantidade]
                     UnLockRecord 
                     
                     ;---- Industrializa‡Æo Em Terceiros - Insumos Consumidos --
                     Moveto "\\Sistemas\\Estoque\\Rqmatpri"
                     Moveto [Numero do Lancamento]
                     Locate RQCABECA_NLANC,[\Sistemas\Estoque\RqItem->Sequencia do Lancamento]
                     If RetVal
                        Then While [Numero do Lancamento] = RQCABECA_NLANC And 
                                   [Sequencia do Item   ]=[\Sistemas\Estoque\RqItem->Sequencia do Lancamento]
                               Moveto "SPEDK255"
                               Moveto [DT_PROD]
                               Locate RQCABECA_DATA,Rtrim([\Sistemas\Estoque\RqItem->Codigo do Item]),
                                      RQCABECA_DATA,Rtrim([\Sistemas\Estoque\Rqmatpri->Codigo do Item])
                               If Not RetVal
                                  Then Grava_Itens([\Sistemas\Estoque\Rqmatpri->Codigo do Item],"Requisicao: "+RQCABECA_NLANC)
                                       Moveto "SPEDK255"
                                       End Down
                                       [DT_PROD      ] = RQCABECA_DATA
                                       [COD_ITEM_PROD] = [\Sistemas\Estoque\RqItem->Codigo do Item]
                                       [DT_CONS      ] = RQCABECA_DATA
                                       [COD_ITEM     ] = [\Sistemas\Estoque\Rqmatpri->Codigo do Item]
                                       [COD_INS_SUBST] = [\Sistemas\Estoque\Rqmatpri->Codigo do Item Substituto]
                               EndIf        
                               [QTD] = [QTD]+[\Sistemas\Estoque\Rqmatpri->Quantidade]
                               UnLockRecord
                               Moveto "\\Sistemas\\Estoque\\Rqmatpri"    
                               Skip
                               If Eot() Then QuitLoop EndIf                               
                             EndWhile
                     EndIf  
                     Moveto "\\Sistemas\\Estoque\\RqItem"
                     Skip
                     If Eot() Then QuitLoop EndIf             
                   EndWhile            
           EndIf 
           Moveto Tab_RqCabeca
        EndScan
        Do_It!
        ClearAll   
EndIf
Delete(Tab_RqCabeca)

;---- Per¡odo de Apura‡Æo do ICMS/IPI ------------------------------------------
CoEdit "SPEDK100"
End Down
[DT_INI]=VSDGDTINI
[DT_FIN]=VSDGDTFIM
UnLockRecord
Do_It!
ClearAll

EndProc ;Monta_Blocok()

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

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


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

EndProc

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

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

Return C+1
EndProc

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

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

Return String
EndProc

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

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

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

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

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

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

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

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

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

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

;--- Registro 0200: Tabela de Identifica‡Æo do Item (Produto e Servi‡os) -------
View "SPED0210"
View "SPED0220"
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     )+"|"
 switch
   case COD_VER>="011":
     Print File ARQ ""+[CEST]+"|"+"\n"
     
   otherwise          :
     Print File ARQ ""+"\n"

 endswitch
    
 CONTA_REGISTRO("0200","0990")

 Moveto "SPED0210"
 Moveto [COD_ITEM]
 Locate [SPED0200->COD_ITEM]
 If RetVal
    Then While [COD_ITEM]=[SPED0200->COD_ITEM]
           Print File ARQ "|0210"+"|"
           Print File ARQ ""+[COD_ITEM_COMP]+"|"
           Print File ARQ Valor_Str([QTD_COMP],6)+"|"
           Print File ARQ Valor_Str([PERDA],4)+"|"+"\n"
           CONTA_REGISTRO("0210","0990")
           Skip
           If Eot() Then QuitLoop EndIf
         EndWhile
 EndIf
 
 Moveto "SPED0220"
 Moveto [COD_ITEM]
 Locate [SPED0200->COD_ITEM]
 If RetVal
    Then While [COD_ITEM]=[SPED0200->COD_ITEM]
           Print File ARQ "|0220"+"|"
           Print File ARQ ""+[UNID_CONV]+"|"
           Print File ARQ Valor_Str([FAT_CONV],6)+"|"+"\n"
           CONTA_REGISTRO("0220","0990")
           Skip
           If Eot() Then QuitLoop EndIf
         EndWhile
 EndIf
 
 Moveto "SPED0200"
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 0300:                  -------------------------------------------
;--- Registro 0305:                  -------------------------------------------

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

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

;--- Registro 0460: Tabela de Observa‡äes do Lan‡amento Fiscal -----------------
View "SPED0460"
Scan
 Print File ARQ "|0460"+"|"
 Print File ARQ ""+[COD_OBS                 ]+"|"
 Print File ARQ ""+[TXT                     ]+"|"+"\n"
 CONTA_REGISTRO("0460","0990")
EndScan
ClearImage

;--- Registro 0500: Tabela de Plano de contas ----------------------------------
View "CTC_0500"
Scan
 Print File ARQ "|0500"+"|"
 Print File ARQ Data_Str([DT_ALT])+"|"
 Print File ARQ ""+[COD_NAT_CC              ]+"|"
 Print File ARQ ""+[IND_CTA                 ]+"|"
 Print File ARQ ""+strval([NIVEL           ])+"|"
 Print File ARQ ""+[COD_CTA                 ]+"|"
 Print File ARQ ""+[NOME_CTA                ]+"|"+"\n"
 CONTA_REGISTRO("0500","0990")
 
Endscan
ClearImage

;--- 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 "SPEDC101","SPEDC105","SPEDC110","SPEDC111","SPEDC112","SPEDC113","SPEDC114","SPEDC115",
             "SPEDC120","SPEDC130","SPEDC140","SPEDC141","SPEDC160","SPEDC170",
             "SPEDC172",
             "SPEDC179","SPEDC190","SPEDC195","SPEDC197",
             "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 "SPEDC101"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C101"+"|"
                    Print File ARQ Valor_Str([VL_FCP_UF_DEST ],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS_UF_DEST],2)+"|"
                    Print File ARQ Valor_Str([VL_ICMS_UF_REM ],2)+"|"+"\n"
                    CONTA_REGISTRO("C101","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPEDC105"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C105","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPEDC110"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C110"+"|"
                    Print File ARQ ""+[COD_INF      ]+"|"
                    Print File ARQ ""+SubStr([TXT_COMPL],1,250)+"|"+"\n"
                    CONTA_REGISTRO("C110","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          
          Moveto "SPEDC111"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
             
             

                   ;CONTA_REGISTRO("C111","C990")

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

                   ;CONTA_REGISTRO("C112","C990")

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

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

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

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

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

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

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

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

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

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

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPEDC195"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C195|"
                    Print File ARQ ""+[COD_OBS      ]+"|"
                    Print File ARQ ""+[TXT_COMPL    ]+"|"+"\n"
                    CONTA_REGISTRO("C195","C990")

                    Moveto "SPEDC197"
                    Moveto [Lancamento]
                    Locate NLANC,[SPEDC195->COD_OBS]
                    If RetVal
                       Then While [Lancamento]=NLANC and [COD_OBS]=[SPEDC195->COD_OBS]
                              Print File ARQ "|C197|"
                              Print File ARQ ""+[COD_AJ        ]+"|"
                              Print File ARQ ""+[DESCR_COMPL_AJ]+"|"
                              Print File ARQ ""+[COD_ITEM      ]+"|"
                              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_OUTROS ],2)+"|"+"\n"
                              CONTA_REGISTRO("C197","C990")
          
                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf   

                    Moveto "SPEDC195"
                    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 "SPEDC390","SPEDC370","SPEDC350",
             "SPEDC321","SPEDC320","SPEDC310","SPEDC300"
        Scan
          CEMPR =[Codigo da Empresa    ]
          SDOCT =[Serie do Documento   ]
          SSDOCT=[SubSerie 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,SSDOCT,DTREF
          If RetVal
             Then While [Codigo da Empresa    ]=CEMPR  And
                        [Serie do Documento   ]=SDOCT  And
                        [SubSerie do Documento]=SSDOCT And
                        [Data de Emissao      ]=DTREF
             
                    Print File ARQ "|C310"+"|"
                    Print File ARQ ""+[NUM_DOC_CANC ]+"|"+"\n"
                    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,SSDOCT,DTREF
          If RetVal
             Then While [Codigo da Empresa    ]=CEMPR  And
                        [Serie do Documento   ]=SDOCT  And
                        [SubSerie do Documento]=SSDOCT And
                        [Data de Emissao      ]=DTREF
             
                    CST      =[CST_ICMS ]
                    CFOP     =[CFOP     ]
                    ALIQ_ICMS=[ALIQ_ICMS]
             
                    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")

                    ;--- Registro C321: Registro Analitico do Resumo Diario das Notas Fiscais de Venda a Consumidor ------
                    Moveto "SPEDC321"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SDOCT,SSDOCT,DTREF,CST,CFOP,ALIQ_ICMS
                    If RetVal
                       Then While [Codigo da Empresa    ]=CEMPR     And
                                  [Serie do Documento   ]=SDOCT     And
                                  [SubSerie do Documento]=SSDOCT    And
                                  [Data de Emissao      ]=DTREF     And
                                  [CST_ICMS             ]=CST       And      
                                  [CFOP                 ]=CFOP      And
                                  [ALIQ_ICMS            ]=ALIQ_ICMS
                       
                              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 "SPEDC320"
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPEDC350"
          Moveto [Codigo da Empresa]
          Locate CEMPR,SDOCT,SSDOCT,DTREF
          If RetVal
             Then While [Codigo da Empresa    ]=CEMPR  And
                        [Serie do Documento   ]=SDOCT  And
                        [SubSerie do Documento]=SSDOCT And
                        [Data de Emissao      ]=DTREF

                    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 [Codigo da Empresa]
                    Locate CEMPR,SDOCT,SSDOCT,DTREF,NLANC
                    If RetVal
                       Then While [Codigo da Empresa    ]=CEMPR  And
                                  [Serie do Documento   ]=SDOCT  And
                                  [SubSerie do Documento]=SSDOCT And
                                  [Data de Emissao      ]=DTREF  And
                                  [Lancamento           ]=NLANC
                    
                              Print File ARQ "|C370"+"|"
                              Print File ARQ Valor_Str([NUM_ITEM],0)+"|"
                              Print File ARQ ""+[COD_ITEM     ]+"|"
                              Print File ARQ Valor_Str([QTD],3)+"|"
                              Print File ARQ ""+[UNID         ]+"|"
                              Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                              Print File ARQ Valor_Str([VL_DESC   ],2)+"|"+"\n"
                              CONTA_REGISTRO("C370","C990")
          
                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf
          
                    ;--- Registro C390: Analitico do documento ---------------------------
                    Moveto "SPEDC390"
                    Moveto [Codigo da Empresa]
                    Locate CEMPR,SDOCT,SSDOCT,DTREF,NLANC
                    If RetVal
                       Then While [Codigo da Empresa    ]=CEMPR  And
                                  [Serie do Documento   ]=SDOCT  And
                                  [SubSerie do Documento]=SSDOCT And
                                  [Data de Emissao      ]=DTREF  And
                                  [Lancamento           ]=NLANC
          
                              Print File ARQ "|C390"+"|"
                              Print File ARQ ""+[CST_ICMS     ]+"|"
                              Print File ARQ ""+[CFOP         ]+"|"
                              Print File ARQ Valor_Str([ALIQ_ICMS ],2)+"|"
                              Print File ARQ Valor_Str([VL_OPR    ],2)+"|"
                              Print File ARQ Valor_Str([VL_BC_ICMS],2)+"|"
                              Print File ARQ Valor_Str([VL_ICMS   ],2)+"|"
                              Print File ARQ Valor_Str([VL_RED_BC ],2)+"|"
                              Print File ARQ ""+[COD_OBS      ]+"|"+"\n"
                              CONTA_REGISTRO("C390","C990")
          
                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf
                    
                    Moveto "SPEDC350"
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
          
          Moveto "SPEDC300"
        EndScan
        ClearAll
EndIf

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

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

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

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

                                        Print File ARQ "|C425"+"|"
                                        Print File ARQ ""+[COD_ITEM     ]+"|"
                                        Print File ARQ Valor_Str([QTD],3)+"|"
                                        Print File ARQ ""+[UNID         ]+"|"
                                        Print File ARQ Valor_Str([VL_ITEM   ],2)+"|"
                                        
                                        if isblank([VL_PIS]) and isblank([VL_COFINS]) ; clientes j  geram sped contribui‡äes
                                           then
                                                Print File ARQ "|"
                                                Print File ARQ "|"+"\n"
                                           else
                                                Print File ARQ Valor_Str([VL_PIS    ],2)+"|"
                                                Print File ARQ Valor_Str([VL_COFINS ],2)+"|"+"\n"
                                        endif    
                                        CONTA_REGISTRO("C425","C990")
                    
                                        Skip
                                        If EOT() Then QuitLoop EndIf
                                      EndWhile
                              EndIf

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

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

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

                              Skip
                              If EOT() Then QuitLoop EndIf
                            EndWhile
                    EndIf

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

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

          Moveto "SPEDC400"
        EndScan
        ClearAll
EndIf

;--- Registro C500: Nota Fiscal Energia ----------------------------------------
If Not IsEmpty("SPEDC500")
   Then View "SPEDC590","SPEDC510","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 "SPEDC510"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|C510|"
                    Print File ARQ Valor_Str([NUM_ITEM],0)+"|"
                    Print File ARQ ""+[COD_ITEM     ]+"|"
                    Print File ARQ ""+[COD_CLASS    ]+"|"
                    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 ""+[CST_ICMS     ]+"|"
                    Print File ARQ ""+[CFOP         ]+"|"
                    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_REC      ]+"|"
                    Print File ARQ ""+[COD_PART     ]+"|"
                    Print File ARQ Valor_Str([VL_PIS       ],2)+"|"
                    Print File ARQ Valor_Str([VL_COFINS    ],2)+"|"
                    Print File ARQ ""+[COD_CTA ]+"|"+"\n"
                    CONTA_REGISTRO("C510","C990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   
          
          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","SPEDD195", "SPEDD197","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      ]+"|"

          If COD_VER="012"
             then
                  Print File ARQ ""+[COD_MUN_ORIG ]+"|"
                  Print File ARQ ""+[COD_MUN_DEST ]+"|"+"\n"
             else
                  Print File ARQ ""+"\n"
          endif
          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 "SPEDD195"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|D195|"
                    Print File ARQ ""+[COD_OBS      ]+"|"
                    Print File ARQ ""+[TXT_COMPL    ]+"|"+"\n"
                    CONTA_REGISTRO("D195","D990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
                  
          EndIf   

          Moveto "SPEDD197"
          Moveto [Lancamento]
          Locate NLANC
          If RetVal
             Then While [Lancamento]=NLANC
                    Print File ARQ "|D197|"
                    Print File ARQ ""+[COD_AJ        ]+"|"
                    Print File ARQ ""+[DESCR_COMPL_AJ]+"|"
                    Print File ARQ ""+[COD_ITEM      ]+"|"
                    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_OUTROS ],2)+"|"+"\n"
                    CONTA_REGISTRO("D197","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("SPEDE100") And
   IsEmpty("SPEDE110") And
   IsEmpty("SPEDE500") And
   IsEmpty("SPEDE510") And
   IsEmpty("SPEDE520") 
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|E001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("E001","E990")

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

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

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

EndIf

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

EndProc

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

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

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

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

EndProc

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

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

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

If Not IsEmpty("SPEDH010")
   Then 
        ;--- Registro H005: Totais do Invent rio -------------------------------
        View "SPEDH020"
        View "SPEDH010"
        View "SPEDH005"
        Scan
          Print File ARQ "|H005"+"|"
          Print File ARQ Data_Str([DT_INV])+"|"
          Print File ARQ Valor_Str([VL_INV],2)+"|"
          Print File ARQ ""+[MOT_INV]+"|"+"\n"
          CONTA_REGISTRO("H005","H990")
          
          ;--- Registro H010: Invent rio -------------------------------
          moveto "SPEDH010"
          moveto [DT_INV]
          locate [SPEDH005->DT_INV]
          if retval
             then while [DT_INV]=[SPEDH005->DT_INV]
             
                    Print File ARQ "|H010"+"|"
                    Print File ARQ ""+[COD_ITEM]+"|"
                    Print File ARQ ""+[UNID    ]+"|"
                    Print File ARQ Valor_Str([QTD],3)+"|"
                    Print File ARQ Valor_Str([VL_UNIT],6)+"|"
                    Print File ARQ Valor_Str([VL_ITEM],2)+"|"
                    Print File ARQ ""+[IND_PROP]+"|"
                    Print File ARQ ""+[COD_PART]+"|"
                    Print File ARQ ""+Tira_Char([TXT_COMPL])+"|"           
                    Print File ARQ ""+[COD_CTA]+"|"
                    If Year(VSDGDTINI)>=2015
                      Then Print File ARQ Valor_Str([VL_ITEM],2)+"|"+"\n"
                      Else Print File ARQ "\n"
                    EndIf
                    CONTA_REGISTRO("H010","H990")

                    if [SPEDH005->MOT_INV]="02"
                       then
                            ;--- Registro H020: Informa‡Æo Complementar do Invent rio -----------
                            moveto "SPEDH020"
                            moveto [DT_INV]
                            locate [SPEDH010->DT_INV],[SPEDH010->COD_ITEM]
                            if retval
                               then while [DT_INV  ]=[SPEDH010->DT_INV  ] and
                                          [COD_ITEM]=[SPEDH010->COD_ITEM]
                               
                                      Print File ARQ "|H020"+"|"
                                      Print File ARQ ""+[CST_ICMS]+"|"
                                      Print File ARQ Valor_Str([BC_ICMS],2)+"|"
                                      Print File ARQ Valor_Str([VL_ICMS],2)+"|"+"\n"
                                      CONTA_REGISTRO("H020","H990")

                                      skip
                                      if eot() then quitloop endif
                                    Endwhile
                            endif   
        
                            moveto "SPEDH010"
                    endif
                    
                    skip
                    if eot() then quitloop endif
                  Endwhile
          endif

          moveto "SPEDH005"
        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()
Private IND_EXP, IND_CCRF, IND_COMB, IND_USINA, IND_VA, IND_EE, IND_CART, IND_FORM, IND_AER
ClearAll
Aguarde(Completa("Aguarde, gerando arquivo SPED bloco 1",45," "))

;==== BLOCO 1: OUTRAS INFORMA€åES ==============================================
IND_EXP   ="N"
IND_CCRF  ="N"
IND_COMB  ="N"
IND_USINA ="N"
IND_VA    ="N"
IND_EE    ="N"
IND_CART  ="N"
IND_FORM  ="N"
IND_AER   ="N"

IND_MOV="0"
If IsEmpty("SPED1600")       
   Then 
      ;;IND_MOV="1"
   Else 
      ;;IND_MOV="0"
        IND_CART  ="S"
EndIf
Print File ARQ "|1001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("1001","1990")

;;If COD_VER>"004"
;;   then
        Print File ARQ "|1010|"     
        Print File ARQ ""+IND_EXP   +"|"
        Print File ARQ ""+IND_CCRF  +"|"
        Print File ARQ ""+IND_COMB  +"|"
        Print File ARQ ""+IND_USINA +"|"
        Print File ARQ ""+IND_VA    +"|"
        Print File ARQ ""+IND_EE    +"|"
        Print File ARQ ""+IND_CART  +"|"
        Print File ARQ ""+IND_FORM  +"|"
        Print File ARQ ""+IND_AER   +"|"
        Print File ARQ "\n"
        CONTA_REGISTRO("1010","1990")
;;EndIf

;If Not IsEmpty("Sped1200")
;   Then View "Sped1200"
;        Scan
;          Print File ARQ "|1200|"
;          Print File ARQ "\n"
;          CONTA_REGISTRO("1200","1990")
;        EndScan
;        ClearImage
;EndIf   
;
;If Not IsEmpty("Sped1210")
;   Then View "Sped1210"
;        Scan
;          Print File ARQ "|1210|"
;          Print File ARQ "\n"
;          CONTA_REGISTRO("1210","1990")
;        EndScan
;        ClearImage
;EndIf   

If Not IsEmpty("Sped1600")
   Then View "Sped1600"
        Scan
          Print File ARQ "|1600|"
          Print File ARQ ""+[COD_PART]+"|"
          Print File ARQ Valor_Str([TOT_CREDITO],2)+"|"
          Print File ARQ Valor_Str([TOT_DEBITO ],2)+"|"
          Print File ARQ "\n"
          CONTA_REGISTRO("1600","1990")
        EndScan
        ClearImage
EndIf   

;--- Registro 1900: Indicador de Sub-Apuracao do ICMS --------------------------
If Not IsEmpty("SPED1920")
   Then View "SPED1921","SPED1920","SPED1910","SPED1900"
        Scan
          
          NLANC=[IND_APUR_ICMS]
          
          Print File ARQ "|1900"+"|"
          Print File ARQ ""+[IND_APUR_ICMS        ]+"|"
          Print File ARQ ""+[DESCR_COMPL_OUT_APUR ]+"|"+"\n"
          CONTA_REGISTRO("1900","1990")

          Moveto "SPED1910"
          Moveto [IND_APUR_ICMS]
          Locate NLANC
          If RetVal
             Then While [IND_APUR_ICMS]=NLANC
                    Print File ARQ "|1910|"
                    Print File ARQ Data_Str([DT_INI])+"|"
                    Print File ARQ Data_Str([DT_FIN])+"|"+"\n"
                    CONTA_REGISTRO("1910","1990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPED1920"
          Moveto [IND_APUR_ICMS]
          Locate NLANC
          If RetVal
             Then While [IND_APUR_ICMS]=NLANC
                    Print File ARQ "|1920|"
                    Print File ARQ Valor_Str([VL_TOT_TRANSF_DEBITOS_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_TOT_AJ_DEBITOS_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_ESTORNOS_CRED_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_TOT_TRANSF_CREDITOS_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_TOT_AJ_CREDITOS_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_ESTORNOS_DEB_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_SLD_CREDOR_ANT_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_SLD_APURADO_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_TOT_DED],2)+"|"
                    Print File ARQ Valor_Str([VL_IMCS_RECOLHER_OA],2)+"|"
                    Print File ARQ Valor_Str([VL_SLD_CREDOR_TRANSP_OA],2)+"|"
                    Print File ARQ Valor_Str([DEB_ESP_OA],2)+"|"+"\n"
                    CONTA_REGISTRO("1920","1990")

                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf   

          Moveto "SPED1900"
        EndScan
        
        if Not IsEmpty("SPED1921")
           then
                Moveto "SPED1921"
                scan
                  Print File ARQ "|1921|"
                  Print File ARQ ""+[COD_AJ_APUR]+"|"
                  Print File ARQ ""+[DESCR_COMPL_AJ]+"|"
                  Print File ARQ Valor_Str([VL_AJ_APUR],2)+"|"+"\n"
                  CONTA_REGISTRO("1921","1990")
                Endscan
        endif
                        
        ClearAll
        
EndIf

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

EndProc

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

;==== BLOCO K:                    ==============================================

Print File ARQ "|K001"+"|"
Print File ARQ "1"+"|"+"\n"
CONTA_REGISTRO("K001","K990")

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

EndProc ;GERA_BLOCOK()

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

;==== BLOCO K: CONTROLE DA PRODU€ÇO E DO ESTOQUE ===============================

;--- Registro K001: Abertura do Bloco K ----------------------------------------
If IsEmpty("SPEDK100") And
   IsEmpty("SPEDK200") And
   IsEmpty("SPEDK230") And
   IsEmpty("SPEDK235") 
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|K001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("K001","K990")

If IND_MOV="0"
  Then  ;--- Registro K100: Per¡odo de Apuracao ICMS/IPI -----------------------
        View "SPEDK100"
        Scan
          Print File ARQ "|K100"+"|"
          Print File ARQ Data_Str([DT_INI ])+"|"
          Print File ARQ Data_Str([DT_FIN ])+"|"+"\n"
          CONTA_REGISTRO("K100","K990")
        EndScan
        ClearAll
  
        ;---- Registro K200: Estoque Escriturado -------------------------------
        View "SPEDK200"
        Scan
          Print File ARQ "|K200"+"|"
          Print File ARQ Data_Str([DT_EST])+"|"
          Print File ARQ ""+[COD_ITEM]+"|"
          Print File ARQ Valor_Str([QTD],3)+"|"
          Print File ARQ ""+[IND_EST]+"|"
          Print File ARQ ""+[COD_PART]+"|"+"\n"
          CONTA_REGISTRO("K200","K990")
        EndScan
        ClearAll

        ;---- Registro K220: Outras Movimenta‡äes Internas Entre Mercadorias ---
        View "SPEDK220"
        Scan
          Print File ARQ "|K220"+"|"
          Print File ARQ Data_Str([DT_MOV])+"|"
          Print File ARQ ""+[COD_ITEM_ORI]+"|"
          Print File ARQ ""+[COD_ITEM_DEST]+"|"
          Print File ARQ Valor_Str([QTD],3)+"|"+"\n"
          CONTA_REGISTRO("K220","K990")
        EndScan
        ClearAll
    
        ;---- Registro K230: Itens Produzidos ----------------------------------
        View "SPEDK235"
        View "SPEDK230"
        Scan
          NLanc = [Lancamento]
          
          Print File ARQ "|K230"+"|"
          Print File ARQ Data_Str([DT_INI_OP])+"|"
          Print File ARQ Data_Str([DT_FIN_OP])+"|"
          Print File ARQ ""+[COD_DOC_OP]+"|"
          Print File ARQ ""+[COD_ITEM]+"|"
          Print File ARQ Valor_Str([QTD_ENC],3)+"|"+"\n"
          CONTA_REGISTRO("K230","K990")       
          
          ;---- Registro K235: Insumos Consumidos ------------------------------
          Moveto "SPEDK235"
          Moveto [Lancamento]
          Locate NLanc
          If RetVal
             Then While [Lancamento]=NLanc 
                    Print File ARQ "|K235"+"|"
                    Print File ARQ Data_Str([DT_SAIDA])+"|"
                    Print File ARQ ""+[COD_ITEM]+"|"
                    Print File ARQ Valor_Str([QTD],3)+"|"
                    Print File ARQ ""+[COD_INS_SUBST]+"|"+"\n"
                    CONTA_REGISTRO("K235","K990")
                    Skip
                    If Eot() Then QuitLoop EndIf
                  EndWhile
          EndIf
          Moveto "SPEDK230"    
        EndScan
        ClearAll
        
        ;---- SPEDK250: Industrializa‡Æo Efetuada por Terceiros - Itens Produzidos 
        View "SPEDK255"
        View "SPEDK250"
        Scan
          Print File ARQ "|K250"+"|"
          Print File ARQ Data_Str([DT_PROD])+"|"
          Print File ARQ ""+[COD_ITEM]+"|"
          Print File ARQ Valor_Str([QTD],3)+"|"+"\n"
          CONTA_REGISTRO("K250","K990")       
          
          ;---- SPEDK255: Industrializa‡Æo Em Terceiros - Insumos Consumidos ---
          Moveto "SPEDK255"
          Moveto [DT_PROD]
          Locate [SPEDK250->DT_PROD],[SPEDK250->COD_ITEM]
          If RetVal
             Then While [SPEDK250->DT_PROD ] = [DT_PROD] And
                        [SPEDK250->COD_ITEM] = [COD_ITEM_PROD]
                    Print File ARQ "|K255"+"|"
                    Print File ARQ Data_Str([DT_CONS])+"|"
                    Print File ARQ ""+[COD_ITEM]+"|"
                    Print File ARQ Valor_Str([QTD],3)+"|"
                    Print File ARQ ""+[COD_INS_SUBST]+"|"+"\n"
                    CONTA_REGISTRO("K255","K990")
                    Skip
                    If Eot() Then QuitLoop EndIf
                  EndWhile
          EndIf
          Moveto "SPEDK250"    
        EndScan
        ClearAll
EndIf

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

EndProc ;GERA_BLOCOK_2018()

;*******************************************************************************
;* 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 gera TXT Bloco 9                                
;*******************************************************************************
Proc Tira_Caractere(TEMP_PARAM)
Private TEMP_PARAM,TEMP_OBS,TEMP_CONT

TEMP_PARAM = SubStr(TEMP_PARAM,1,250)
TEMP_OBS   = ""
TEMP_CONT  = Len(TEMP_PARAM)
For i From 1 To TEMP_CONT
  If SubStr(TEMP_PARAM,i,1)<>"|" And SubStr(TEMP_PARAM,i,1)<>"/" And SubStr(TEMP_PARAM,i,1)<>";"  
     Then TEMP_OBS = TEMP_OBS+SubStr(TEMP_PARAM,i,1)   
     Else TEMP_OBS = TEMP_OBS+" "  
  EndIf   
EndFor 
TEMP_PARAM=TEMP_OBS
TEMP_OBS=""
TEMP_CONT = Len(TEMP_PARAM)
For i From 1 To TEMP_CONT
  If SubStr(TEMP_PARAM,i-1,1)<>" " Or SubStr(TEMP_PARAM,i,1)<>" "
     Then TEMP_OBS = TEMP_OBS+SubStr(TEMP_PARAM,i,1)   
  EndIf   
EndFor
TEMP_PARAM=RTrim(LTrim(TEMP_OBS))

Return TEMP_PARAM

EndProc  ; (Tira_Caractere)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: 
       Switch
         Case Campo="TG_MOTINV" :
            ShowPopup " Motivos do invent rio " CENTERED
            "~1~=No final do per¡odo                                                      " : "" : "01",
            "~2~=Na mundan‡a de forma de tributa‡Æo da mercadoria (ICMS)                  " : "" : "02",
            "~3~=Solicita‡Æo da baixa cadastral, paralisa‡Æo tempor ria e outras situa‡äes" : "" : "03",
            "~4~=Na altera‡Æo de regime de pagamento- condi‡Æo do contribuinte            " : "" : "04",
            "~5~=Por determina‡Æo do fisco                                                " : "" : "05",
            "~C~ancelar          " : " Cancelar a Opera‡„o"             : "CANCELAR"
            EndMenu
             To MenuVar
             VSDGMOTINV=MenuVar 
            Switch
             Case MenuVar="01" : VSDGNOMMOTINV="FINAL DO PERIODO" 
             Case MenuVar="02" : VSDGNOMMOTINV="MUDAN€A ICMS"
             Case MenuVar="03" : VSDGNOMMOTINV="BAIXA CADASTRAL"
             Case MenuVar="04" : VSDGNOMMOTINV="ALTERA€ÇO REGIME PAGTO"
             Case MenuVar="05" : VSDGNOMMOTINV="ORDEM FISCO"
             OtherWise         : VSDGMOTINV="" VSDGNOMMOTINV=""
            EndSwitch            
         OtherWise              : Dialog_F1()
       EndSwitch
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_INVENT"        : Campo="TG_DTFIM"
            Case Campo="TG_MESANO"        : Campo="TG_INVENT"
            Case Campo="TG_MOTINV"        : Campo="TG_INVENT"
            Case Campo="TG_FINALIDADE"    : Campo="TG_INVENT"
            Case Campo="TG_OPCOES"        : Campo="TG_FINALIDADE"
            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_INVENT"
                    Case Campo="TG_INVENT"     : 
                         If VSDGINVENT[1]
                            Then
                                 Campo="TG_MESANO"
                            Else 
                                 Campo="TG_FINALIDADE"
                                 VSDGMESANO   =""
                                 VSDGNOMMOTINV="" 
                                 VSDGMOTINV   ="" 
                         EndIf

                    Case Campo="TG_MESANO"     : 
                         if Month(VSDGDTFIM)=2 and ( NumVal(Substr(VSDGMESANO,1,2))=12 and NumVal(Substr(VSDGMESANO,4,4))=(Year(VSDGDTFIM)-1))
                            then
                                 Mensagem("SPED DE FEVEREIRO, GERA AUTOMATICAMENTE INVENTARIO DE// DEZEMBRO DO ANO ANTERIOR !")
                                 VSDGINVENT[1]=False
                                 VSDGMESANO   = ""
                                 Campo="TG_INVENT"
                            else 
                                 Campo="TG_MOTINV"
                         endif   
                         
                    Case Campo="TG_MOTINV"     : 
                         VSDGMOTINV=ControlValue("TG_MOTINV")
                         If Not ISBlank(VSDGMOTINV)
                            Then VSDGMOTINV=AlinhM(VSDGMOTINV,2) 
                                 Campo="TG_FINALIDADE"
                                 Switch
                                  Case VSDGMOTINV="01" : VSDGNOMMOTINV="FINAL DO PERIODO" 
                                  Case VSDGMOTINV="02" : VSDGNOMMOTINV="MUDAN€A ICMS"
                                  Case VSDGMOTINV="03" : VSDGNOMMOTINV="BAIXA CADASTRAL"
                                  Case VSDGMOTINV="04" : VSDGNOMMOTINV="ALTERA€ÇO REGIME PAGTO"
                                  Case VSDGMOTINV="05" : VSDGNOMMOTINV="ORDEM FISCO"
                                  OtherWise            : VSDGNOMMOTINV="" 
                                                         VSDGMOTINV   ="" 
                                                         Campo="TG_MOTINV"
                                                         FastMSg("C¢digo inv lido !")  
                                 EndSwitch            
                            Else FastMSg("C¢digo invalido !") 
                         EndIf
                    Case Campo="TG_FINALIDADE" : Campo="TG_OPCOES"

                    Case Campo="TG_OPCOES"     : 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":
       MensagemRadioButtons()
  Case Campo="TG_OPCOES" Or
       Campo="TG_INVENT":
       MensagemCheckBoxes()
  Case Campo="TG_MOTINV":
       MSG_CAMPO="Informe o motivo do invent rio"
       TECLA    ="F1=Consultar"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Bloq"

sys_valor()

If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
LimpAguarde()

;***** Verificar se o Cliente tem acesso a esta rotina *****
If Bloqueia_Rotina("SPED")
   Then Return
EndIf   
;***********************************************************

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

Array VSDGOPCAO[9]
Array VSDGINVENT[1]

VSDGOPCAO[9] =True

VSDGMESANO   = ""
VSDGMOTINV   =""
VSDGNOMMOTINV=""

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

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

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

    Label  @ 05,00 "Op‡Æo Invent rio " For "TG_INVENT"
    CheckBoxes @06,00 Height 1 Width 26 Tag "TG_INVENT"
    "Gerar Referente a" to VSDGINVENT[1]
    
    Label  @ 05,23 "Mˆs/Ano"  For "TG_MESANO"
    Accept @ 06,24  Width 10 "A07"  Picture "##.####" Tag "TG_MESANO" To VSDGMESANO

    Label  @ 07,00 "Motivo"  For "TG_MOTINV"
    Accept @ 08,03 Width 05 "A2"  Picture "[&,#][#*#]" Tag "TG_MOTINV" To VSDGMOTINV
    Accept @ 08,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMMOTINV" To VSDGNOMMOTINV

    Label @ 10,00 "Finalidade do arquivo" For "TG_FINALIDADE"
    RadioButtons @ 11,00 Height 2 Width 30
      "~0~ Original/Normal",
      "~1~ Retificadora"
        Tag "TG_FINALIDADE"
        To VSDGFINAL

    Label  @ 00,35 "Op‡”es de Blocos " For "TG_OPCOES"
    CheckBoxes @01,35 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]

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

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

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

  If AlinhM(StrVal(Month(VSDGDTFIM)),2)="02" or VSDGINVENT[1]
     then MSG=    "// ** Neste SPED ser  gerado um invent rio ! **// //" 
          MSG=MSG+"**  Se tem certeza que o invent rio esta ok//" 
          MSG=MSG+"  prossiga com a gera‡Æo do arquivo.       // //" 
          MSG=MSG+"**  Caso contrario emita um invent rio  com//" 
          MSG=MSG+"  checagem de consistencias para verificar.//" 
          MSG=MSG+"Continuar com gera‡Æo ?"
          if not confgeral(MSG) 
             then loop
          endif   
  endif   

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

  ;---- Gera Bloco K -----------------------------------------------------------
  ;If IsAssigned(TabelaI)  And IsTable(TabelaI)  Then Delete(TabelaI)  EndIf
  ;If IsAssigned(TabelaIH) And IsTable(TabelaIH) Then Delete(TabelaIH) EndIf
  ;BLOCOK=False
  ;If VSDGOPCAO[10] Or VSDGOPCAO[7]
  ;   Then GetRecord "\\Sistemas\\Cadastro\\Empresas" VSDGEMPRESA To REG_EMP
  ;        If RetVal
  ;           Then ;Apenas INDUSTRIA e DEBITO/CREDITO
  ;                If Upper(SubStr(REG_EMP["Atividade"],1,3))="IND" And Upper(SubStr(REG_EMP["Tipo da Empresa"],1,6))="DEBITO"
  ;                   Then BLOCOK=True
  ;                EndIf
  ;        EndIf
  ;        Release Vars REG_EMP
  ;EndIf
  ;-----------------------------------------------------------------------------

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

  Monta_Estoque()
  LimpaRodape(0)
  
  ;If BLOCOK
  ;   Then MES_ESTQ=AlinhM(StrVal(Month(VSDGDTFIM)),2)
  ;        ANO_ESTQ=AlinhM(StrVal(Year(VSDGDTFIM)),4)
  ;        If Not Monta_Estoque()
  ;           Then ;Loop
  ;        EndIf
  ;        TabelaIK=Cria_Temp(PrivDir())
  ;        Copy TabelaI TabelaIK
  ;        Delete(TabelaI)
  ;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[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 StrVal(Year(VSDGDTFIM))>="2016" Then GERA_BLOCOK() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[7] Then GERA_BLOCO1() EndIf
  If VSDGOPCAO[9] Or VSDGOPCAO[8] Then GERA_BLOCO9() EndIf

;--- Libera TXT e exibe MSG ----------------------------------------------------
  Close Printer
  
  LimpaRodape(0)

  ARQ_TEMP="\\Sistemas\\Exporta\\Dados\\SPED_FISCAL_"+VSDGEMPRESA+"_"+
          AlinhM(StrVal(Month(VSDGDTINI)),2)+StrVal(Year(VSDGDTINI))+".TXT"

  Deleta_Arquivo(ARQ_TEMP)

  cmd="REN "+ARQ+" "+ARQ_TEMP
  ExecVise(cmd)

  COR_MENSAGEM="1"
  MSG=    "// Gerado o arquivo: // //["+SubStr(Directory(),1,2)+ARQ_TEMP+"] // //"
  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+"* SPED_EMPRESA_MMAA => SPED=SPED ICMS/IPI  MM=Mˆs  AA=Ano              //"
  MSG=MSG+"* Envie este arquivo para seu contador prosseguir com a escritura‡Æo ! //"
  Mensagem(MSG)
  Release Vars COR_MENSAGEM

  If IsTable("Answer")                                          Then Delete("Answer")         EndIf
  If IsAssigned(Tabela_ERRO_ITEM) And IsTable(Tabela_ERRO_ITEM) Then Delete(Tabela_ERRO_ITEM) EndIf
  If IsAssigned(TabelaIK)         And IsTable(TabelaIK)         Then Delete(TabelaIK)         EndIf      
  LimpaRodape(0)

EndWhile
ClearAll
Release Vars All
Release Procs All
