;* Discorec *******************************************************************
;* Geracao do Disco p/ Receita                                                *
;******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 21/09/1998 por Anivel Augusto Rodrigues
;Ultima Alteracao: 18/07/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes REg_74 Inventario c/ saldo positivo
;Ultima Alteracao: 21/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MODAMIL
;Ultima Alteracao: 05/04/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MinasLack NFS2
;Ultima Alteracao: 07/05/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS Outras Karol Cosmeticos
;Ultima Alteracao: 08/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO Nota de Entrada Cancelada
;Ultima Alteracao: 07/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFO saida Itens = Regsaida
;Ultima Alteracao: 14/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 17/09/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Comercial Azevedo
;Ultima Alteracao: 19/10/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cupom Laudo
;Ultima Alteracao: 19/11/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Locate ECF_C X..
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 20/02/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes reg50 sAIDA vALOR contabil       
;Ultima Alteracao: 28/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Emitente da Nota Fiscal
;Ultima Alteracao: 22/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Serie Docto Vico
;Ultima Alteracao: 01/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Reg_53
;Ultima Alteracao: 25/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Monta_Estoque()
;Ultima Alteracao: 21/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Reg_70/Reg_71 Saida
;Ultima Alteracao: 12/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_53 Substituicao/Destinatario
;Ultima Alteracao: 16/02/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_53 Substituicao/Destinatario
;Ultima Alteracao: 25/08/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_54 Codigo do Documento NF3
;Ultima Alteracao: 17/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Gerar Inventario qualquer mes
;Ultima Alteracao: 22/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conhecimentos CA/CTAC/CTR?
;Ultima Alteracao: 24/09/2009 por Nikolas
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 25/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conhecimentos CA/CTAC/CTR?
;Ultima Alteracao: 29/09/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_54 999/991/992 %/BC ICMS
;Ultima Alteracao: 01/10/2009 por Nikolas
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 06/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo/Serie nos registros   
;Ultima Alteracao: 03/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_60 ordem Sintegra 2009   
;Ultima Alteracao: 27/11/2009 por Bruno Carvalho
;Motivo Alteracao: Desabilitado a Op‡Æo SAPI
;Ultima Alteracao: 08/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Entrada Codigo Modelo TEL/CEM - NF-e           
;Ultima Alteracao: 22/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nao gerar itens Modelo TEL/CEM           
;Ultima Alteracao: 28/04/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Campos ECF COO Reducao e Contador Reducao   
;Ultima Alteracao: 18/07/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Serie D1 Liderfer                           
;Ultima Alteracao: 02/08/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Serie D se Subserie 1 Rolamentos           
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes NFE1 Modelo 55 e Ajuste CFOP 5929/6929 "Fatura Cupom"
;Ultima Alteracao: 25/08/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS Outros que stava somando IPI outros              
;Ultima Alteracao: 30/08/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes BCST Item Reg54                                       
;Ultima Alteracao: 03/09/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CGC=0 quando UF=EX Auditoria                                       
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SIMPLES NAC. ESRB                          
;Ultima Alteracao: 15/09/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: NF-e Inutilizada                                  
;Ultima Alteracao: 11/11/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes serie localizar ECF_C                     
;Ultima Alteracao: 19/11/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes nome arquivo/mensagem + Reg 88EAN                     
;Ultima Alteracao: 22/11/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Despesas %/BC de ICMS Item >900                     
;Ultima Alteracao: 07/12/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CT-E = 57 Conhecimenteo de Transporte Eletronico   
;Ultima Alteracao: 15/12/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CT-E = 57 Conhecimenteo de Transporte Eletronico   
;Ultima Alteracao: 17/12/2010 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes rateio substituicao reg_54                         
;Ultima Alteracao: 21/12/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BCST=0 e VrST>0                         
;Ultima Alteracao: 05/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_51 apenas contribuinte IPI
;Ultima Alteracao: 05/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes na Vari vel VSDGINVENT       
;Ultima Alteracao: 11/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Sort ENTRADAS                  
;Ultima Alteracao: 14/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_51 apenas contribuinte IPI saida
;Ultima Alteracao: 14/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Vrcontabil IPI saida
;Ultima Alteracao: 20/01/2011 por Anivel Augusto Rodrigues      
;Motivo Alteracao: Ajustes Round ICMS Item Reg_60?
;Ultima Alteracao: 14/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_75  e Reg_54        
;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: 22/02/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Variavel TXACRESC_TOTAL_ST
;Ultima Alteracao: 22/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Contador Reinicio Operacao
;Ultima Alteracao: 24/02/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Novo Layout NotaEC/NotaEI  
;Ultima Alteracao: 30/03/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado Reg_55 
;Ultima Alteracao: 20/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Item Aplicacao Direta
;Ultima Alteracao: 29/04/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes ReG_55
;Ultima Alteracao: 09/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes REG_60I Itens cancelados do cupom fiscal
;Ultima Alteracao: 16/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Numero da nota apenas 6 digitos
;Ultima Alteracao: 13/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_55
;Ultima Alteracao: 04/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tributos ECF zerados nÆo gerar 
;Ultima Alteracao: 15/07/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CTRC de Saida HERTRAN
;Ultima Alteracao: 03/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes CTRC de Saida
;Ultima Alteracao: 09/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NFE pra todas as series
;Ultima Alteracao: 15/08/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Registro 90
;Ultima Alteracao: 25/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes serie M1A = ""  Traira
;Ultima Alteracao: 19/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes despesas do item no proprio NOTAI sem recalculo
;Ultima Alteracao: 23/09/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_70 - Inclusao NF Servico de Transporte
;Ultima Alteracao: 28/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes INDUSTRIA+SIMPLES NACIONAL REG_51                         
;Ultima Alteracao: 04/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete Destacado
;Ultima Alteracao: 21/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modelo de documento                    
;Ultima Alteracao: 25/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo de Documentos 
;Ultima Alteracao: 26/10/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Modelo de Documentos par REG_54
;Ultima Alteracao: 08/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_75 NCM, Reg_54 CSOSN - Tipo 998=servi‡o,997= NF. Complementar
;Ultima Alteracao: 17/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_51 ATIVIDADE como "IND" na saida 
;Ultima Alteracao: 05/12/2011 por Karina Andrade
;Motivo Alteracao: Add Registro 88STES e 88STITNF
;Ultima Alteracao: 29/12/2011 por Karina Andrade
;Motivo Alteracao: Reabilitado GERA_SAIDA61R()
;Ultima Alteracao: 16/01/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registro 61R                     
;Ultima Alteracao: 28/02/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Rateio desconto nos itens notas de entrada
;Ultima Alteracao: 02/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 60D,60I,60R agrupar por aliquota e cancelados
;Ultima Alteracao: 08/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Docto Cancelado/Inutilizado
;Ultima Alteracao: 09/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BCICMS registro 60          
;Ultima Alteracao: 15/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CGC 50,51,53,54, CFOP docto cancelado/inutilizado
;Ultima Alteracao: 19/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes GERA_SAIDA61R()
;Ultima Alteracao: 20/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes totalizadores de registros quebra de nova linha 90
;Ultima Alteracao: 21/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes checagem de periodo de data informado               
;Ultima Alteracao: 27/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes GERA_SAIDA61R() O,N,I,S = 0000 na aliquota
;Ultima Alteracao: 02/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Numero Nota na Entrada                      
;Ultima Alteracao: 03/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes REG_60? vrbcicms =0 or blank                
;Ultima Alteracao: 05/04/2012 por Bruno Carvalho
;Motivo Alteracao: Inclusao Arquivo de Texto REG_88 "88STES" e ""88STITNF
;Ultima Alteracao: 09/04/2012 por Bruno Carvalho
;Motivo Alteracao: NÆo pegar tipo de itens "Outros"
;Ultima Alteracao: 17/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ENTRADA Complemento ICMS REG_54=997      
;Ultima Alteracao: 18/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FRETE DESTACADO no Reg_51                
;Ultima Alteracao: 18/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DIFERENCA RATEIO DESCONTO REG_54         
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes REG_54 NF avulsa nÆo estava gerando
;Ultima Alteracao: 24/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NF de entrada de complemento ICSM, Simples =0
;Ultima Alteracao: 30/05/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DIFERENCA RATEIO DESCONTO REG_54         
;Ultima Alteracao: 05/06/2012 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo no nome gerado para o sintegra (Ex: SINTEGRA_0001_012000)  
;Ultima Alteracao: 08/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TPEMPR="DEBITO/CREDITO" para SYS_CODIGO_CLIENTE="0300" or "0215"
;Ultima Alteracao: 19/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Ask REG_88SE/REG_88SI
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Removido CALCULA_ST 
;Ultima Alteracao: 25/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VEGO - SIMPLES NACIONAL c/ registro DEBITO/CREDITO - ICMS item com ST
;Ultima Alteracao: 09/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes situacao/aliquota icms registro 61r
;Ultima Alteracao: 14/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes remocao calculo reducao icms           
;Ultima Alteracao: 22/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes tratamento item de cupom cancelado      
;Ultima Alteracao: 24/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes situacao/aliquota icms registro 61r
;Ultima Alteracao: 19/10/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_55 UF=EX => UF favorecido          
;Ultima Alteracao: 14/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_50 dados zerados par nota inutilizada "4"
;Ultima Alteracao: 30/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_53
;Ultima Alteracao: 17/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_53/Reg_54 ST via DAE
;Ultima Alteracao: 18/12/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Reg54 via Dae
;Ultima Alteracao: 20/12/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_53 via DAE
;Ultima Alteracao: 04/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_54 CST=CSOSN para Simples Nacional na entrada
;Ultima Alteracao: 18/01/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_51 para todas Industrias SAIDAS
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_51 para todas Industrias ENTRADAS
;Ultima Alteracao: 04/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes LimpaRodape()                  
;Ultima Alteracao: 11/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Itens propriedade de terceiros                 
;Ultima Alteracao: 19/02/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes para cliente #0278# Reg_53
;Ultima Alteracao: 19/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_53 geral nas entradas                      
;Ultima Alteracao: 20/02/2013 por Bruno Carvalho
;Motivo Alteracao: Erro de sintaxe ajustado Reg_53 
;Ultima Alteracao: 23/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usa CSOSN nas entradas so CST e Reg_60?    
;Ultima Alteracao: 02/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_51 para todas Industrias ENTRADAS
;Ultima Alteracao: 06/03/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Reg_50/51/54 duplicidade de notas entrada/saida
;Ultima Alteracao: 06/03/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_61 
;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, 
;                  verificar quais clientes que nÆo querem gerar este tipo de item                
;Ultima Alteracao: 08/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_60D = "DESC"
;Ultima Alteracao: 09/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_60D = "DESC, desconto > 0.01
;Ultima Alteracao: 09/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tributa‡Æo de IPI=Outros sem credito do ipi/Modamil   
;Ultima Alteracao: 10/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_74
;Ultima Alteracao: 15/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_51 para todas Industrias ENTRADAS <> "0167"
;Ultima Alteracao: 18/04/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_51 para INDUSTRIAS ou SIMPLES NACIONAL+CONFECCAO
;Ultima Alteracao: 24/04/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateios descontos/despesas ja vem pronto nos itens    
;Ultima Alteracao: 02/05/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 17/05/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Reg_51 para ENTRADAS = "0217"
;Ultima Alteracao: 21/05/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes EAN13 somente itens tipo A-EAN13
;Ultima Alteracao: 04/06/2013 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes quando ocorrer inconsistˆncia e for mˆs 02
;Ultima Alteracao: 14/06/2013 por Karina Andrade/Anivel
;Motivo Alteracao: Ajustes Reg_51 ENTRADAS para todas as empresas que sÆo INDUSTRIA
;                  Ajustes Reg_60D para cupons c/ desconto no item e total
;Ultima Alteracao: 10/07/2013 por Karina Andrade
;Motivo Alteracao: InclusÆo op‡Æo de gerar REG_60I somente quando marcado e Reg_51
;Ultima Alteracao: 12/07/2013 por Karina Andrade
;Motivo Alteracao: Adicionado SYS_CODIGO_CLIENTE="0240" - EBF para nÆo gerar Reg_51
;Ultima Alteracao: 07/08/2013 por Karina Andrade
;Motivo Alteracao: Ajustes TPEMPR="DEBITO/CREDITO" para SYS_CODIGO_CLIENTE="0199"
;Ultima Alteracao: 15/10/2013 por Karina Andrade
;Motivo Alteracao: Ajustes GERA_SAIDA60DIR() para cupom cancelado sem item
;Ultima Alteracao: 01/11/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Extemporanea (entrada)
;Ultima Alteracao: 12/11/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Nota Extemporanea (entrada)
;Ultima Alteracao: 18/11/2013 por Andrey Fillipe
;Motivo Alteracao: Ajustes Nota Extemporanea (entrada)
;Ultima Alteracao: 29/11/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Notas Denegadas e Cancelamento Extemporaneo
;Ultima Alteracao: 03/12/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes entradas reg 54 itens de consumo sem bc/% icms
;Ultima Alteracao: 09/12/2013 por Karina Andrade
;Motivo Alteracao: Ajustes Situacao Nota Denegada e Cancelamento Extemporaneo
;Ultima Alteracao: 11/12/2013 por Karina Andrade
;Motivo Alteracao: Ajustes "Tipo Codigo de Barras" EAN14 
;Ultima Alteracao: 18/12/2013 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes registro 53 gera‡Æo layout txt    
;Ultima Alteracao: 10/01/2014 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes registro 54 incluir servico  
;Ultima Alteracao: 20/01/2014 por Kamila                           
;Motivo Alteracao: Ajustes registro 50 Nota de devolu‡Æo cancelada   
;Ultima Alteracao: 29/01/2014 por Kamila                           
;Motivo Alteracao: Ajustes registro 50 CT-e e CTRC      
;Ultima Alteracao: 18/03/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SubSerie                               
;Ultima Alteracao: 26/03/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor ipi reg_54 nas entradas          
;Ultima Alteracao: 13/05/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gerar REG_51 e REG_54 apenas documento MODELO="01" Or MODELO="55"
;Ultima Alteracao: 14/05/2014 por Andrey Fillipe          
;Motivo Alteracao: Ajustes para nÆo Gerar REG_51 para SYS_CODIGO_CLIENTE<>"0288"
;Ultima Alteracao: 17/06/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NÆo Gerar REG_50 e REG_54 MODELO="27" Or MODELO="07"
;Ultima Alteracao: 07/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao buscar o custo na Ficha de Estoque
;Ultima Alteracao: 15/09/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nao gerar REG_54 com item tipo Frete na saida 
;Ultima Alteracao: 15/09/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes REG_50 com Frete na saida 
;Ultima Alteracao: 15/10/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes quando NF ‚ DENEGADA, comportamento igual CANCELADA
;Ultima Alteracao: 15/10/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes campo RegSaida->frete destacado na nota
;Ultima Alteracao: 06/11/2014 por Andrey Fillipe
;Motivo Alteracao: Alterado campo [Numero Cupom Inicial] e [Numero Cupom Final] para [COO_Inicial] e [COO_Final]
;Ultima Alteracao: 03/12/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes REG_88 STES, STITNF novo layout    
;Ultima Alteracao: 04/12/2014 por Luis Gustavo
;Motivo Alteracao: Ajuste no Atualiza dados do tipo de registro 50, CFOP 5929 vai pegar o valor Total. Antes saia zerado  
;Ultima Alteracao: 13/04/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes Reg_51 na entrada, nÆo soma cfop de compra para industrializa‡Æo  
;Ultima Alteracao: 18/04/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes pega Aliquota do Estado para item quando for Sys_Codigo 0217 e 
;                  Estado da Empresa ‚ <> de MG 
;Ultima Alteracao: 16/04/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes para nÆo gerar registros 88 para estado <> MG
;Ultima Alteracao: 14/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 60R, 60D, 60I CANC e DESC           
;Ultima Alteracao: 15/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ter credito icms uso/consumo Agro Op‡Æo                     
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.     
;Ultima Alteracao: 28/11/2016 por Heverton Amaral
;Motivo Alteracao: Corre‡Æo MSG Inconsistencia estoque    
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()          
;Ultima Alteracao: 02/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes zerar valor total CFOP 5929/6929 
;Ultima Alteracao: 03/01/2017 por Rafael Matos
;Motivo Alteracao: Ajustes showdialog MensagemRadioButtons()
;Ultima Alteracao: 13/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 60I valor do produto
;Ultima Alteracao: 02/02/2017 por Nikolas
;Motivo Alteracao: Nao gerar Reg_51 para Sacaria cod 0389
;Ultima Alteracao: 16/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes escolher mes/ano para inventario
;Ultima Alteracao: 20/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo gerar reg_54 cfop de anula‡Æo servi‡o de transporte
;Ultima Alteracao: 06/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes escolher mes/ano para inventario, maximo 2 inventarios
;Ultima Alteracao: 07/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo de rotinas nÆo utilizdas mais ref. reg_88                 
;Ultima Alteracao: 17/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes zerar valor total CFOP 5929/6929 conforme manual
;Ultima Alteracao: 23/03/2017 por Anivel Augusto Rodrigues   
;Motivo Alteracao: Ajustes pesquia se item st=60
;Ultima Alteracao: 07/07/2017 por Anivel Augusto Rodrigues   
;Motivo Alteracao: Ajustes siri laudo
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes "NotaCTR" -> "NotaCC"
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 13/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes modalidade de frete
;Ultima Alteracao: 10/10/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes reg_54 sem debito icms/ st anterior
;Ultima Alteracao: 23/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes reg_74 s¢ item de terceiro 0294     
;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 reg_74 saldo zerado, ignorar itens inativos

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros de Saida                           *
;*******************************************************************************
Proc MONTA_SAIDA()
Aguarde("Aguarde, processando")

Play "\\Sistemas\\Exporta\\RegSaida"

SetDir"\\Sistemas\\Icms_Ipi"

{Ask} {\\Sistemas\\Vendas\\RegSaida}
Moveto [Estado Cliente] TypeIn "Blank , Changeto MG"
Do_It!
ClearAll

Sort "\\Sistemas\\Vendas\\RegSaida"  On "Estado Cliente","Codigo da Empresa","Numero da Nota Fiscal","Serie da Nota Fiscal","Sequencia da Nota Fiscal" To "RegSTemp"

ClearAll
EndProc  ; (Gera_Saida)

;*******************************************************************************
;* Rotina p/ Selecionar e Ordenar Registros de Entrada                         *
;*******************************************************************************
Proc MONTA_ENTRADA()
Aguarde("Aguarde, processando")

Play "\\Sistemas\\Exporta\\RegEntra"

SetDir"\\Sistemas\\Icms_Ipi"

{Ask} {\\Sistemas\\Estoque\\RegEntra}
Moveto [Estado Fornecedor] TypeIn "Blank , Changeto MG"
Do_It!
ClearAll

Sort "\\Sistemas\\Estoque\\RegEntra" On "Estado Fornecedor","Codigo da Empresa",
                                        "Tipo","Codigo","Numero do Lancamento",
                                        "Numero da Nota Fiscal","Sequencia da Nota Fiscal" To "RegETemp"

ClearAll
EndProc  ; (Gera_Entrada)

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc GERA_REG()
Aguarde("Aguarde, processando")

Empty("Reg_50")
Empty("Reg_51")
Empty("Reg_53")
Empty("Reg_54")
Empty("Reg_55")
Empty("Reg_60")
Empty("Reg_60D")
Empty("Reg_60I")
Empty("Reg_60R")
Empty("Reg_61")
Empty("Reg_61R")
Empty("Reg_70")
Empty("Reg_71")
Empty("Reg_74")
Empty("Reg_75")
Empty("Reg_88cb")
View "\\Sistemas\\Cadastro\\Empresas"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA
If RetVal
   Then ATIVIDADE  =[\Sistemas\Cadastro\Empresas->Atividade ]
        ESTEMPRESA =[\Sistemas\Cadastro\Empresas->Uf Empresa]
          TPEMPR   =[Tipo da Empresa]
EndIf
ClearAll

View "ReceitaE"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA
WEMITE_NF =[Emite NF pelo Sistema ]
WEMITE_ECF=[Emite ECF pelo Sistema]
WSERIE_ECF=[Numero Serie Fabricacao]

Cont_10 = 0   Cont_11 = 0
Cont_50 = 0   Cont_51 = 0   Cont_53 = 0   Cont_54 = 0   Cont_55 = 0
Cont_60 = 0   Cont_61 = 0
Cont_70 = 0   Cont_71 = 0   Cont_74 = 0   Cont_75 = 0
Cont_88 = 0   Cont_90 = 0

ARQ = "\\Sistemas\\Exporta\\Dados\\"+"STGR"+
      AlinhM(StrVal(Month(VSDGDTINI)),2)+
      SubStr(StrVal(Year(VSDGDTINI)),3,2)+".TXT"

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

ARQ2 = "\\Sistemas\\Exporta\\Dados\\DadosC.TXT"

Deleta_Arquivo(ARQ)
Deleta_Arquivo(ARQ2)
Deleta_Arquivo(ARQ_TEMP)

Gerou_Entradas=True;
Gerou_Saidas  =True;

TPEMPR_ANT=TPEMPR
If SYS_CODIGO_CLIENTE="0300" Or
   SYS_CODIGO_CLIENTE="0215" Or
   SYS_CODIGO_CLIENTE="0199"
  Then TPEMPR="DEBITO/CREDITO"
EndIf  

If VSDGOPCAO[1]=True or VSDGOPCAO[3]=True
   Then GERA_ENTRADA()
        GERA_ENTRADA54()
        GERA_ENTRADA55()
        GERA_ENTRADA70()
EndIf

TPEMPR=TPEMPR_ANT
If VSDGOPCAO[2]=True or VSDGOPCAO[3]=True
   Then GERA_SAIDA()
        GERA_SAIDA54()
        GERA_SAIDA60()
        GERA_SAIDA60DIR()
        GERA_SAIDA61()
        GERA_SAIDA61R()
        GERA_SAIDA70()
EndIf

Gera_88EAN()
Gera_Reg88()

Monta_Estoque()

GERA_ARQUIVO_TEXTO()

EndProc   ; (Gera_Reg)

;*******************************************************************************
;* Rotina para gravar itens Reg_75                          
;*******************************************************************************
Proc Grava_Itens(Codigo,Docto)
Private Codigo, TabAtual, Docto  

TabAtual=Table()

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

Moveto "Reg_75"
Moveto [Codigo do Produto_Servico]
Locate Codigo
If Not RetVal
   Then End
        Down
        [Tipo                     ] = "75"
        [Data Inicial             ] = StrVal(Year(VSDGDTINI))+AlinhM(StrVal(Month(VSDGDTINI)),2)+AlinhM(StrVal(Day(VSDGDTINI)),2)
        [Data Final               ] = StrVal(Year(VSDGDTFIM))+AlinhM(StrVal(Month(VSDGDTFIM)),2)+AlinhM(StrVal(Day(VSDGDTFIM)),2)
        [Codigo do Produto_Servico] = Codigo
        [Codigo NCM               ] = [\Sistemas\Estoque\Itens->NCM                     ]
        [Descricao                ] = ltrim(rtrim([\Sistemas\Estoque\Itens->Descricao do Item       ]))
        [Unidade                  ] = [\Sistemas\Estoque\Itens->Unidade Fiscal          ]
        [Situacao Tributaria      ] = [\Sistemas\Estoque\Itens->Tipo Tributacao         ]
        [Aliquota do IPI          ] = [\Sistemas\Estoque\Itens->Aliquota de IPI         ]
        If (SP02_UF <> "MG")            And 
           (SYS_CODIGO_CLIENTE = "0217") And 
           ([\Sistemas\Estoque\Itens->Tributacao de ICMS]="D")
           Then [Aliquota do ICMS] = ALQ_EST
           Else [Aliquota do ICMS] = [\Sistemas\Estoque\Itens->Aliquota de ICMS]
        EndIf
        [Reducao BCICMS           ] = [\Sistemas\Estoque\Itens->Aliquota Reduzida BCICMS]
        [BCICMS Substituicao      ] = 0
        UnlockRecord
EndIf

Moveto TabAtual

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="D"
     Case Serie="D1" : Serie="D"
     Case Serie="M1A": Serie=""
    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="D"
     Case Serie="D1" : Serie="D"
    EndSwitch
  EndSwitch

EndSwitch

Return Serie
EndProc

;*******************************************************************************
;* Rotina p/ gravar dados referente a saida                                    *
;*******************************************************************************
Proc GERA_SAIDA()
private grava51

If IsEmpty("RegSTemp")
   Then Gerou_Saidas=False
        Return
EndIf

View   "Reg_50"
View   "Reg_51"
View   "Reg_53"
View   "DadosC"
CoEdit "RegSTEmp"
NR = NRecords("RegSTemp")
Moveto [Estado Cliente]

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados saidas "+BARRA_STRING)

   If [Especie da Nota Fiscal]="C/F"  Or
      [Especie da Nota Fiscal]="CTR"  Or
      [Serie da Nota Fiscal  ]="D"    Or
      [Serie da Nota Fiscal  ]="D1"   Or
      [Codigo do Documento   ]="CT-E" Or
      [Codigo do Documento   ]="CTRC"
      Then Skip
           If Eot() Then QuitLoop EndIf
           Loop
   EndIf

   Switch
     Case SubStr([Codigo do Documento],1,3)="NFE" : MODELO="55"
     OtherWise                                    : MODELO="01"
   EndSwitch
   NRNF     =SubStr([RegSTemp->Numero da Nota Fiscal],2,6)
   SERIE    =MONTA_STRING(Pega_Serie("S",[RegSTemp->Especie da Nota Fiscal],[RegSTemp->Serie da Nota Fiscal]),"AN")
   SUBSERIE =[RegSTemp->SubSerie da Nota Fiscal]
   CFOP     =[RegSTemp->Cfo]
   ALIQ_ICMS=[RegSTemp->Aliquota de Icms]
   If CFOP="5929" Or CFOP="6929"    ; Ajuste destinacao "Fatura Cupom"
      Then ALIQ_ICMS=0
   EndIf    
   CGC      =AlinhM(MONTA_STRING([RegSTemp->CGC],"N"),14)
   UF       =[RegSTemp->Estado Cliente]
   IE       =Completa(MONTA_STRING([RegSTemp->IE],"AN"),14," ")
   DTOP     =StrVal(Year([RegSTemp->Data de Emissao]))+
             AlinhM(StrVal(Month([RegSTemp->Data de Emissao])),2)+
             AlinhM(StrVal(Day([RegSTemp->Data de Emissao])),2)

   If [RegSTemp->Cancelada]="4"
      Then CFOP="0000"
           CGC =AlinhM("0",14)
           UF  =""
           IE  =""
   EndIf   

   ;**************************************************************************
   ;*Atualiza dados do tipo de registro 50  - Resumo nota fiscal - ICMS
   ;**************************************************************************
   Moveto "Reg_50"
   Moveto [Operacao]
   Locate "S",CGC,NRNF,MODELO,SERIE,SUBSERIE,CFOP,ALIQ_ICMS
   If Not Retval
      Then End
           Down

          ;If Search("FRETE",[RegSTemp->Observacao])>0
          ;   Then [Valor Total     ] = 0
          ;EndIf

           [Operacao                ] = "S"
           [Tipo                    ] = "50"
           [Cgc_Entrada             ] = CGC
           [Cgc                     ] = CGC
           [Inscricao Estadual      ] = IE
           [Data Emissao/Recebimento] = DTOP
           [Unidade da Federacao    ] = UF
           [Modelo                  ] = MODELO
           [Serie                   ] = SERIE
           [SubSerie                ] = SUBSERIE
           [Numero                  ] = NRNF
           [CFOP                    ] = CFOP
           [Aliquota                ] = ALIQ_ICMS
           [Situacao                ] = [RegSTemp->Cancelada] 
           [Emitente da Nota Fiscal ] = "P"
        ;;;If [Situacao]="S" Then [CFOP]="0000" EndIf
        ;;;If [Situacao]="4" Then [CFOP]="0000" EndIf
   Endif

   ;If Search("FRETE",[RegSTemp->Observacao])=0
   If [RegSTemp->Frete Destacado na Nota]<>"S" 
      Then [Valor Total            ] = [Valor Total             ] + [RegSTemp->Valor Contabil   ]
           [Base de Calculo do Icms] = [Base de Calculo do Icms ] + [RegSTemp->Base Calculo Icms]
           [Valor do Icms          ] = [Valor do Icms           ] + [RegSTemp->Icms Debitado    ]
           [Isenta Nao Tributado   ] = [Isenta Nao Tributado    ] + [RegSTemp->Icms Isento      ]
           [Outras                 ] = [Outras                  ] + [RegSTemp->Icms Outros      ]
   EndIf

   If CFOP="5929" Or CFOP="6929"         ; Ajuste destinacao "Fatura Cupom"
      Then [Valor Total            ] = 0 ;06.07.2017 Siri
           [Base de Calculo do Icms] = 0
           [Valor do Icms          ] = 0
           [Isenta Nao Tributado   ] = 0 
           [Outras                 ] = 0
   EndIf
   If [RegSTemp->Cancelada]="S"
      Then [Valor Total            ] = 0 ;06.07.2017 Siri
   EndIf   
    
   If [RegSTemp->Cancelada]="2"
      Then [Valor Total            ] = 0
           [Base de Calculo do Icms] = 0
           [Valor do Icms          ] = 0
           [Isenta Nao Tributado   ] = 0 
           [Outras                 ] = 0
   EndIf   
   UnlockRecord

   ;**************************************************************************
   ;*Atualiza dados do tipo de registro 51 - IPI
   ;**************************************************************************
   grava51=false
   If Search("IND",ATIVIDADE)>0                and 
      [RegSTemp->Frete Destacado na Nota]<>"S" and
      [RegSTemp->Cancelada              ]<>"2"
      Then grava51=true 
   endif  
   switch
     case SYS_CODIGO_CLIENTE="0389" : grava51=false       ; Sacaria
   endswitch      
   if grava51
      then Moveto "Reg_51"
           Moveto [Operacao]
           Locate "S",CGC,NRNF,SERIE,SUBSERIE,CFOP,"51"
           If Not Retval
              Then End
                   Down
                   [Operacao                ] = "S"
                   [Tipo                    ] = "51"
                   [Cgc_Entrada             ] = CGC
                   [Cgc                     ] = CGC
                   [Inscricao Estadual      ] = IE
                   [Data Emissao/Recebimento] = DTOP
                   [Unidade da Federacao    ] = UF
                   [Numero                  ] = NRNF
                   [Serie                   ] = SERIE
                   [SubSerie                ] = SUBSERIE
                   [CFOP                    ] = CFOP
                   [Situacao                ] = [RegSTemp->Cancelada   ]
           Endif
           [Valor Total         ] = [Valor Total         ] + [RegSTemp->Valor Contabil]
           [Valor do Ipi        ] = [Valor do Ipi        ] + [RegSTemp->Ipi Debitado  ]
           [Isenta Nao Tributado] = [Isenta Nao Tributado] + [RegSTemp->Ipi Isento    ]
           [Outras - Ipi        ] = [Outras - Ipi        ] + [RegSTemp->Ipi Outros    ]
           UnlockRecord
   EndIf

   Moveto "DadosC"
   Moveto [CNPJ]
   Locate [RegSTemp->CGC]
   If Not RetVal
      Then End Down
           [CNPJ        ]=[RegSTemp->CGC]
           [IE          ]=[RegSTemp->IE]
           [Razao Social]=[RegSTemp->Razao Social]
           [UF          ]=[RegSTemp->Estado Cliente]
   EndIf

   Gera_53("Saida")

   Moveto "RegSTemp"
   Skip
   If Eot() Then QuitLoop EndIf

EndWhile
Do_It!
ClearAll
EndProc  ; (Gera_Saida)

;*******************************************************************************
;* Rotina p/ gravar dados referente a saida Itens                              *
;*******************************************************************************
Proc GERA_SAIDA54()

If IsEmpty("RegSTemp")
   Then Return
EndIf

View   "\\Sistemas\\Estoque\\Itens"
View   "\\Sistemas\\Vendas\\Destin"
View   "\\Sistemas\\Vendas\\NotaC"
View   "\\Sistemas\\Vendas\\Notai"
View   "Reg_75"
View   "Reg_54"
CoEdit "RegSTemp"
NR = NRecords("RegSTemp")

WEST="**"
WEMP="**"
WNUM="**"
WSER="**"

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados saidas/itens "+BARRA_STRING)

   If [Especie da Nota Fiscal]="C/F"   Or
      [Especie da Nota Fiscal]="CTR"   Or
      [Serie da Nota Fiscal  ]="D"     Or
      [Serie da Nota Fiscal  ]="D1"    Or
      [Cancelada             ]="S"     Or
      [Cancelada             ]="4"     Or
      [Cancelada             ]="2"     Or
      [Lancto Nota com Frete ]="S"     Or ; Lancto Frete/DespAces/Seguro
      [Cfo                   ]="5929"  Or ; Ajuste destinacao "Fatura Cupom"
      [Cfo                   ]="6929"  Or ; Ajuste destinacao "Fatura Cupom"
      [Cfo                   ]="6206"  Or ; Anula‡Æo de valor
      [Cfo                   ]="5206"  Or ; Anula‡Æo de valor
      [Cfo                   ]="1206"  Or ; Anula‡Æo de valor
      [Cfo                   ]="2206"     ; Anula‡Æo de valor
      Then Skip
           If Eot() Then QuitLoop EndIf
           Loop
   EndIf

   If [Estado Cliente       ]=WEST And
      [Codigo da Empresa    ]=WEMP And
      SubStr([Numero da Nota Fiscal],2,6)=WNUM And
      [Serie da Nota Fiscal ]=WSER
      Then Skip
           If Eot() Then QuitLoop EndIf
           Loop
   EndIf
   WEST=[Estado Cliente       ]
   WEMP=[Codigo da Empresa    ]
   WNUM=SubStr([Numero da Nota Fiscal],2,6)
   WSER=[Serie da Nota Fiscal ]

   Cont_Processo=True
   Moveto "\\Sistemas\\Vendas\\NotaC"
   Moveto [Codigo da Empresa]
   Locate WEMP,WNUM,WSER
   If Not RetVal
      Then Cont_Processo=False
      Else If [Codigo do Documento]<>"NF1"  And
              [Codigo do Documento]<>"NF2"  And
              [Codigo do Documento]<>"NFS2" And
              [Codigo do Documento]<>"NF"   And
              [Codigo do Documento]<>"NF-1" And
              [Codigo do Documento]<>"NF-2" And
              [Codigo do Documento]<>"NF3"  And
              SubStr([Codigo do Documento],1,3)<>"NFE"
              Then Cont_Processo=False
           EndIf
   EndIf

   If Cont_Processo
      Then 
				   Switch
				     Case SubStr([Codigo do Documento],1,3)="NFE" : MODELO="55"
				     OtherWise                                    : MODELO="01"
				   EndSwitch
           NRNF    =SubStr([RegSTemp->Numero da Nota Fiscal],2,6)
           SERIE   =MONTA_STRING(Pega_Serie("S",[RegSTemp->Especie da Nota Fiscal],[RegSTemp->Serie da Nota Fiscal]),"AN")
           SUBSERIE=[RegSTemp->SubSerie da Nota Fiscal]
           CFOP    =[RegSTemp->Cfo]
           CGC     =AlinhM(MONTA_STRING([RegSTemp->CGC],"N"),14)
           UF      =[RegSTemp->Estado Cliente]

           For wp From 1 To 4
             ;**************************************************************************
             ;*Atualiza dados do tipo de registro 54 Depesas/Frete/Seguro
             ;**************************************************************************
             Switch
               Case wp=1 And ([\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+" Or
                              [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="S") And
                              [\Sistemas\Vendas\NotaC->Valor do Frete]>0:
                 wwitem=991
                 Vr    =[\Sistemas\Vendas\NotaC->Valor do Frete]

               Case wp=2 And [\Sistemas\Vendas\NotaC->Valor do Seguro]>0:
                 wwitem=992
                 Vr    =[\Sistemas\Vendas\NotaC->Valor do Seguro]

               Case wp=3 And [\Sistemas\Vendas\NotaC->Valor Servico]>0:
                 wwitem=998
                 Vr    =[\Sistemas\Vendas\NotaC->Valor Servico]

               Case wp=4 And [\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]>0:
                 wwitem=999
                 Vr    =[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]

               OtherWise: Loop  
             EndSwitch

             Moveto "Reg_54"
             End
             Down
             [Operacao                 ] = "S"
             [Cgc_Entrada              ] = CGC
             [Modelo                   ] = MODELO
             [Serie                    ] = SERIE
             [SubSerie                 ] = SUBSERIE
             [Numero                   ] = NRNF
             [Numero do Item           ] = Alinhm(StrVal(wwitem),3) 
             [Tipo                     ] = "54"
             [Cgc                      ] = CGC
             [Unidade da Federacao     ] = UF
             [CFOP                     ] = CFOP
             [CST                      ] = ""
             [Codigo do Produto_Servico] = ""
             [Quantidade               ] = 0
             [Valor do Produto         ] = 0
             [Valor Desconto_Despesa   ] = vr
             [BCICMS                   ] = 0
             [BCICMS Substituicao      ] = 0
             [Valor do IPI             ] = 0
             [Aliquota do ICMS         ] = 0
             UnlockRecord
           EndFor
           
           ;**************************************************************************
           ;*Atualiza dados do tipo de registro 54 - Complemento
           ;**************************************************************************           
           If Search("COMPLEMENTO",[\Sistemas\Vendas\Notac->Descricao da Destinacao])>0
            Then wwitem=997 
                 Moveto "\\Sistemas\\Vendas\\NotaI"
                 Moveto [Codigo da Empresa]
                 Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
                        [\Sistemas\Vendas\NotaC->Numero do Documento],
                        [\Sistemas\Vendas\NotaC->Serie do Documento ]
                 If RetVal
                    Then             
                         Moveto "Reg_54"
                         End
                         Down
                         [Operacao                 ] = "S"
                         [Cgc_Entrada              ] = CGC
                         [Modelo                   ] = MODELO
                         [Serie                    ] = SERIE
                         [SubSerie                 ] = SUBSERIE
                         [Numero                   ] = NRNF
                         [Numero do Item           ] = Alinhm(StrVal(wwitem),3) 
                         [Tipo                     ] = "54"
                         [Cgc                      ] = CGC
                         [Unidade da Federacao     ] = UF
                         [CFOP                     ] = CFOP
                         [CST                      ] = ""
                         [Codigo do Produto_Servico] = ""
                         [Quantidade               ] = 0 
                         [Valor do Produto         ] = 0
                         DESTIN=[\Sistemas\Vendas\Notac->Descricao da Destinacao]
                         Switch
                          Case Search("ICMS CBC",DESTIN)>0: vr=[\Sistemas\Vendas\NotaC->Valor ICMS   ]
                          Case Search("ICMS SBC",DESTIN)>0: vr=[\Sistemas\Vendas\NotaC->Valor ICMS   ]
                          OtherWise:
                            vr=[\Sistemas\Vendas\NotaC->Valor Nota Fiscal ]
                         EndSwitch
                         [Valor Desconto_Despesa   ] = vr
                         [BCICMS                   ] = [\Sistemas\Vendas\NotaC->Valor BCICMS              ]
                         [BCICMS Substituicao      ] = [\Sistemas\Vendas\NotaC->Valor BCSubstituicao ICMS ]
                         [Valor do IPI             ] = [\Sistemas\Vendas\NotaC->Valor IPI                 ]
                         [Aliquota do ICMS         ] = 0

                         If TPEMPR="SIMPLES NACIONAL" Or
                            TPEMPR="SIMPLES NAC. ESRB" 
                            Then [BCICMS                   ] =0
                                 [BCICMS Substituicao      ] =0
                                 
                                 If vr=[\Sistemas\Vendas\NotaC->Valor ICMS   ]
                                    Then [Valor Desconto_Despesa   ]=0
                                 EndIf   
                         EndIf   
                         UnlockRecord
                 EndIf                   
            Else
                 SEM_RED_BCICMS="1"
                 Moveto "\\Sistemas\\Vendas\\Destin"
                 Moveto [Codigo da Destinacao]
                 Locate [\Sistemas\Vendas\NotaC->Codigo da Destinacao]
                 If Not Retval
                    Then Mensagem("Destina‡Æo nÆo encontrada-[DESTIN] : "+[\Sistemas\Vendas\NotaC->Codigo da Destinacao])
                    Else SEM_RED_BCICMS=[\Sistemas\Vendas\Destin->Sem Reducao BCICMS]
                 EndIf  
      
                 Moveto "\\Sistemas\\Vendas\\NotaC" 
      
                 wwitem   =0
                 Moveto "\\Sistemas\\Vendas\\NotaI"
                 Moveto [Codigo da Empresa]
                 Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
                        [\Sistemas\Vendas\NotaC->Numero do Documento],
                        [\Sistemas\Vendas\NotaC->Serie do Documento ]
                 If RetVal
                    Then While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                               [\Sistemas\Vendas\NotaI->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                               [\Sistemas\Vendas\NotaI->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ] And
                               ([\Sistemas\Vendas\NotaI->Tipo do Item       ]<>"C" And
                                [\Sistemas\Vendas\NotaI->Tipo do Item       ]<>"F")


                          ;--- 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=""
                          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"
                          
                          ;--- Verificando se ‚ item com icms st no cadastro -------------------
                          tem_debito_icms=true
                          If SearchFrom("60",Item_CST_ICMS,2)>0 or ; produto com ST nao aproveita ICMS
                             SearchFrom("70",Item_CST_ICMS,2)>0 
                             Then tem_debito_icms=false 
                          EndIf
                          
                          ;--- 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     ] 
                          
                          CSOSN          =[\Sistemas\Vendas\NotaI->CSOSN                   ] 
                          CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
                          ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
                          ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
                          ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
                          If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
                          If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
                          If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
                          VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
                          VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
                          VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
                          VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
                          MVA_ST         =[\Sistemas\Vendas\NotaI->MVA                     ]
                          
                          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            ]
                          
                          VL_OPR=(VL_ITEM-VL_DESC)+(VL_IPI+VL_ICMS_ST)+VR_ACRESC
                          ;-----------------------------------------------------------------

                          ;--- NÆo vai ter debito de icms na opera‡Æo --------------------------------
                          If not tem_debito_icms
                             Then 
                                  ALIQ_ICMS =0
                                  VL_BC_ICMS=BlankNum()
                                  VL_ICMS   =BlankNum()
                          EndIf   

                          wwitem=wwitem+1
                          ;**************************************************************************
                          ;*Atualiza dados do tipo de registro 54
                          ;**************************************************************************
                          Moveto "Reg_54"
                          End
                          Down
                          [Operacao                 ] = "S"
                          [Cgc_Entrada              ] = CGC
                          [Modelo                   ] = MODELO
                          [Serie                    ] = SERIE
                          [SubSerie                 ] = SUBSERIE
                          [Numero                   ] = NRNF
                          [Numero do Item           ] = Alinhm(StrVal(wwitem),3)
                          [Tipo                     ] = "54"
                          [Cgc                      ] = CGC
                          [Unidade da Federacao     ] = UF
                          [CFOP                     ] = CFOP 
                          [CST                      ] = CST_ICMS
                          [Codigo do Produto_Servico] = [\Sistemas\Vendas\NotaI->Codigo do Item      ]
                          [Quantidade               ] = [\Sistemas\Vendas\NotaI->Quantidade          ]
                          [Valor do Produto         ] = VL_ITEM
                          [Valor Desconto_Despesa   ] = VL_DESC
                          [BCICMS                   ] = VL_BC_ICMS
                          [BCICMS Substituicao      ] = VL_BC_ICMS_ST
                          [Valor do IPI             ] = VL_IPI
                          [Aliquota do ICMS         ] = ALIQ_ICMS
                          
                          If TPEMPR="SIMPLES NACIONAL" Or
                            TPEMPR="SIMPLES NAC. ESRB" 
                            Then [BCICMS           ] =0
                                 [Aliquota do ICMS ] =0
                          EndIf
                          If TPEMPR="SIMPLES NACIONAL" And MODELO="55"
                            Then [CST              ] =CSOSN 
                          EndIf
                          
                          If TPEMPR="MICRO EMPRESA" Or
                             TPEMPR="PEQUENO PORTE"
                             Then [BCICMS           ] =0
                                  [Aliquota do ICMS ] =0
                          EndIf
                          
                          UnlockRecord
                          If [\Sistemas\Vendas\NotaC->Tipo Movimento Estoque]="S"
                            Then Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Saida: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                            Else Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
                          EndIf
                          Moveto "\\Sistemas\\Vendas\\NotaI"
                          Skip
                          If Eot() Then QuitLoop EndIf                      
                         EndWhile     

                 EndIf
           EndIf            
   EndIf
   Moveto "RegSTemp"
   Skip
   If Eot() Then QuitLoop EndIf
EndWhile

Do_It!
ClearAll 
EndProc  ; (Gera_Saida54)

;*******************************************************************************
;* Rotina p/ gravar dados referente a Saida  CTR                               *
;*******************************************************************************
Proc GERA_SAIDA70()
If IsEmpty("RegSTemp")
   Then Return
EndIf

View "\\Sistemas\\Vendas\\NotaCC"
View "\\Sistemas\\Vendas\\NotaR"
View "Reg_70"
View "Reg_71"
CoEdit "RegSTemp"

NR = NRecords("RegSTemp")

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados saidas CTR "+BARRA_STRING)

   If [Codigo do Documento]<>"CA"   And
      [Codigo do Documento]<>"CTAC" And
      [Codigo do Documento]<>"CTA"  And
      [Codigo do Documento]<>"CT-E" And
      [Codigo do Documento]<>"CTFC" And
      [Codigo do Documento]<>"CTRM" And
      [Codigo do Documento]<>"CTRC" And
      SubStr([Especie da Nota Fiscal],1,3)<>"CTR"
      Then Skip
           If not Eot()
              Then Loop
              Else QuitLoop
           EndIf
   EndIf

   Switch
     Case [Codigo do Documento]="CA"                 : MODELO="10"
     Case [Codigo do Documento]="CTAC"               : MODELO="09"
     Case [Codigo do Documento]="CTA"                : MODELO="8B"
     Case [Codigo do Documento]="CT-E"               : MODELO="57"
     Case [Codigo do Documento]="CTFC"               : MODELO="11"
     Case [Codigo do Documento]="CTRM"               : MODELO="26"
     Case [Codigo do Documento]=" "               : MODELO="08"
     Case SubStr([Especie da Nota Fiscal],1,3)="CTR" : MODELO="08"
   EndSwitch

   CGC      =AlinhM(MONTA_STRING([RegSTemp->CGC],"N"),14)
   IE       =Completa(MONTA_STRING([RegSTemp->IE],"AN"),14," ")
   UF       =[RegSTemp->Estado Cliente]
   NRNF     =SubStr([RegSTemp->Numero da Nota Fiscal],2,6)
   SERIE    =MONTA_STRING(Pega_Serie("S",[RegSTemp->Especie da Nota Fiscal],[RegSTemp->Serie da Nota Fiscal]),"AN")
   SUBSERIE =[RegSTemp->SubSerie da Nota Fiscal]
   CFOP     =[RegSTemp->Cfo]
   DTOP     =StrVal(Year([RegSTemp->Data de Emissao]))+
             AlinhM(StrVal(Month([RegSTemp->Data de Emissao])),2)+
             AlinhM(StrVal(Day([RegSTemp->Data de Emissao])),2)
   FRETE    =[RegSTemp->Frete por Conta]
   if FRETE="4" or FRETE="5"
      then FRETE="3"
   endif              

   ;**************************************************************************
   ;*Atualiza dados do tipo de registro 70  - Resumo CTR
   ;**************************************************************************
   Moveto "Reg_70"
   Moveto [Cgc]
   Locate CGC,NRNF,MODELO,SERIE,SUBSERIE,CFOP
   If Not Retval
      Then End
           Down
           [Cgc                     ] = CGC
           [Tipo                    ] = "70"
           [Inscricao Estadual      ] = IE
           [Data Emissao/Recebimento] = DTOP
           [Unidade da Federacao    ] = UF
           [Modelo                  ] = MODELO
           [Serie                   ] = SERIE
           [SubSerie                ] = SUBSERIE
           [Numero                  ] = NRNF
           [CFOP                    ] = CFOP
           [Situacao                ] = [RegSTemp->Cancelada]
        ;;;If [Situacao]="S" Then [CFOP]="0000" EndIf
        ;;;If [Situacao]="4" Then [CFOP]="0000" EndIf
           [CIF_FOB                 ] = FRETE

   EndIf
   [Valor Total            ] = [Valor Total            ] + [RegSTemp->Valor Contabil   ]
   [Base de Calculo do Icms] = [Base de Calculo do Icms] + [RegSTemp->Base Calculo Icms]
   [Valor do Icms          ] = [Valor do Icms          ] + [RegSTemp->Icms Debitado    ]
   [Isenta Nao Tributado   ] = [Isenta Nao Tributado   ] + [RegSTemp->Icms Isento      ]
   [Outras                 ] = [Outras                 ] + [RegSTemp->Icms Outros      ]
   UnlockRecord

   WEMP=[RegSTemp->Codigo da Empresa]
   WNUM=NRNF
   WSER=SERIE

   Moveto "\\Sistemas\\Vendas\\NotaCC"
   Moveto [Codigo da Empresa]
   Locate WEMP,WNUM,WSER
   Switch
      Case FRETE="1":
           UF_REMDEST  =[Estado-Destinatario      ]
           CGC_REMDEST =AlinhM(MONTA_STRING([CNPJ_CPF-Destinatario],"N"),14)
           IE_REMDEST  =Completa(MONTA_STRING([Inscricao Estadual-Destin],"AN"),14," ")
      Case FRETE="2":
           UF_REMDEST  =[Estado-Remetente         ]
           CGC_REMDEST =AlinhM(MONTA_STRING([CNPJ_CPF-Remetente],"N"),14)
           IE_REMDEST  =Completa(MONTA_STRING([Inscricao Estadual-Remet],"AN"),14," ")
   EndSwitch   

   Cont_Processo=True
   Moveto "\\Sistemas\\Vendas\\NotaR"
   Moveto [Codigo da Empresa]
   Locate WEMP,WNUM,WSER
   If Not RetVal
      Then MSG="Nota fiscal: "+WEMP+"\\"+WNUM+"\\"+WSER+"//"
           MSG=MSG+"nÆo localizada para o conhecimento: "+NRNF+", corrigir !"
           Mensagem(MSG)
           Cont_Processo=False
   EndIf

   If Cont_Processo
      Then
         While [Codigo da Empresa  ]=WEMP And
               [Numero do Documento]=WNUM And
               [Serie do Documento ]=WSER And
               Not Eot()
           ;**************************************************************************
           ;*Atualiza dados do tipo de registro 71  - Notas CTR
           ;**************************************************************************
           Moveto "Reg_71"
           End
           Down
           [Tipo                     ]="71"
           [CGC Tomador              ]=CGC
           [IE Tomador               ]=IE
           [Data Emissao CTR         ]=DTOP
           [UF Tomador               ]=UF
           [Modelo CTR               ]=MODELO
           [Serie CTR                ]=SERIE
           [SubSerie CTR             ]=SUBSERIE
           [Numero CTR               ]=NRNF
           
           [UF Nota Fiscal           ]=UF_REMDEST
           [CGC Nota Fiscal          ]=CGC_REMDEST
           [IE Nota Fiscal           ]=IE_REMDEST


           [Data Emissao Nota Fiscal ]=StrVal(Year([\Sistemas\Vendas\NotaR->Data_Documento]))+
                                       AlinhM(StrVal(Month([\Sistemas\Vendas\NotaR->Data_Documento])),2)+
                                       AlinhM(StrVal(Day([\Sistemas\Vendas\NotaR->Data_Documento])),2)
				   [Modelo Nota Fiscal]       =[\Sistemas\Vendas\NotaR->Modelo_Documento          ]
           [Serie Nota Fiscal        ]=[\Sistemas\Vendas\NotaR->Serie_Documento           ]
           [SubSerie Nota Fiscal     ]=[\Sistemas\Vendas\NotaR->SubSerie_Documento        ]
           [Numero Nota Fiscal       ]=AlinhM([\Sistemas\Vendas\NotaR->Numero_Documento],6)
           [Valor Nota Fiscal        ]=[\Sistemas\Vendas\NotaR->Valor                     ]
           
           UnLockRecord
           Moveto "\\Sistemas\\Vendas\\NotaR"
           Skip
           
         EndWhile   
   EndIf

   Moveto "RegSTemp"
   Skip
   If Eot() Then QuitLoop EndIf

EndWhile
Do_It!
ClearAll
EndProc  ; (Gera_Saida70)

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

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

If MES="02" or VSDGINVENT[1]
   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)
        GERA_74(DateVal("31."+MES_ESTQ+"."+ANO_ESTQ))
EndIf           

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

endproc
       
;*******************************************************************************
;* Rotina p/ gravar dados referente a Estoque                                  *
;*******************************************************************************
Proc GERA_74(DT_INV)
Private posse, posse_cd, posse_cgc, posse_ie, posse_uf,
        regitens, regmarcas, regdestinat, PrimeiroDia_DT_INV

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

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

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

switch
  case sys_codigo_cliente="0294":
    {Ask} {\\Sistemas\\Estoque\\Itens}
    Moveto [Codigo do Item        ] Example "ITEM"
    Moveto [Tipo do Item          ] TypeIn "Not T"
    {Ask}{Answer} typein "Fast Delete" 
    Moveto [Codigo do Item        ] Example "ITEM"
    Do_It!
    ClearAll

endswitch

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

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

NR = NRecords("Answer")
PrimeiroDia_DT_INV = Primeiro_Dia_Data(DT_INV)

View Tabela_ERRO_ITEM
View   "Reg_75"
View   "Reg_74"

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

  ;-- Verifica cadastro --------------------------------------------------------
  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

  ;-- 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    ="1"
  posse_cd =""
  posse_cgc=""
  posse_ie =""
  posse_uf =""
  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    ="3"
        posse_cd =regdestinat["Codigo"] 
        posse_cgc=regdestinat["CGC"] 
        posse_ie =regdestinat["IE" ] 
        posse_uf =regdestinat["UF" ] 
     
  EndIf   

  if regitens["Inativo"]="S" and regitens["Data_Inativo"]<PrimeiroDia_DT_INV
     then
          If Not [Answer->Saldo Atual]>0
             Then Loop
          EndIf
  endif   
  If [Answer->Saldo Atual]<0
     Then Loop
  EndIf

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

  Moveto "Reg_74"
  End Down
  [Tipo             ]="74"
  [Data Inventario  ]=AlinhM(StrVal( Year(DT_INV)),4)+
                      AlinhM(StrVal(Month(DT_INV)),2)+
                      AlinhM(StrVal(  Day(DT_INV)),2)
  [Codigo do Produto]=[Answer->Codigo do Item]
  [Quantidade       ]=[Answer->Saldo Atual      ]
  [Valor do Produto ]=[Answer->Custo Total Atual]
  [Codigo de Posse  ]=posse
  [CNPJ             ]=Tira_CharNum(posse_cgc)
  [IE               ]=Tira_CharNum(posse_ie) ; campo temporario IE
  [UF               ]=posse_uf               ; campo temporario UF
  UnLockRecord
          
  Moveto "Answer"
EndScan
Do_It!
ClearAll
     
If Not IsEmpty(Tabela_ERRO_ITEM)
   Then 
        Aguarde("Aguarde, relat¢rio de inconsistˆncia no invent rio 3/3")

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

        MSG=""
				MSG=MSG+"O Sistema detectou inconsistencia de dados,//"
        MSG=MSG+"referente ao Estoque de "+MES_ESTQ+"."+ANO_ESTQ+".//"
				MSG=MSG+"Ser  exibido um Relat¢rio dos mesmos !// //"
				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  ; (Gera_74)

;*******************************************************************************
;* Rotina p/ gravar dados referente a saida por cupom fiscal                   *
;*******************************************************************************
Proc GERA_SAIDA60()
Private wi,CODTRIB,VRTRIB

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

Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados ECF "+BARRA_STRING)

   If [Codigo da Empresa]<>VSDGEMPRESA
      Then Loop
   EndIf
   If [Data]<VSDGDTINI or
      [Data]>VSDGDTFIM
      Then Loop
   EndIf

   Moveto "Reg_60"
   End
   Down
   [Tipo                     ] = "60"
   [Mestre_Analitico         ] = "M"
   [Data de Emissao          ] = StrVal(Year([\Sistemas\Vendas\ECF_C->Data]))+
                                 AlinhM(StrVal(Month([\Sistemas\Vendas\ECF_C->Data])),2)+
                                 AlinhM(StrVal(Day([\Sistemas\Vendas\ECF_C->Data])),2)
   [Numero do ECF            ] = AlinhM(StrVal([\Sistemas\Vendas\ECF_C->Numero do ECF          ]),3)
   [Numero Serie Fabricacao  ] = [\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
   [Modelo                   ] = "2D"
   [Numero Contador Inicial  ] = [\Sistemas\Vendas\ECF_C->COO_Inicial            ]
   [Numero Contador Final    ] = [\Sistemas\Vendas\ECF_C->COO_Final              ]
   [Numero Contador Reducao Z] = [\Sistemas\Vendas\ECF_C->Contador Reducao       ]
   [ContadorReinicio Operacao] = [\Sistemas\Vendas\ECF_C->Reinicio Operacao      ]
   [Grande Total Inicial     ] = [\Sistemas\Vendas\ECF_C->Totalizador Inicial    ]
   [Grande Total Final       ] = [\Sistemas\Vendas\ECF_C->Totalizador Final      ]
	 UnLockRecord

   For wi From 1 To 6

     CODTRIB=""
     VRTRIB =0
     Switch
      Case wi=1: CODTRIB= "F   "
                 VRTRIB = [\Sistemas\Vendas\ECF_C->Substituicao Tributaria]

      Case wi=2: CODTRIB= "I   "
                 VRTRIB = [\Sistemas\Vendas\ECF_C->Isento                 ]

      Case wi=3: CODTRIB= "N   "
                 VRTRIB = [\Sistemas\Vendas\ECF_C->Nao Incidencia         ]

      Case wi=4: CODTRIB= "CANC"
                 VRTRIB = [\Sistemas\Vendas\ECF_C->Cancelados             ]

      Case wi=5: CODTRIB= "DESC"
                 VRTRIB = [\Sistemas\Vendas\ECF_C->Descontos              ]

      Case wi=6: CODTRIB= "ISS "
                 VRTRIB = [\Sistemas\Vendas\ECF_C->ISSQN                  ]

     EndSwitch

     If VRTRIB=0 Or IsBlank(VRTRIB)
        Then Loop
     EndIf   

     End
     Down
     [Tipo                     ] = "60"
     [Mestre_Analitico         ] = "A"
     [Data de Emissao          ] = StrVal(Year([\Sistemas\Vendas\ECF_C->Data]))+
                                   AlinhM(StrVal(Month([\Sistemas\Vendas\ECF_C->Data])),2)+
                                   AlinhM(StrVal(Day([\Sistemas\Vendas\ECF_C->Data])),2)
     [Numero do ECF            ] = AlinhM(StrVal([\Sistemas\Vendas\ECF_C->Numero do ECF          ]),3)
     [Numero Serie Fabricacao  ] = [\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
     [Tributacao ou Aliquota   ] = CODTRIB
     [Vr Tributacao ou Aliquota] = VRTRIB
     UnLockRecord
   EndFor

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

     CODTRIB = Valor_Str([\Sistemas\Vendas\ECF_T->Aliquota de ICMS],04,2)
     VRTRIB  =[\Sistemas\Vendas\ECF_T->Base de Calculo ICMS]

     If VRTRIB>0
        Then Moveto "Reg_60"
             End
             Down
             [Tipo                     ] = "60"
             [Mestre_Analitico         ] = "A"
             [Data de Emissao          ] = StrVal(Year([\Sistemas\Vendas\ECF_C->Data]))+
                                           AlinhM(StrVal(Month([\Sistemas\Vendas\ECF_C->Data])),2)+
                                           AlinhM(StrVal(Day([\Sistemas\Vendas\ECF_C->Data])),2)
             [Numero do ECF            ] = AlinhM(StrVal([\Sistemas\Vendas\ECF_C->Numero do ECF          ]),3)
             [Numero Serie Fabricacao  ] = [\Sistemas\Vendas\ECF_C->Numero Serie Fabricacao]
             [Tributacao ou Aliquota   ] = CODTRIB
             [Vr Tributacao ou Aliquota] = VRTRIB
             UnlockRecord
     EndIf   

		 Moveto "\\Sistemas\\Vendas\\ECF_T"
     Skip
     If Eot() Then QuitLoop EndIf
   EndWhile

   Moveto "\\Sistemas\\Vendas\\ECF_C"
EndScan
Do_It!
ClearAll
EndProc  ; (Gera_Saida60)

;*******************************************************************************
;* Rotina p/ gravar dados referente a saida Itens                              *
;*******************************************************************************
Proc GERA_SAIDA60DIR()
private temcancelamento

Dir_Buscag="\\Sistemas\\Vendas\\"
ClearAll
{Ask} TypeIn Dir_Buscag + "NotaC" Enter
Moveto [Codigo da Empresa        ] Check Example "ce" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento      ] Check Example "nd"
Moveto [Serie do Documento       ] Check Example "sd"
Moveto [Data de Emissao          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Codigo do Documento      ] Check
Moveto [Tipo do Documento        ] Check TypeIn "CUP.."
Moveto [Tipo Movimento Estoque   ] TypeIn "S"
Moveto [Numero da Of             ] Check
Moveto [Situacao                 ] Check
Moveto [Valor Mercadoria         ] Check
Moveto [Valor Desconto           ] Check
{Ask} TypeIn Dir_Buscag + "NotaI" Enter
Moveto [Codigo da Empresa        ] Example "ce"
Moveto [Numero do Documento      ] Example "nd"
Moveto [Serie do Documento       ] Example "sd"
Moveto [Item do Documento        ] Check
Moveto [Codigo do Item           ] Check
Moveto [Descricao do Item        ] Check TypeIn "Not ITEM CANCELADO"
Moveto [Unidade Fiscal           ] Check
Moveto [Preco Unitario           ] Check
Moveto [Quantidade               ] Check
Moveto [Preco Total              ] Check
Moveto [Tipo Tributacao          ] Check
Moveto [Tributacao de ICMS       ] Check
Moveto [Aliquota de ICMS         ] Check
Moveto [Aliquota Reduzida BCICMS ] Check
Moveto [Valor do ICMS            ] Check
Moveto [ICMS_BC                  ] Check
Moveto [Aliquota de IPI          ] Check
Moveto [Valor Desconto Total     ] Check
Moveto [Valor Desconto Item      ] Check
Moveto [NCM                      ] Check
Moveto [Situacao_Item            ] Check
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

Sort "Answer"  On "Codigo da Empresa","Data de Emissao","Serie do Documento","Numero do Documento","Item do Documento"

NR = NRecords("Answer")

View   "\\Sistemas\\Estoque\\Itens"
View   "Reg_60D"
View   "Reg_60I"
View   "Reg_60R"
View   "Reg_75"
View   "\\Sistemas\\Vendas\\ECF_C"
CoEdit "Answer"

CDEMPECF="****"
SRDOCECF="****"
DTEMIECF=BlankDate()

Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando resumos ECF "+BARRA_STRING)

   If CDEMPECF<>[Answer->Codigo da Empresa ] Or
      SRDOCECF<>[Answer->Serie do Documento] Or
      DTEMIECF<>[Answer->Data de Emissao   ]
      Then CDEMPECF=[Answer->Codigo da Empresa ]
           SRDOCECF=[Answer->Serie do Documento]
           DTEMIECF=[Answer->Data de Emissao   ]

           NSRDOCECF=[Answer->Serie do Documento]

           Moveto "\\Sistemas\\Vendas\\ECF_C"
           While True
             Moveto [Codigo da Empresa]
             Locate CDEMPECF, NSRDOCECF, DTEMIECF
             If Not RetVal
                Then End Down
                     [Codigo da Empresa ]=CDEMPECF
                     [Serie do Documento]=NSRDOCECF
                     [Data              ]=DTEMIECF
                     If IsLockRecord()
                        Then Del
                        Else UnLockRecord
                     EndIf
                     MSG="Resumo ECF n„o encontrado !// //"
                     MSG=MSG+"Empresa,ECF,DtEmiss„o://"
                     MSG=MSG+CDEMPECF+","+NSRDOCECF+","+Format("D13",DTEMIECF)
                     Mensagem(MSG)
                Else QuitLoop
             EndIf
           EndWhile

           NSERIE_ECF=[Numero Serie Fabricacao]
           NUMERO_ECF=[Numero do ECF          ]
   EndIf

   MES_ANO  =AlinhM(StrVal(Month([Answer->Data de Emissao])),2)+AlinhM(StrVal(Year([Answer->Data de Emissao])),4)
   DTEMISSAO=AlinhM(StrVal(Year([Answer->Data de Emissao])),4)+AlinhM(StrVal(Month([Answer->Data de Emissao])),2)+AlinhM(StrVal(Day([Answer->Data de Emissao])),2)

   temcancelamento=false
   Tributacao_ICMS="" 
   Switch
     Case [Answer->Situacao          ]="C": Tributacao_ICMS="CANC" temcancelamento=true
     Case [Answer->Situacao_Item     ]="C": Tributacao_ICMS="CANC" temcancelamento=true
     Case [Answer->Tributacao de ICMS]="D": Tributacao_ICMS=Valor_Str([Answer->Aliquota de ICMS],4,2)
     Case [Answer->Tributacao de ICMS]="O": Tributacao_ICMS="N   "
     Case [Answer->Tributacao de ICMS]="N": Tributacao_ICMS="N   "
     Case [Answer->Tributacao de ICMS]="I": Tributacao_ICMS="I   "
     Case [Answer->Tributacao de ICMS]="S": Tributacao_ICMS="F   "
   EndSwitch

    Moveto "Reg_60R"
    Moveto [Tipo]
    Locate "60","R",MES_ANO,[Answer->Codigo do Item],Tributacao_ICMS
    If Not RetVal
       Then ;**************************************************************************
            ;*Atualiza dados do tipo de registro 60R
            ;**************************************************************************
            End
            Down
            [Tipo                     ] = "60"
            [Mestre_Analitico         ] = "R"
            [Mes_Ano                  ] = MES_ANO
            [Codigo do Produto_Servico] = [Answer->Codigo do Item ]
            [Tributacao ou Aliquota   ] = Tributacao_ICMS
    EndIf
    [Quantidade         ]=[Quantidade         ]+[Answer->Quantidade]
    [Valor da Mercadoria]=[Valor da Mercadoria]+([Answer->Preco Total]-[Answer->Valor Desconto Total])
    [BCICMS             ]=[BCICMS             ]+[Answer->ICMS_BC   ]  
    UnLockRecord
    
   Moveto "Reg_60D"
   Moveto [Tipo]
   Locate "60","D",DTEMISSAO,NSERIE_ECF,[Answer->Codigo do Item],Tributacao_ICMS
   If Not RetVal
      Then ;**************************************************************************
           ;*Atualiza dados do tipo de registro 60D
           ;**************************************************************************
           End
           Down
           [Tipo                     ] = "60"
           [Mestre_Analitico         ] = "D"
           [Data de Emissao          ] = DTEMISSAO
           [Numero Serie Fabricacao  ] = NSERIE_ECF
           [Codigo do Produto_Servico] = [Answer->Codigo do Item ]
           [Tributacao ou Aliquota   ] = Tributacao_ICMS
   EndIf
   [Quantidade         ]=[Quantidade         ]+[Answer->Quantidade   ]
   [Valor da Mercadoria]=[Valor da Mercadoria]+([Answer->Preco Total ]-[Answer->Valor Desconto Total])
   [BCICMS             ]=[BCICMS             ]+[Answer->ICMS_BC      ]  
   [Valor do ICMS      ]=[Valor do ICMS      ]+[Answer->Valor do ICMS]

   if temcancelamento
      then [Valor da Mercadoria]=[Valor da Mercadoria]+[Answer->Valor Desconto Total]+[Answer->Valor Desconto Item]
   endif
   UnLockRecord

   if Not temcancelamento and ([Answer->Valor Desconto Total]>=0.01 or [Answer->Valor Desconto Item]>=0.01)
      Then
           Moveto "Reg_60D"
           Moveto [Tipo]
           Locate "60","D",DTEMISSAO,NSERIE_ECF,[Answer->Codigo do Item],"DESC"
           If Not RetVal
              Then ;**************************************************************************
                   ;*Atualiza dados do tipo de registro 60D
                   ;**************************************************************************
                   End
                   Down
                   [Tipo                     ] = "60"
                   [Mestre_Analitico         ] = "D"
                   [Data de Emissao          ] = DTEMISSAO
                   [Numero Serie Fabricacao  ] = NSERIE_ECF
                   [Codigo do Produto_Servico] = [Answer->Codigo do Item ]
                   [Tributacao ou Aliquota   ] = "DESC"
           EndIf
           [Quantidade         ]=[Quantidade         ]+[Answer->Quantidade   ]
           [Valor da Mercadoria]=[Valor da Mercadoria]+[Answer->Valor Desconto Total]+[Answer->Valor Desconto Item]
           UnLockRecord
   endif

   If VSDGECF[1] 
      Then Moveto "Reg_60I"
           ;**************************************************************************
           ;*Atualiza dados do tipo de registro 60I
           ;**************************************************************************
           End
           Down
           [Tipo                     ]="60"
           [Mestre_Analitico         ]="I"
           [Data de Emissao          ]=DTEMISSAO
           [Numero do ECF            ]=StrVal(NUMERO_ECF)
           [Numero Serie Fabricacao  ]=NSERIE_ECF
           [Modelo                   ]="2D"
           [Numero                   ]=Alinhm([Answer->Numero do Documento],6)
           [Numero do Item           ]=Alinhm(StrVal([Answer->Item do Documento]),3)
           [Codigo do Produto_Servico]=[Answer->Codigo do Item ]
           [Quantidade               ]=[Answer->Quantidade ]

           [Valor do Produto         ]=NDecimal(([Answer->Preco Total]-[Answer->Valor Desconto Total])/[Answer->Quantidade ],2)
           If [Valor do Produto      ]<0 then [Valor do Produto      ]=0 endif 
           
           [Tributacao ou Aliquota   ]=Tributacao_ICMS
           [BCICMS                   ]=[Answer->ICMS_BC      ]  
           [Valor do ICMS            ]=[Answer->Valor do ICMS]
           UnLockRecord
           
           if temcancelamento
              then Moveto "Reg_60I"
                   End
                   Down
                   [Tipo                     ]="60"
                   [Mestre_Analitico         ]="I"
                   [Data de Emissao          ]=DTEMISSAO
                   [Numero do ECF            ]=StrVal(NUMERO_ECF)
                   [Numero Serie Fabricacao  ]=NSERIE_ECF
                   [Modelo                   ]="2D"
                   [Numero                   ]=Alinhm([Answer->Numero do Documento],6)
                   [Numero do Item           ]=Alinhm(StrVal([Answer->Item do Documento]),3)
                   [Codigo do Produto_Servico]=[Answer->Codigo do Item ]
                   [Quantidade               ]=[Answer->Quantidade ]

                   [Valor do Produto         ]=NDecimal(([Answer->Preco Total]-[Answer->Valor Desconto Total])/[Answer->Quantidade ],2)
                   If [Valor do Produto      ]<0 then [Valor do Produto      ]=0 endif 
                   
                   [Tributacao ou Aliquota   ]="CANC"
                   [BCICMS                   ]=[Answer->ICMS_BC      ]  
                   [Valor do ICMS            ]=[Answer->Valor do ICMS]
                   UnLockRecord
           endif

           if not temcancelamento and ( [Answer->Valor Desconto Total]>0 or [Answer->Valor Desconto Item]>0) ;06.07.2017 Siri           
              then Moveto "Reg_60I"
                   End
                   Down
                   [Tipo                     ]="60"
                   [Mestre_Analitico         ]="I"
                   [Data de Emissao          ]=DTEMISSAO
                   [Numero do ECF            ]=StrVal(NUMERO_ECF)
                   [Numero Serie Fabricacao  ]=NSERIE_ECF
                   [Modelo                   ]="2D"
                   [Numero                   ]=Alinhm([Answer->Numero do Documento],6)
                   [Numero do Item           ]=Alinhm(StrVal([Answer->Item do Documento]),3)
                   [Codigo do Produto_Servico]=[Answer->Codigo do Item ]
                   [Quantidade               ]=[Answer->Quantidade ]

                   [Valor do Produto         ]=[Answer->Valor Desconto Total]+[Answer->Valor Desconto Item]                   
                   [Tributacao ou Aliquota   ]="DESC"
                   [BCICMS                   ]=0 
                   [Valor do ICMS            ]=0
                   UnLockRecord
           endif


   EndIf 
   
   Grava_Itens([Answer->Codigo do Item],"Cupom: "+[Answer->Numero do Documento ])
        
   Moveto "Answer"
EndScan

Do_It!
ClearAll
EndProc  ; (Gera_Saida60DIR)


;*******************************************************************************
;* Rotina p/ gravar dados referente a saida por Serie D                        *
;*******************************************************************************
Proc GERA_SAIDA61()
Private wi

View   "Reg_61"
CoEdit "RegSTEmp"
NR = NRecords("RegSTemp")
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados serie D "+BARRA_STRING)

   If [Serie da Nota Fiscal]<>"D" And
      [Serie da Nota Fiscal]<>"D1"    
      Then Loop
   EndIf
   
   If SYS_CODIGO_CLIENTE="0117" And
      [Serie da Nota Fiscal]="D"
      Then Loop
   EndIf

   If [Cancelada        ]="S" Or
      [Cancelada        ]="2" Or
      [Cancelada        ]="4"   
      Then Loop
   EndIf

   DTOP     =StrVal(Year([RegSTemp->Data de Emissao]))+
             AlinhM(StrVal(Month([RegSTemp->Data de Emissao])),2)+
             AlinhM(StrVal(Day([RegSTemp->Data de Emissao])),2)
   MODELO   ="02"
   SERIE    =MONTA_STRING(Pega_Serie("S",[RegSTemp->Especie da Nota Fiscal],[RegSTemp->Serie da Nota Fiscal]),"AN")
   SUBSERIE =[RegSTemp->SubSerie da Nota Fiscal]

;;;If [RegSTemp->Serie da Nota Fiscal]="D1"
;;;   Then SUBSERIE="1"
;;;   Else SUBSERIE=""
;;;EndIf

   NINICIAL =SubStr([RegSTemp->Numero da Nota Fiscal],2,6)
   NFINAL   =SubStr([RegSTemp->Numero Varias Notas  ],2,6)
   ALIQ_ICMS=[RegSTemp->Aliquota de Icms ]

   ;**************************************************************************
   ;*Atualiza dados do tipo de registro 61  - Resumo nota fiscal - SERIE D
   ;**************************************************************************
   Moveto "Reg_61"
   Moveto [Data de Emissao]
   Locate DTOP,MODELO,SERIE,SUBSERIE,NINICIAL,NFINAL,ALIQ_ICMS
   If Not Retval
      Then End
           Down
           [Tipo                   ] = "61"
           [Data de Emissao        ] = DTOP
           [Modelo                 ] = MODELO
           [Serie                  ] = SERIE
           [SubSerie               ] = SUBSERIE
           [Numero Inicial         ] = NINICIAL
           [Numero Final           ] = NFINAL
           [Aliquota               ] = ALIQ_ICMS
   EndIf
        
   [Valor Total            ] = [Valor Total            ]+[RegSTemp->Valor Contabil   ]
   [Base de Calculo do Icms] = [Base de Calculo do Icms]+[RegSTemp->Base Calculo Icms]
   [Valor do Icms          ] = [Valor do Icms          ]+[RegSTemp->Icms Debitado    ]
   [Isenta Nao Tributado   ] = [Isenta Nao Tributado   ]+[RegSTemp->Icms Isento      ]
   [Outras                 ] = [Outras                 ]+[RegSTemp->Icms Outros      ]

   UnlockRecord

   Moveto "RegSTemp"
EndScan
Do_It!
ClearAll
EndProc  ; (Gera_Saida61)

;*******************************************************************************
;* Rotina p/ gravar dados referente a saida Itens                              *
;*******************************************************************************
Proc GERA_SAIDA61R()

Dir_Buscag="\\Sistemas\\Vendas\\"
ClearAll
{Ask} TypeIn Dir_Buscag + "NotaC" Enter
Moveto [Codigo da Empresa        ] Check Example "ce" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento      ] Check Example "nd"
Moveto [Serie do Documento       ] Check Example "sd"
Moveto [Data de Emissao          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Codigo do Documento      ] Check TypeIn "NFD.."
Moveto [Tipo Movimento Estoque   ] TypeIn "S"
Moveto [Situacao                 ] TypeIn "Not C"
Moveto [Valor Mercadoria         ] Check
Moveto [Valor Desconto           ] Check
{Ask} TypeIn Dir_Buscag + "NotaI" Enter
Moveto [Codigo da Empresa        ] Example "ce"
Moveto [Numero do Documento      ] Example "nd"
Moveto [Serie do Documento       ] Example "sd"
Moveto [Item do Documento        ] Check
Moveto [Codigo do Item           ] Check
Moveto [Descricao do Item        ] Check
Moveto [Unidade Fiscal           ] Check
Moveto [Preco Unitario           ] Check
Moveto [Quantidade               ] Check
Moveto [Preco Total              ] Check
Moveto [Tipo Tributacao          ] Check
Moveto [Tributacao de ICMS       ] Check
Moveto [Aliquota de ICMS         ] Check
Moveto [Aliquota Reduzida BCICMS ] Check
Moveto [ICMS_BC                  ] Check
Moveto [Valor do ICMS            ] Check
Moveto [Aliquota de IPI          ] Check
Moveto [Valor Desconto Total     ] Check
Moveto [NCM                      ] Check
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

Sort "Answer"  On "Codigo da Empresa","Data de Emissao","Serie do Documento","Numero do Documento","Item do Documento"

NR = NRecords("Answer")

View   "\\Sistemas\\Estoque\\Itens"
View   "Reg_61R"
View   "Reg_75"
CoEdit "Answer"

CDEMPNFD="****"
SRDOCNFD="****"

Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando resumos serie D "+BARRA_STRING)

   If SYS_CODIGO_CLIENTE="0117" And
      [Serie do Documento]="D"
      Then Loop
   EndIf

   MES_ANO  =AlinhM(StrVal(Month([Answer->Data de Emissao])),2)+AlinhM(StrVal(Year([Answer->Data de Emissao])),4)
   DTEMISSAO=AlinhM(StrVal(Year([Answer->Data de Emissao])),4)+AlinhM(StrVal(Month([Answer->Data de Emissao])),2)+AlinhM(StrVal(Day([Answer->Data de Emissao])),2)

   Tributacao_ICMS="" 
   Switch
     Case [Answer->Tributacao de ICMS]="D": Tributacao_ICMS=Valor_Str([Answer->Aliquota de ICMS],4,2)
     Case [Answer->Tributacao de ICMS]="O": Tributacao_ICMS="0000"
     Case [Answer->Tributacao de ICMS]="N": Tributacao_ICMS="0000"
     Case [Answer->Tributacao de ICMS]="I": Tributacao_ICMS="0000"
     Case [Answer->Tributacao de ICMS]="S": Tributacao_ICMS="0000"
   EndSwitch

    Moveto "Reg_61R"
    Moveto [Tipo]
    Locate "61","R",MES_ANO,[Answer->Codigo do Item],Tributacao_ICMS
    If Not RetVal
       Then ;**************************************************************************
            ;*Atualiza dados do tipo de registro 61R
            ;**************************************************************************
            End
            Down
            [Tipo                     ] = "61"
            [Mestre_Analitico         ] = "R"
            [Mes_Ano                  ] = MES_ANO
            [Codigo do Produto_Servico] = [Answer->Codigo do Item ]
            [Tributacao ou Aliquota   ] = Tributacao_ICMS
    EndIf
    [Quantidade               ]=[Quantidade         ]+[Answer->Quantidade  ]
    [Valor da Mercadoria      ]=[Valor da Mercadoria]+([Answer->Preco Total]-[Answer->Valor Desconto Total])
    [BCICMS                   ]=[BCICMS             ]+[Answer->ICMS_BC   ]  
    UnLockRecord

   Grava_Itens([Answer->Codigo do Item],"Nota consumidor: "+[Answer->Numero do Documento ])

   Moveto "Answer"
EndScan

Do_It!
ClearAll
EndProc  ; (Gera_Saida61R)

;*******************************************************************************
;* Rotina p/ gravar dados referente a entrada                                  *
;*******************************************************************************
Proc GERA_ENTRADA()
private grava51

If IsEmpty("RegETemp")
   Then Gerou_Entradas=False
        Return
EndIf

View "Reg_50"
View "Reg_51"
View "Reg_53"
View "Dadosc"
View "DAE"
CoEdit "RegETemp"

NR = NRecords("RegETemp")

Doc_Ant="????"

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados entradas "+BARRA_STRING)

   If [Codigo do Documento]="CA"   Or
      [Codigo do Documento]="CTA"  Or
      [Codigo do Documento]="CTAC" Or
      [Codigo do Documento]="CTRC" Or
      [Codigo do Documento]="CTFC" Or
      [Codigo do Documento]="CTRM" Or
      [Codigo do Documento]="CT-E" Or
      [Codigo do Documento]="NFSF" Or
      [Codigo do Documento]="NFST" Or
      SubStr([Especie da Nota Fiscal],1,3)="CTR"
      Then Skip
           If not Eot()
              Then Loop
              Else QuitLoop
           EndIf
   EndIf

   Switch
     Case [Codigo do Documento]="CEM"  : MODELO="06"
     Case [Codigo do Documento]="GAS"  : MODELO="28"
     Case [Codigo do Documento]="TEL"  : MODELO="22"
     Case [Codigo do Documento]="AGUA" : MODELO="29"
     Case [Codigo do Documento]="NFPR" : MODELO="04"
     Case [Codigo do Documento]="NFSC" : MODELO="21"
     Case [Codigo do Documento]="NF-E" : MODELO="55"
     Case SubStr([Codigo do Documento],1,3)="NFE" : MODELO="55"
     OtherWise                         : MODELO="01"
   EndSwitch
   If Len([RegETemp->Numero da Nota Fiscal])>6
      Then NRNF =SubStr([RegETemp->Numero da Nota Fiscal],Len([RegETemp->Numero da Nota Fiscal])-5,6)
      Else NRNF =[RegETemp->Numero da Nota Fiscal]
   EndIf   
   SERIE    =MONTA_STRING(Pega_Serie("E",[RegETemp->Especie da Nota Fiscal],[RegETemp->Serie da Nota Fiscal]),"AN")
   SUBSERIE =[RegETemp->SubSerie da Nota Fiscal]
;;;If [RegETemp->Serie da Nota Fiscal]="D1"
;;;   Then SUBSERIE="1"
;;;EndIf   
   CGC      = AlinhM(MONTA_STRING([RegETemp->CGC],"N"),14)
   IE       = Completa(MONTA_STRING([RegETemp->IE],"AN"),14," ")
   CFOP     = [RegETemp->Cfo]
   ALIQ_ICMS= [RegETemp->Aliquota de Icms]
   DTOP     = StrVal(Year([RegETemp->Data de Entrada]))+
              AlinhM(StrVal(Month([RegETemp->Data de Entrada])),2)+
              AlinhM(StrVal(Day([RegETemp->Data de Entrada])),2)
   UF       = [RegETemp->Estado Fornecedor]

   ;**************************************************************************
   ;*Atualiza dados do tipo de registro 50  - Resumo nota fiscal
   ;**************************************************************************
   Moveto "Reg_50"
   Moveto [Operacao]
   Locate "E",CGC,NRNF,MODELO,SERIE,SUBSERIE,CFOP,ALIQ_ICMS
   If Not Retval
      Then End
           Down
           [Operacao                ] = "E"
           [Tipo                    ] = "50"
           [Cgc_Entrada             ] = CGC   
           [Cgc                     ] = CGC   
           [Inscricao Estadual      ] = IE
           [Data Emissao/Recebimento] = DTOP
           [Unidade da Federacao    ] = UF
           [Modelo                  ] = MODELO
           [Serie                   ] = SERIE
           [SubSerie                ] = SUBSERIE
           [Numero                  ] = NRNF
           [CFOP                    ] = CFOP
                                 
           ;--- Nota Extemporanea ----------------------------------------------
           GetRecord "\\Sistemas\\Estoque\\NotaEc" [RegETemp->Numero do Lancamento] To DynArray TIPONF
           If RetVal  
              Then TIPONF = TIPONF["Tipo de NF"]
              Else TIPONF = "N"               
           EndIf
           If [RegETemp->Cancelada] = "S" 
              Then [Situacao                ] = "S" 
              Else [Situacao                ] = TIPONF   
           EndIf                      
           If TIPONF = "E"
              Then [Data Emissao/Recebimento] = StrVal(Year([RegETemp->Data de Emissao]))+
                                                AlinhM(StrVal(Month([RegETemp->Data de Emissao])),2)+
                                                AlinhM(StrVal(Day([RegETemp->Data de Emissao])),2)
           EndIf
           ;--------------------------------------------------------------------
           
        ;;;If [Situacao]="S" Then [CFOP]="0000" EndIf
        ;;;If [Situacao]="4" Then [CFOP]="0000" EndIf
           [Aliquota                ] = ALIQ_ICMS
           [Emitente da Nota Fiscal ] = [RegETemp->Emitente da Nota Fiscal]
   EndIf
   [Valor Total            ] = [Valor Total            ] + [RegETemp->Valor Contabil]
   [Base de Calculo do Icms] = [Base de Calculo do Icms] + [RegETemp->Base Calculo Icms]
   [Valor do Icms          ] = [Valor do Icms          ] + [RegETemp->Icms Debitado    ]
   [Isenta Nao Tributado   ] = [Isenta Nao Tributado   ] + [RegETemp->Icms Isento      ]
   [Outras                 ] = [Outras                 ] + [RegETemp->Icms Outros      ]
   UnlockRecord

   If MODELO="01" Or MODELO="55"
      Then 
				   ;**************************************************************************
				   ;*Atualiza dados do tipo de registro 51 - IPI
				   ;**************************************************************************
           grava51=false
           If Search("IND",ATIVIDADE)>0                 
              Then grava51=true
              
                   switch 
                     case CFOP="1102" : grava51=false
                     case CFOP="2102" : grava51=false ;Entrada para industrializa‡Æo
                     case CFOP="1403" : grava51=false
                     case CFOP="2403" : grava51=false
                   endswitch 
           endif  
           switch
             case SYS_CODIGO_CLIENTE="0389" : grava51=false   ; Sacaria
             case SYS_CODIGO_CLIENTE="0167" : grava51=false   ; Fundi‡Æo SÆo Geraldo
             case SYS_CODIGO_CLIENTE="0002" : grava51=false   ; Brunnu's
             case SYS_CODIGO_CLIENTE="0240" : grava51=false   ; EBF
             case SYS_CODIGO_CLIENTE="0288" : grava51=false   ; Metalurgica Brassol
           endswitch      
           if grava51
              Then Moveto "Reg_51"
                   Moveto [Operacao]
                   Locate "E",CGC,NRNF,SERIE,SUBSERIE,CFOP,"51"
                   If Not RetVal
                      Then End
                           Down
                           [Operacao                ] = "E"
                           [Cgc_Entrada             ] = CGC
                           [Tipo                    ] = "51"
                           [Cgc                     ] = CGC
                           [Inscricao Estadual      ] = IE
                           [Data Emissao/Recebimento] = DTOP
                           [Unidade da Federacao    ] = UF
                           [Serie                   ] = SERIE
                           [SubSerie                ] = SUBSERIE
                           [Numero                  ] = NRNF
                           [CFOP                    ] = CFOP
                           If [RegETemp->Cancelada] = "S" 
                              Then [Situacao                ] = "S" 
                              Else [Situacao                ] = TIPONF   
                           EndIf 
                           If TIPONF = "E"
                              Then [Data Emissao/Recebimento] = StrVal(Year([RegETemp->Data de Emissao]))+
                                                                AlinhM(StrVal(Month([RegETemp->Data de Emissao])),2)+
                                                                AlinhM(StrVal(Day([RegETemp->Data de Emissao])),2)
                           EndIf
                   EndIf
                   [Valor Total         ] = [Valor Total         ] + [RegETemp->Valor Contabil]
                   [Valor do Ipi        ] = [Valor do Ipi        ] + [RegETemp->Ipi Debitado  ]
                   [Isenta Nao Tributado] = [Isenta Nao Tributado] + [RegETemp->Ipi Isento    ]
                   [Outras - Ipi        ] = [Outras - Ipi        ] + [RegETemp->Ipi Outros    ]
                   UnlockRecord
				  EndIf
				
          Gera_53("Entrada")

          If (CGC+NRNF+SERIE)<>doc_ant
             then doc_ant=CGC+NRNF+SERIE
          EndIf

	 EndIf

   Moveto "DadosC"
   Moveto [CNPJ]
   Locate [RegETemp->CGC]
   If Not RetVal
      Then End Down
           [CNPJ        ]=[RegETemp->CGC]
           [IE          ]=[RegETemp->IE]
           [Razao Social]=[RegETemp->Razao Social]
           [UF          ]=[RegETemp->Estado Fornecedor]
   EndIf

   Moveto "RegETemp"
   Skip
   If Eot() Then QuitLoop EndIf

EndWhile
Do_It!
ClearAll
EndProc  ; (Gera_Entrada)

;*******************************************************************************
;* Rotina p/ gravar dados referente a entrada Itens                            *
;*******************************************************************************
Proc GERA_ENTRADA54()

If IsEmpty("RegETemp")
   Then Return
EndIf

;***** Notas de Entrada/Estoque ************************************************

View   "\\Sistemas\\Estoque\\Itens"
View   "\\Sistemas\\Estoque\\NotaEC"
View   "\\Sistemas\\Estoque\\NotaEI"
View   "Reg_75"
View   "Reg_54"
CoEdit "RegETemp"
NR = NRecords("RegETemp")

WEST="**"
WEMP="**"
WNUM="**"

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando entradas/itens/estoque "+BARRA_STRING)

   If [Codigo do Documento]="TEL"  Or
	    [Codigo do Documento]="CEM"  Or
	    [Codigo do Documento]="GAS"  Or
	    [Codigo do Documento]="AGUA" Or
	    [Codigo do Documento]="NFSC" Or
	    [Codigo do Documento]="NFST" Or
	    [Codigo do Documento]="NFSF" Or
;;;;;;[Codigo do Documento]="NFAV" Or	    
      [Codigo do Documento]="CA"   Or
      [Codigo do Documento]="CTAC" Or
      [Codigo do Documento]="CTA"  Or
      [Codigo do Documento]="CT-E" Or
      [Codigo do Documento]="CTFC" Or
      [Codigo do Documento]="CTRM" Or
      [Codigo do Documento]="CTRC" Or
      SubStr([Especie da Nota Fiscal],1,3)="CTR" Or
      IsBlank([Numero do Lancamento])  Or
      [Cfo                   ]="1206"  Or ; Anula‡Æo de valor
      [Cfo                   ]="2206"     ; Anula‡Æo de valor
      Then Skip
           If not Eot()
              Then Loop
              Else QuitLoop
           EndIf
   EndIf

   If [Estado Fornecedor    ]=WEST And
      [Codigo da Empresa    ]=WEMP And
      [Numero do Lancamento ]=WNUM
      Then Skip
           If Eot() Then QuitLoop EndIf
           Loop
   EndIf
   WEST=[Estado Fornecedor    ]
   WEMP=[Codigo da Empresa    ]
   WNUM=[Numero do Lancamento ]

   Cont_Processo=True
   Moveto "\\Sistemas\\Estoque\\NotaEC"
   Moveto [Numero do Lancamento]
   Locate WNUM
   If Not RetVal
      Then Cont_Processo=False
   EndIf
                        
   If Cont_Processo
      Then 
           Switch
             Case [Codigo do Documento]="NFPR"            : MODELO="04"
             Case [Codigo do Documento]="NF-E"            : MODELO="55"
             Case SubStr([Codigo do Documento],1,3)="NFE" : MODELO="55"
             OtherWise                                    : MODELO="01"
           EndSwitch
           If Len([RegETemp->Numero da Nota Fiscal])>6
              Then NRNF =SubStr([RegETemp->Numero da Nota Fiscal],Len([RegETemp->Numero da Nota Fiscal])-5,6)
              Else NRNF =[RegETemp->Numero da Nota Fiscal]
           EndIf   
           SERIE   =MONTA_STRING(Pega_Serie("E",[RegETemp->Especie da Nota Fiscal],[RegETemp->Serie da Nota Fiscal]),"AN")
           SUBSERIE=[RegETemp->SubSerie da Nota Fiscal]
        ;;;If [RegETemp->Serie da Nota Fiscal]="D1"
        ;;;   Then SUBSERIE="1"
        ;;;EndIf   
           CFOP    =[RegETemp->Cfo]
           CGC     =AlinhM(MONTA_STRING([RegETemp->CGC],"N"),14)
           UF      = [RegETemp->Estado Fornecedor]

           COMPLEMENTONF=False
           For wp From 1 To 5
             ;**************************************************************************
             ;*Atualiza dados do tipo de registro 54 Depesas/Frete/Seguro
             ;**************************************************************************
             Switch
               Case wp=1 And [\Sistemas\Estoque\NotaEC->Valor do Frete]>0:
                 wwitem=991
                 Vr    =[\Sistemas\Estoque\NotaEC->Valor do Frete]

               Case wp=2 And [\Sistemas\Estoque\NotaEC->Valor do Seguro]>0:
                 wwitem=992
                 Vr    =[\Sistemas\Estoque\NotaEC->Valor do Seguro]

                Case wp=3 And [\Sistemas\Estoque\NotaEC->Valor Servico]>0:
                 wwitem=998
                 Vr    =[\Sistemas\Estoque\NotaEC->Valor Servico]

               Case wp=4 And [\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]>0:
                 wwitem=999
                 Vr    =[\Sistemas\Estoque\NotaEC->Valor Despesas Acessorias]

               Case wp=5 And [\Sistemas\Estoque\NotaEC->Valor Nota Fiscal]<=0 And
                             [\Sistemas\Estoque\NotaEC->Valor ICMS       ]>0:      
                 wwitem=997
                 Vr    =[\Sistemas\Estoque\NotaEC->Valor ICMS]

                 If TPEMPR="SIMPLES NACIONAL" Or
                    TPEMPR="SIMPLES NAC. ESRB" 
                    Then Vr=0
                 EndIf   

                 COMPLEMENTONF=True

               OtherWise: Loop  
             EndSwitch

             Moveto "Reg_54"
             End
             Down
             [Operacao                 ] = "E"
             [Cgc_Entrada              ] = CGC
             [Modelo                   ] = MODELO
             [Serie                    ] = SERIE
             [SubSerie                 ] = SUBSERIE
             [Numero                   ] = NRNF
             [Numero do Item           ] = Alinhm(StrVal(wwitem),3) 
             [Tipo                     ] = "54"
             [Cgc                      ] = CGC
             [Unidade da Federacao     ] = UF
             [CFOP                     ] = CFOP
             [CST                      ] = "   "
             [Codigo do Produto_Servico] = ""
             [Quantidade               ] = 0
             [Valor do Produto         ] = 0
             [Valor Desconto_Despesa   ] = vr
             [BCICMS                   ] = 0
             [Aliquota do ICMS         ] = 0
             [BCICMS Substituicao      ] = 0
             [Valor do IPI             ] = 0
             [Aliquota do ICMS         ] = 0
             UnlockRecord
           EndFor

           wwitem=0
           Moveto "\\Sistemas\\Estoque\\NotaEI"
           Moveto [Numero do Lancamento]
           Locate WNUM
           While [Numero do Lancamento]=WNUM And [Tipo do Item]<>"C" And COMPLEMENTONF=False
        ;;;While [Numero do Lancamento]=WNUM And COMPLEMENTONF=False

              Item_CST_ICMS=""
              Moveto "\\Sistemas\\Estoque\\Itens"
              Moveto [Codigo do Item]
              Locate [\Sistemas\Estoque\NotaEI->Codigo do Item]
              If RetVal
                 Then Item_CST_ICMS=[Tipo Tributacao]
              EndIf
              Moveto "\\Sistemas\\Estoque\\NotaEI"
              
              ;--- 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    ]
          
              CSOSN          =[\Sistemas\Estoque\NotaEI->CSOSN                   ]         
              CST_ICMS       =[\Sistemas\Estoque\NotaEI->Tipo Tributacao         ]
              ALIQ_ICMS      =[\Sistemas\Estoque\NotaEI->Aliquota de ICMS        ]
              If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
              VL_BC_ICMS     =[\Sistemas\Estoque\NotaEI->ICMS_BC                 ]
              VL_BC_ICMS_ST  =[\Sistemas\Estoque\NotaEI->ICMS_ST_BC              ]
              VL_IPI         =[\Sistemas\Estoque\NotaEI->Valor do IPI            ]

              If [\Sistemas\Estoque\NotaEI->Aliquota de ICMS]>0 Or
                 [\Sistemas\Estoque\NotaEI->Valor do ICMS   ]>0
                 Then If Search(SubStr(Item_CST_ICMS,2,2),"60")>0 and
                         [\Sistemas\Estoque\NotaEC->Tipo de Operacao]<>"D"; produto com ST nao aproveita ICMS
                         Then VL_BC_ICMS=0
                              VL_ICMS   =0
                              ALIQ_ICMS =0
                              
                              CST_ICMS  =Item_CST_ICMS
                      EndIf
                      
              EndIf

              ;;;;;If [\Sistemas\Estoque\NotaEI->Tributacao de IPI]="O"
              ;;;;;   Then VL_IPI=0
              ;;;;;EndIf   

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


             wwitem=wwitem+1
             ;**************************************************************************
             ;*Atualiza dados do tipo de registro 54
             ;**************************************************************************
             Moveto "Reg_54"
             End
             Down
             [Operacao                 ] = "E"
             [Cgc_Entrada              ] = CGC
             [Modelo                   ] = MODELO
             [Serie                    ] = SERIE
             [SubSerie                 ] = SUBSERIE
             [Numero                   ] = NRNF
             [Numero do Item           ] = Alinhm(StrVal(wwitem),3)
             [Tipo                     ] = "54"
             [Cgc                      ] = CGC
             [Unidade da Federacao     ] = UF
             [CFOP                     ] = CFOP
             [CST                      ] = CST_ICMS
             [Codigo do Produto_Servico] = [\Sistemas\Estoque\NotaEI->Codigo do Item      ]
             [Quantidade               ] = [\Sistemas\Estoque\NotaEI->Quantidade          ]
             [Valor do Produto         ] = VL_ITEM
             [Valor Desconto_Despesa   ] = VL_DESC
             [BCICMS                   ] = VL_BC_ICMS
             [BCICMS Substituicao      ] = VL_BC_ICMS_ST
             [Valor do IPI             ] = VL_IPI
             [Aliquota do ICMS         ] = ALIQ_ICMS

             If TPEMPR="SIMPLES NACIONAL"                        Or
                TPEMPR="SIMPLES NAC. ESRB"                       Or 
                [\Sistemas\Estoque\NotaEC->Tipo de Operacao]="A" Or ; Aplica‡Æo Direta
                SearchFrom("155",CFOP,1)>0                       Or ; item de consumo
                SearchFrom("255",CFOP,1)>0                               
                Then 
                     switch
                       case sys_Codigo_Cliente="0290":

                       otherwise:
                         [BCICMS           ] =0
                         [Aliquota do ICMS ] =0
                        
                     endswitch
                     
             EndIf
             UnlockRecord

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

             Moveto "\\Sistemas\\Estoque\\NotaEI"
             Skip
             If Eot() Then QuitLoop EndIf
           EndWhile
   EndIf

   Moveto "RegETemp"
   Skip
   If Eot() Then QuitLoop EndIf
EndWhile
Do_It!
ClearAll




;***** Notas de Entrada/Faturamento ********************************************

View "DAE"
View "DAEI"
View "\\Sistemas\\Estoque\\Itens"
View   "\\Sistemas\\Vendas\\Destin"
View   "\\Sistemas\\Vendas\\NotaC"
View   "\\Sistemas\\Vendas\\Notai"
View   "Reg_75"
View   "Reg_54"
CoEdit "RegETemp"
NR = NRecords("RegETemp")

WEST="**"
WEMP="**"
WNUM="**"
WSER="**"

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando entradas/itens/faturamento "+BARRA_STRING)

   If [Especie da Nota Fiscal]="C/F" Or
      [Cancelada]="S" Or
      [Cancelada]="2" Or
      [Cancelada]="4" Or
      Not IsBlank([Numero do Lancamento]) Or
      [Cfo                   ]="1206"  Or ; Anula‡Æo de valor
      [Cfo                   ]="2206"     ; Anula‡Æo de valor
      Then Skip
           If Eot() Then QuitLoop EndIf
           Loop
   EndIf

   If [Estado Fornecedor    ]=WEST And
      [Codigo da Empresa    ]=WEMP And
      SubStr([Numero da Nota Fiscal],2,6)=WNUM And
      [Serie da Nota Fiscal ]=WSER
      Then Skip
           If Eot() Then QuitLoop EndIf
           Loop
   EndIf
   WEST=[Estado Fornecedor    ]
   WEMP=[Codigo da Empresa    ]
   WNUM=SubStr([Numero da Nota Fiscal],2,6)
   WSER=[Serie da Nota Fiscal ]

   Cont_Processo=True
   Moveto "\\Sistemas\\Vendas\\NotaC"
   Moveto [Codigo da Empresa]
   Locate WEMP,WNUM,WSER
   If Not RetVal
      Then Cont_Processo=False
      Else If SubStr([Tipo do Documento],1,2)<>"NF" 
              Then Cont_Processo=False
           EndIf
   EndIf

   If Cont_Processo
      Then  
					 Switch
					   Case SubStr([Codigo do Documento],1,3)="NFE" : MODELO="55"
					   OtherWise                                    : MODELO="01"
					 EndSwitch
           NRNF    =SubStr([RegETemp->Numero da Nota Fiscal],2,6)
           SERIE   =MONTA_STRING(Pega_Serie("E",[RegETemp->Especie da Nota Fiscal],[RegETemp->Serie da Nota Fiscal]),"AN")
           SUBSERIE=[RegETemp->SubSerie da Nota Fiscal]
        ;;;If [RegETemp->Serie da Nota Fiscal]="D1"
        ;;;   Then SUBSERIE="1"
        ;;;EndIf   
           CFOP    =[RegETemp->Cfo] 
           CGC     =AlinhM(MONTA_STRING([RegETemp->CGC],"N"),14)
           UF      =[RegETemp->Estado Fornecedor]

           For wp From 1 To 4
             ;**************************************************************************
             ;*Atualiza dados do tipo de registro 54 Depesas/Frete/Seguro
             ;**************************************************************************
             Switch
               Case wp=1 And ([\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="+" Or
                              [\Sistemas\Vendas\NotaC->Frete Incluso na Nota]="S") And
                              [\Sistemas\Vendas\NotaC->Valor do Frete]>0:
                 wwitem=991
                 Vr    =[\Sistemas\Vendas\NotaC->Valor do Frete]

               Case wp=2 And [\Sistemas\Vendas\NotaC->Valor do Seguro]>0:
                 wwitem=992
                 Vr    =[\Sistemas\Vendas\NotaC->Valor do Seguro]

               Case wp=3 And [\Sistemas\Vendas\NotaC->Valor Servico]>0:
                 wwitem=998
                 Vr    =[\Sistemas\Vendas\NotaC->Valor Servico]

               Case wp=4 And [\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]>0:
                 wwitem=999
                 Vr    =[\Sistemas\Vendas\NotaC->Valor Despesas Acessorias]

               OtherWise: Loop  
             EndSwitch

             Moveto "Reg_54"
             End
             Down
             [Operacao                 ] = "E"
             [Cgc_Entrada              ] = CGC
             [Modelo                   ] = MODELO
             [Serie                    ] = SERIE
             [SubSerie                 ] = SUBSERIE
             [Numero                   ] = NRNF
             [Numero do Item           ] =Alinhm(StrVal(wwitem),3) 
             [Tipo                     ] = "54"
             [Cgc                      ] = CGC
             [Unidade da Federacao     ] = UF
             [CFOP                     ] = CFOP
             [CST                      ] = "   "
             [Codigo do Produto_Servico] = ""
             [Quantidade               ] = 0
             [Valor do Produto         ] = 0
             [Valor Desconto_Despesa   ] = vr
             [BCICMS                   ] = 0
             [BCICMS Substituicao      ] = 0
             [Valor do IPI             ] = 0
             [Aliquota do ICMS         ] = 0
             UnlockRecord
           EndFor
           
           SEM_RED_BCICMS="1"
           Moveto "\\Sistemas\\Vendas\\Destin"
           Moveto [Codigo da Destinacao]
           Locate [\Sistemas\Vendas\NotaC->Codigo da Destinacao]
           If Not Retval
              Then Mensagem("Destina‡Æo nÆo encontrada-[DESTIN] : "+[\Sistemas\Vendas\NotaC->Codigo da Destinacao])
              Else SEM_RED_BCICMS=[\Sistemas\Vendas\Destin->Sem Reducao BCICMS]
           EndIf  
           
           Moveto "\\Sistemas\\Vendas\\NotaC" 

          lancto_dae=0
          If [RegETemp->Emitente da Nota Fiscal]="P" And
             (IsBlank([RegETemp->Substituicao ICMS]) Or [RegETemp->Substituicao ICMS]=0)
             Then 
                  Moveto "DAE"
                  Moveto [Codigo da Empresa]
                  Locate IndexOrder By "Ind_nf" [RegETemp->Codigo da Empresa],NRNF,SERIE
                  If RetVal
                     Then lancto_dae=[Numero do Lancamento]
                  EndIF
           EndIf

           wwitem   =0
           Moveto "\\Sistemas\\Vendas\\NotaI"
           Moveto [Codigo da Empresa]
           Locate [\Sistemas\Vendas\NotaC->Codigo da Empresa  ],
                  [\Sistemas\Vendas\NotaC->Numero do Documento],
                  [\Sistemas\Vendas\NotaC->Serie do Documento ]
           If RetVal
              Then While [\Sistemas\Vendas\NotaI->Codigo da Empresa  ]=[\Sistemas\Vendas\NotaC->Codigo da Empresa  ] And
                         [\Sistemas\Vendas\NotaI->Numero do Documento]=[\Sistemas\Vendas\NotaC->Numero do Documento] And
                         [\Sistemas\Vendas\NotaI->Serie do Documento ]=[\Sistemas\Vendas\NotaC->Serie do Documento ]
                   ;;;;;; And [\Sistemas\Vendas\NotaI->TIpo do Item       ]<>"C" 
                         
                      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"
                      
                      ;--- 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     ] 
          
                      CSOSN          =[\Sistemas\Vendas\NotaI->CSOSN                   ]
                      CST_ICMS       =[\Sistemas\Vendas\NotaI->Tipo Tributacao         ]
                      ALIQ_ICMS      =[\Sistemas\Vendas\NotaI->Aliquota de ICMS        ]
                      ALIQ_RD_ICMS   =[\Sistemas\Vendas\NotaI->Aliquota Reduzida BCICMS]
                      ALIQ_ST        =[\Sistemas\Vendas\NotaI->ICMS_ST_Aliquota        ]
                      If IsBlank(ALIQ_ICMS)    Or ALIQ_ICMS<=0    Then ALIQ_ICMS=0    EndIf
                      If IsBlank(ALIQ_RD_ICMS) Or ALIQ_RD_ICMS<=0 Then ALIQ_RD_ICMS=0 EndIf
                      If IsBlank(ALIQ_ST)      Or ALIQ_ST<=0      Then ALIQ_ST=0      EndIf
                      VL_BC_ICMS     =[\Sistemas\Vendas\NotaI->ICMS_BC                 ]
                      VL_ICMS        =[\Sistemas\Vendas\NotaI->Valor do ICMS           ]
                      VL_BC_ICMS_ST  =[\Sistemas\Vendas\NotaI->ICMS_ST_BC              ]
                      VL_ICMS_ST     =[\Sistemas\Vendas\NotaI->ICMS_ST_Valor           ]
                      MVA_ST         =[\Sistemas\Vendas\NotaI->MVA                     ]

                      If [\Sistemas\Vendas\NotaI->Aliquota de ICMS]>0 Or
                         [\Sistemas\Vendas\NotaI->Valor do ICMS   ]>0
                         Then If Search(SubStr(Item_CST_ICMS,2,2),"60")>0 and
                                 CFOP<>"3102" And CFOP<>"3949"; produto com ST nao aproveita ICMS
                                 Then VL_BC_ICMS=0
                                      VL_ICMS   =0
                                      ALIQ_ICMS =0
                              EndIf
                      EndIf
          
                      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            ]
          
                      VL_OPR=(VL_ITEM-VL_DESC)+(VL_IPI+VL_ICMS_ST)+VR_ACRESC
                      ;-----------------------------------------------------------------

                      If lancto_dae<>0
                         Then Moveto "DAEI"
                              Moveto [Numero do Lancamento]
                              Locate lancto_dae, [\Sistemas\Vendas\NotaI->Item do Documento]
                              If RetVal
                                Then VL_BC_ICMS_ST=[DAEI->BCSubstituicao ICMS]
                                     VL_ICMS_ST   =0
                              EndIf       
                      EndIf

                     wwitem=wwitem+1
                     ;**************************************************************************
                     ;*Atualiza dados do tipo de registro 54
                     ;**************************************************************************
                     Moveto "Reg_54"
                     End
                     Down
                     [Operacao                 ] = "E"
                     [Cgc_Entrada              ] = CGC
                     [Modelo                   ] = MODELO
                     [Serie                    ] = SERIE
                     [SubSerie                 ] = SUBSERIE
                     [Numero                   ] = NRNF
                     [Numero do Item           ] = Alinhm(StrVal(wwitem),3)
                     [Tipo                     ] = "54"
                     [Cgc                      ] = CGC
                     [Unidade da Federacao     ] = UF
                     [CFOP                     ] = CFOP 
                     [CST                      ] = CST_ICMS
                     [Codigo do Produto_Servico] = [\Sistemas\Vendas\NotaI->Codigo do Item      ]
                     [Quantidade               ] = [\Sistemas\Vendas\NotaI->Quantidade          ]
                     [Valor do Produto         ] = VL_ITEM
                     [Valor Desconto_Despesa   ] = VL_DESC
                     [BCICMS                   ] = VL_BC_ICMS
                     [BCICMS Substituicao      ] = VL_BC_ICMS_ST
                     [Valor do IPI             ] = VL_IPI
                     [Aliquota do ICMS         ] = ALIQ_ICMS

                     If TPEMPR="SIMPLES NACIONAL" Or
                        TPEMPR="SIMPLES NAC. ESRB" 
                        Then [BCICMS           ] =0
                             [Aliquota do ICMS ] =0
                     EndIf
                     If TPEMPR="SIMPLES NACIONAL" And MODELO="55"
                        Then [CST              ] =CSOSN 
                     EndIf
                     UnlockRecord
        
                     Grava_Itens([\Sistemas\Vendas\NotaI->Codigo do Item],"Nota Entrada: "+[\Sistemas\Vendas\NotaC->Numero do Documento ])
        
                     Moveto "\\Sistemas\\Vendas\\NotaI"
                     Skip
                     If Eot() Then QuitLoop EndIf
                  EndWhile

           EndIf
   EndIf

   Moveto "RegETemp"
   Skip
   If Eot() Then QuitLoop EndIf
EndWhile
Do_It!
ClearAll

EndProc  ; (Gera_Entrada54)

;*******************************************************************************
;* Rotina p/ gravar dados referente a entrada Itens                            *
;*******************************************************************************
Proc GERA_ENTRADA55()

If IsEmpty("\\Sistemas\\Estoque\\Gnre")
   Then Return
EndIf

;***** Notas de Entrada/Estoque ************************************************

{Ask} {\\Sistemas\\Estoque\\Gnre}
Moveto [Codigo da Empresa ] TypeIn "_emp,~VSDGEMPRESA.."
Moveto [IE_UF Favorecida  ] Check
Moveto [Data GNRE         ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [UF                ] Check
Moveto [UF Favorecida     ] Check
Moveto [Banco GNRE        ] Check
Moveto [Agencia GNRE      ] Check
Moveto [Numero GNRE       ] Check
Moveto [Valor GNRE        ] Check
Moveto [Data Vencimento   ] Check
Moveto [Mes Referente     ] Check
Moveto [Ano Referente     ] Check
Moveto [Numero do Convenio] Check
{Ask} {\\Sistemas\\Icms_ipi\\ReceitaE}
Moveto [Codigo da Empresa ] Example "emp"
Moveto [CGC               ] Check
Do_It!
ClearImage

If Not IsEmpty("Answer")
   Then View "Reg_55" 
        Coedit "Answer"
          Scan      
            Moveto "Reg_55"  
            End Down
            
            [Tipo              ] = "55"
            [CNPJ Contribuinte ] = Tira_CharNum([Answer->CGC              ])            
            [IE_UF Favorecida  ] = Tira_CharNum([Answer->IE_UF Favorecida ])
            [Data GNRE         ] = StrVal(Year([Answer->Data GNRE]))+
                                   AlinhM(StrVal(Month([Answer->Data GNRE])),2)+
                                   AlinhM(StrVal(Day([Answer->Data GNRE])),2)
            [UF                ] = [Answer->UF                             ]
            If [UF]="EX"
               Then [UF        ] = [Answer->UF Favorecida                  ]
            EndIf   
            [UF Favorecida     ] = [Answer->UF Favorecida                  ]
            [Banco GNRE        ] = [Answer->Banco GNRE                     ]
            [Agencia GNRE      ] = Tira_CharNum([Answer->Agencia GNRE      ])
            [Numero GNRE       ] = Tira_CharNum([Answer->Numero GNRE       ])
            [Valor GNRE        ] = [Answer->Valor GNRE                     ] 
            [Data Vencimento   ] = StrVal(Year([Answer->Data Vencimento]))+
                                   AlinhM(StrVal(Month([Answer->Data Vencimento])),2)+
                                   AlinhM(StrVal(Day([Answer->Data Vencimento])),2)
            [Mes Referente     ] = [Answer->Mes Referente                  ]
            [Ano Referente     ] = [Answer->Ano Referente                  ]
            [Numero do Convenio] = Tira_CharNum([Answer->Numero do Convenio])
            
            Moveto "Answer"
          
        EndScan
        Do_It!
        ClearImage
EndIf

EndProc ;GERA_ENTRADA55()

;*******************************************************************************
;* Rotina p/ gravar dados referente a entrada CTR/NFST                         *
;*******************************************************************************
Proc GERA_ENTRADA70()
If IsEmpty("RegETemp")
   Then Return
EndIf

View "Reg_70"
View "Dadosc"
CoEdit "RegETemp"

NR = NRecords("RegETemp")

While True
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando dados entradas CTR "+BARRA_STRING)

   If [Codigo do Documento]<>"NFST" And
      [Codigo do Documento]<>"NFSF"
    Then 
         If [Codigo do Documento]<>"CA"   And
            [Codigo do Documento]<>"CTAC" And
            [Codigo do Documento]<>"CTA"  And
            [Codigo do Documento]<>"CT-E" And
            [Codigo do Documento]<>"CTFC" And
            [Codigo do Documento]<>"CTRM" And
            [Codigo do Documento]<>"CTRC" And
        SubStr([Especie da Nota Fiscal],1,3)<>"CTR"
      Then Skip
           If not Eot()
              Then Loop
              Else QuitLoop
           EndIf
     EndIf      
   EndIf

   Switch
     Case [Codigo do Documento]="CA"                 : MODELO="10"
     Case [Codigo do Documento]="CTAC"               : MODELO="09"
     Case [Codigo do Documento]="CTA"                : MODELO="8B"
     Case [Codigo do Documento]="CT-E"               : MODELO="57"
     Case [Codigo do Documento]="CTFC"               : MODELO="11"
     Case [Codigo do Documento]="CTRM"               : MODELO="26"
     Case [Codigo do Documento]="CTRC"               : MODELO="08"
     Case [Codigo do Documento]="NFST"               : MODELO="07"
     Case [Codigo do Documento]="NFSF"               : MODELO="27"
     Case SubStr([Especie da Nota Fiscal],1,3)="CTR" : MODELO="08"
   EndSwitch
   If Len([RegETemp->Numero da Nota Fiscal])>6
      Then NRNF =SubStr([RegETemp->Numero da Nota Fiscal],Len([RegETemp->Numero da Nota Fiscal])-5,6)
      Else NRNF =[RegETemp->Numero da Nota Fiscal]
   EndIf   
   SERIE    =[RegETemp->Serie da Nota Fiscal ]
   SUBSERIE =[RegETemp->SubSerie da Nota Fiscal ]
   CFOP     =[RegETemp->Cfo]
   ALIQ_ICMS=[RegETemp->Aliquota de Icms]
   CGC      =AlinhM(MONTA_STRING([RegETemp->CGC],"N"),14)
   IE       =Completa(MONTA_STRING([RegETemp->IE],"AN"),14," ")
   UF       =[RegETemp->Estado Fornecedor]
   DTOP     =StrVal(Year([RegETemp->Data de Entrada]))+
             AlinhM(StrVal(Month([RegETemp->Data de Entrada])),2)+
             AlinhM(StrVal(Day([RegETemp->Data de Entrada])),2)

   FRETE    =[RegETemp->Frete por Conta]
   if FRETE="4" or FRETE="5"
      then FRETE="3"
   endif              

   ;**************************************************************************
   ;*Atualiza dados do tipo de registro 70  - Resumo CTR/NFST
   ;**************************************************************************
   Moveto "Reg_70"
   Moveto [Cgc]
   Locate CGC,NRNF,MODELO,SERIE,SUBSERIE,CFOP
   If Not Retval
      Then End
           Down

           [Cgc                     ] = CGC
           [Tipo                    ] = "70"
           [Inscricao Estadual      ] = IE
           [Data Emissao/Recebimento] = DTOP
           [Unidade da Federacao    ] = UF
           [Modelo                  ] = MODELO
           [Serie                   ] = SERIE
           [SubSerie                ] = SUBSERIE
           [Numero                  ] = NRNF
           [CFOP                    ] = CFOP
           [Situacao                ] = [RegETemp->Cancelada]
        ;;;If [Situacao]="S" Then [CFOP]="0000" EndIf
        ;;;If [Situacao]="4" Then [CFOP]="0000" EndIf
           [CIF_FOB                 ] = FRETE

   EndIf
   [Valor Total            ] = [Valor Total            ] + [RegETemp->Valor Contabil   ]
   [Base de Calculo do Icms] = [Base de Calculo do Icms] + [RegETemp->Base Calculo Icms]
   [Valor do Icms          ] = [Valor do Icms          ] + [RegETemp->Icms Debitado    ]
   [Isenta Nao Tributado   ] = [Isenta Nao Tributado   ] + [RegETemp->Icms Isento      ]
   [Outras                 ] = [Outras                 ] + [RegETemp->Icms Outros      ]
   UnlockRecord


   Moveto "DadosC"
   Moveto [CNPJ]
   Locate [RegETemp->CGC]
   If Not RetVal
      Then End Down
           [CNPJ        ]=[RegETemp->CGC]
           [IE          ]=[RegETemp->IE]
           [Razao Social]=[RegETemp->Razao Social]
           [UF          ]=[RegETemp->Estado Fornecedor]
   EndIf

   Moveto "RegETemp"
   Skip
   If Eot() Then QuitLoop EndIf

EndWhile
Do_It!
ClearAll
EndProc  ; (Gera_Entrada70)

;*******************************************************************************
;* Rotina p/ gravar dados Substituicao Tributaria                              *
;*******************************************************************************
Proc Gera_53(TpMov)
Private TpMov

Switch
  Case TpMov="Entrada":

       If [RegETemp->Emitente da Nota Fiscal]="P" And
          (IsBlank([RegETemp->Substituicao ICMS]) Or [RegETemp->Substituicao ICMS]=0) And
          (CGC+NRNF+SERIE)<>doc_ant And
          [RegETemp->Cancelada]="2" 
          Then
               Moveto "DAE"
               Moveto [Codigo da Empresa]
               Locate IndexOrder By "Ind_nf" [RegETemp->Codigo da Empresa],NRNF,SERIE
               If RetVal
                  Then
                        Moveto "Reg_53"
                        End
                        Down
                        [Tipo                      ]="53"
                        [CGC                       ]=CGC
                        [Inscricao Estadual        ]=IE
                        [Data Emissao/Recebimento  ]=DTOP
                        [Unidade da Federacao      ]=UF
                        [Modelo                    ]=MODELO
                        [Serie                     ]=SERIE
                        [SubSerie                  ]=SUBSERIE
                        [Numero                    ]=NRNF
                        [CFOP                      ]=[DAE->CFOP]    
                        [Emitente                  ]=[DAE->Emitente da Nota Fiscal]
                        [Base Calc ICMS Subst Trib ]=[DAE->BCSubstituicao ICMS    ]
                        [Icms Retido               ]=[DAE->Substituicao ICMS      ]
                        [Despesas Acessorias       ]=[DAE->Despesas               ]
                        [Situacao                  ]=[RegETemp->Cancelada         ]
                        [Codigo Antecipacao        ]=[DAE->Codigo Antecipacao     ]
                        UnLockRecord
                  
               EndIf
          
               Moveto "RegETemp" 
               Return
       EndIf   

    If ([RegETemp->Recolhimento Substituicao]="1"  And [RegETemp->Substituicao ICMS]>0) Or
       ([RegETemp->Recolhimento Substituicao]<>"1" And [RegETemp->Substituicao ICMS]>0) 
       Then Moveto "Reg_53"
            End Down
            [Tipo                      ]="53"
            [CGC                       ]=CGC
            [Inscricao Estadual        ]=IE
            [Data Emissao/Recebimento  ]=DTOP
            [Unidade da Federacao      ]=UF
            [Modelo                    ]=MODELO
            [Serie                     ]=SERIE
            [SubSerie                  ]=SUBSERIE
            [Numero                    ]=NRNF
            [CFOP                      ]=CFOP
            [Emitente                  ]=[RegETemp->Emitente da Nota Fiscal]
            [Base Calc ICMS Subst Trib ]=[RegETemp->BCSubstituicao ICMS]
            [Icms Retido               ]=[RegETemp->Substituicao ICMS]
            [Despesas Acessorias       ]=[RegETemp->Despesas]
            If [RegETemp->Cancelada] = "S" 
               Then [Situacao                ] = "S" 
               Else [Situacao                ] = "N"   
            EndIf 
            [Codigo Antecipacao        ]=""
            UnLockRecord
    EndIf

    If ([RegETemp->Recolhimento Substituicao]<>"1" And [RegETemp->BC Substituicao Destinat]>0) 
        Then
        Moveto "Reg_53"
        End
        Down
        [Tipo                      ]="53"
        [CGC                       ]=CGC
        [Inscricao Estadual        ]=IE
        [Data Emissao/Recebimento  ]=DTOP
        [Unidade da Federacao      ]=UF
        [Modelo                    ]=MODELO
        [Serie                     ]=SERIE
        [SubSerie                  ]=SUBSERIE
        [Numero                    ]=NRNF
        [CFOP                      ]=CFOP
        [Emitente                  ]=[RegETemp->Emitente da Nota Fiscal]
        [Base Calc ICMS Subst Trib ]=[RegETemp->BC Substituicao Destinat]
        [Icms Retido               ]=[RegETemp->Vr Substituicao Destinat]
        [Despesas Acessorias       ]=[RegETemp->Despesas]
        [Situacao                  ]=[RegETemp->Cancelada         ]
        Switch
          Case [RegETemp->Recolhimento Substituicao]="2": [Codigo Antecipacao]="1"
          Case [RegETemp->Recolhimento Substituicao]="3": [Codigo Antecipacao]="2"
          Case [RegETemp->Recolhimento Substituicao]="4": [Codigo Antecipacao]="3"
          Case [RegETemp->Recolhimento Substituicao]="5": [Codigo Antecipacao]="4"
        EndSwitch
        UnLockRecord
    EndIf

  Case TpMov="Saida":
    If IsBlank([RegSTemp->Substituicao ICMS]) Or
       [RegSTemp->Substituicao ICMS]=0
       Then Return
    EndIf

    Moveto "Reg_53"
    End
    Down
    [Tipo                      ]="53"
    [Cgc                       ]=CGC
    [Inscricao Estadual        ]=IE
    [Data Emissao/Recebimento  ]=DTOP
    [Unidade da Federacao      ]=UF
    [Modelo                    ]=MODELO
    [Serie                     ]=SERIE
    [SubSerie                  ]=SUBSERIE
    [Numero                    ]=NRNF
    [CFOP                      ]=CFOP
    [Emitente                  ]="P"
    [Base Calc ICMS Subst Trib ]=[RegSTemp->BCSubstituicao ICMS]
    [Icms Retido               ]=[RegSTemp->Substituicao ICMS]
    [Despesas Acessorias       ]=[RegSTemp->Despesas]
    Switch
      Case [RegSTemp->Cancelada]="S": [Situacao          ]="S"
      Case [RegSTemp->Cancelada]="4": [Situacao          ]="4"
      Case [RegSTemp->Cancelada]="X": [Situacao          ]="X"
      Case [RegSTemp->Cancelada]="2": [Situacao          ]="2"
      OtherWise                     : [Situacao          ]="N"
    EndSwitch
    [Codigo Antecipacao        ]=""
    UnLockRecord

EndSwitch

EndProc

;*******************************************************************************
;* Rotina p/ gravar dados Codigo de Barra                                      *
;*******************************************************************************
Proc Gera_88EAN()
Private Itok, coditem

View "\\Sistemas\\Estoque\\Itens"
View "Reg_88cb"
CoEdit "Reg_75"
NR = NRecords("Reg_75")
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando itens com c¢digo de barra 1/2 "+BARRA_STRING)

   Moveto "\\Sistemas\\Estoque\\Itens"
   Moveto [Codigo do Item]
   Locate RTrim([Reg_75->Codigo do Produto_Servico])
   If RetVal
      Then itOk=true 
           Switch
             Case [Inativo]="S"                              : itOk=false
             Case Search("A-EAN13",[Tipo Codigo_Barras])>0   : versaoean="13"
             Case Search("EAN8"   ,[Tipo Codigo_Barras])>0   : versaoean="08"
             Case Search("EAN12"  ,[Tipo Codigo_Barras])>0   : versaoean="12"
             Case Search("EAN14"  ,[Tipo Codigo_Barras])>0   : versaoean="14"
             Case Search("EAN 14" ,[Tipo Codigo_Barras])>0   : versaoean="14"
             OtherWise                                       : itOk=false
           EndSwitch
           If itOk
              Then Moveto "Reg_88cb"
                   End Down
                   [Tipo                     ]="88"
                   [SubTipo                  ]="EAN"
                   [Versao do Codigo EAN     ]=versaoean
                   [Codigo Produto_Servico   ]=[\Sistemas\Estoque\Itens->Codigo do Item   ]
                   [Descricao Produto_Servico]=[\Sistemas\Estoque\Itens->Descricao do Item]
                   [Unidade                  ]=[\Sistemas\Estoque\Itens->Unidade Fiscal   ]
                   [Codigo de Barra          ]=[\Sistemas\Estoque\Itens->Codigo de Barras ]
                   UnLockRecord
           EndIf
   EndIf
   
   Moveto "Reg_75"
EndScan
Do_It!
ClearAll

EndProc  ; (Grava_88EAN)

;*******************************************************************************
;* Rotina que gera o registro 88                                               *
;*******************************************************************************
Proc Gera_Reg88()
Private MES_INI, ANO_INI, MES_FIM, ANO_FIM

MESI = AlinhM(StrVal(Month(VSDGDTINI)),2)
ANOI = StrVal(Year(VSDGDTINI))

MESF = AlinhM(StrVal(Month(VSDGDTFIM)),2)
ANOF = StrVal(Year(VSDGDTFIM))

If IsTable("reg_88se")
   Then Delete "reg_88se"
EndIf

If IsTable("reg_88si")
   Then Delete "reg_88si"
EndIf

{Ask} {Reg_88}
Moveto [Codigo da Empresa ] Example "CodE" TypeIn ", ~VSDGEMPRESA.."
Moveto [Mes Referente     ] Example "MesR" TypeIn ", ~MESI"
Moveto [Ano Referente     ] Example "AnoR" TypeIn ", ~ANOI"
Moveto [Data do Inventario] Check
Moveto [CGC Empresa       ] Check

{Ask} {Reg_88R1} Check
Moveto [Codigo da Empresa ] Example "CodE"
Moveto [Mes Referente     ] Example "MesR"
Moveto [Ano Referente     ] Example "AnoR"
Do_It!
ClearImage

Moveto "Reg_88"
ClearImage

Moveto "Reg_88R1"
ClearImage

Rename "Answer" "reg_88se"
  


{Ask} {Reg_88R2} 
Moveto [Codigo da Empresa     ] Example "CodE" TypeIn ", ~VSDGEMPRESA.."
Moveto [Mes Referente         ] Example "MesR" TypeIn ", ~MESI"
Moveto [Ano Referente         ] Example "AnoR" TypeIn ", ~ANOI"
Moveto [Sequencia             ] Example "Seq"
Moveto [CNPJ do Remetente     ] Check
Moveto [Modelo do Docto Fiscal] Check
Moveto [Serie da Nota Fiscal  ] Check
Moveto [Numero da Nota Fiscal ] Check
Moveto [Data Entrada          ] Check
Moveto [CFOP                  ] Check
Moveto [CST                   ] Check

{Ask} {Reg_88R3} Check
Moveto [Codigo da Empresa     ] Example "CodE" TypeIn ", ~VSDGEMPRESA.."
Moveto [Mes Referente         ] Example "MesR"
Moveto [Ano Referente         ] Example "AnoR"
Moveto [Sequencia da Nota     ] Example "Seq"
Do_It!
ClearImage

Moveto "Reg_88R2"
ClearImage

Moveto "Reg_88R3"
ClearImage

Rename "Answer" "reg_88si" 


EndProc ;Gera_Reg88()

;*******************************************************************************
;* Rotina que gera o registro 60 em ordem                                      *
;*******************************************************************************
Proc Ordem_Reg60()

Moveto "Reg_60D"
Moveto [Tipo]
Locate "60", "D", r60dt, r60nsf  
If RetVal
  Then While [Tipo                   ]="60"  and
             [Mestre_Analitico       ]="D"   and
             [Data de Emissao        ]=r60dt and
             [Numero serie Fabricacao]=r60nsf
       
         Print File ARQ Completa([Tipo                     ],02," ")
         Print File ARQ Completa([Mestre_Analitico         ],01," ")
         Print File ARQ Completa([Data de Emissao          ],08," ")
         Print File ARQ Completa([Numero Serie Fabricacao  ],20," ")
         Print File ARQ Completa([Codigo do Produto_Servico],14," ")
         Print File ARQ Valor_Str([Quantidade              ],13,3)
         Print File ARQ Valor_Str([Valor da Mercadoria     ],16,2)
         Print File ARQ Valor_Str([BCICMS                  ],16,2)
         Print File ARQ Completa([Tributacao ou Aliquota   ],04," ")
         Print File ARQ Valor_Str([Valor do ICMS           ],13,2)
         Print File ARQ Fill(" ",19)
         Print File ARQ "\n"
         Cont_60 = Cont_60 + 1
         
         Skip
         If EOT() Then QuitLoop EndIf
       EndWhile
Endif       

If Not IsEmpty("Reg_60I")
   Then Moveto "Reg_60I"
        Moveto [Tipo]
        Locate "60", "I", r60dt, r60nsf  
        If RetVal
          Then While [Tipo                   ]="60"  and
                     [Mestre_Analitico       ]="I"   and
                     [Data de Emissao        ]=r60dt and
                     [Numero serie Fabricacao]=r60nsf
        
                 Print File ARQ Completa([Tipo                     ],02," ")
                 Print File ARQ Completa([Mestre_Analitico         ],01," ")
                 Print File ARQ Completa([Data de Emissao          ],08," ")
                 Print File ARQ Completa([Numero Serie Fabricacao  ],20," ")
                 Print File ARQ Completa([Modelo                   ],02," ")
                 Print File ARQ Completa([Numero                   ],06," ")
                 Print File ARQ Completa([Numero do Item           ],03," ")
                 Print File ARQ Completa([Codigo do Produto_Servico],14," ")
                 Print File ARQ Valor_Str([Quantidade              ],13,3)
                 Print File ARQ Valor_Str([Valor do Produto        ],13,2)
                 Print File ARQ Valor_Str([BCICMS                  ],12,2)
                 Print File ARQ Completa([Tributacao ou Aliquota   ],4," ")
                 Print File ARQ Valor_Str([Valor do ICMS           ],12,2)
                 Print File ARQ Fill(" ",16)
                 Print File ARQ "\n"
                 Cont_60 = Cont_60 + 1
                 
                 Skip
                 If EOT() Then QuitLoop EndIf
               EndWhile
        EndIf
EndIf

Endproc

;*******************************************************************************
;* Rotina que gera o arquivo padrao texto para receita
;*******************************************************************************
Proc GERA_ARQUIVO_TEXTO()
Aguarde("Aguarde, exportando dados")
ClearAll

;;;;;;;;;;;;;;;;;;;Grava o registro principal de envio dados contribuinte 10/11
View "ReceitaE"
Moveto [Codigo da Empresa]
Locate VSDGEMPRESA
CNPJ_Reg10=[CGC]
Print File ARQ Completa("10",02," ")
Print File ARQ Completa([CGC                  ],14," ")
Print File ARQ Completa([Inscricao Estadual   ],14," ")
Print File ARQ Completa([Nome do Contribuinte ],35," ")
Print File ARQ Completa([Municipio            ],30," ")
Print File ARQ Completa([Unidade da Federacao ],02," ")
Print File ARQ AlinhM(Tira_CharNum([Fax       ]),10)
Print File ARQ StrVal(Year(VSDGDTINI))+AlinhM(StrVal(Month(VSDGDTINI)),2)+AlinhM(StrVal(Day(VSDGDTINI)),2)
Print File ARQ StrVal(Year(VSDGDTFIM))+AlinhM(StrVal(Month(VSDGDTFIM)),2)+AlinhM(StrVal(Day(VSDGDTFIM)),2)
Print File ARQ Completa([Codigo do Convenio   ],01," ")
Print File ARQ Completa([Codigo de Operacao   ],01," ")
Print File ARQ Completa(FINALIDADE_ARQUIVO,01," ")+"\n"
Cont_10 = Cont_10 + 1

Print File ARQ Completa("11",2," ")
Print File ARQ Completa([Logradouro  ],34," ")
Print File ARQ AlinhM(Tira_CharNum([Numero]),5)
Print File ARQ Completa([Complemento ],22," ")
Print File ARQ Completa([Bairro      ],15," ")
Print File ARQ Completa([Cep],8," ")
Print File ARQ Completa([Nome Contato],28," ")
Print File ARQ AlinhM(Tira_CharNUm([Telefone]),12)+"\n"
Cont_11 = Cont_11 + 1

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 50
If Not IsEmpty("Reg_50")
   Then View "Reg_50"
        Scan
           Print File ARQ Completa([Tipo                    ],02," ")
           If [Unidade da Federacao]<>"EX"
              Then Print File ARQ Completa([Cgc                     ],14," ")
              Else Print File ARQ Completa("",14,"0")
           EndIf
           If IsBlank([Inscricao Estadual])
              Then Print File ARQ Completa("ISENTO",14," ")
              Else Print File ARQ Completa([Inscricao Estadual      ],14," ")
           EndIf
           Print File ARQ Completa([Data Emissao/Recebimento],08," ")
           Print File ARQ Completa([Unidade da Federacao    ],02," ")
           Print File ARQ Completa([Modelo                  ],02," ")
           Print File ARQ Completa([Serie                   ],03," ")
           Print File ARQ Completa([Numero                  ],06," ")
           Print File ARQ AlinhM([CFOP                      ],04)
           Print File ARQ Completa([Emitente da Nota Fiscal],01," ")
           Print File ARQ Valor_Str([Valor Total            ],13,2)
           Print File ARQ Valor_Str([Base de Calculo do Icms],13,2)
           Print File ARQ Valor_Str([Valor do Icms          ],13,2)
           Print File ARQ Valor_Str([Isenta Nao Tributado   ],13,2)
           Print File ARQ Valor_Str([Outras                 ],13,2)
           Print File ARQ Valor_Str([Aliquota               ],04,2)
           Switch
             Case [Situacao]="S" : Print File ARQ "S"+"\n"
             Case [Situacao]="E" : Print File ARQ "E"+"\n"
             Case [Situacao]="4" : Print File ARQ "4"+"\n"
             Case [Situacao]="2" : Print File ARQ "2"+"\n"
             Case [Situacao]="X" : Print File ARQ "X"+"\n"
             OtherWise           : Print File ARQ "N"+"\n"
           EndSwitch
           Cont_50 = Cont_50 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 51
If Not IsEmpty("Reg_51")
   Then View "Reg_51"
        Scan
          Print File ARQ Completa([Tipo                    ],02," ")
          If [Unidade da Federacao]<>"EX"
             Then Print File ARQ Completa([Cgc                     ],14," ")
             Else Print File ARQ Completa("",14,"0")
          EndIf
          If IsBlank([Inscricao Estadual])
             Then Print File ARQ Completa("ISENTO",14," ")
             Else Print File ARQ Completa([Inscricao Estadual      ],14," ")
          EndIf
          Print File ARQ Completa([Data Emissao/Recebimento],08," ")
          Print File ARQ Completa([Unidade da Federacao    ],02," ")
          Print File ARQ Completa([Serie                   ],03," ")
          Print File ARQ Completa([Numero                  ],06," ")
          Print File ARQ AlinhM([CFOP                      ],04)
          Print File ARQ Valor_Str([Valor Total            ],13,2)
          Print File ARQ Valor_Str([Valor do Ipi           ],13,2)
          Print File ARQ Valor_Str([Isenta Nao Tributado   ],13,2)
          Print File ARQ Valor_Str([Outras - Ipi           ],13,2)
          Print File ARQ Completa([Cod_001                 ],05," ")
          Print File ARQ Completa([Cod_002                 ],05," ")
          Print File ARQ Completa([Cod_003                 ],05," ")
          Print File ARQ Completa([Cod_004                 ],05," ")
          Switch
             Case [Situacao]="S" : Print File ARQ "S"+"\n"
             Case [Situacao]="E" : Print File ARQ "E"+"\n"
             Case [Situacao]="4" : Print File ARQ "4"+"\n"
             Case [Situacao]="2" : Print File ARQ "2"+"\n"
             Case [Situacao]="X" : Print File ARQ "X"+"\n"
             OtherWise           : Print File ARQ "N"+"\n"
          EndSwitch
          Cont_51 = Cont_51 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 53
If Not IsEmpty("Reg_53")
   Then View "Reg_53"
        Scan
           Print File ARQ Completa([Tipo                    ],02," ")
           If [Unidade da Federacao]<>"EX"
              Then Print File ARQ Completa([Cgc                     ],14," ")
              Else Print File ARQ Completa("",14,"0")
           EndIf
           If IsBlank([Inscricao Estadual])
              Then Print File ARQ Completa("ISENTO",14," ")
              Else Print File ARQ Completa([Inscricao Estadual      ],14," ")
           EndIf
           Print File ARQ Completa([Data Emissao/Recebimento],08," ")
           Print File ARQ Completa([Unidade da Federacao    ],02," ")
           Print File ARQ Completa([Modelo                  ],02," ")
           Print File ARQ Completa([Serie                   ],03," ")
           Print File ARQ Completa([Numero                  ],06," ")
           Print File ARQ AlinhM([CFOP                      ],04)
           Print File ARQ Completa([Emitente                ],01," ")
           Print File ARQ Valor_Str([Base Calc ICMS Subst Trib],13,2)
           Print File ARQ Valor_Str([Icms Retido            ],13,2)
           Print File ARQ Valor_Str([Despesas Acessorias    ],13,2)
           Switch
             Case [Situacao]="S" : Print File ARQ "S"
             Case [Situacao]="E" : Print File ARQ "E"
             Case [Situacao]="4" : Print File ARQ "4"
             Case [Situacao]="2" : Print File ARQ "2"
             Case [Situacao]="X" : Print File ARQ "X"
             OtherWise           : Print File ARQ "N"
           EndSwitch
           Print File ARQ Completa([Codigo Antecipacao      ],01," ")
           Print File ARQ Completa("",29," ")+"\n"
           Cont_53 = Cont_53 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 54
If Not IsEmpty("Reg_54")
   Then View "Reg_54"
        Scan
           Print File ARQ Completa([Tipo                     ],02," ")
           If [Unidade da Federacao]<>"EX"
              Then Print File ARQ Completa([Cgc                     ],14," ")
              Else Print File ARQ Completa("",14,"0")
           EndIf
           Print File ARQ Completa([Modelo                   ],02," ")
           Print File ARQ Completa([Serie                    ],03," ")
           Print File ARQ Completa([Numero                   ],06," ")
           Print File ARQ AlinhM([CFOP                       ],04)
           Print File ARQ Completa([CST                      ],03," ")
           Print File ARQ Completa([Numero do Item           ],03," ")
           Print File ARQ Completa([Codigo do Produto_Servico],14," ")
           Print File ARQ Valor_Str([Quantidade              ],11,3)
           Print File ARQ Valor_Str([Valor do Produto        ],12,2)
           Print File ARQ Valor_Str([Valor Desconto_Despesa  ],12,2)
           Print File ARQ Valor_Str([BCICMS                  ],12,2)
           Print File ARQ Valor_Str([BCICMS Substituicao     ],12,2)
           Print File ARQ Valor_Str([Valor do IPI            ],12,2)
           Print File ARQ Valor_Str([Aliquota do ICMS        ],04,2)
           Print File ARQ "\n"
           Cont_54 = Cont_54 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 55
If Not IsEmpty("Reg_55")
   Then View "Reg_55"
        Scan     
           Print File ARQ Completa([Tipo              ],02," ")
           Print File ARQ Completa([CNPJ Contribuinte ],14," ")
           Print File ARQ Completa([IE_UF Favorecida  ],14," ")
           Print File ARQ Completa([Data GNRE         ],08," ")
           Print File ARQ Completa([UF                ],02," ")
           Print File ARQ Completa([UF Favorecida     ],02," ")
           Print File ARQ Completa([Banco GNRE        ],03," ")
           Print File ARQ Completa([Agencia GNRE      ],04," ")
           Print File ARQ Completa([Numero GNRE       ],20," ")
           Print File ARQ Valor_Str([Valor GNRE         ],13,2)
           Print File ARQ Completa([Data Vencimento   ],08," ")
           Print File ARQ Completa([Mes Referente     ],02," ")
           Print File ARQ Completa([Ano Referente     ],04," ")
           Print File ARQ Completa([Numero do Convenio],30," ")
           Print File ARQ "\n"
           Cont_55 = Cont_55 + 1
        EndScan
        ClearImage                      
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 60's
If Not IsEmpty("Reg_60")
   Then 
        inicio_r60=True 
        View "Reg_60I"
        View "Reg_60D"
        View "Reg_60"
        Scan 
           If [Mestre_Analitico]="M"
              Then 
                   If inicio_r60
                      Then inicio_r60=False
                      Else Ordem_Reg60()
                           Moveto "Reg_60"        
                   EndIf
           EndIf   

           Print File ARQ Completa([Tipo                     ],02," ")
           Print File ARQ Completa([Mestre_Analitico         ],01," ")
           Print File ARQ Completa([Data de Emissao          ],08," ")
           If [Mestre_Analitico]="M"
              Then Print File ARQ Completa([Numero Serie Fabricacao  ],20," ")
                   Print File ARQ AlinhM([Numero do ECF              ],3)
                   Print File ARQ Completa([Modelo                   ],02," ")
                   Print File ARQ AlinhM([Numero Contador Inicial  ],06)
                   Print File ARQ AlinhM([Numero Contador Final    ],06)
                   Print File ARQ AlinhM([Numero Contador Reducao Z],06)
                   Print File ARQ AlinhM([ContadorReinicio Operacao],03)
                   Print File ARQ Valor_Str([Grande Total Final  ]-[Grande Total Inicial],16,2)
                   Print File ARQ Valor_Str([Grande Total Final  ],16,2)
                   Print File ARQ Fill(" ",37)

                   r60dt =[Data de Emissao]
                   r60nsf=[Numero Serie Fabricacao]

              Else Print File ARQ Completa([Numero Serie Fabricacao  ],20," ")
                   Print File ARQ Completa([Tributacao ou Aliquota   ],4," ")
                   Print File ARQ Valor_Str([Vr Tributacao ou Aliquota],12,2)
                   Print File ARQ Fill(" ",79)
           EndIf
           Print File ARQ "\n"
           Cont_60 = Cont_60 + 1

        EndScan
        Ordem_Reg60()

        Moveto "REg_60"  ClearImage
        Moveto "REg_60D" ClearImage
        Moveto "REg_60I" ClearImage

EndIf


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 61's
If Not IsEmpty("Reg_61")
   Then View "Reg_61"
        Scan
           Print File ARQ Completa([Tipo                    ],02," ")
           Print File ARQ Completa("",14," ")
           Print File ARQ Completa("",14," ")
           Print File ARQ Completa([Data de Emissao         ],08," ")
           Print File ARQ Completa([Modelo                  ],02," ")
           Print File ARQ Completa([Serie                   ],03," ")
           Print File ARQ Completa([SubSerie                ],02," ")
           Print File ARQ Completa([Numero Inicial          ],06," ")
           Print File ARQ Completa([Numero Final            ],06," ")
           Print File ARQ Valor_Str([Valor Total            ],13,2)
           Print File ARQ Valor_Str([Base de Calculo do Icms],13,2)
           Print File ARQ Valor_Str([Valor do Icms          ],12,2)
           Print File ARQ Valor_Str([Isenta Nao Tributado   ],13,2)
           Print File ARQ Valor_Str([Outras                 ],13,2)
           Print File ARQ Valor_Str([Aliquota               ],04,2)
           Print File ARQ " \n"
           Cont_61 = Cont_61 + 1
        EndScan
        ClearImage


If Not IsEmpty("Reg_61R")
   Then View "Reg_61R"
        Scan
          Print File ARQ Completa([Tipo                     ],02," ")
          Print File ARQ Completa([Mestre_Analitico         ],01," ")
          Print File ARQ Completa([Mes_Ano                  ],06," ")
          Print File ARQ Completa([Codigo do Produto_Servico],14," ")
          Print File ARQ Valor_Str([Quantidade              ],13,3)
          Print File ARQ Valor_Str([Valor da Mercadoria     ],16,2)
          Print File ARQ Valor_Str([BCICMS                  ],16,2)
          Print File ARQ Completa([Tributacao ou Aliquota   ],4," ")
          Print File ARQ Fill(" ",54)
          Print File ARQ "\n"
          Cont_61 = Cont_61 + 1
        EndScan
        ClearImage
EndIf

EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 70
If Not IsEmpty("Reg_70")
   Then View "Reg_70"
        Scan
           Print File ARQ Completa([Tipo                    ],02," ")
           Print File ARQ Completa([Cgc                     ],14," ")
           If IsBlank([Inscricao Estadual])
              Then Print File ARQ Completa("ISENTO",14," ")
              Else Print File ARQ Completa([Inscricao Estadual      ],14," ")
           EndIf
           Print File ARQ Completa([Data Emissao/Recebimento],08," ")
           Print File ARQ Completa([Unidade da Federacao    ],02," ")
           Print File ARQ Completa([Modelo                  ],02," ")
           Print File ARQ Completa([Serie                   ],01," ")
           Print File ARQ Completa([SubSerie                ],02," ")
           Print File ARQ Completa([Numero                  ],06," ")
           Print File ARQ AlinhM([CFOP                      ],04)
           Print File ARQ Valor_Str([Valor Total            ],13,2)
           Print File ARQ Valor_Str([Base de Calculo do Icms],14,2)
           Print File ARQ Valor_Str([Valor do Icms          ],14,2)
           Print File ARQ Valor_Str([Isenta Nao Tributado   ],14,2)
           Print File ARQ Valor_Str([Outras                 ],14,2)
           Print File ARQ Completa([CIF_FOB],01," ")
           Switch
             Case [Situacao]="S" : Print File ARQ "S"+"\n"
             Case [Situacao]="E" : Print File ARQ "E"+"\n"
             Case [Situacao]="4" : Print File ARQ "4"+"\n"
             Case [Situacao]="2" : Print File ARQ "2"+"\n"
             Case [Situacao]="X" : Print File ARQ "X"+"\n"
             OtherWise           : Print File ARQ "N"+"\n"
           EndSwitch
           Cont_70 = Cont_70 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 71
If Not IsEmpty("Reg_71")
   Then View "Reg_71"
        Scan
           Print File ARQ Completa([Tipo                    ],02," ")
           Print File ARQ Completa([Cgc Tomador             ],14," ")
           If IsBlank([IE Tomador])
              Then Print File ARQ Completa("ISENTO",14," ")
              Else Print File ARQ Completa([IE Tomador      ],14," ")
           EndIf
           Print File ARQ Completa([Data Emissao CTR        ],08," ")
           Print File ARQ Completa([UF Tomador              ],02," ")
           Print File ARQ Completa([Modelo CTR              ],02," ")
           Print File ARQ Completa([Serie CTR               ],01," ")
           Print File ARQ Completa([SubSerie CTR            ],02," ")
           Print File ARQ Completa([Numero CTR              ],06," ")
           Print File ARQ Completa([UF Nota Fiscal          ],02," ")
           Print File ARQ Completa([CGC Nota Fiscal         ],14," ")
           If IsBlank([IE Nota Fiscal])
              Then Print File ARQ Completa("ISENTO",14," ")
              Else Print File ARQ Completa([IE Nota Fiscal  ],14," ")
           EndIf
           Print File ARQ Completa([Data Emissao Nota Fiscal],08," ")
           Print File ARQ Completa([Modelo Nota Fiscal      ],02," ")
           Print File ARQ Completa([Serie Nota Fiscal       ],01," ")
           Print File ARQ Completa([SubSerie Nota Fiscal    ],02," ")
           Print File ARQ Completa([Numero Nota Fiscal      ],06," ")
           Print File ARQ Valor_Str([Valor Nota Fiscal      ],14,2)
           Print File ARQ Spaces(11)+" "+"\n"
           Cont_71 = Cont_71 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 74
If Not IsEmpty("Reg_74")
   Then View "Reg_74"
        Scan
           Print File ARQ Completa([Tipo                     ],02," ")
           Print File ARQ Completa([Data Inventario          ],08," ")
           Print File ARQ Completa([Codigo do Produto        ],14," ")
           Print File ARQ Valor_Str([Quantidade              ],13,3)
           Print File ARQ Valor_Str([Valor do Produto        ],13,2)
           Print File ARQ Completa([Codigo de Posse          ],01," ")
           Print File ARQ AlinhM([CNPJ                       ],14)
           Print File ARQ Completa([IE                       ],14," ")
           Print File ARQ Completa([UF                       ],02," ")
           Print File ARQ Completa([Brancos                  ],45," ")
           Print File ARQ "\n"
           Cont_74 = Cont_74 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 75
If Not IsEmpty("Reg_75")
   Then View "Reg_75"
        Scan For Not IsBlank([Codigo do Produto_Servico])
           Print File ARQ Completa([Tipo                     ],02," ")
           Print File ARQ Completa([Data Inicial             ],08," ")
           Print File ARQ Completa([Data Final               ],08," ")
           Print File ARQ Completa([Codigo do Produto_Servico],14," ")
           Print File ARQ Completa([Codigo NCM               ],08," ")
           Print File ARQ Completa([Descricao                ],53," ")
           Print File ARQ Completa([Unidade                  ],06," ")
           Print File ARQ Valor_Str([Aliquota do IPI         ],05,2)
           Print File ARQ Valor_Str([Aliquota do ICMS        ],04,2)
           Print File ARQ Valor_Str([Reducao BCICMS          ],05,2)
           Print File ARQ Valor_Str([BCICMS Substituicao     ],13,2)
           Print File ARQ "\n"
           Cont_75 = Cont_75 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 88STES
If Not IsEmpty("Reg_88se") And SP02_UF = "MG"
   Then View "reg_88se"
        Scan
           REG88_CNPJ  = Tira_CharNum([CGC Empresa])
           
           REG88_DTINV = StrVal([Data do Inventario])
           If Len(REG88_DTINV)=9  Then  REG88_DTINV="0"+REG88_DTINV  EndIf   
           REG88_DTINV = SubStr(REG88_DTINV,7,4) + SubStr(REG88_DTINV,4,2) + SubStr(REG88_DTINV,1,2)
        
           Print File ARQ "88"
           Print File ARQ "STES"
           Print File ARQ Completa(REG88_CNPJ,14," ")
           Print File ARQ Completa(REG88_DTINV,08," ")
           Print File ARQ Completa([Codigo do Item],60," ")    ;era 14
           Print File ARQ Valor_Str([Quantidade              ],13,3)
           Print File ARQ Valor_Str([VR_ICMS ST              ],12,2)
           Print File ARQ Valor_Str([Vr_ICMS Operacao Propria],12,2)
           Print File ARQ Spaces(47)
           Print File ARQ "\n"
           Cont_88 = Cont_88 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 88STITNF
If Not IsEmpty("Reg_88si") And SP02_UF = "MG"
   Then View "reg_88si"
        Scan
           REG88_CNPJ  = Tira_CharNum([CNPJ do Remetente])
           REG88_SEQ   = AlinhM(StrVal([Sequencia do Item]),3)
           REG88_DTENT = StrVal([Data Entrada])
           If Len(REG88_DTENT)=9  Then  REG88_DTENT="0"+REG88_DTENT  EndIf   
           REG88_DTENT = SubStr(REG88_DTENT,7,4) + SubStr(REG88_DTENT,4,2) + SubStr(REG88_DTENT,1,2)
           
           Print File ARQ "88"
           Print File ARQ "STITNF"
           Print File ARQ Completa(REG88_CNPJ,14," ")
           Print File ARQ Completa([Modelo do Docto Fiscal],02," ")
           Print File ARQ Completa([Serie da Nota Fiscal  ],03," ")
           Print File ARQ AlinhM([Numero da Nota Fiscal   ],09)  ;era 6
           Print File ARQ AlinhM([CFOP                    ],04)
           Print File ARQ Completa([CST                   ],03," ")
           Print File ARQ Completa(REG88_SEQ,03," ")          
           Print File ARQ Completa(REG88_DTENT,08," ")
           Print File ARQ Completa([Codigo do Item        ],60," ") ;era 14
           Print File ARQ Valor_Str([Quantidade           ],11,3)
           Print File ARQ Valor_Str([Valor do Produto     ],12,2)
           Print File ARQ Valor_Str([Valor do Desconto    ],12,2)
           Print File ARQ Valor_Str([Base Calculo ICMS OP ],12,2)
           Print File ARQ Valor_Str([Base Calculo ICMS ST ],12,2)
           Print File ARQ Valor_Str([Aliquota ICMS_ST     ],04,2)
           Print File ARQ Valor_Str([Aliquota ICMS_OP     ],04,2)
           Print File ARQ Valor_Str([Valor do IPI         ],12,2)
           Print File ARQ "\n"
           Cont_88 = Cont_88 + 1
        EndScan
        ClearImage
EndIf

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava Registro 88EAN 
If Not IsEmpty("Reg_88cb") And SP02_UF = "MG"
   Then View "Reg_88cb"
        Scan
           Print File ARQ Completa([Tipo                     ],02," ")
           Print File ARQ Completa([SubTipo                  ],03," ")
           Print File ARQ Completa([Versao do Codigo EAN     ],02," ")
           Print File ARQ Completa([Codigo Produto_Servico   ],14," ")
           Print File ARQ Completa([Descricao Produto_Servico],53," ")
           Print File ARQ Completa([Unidade                  ],06," ")
           Print File ARQ Completa([Codigo de Barra          ],14," ")
           Print File ARQ Completa(""                         ,32," ")
           Print File ARQ "\n"
           Cont_88 = Cont_88 + 1
        EndScan
        ClearImage
EndIf

If Not Gerou_Entradas And SP02_UF = "MG"
   Then Print File ARQ Completa("88",02," ")
        Print File ARQ Completa("SME",03," ")
        Print File ARQ Completa([Receitae->CGC],14," ")
        Print File ARQ Completa("Sem Movimento de Entradas",34," ")
        Print File ARQ Completa("",73," ")
        Print File ARQ "\n"
        Cont_88 = Cont_88 + 1
        Mensagem("N„o existe movimenta‡„o de entrada para este per¡odo !")
EndIf

If Not Gerou_Saidas And SP02_UF = "MG"
   Then Print File ARQ Completa("88",02," ")
        Print File ARQ Completa("SMS",03," ")
        Print File ARQ Completa([Receitae->CGC],14," ")
        Print File ARQ Completa("Sem Movimento de Saidas",34," ")
        Print File ARQ Completa("",73," ")
        Print File ARQ "\n"
        Cont_88 = Cont_88 + 1
        Mensagem("N„o existe movimenta‡„o de saida para este per¡odo !")
EndIf


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Grava totalizadores 90
Linhat = ""
If Cont_50 > 0
   Then Linhat = Linhat+"50"+Valor_Str(Cont_50,8,0)
EndIf
If Cont_51 > 0
   Then Linhat = Linhat+"51"+Valor_Str(Cont_51,8,0)
EndIf
If Cont_53 > 0
   Then Linhat = Linhat+"53"+Valor_Str(Cont_53,8,0)
EndIf
If Cont_54 > 0
   Then Linhat = Linhat+"54"+Valor_Str(Cont_54,8,0)
EndIf
If Cont_55 > 0
   Then Linhat = Linhat+"55"+Valor_Str(Cont_55,8,0)
EndIf
If Cont_60 > 0
   Then Linhat = Linhat+"60"+Valor_Str(Cont_60,8,0)
EndIf
If Cont_61 > 0
   Then Linhat = Linhat+"61"+Valor_Str(Cont_61,8,0)
EndIf
If Cont_70 > 0
   Then Linhat = Linhat+"70"+Valor_Str(Cont_70,8,0)
EndIf
If Cont_71 > 0
   Then Linhat = Linhat+"71"+Valor_Str(Cont_71,8,0)
EndIf
If Cont_74 > 0
   Then Linhat = Linhat+"74"+Valor_Str(Cont_74,8,0)
EndIf
If Cont_75 > 0
   Then Linhat = Linhat+"75"+Valor_Str(Cont_75,8,0)
EndIf
If Cont_88 > 0
   Then Linhat = Linhat+"88"+Valor_Str(Cont_88,8,0)
EndIf

Linhab = "90"
Linhab = Linhab+Completa([Receitae->CGC               ],14," ")
Linhab = Linhab+Completa([Receitae->Inscricao Estadual],14," ")

;Soma total dos registros
If Len(Linhat)>80
   Then Cont_90=2
   Else Cont_90=1
EndIf

Cont_Tot=0
Cont_Tot=Cont_10+Cont_11+
         Cont_50+Cont_51+Cont_53+Cont_54+Cont_55+
         Cont_60+Cont_61+
         Cont_70+Cont_71+Cont_74+Cont_75+
         Cont_88+
         Cont_90

posi=0
For wc From 1 to Cont_90

  If wc=Cont_90
     Then linhag="99"+Valor_Str(Cont_Tot,8,0) 
     Else linhag=""
  EndIf   

  linha=linhab+SubStr(Linhat,posi+1,80)+linhag

  Print File ARQ linha
  Print File ARQ Completa("",125-Len(linha)," ")
  Print File ARQ StrVal(Cont_90)+"\n"

  Posi=posi+80
EndFor

If Not IsEmpty("DadosC")
   Then View "DadosC"
        Scan Print File ARQ2 Completa([CNPJ],18," ")
             Print File ARQ2 Completa([IE],16," ")
             Print File ARQ2 Completa([Razao Social],40," ")
             Print File ARQ2 Completa([UF],2," ")
             Print File ARQ2 Spaces(23)+"X"
             Print File ARQ2 "\n"
        EndScan
        ClearImage
EndIf       

LimpAguarde()

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, juntamento com o arquivo de recibo gerado //"
MSG=MSG+"  pelo SINTEGRA;                                                       //"
MSG=MSG+"* Organize os mesmos em pastas por ano e mˆs referente;                //"
MSG=MSG+"* Fa‡a sempre o BACKUP dos mesmos;                                     //"
MSG=MSG+"* SINTEGRA_EMPRESA_MMAAAA => MM=Mˆs  AAAA=Ano                          //"
Mensagem(MSG)
Release Vars COR_MENSAGEM

ClearAll

Close Printer

EndProc  ; (Gera_Arquivo_Texto)

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
Proc Valor_Str(Valor,Tam,Dec)
Private VrTit,Valor,Tam,Dec,Part1,Part2
VrTit=StrVal(Valor)
If SearchFrom(".",VrTit,1)>0
   Then Part1=SubStr(VrTit,1,SearchFrom(".",VrTit,1)-1)
        Part2=SubStr(VRTit,SearchFrom(".",VrTit,1)+1,Dec)
        Part2=PART2+Fill(0,DEC-Len(Part2))
   Else Part1=VrTit
        Part2=Fill(0,Dec)
EndIf
Vrtit=Part1+Part2
VrTit=Fill("0",Tam-Len(VrTit))+VrTit
Return VrTit
EndProc  ; (Valor_Str)

;******************************************************************************
;*Procedimento responsavel pela montagem do cgc/cpf                           *
;******************************************************************************
Proc MONTA_STRING(MSTRING,NUMALF)
M_NOVO = ""
Switch
   Case NUMALF = "N":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "A":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 065) And
               (Asc(SubStr(MSTRING,I,1)) <= 122)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
   Case NUMALF = "AN":
        For I From 1 to Len(MSTRING)
            If (Asc(SubStr(MSTRING,I,1)) >= 065) And
               (Asc(SubStr(MSTRING,I,1)) <= 122) Or
               (Asc(SubStr(MSTRING,I,1)) >= 48) And
               (Asc(SubStr(MSTRING,I,1)) <= 57)
               Then M_NOVO = M_NOVO + SubStr(MSTRING,I,1)
            EndIf
        EndFor
EndSwitch
Return(M_NOVO)
EndProc ; (Monta_String)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_DTINI"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="TG_OPCOES"        : Campo="TG_DTFIM"
            Case Campo="TG_FINALIDADE"    : Campo="TG_OPCOES"

            Case Campo="TG_INVENT"        : Campo="TG_FINALIDADE"
            Case Campo="TG_MESANO"        : Campo="TG_INVENT"

            Case Campo="TG_ECF"           : Campo="TG_INVENT"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA"    :
                         If Not IsBlank(VSDGEMPRESA)
                            Then Campo="TG_DTINI"
                            Else VSDGNOMEMP=""
                         EndIf
                    Case Campo="TG_DTINI"      :
                         If Not IsBlank(VSDGDTINI)
                            Then Campo="TG_DTFIM"
                         EndIf
                    Case Campo="TG_DTFIM"      : Campo="TG_OPCOES"
                    Case Campo="TG_OPCOES"     : Campo="TG_FINALIDADE"
                    Case Campo="TG_FINALIDADE" : Campo="TG_INVENT"
                    
                    Case Campo="TG_INVENT"     : 
                      if VSDGINVENT[1]=False
                         then
                              Campo="TG_ECF"
                              VSDGMESANO   = ""
                         else
                              Campo="TG_MESANO"
                      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_ECF"
                         endif   
                    
                    Case Campo="TG_ECF"        : 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_ECF"    Or
       Campo="TG_INVENT":
       MensagemCheckBoxes()
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

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

sys_valor()

LimpAguarde()
VSDGEMPRESA  =""
VSDGDTINI    =BlankDate()
VSDGDTFIM    =BlankDate()
VSDGMESANO   = ""
VSDGESTADO   = ""
VSDGEST_TODOS=True

Array VSDGINVENT[1]
Array VSDGOPCAO[3]
Array VSDGECF[1]

VSDGOPCAO[3]= True
VSDGECF[1]  = False

ATIVIDADE  = ""
ESTEMPRESA = ""

ALQ_EST = ""

While True
  ShowDialog "Gera‡Æo do arquivo do SINTEGRA" 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 19 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‡”es de Movimentos " For "TG_OPCOES"
    CheckBoxes @6,00 Height 3 Width 26 Tag "TG_OPCOES"
    "Registro de Entrada " to VSDGOPCAO[1],
    "Registro de Saida   " to VSDGOPCAO[2],
    "Geral               " to VSDGOPCAO[3]

    Label @ 10,00 "Finalidade do arquivo" For "TG_FINALIDADE"
    RadioButtons @ 11,00 Height 3 Width 28
      "~1~ Original/Normal",
      "~2~ Retificadora Total",
      "~5~ Desfazimento"
        Tag "TG_FINALIDADE"
        To VSDGFINAL


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


    Label  @ 08,35 "Op‡„o ECF " For "TG_ECF"
    CheckBoxes @09,35 Height 1 Width 26 Tag "TG_ECF"
    "Gerar registro 60 I" to VSDGECF[1]

    Pushbutton @ 15,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 15,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 SINTEGRA 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   

  View "\\Sistemas\\Cadastro\\Empresas"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA
  If Not RetVal
     Then MENSAGEM("Empresa n„o Cadastrada")
          ClearAll
          Loop
     Else PREFIXO = Substr([Conta Contabil Empresa],1,3)

          SP02_CGC=AlinhM(MONTA_STRING([CGC Empresa],"N"),14)
          SP02_IE =Completa(MONTA_STRING([IE Empresa],"AN"),14," ")
          SP02_UF =[UF Empresa]
          
          If SP02_UF <> "MG"
             Then GetRecord "\\Sistemas\\Vendas\\Estados" SP02_UF To ESTADO_DADOS
                  If Retval
                     Then ALQ_EST = ESTADO_DADOS["Aliquota de ICMS"]
                  EndIf
          EndIf    
          
  EndIf

  View "ReceitaE"
  Moveto [Codigo da Empresa]
  Locate VSDGEMPRESA
  If Not RetVal
     Then MENSAGEM("Dados p/ Receita Estadual desta Empresa n„o foi informado")
          ClearAll
          Loop
  EndIf
  ClearAll

  Switch
    Case VSDGFINAL=3 : FINALIDADE_ARQUIVO="5"
    OtherWise        : FINALIDADE_ARQUIVO=VSDGFINAL
  EndSwitch

  If VSDGOPCAO[1]=True or VSDGOPCAO[3]=True
     Then Monta_Entrada()
  EndIf

  If VSDGOPCAO[2]=True or VSDGOPCAO[3]=True
     Then Monta_Saida()
  EndIf

  Gera_Reg()

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

  LimpaRodape(0)

EndWhile
ClearAll
Release Vars All
Release Procs All
