;** Bib_Fat ********************************************************************
;*  Biblioteca de Rotinas do Faturamento                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)               
;Desenvolvido    : 31/01/2004 por Anivel Augusto Rodrigues
;Ultima Alteracao: 14/01/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes calculo ICMS_ST_BC                            
;Ultima Alteracao: 12/02/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Simples Nacional c/ calculo de ICMS, ST com redu‡Æo BC 
;Ultima Alteracao: 07/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() verificar MVA nÆo informado no pedido                      
;Ultima Alteracao: 22/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() declararar variaveis users !!                      
;Ultima Alteracao: 27/04/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() verificar Aliquota ICMS_ST nÆo informado no pedido  
;Ultima Alteracao: 09/05/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes do Redespacho para aparecer na observacao da nota fiscal antes de imprimir
;Ultima Alteracao: 20/05/2014 por Andrey Fillipe
;Motivo Alteracao: Inclusao do campo NIRE para aparecer na observacao da nota fiscal
;Ultima Alteracao: 30/06/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes Pega_Preco() para nÆo pegar codigo raiz para semi-acabado                    
;Ultima Alteracao: 01/07/2014 por Kamila Gomes
;Motivo Alteracao: Ajustes ao gravar Observacao "Redespacho" 
;Ultima Alteracao: 24/07/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Soma dos items que tem rateio do total das despesas 
;Ultima Alteracao: 01/09/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes quando F8 faturar pedido, buscar tributacao de acordo com destinacao                                    
;Ultima Alteracao: 05/09/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Calc_OF e Rateio_BC_Item(), onde foi desmembrado e add Item_Rateio() p/ quando for agrupamento de itens
;Ultima Alteracao: 05/09/2014 por Bruno/Andrey
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() "NÆo pegar impostos no X:" 
;Ultima Alteracao: 29/09/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes do Frete para aparecer na observacao da nota fiscal antes de imprimir
;Ultima Alteracao: 05/11/2014 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques em COBRANCAPGTO nÆo esta mais em aberto/pendente a receber
;Ultima Alteracao: 06/11/2014 por Luis Gustavo
;Motivo Alteracao: Implementado por Sys_codigo_cliente "0353" ALUMAX, para buscar Informa‡ao Adicional do pedido
;Ultima Alteracao: 04/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP E/S checar tipo movimento estoque destina‡Æo 
;Ultima Alteracao: 30/03/2015 por Andrey Fillipe
;Motivo Alteracao: Implementado para nao deixar passar data de saida ou hora de saida em branco Proc Closed Checagem_Pagina1()
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando nÆo existir o item na proc Transfere_Dados_Nota()
;Ultima Alteracao: 30/06/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ composicao de dias dos itens se encontrado os seguintes caracteres "[*"
;Ultima Alteracao: 27/10/2015 por Bruno/Andrey
;Motivo Alteracao: Adicionado Proc Data_Dialog()
;Ultima Alteracao: 04/11/2015 por Andrey Fillipe
;Motivo Alteracao: Ajustes para nao pegar aliquota do estado caso ICMS esteja em branco 
;Ultima Alteracao: 05/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Verifica_Caixa()                       
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo IR se nÆo for utilizado!
;Ultima Alteracao: 17/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calc_Venctos()                       
;Ultima Alteracao: 28/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data_Entrada ChequeI = Data de Entrada ChequeC
;Ultima Alteracao: 20/01/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALCULO_NF_AUTOMATICO="L" livre, informar por item descto, frete, seguro e despaces
;Ultima Alteracao: 11/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes valor total de cheques em chequec
;Ultima Alteracao: 29/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UTILIZANDO_CP_FP_CLIENTE (condicao e Forma de Pagamento do cliente)
;Ultima Alteracao: 23/03/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Sys_Codigo_Cliente 0227 quando cfop ‚ 5912 ou 6912
;Ultima Alteracao: 05/04/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado COPIA_PED_ORC_FATURA() p/ ser adicionar no campo [Informacoes_Adicionais] a descrsimbologia e o fci como era feito no script NF_NFE
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord        
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [FCI]
;Ultima Alteracao: 21/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes GetRecord "Destinat" -> [Situacao do Cliente]
;Ultima Alteracao: 27/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Nova Estrutura FaturaC, FaturaI, FaturaID, FaturaIG e nota tabela FaturaCC
;Ultima Alteracao: 28/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS Desonerado
;Ultima Alteracao: 08/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CHEQUES()
;Ultima Alteracao: 11/07/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Checagem_Pagina1() -> Verifica_Representante()
;Ultima Alteracao: 13/07/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado FCI -> [Informacoes_Adicionais] **Apenas para quando nÆo tiver o FCI neste campo, entÆo adicionar
;Ultima Alteracao: 25/07/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSG_AUTOMATICA Frete
;Ultima Alteracao: 25/07/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc COPIA_PED_ORC_FATURA() -> Incluido "PIS_CST", "PIS_ALIQUOTA", "COFINS_CST" e "COFINS_ALIQUOTA" pegando do PEDIDOI
;Ultima Alteracao: 09/08/2016 por Bruno Carvalho
;Motivo Alteracao: NÆo checa o SALDO do Pedido #Sol.24870# -> Cliente 0237
;Ultima Alteracao: 16/08/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes ATUA_SITUACAO_PEDIDO_ORCAMENTO() p/ Cliente #0377# -> Manter quantidade EM ABERTO se faturamento nÆo concluido 
;Ultima Alteracao: 31/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MSG_AUTOMATICA
;Ultima Alteracao: 02/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Checagem_Pagina1() liberar soimprir/reemitir
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()
;Ultima Alteracao: 01/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATUA_SITUACAO_PEDIDO_ORCAMENTO() p/ Cliente #0345# -> PEDIDO FATURADO mesmo se nÆo faturado total             
;Ultima Alteracao: 21/10/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ZFM pis/confins=06  
;Ultima Alteracao: 04/11/2016 por Bruno Carvalho
;Motivo Alteracao: Checagem_Pagina1() -> Verifica‡Æo [Tipo Pessoa]=FISICA e CPF inv lido
;Ultima Alteracao: 28/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao SoCopiaPedidoFatura()
;Ultima Alteracao: 28/11/2016 por Bruno Carvalho
;Motivo Alteracao: Add CHAVEI no UseVars ATUA_SITUACAO_PEDIDO_ORCAMENTO() 
;Ultima Alteracao: 02/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 05/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Informa‡äes Adicionais
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Restricao_CNPJCPF()
;Ultima Alteracao: 14/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SUFRAMA TN
;Ultima Alteracao: 05/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0392
;Ultima Alteracao: 05/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes copia pedido 0388, 390
;Ultima Alteracao: 06/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0390 usando composicao+simbologiaImpresso em infadic
;Ultima Alteracao: 03/02/2017 por Bruno Carvalho
;Motivo Alteracao: Ajsutes COPIA_PED_ORC_FATURA() -> Verificando ROTINA_EXPEDICAO, ao informar o item da tabela "ExpedI" ou "ExpedIQ"
;Ultima Alteracao: 07/02/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes Data_Dialog
;Ultima Alteracao: 14/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() 0388, 0390
;Ultima Alteracao: 16/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes finalidade da destinacao           
;Ultima Alteracao: 02/03/2017 por Bruno Carvalho
;Motivo Alteracao: Calcular_Vencimentos() -> DIAS_NDIAS estava armazenando primeiro valor e 
;                  anulava a composi‡Æo de dias se F4 pressionado novamente para corrigir calculo
;Ultima Alteracao: 09/03/2017 por Bruno Carvalho
;Motivo Alteracao: InclusÆo [Comissao do Item] na proc COPIA_PED_ORC_FATURA()
;Ultima Alteracao: 10/03/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado na proc Checagem_Pagina1() -> ALTERA_PRECO_TOTAL p/ permitir altera‡Æo no campo "I_PRECO_TOTAL" se CALCULO_NF_AUTOMATICO="L"
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 29/03/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustado GetRecord p/ buscar OBS quando NOVO_PEDIDO -> Checagem_Pagina1()
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0396# -> PegaCodigoRaiz()
;Ultima Alteracao: 11/04/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desoneracao icms Poddium
;Ultima Alteracao: 26/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajsutes COPIA_PED_ORC_FATURA() -> Verificando ROTINA_EXPEDICAO="PED", ao informar o item da tabela "ExpedOfI"
;Ultima Alteracao: 18/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio comissÆo nos vencimento para 0382 Janon
;Ultima Alteracao: 29/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0345# -> icms desonerado              
;Ultima Alteracao: 30/05/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes icms desonerado da tabela Destin
;Ultima Alteracao: 02/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes rateio comissÆo nos vencimento para 0382 Janon
;Ultima Alteracao: 08/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes base calculo pis/cofins 0051 modamil
;Ultima Alteracao: 26/06/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes base calculo pis/cofins 0051 modamil
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 04/08/20167por Bruno Carvalho
;Motivo Alteracao: Ajustes ATUA_SITUACAO_PEDIDO_ORCAMENTO() p/ Cliente #0388# -> PEDIDO FATURADO mesmo se nÆo faturado total
;Ultima Alteracao: 05/08/2017 por Bruno Carvalho
;Motivo Alteracao: Substituido [Valor INSS] -> [Valor TC]
;Ultima Alteracao: 15/08/2017 por Bruno Carvalho
;Motivo Alteracao: Removido [Condicao de Pagamento] e [Composicao de Dias]
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 06/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ICMS ST FEM
;Ultima Alteracao: 13/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ver_Memo() substitu¡do por Ler_Memo() na proc Mensagem_Venda()
;Ultima Alteracao: 18/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FCP ST 
;Ultima Alteracao: 21/09/2017 por Bruno Carvalho
;Motivo Alteracao: Removido de COPIA_PED_ORC_FATURA() -> Edita Descricao do Item, Descricao da Unidade e Descricao da Marca
;Ultima Alteracao: 22/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Situacao_Expedicao(), Existe_Pedido() p/ Bib_Fat
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA()
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Movido Busca_Item_Agrupado(), Agrupa_Pedido() e LIMPA_OFS() p/ Bib_Fat
;Ultima Alteracao: 26/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novos calculos da nota
;Ultima Alteracao: 28/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CALC_VOLUMES()
;Ultima Alteracao: 28/09/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0112 item sem ST pessoa fisica
;Ultima Alteracao: 17/10/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado PARAM_ITEM_FORA_PEDIDO -> COPIA_PED_ORC_FATURA()
;                  Permite faturamento de item de expedi‡Æo fora do pedido conforme parƒmetro
;Ultima Alteracao: 18/10/2017 por Bruno Carvalho
;Motivo Alteracao: Removido [Aliquota Reduzida BCIPI] -> COPIA_PED_ORC_FATURA(), SoCopiaPedidoFatura()
;Ultima Alteracao: 06/11/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao realizar o SCAN -> ATUA_SITUACAO_PEDIDO_ORCAMENTO() **[Quantidade Faturada]>=[Quantidade]
;Ultima Alteracao: 10/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem cliente pessimo            
;Ultima Alteracao: 13/11/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0112 aliquota icms pessoa juridica
;Ultima Alteracao: 12/12/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() codigo da tabela
;Ultima Alteracao: 18/01/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes CALC_OF() -> aliq_ibpt *It_extipi[wi] sem valor
;Ultima Alteracao: 26/01/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Informacoes_Adicionais] do PedidoI na proc COPIA_PED_ORC_FATURA()
;Ultima Alteracao: 27/01/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Informacoes_Adicionais] do PedidoI na proc SoCopiaPedidoFatura() 
;Ultima Alteracao: 27/01/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado [Informacoes_Adicionais] do OrcaI na proc COPIA_PED_ORC_FATURA() 
;Ultima Alteracao: 07/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes descri‡Æo complmentar 0410                                   
;Ultima Alteracao: 09/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes regra partilha consumidor final                              
;Ultima Alteracao: 24/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nome variavel COPIA_PED_ORC_FATURA()                             
;Ultima Alteracao: 14/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes liberado ipi devolvido VersaoDaNFe         
;Ultima Alteracao: 15/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes st e FCP michelee nfe4.0
;Ultima Alteracao: 15/03/2018 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado #0408# -> Pega_Preco()
;Ultima Alteracao: 16/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes BC FCP UFDest nfe4.0
;Ultima Alteracao: 19/03/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Pega_Preco() pesquisa item e depois codigoraiz
;Ultima Alteracao: 09/04/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes calculo FCP
;Ultima Alteracao: 12/04/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0408# -> PegaCodigoRaiz()
;Ultima Alteracao: 04/05/2018 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Data p/ Calculo do Vencimento -> NÆo processar se Data em Branco
;Ultima Alteracao: 24/05/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes NFSeCIDADE
;Ultima Alteracao: 04/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA() 0274       
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() 
;Ultima Alteracao: 21/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Total dos tributos       
;Ultima Alteracao: 25/06/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes itens mercadoria/servico
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0419# -> PegaCodigoRaiz()
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes IMPRIGERAL() -> FT_GNF
;Ultima Alteracao: 01/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes 0227 retorno mostruario
;Ultima Alteracao: 17/08/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes LIMPA_OFS()
;Ultima Alteracao: 18/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bcipi
;Ultima Alteracao: 27/08/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes partilha entrada por devolucao
;Ultima Alteracao: 03/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusao PARAM_VERSAODANFE
;Ultima Alteracao: 11/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RATEIO_COMISSAO_VENCTOS()
;Ultima Alteracao: 11/09/2018 por Bruno Carvalho
;Motivo Alteracao: Comentado campos que foram removidos do PedidoI/PedidoG
;Ultima Alteracao: 17/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pedido faturado 0388         
;Ultima Alteracao: 08/10/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# campo Variacoes do PedidoI -> ATUA_SITUACAO_PEDIDO_ORCAMENTO 
;Ultima Alteracao: 22/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes vencimento inteiro 0418      
;Ultima Alteracao: 23/10/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ controle das variacoes -> "V[NUMERO_VARIACAO]"
;Ultima Alteracao: 13/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Calc_Of() %redicms=0 opera‡Æo sem icms
;Ultima Alteracao: 22/12/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado controle para destina‡äes inativas -> DESTIN_INATIVA
;Ultima Alteracao: 28/12/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Adicionado processos de #0427#
;Ultima Alteracao: 30/01/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem do frete
;Ultima Alteracao: 04/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pedido de compra              
;Ultima Alteracao: 12/02/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustado [Numero_Pedido_Compr] -> [Numero_Pedido_Compra] 
;Ultima Alteracao: 15/02/2019 por Kamila Gomes
;Motivo Alteracao: Descomentado a parte que pega a ali CSOSN da destina‡Æo no COPIA_PED_ORC_FATURA() 
;Ultima Alteracao: 25/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes 0168 ST E FCP
;Ultima Alteracao: 25/02/2019 por Kamila Gomes
;Motivo Alteracao: Ajustes 0167 MVA/FCP
;Ultima Alteracao: 26/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes NCMUF             
;Ultima Alteracao: 16/03/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes Numero_Lancamento("Interno","Locked_Down")
;Ultima Alteracao: 27/03/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes Checagem_Pagina1() -> CAMPOS_Ok=False ao verificar CFOP p/ #0431#
;Ultima Alteracao: 02/04/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes pega_Preco #0431                              
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0429#
;Ultima Alteracao: 30/04/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes mensagem automatica e truncamento             
;Ultima Alteracao: 07/05/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA, tipo do item igual ao do cadastro
;Ultima Alteracao: 28/05/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA, #0425
;Ultima Alteracao: 05/06/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido CALC_VOLUMES() p/ BIB_VEND com passagem de parƒmetro
;Ultima Alteracao: 12/06/2019 por Kamila Gomes                           
;Motivo Alteracao: Em ATUA_SITUACAO_PEDIDO_ORCAMENTO() Removido Cliente #0377# -> PEDIDO FATURADO mesmo se nÆo faturado total 
;Ultima Alteracao: 13/06/2019 por Bruno Carvalho                           
;Motivo Alteracao: Adicionado processo p/ ajustar dados do item quando for lan‡amento da lista de presente #0294# -> Checagem_Pagina1()
;Ultima Alteracao: 21/06/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes COPIA_PED_ORC_FATURA, #0204
;Ultima Alteracao: 01/08/2019 por Bruno/Anivel                           
;Motivo Alteracao: Ajustes unidade exterior PC->UN -> COPIA_PED_ORC_FATURA() e SoCopiaPedidoFatura()
;Ultima Alteracao: 06/09/2019 por Bruno Carvalho                           
;Motivo Alteracao: Ajustes p/ [Forma de Pagamento]="RP" na proc Calcular_Vencimentos()
;Ultima Alteracao: 10/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes faturar itens or‡amento entrega #0102                     
;Ultima Alteracao: 19/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes limite credito CHT regra #0377                     
;Ultima Alteracao: 30/09/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes obs orcamento #0102
;Ultima Alteracao: 14/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes "0121" municipio servico          
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes closed desabilitado em rotina que usa direto
;Ultima Alteracao: 04/11/2019 por Bruno Carvalho                           
;Motivo Alteracao: Movido Limite_Credito() p/ BIB_VEND e novos ajustes implementados

@ 22,28 ?? "Gerando Biblioteca Bib_Fat.Lib"
Style Blink
?? "... "

If IsFile("\\Sistemas\\Vendas\\Bib_Fat.Lib")
   Then Run NoRefresh "Del \\Sistemas\\Vendas\\Bib_Fat.Lib>Nul"
EndIf
CreateLib "\\Sistemas\\Vendas\\Bib_Fat"

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private OpcaoP, TABPR, CPGTO, CodClie, CodRepr, CodItem,
        PesqOk, Registro_Tab_Preco, Registro_TabPreco_CondPagto, regItens,
        wii,coditemtemp

Switch
  Case Table()="Faturai":
    If PARAM_TABPR_ITEM="S"
       Then If OpcaoP = "Cod_Barras"
               Then TABPR=[FaturaC->Codigo da Tabela]
               Else TABPR=[FaturaI->Codigo da Tabela]
                    If IsBlank(TABPR) And SYS_CODIGO_CLIENTE="0232"
                       Then TABPR=[FaturaC->Codigo da Tabela]
                    EndIf    
            EndIf
       Else TABPR=[FaturaC->Codigo da Tabela]
    EndIf
    CPGTO=[FaturaC->Condicao de Pagamento]

    CodClie=[FaturaC->Codigo                 ]
    CodRepr=[FaturaC->Codigo do Representante]

  Case Table()="Faturaid":
    If PARAM_TABPR_ITEM="S"
       Then If OpcaoP = "Cod_Barras"
               Then TABPR=[FaturaC->Codigo da Tabela]
               Else TABPR=[FaturaID->Codigo da Tabela]
            EndIf
       Else TABPR=[FaturaC->Codigo da Tabela]
    EndIf
    CPGTO=[FaturaC->Condicao de Pagamento]

    CodClie=[FaturaC->Codigo                 ]
    CodRepr=[FaturaC->Codigo do Representante]

  Case Table()="Notai"  :
    If PARAM_TABPR_ITEM="S"
       Then If OpcaoP = "Cod_Barras"
               Then TABPR=[NotaC->Codigo da Tabela]
               Else TABPR=[NotaI->Codigo da Tabela]
            EndIf
       Else TABPR=[NotaC->Codigo da Tabela]
      
    EndIf
    CPGTO=[NotaC->Condicao de Pagamento  ]

    CodClie=[NotaC->Codigo                   ]
    CodRepr=[NotaC->Codigo do Representante  ]

EndSwitch

CodItem         =VSD_I_Codigo_Item
ITEM_PROMOCIONAL="N"
PesqOk          =False

GetRecord "\\Sistemas\\Estoque\\Itens" CodItem To regItens
If RetVal
   Then 
        If PARAM_UTILIZA_TABPR_CLIENTE="S"
           Then 
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, coditemtemp To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0427" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345" Or
                             SYS_CODIGO_CLIENTE="0408" Or
                             SYS_CODIGO_CLIENTE="0419" Or
                             SYS_CODIGO_CLIENTE="0429" 
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf

        If PARAM_UTILIZA_TABPR_REPRES="S" and Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, coditemtemp To Registro_TabPreco_Item   
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0427" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345" Or
                             SYS_CODIGO_CLIENTE="0408" Or
                             SYS_CODIGO_CLIENTE="0419" Or
                             SYS_CODIGO_CLIENTE="0429"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
        
        If Not PesqOk
           Then
                coditemtemp=CodItem
                for wii from 1 to 2 
                  GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, coditemtemp          To Registro_TabPreco_Item
                  If RetVal
                     Then CodItem=coditemtemp
                          PesqOk=True
                          quitloop
                  EndIf
                  If Not IsBlank(regItens["Codigo da Grade"])
                     Then 
                          coditemtemp=PegaCodigoRaiz(coditemtemp)
                     else
                          If SYS_CODIGO_CLIENTE="0239" Or
                             SYS_CODIGO_CLIENTE="0388" Or 
                             SYS_CODIGO_CLIENTE="0427" Or 
                             SYS_CODIGO_CLIENTE="0390" Or
                             SYS_CODIGO_CLIENTE="0396" Or
                             SYS_CODIGO_CLIENTE="0345" Or
                             SYS_CODIGO_CLIENTE="0408" Or
                             SYS_CODIGO_CLIENTE="0419" Or
                             SYS_CODIGO_CLIENTE="0429"
                             Then coditemtemp=PegaCodigoRaiz(coditemtemp)
                          EndIf
                  EndIf
                  if coditemtemp=CodItem then quitloop endif
                endfor
        EndIf
EndIf

If not PesqOK
   then
        [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()

   else 
        ITEM_PROMOCIONAL=Registro_TabPreco_Item["Em Promocao"]

        If OpcaoP="Checa"
           Then Return True
        EndIf

        switch
          case sys_codigo_cliente="0431":
            [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
            [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]

            GetRecord "\\Sistemas\\Vendas\\Condpgto" [FaturaC->Condicao de Pagamento] To regcondpgto
            If RetVal  
               Then If regcondpgto["Taxa Desconto"] > 0
                       then [Tipo Desconto Item    ]="U"
                            [Taxa Desconto Unitario]=regcondpgto["Taxa Desconto"]
                            
                            VSD_I_Tipo_Desconto_Item     =[Tipo Desconto Item        ]
                            VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
                            CalcularPrecoTotal_Item()           
                    EndIf
            EndIf
            release vars regcondpgto

          case PARAM_PEGAPRECO_CPAGTO = "S":
            PesqOk=False
            Moveto [Lookup_TabPreco_CondPagto]
            Ativa_Lookup()
            Moveto [Codigo da Tabela]
            Locate TABPR
            If RetVal
               Then While [Codigo da Tabela] = TABPR
                      If [Condicao de Pagamento] = CPGTO
                         Then CopyToArray Registro_TabPreco_CondPagto
                              PesqOK=True
                              QuitLoop
                      EndIf
                      Skip
                      If Eot()
                         Then QuitLoop
                      Endif
                    EndWhile
            Endif
            KeyPress "ESC"
            If PesqOk
               Then [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]+
                                            NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                            Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)
                    [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]+
                                            NDecimal(((Registro_TabPreco_Item["Preco Unitario"]*
                                            Registro_TabPreco_CondPagto["Taxa Financeira"])/100),2)

                    If TX_DESCTO_CLIE>0
                       Then [Preco Unitario Tabela]=[Preco Unitario]
                            [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
                    EndIf

               Else [Preco Unitario       ]=BlankNum()
                    [Preco Unitario Tabela]=BlankNum()
            EndIf
          
          otherwise:
            [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
            [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]

            If TX_DESCTO_CLIE>0
               Then [Preco Unitario Tabela]=[Preco Unitario]
                    [Preco Unitario       ]=Round([Preco Unitario]-(([Preco Unitario]*TX_DESCTO_CLIE)/100),2)
            EndIf
          
        endswitch

EndIf

VSD_I_Preco_Unitario=[Preco Unitario       ]
VSD_I_Preco_Tabela  =[Preco Unitario Tabela]
UnLockRecord

EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()  
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, KM_FRETE, TAXA_FRETE, VRMINIMO_FRETE, CHAVEC,
        PARAM_VISITA, DESTIN_ATUALIZA_PEDIDOS, PARAM_BLOQUEIA_AUTORI,
        PARAM_DIAS_ATRASO, NOVA_DESTINACAO, NOVO_PEDIDO, NOVO_CLIENTE,
        PARAM_CONTA_CAIXA, OPCAO_RED_BCICMS,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO,
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, TX_DESCTO_BLOQUEIO, TX_DESCTO_CLIE,
        TRIB_ICMS, TRIB_IPI, UF_EMPRESA, SYS_CODIGO_CLIENTE,
        UFEMPRESA_ALIQUOTA_ICMS,
        ALIQUOTA_CREDITO_ICMS_NOSN, UF_ALIQUOTA_ICMS_INTERNA,
        DP_GERA_DUPLICATA,TPEMPR,CNPJNF_e,NOMENF_e, CHECANFE_AUT, 
        GERDUP_CDESCTO, GERDUP_TXDESCTO, ATIVEMPR, CALCULO_NF_AUTOMATICO, PARAM_RESTR_CNPJCPF,
        PARAM_CONDPAGTO, UTILIZANDO_CP_FP_CLIENTE, FINALIDADE_DESTINACAO, ALTERA_PRECO_TOTAL,
        Aliquota_ICMS_Desonerado, Motivo_Desoneracao_ICMS, NFSeCIDADE 

Private CAMPOS_OK, NCAMPO, OBS, CDDESTIN

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Invalida !")
  Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
                                           [IE]="ISENTO"
  Case Not IsBlank([Hora de Saida])  And IsBlank([Data de Saida]) :   Mensagem("Data de saida Invalida !")
  Case Not IsBlank([Data de Saida])  And IsBlank([Hora de Saida]) :   Mensagem("Hora de saida Invalida !")
  Case Upper([Tipo Pessoa])="FISICA" And Len(Tira_CharNum([CGC]))<>11 : Mensagem("CPF inv lido!") 
  Case IsBlank([Origem do Pedido]):
       If PARAM_VISITA="S"                              
          Then Mensagem("Origem do Pedido Invalido !")
          Else CAMPOS_OK=True                                         
       EndIf
  OtherWise: CAMPOS_OK=True
EndSwitch

;*** Representante ********* 
If Not Verifica_Representante([FaturaC->Codigo do Representante])
   Then Mensagem("Representante/Vendedor Inativo !")
        CAMPOS_OK=False
EndIf            

;*** CFOP E/S **************
Switch
  Case [Tipo Movimento Estoque]="S" And SubStr([CFO],1,1)<"5":
   Mensagem("CFOP informado "+[CFO]+",//nÆo ‚ uma opera‡Æo de saida conforme a destina‡Æo utilizada !")
   CAMPOS_Ok=False
  Case [Tipo Movimento Estoque]="E" And SubStr([CFO],1,1)>"3":
   Mensagem("CFOP informado "+[CFO]+",//nÆo ‚ uma opera‡Æo de entrada conforme a destina‡Æo utilizada !")
   CAMPOS_Ok=False
EndSwitch

;*** Situacao do Cliente ***
GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] to REG_CLIE_PED  
If not RetVal
   Then Mensagem("Cliente Inv lido !")
        CAMPOS_Ok=False
   Else If REG_CLIE_PED["Situacao do Cliente"]="RECADASTRO"
           Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+REG_CLIE_PED["Situacao do Cliente"])
                CAMPOS_Ok=False
        EndIf
        If REG_CLIE_PED["Situacao do Cliente"]="PESSIMO"
           Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerˆncia !// //Verificar se poss¡vel venda … vista !")
                ;CAMPOS_Ok=False                                                        
        EndIf
EndIf

;*** Checagem Autorizados ***
If PARAM_BLOQUEIA_AUTORI="S" And
   [Nome Fantasia EmitDest]<>"DIVERSOS" And [Tipo]="C" And Not IsBlank([Nome do Autorizado])
   Then Monta_Opcoes("Autorizado",[Codigo])
        If Not Checa_Opcoes("Autorizado",[Nome do Autorizado])
           Then Mensagem("Autorizado n„o cadastrado !")
                CAMPOS_Ok=False
        EndIf
EndIf

;*** Checagem Dias em Atraso ***
If Not CHECANFE_AUT
   Then If (PARAM_DIAS_ATRASO="S" Or PARAM_DIAS_ATRASO="P") And
           [FaturaC->Tipo    ]="C" And
           [Nome Fantasia EmitDest]<>"DIVERSOS" And
           Search("VEND",[FaturaC->Descricao da Destinacao])>0
           Then If Not Dias_Atraso()
        					 Then CAMPOS_Ok=False
                EndIf
        EndIf
        If (PARAM_RESTR_CNPJCPF="S" Or PARAM_RESTR_CNPJCPF="P") And
           [FaturaC->Tipo    ]="C" And
           [Nome Fantasia EmitDest]<>"DIVERSOS" And
           Search("VEND",[FaturaC->Descricao da Destinacao])>0
           Then If Not Restricao_CNPJCPF()
        					 Then CAMPOS_Ok=False
                EndIf
        EndIf
EndIf

;*** Checagem Clientes Diversos a Prazo ***
If [Nome Fantasia EmitDest]="DIVERSOS" And
   [FaturaC->Tipo de Pagamento]="P" And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0
   Then Mensagem("Venda a Prazo p/ Cliente DIVERSOS n„o permitida !") 
				CAMPOS_Ok=False
EndIf

;*** Checagem da Tabela de Preco ***
Moveto [Codigo da Tabela]
If Busca_Lookup("Codigo da Tabela",[FaturaC->Codigo da Tabela],"SM")
   Then If REG_BUSCA_LOOKUP["Ativa"]="N"
           Then Mensagem("Tabela de Pre‡o Inativa !")
                CAMPOS_Ok=False
        EndIf
EndIf

;*** Checagem de CPF/CNPJ ***
If SYS_CODIGO_CLIENTE="0051" Or SYS_CODIGO_CLIENTE="0228" 
   Then VERIFICA_CPF=[CGC]
        VERIFICA_CFO=[CFO]
        If VERIFICA_CFO="6102" And Len(Tira_CharNum(VERIFICA_CPF))<>14
           Then Mensagem("Para este CFO somente pessoa Jur¡dica!")
                CAMPOS_Ok=False
        EndIf
EndIf   

;*** Pega UF/Tipo Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[FaturaC->Codigo da Empresa],"Empresa: "+[FaturaC->Codigo da Empresa]+" sem UF !")
   Then UF_EMPRESA=REG_BUSCA_LOOKUP["UF Empresa"]
        TPEMPR    =REG_BUSCA_LOOKUP["Tipo da Empresa"]
        ATIVEMPR  =REG_BUSCA_LOOKUP["Atividade"]
        CNPJNF_e  =Tira_CharNum(REG_BUSCA_LOOKUP["CGC Empresa"])
        NOMENF_e  =REG_BUSCA_LOOKUP["Razao Social Empresa"]
        
        NFSeCIDADE=Upper(REG_BUSCA_LOOKUP["Cidade Empresa"])+Upper(REG_BUSCA_LOOKUP["UF Empresa"])
        
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
        CNPJNF_e  ="??"
        NOMENF_e  ="??"
        
        NFSeCIDADE="??"
EndIf

;*** Checagem da Unidade Federativa c/ CFO ***
If CAMPOS_Ok
   Then If SYS_CODIGO_CLIENTE="0431" 
           Then ;NÆo vai verificar nada relacionado ao CFOP 
           Else Moveto [Codigo da Empresa]
                If Busca_Lookup("Codigo da Empresa",[FaturaC->Codigo da Empresa],"")
                   Then Switch
                          Case SubStr([FaturaC->CFO],1,1)="1" And [FaturaC->UF]<>UF_Empresa:
                               Mensagem("O estado \""+[FaturaC->UF]+"\" de origem usado p/ o CFOP \""+
                                        [FaturaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                                        "Verifique se a informa‡„o esta correta para continuar !")
                          Case SubStr([FaturaC->CFO],1,1)="5" And [FaturaC->UF]<>UF_Empresa:
                               Mensagem("O estado \""+[FaturaC->UF]+"\" de destino usado p/ o CFOP \""+
                                        [FaturaC->CFO]+"\"// ‚ diferente da sua Empresa \""+UF_Empresa+"\" ! // //"+
                                        "Verifique se a informa‡„o esta correta para continuar !")
                          Case SubStr([FaturaC->CFO],1,1)="2" And [FaturaC->UF]=UF_Empresa:
                               Mensagem("O estado \""+[FaturaC->UF]+"\" de origem usado p/ o CFOP \""+
                                        [FaturaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                                        "Verifique se a informa‡„o esta correta para continuar !")
                          Case SubStr([FaturaC->CFO],1,1)="6" And [FaturaC->UF]=UF_Empresa:
                               Mensagem("O estado \""+[FaturaC->UF]+"\" de destino usado p/ o CFOP \""+
                                        [FaturaC->CFO]+"\"// ‚ igual a sua Empresa \""+UF_Empresa+"\" ! // //"+
                                        "Verifique se a informa‡„o esta correta para continuar !")
                        EndSwitch
                EndIf
        EndIf
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[FaturaC->UF],"")
   Then UF_ALIQUOTA_ICMS         =REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        UF_ALIQUOTA_ICMS_INTERNA =REG_BUSCA_LOOKUP["Aliquota de ICMS_INTERNA"]
   Else UF_ALIQUOTA_ICMS         =BlankNum()
        UF_ALIQUOTA_ICMS_INTERNA =BlankNum()
EndIf

If Busca_Lookup("UF",UF_EMPRESA,"")
   Then UFEMPRESA_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
   Else UFEMPRESA_ALIQUOTA_ICMS=BlankNum()
EndIf

;*** Condicao Pagto ***
Moveto [Condicao de Pagamento]
If Busca_Lookup("Condicao de Pagamento",[FaturaC->Condicao de Pagamento],"")
   Then TX_DESCTO_BLOQUEIO=REG_BUSCA_LOOKUP["Taxa Desconto"]
        GERDUP_CDESCTO    =REG_BUSCA_LOOKUP["GerDup_InstrucaoDescto"]
        GERDUP_TXDESCTO   =REG_BUSCA_LOOKUP["Taxa Desconto"]
   Else TX_DESCTO_BLOQUEIO=0
        GERDUP_CDESCTO    ="0"
        GERDUP_TXDESCTO   =0
EndIf

If GERDUP_CDESCTO="1"
   Then [Taxa de Desconto ]=GERDUP_TXDESCTO
        [Valor do Desconto]=BlankNum() 
EndIf
If GERDUP_CDESCTO="2"
   Then [Taxa de Desconto ]=BlankNum()
        [Valor do Desconto]=BlankNum() 
EndIf

;*** Aliquota/Tributacao/Observacao da Destinacao/Redespacho Transportadora ***
CDDESTIN=[Codigo da Destinacao]
[Codigo da Destinacao]=""
[Codigo da Destinacao]=CDDESTIN

OBS=""
If (NOVO_PEDIDO Or NOVA_DESTINACAO) And Not IsBlank([Numero do Pedido])
   Then GetRecord "\\Sistemas\\Vendas\\PedidoC" [FaturaC->Numero do Pedido] To REG_BUSCA_LOOKUP
        If ReTval
           Then OBS=REG_BUSCA_LOOKUP["Observacao na Nota Fiscal"]
        EndIf
EndIf

If NOVA_DESTINACAO And Not IsBlank([Numero do Orcamento]) and
   sys_codigo_Cliente="0102"
   Then GetRecord "\\Sistemas\\Vendas\\OrcaC" [FaturaC->Numero do Orcamento] To REG_BUSCA_LOOKUP
        If ReTval
           Then OBS=REG_BUSCA_LOOKUP["Observacao do Orcamento"]
        EndIf
EndIf
NOVA_DESTINACAO=False


ALIQUOTA_CREDITO_ICMS_NOSN =BlankNum()
TRIB_ICMS=""
TRIB_IPI =""
DESTIN_ATUALIZA_PEDIDOS=""
OPCAO_RED_BCICMS="1"
DP_GERA_DUPLICATA="N"
CALCULO_NF_AUTOMATICO="A"
FINALIDADE_DESTINACAO="1"
DESTIN_INATIVA = ""

Aliquota_ICMS_Desonerado=0
Motivo_Desoneracao_ICMS =""

Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[FaturaC->Codigo da Destinacao],"")
   Then DESTIN_INATIVA=REG_BUSCA_LOOKUP["Inativo Destin"]
        ALIQUOTA_CREDITO_ICMS_NOSN =REG_BUSCA_LOOKUP["Aliquota CredICMS NOSN"]
        If REG_BUSCA_LOOKUP["ICMS Aliquota do Estado"]<>"S"
           Then UF_ALIQUOTA_ICMS=REG_BUSCA_LOOKUP["Aliquota de ICMS"]
        EndIf
        CALCULO_NF_AUTOMATICO=REG_BUSCA_LOOKUP["Calcula_Nota"]
        TRIB_ICMS=REG_BUSCA_LOOKUP["Tributacao de ICMS"]
        TRIB_IPI =REG_BUSCA_LOOKUP["Tributacao de IPI"]
        DESTIN_ATUALIZA_PEDIDOS=REG_BUSCA_LOOKUP["Atualiza Pedidos"]

        OBS = OBS+REG_BUSCA_LOOKUP["Observacao_Destinacao"]

        If Not IsBlank(REG_BUSCA_LOOKUP["Conta Caixa Padrao"])
           Then PARAM_CONTA_CAIXA=REG_BUSCA_LOOKUP["Conta Caixa Padrao"]
        EndIf
        OPCAO_RED_BCICMS=REG_BUSCA_LOOKUP["Sem Reducao BCICMS"]
        DP_GERA_DUPLICATA=REG_BUSCA_LOOKUP["Gera Duplicata"]
        FINALIDADE_DESTINACAO=REG_BUSCA_LOOKUP["FinNfe"]
        
        Aliquota_ICMS_Desonerado=REG_BUSCA_LOOKUP["Aliquota ICMS Desonerado"]
        Motivo_Desoneracao_ICMS =REG_BUSCA_LOOKUP["Motivo Desoneracao ICMS" ]
        
        If DESTIN_INATIVA="S" 
           Then Mensagem("Destina‡Æo "+[FaturaC->Codigo da Destinacao]+" est  inativa!")
                Return False 
        EndIf
EndIf
;[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS    

;---- Altera Pre‡o Total se Forma de Calculo na Nota for LIVRE -----------------
ALTERA_PRECO_TOTAL = "N"
If CALCULO_NF_AUTOMATICO="L"
   Then ALTERA_PRECO_TOTAL = "S"
EnDIf

If NOVO_PEDIDO Or NOVA_DESTINACAO Or NOVO_CLIENTE
   Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To CODTRANSP
        If RetVal
           Then NIRE      = CODTRANSP["NIRE"]
                GetRecord "\\Sistemas\\Vendas\\Transpor" CODTRANSP["Codigo Transp_Redespacho"] To REDESP
                If RetVal
                   Then redespacho=" [Redespacho, Transp: "+REDESP["Razao Social Transport"]+", "
                        redespacho=redespacho+""           +REDESP["CGC Transport"         ]+", "
                        redespacho=redespacho+"End: "      +REDESP["Endereco Transport"    ]+", "
                        redespacho=redespacho+"Bairro: "   +REDESP["Bairro Transport"      ]+", "
                        redespacho=redespacho+"CEP: "      +REDESP["CEP Transport"         ]+", "
                        redespacho=redespacho+"Cidade: "   +REDESP["Cidade Transport"      ]+"/"+REDESP["UF Transport"]+"]"
                   Else redespacho = ""
                EndIf   
           Else redespacho = ""
        EndIf
        If NIRE<>"" Then TNIRE="NIRE: " Else TNIRE="" EndIf
   
        [Observacao na Nota Fiscal]=OBS+redespacho+"\n"+TNIRE+NIRE  
EndIf        
                    
;*** Tabela de Kilometragem ***
Moveto [Codigo]
If Busca_Lookup("Codigo",[FaturaC->Codigo],"")
   Then If IsBlank(REG_BUSCA_LOOKUP["Km Frete"])
           Then KM_FRETE=0
           Else KM_FRETE=REG_BUSCA_LOOKUP["Km Frete"]
        EndIf
        TX_DESCTO_CLIE=REG_BUSCA_LOOKUP["Taxa_Desconto Permitido"]
   Else KM_Frete=0
EndIf

TAXA_FRETE=0
VRMINIMO_FRETE=0
Moveto [Lookup_Tabela_Frete]
Ativa_Lookup()
Scan
  If (KM_Frete>=[Km Inicial]) And
     (KM_Frete<=[Km Final  ])
     Then TAXA_FRETE    =[Taxa]
          VRMINIMO_FRETE=[Valor Minimo]
          QuitLoop
  EndIf
EndScan
KeyPress "ESC"

;--- Ajustando dados do item -> Sistema de Origem: [RQ] Lista de Presentes -----
If SYS_CODIGO_CLIENTE="0294"                            And 
   Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And
   Search("[** LISTA DE PRESENTE",[Observacao na Nota Fiscal])>0
   Then TAB_ANT = Table()
        FIE_ANT = Field()
        
        Moveto "FaturaI"
        Scan
          GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To regItens
          If RetVal          
             Then Ajusta_Dados_Item()
          EndIf   
        EndScan
        Moveto TAB_ANT
        Moveto Field FIE_ANT
        
        Release Vars TAB_ANT,FIE_ANT,regItens
EndIf

;--- Verifica Condicao/Forma de Pagamento do Cliente ---------------------------
UTILIZANDO_CP_FP_CLIENTE=PegaCondicaoeFormaPagamento("VERIFICAR", [FaturaC->Codigo])
;-------------------------------------------------------------------------------

If IsAssigned(REEMITIR) and IsAssigned(SOIMPRIMIR) 
   then if REEMITIR and SOIMPRIMIR
           then CAMPOS_OK=True
        endif
endif        

Moveto "FaturaC"
If Not CAMPOS_OK
   Then Moveto Field NCAMPO
        Return False
   Else Return True
EndIf
EndProc ;Checagem_Pagina1()

;*******************************************************************************
;* Rotina para Chamar Calculo de Vencimentos                                   *
;*******************************************************************************
Proc CALC_VENCTOS()
   
;-- Verifica se composicao de dias ‚ correta -----------------------------------
If Not Checa_CompDias([FaturaC->Composicao de Dias])
   Then Return
EndIf      

Calcular_Vencimentos()

Release Procs Calcular_Vencimentos
EndProc   ;  (CALC_VENCTOS)


;*******************************************************************************
;* Rotina para Calcular de Vencimentos                                         *
;*******************************************************************************
Proc Calcular_Vencimentos()
Private NP, NPC, pos_s, AUX_NP,  
        VRVENCTO, VRDIFERE, VRENTRADA, VR_NF,
        j, i,
        DTBASE, DTVENCTO,
        NDIAS, DIA_VECTO, MES_VECTO, ANO_VECTO, ANO_AUXILIAR, CONT_NDIAS,
        vrbaseoperacao, vrtitcred, delok, seq, tementrada, temcredito,
        GERDUP_VRDESCTO,
        VRORIGVENCTO, VRORIGDIFERE, VRORIGDESCTO, VRORIGDESCTO

;-- checa qual a data base para calculo dos vencimentos ------------------------
If [FaturaC->Tipo de Pagamento]<>"O" ; outros
   then
        If PARAM_DATA_BASE="S"
           Then 
                If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
                If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 
                VSD_Data_Base=[FaturaC->Data de Emissao]
           
                Echo Normal
                Echo Off
           
                Showdialog "Data p/ Calculo do Vencimento" Proc "Data_Dialog"
                Trigger "OPEN","ARRIVE"
                Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
                @ 09,19 height 04 width 40
           
                Label  @ 1,03 "Informe a Data:" for "Data_Base"
                Accept @ 1,20  Width 13 "D" picture "#[#].##.##[##]" Tag "Data_Base" to VSD_Data_Base
           
                Enddialog
                Switch
                    Case Retval="ESC":
                         Return
                EndSwitch   
                If IsBlank(VSD_Data_Base)
                   Then FastMsg("Data n„o foi informada!")
                        Return
                EndIf
                Mouse Show
                DTBASE=VSD_Data_Base
          Else
                Switch
                  Case IsBlank([FaturaC->Data de Saida])                   : DTBASE=[FaturaC->Data de Emissao]
                  Case [FaturaC->Data de Saida]=[FaturaC->Data de Emissao] : DTBASE=[FaturaC->Data de Emissao]
                  OtherWise:
                    Echo Normal
                    Echo Off
              
                    ShowPopup " Calcular vencimentos sobre " CENTERED
                        "Data de ~E~miss„o" : " Calcula vencimentos sobre data de emiss„o":"EMISSAO",
                        "Data de ~S~aida"   : " Calcula vencimentos sobre data de saida  ":"SAIDA"
                    EndMenu
                  To Opcaoc
              
                    echo off
              
                  If Opcaoc="SAIDA"
                     Then DTBASE=[FaturaC->Data de Saida  ]
                     Else DTBASE=[FaturaC->Data de Emissao]
                  EndIf
                EndSwitch
        EndIf
endif
;-- inicializa‡Æo titulo de credito --------------------------------------------
Aguarde("Calculando Vencimentos")

temcredito=false
vrtitcred =0

;-- Excluir venctos existentes para gerar novos --------------------------------
Moveto "FaturaV"
Home
while true
  if RecordStatus("New")
     then quitloop
  endif   

  delok=true
  if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
     (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-")) Or
     [Forma de Pagamento]="RP" 
     then temcredito=true
          delok=false
  endif
  if delok
     then unlockrecord
          del
     else skip  
          if eot() then quitloop endif   
  endif        

endwhile

If [FaturaC->Tipo de Pagamento]="O" ; outros
   Then Moveto "FaturaC"
        Return
EndIf      

;-- Soma valores p/ titulo de credito ------------------------------------------
if temcredito            
   then 
        i=0
        Moveto "FaturaV"
        Home
        while true
          if RecordStatus("New")
             then quitloop
          endif   
        
          if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
             (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" )) Or
             [Forma de Pagamento]="RP" 
             then i=i+1
                  [Sequencia]=AlinhM(StrVal(i),2) ; refaz ordem da sequencia
                  vrtitcred  =vrtitcred+[Valor]
          endif
          skip   
          if eot() then quitloop endif   
        
        endwhile
endif
       
;-- Calcula Numero parcelas na operacao ----------------------------------------
NP            = [FaturaC->Numero de Parcelas] ; np da nota
NPC           = 1                             ; np base da composica
i             = 1                                  
If Not IsBlank([FaturaC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[FaturaC->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf

If NPC=0
   Then NP=[FaturaC->Numero de Parcelas]
   Else If NPC=1 And [FaturaC->Numero de Parcelas]>1
           Then NP=[FaturaC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

;-- inicializa‡Æo da entrada ---------------------------------------------------
VRENTRADA=0
If IsAssigned(VSD_VrEntrada) 
   Then VRENTRADA=VSD_VrEntrada
        release vars VSD_VrEntrada
EndIf

If (PARAM_UTILIZA_ENTRADA="1" Or PARAM_UTILIZA_ENTRADA="2") And VRENTRADA>0
   Then tementrada=True
   Else tementrada=False
endif  
if NP=1 and tementrada Then tementrada=False endIf  
if not tementrada      Then VRENTRADA =0     endif   

;-- Valor base para parcelamentos ----------------------------------------------
vrbaseoperacao=[FaturaC->Valor Nota Fiscal]
VR_NF = vrbaseoperacao

;-- Verifica Novo VR_NF para parcelamentos -------------------------------------
If tementrada
   Then VR_NF = VR_NF-VRENTRADA
EndIf
if temcredito
   then VR_NF = VR_NF-vrtitcred
endif
If PARAM_TITCRED="T" 
   then VR_NF = VR_NF+[FaturaC->Valor TC]
endif
 
If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
   [FaturaC->Frete Incluso na Nota]="+"
   Then VR_NF = VR_NF-[FaturaC->Valor do Frete]
EndIf

if VR_NF<=0  ; creditos > vrnf
   then Moveto "FaturaC"
        return
endif

;-- Calcula valor da parcela e diferen‡a ---------------------------------------
AUX_NP=NP
If tementrada
   Then AUX_NP=NP-1
EndIf

VRVENCTO = NDecimal(((VR_NF)/AUX_NP),2)

if SYS_CODIGO_CLIENTE="0222" Or
   SYS_CODIGO_CLIENTE="0232" Or  
   SYS_CODIGO_CLIENTE="0418"  
   then VRVENCTO = int(VRVENCTO)
endif   
VRDIFERE = VR_NF-(VRVENCTO*AUX_NP)

If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
   [FaturaC->Frete Incluso na Nota]="+"
   Then VRDIFERE = VRDIFERE + [FaturaC->Valor do Frete]
EndIf

;--O Calcula valor da comissao e diferen‡a -------------------------------------
; calculo de comissao ‚ feito na proc RATEIO_COMISSAO_VENCTOS()
;-------------------------------------------------------------------------------

;-- Regra gera duplicata com ou sem instrucao de desconto ----------------------
GERDUP_VRDESCTO=0
Switch
  Case GERDUP_CDESCTO="1": GERDUP_VRDESCTO = [FaturaC->Valor Desconto]
  Case GERDUP_CDESCTO="2": GERDUP_VRDESCTO = Round(([FaturaC->Valor Mercadoria]*GERDUP_TXDESCTO)/100,2)
EndSwitch
VRORIGDESCTO   =NDecimal(GERDUP_VRDESCTO/AUX_NP,2)
VRORIGDIFDESCTO=GERDUP_VRDESCTO-(VRORIGDESCTO*AUX_NP)

Switch
  Case GERDUP_CDESCTO="1": vrbaseoperacao = VR_NF + GERDUP_VRDESCTO
                           VRORIGVENCTO   = NDecimal((vrbaseoperacao/AUX_NP),2)
                           VRORIGDIFERE   = (vrbaseoperacao)-(VRORIGVENCTO*AUX_NP)
                           If (SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0051") And 
                              [FaturaC->Frete Incluso na Nota]="+"
                              then VRORIGDIFERE = VRORIGDIFERE + [FaturaC->Valor do Frete]
                           endif    

  OtherWise              : VRORIGVENCTO   = VRVENCTO
                           VRORIGDIFERE   = VRDIFERE
EndSwitch  

;-- Gerar parcelas -------------------------------------------------------------
j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[FaturaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,(Len([FaturaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([FaturaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,Len([FaturaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([FaturaC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf
  Release Vars DIAS_NDIAS
  DTVENCTO=DTBASE
  
  While True
    Moveto [Sequencia]
    End
    SEQ = [Sequencia]
    Down
    [Numero da OF     ]=[FaturaC->Numero da OF]

    Moveto [Sequencia]
    Seta_Sequencia(SEQ,False)
    If not IsLockRecord()
       then quitloop
       else Del
    EndIf
  EndWhile

  ;-- calcula ndias e data vencto ----------------------------------------------
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day(DTVENCTO)
                  MES_VECTO=Month(DTVENCTO)
                  ANO_VECTO=Year(DTVENCTO)
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+StrVal(ANO_VECTO))
             Else ;Quando o informar Composi‡Æo de Dias = 0 "Seria como ENTRADA"
                  If NDIAS=0 
                     Then CONT_NDIAS=i-1
                     Else CONT_NDIAS=i
                  EnDIf  
                  If Not IsAssigned(DIAS_NDIAS) Then DIAS_NDIAS=NDIAS EndIf
                  
                  [Numero de Dias   ]=DIAS_NDIAS*CONT_NDIAS
                  [Data             ]=DTVENCTO+(DIAS_NDIAS*CONT_NDIAS)
                  
                  If NDIAS=0 
                     Then DIAS_NDIAS=30
                  EndIf  
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=DTVENCTO+NDIAS
  EndIf  

  ;-- verifica forma de pagamento ----------------------------------------------
  If i=1 And NP>1 And NDIAS=0
     Then [Forma de Pagamento]="DN" 
     Else [Forma de Pagamento]=[FaturaC->Forma de Pagamento]
  EndIf   

  ;-- verifica valores ---------------------------------------------------------
  [Duplicata_VrOriginal   ]=BlankNum()
  [Duplicata_VrDesconto   ]=BlankNum()
  [Duplicata_DtLimDesconto]=BlankDate()

  Switch
    Case i=1 And tementrada  : [Valor            ]=VRENTRADA
                                                   
    Case i<>NP               : [Valor            ]=VRVENCTO
                               If GERDUP_CDESCTO>"0"
                                  Then [Duplicata_VrOriginal   ]=VRORIGVENCTO
                                       [Duplicata_VrDesconto   ]=VRORIGDESCTO
                                       [Duplicata_DtLimDesconto]=[Data] 
                               EndIf

    Case i=NP                : [Valor            ]=VRVENCTO+VRDIFERE
                               If GERDUP_CDESCTO>"0"
                                  Then [Duplicata_VrOriginal   ]=VRORIGVENCTO+VRORIGDIFERE
                                       [Duplicata_VrDesconto   ]=VRORIGDESCTO+VRORIGDIFDESCTO
                                       [Duplicata_DtLimDesconto]=[Data] 
                               EndIf
  EndSwitch

;-- Pega dados do cartao -------------------------------------------------------
  If [Forma de Pagamento]="CT" Or
     [Forma de Pagamento]="CD" Or
     [Forma de Pagamento]="CL"
     Then [Nome do Cartao  ]=Nome_Cartao
          [Numero do Cartao]=Numero_Cartao
  EndIf

  UnLockRecord

  i=i+1
EndWhile

Moveto "FaturaC"
Sleep 500

LimpAguarde()

EndProc

;*******************************************************************************
;* Rotina para C lculo de Valores da Ordem de Faturamento/Nota                 *
;*******************************************************************************
Proc CALC_OF()   
Private TabelaRefI, CampoTab, wi,
        VRBCIPI, VRIPI, VRBCICMS, VRICMS, VRBCST, VRST, VRICMS_CREDSN,
        VRBCISSQN, VRISSQN, VRBCPIS, VRPIS, VRBCCOFINS, VRCOFINS,  
        VRII, VRDESCTONT,
        Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor,
        DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor, DIF_Descto_ValorServico,
        OutrosRateioOk,
        VL_BC_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST,
        TribCST, MercadoriaRateio_Valor,ServicoRateio_Valor,
        Bc_ICMS_Desonerado,
        regtabmva, regncm, regestados,
        TOT_FCP_Valor, TOT_FCP_ST_Valor, TOT_FCP_STRET_Valor,
        TOT_FCP_UFDEST_Valor, TOT_ICMS_UFDEST_Valor, TOT_ICMS_UFREMET_Valor,
        TOT_IPI_DEVOL_Valor, TOT_TRIB_Valor,
        vricmspart, aliqicmspart, aliq_ibpt


If Not IsAssigned(PARAM_CALCOF)      Then PARAM_CALCOF      = ""    EndIf
If Not IsAssigned(PARAM_AGRUPA_ITEM) Then PARAM_AGRUPA_ITEM = False EndIf
Aguarde("Calculando valores da nota")

Switch
  Case Table()="Faturac"    : TabelaRefC="FaturaC"

                              If PARAM_AGRUPA_ITEM And PARAM_CALCOF = ""
                                 Then TabelaRefI = "FaturaIG" 
                                 Else TabelaRefI = "FaturaI" 
                              EndIf
  Case Table()="Notac"      : TabelaRefC="NotaC"

                              If PARAM_AGRUPA_ITEM And PARAM_CALCOF = ""
                                 Then TabelaRefI="NotaIG" 
                                 Else TabelaRefI="NotaI" 
                              EndIf
EndSwitch

CampoTab=Field()

VRBCIPI        =0
VRIPI          =0
VRBCICMS       =0
VRICMS         =0
VRBCST         =0
VRST           =0
VRICMS_CREDSN  =0
VRBCISSQN      =0
VRISSQN        =0
VRBCPIS        =0
VRPIS          =0
VRBCCOFINS     =0
VRCOFINS       =0
VRII           =0
VRNF           =0
VRDESCTONT     =0

TOT_FCP_Valor          =0 
TOT_FCP_ST_Valor       =0 
TOT_FCP_STRET_Valor    =0
TOT_FCP_UFDEST_Valor   =0
TOT_ICMS_UFDEST_Valor  =0
TOT_ICMS_UFREMET_Valor =0
TOT_IPI_DEVOL_Valor    =0 
TOT_TRIB_Valor         =0

MSG_AUTOMATICA     = ""

If CALCULO_NF_AUTOMATICO="L" ; Livre
   Then 
        Frete_Valor        = 0
        Seguro_Valor       = 0
        OutDesp_Valor      = 0
        Descto_Valor       = 0
        Descto_ValorServico= 0
        
        For wi From 1 to DynArraySize(It_prtotal)

          switch 
            case It_tpitem[wi]="C":
              Descto_ValorServico   =Descto_ValorServico  +It_descto[wi]
            
            otherwise             :
              Descto_Valor   =Descto_Valor  +It_descto[wi]
              Frete_Valor    =Frete_Valor   +It_frete[wi]
              Seguro_Valor   =Seguro_Valor  +It_seguro[wi]
              OutDesp_Valor  =OutDesp_Valor +It_outdesp[wi]
             
          endswitch 
        endfor
        
        If PARAM_CALCOF = ""
           then
                Moveto TabelaRefC
                [Valor do Desconto        ]=Descto_Valor
                [Valor Desconto           ]=Descto_Valor

                [Valor do Desconto Servico]=Descto_ValorServico
                [Valor Desconto Servico   ]=Descto_ValorServico
           
                [Valor do Frete           ]=Frete_Valor
                [Valor do Seguro          ]=Seguro_Valor
                [Valor Despesas Acessorias]=OutDesp_Valor

                If [Valor do Frete]>0
                   Then [Frete Incluso na Nota ]="+"
                   Else [Frete Incluso na Nota ]=""
                EndIf
                [Aliquota BCFrete Nota ]=blanknum()
                [Aliquota BCICMS Frete ]=blanknum()
                [Aliquota de ICMS Frete]=blanknum()
                [CFO Frete             ]=""
           
           else
                REG_TABELAREFC["Valor do Desconto"        ]=Descto_Valor
                REG_TABELAREFC["Valor Desconto"           ]=Descto_Valor

                REG_TABELAREFC["Valor do Desconto Servico"]=Descto_ValorServico
                REG_TABELAREFC["Valor Desconto Servico"   ]=Descto_ValorServico

                REG_TABELAREFC["Valor do Frete"           ]=Frete_Valor
                REG_TABELAREFC["Valor do Seguro"          ]=Seguro_Valor
                REG_TABELAREFC["Valor Despesas Acessorias"]=OutDesp_Valor

                If REG_TABELAREFC["Valor do Frete"]>0
                   Then REG_TABELAREFC["Frete Incluso na Nota" ]="+"
                   Else REG_TABELAREFC["Frete Incluso na Nota" ]=""
                EndIf
                REG_TABELAREFC["Aliquota BCFrete Nota" ]=blanknum()
                REG_TABELAREFC["Aliquota BCICMS Frete" ]=blanknum()
                REG_TABELAREFC["Aliquota de ICMS Frete"]=blanknum()
                REG_TABELAREFC["CFO Frete"             ]=""

        endif   
endif

If PARAM_CALCOF = ""
   Then Moveto TabelaRefC
        CampoTab=Field()
        
        ;-- Mercadoria ---------------------------------------------------------
        [Valor Mercadoria]=VRMERC
        if [Valor Mercadoria]<=0
           then [Taxa de Desconto ]=blanknum()
                [Valor do Desconto]=blanknum()
        endif    
        If [Descricao da Destinacao]="COMPLEMENTO IPI SBC" Or
           [Descricao da Destinacao]="COMPLEMENTO IPI CBC" Or
           [Descricao da Destinacao]="COMPLEMENTO ST"
           Then [Valor Mercadoria  ]=BlankNum()
        EndIf
        If [Taxa de Desconto]>0
           Then VRDESCTO      =Round((VRMERC*[Taxa de Desconto])/100,2)
                TXDESCTO_TOTAL=[Taxa de Desconto]
           Else VRDESCTO      =[Valor do Desconto]
                TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
        EndIf
        [Valor Desconto          ]=VRDESCTO
        [Valor Mercadoria Liquido]=[Valor Mercadoria]-[Valor Desconto]
        
        ;-- Servico ------------------------------------------------------------
        [Valor Servico   ]=VRSERV
        if [Valor Servico   ]<=0
           then [Taxa de Desconto Servico ]=blanknum()
                [Valor do Desconto Servico]=blanknum()
        endif    
        If [Taxa de Desconto Servico]>0
           Then S_VRDESCTO      =Round((VRSERV*[Taxa de Desconto Servico])/100,2)
                S_TXDESCTO_TOTAL=[Taxa de Desconto Servico]
           Else S_VRDESCTO      =[Valor do Desconto Servico]
                S_TXDESCTO_TOTAL=(S_VRDESCTO/VRSERV)*100
        EndIf
        [Valor Desconto Servico]=S_VRDESCTO
        [Valor Servico Liquido ]=[Valor Servico   ]-[Valor Desconto Servico]

        
        CopyToArray REG_TABELAREFC ; guarda dados registro mestre
        
   Else 
        ;---- REG_TABELAREFC (Jµ SETADO) ------------------------------------

        ;-- Mercadoria ---------------------------------------------------------
        VRMERC = REG_TABELAREFC["Valor Mercadoria"]
        If REG_TABELAREFC["Descricao da Destinacao"]="COMPLEMENTO IPI SBC" Or
           REG_TABELAREFC["Descricao da Destinacao"]="COMPLEMENTO IPI CBC" Or
           REG_TABELAREFC["Descricao da Destinacao"]="COMPLEMENTO ST"
           Then VRMERC = BlankNum()
        EndIf
        If REG_TABELAREFC["Taxa de Desconto"]>0
           Then VRDESCTO      =Round((VRMERC*REG_TABELAREFC["Taxa de Desconto"])/100,2)
                TXDESCTO_TOTAL=REG_TABELAREFC["Taxa de Desconto"]
           Else VRDESCTO      =REG_TABELAREFC["Valor do Desconto"]
                TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
        EndIf
        VRDESCTO = REG_TABELAREFC["Valor Desconto"]

        ;-- Servico ------------------------------------------------------------
        VRSERV = REG_TABELAREFC["Valor Servico"]
        If REG_TABELAREFC["Taxa de Desconto Servico"]>0
           Then S_VRDESCTO      =Round((VRSERV*REG_TABELAREFC["Taxa de Desconto Servico"])/100,2)
                S_TXDESCTO_TOTAL=REG_TABELAREFC["Taxa de Desconto Servico"]
           Else S_VRDESCTO      =REG_TABELAREFC["Valor do Desconto Servico"]
                S_TXDESCTO_TOTAL=(S_VRDESCTO/VRSERV)*100
        EndIf
        S_VRDESCTO = REG_TABELAREFC["Valor Desconto Servico"]
EndIf

;--- Soma dos Items para rateio ------------------------------------------------
MercadoriaRateio_Valor=0
ServicoRateio_Valor   =0
For wi From 1 to DynArraySize(It_prtotal)
  switch 
    case It_tpitem[wi]="C":
      ServicoRateio_Valor=ServicoRateio_Valor+It_prtotal[wi]
    
    otherwise             :
      OutrosRateioOk=True
      If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
         (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
         Then OutrosRateioOk=False
      EndIf

      If OutrosRateioOk
         Then MercadoriaRateio_Valor=MercadoriaRateio_Valor+It_prtotal[wi]
      EndIf   
     
  endswitch 
EndFor

if CALCULO_NF_AUTOMATICO="A"  ;automatico
   then
        ;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
        Frete_Valor        =0
        Seguro_Valor       =0
        OutDesp_Valor      =0
        Descto_Valor       =0
        Descto_ValorServico=0
        
        For wi From 1 to DynArraySize(It_prtotal)
          switch
            case It_tpitem[wi]="C" : ;servi‡o
                  PORC_IT_MERC       =(It_prtotal[wi]/ServicoRateio_Valor)*100 
                  It_txdescto[wi]    =S_TXDESCTO_TOTAL
                  It_descto[wi]      =NDecimal((REG_TABELAREFC["Valor Desconto Servico"]*PORC_IT_MERC)/100,2)

                  Descto_ValorServico=Descto_ValorServico +It_descto[wi]

            otherwise              :
                  OutrosRateioOk=True

                  PORC_IT_MERC=(It_prtotal[wi]/MercadoriaRateio_Valor)*100 
                  If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
                     (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
                     Then OutrosRateioOk=False
                  EndIf
                  
                  If OutrosRateioOk
                     Then It_txdescto[wi]=TXDESCTO_TOTAL
                          It_descto[wi]  =NDecimal((REG_TABELAREFC["Valor Desconto"          ]*PORC_IT_MERC)/100,2)
                          If REG_TABELAREFC["Frete Incluso na Nota"]="+"
                             Then It_frete[wi]=NDecimal((REG_TABELAREFC["Valor do Frete"     ]*PORC_IT_MERC)/100,2)
                             Else It_frete[wi]=0           
                          EndIf
                          It_seguro[wi] =NDecimal((REG_TABELAREFC["Valor do Seguro"          ]*PORC_IT_MERC)/100,2)
                          It_outdesp[wi]=NDecimal((REG_TABELAREFC["Valor Despesas Acessorias"]*PORC_IT_MERC)/100,2)
                
                          Descto_Valor  =Descto_Valor +It_descto[wi]
                          Frete_Valor   =Frete_Valor  +It_frete[wi]
                          Seguro_Valor  =Seguro_Valor +It_seguro[wi]
                          OutDesp_Valor =OutDesp_Valor+It_outdesp[wi]
                
                     Else It_txdescto[wi]=BlankNum()
                          It_descto[wi]  =BlankNum()
                          It_frete[wi]   =BlankNum()
                          It_seguro[wi]  =BlankNum()
                          It_outdesp[wi] =BlankNum()
                  EndIf
                  
          endswitch
          If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
          If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
          If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
          If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
          If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
        EndFor
        
        ;--- Calcular diferen‡a totalizadores ------------------------------------------
        DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor        ,2)
        DIF_Descto_ValorServico=NDecimal(REG_TABELAREFC["Valor Desconto Servico"   ]-Descto_ValorServico ,2) 
        
        If REG_TABELAREFC["Frete Incluso na Nota"]="+"
           Then DIF_Frete_Valor=NDecimal(REG_TABELAREFC["Valor do Frete"           ]-Frete_Valor  ,2)
           Else DIF_Frete_Valor=0
        EndIf
        DIF_Seguro_Valor       =NDecimal(REG_TABELAREFC["Valor do Seguro"          ]-Seguro_Valor ,2)
        DIF_OutDesp_Valor      =NDecimal(REG_TABELAREFC["Valor Despesas Acessorias"]-OutDesp_Valor,2)
        
        If DIF_Descto_Valor        <>0 Or
           DIF_Descto_ValorServico <>0 Or
           DIF_Frete_Valor         <>0 Or
           DIF_Seguro_Valor        <>0 Or
           DIF_OutDesp_Valor       <>0 
           Then 
                For wi From 1 to DynArraySize(It_prtotal) 
                  Switch
                    Case It_tpitem[wi]="C" :  ;Igual a Seri‡o
                      If DIF_Descto_ValorServico >=0 Or (DIF_Descto_ValorServico*-1) >=It_descto[wi]
                         Then It_descto[wi] =It_descto[wi] +DIF_Descto_ValorServico
                              DIF_Descto_ValorServico=0 
                      EndIf

                    OtherWise              :  
                      OutrosRateioOk=True     ;rateia frete e outros 
        
                      If REG_TABELAREFC["Tipo Movimento Estoque"]="S" And 
                         (It_cfop[wi]="5902" or It_cfop[wi]="5903") ;saida industrializa‡Æo/Devolucao Industrializacao
                         Then OutrosRateioOk=False
                      EndIf
                      If OutrosRateioOk 
                         Then 
                              If DIF_Descto_Valor >=0 Or (DIF_Descto_Valor*-1) >=It_descto[wi]
                                 Then It_descto[wi] =It_descto[wi] +DIF_Descto_Valor
                                      DIF_Descto_Valor=0 
                              EndIf
                              If DIF_Frete_Valor  >=0 Or (DIF_Frete_Valor*-1)  >=It_frete[wi]
                                 Then It_frete[wi]  =It_frete[wi]  +DIF_Frete_Valor
                                      DIF_Frete_Valor =0
                              EndIf
                              If DIF_Seguro_Valor >=0 Or (DIF_Seguro_Valor*-1) >=It_seguro[wi]
                                 Then It_seguro[wi] =It_seguro[wi] +DIF_Seguro_Valor
                                      DIF_Seguro_Valor=0
                              EndIf   
                              If DIF_OutDesp_Valor>=0 Or (DIF_OutDesp_Valor*-1)>=It_outdesp[wi]
                                 Then It_outdesp[wi]=It_outdesp[wi]+DIF_OutDesp_Valor
                                      DIF_OutDesp_Valor=0
                              EndIf   
            
                      EndIf
                      
                  EndSwitch
                  If It_txdescto[wi]=0 Then It_txdescto[wi]=BlankNum() EndIf
                  If It_descto[wi]  =0 Then It_descto[wi]  =BlankNum() EndIf
                  If It_frete[wi]   =0 Then It_frete[wi]   =BlankNum() EndIf
                  If It_seguro[wi]  =0 Then It_seguro[wi]  =BlankNum() EndIf
                  If It_outdesp[wi] =0 Then It_outdesp[wi] =BlankNum() EndIf
                    
                  If DIF_Descto_Valor        =0 And
                     DIF_Descto_ValorServico =0 And
                     DIF_Frete_Valor         =0 And
                     DIF_Seguro_Valor        =0 And
                     DIF_OutDesp_Valor       =0
                     Then QuitLoop
                  EndIf
                EndFor
        EndIf
          
EndIf

;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)
  Switch                                            
    Case CALCULO_NF_AUTOMATICO="L":

      switch 
        case It_tpitem[wi]="C":
          It_txdescto[wi]=(It_descto[wi]/VRDESCTO  )*100
        
        otherwise             :
          It_txdescto[wi]=(It_descto[wi]/S_VRDESCTO)*100

      endswitch 
        
    Case CALCULO_NF_AUTOMATICO="A":
      switch 
        case It_tpitem[wi]="C":
          ;--- Calculando ISSQN --------------------------------------------------------
          If It_aliq_issqn[wi]>0
             Then 
                  It_bc_issqn[wi]=It_prtotal[wi]-It_descto[wi]
                  It_vr_issqn[wi]=Round((It_bc_issqn[wi]*It_aliq_issqn[wi])/100,2) 
             Else 
                  It_bc_issqn[wi]=BlankNum()    
                  It_vr_issqn[wi]=BlankNum()    
          EndIf
    
        
        otherwise             :
          ;--- Calculando IPI ----------------------------------------------------------
          If It_aliq_ipi[wi]>0
             Then 
                  It_bc_ipi[wi]=It_prtotal[wi]+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
             
                ;;If REG_TABELAREFC["Frete Incluso na Nota"]="+" And
                ;;   SubStr(It_cfop[wi],1,1)    ="3" And ; entrada import‡Æo  
                ;;   SubStr(It_cst_icms[wi],1,1)="1"     ; item importa‡Æo direta
                ;;   Then It_bc_ipi[wi]=It_bc_ipi[wi]+It_frete[wi]
                ;;EndIf
                
                  It_vr_ipi[wi]=Round((It_bc_ipi[wi]*It_aliq_ipi[wi])/100,2) 
             Else It_bc_ipi[wi]=BlankNum()    
                  It_vr_ipi[wi]=BlankNum()    
          EndIf
        
          ;--- Calculando Base de Calculo ICMS para todas as situa‡äes -----------------
          Switch
            Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
              Switch
                Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)<>"60": 
                     VL_BC_ICMS   =It_prtotal[wi]
                     VL_BC_ICMS_ST=It_prtotal[wi]
    
                Case It_trib_icms[wi]="S" And SubStr(It_cst_icms[wi],2,2)="60" And
                     Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0:
                     VL_BC_ICMS   =It_prtotal[wi]
                     VL_BC_ICMS_ST=It_prtotal[wi]
    
                OtherWise:
                     VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                     VL_BC_ICMS_ST=It_prtotal[wi]
    
              EndSwitch
            OtherWise:
              Switch
                Case OPCAO_RED_BCICMS=3 And It_red_icms[wi]>0 And It_txdescto[wi]>0:
                     VL_BC_ICMS   =It_prtotal[wi]
                     VL_BC_ICMS_ST=It_prtotal[wi]
    
                OtherWise:
                     VL_BC_ICMS   =It_prtotal[wi]-It_descto[wi]
                     VL_BC_ICMS_ST=It_prtotal[wi]
    
              EndSwitch
          EndSwitch
          VL_BC_ICMS   =VL_BC_ICMS   +It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
          VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_frete[wi]+It_seguro[wi]+It_outdesp[wi] 
    
          If REG_TABELAREFC["Consumidor Final"]="S" 
             Then VL_BC_ICMS   =VL_BC_ICMS   +it_vr_ipi[wi]
             Else VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
          EndIf   
          VL_RED_BC    =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
          VL_BC_ICMS   =VL_BC_ICMS-VL_RED_BC                   
        
          ;--- Calculando Credito ICMS Simples Nacional ------------------------
          If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
             (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")      And
             ((TabelaRefC="NotaC" And SubStr(Directory(),1,1)<>"X") Or (TabelaRefC="FaturaC" And It_aliq_icmscred[wi]>0  ))
             Then It_vr_icmscred[wi]  =Round((VL_BC_ICMS*It_aliq_icmscred[wi])/100,2)
             Else It_aliq_icmscred[wi]  =BlankNum()
                  It_vr_icmscred[wi]    =BlankNum()
          EndIf   
          
          ;--- Calculando ICMS ---------------------------------------------------------
          If It_aliq_icms[wi]>0 
             Then It_bc_icms[wi]    =VL_BC_ICMS
                  It_vr_icms[wi]    =Round((It_bc_icms[wi]*It_aliq_icms[wi])/100,2)
             Else It_aliq_icms[wi]  =BlankNum()
                  It_red_icms[wi]   =BlankNum()
                  It_bc_icms[wi]    =BlankNum()
                  It_vr_icms[wi]    =BlankNum()
          EndIf
        
          ;--- Calculando Substituicao Tributaria --------------------------------------
          If It_aliq_st[wi]>0
             Then
                  If SYS_CODIGO_CLIENTE="0167"
                     Then VL_BC_ICMS_ST=VL_BC_ICMS_ST-It_frete[wi]     
                  EndIf
            
                  VL_BC_ICMS_ST =VL_BC_ICMS_ST+Round((VL_BC_ICMS_ST*It_mva[wi])/100,2)
                  VL_RED_BCST   =NDecimal((VL_BC_ICMS_ST*It_red_st[wi])/100,2)
                  VL_BC_ICMS_ST =VL_BC_ICMS_ST-VL_RED_BCST                   
           
                  VL_ICMS_ST    =Round((VL_BC_ICMS_ST*It_aliq_st[wi])/100,2)
                  VL_ICMS_ST    =VL_ICMS_ST-It_vr_icms[wi]
            
                  It_bc_st[wi]  =VL_BC_ICMS_ST
                  It_vr_st[wi]  =VL_ICMS_ST
    
             Else 
                  It_red_st[wi]    =BlankNum() 
                  It_aliq_st[wi]   =BlankNum()
                  It_bc_st[wi]     =BlankNum()
                  It_vr_st[wi]     =BlankNum()
          EndIf

          ;--- Calculando ICMS Desonerado ----------------------------------------------
          if TPEMPR="DEBITO/CREDITO" and
             Motivo_Desoneracao_ICMS<>"" And Aliquota_ICMS_Desonerado>0 and
             not IsBlank([FaturaC->ISUFRAMA])
             Then 
                  if ( search(It_cfop[wi],"6109,6110,6120,6122,6123,6151,6152")>0 or 
                       search(It_cfop[wi],"6651,6652,6654,6655,6658,6659,6910")>0 ) and
                       search(SubStr(It_cst_icms[wi],2,2),"20,30,40,70,90")>0 
                     then
                          Bc_ICMS_Desonerado   = It_prtotal[wi] - It_descto[wi]
                          Bc_ICMS_Desonerado   = Bc_ICMS_Desonerado - round((It_prtotal[wi]*It_red_icms[wi])/100,2)
                          
                          It_vrdeson_icms[wi] = round((Bc_ICMS_Desonerado * Aliquota_ICMS_Desonerado)/100,2)
                          It_mtdeson_icms[wi]  = Motivo_Desoneracao_ICMS
                  endif
          EndIf

      endswitch 

        
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0 or It_cst_pis[wi]="06"
         Then 
              switch 
                case It_tpitem[wi]="C":
                  It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])
                
                otherwise             :
                  It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
        
              endswitch 

              switch
                case SYS_CODIGO_CLIENTE="0051" and REG_TABELAREFC["Data de Emissao"]>=dateval("01.05.2017"):
                  if It_bc_pis[wi]>0 
                     then if It_bc_pis[wi]>=It_vr_icms[wi]
                             then It_bc_pis[wi]=It_bc_pis[wi]-It_vr_icms[wi]
                             else It_bc_pis[wi]=0
                          endif   
                  endif   
              endswitch
              It_vr_pis[wi]=Round((It_bc_pis[wi]*It_aliq_pis[wi])/100,2) 
         Else 
              It_bc_pis[wi]=BlankNum()    
              It_vr_pis[wi]=BlankNum()    
      EndIf
    
      ;--- Calculando COFINS -------------------------------------------------------
      If It_aliq_cofins[wi]>0 or It_cst_cofins[wi]="06"
         Then 
              switch 
                case It_tpitem[wi]="C":
                  It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])
                
                otherwise             :
                  It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
        
              endswitch 

              switch
                case SYS_CODIGO_CLIENTE="0051" and REG_TABELAREFC["Data de Emissao"]>=dateval("01.05.2017"):
                  if It_bc_cofins[wi]>0
                     then if It_bc_cofins[wi]>=It_vr_icms[wi]
                             then It_bc_cofins[wi]=It_bc_cofins[wi]-It_vr_icms[wi]
                             else It_bc_cofins[wi]=0
                          endif   
                  endif   
              endswitch
              It_vr_cofins[wi]=Round((It_bc_cofins[wi]*It_aliq_cofins[wi])/100,2) 
         Else 
              It_bc_cofins[wi]=BlankNum()    
              It_vr_cofins[wi]=BlankNum()    
      EndIf

           
    OtherWise:

  EndSwitch

  switch 
    case It_tpitem[wi]="C":

    
    otherwise             :
      ;--- calculo FCP ICMS ST ----------------------------------------------------- 
      If it_bc_st[wi]>0 and it_aliq_fcpst[wi]>0
         then
              it_bc_fcpst[wi]=it_bc_st[wi]
              it_vr_fcpst[wi]=round((it_bc_fcpst[wi]*it_aliq_fcpst[wi])/100,2)
      endif
    
      ;--- calculo FCP ICMS -------------------------------------------------------- 
      If REG_TABELAREFC["Tipo Movimento Estoque"] ="xxxS"              And  ; tem que confiramr regra conforme necessidade
         Search("VEND",REG_TABELAREFC["Descricao da Destinacao"])>0 And
         it_bc_icms[wi]>0
         then
              GetRecord "\\Sistemas\\Estoque\\NCMUF" it_ncm[wi],REG_TABELAREFC["UF"] To regncmuf
              If RetVal
                 Then it_aliq_fcp[wi]=regncmuf["FCP_Aliquota"]
              EndIf
              if it_aliq_fcp[wi]>0
                 then it_bc_fcp[wi]=it_bc_icms[wi]                               
                      it_vr_fcp[wi]=round((it_bc_fcp[wi]*it_Aliq_fcp[wi])/100,2)
              endif       
      endif
      
      ;--- calculo ICMS Partilha ---------------------------------------------------
      If UF_EMPRESA    <>REG_TABELAREFC["UF"] And
         it_bc_icms[wi] >0                    And
         ( ( Search("VEND" ,REG_TABELAREFC["Descricao da Destinacao"])>0 And REG_TABELAREFC["Tipo Movimento Estoque"] ="S" And SubStr(It_cfop[wi],1,1)="6") 
             Or
           ( Search("DEVOL",REG_TABELAREFC["Descricao da Destinacao"])>0 And REG_TABELAREFC["Tipo Movimento Estoque"] ="E" And SubStr(It_cfop[wi],1,1)="2") ) 
         And
         ( ( REG_TABELAREFC["Consumidor Final"] ="S" and REG_TABELAREFC["IE"] ="NAOCONTRIBUINTE" )
             or 
           ( REG_TABELAREFC["Consumidor Final"] ="S" and REG_TABELAREFC["IE"] <>"ISENTO"         ) )                 
         then
              it_aliq_icmsufdest[wi]    = UF_ALIQUOTA_ICMS_INTERNA  ;Al¡quota interna da UF de destino
              it_aliq_icmsinter[wi]     = it_aliq_icms[wi]          ;Al¡quota interestadual para UF de destino
              
              aliqicmspart              = it_aliq_icmsufdest[wi]-it_aliq_icmsinter[wi]
              it_bc_icmsufdest[wi]      = it_bc_icms[wi]
              vricmspart                = round((it_bc_icmsufdest[wi]*aliqicmspart)/100,2)
              
              If UF_EMPRESA="MG" and (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                 then
                      it_bc_icmsufdest[wi] = 0
                      vricmspart           = 0
              endif  
    
              ;-- Percentual provis¢rio de partilha do ICMS Interestadual para UF destino --------------------------------
              switch
                case year([FaturaC->Data de Emissao]) =2015: It_aliq_icmsinterpart[wi]=20
                case year([FaturaC->Data de Emissao]) =2016: It_aliq_icmsinterpart[wi]=40
                case year([FaturaC->Data de Emissao]) =2017: It_aliq_icmsinterpart[wi]=60
                case year([FaturaC->Data de Emissao]) =2018: It_aliq_icmsinterpart[wi]=80
                case year([FaturaC->Data de Emissao]) >2018: It_aliq_icmsinterpart[wi]=100
              endswitch

              switch
                case REG_TABELAREFC["Tipo Movimento Estoque"] ="S":
                  it_vr_icmsufdest[wi]  = round((vricmspart*     It_aliq_icmsinterpart[wi] )/100,2)  ;Valor do ICMS Interestadual para a UF de destino
                  it_vr_icmsufremet[wi] = round((vricmspart*(100-It_aliq_icmsinterpart[wi]))/100,2)  ;Valor do ICMS Interestadual para a UF do remetente
    
                case REG_TABELAREFC["Tipo Movimento Estoque"] ="E":
                  it_vr_icmsufremet[wi]  = round((vricmspart*     It_aliq_icmsinterpart[wi] )/100,2)  ;Valor do ICMS Interestadual para a UF do remetente
                  it_vr_icmsufdest[wi]   = round((vricmspart*(100-It_aliq_icmsinterpart[wi]))/100,2)  ;Valor do ICMS Interestadual para a UF de destino    
    
              endswitch

              ;-- Combate a pobreza ---------------------------------------------------------------------------------------
              GetRecord "\\Sistemas\\Estoque\\NCMUF" it_ncm[wi],REG_TABELAREFC["UF"] To regncmuf
              If RetVal
                 then 
                      it_aliq_fcpufdest[wi]=regncmuf["FCP_Aliquota"]
              endif       
              it_bc_fcpufdest[wi]=it_bc_icmsufdest[wi]                                           ;BC       Fundo Combate probreza a UF Destino
              it_vr_fcpufdest[wi]=round((it_bc_fcpufdest[wi]*it_Aliq_fcpufdest[wi])/100,2)       ;Valor    Fundo Combate probreza a UF Destino
      EndIf

  endswitch 

  ;--- Total dos tributos---------------------------------------------------------
  if REG_TABELAREFC["Tipo Movimento Estoque"               ]="S" And
     (Search("VEND",REG_TABELAREFC["Descricao da Destinacao"])>0 Or 
      Search("SERV",REG_TABELAREFC["Descricao da Destinacao"])>0) 
     Then 
          Switch
           Case It_tpItem[wi]="C" :
             aliq_ibpt=Pega_AliqIBPT(It_trib_icms[wi], It_tpitem[wi], It_cdserv[wi], "")
            
           OtherWise              :
            GetRecord "\\Sistemas\\Estoque\\Iten_Com" It_cdItem[wi] To regiten_com  
            If RetVal
               Then It_extipi[wi]=regiten_com["EX_TIPI"]
            EndIf
            If IsAssigned(It_extipi[wi]) 
               Then aliq_ibpt=Pega_AliqIBPT(It_trib_icms[wi], It_tpitem[wi], StrVal(It_ncm[wi]), It_extipi[wi])
               Else aliq_ibpt=Pega_AliqIBPT(It_trib_icms[wi], It_tpitem[wi], StrVal(It_ncm[wi]), "")
            EndIf   
          EndSwitch
          
          It_vr_tottrib[wi]=NDecimal(((it_prtotal[wi]-It_descto[wi])*aliq_ibpt)/100,2)
  EndIf

  ;--- Somando Impostos -------------------------------------------------------- 
  If TabelaRefC="FaturaC"
     Then If ((TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And It_csosn_icms[wi]="900") Or TPEMPR="DEBITO/CREDITO"
             Then VRBCICMS = VRBCICMS + It_bc_icms[wi]
                  VRICMS   = VRICMS   + It_vr_icms[wi]
          EndIf
     Else VRBCICMS = VRBCICMS + It_bc_icms[wi]
          VRICMS   = VRICMS   + It_vr_icms[wi]              
  EndIf 
     
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  VRICMS_CREDSN  =VRICMS_CREDSN+It_vr_icmscred[wi]
  VRBCST         =VRBCST       +It_bc_st[wi]
  VRST           =VRST         +It_vr_st[wi]
  VRBCISSQN      =VRBCISSQN    +It_bc_issqn[wi]
  VRISSQN        =VRISSQN      +It_vr_issqn[wi]
  VRBCPIS        =VRBCPIS      +It_bc_pis[wi]
  VRPIS          =VRPIS        +It_vr_pis[wi]  
  VRBCCOFINS     =VRBCCOFINS   +It_bc_cofins[wi]
  VRCOFINS       =VRCOFINS     +It_vr_cofins[wi]
  VRII           =VRII         +It_vr_ii[wi]    
  VRDESCTONT     =VRDESCTONT   +It_vrdeson_icms[wi]

  TOT_FCP_Valor          =TOT_FCP_Valor          +It_vr_fcp[wi]
  TOT_FCP_ST_Valor       =TOT_FCP_ST_Valor       +It_vr_fcpst[wi]
  TOT_FCP_STRET_Valor    =TOT_FCP_STRET_Valor    +It_vr_fcpstret[wi]
  TOT_FCP_UFDEST_Valor   =TOT_FCP_UFDEST_Valor   +It_vr_fcpufdest[wi]
  TOT_ICMS_UFDEST_Valor  =TOT_ICMS_UFDEST_Valor  +It_vr_icmsufdest[wi]
  TOT_ICMS_UFREMET_Valor =TOT_ICMS_UFREMET_Valor +It_vr_icmsufremet[wi]
  TOT_IPI_DEVOL_Valor    =TOT_IPI_DEVOL_Valor    +It_vr_ipidevol[wi]
  TOT_TRIB_Valor         =TOT_TRIB_Valor         +It_vr_tottrib[wi]
                                                     
EndFor

If PARAM_CALCOF = ""          
   Then 
        [Valor BCICMS             ] = VRBCICMS
        [Valor ICMS               ] = VRICMS
        [Valor IPI                ] = VRIPI
        [Valor BCISSQN            ] = VRBCISSQN
        [Valor ISSQN              ] = VRISSQN
        [Valor II                 ] = VRII    
        [Valor PIS                ] = VRPIS
        [Valor COFINS             ] = VRCOFINS
        [Valor Desconto NTributado] = VRDESCTONT
        
        [Valor BCSubstituicao ICMS] = VRBCST
        [Valor Substituicao ICMS  ] = VRST

        [Valor TotTributos        ]=TOT_TRIB_Valor
        [Valor IPI Devolvido      ]=TOT_IPI_DEVOL_Valor
        [Valor ICMS_UFDest        ]=TOT_ICMS_UFDEST_Valor
        [Valor ICMS_UFRemet       ]=TOT_ICMS_UFREMET_Valor

        [Valor FCP                ]=TOT_FCP_Valor
        [Valor FCP_Ret_ST         ]=TOT_FCP_ST_Valor
        [Valor FCP_UFDest         ]=TOT_FCP_UFDEST_Valor
        [Valor FCP_Ret_Ant_ST     ]=TOT_FCP_STRET_Valor

        [Valor Nota Fiscal        ] =([Valor Mercadoria Liquido ]+[Valor IPI              ]+[Valor Servico Liquido  ]+
                                      [Valor Despesas Acessorias]+[Valor Substituicao ICMS]+[Valor do Seguro])-[Valor Desconto NTributado]

        [Valor Nota Fiscal] =[Valor Nota Fiscal]+[Valor IPI Devolvido]+[Valor FCP_Ret_ST]

        VRNF=[Valor Nota Fiscal   ]
        
        If [Frete Incluso na Nota]="+"
           Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
        EndIf

        if CALCULO_NF_AUTOMATICO="A" then
          ;-- monta observacao automatica ----------------------------------------
  
          TirarMensagemObs("[** Frete: "                                     , "**]")
          TirarMensagemObs("[** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS ", "**]")
          TirarMensagemObs("[** CST....: "                                   , "**]")
          TirarMensagemObs("[** ICMS RETIDO POR SUBSTITUICAO "               , "**]")

          MSG_AUTOMATICA=""
          If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And VRICMS_CREDSN>0 And 
             ((ALIQUOTA_CREDITO_ICMS_NOSN>0 And TabelaRefC="FaturaC") Or TabelaRefC="NotaC")
             Then MSG_AUTOMATICA=MSG_AUTOMATICA+"[** PERMITE O APROVEITAMENTO DO CREDITO DE ICMS NO VALOR DE RS "+
                                                LTRIM(Format("W12.2,EIC",VRICMS_CREDSN))+
                                                " , CORRESPONDENTE A ALIQUOTA DE "+
                                                LTRIM(Format("W12.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN))+
                                                "% NOS TERMOS DO ARTIGO 23 DA LC123/2006 * "+
                                                " NAO GERA DIREITO A CREDITO FISCAL DE ISS E IPI **]"
          EndIf
          [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+MSG_AUTOMATICA
  
          MSG_AUTOMATICA=""
          If substr(Directory(),1,1)<>"X" and substr(Directory(),1,1)<>"W" and 
             [FaturaC->Valor do Frete]>0 And [Frete Incluso na Nota]<>"+"
             Then destfret="[** Frete: "+lTrim(Format("W9.2,EIC",[Valor do Frete]))
                  destfret=destfret+" Aliq: "+lTrim(Format("W6.2,EIC",[Aliquota de ICMS Frete]))
                  ICMSFRETE = NDecimal((( ([Valor do Frete]-(([Valor do Frete]*[Aliquota BCICMS Frete])/100))*[Aliquota de ICMS Frete])/100),2)
                  destfret=destfret+" ICMS: "+lTrim(Format("W9.2,EIC",ICMSFRETE))
                  destfret=destfret+" CFOP: "+[CFO Frete]+" **]"
                  
                  MSG_AUTOMATICA=MSG_AUTOMATICA+destfret
                  
                  release vars ICMSFRETE, destfret 
          EndIf
          [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+MSG_AUTOMATICA
  
          MSG_AUTOMATICA=""
          If [FaturaC->Tipo Movimento Estoque]="S"               And
             (Search("VEND" ,[FaturaC->Descricao da Destinacao])>0  Or
              Search("BONIF",[FaturaC->Descricao da Destinacao])>0 )
             then 
                  if [Valor BCSubstituicao ICMS]>0
                     then MSG_AUTOMATICA=MSG_AUTOMATICA+
                                         "[** ICMS RETIDO POR SUBSTITUICAO TRIBUTARIA CONFORME õ1§ ART. 12 DO ANEXO XV DO RICMS/2002."
                                                                    
                          if [Valor FCP_Ret_ST ]>0
                             then MSG_AUTOMATICA=MSG_AUTOMATICA+
                                                 " ADICIONAL DE ALIQUOTA - FUNDO DE ERRADICACAO DA MISERIA CUJO VALOR CORRESPONDE E R$ "+
                                                 LTrim(FORMAT("W12.2,ECI",[Valor FCP_Ret_ST]))
                          endif                  
                          MSG_AUTOMATICA=MSG_AUTOMATICA+" **]"
                  endif   
          endif
          [Observacao na Nota Fiscal]=[Observacao na Nota Fiscal]+MSG_AUTOMATICA

          ;-----------------------------------------------------------------------
  
          If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
             [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
             Then [Valor Nota Fiscal       ]=BlankNum()
                  [Valor Mercadoria        ]=BlankNum()
                  [Valor Mercadoria Liquido]=BlankNum()
          EndIf
          If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
             Then [Valor BCICMS            ]=BlankNum()
          EndIf
          If [Descricao da Destinacao]="COMPLEMENTO ST" 
             Then [Valor Mercadoria        ]=BlankNum()
                  [Valor Mercadoria Liquido]=BlankNum()
          EndIf
        endif
  
        ;*** 0=BlankNum() **************************************************************
        If [Valor Mercadoria         ]=0 Then [Valor Mercadoria         ]=BlankNum() EndIf
        If [Valor Mercadoria Liquido ]=0 Then [Valor Mercadoria Liquido ]=BlankNum() EndIf

        If [Valor Servico            ]=0 Then [Valor Servico            ]=BlankNum()EndIf
        If [Valor Servico Liquido    ]=0 Then [Valor Servico Liquido    ]=BlankNum() EndIf

        If [Valor BCICMS             ]=0 Then [Valor BCICMS             ]=BlankNum() EndIf
        If [Valor ICMS               ]=0 Then [Valor ICMS               ]=BlankNum() EndIf
        If [Valor BCSubstituicao ICMS]=0 Then [Valor BCSubstituicao ICMS]=BlankNum() EndIf
        If [Valor Substituicao ICMS  ]=0 Then [Valor Substituicao ICMS  ]=BlankNum() EndIf
        If [Valor IPI                ]=0 Then [Valor IPI                ]=BlankNum() EndIf
        If [Valor BCISSQN            ]=0 Then [Valor BCISSQN            ]=BlankNum() EndIf
        If [Valor ISSQN              ]=0 Then [Valor ISSQN              ]=BlankNum() EndIf
        If [Valor PIS                ]=0 Then [Valor PIS                ]=BlankNum() EndIf
        If [Valor COFINS             ]=0 Then [Valor COFINS             ]=BlankNum() EndIf
        If [Valor II                 ]=0 Then [Valor II                 ]=BlankNum() EndIf
        If [Valor TC                 ]=0 Then [Valor TC                 ]=BlankNum() EndIf
        If [Valor Desconto NTributado]=0 Then [Valor Desconto NTributado]=BlankNum() EndIf

        If [Valor Desconto           ]=0 Then [Valor Desconto           ]=BlankNum() EndIf
        If [Valor Desconto Servico   ]=0 Then [Valor Desconto Servico   ]=BlankNum() EndIf
        If [Valor do Frete           ]=0 Then [Valor do Frete           ]=BlankNum() EndIf
        If [Valor do Seguro          ]=0 Then [Valor do Seguro          ]=BlankNum() EndIf
        If [Valor Despesas Acessorias]=0 Then [Valor Despesas Acessorias]=BlankNum() EndIf

        If [Valor TotTributos        ]=0 Then [Valor TotTributos        ]=BlankNum() EndIf
        If [Valor IPI Devolvido      ]=0 Then [Valor IPI Devolvido      ]=BlankNum() EndIf
        If [Valor ICMS_UFDest        ]=0 Then [Valor ICMS_UFDest        ]=BlankNum() EndIf
        If [Valor ICMS_UFRemet       ]=0 Then [Valor ICMS_UFRemet       ]=BlankNum() EndIf

        If [Valor FCP                ]=0 Then [Valor FCP                ]=BlankNum() EndIf
        If [Valor FCP_UFDest         ]=0 Then [Valor FCP_UFDest         ]=BlankNum() EndIf
        If [Valor FCP_Ret_ST         ]=0 Then [Valor FCP_Ret_ST         ]=BlankNum() EndIf
        If [Valor FCP_Ret_Ant_ST     ]=0 Then [Valor FCP_Ret_Ant_ST     ]=BlankNum() EndIf

        If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
           PARAM_UTILIZA_COMISSAO_VENDREAL="S"
           Then Checa_Comissao_Vendedor()
        EndIf

EndIf
Moveto TabelaRefC
Moveto Field CampoTab 

Release vars  VRBCIPI, VRIPI, VRBCICMS, VRICMS, VRBCST, VRST, VRICMS_CREDSN,
              VRBCISSQN, VRISSQN, VRBCPIS, VRPIS, VRBCCOFINS, VRCOFINS,  
              VRII, VRDESCTONT,
              Frete_Valor, Seguro_Valor, OutDesp_Valor, Descto_Valor, Descto_ValorServico,
              DIF_Descto_Valor, DIF_Frete_Valor, DIF_Seguro_Valor, DIF_OutDesp_Valor, DIF_Descto_ValorServico,
              OutrosRateioOk,
              VL_BC_ICMS, VL_BC_ICMS_ST, VL_ICMS_ST,
              TribCST, MercadoriaRateio_Valor, ServicoRateio_Valor,
              Bc_ICMS_Desonerado,
              regtabmva, regncm, regestados, regiten_com,
              TOT_FCP_Valor, TOT_FCP_ST_Valor, TOT_FCP_STRET_Valor,
              TOT_FCP_UFDEST_Valor, TOT_ICMS_UFDEST_Valor, TOT_ICMS_UFREMET_Valor,
              TOT_IPI_DEVOL_Valor, TOT_TRIB_Valor,
              vricmspart, aliqicmspart, aliq_ibpt

Release Procs Pega_AliqIBPT, TirarMensagemObs

LimpAguarde()
EndProc     ;Calc_OF()

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Closed Checa_Comissao_Vendedor()
UseVars AutoLib, ErrorProc, PARAM_UTILIZA_COMISSAO_VENDREAL,SYS_CODIGO_CLIENTE

Private Tx_Comissao, Tx_Descto, Tx_Encontrada, Vr_Descto, NCampo,
        TOT_MERC_TABELA, TOT_MERC_VENDAS, DIFER, 
        CODREP, CODTAB, CODCDIA, wc1, wc2, wc3

If [FaturaC->Tipo de Pagamento]="O"
   Then Return True
EndIf

NCampo=Field()

If PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then TOT_MERC_TABELA=0
        TOT_MERC_VENDAS=[FaturaC->Valor Mercadoria Liquido]

        Moveto "FaturaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+Round(([Quantidade]*[Preco Unitario Tabela]),2)
        EndScan
        Moveto "FaturaC"

        DIFER=TOT_MERC_VENDAS-TOT_MERC_TABELA
        If DIFER<0
           Then DIFER=DIFER*-1
                Tx_Descto=Round(((DIFER*100)/TOT_MERC_TABELA),2)
           Else Tx_Descto=0
        EndIf
   Else If [FaturaC->Taxa de Desconto]>0
           Then Tx_Descto=[FaturaC->Taxa de Desconto ]
           Else Vr_Descto=[FaturaC->Valor do Desconto]
                Tx_Descto=(Vr_Descto/[FaturaC->Valor Mercadoria])*100
        EndIf
EndIf

Tx_Comissao  =BlankNum()
Tx_Encontrada=False

Moveto [Lookup_Trdescto]
Ativa_Lookup()
Moveto [Codigo da Empresa]
For wc1 From 1 To 2
  Switch
    Case wc1=1 : CODTAB=[FaturaC->Codigo da Tabela       ]
    Case wc1=2 : CODTAB="00000"
  EndSwitch

  For wc2 From 1 To 2
    Switch
      Case wc2=1 : CODREP=[FaturaC->Codigo do Representante]
      Case wc2=2 : CODREP="0000"
    EndSwitch

    For wc3 From 1 To 3
      Switch
        Case wc3=1 : CODCDIA=[FaturaC->Composicao de Dias]
        Case wc3=2 : Switch
                       Case [FaturaC->Tipo de Pagamento]="V": CODCDIA="A VISTA"
                       Case [FaturaC->Tipo de Pagamento]="P": CODCDIA="A PRAZO"
                     EndSwitch
        Case wc3=3 : CODCDIA="TODAS"
      EndSwitch
  
      Locate [FaturaC->Codigo da Empresa],CODTAB,CODREP,CODCDIA
      If Retval
         Then Tx_Encontrada=True
              QuitLoop
      EndIf
    EndFor
    If Tx_Encontrada Then QuitLoop EndIf
    
  EndFor
  If Tx_Encontrada Then QuitLoop EndIf
 
EndFor

If Tx_Encontrada
   Then Tx_Encontrada=False
        While [Codigo da Empresa      ]=[FaturaC->Codigo da Empresa      ] And
              [Codigo da Tabela       ]=CODTAB                             And
              [Codigo do Representante]=CODREP                             And
              [Composicao de Dias     ]=CODCDIA  

          If [Taxa de Desconto]<=Tx_Descto
             Then Tx_Comissao  =[Taxa de Comissao Normal]
                  Tx_Encontrada=True
             Else QuitLoop
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf
KeyPress "ESC"
Moveto Field NCampo

If IsBlank(Tx_Comissao) Or Not Tx_Encontrada
   Then MSG="% Comiss„o n„o encontrada conforme: //"
        MSG=MSG+"Tabela/Representante/Composi‡„o de Dias/Descontos/Comiss„o, // //Verificar Ok !"
        Mensagem(MSG)
        Return False
   Else [Comissao do Representante]=Tx_Comissao
        Return True
EndIf                                      

EndProc

;*******************************************************************************
;* Rotina de Controle p/ ShowDialog                                            *
;*******************************************************************************
Proc Data_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
INICIO_DIALOG=True

If Not IsAssigned(OP_SHOWD) Then OP_SHOWD="" EndIf
If OP_SHOWD<>"Cheque" Then OP_SHOWD="DTBASE" EndIf

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf          

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="Data_Base"      : CancelDialog
           EndSwitch 
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="Data_Base":
                  VSD_Data_Base=ControlValue("Data_Base")
                  AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
MSGCAMPO=""

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP

EndProc ;Data_Dialog()

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Closed Checa_Comissao_Produto()
UseVars AutoLib, ErrorProc, PARAM_UTILIZA_COMISSAO_VENDREAL

Private Tx_Comissao, Tx_Descto, Tx_Encontrada, Vr_Descto, NCampo, CODREP, CODTAB,
        TOT_MERC_TABELA, TOT_MERC_VENDAS, DIFER, wc, VRCOMIS

If [FaturaC->Tipo de Pagamento]="O"
   Then Return True
EndIf

NCampo=Field()
CODREP=[FaturaC->Codigo do Representante]
CODTAB="01000"

TOT_MERC_TABELA=0
VR_COMIS       =0
If PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then TOT_MERC_VENDAS=[FaturaC->Valor Mercadoria Liquido]

        Moveto "FaturaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+NDecimal(([Quantidade]*[Preco Unitario Tabela]),2)
          VR_COMIS       =VR_COMIS       +NDecimal((([Quantidade]*[Preco Unitario Tabela])*[Comissao do Item])/100,3)
        EndScan
        Moveto "FaturaC"

        DIFER=TOT_MERC_VENDAS-TOT_MERC_TABELA
        If DIFER<0
           Then DIFER=DIFER*-1
                Tx_Descto=NDecimal(((DIFER*100)/TOT_MERC_TABELA),2)
           Else Tx_Descto=0
        EndIf
   Else VR_COMIS       =0

        Moveto "FaturaI"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+NDecimal(([Quantidade]*[Preco Unitario]),2)
          VR_COMIS       =VR_COMIS       +NDecimal((([Quantidade]*[Preco Unitario])*[Comissao do Item])/100,3)
        EndScan
        Moveto "FaturaC"

        If [FaturaC->Taxa de Desconto]>0
           Then Tx_Descto=[FaturaC->Taxa de Desconto ]
           Else Vr_Descto=[FaturaC->Valor do Desconto]
                Tx_Descto=(Vr_Descto/[FaturaC->Valor Mercadoria])*100
        EndIf
EndIf

Tx_Ajuste_Comissao  =BlankNum()
Tx_Encontrada=False

Moveto [Lookup_Trdescto]
Ativa_Lookup()
Moveto [Codigo da Empresa]
For wc From 1 To 2
  Locate [FaturaC->Codigo da Empresa],CODTAB,CODREP,[FaturaC->Composicao de Dias]
  If Retval
     Then Tx_Encontrada=True
          QuitLoop
     Else Switch
            Case wc=1 : CODREP="0000"
          EndSwitch
  EndIf
EndFor

If Tx_Encontrada
   Then Tx_Encontrada=False
        While [Codigo da Empresa      ]=[FaturaC->Codigo da Empresa      ] And
              [Codigo da Tabela       ]=CODTAB                             And
              [Codigo do Representante]=CODREP                             And
              [Composicao de Dias     ]=[FaturaC->Composicao de Dias     ]

          If [Taxa de Desconto]<=Tx_Descto
             Then Tx_Ajuste_Comissao  =[Taxa de Comissao Normal]
                  Tx_Encontrada=True
             Else QuitLoop
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf
KeyPress "ESC"
Moveto Field NCampo

If Not Tx_Encontrada
   Then MSG="% Ajuste na comiss„o n„o encontrada conforme tabela: //"
        MSG=MSG+"Representante/Composi‡„o de Dias/Descontos, // //Verificar Ok !"
        Mensagem(MSG)
        Return False
   Else [Comissao do Representante]=NDecimal((VR_COMIS*100)/TOT_MERC_TABELA,2)
        [Comissao do Representante]=[Comissao do Representante]+Tx_Ajuste_Comissao
        If [Comissao do Representante]<0
           Then [Comissao do Representante]=0
        EndIf
        Return True
EndIf                                      

EndProc

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_CONFIRMA, ESTQ_ANO, ESTQ_MES, MSG

;---- Processo p/ utiliza‡Æo de REGRA ------------------------------------------
Verifica_Emissao_Saida([FaturaC->Data de Emissao])
Switch
  Case REGRA_DATA_ESTOQUE = "Antiga" : AUX_DATA = [FaturaC->Data de Saida  ]
                                       If IsBlank(AUX_DATA) Then AUX_DATA=[FaturaC->Data de Emissao] EndIf
  OtherWise                          : AUX_DATA = [FaturaC->Data de Emissao]
EndSwitch
;-------------------------------------------------------------------------------
ESTQ_MES = AlinhM(StrVal(Month(AUX_DATA)),2)
ESTQ_ANO = StrVal(Year(AUX_DATA))

MSG="N„o foi encontrada a ficha de estoque referente a "+ESTQ_MES+"/"+ESTQ_ANO+" !// //"
MSG=MSG+Format("W08,AL","Empresa")   +"| "+Format("W11,AL","Item")   +"//"
MSG=MSG+Format("W08,AL",ESTQ_EMPRESA)+"| "+Format("W11,AL",ESTQ_ITEM)+"//"
MSG=MSG+"Observacoes:                                                           //"
MSG=MSG+"1. Talvez n„o foi executada a transferˆncia de saldos do mˆs anterior; //"
If ESTQ_CONFIRMA
   Then MSG=MSG+"2. Se for criada agora o saldo inicial deste item ser  igual a 0.      //"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cria-la agora ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
   Else MSG=MSG+"2. A ficha do item ser  criada com o saldo inicial igual a 0.          //"
        Mensagem(MSG)
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Atualiza Situacao do Pedido ou Orcamento                                    *
;*******************************************************************************
Proc ATUA_SITUACAO_PEDIDO_ORCAMENTO()

Private WC_NUMPED, WC_PEDFAT,TemItemFaturado

TemItemFaturado=False
 
WC_NUMPED=0
WC_PEDFAT=0
Scan
  WC_NUMPED=WC_NUMPED+1
  If [Quantidade Faturada]>=[Quantidade]
     Then WC_PEDFAT=WC_PEDFAT+1
  EndIf
  If [Quantidade Faturada]>0
     Then TemItemFaturado=True
  EndIf
EndScan
If WC_NUMPED>0
   Then If PARAM_PEDIDO="S"
           Then Moveto "PedidoC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Pedido   ]="FATURADO"
                   Else [Situacao do Pedido   ]="ABERTO"
                        If TemItemFaturado And 
                           ( ;SYS_CODIGO_CLIENTE = "0377" Or     **Jana¡na solicitou que removesse essa op‡Æo
                            SYS_CODIGO_CLIENTE = "0345" Or
                            SYS_CODIGO_CLIENTE = "0388" Or
                            SYS_CODIGO_CLIENTE = "0427" Or
                            SYS_CODIGO_CLIENTE = "0419" Or
                            SYS_CODIGO_CLIENTE = "0429") 
                           Then [Situacao do Pedido   ]="FATURADO"
                        EndIf
                EndIf
           Else Moveto "OrcaC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Orcamento]="FATURADO"
                   Else [Situacao do Orcamento]="ABERTO"
                EndIf
        EndIf
        UnLockRecord
        SaveTables
EndIf
EndProc     ; (Atua_Situacao_Pedido_Orcamento)
 
;*******************************************************************************
;* Copia Dados do Item do Pedido/Orcamento p/ Item da Fatura                   *
;*******************************************************************************
Proc COPIA_PED_ORC_FATURA()  

If Not IsAssigned(Usando_Expedicao)       Then Usando_Expedicao=False       EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)     Then SYS_CODIGO_CLIENTE=""        EndIf
If Not IsAssigned(PARAM_ITEM_FORA_PEDIDO) Then PARAM_ITEM_FORA_PEDIDO = "N" EndIf

Switch
  Case PARAM_ITEM_FORA_PEDIDO="S" :
    [Codigo do Item          ]=item
    [Preco Unitario          ]=BlankNum()
    [Preco Unitario Tabela   ]=BlankNum()
    GetRecord "\\Sistemas\\Vendas\\TbPrIte" [FaturaC->Codigo da Tabela],[Codigo do Item ] To REG_FATURA
    If RetVal
       Then [Preco Unitario          ]=REG_FATURA["Preco Unitario"]
            [Preco Unitario Tabela   ]=[Preco Unitario            ]
    Endif
    If [Preco Unitario]>0
       Then [Preco Total             ]=Round([Quantidade]*[Preco Unitario],2)
       Else [Preco Total             ]=BlankNum()
    EndIf           
    Ajusta_Dados_Item()       

  Case PARAM_PEDIDO="S": ;--- PEDIDO -------------------------------------------------------------------------

    [Numero Pedido_Orcamento ]=[PedidoI->Numero do Pedido        ]
    [Item Pedido_Orcamento   ]=[PedidoI->Item do Pedido          ]

    [Codigo do Item          ]=[PedidoI->Codigo do Item          ]
;;;;[Tipo do Item            ]=[PedidoI->Tipo do Item            ] nÆo usar do pedido, lookup automatico do cadastro do item
    [Descricao do Item       ]=[PedidoI->Descricao do Item       ]
    [Codigo da Cor_Tecido    ]=[PedidoI->Codigo da Cor_Tecido    ]
    [Descricao da Cor_Tecido ]=[PedidoI->Descricao da Cor_Tecido ]
    [Tamanho                 ]=[PedidoI->Tamanho                 ]
 
    If Usando_Expedicao
       Then If IsAssigned(ROTINA_EXPEDICAO) And ROTINA_EXPEDICAO = "ETIQ" 
               Then [Codigo do Item  ]=[ExpedIQ->Codigo do Item]
               Else If IsAssigned(ROTINA_EXPEDICAO) And ROTINA_EXPEDICAO = "PED"
                       Then [Codigo do Item  ]=[ExpedOfI->Codigo do Item]
                       Else [Codigo do Item  ]=[ExpedI->Codigo do Item]
                    EndIf   
            EndIf   
       Else 
            If [FaturaC->Tipo Movimento Estoque]="S"
               Then [Quantidade      ]=[PedidoI->Quantidade]-[PedidoI->Quantidade Faturada]
               Else [Quantidade      ]=[PedidoI->Quantidade]
            EndIf   
    EndIf

    [Unidade Fiscal          ]=[PedidoI->Unidade Fiscal          ]
    [Preco Unitario          ]=[PedidoI->Preco Unitario          ]
    [Preco Unitario Tabela   ]=[PedidoI->Preco Unitario Tabela   ]
    
    [Tipo Desconto Item      ]=[PedidoI->Tipo Desconto Item      ]
    [Taxa Desconto Unitario  ]=[PedidoI->Taxa Desconto Unitario  ]
    [Valor Desconto Unitario ]=[PedidoI->Valor Desconto Unitario ]
    If [Tipo Desconto Item]="U"
      Then [Valor Desconto Item]=Round([Quantidade]*[Valor Desconto Unitario ],2)
      Else [Valor Desconto Item]=[PedidoI->Valor Desconto Item   ]
    EndIf
      
    [Preco Total             ]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]
    [Taxa Desconto Total     ]=[PedidoI->Taxa Desconto Total     ]
    [Valor Desconto Total    ]=[PedidoI->Valor Desconto Total    ]
    [Peso Liquido            ]=[PedidoI->Peso Liquido            ]
    [Peso Embalagem          ]=[PedidoI->Peso Embalagem          ]
    [Volumes                 ]=[PedidoI->Volumes                 ]
    [Comissao do Item        ]=[PedidoI->Comissao do Item        ]
    [Codigo da Tabela        ]=[PedidoI->Codigo da Tabela        ]
    
    [Numero_Pedido_Compra    ]=[PedidoI->Numero_Pedido_Compra     ]
    [Item_Pedido_Compra      ]=[PedidoI->Item_Pedido_Compra       ]

    ;------------------------------------------------------------------------------------
    If (SYS_CODIGO_CLIENTE="0388" or SYS_CODIGO_CLIENTE="0478") And [PedidoI->Variacoes]<>""
       Then If [Informacoes_Adicionais]<>""
               Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " " + "V["+[PedidoI->Variacoes]+"]" 
               Else [Informacoes_Adicionais] = "V["+[PedidoI->Variacoes]+"]"
            EndIf   
    EndIf   

    if sys_codigo_cliente="0112" Or
       sys_codigo_cliente="0388" or
       sys_codigo_cliente="0427" or
       sys_codigo_cliente="0390" or
       sys_codigo_cliente="0274" or
       sys_codigo_cliente="0419" or  
       sys_codigo_cliente="0429" or
       sys_codigo_cliente="0425" or
       sys_codigo_cliente="0204"  
       then Ajusta_Dados_Item() 
            return
    endif         

    ;------------------------------------------------------------------------------------
    If SYS_CODIGO_CLIENTE = "0003" And 
       Search("VENDA",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S" And
       [Tipo do Item]="P"
       Then 
            [Descricao do Item]=SubStr([PedidoI->Descricao do Item],1,30)

            infadicitem="" 
            If RTrim(SubStr([PedidoI->Descricao do Item],31,4))<>""
               Then infadicitem=infadicitem+"Modelo: "+Completa(RTrim(SubStr([PedidoI->Descricao do Item],31,4)),5," ")
            EndIf
            If RTrim([PedidoI->Descricao da Cor_Tecido ])<>""
               Then infadicitem=infadicitem+"Qtd Pecas: "+RTrim([PedidoI->Descricao da Cor_Tecido ])+" "
            EndIf
            If Not IsBlank([PedidoI->Observacao_Item])
               Then infadicitem=infadicitem+"Cores: "+RTrim([PedidoI->Observacao_Item])
            EndIf   
            [Informacoes_Adicionais]=Infadicitem
    EndIf
    
    If SYS_CODIGO_CLIENTE = "0319"
       Then Moveto [Codigo do Item]
            If Busca_Lookup("Codigo do Item",[FaturaI->Codigo do Item],"")
               Then If len([Descricao do Item])<=30
                       Then [Descricao do Item]=Completa([Descricao do Item],31," ")+Reg_Busca_Lookup["Codigo Fornecedor"]
                    EndIf
            EndIf
    EndIf        

    If [Tributacao de ICMS]<>"D" And Not IsBlank([Tipo Tributacao])
      Then Switch
            Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
            Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
            Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
    			 EndSwitch
    EndIf

   If [Tipo do Item]="C"  and ;  Servi‡o
      (SYS_CODIGO_CLIENTE="0121" or 
       SYS_CODIGO_CLIENTE="0034" or    
       SYS_CODIGO_CLIENTE="0092" )    
      Then [ISSQN_Municipio]=3122306
           [ISSQN_UF       ]="MG"
   EndIf

    
    ;* Seta Variaveis PegaCFOP
    Checa_CFOP      =[FaturaC->Tipo Movimento Estoque]
    Switch
      Case SYS_CODIGO_CLIENTE="0268": CFO_C=[PedidoI->CFO]
      OtherWise                     : CFO_C=[FaturaC->CFO]
    EndSwitch
    CFOP_TPITEM     =[Tipo do Item      ]
    CFOP_TRIBICMS   =[PedidoI->Tributacao de ICMS      ]
    CFOP_TPTRIB     =[PedidoI->Tipo Tributacao         ]
    CFOP_EMPRESA    =[FaturaC->Codigo da Empresa       ]
    CFOP_ATIVEMPRESA=ATIVEMPR
    Play "\\Sistemas\\Exporta\\PegaCFOP"

    Switch
      Case SYS_CODIGO_CLIENTE="0268": 
        [CFO            ]=[PedidoI->CFO]
        [Tipo Tributacao]=[PedidoI->Tipo Tributacao         ]
      OtherWise                     : 
        [CFO            ]=CFO_C
        [Tipo Tributacao]=CFOP_TPTRIB
    EndSwitch
    
    if [FaturaC->UF]="EX" and substr([CFO],1,1)="7" and [Unidade Fiscal]="PC"
       then [Unidade Fiscal]="UN"
    endif   

    If (Search("VENDA",[FaturaC->Descricao da Destinacao])=0 And [FaturaC->Tipo Movimento Estoque]<>"S") Or
       (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
       Then [PIS_CST        ]  ="99"
            [PIS_ALIQUOTA   ]=BlankNum() 
            [COFINS_CST     ]  ="99"
            [COFINS_ALIQUOTA]=BlankNum()
       Else [PIS_CST        ]=[PedidoI->PIS_CST        ]
            [PIS_ALIQUOTA   ]=[PedidoI->PIS_ALIQUOTA   ]
            [COFINS_CST     ]=[PedidoI->COFINS_CST     ]
            [COFINS_ALIQUOTA]=[PedidoI->COFINS_ALIQUOTA]          
    EndIf    


    [Tributacao de IPI       ]=[PedidoI->Tributacao de IPI       ]
    [Aliquota de IPI         ]=[PedidoI->Aliquota de IPI         ]
    [Valor do IPI            ]=[PedidoI->Valor do IPI            ]

    [Tributacao de ICMS      ]=[PedidoI->Tributacao de ICMS      ]
    [Aliquota Reduzida BCICMS]=[PedidoI->Aliquota Reduzida BCICMS]
    [Aliquota de ICMS        ]=[PedidoI->Aliquota de ICMS        ]
    [Valor do ICMS           ]=[PedidoI->Valor do ICMS           ]

    [ICMS_ST_Aliquota Reduzida]=[PedidoI->ICMS_ST_Aliquota Reduzida]
    [ICMS_ST_Aliquota        ]=[PedidoI->ICMS_ST_Aliquota         ]

    [Tributacao de ISSQN     ]=[PedidoI->Tributacao de ISSQN     ]
    [Aliquota de ISSQN       ]=[PedidoI->Aliquota de ISSQN       ]
   ;[Valor do ISSQN          ]=[PedidoI->Valor do ISSQN          ]

    [MVA                     ]=[PedidoI->MVA                     ]
    [Codigo MVA              ]=[PedidoI->Codigo MVA              ]
    [CSOSN                   ]=[PedidoI->CSOSN                   ]

    If SYS_CODIGO_CLIENTE = "0353" And SubStr(Upper(Directory()),1,2)="X:"      ;*** ALUMAX ***
          Then [Informacoes_Adicionais] = [PedidoI->Observacao_Item  ]
    EndIf

    If [FaturaC->Tipo Movimento Estoque]="E"                     And
       (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
       Search("DEVOL",[FaturaC->Descricao da Destinacao])>0      And
       SYS_CLIENTE_CONFEC<>""
       Then [CSOSN                  ]="400"
            [Tipo Tributacao        ]=SubStr([Tipo Tributacao],1,1)+"90"
            [Tributacao de ICMS     ]="O"
    EndIf

    If [FaturaC->Tipo Movimento Estoque]="S"                     And
       (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
       (Search("SIMPLES",[FaturaC->Descricao da Destinacao])>0    Or
        Search("OUTRAS" ,[FaturaC->Descricao da Destinacao])>0)  And
       SYS_CLIENTE_CONFEC<>""
       Then [CSOSN                  ]="400"
            [Tipo Tributacao        ]=SubStr([Tipo Tributacao],1,1)+"90"
            [Tributacao de ICMS     ]="O"
    EndIf

   If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
      Then If ([CSOSN]="101" Or [CSOSN]="201") And [ICMS_CREDSN_Aliquota]<=0
              Then [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
           EndIf
   EndIf   
    
    ;-- Ajustar faturai com pedidos digitados incorretos para icms ST       
    If [Tipo do Item]<>"C" And SubStr(Upper(Directory()),1,2)<>"X:"
       Then TribCST=SubStr([Tipo Tributacao],2,2)
            If (TribCST="10" Or TribCST="30" Or TribCST="70")
               Then 
                    If [Aliquota de ICMS]<=0 Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS        EndIf
                    If [ICMS_ST_Aliquota]<=0 Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA  EndIf
                    If [MVA]<=0              Then Checa_MVA("FATURA",[Tributacao de Icms],[Codigo MVA]) EndIf
            EndIf                                                 
    EndIf                                                 

    If ([FaturaC->Codigo da Empresa]<>Pedido_Empresa And
       ([FaturaC->Codigo da Destinacao]+[FaturaC->Descricao da Destinacao])<>Pedido_Destin And
        TPEMPR="DEBITO/CREDITO") Or 
       (([FaturaC->Codigo da Destinacao]+[FaturaC->Descricao da Destinacao])<>Pedido_Destin And
        TPEMPR="DEBITO/CREDITO")       
       Then [Codigo do Item]=""
            [Codigo do Item]=[PedidoI->Codigo do Item          ]

           If [Tipo do Item]<>"C" ; not Servi‡o
              Then 
                   TribCST=SubStr([Tipo Tributacao],2,2)
                   Switch
                     Case (TribCST="00" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                          (TribCST="10" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                          (TribCST="20" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0) Or
                          (TribCST="70" And TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0):
                          [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                           If OPCAO_RED_BCICMS="1"
                              Then [Aliquota Reduzida BCICMS]=BlankNum()
                           EndIf
          
                     Case (TribCST="10" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0) Or
                          (TribCST="70" And TRIB_ICMS="S" And UF_ALIQUOTA_ICMS>0):
                          [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                           If OPCAO_RED_BCICMS="1"
                              Then [Aliquota Reduzida BCICMS]=BlankNum()
                           EndIf
          
                     Case (TribCST="00" Or TribCST="10" Or TribCST="20" Or TribCST="70") And
                          TRIB_ICMS<>"D" And TRIB_ICMS<>"S":
                          [Tributacao de Icms]=TRIB_ICMS
                          [Aliquota de ICMS  ]=BlankNum()
                          Switch
                           Case [Tributacao de Icms]="O": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"90"                
                           Case [Tributacao de Icms]="I": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"40"                                
                           Case [Tributacao de Icms]="N": [Tipo Tributacao]=SubStr([Tipo Tributacao],1,1)+"41"                                
          							 EndSwitch
                   EndSwitch
  
                   [CSOSN               ]="900"
                  ;[ICMS_CREDSN_Aliquota]=BlankNum()
  
                   Switch
                     Case (TribCST="10" Or TribCST="30" Or TribCST="70"):

                         switch
                           case sys_Codigo_Cliente="0112" and [FaturaC->Tipo Pessoa]="FISICA":
                             [Tipo Tributacao   ]=SubStr([Tipo Tributacao],1,1)+"00"                
                             [Tributacao de Icms]="D"
                             [MVA               ]=BlankNum()
                             [ICMS_ST_Aliquota  ]=BlankNum()
                           
                           case sys_Codigo_Cliente="0112" and [FaturaC->Tipo Pessoa]="JURIDICA" : 
                        ;;      ([FaturaC->IE]<>"ISENTO" And [FaturaC->IE]<>"NAOCONTRIBUINTE"):
                             [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                             Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                             [Aliquota de ICMS]=18
                                 
                           otherwise                     :
                             [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                             Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                         EndSwitch

                     Case TribCST="60" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="E":
                          [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                          Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                     OtherWise:     
                          [MVA             ]=BlankNum()
                          [ICMS_ST_Aliquota]=BlankNum()
                   EndSwitch

                   [Tributacao de ISSQN     ]="N"
                   [Aliquota de ISSQN       ]=BlankNum()
           EndIf   
  
           ;* Seta Variaveis PegaCFOP
           Checa_CFOP      =[FaturaC->Tipo Movimento Estoque]
           CFO_C           =[FaturaC->CFO      ]
           CFOP_TPITEM     =[Tipo do Item      ]
           CFOP_TRIBICMS   =[Tributacao de ICMS]
           CFOP_TPTRIB     =[Tipo Tributacao   ]
           CFOP_EMPRESA    =[FaturaC->Codigo da Empresa ]
           CFOP_ATIVEMPRESA=ATIVEMPR
           Play "\\Sistemas\\Exporta\\PegaCFOP"        
           [CFO            ]=CFO_C
           [Tipo Tributacao]=CFOP_TPTRIB

    EndIf   
            
    If SYS_CODIGO_CLIENTE="0079"             And
       [Faturac->Codigo da Empresa]="0001"   And
       [FaturaC->Tipo Movimento Estoque]="S"
       Then
           [Tributacao de ICMS     ]="O"
           [Aliquota de ICMS       ]=BlankNum()
           [Tipo Tributacao        ]="090"
           [CSOSN                  ]="101"

           If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
              Then If [FaturaC->TIPO PESSOA]="FISICA" Or Not ALIQUOTA_CREDITO_ICMS_NOSN>0 
                      Then Switch
                             Case [CSOSN]="101": [CSOSN]="102" 
                             Case [CSOSN]="201": [CSOSN]="202" 
                           EndSwitch
                   EndIf
           EndIf

           If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
              (Search("MOSTR",[FaturaC->Descricao da Destinacao])>0     Or
               Search("DEVOL",[FaturaC->Descricao da Destinacao])>0     Or
               Search("BRIND",[FaturaC->Descricao da Destinacao])>0)    And
              SYS_CLIENTE_CONFEC<>""
              Then [CSOSN]="400"
           EndIf

           [PIS_CST                ]="99"
           [PIS_ALIQUOTA           ]=BlankNum()
           [COFINS_CST             ]="99"
           [COFINS_ALIQUOTA        ]=BlankNum()
    EndIf

    If SYS_CODIGO_CLIENTE="0003" And ([CFO]="6109" Or [CFO]="6924")
     Then [PIS_CST                ]="08"
          [PIS_ALIQUOTA           ]=BlankNum()
          [COFINS_CST             ]="08"
          [COFINS_ALIQUOTA        ]=BlankNum()
    EndIf               

    If SYS_CODIGO_CLIENTE="0227" And ([CFO]="5912" Or [CFO]="6912") ;Remessa para Mostru rio
     Then [IPI_CST                ]="99"
          [Aliquota de IPI        ]=BlankNum()
          [PIS_CST                ]="99"
          [PIS_ALIQUOTA           ]=BlankNum()
          [COFINS_CST             ]="99"
          [COFINS_ALIQUOTA        ]=BlankNum()
    EndIf
    If SYS_CODIGO_CLIENTE="0227" And ([CFO]="1913" Or [CFO]="2913") ;Retorno de Mostru rio
      Then 
           [Tributacao de IPI      ]="N"
           [IPI_CST                ]="49"
           [Aliquota de IPI        ]=BlankNum()
           [PIS_CST                ]="99"
           [PIS_ALIQUOTA           ]=BlankNum()
           [COFINS_CST             ]="99"
           [COFINS_ALIQUOTA        ]=BlankNum()
    EndIf            
     
    ;--- tratando zona franca manaus -- 21/10/2016 -------------------------------
    if TPEMPR="DEBITO/CREDITO" and
       Motivo_Desoneracao_ICMS<>"" And Aliquota_ICMS_Desonerado>0 and
       not IsBlank([FaturaC->ISUFRAMA])
       Then 
            if ( search([CFO],"6109,6110,6120,6122,6123,6151,6152")>0 or 
                 search([CFO],"6651,6652,6654,6655,6658,6659,6910")>0 ) and
                 search(SubStr([Tipo Tributacao],2,2),"20,30,40,70,90")>0 
               then
                    [PIS_CST        ]="06"  [PIS_ALIQUOTA   ]=0 
                    [COFINS_CST     ]="06"  [COFINS_ALIQUOTA]=0 
            endif
    EndIf



  OtherWise:             ;--- ORCAMENTO ----------------------------------------------------------------------

    [Numero Pedido_Orcamento ]=[OrcaI->Numero do Orcamento       ]
    [Item Pedido_Orcamento   ]=[OrcaI->Item do Orcamento         ]
    [Codigo do Item          ]=[OrcaI->Codigo do Item            ]
;;;;[Tipo do Item            ]=[OrcaI->Tipo do Item              ] nÆo usar do pedido, lookup automatico do cadastro do item
    [Descricao do Item       ]=[OrcaI->Descricao do Item         ]
    
    If [FaturaC->Tipo Movimento Estoque]="S"
       Then [Quantidade      ]=[OrcaI->Quantidade]-[OrcaI->Quantidade Faturada]
       Else [Quantidade      ]=[OrcaI->Quantidade]
    EndIf   

    ;* Seta Variaveis PegaCFOP
    Checa_CFOP      =[FaturaC->Tipo Movimento Estoque]
    CFO_C           =[FaturaC->CFO      ]
    CFOP_TPITEM     =[Tipo do Item      ]
    CFOP_TRIBICMS   =[OrcaI->Tributacao de ICMS      ]
    CFOP_TPTRIB     =[OrcaI->Tipo Tributacao         ]
    CFOP_EMPRESA    =[FaturaC->Codigo da Empresa       ]
    CFOP_ATIVEMPRESA=ATIVEMPR
    Play "\\Sistemas\\Exporta\\PegaCFOP"
    [CFO            ]=CFO_C
    [Tipo Tributacao]=CFOP_TPTRIB

    [Unidade Fiscal          ]=[OrcaI->Unidade Fiscal            ]
    [Preco Unitario          ]=[OrcaI->Preco Unitario            ]
    [Preco Unitario Tabela   ]=[OrcaI->Preco Unitario Tabela     ]

    [Taxa Desconto Unitario  ]=[OrcaI->Taxa Desconto Unitario    ]
    [Valor Desconto Unitario ]=[OrcaI->Valor Desconto Unitario   ]
    if [Valor Desconto Unitario ]>0
       then [Tipo Desconto Item ]="U"
            [Valor Desconto Item]=Round([Quantidade]*[Valor Desconto Unitario ],2)
    endif   
    [Preco Total             ]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]

    [Tributacao de IPI       ]=[OrcaI->Tributacao de IPI         ]
    [Aliquota Reduzida BCIPI ]=[OrcaI->Aliquota Reduzida BCIPI   ]
    [Aliquota de IPI         ]=[OrcaI->Aliquota de IPI           ]
    [Valor do IPI            ]=[OrcaI->Valor do IPI              ]
    [Tributacao de ICMS      ]=[OrcaI->Tributacao de ICMS        ]
    [Aliquota Reduzida BCICMS]=[OrcaI->Aliquota Reduzida BCICMS  ]
    [Aliquota de ICMS        ]=[OrcaI->Aliquota de ICMS          ]
    [Valor do ICMS           ]=[OrcaI->Valor do ICMS             ]
    [Tributacao de ISSQN     ]=[OrcaI->Tributacao de ISSQN       ]
    [Aliquota de ISSQN       ]=[OrcaI->Aliquota de ISSQN         ]
    [Valor do ISSQN          ]=[OrcaI->Valor do ISSQN            ]
    [Taxa Desconto Total     ]=[OrcaI->Taxa Desconto Total       ]
    [Valor Desconto Total    ]=[OrcaI->Valor Desconto Total      ]
    [CSOSN                   ]=[Orcai->CSOSN                     ]
    [Informacoes_Adicionais  ]=[Orcai->Informacoes_Adicionais    ]

    if sys_codigo_cliente="0102"
       then
            [Entrega        ]="S"
            [Data a Entregar]=[FaturaC->Data de Emissao]
    endif
EndSwitch

TribCST=SubStr([Tipo Tributacao],2,2)
If (TribCST<>"00" And TribCST<>"10" And TribCST<>"20" And TribCST<>"30" And TribCST<>"70")
   Then [Aliquota Reduzida BCICMS]=BlankNum()
        [Aliquota de ICMS        ]=BlankNum()
        [Valor do ICMS           ]=BlankNum()
EndIf

If [Aliquota Reduzida BCICMS]>0 And
   [Aliquota de ICMS        ]>0
   Then [Valor do ICMS]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
   Else [Valor do ICMS]=Round(([Preco Total]*[Aliquota de ICMS])/100,2)
EndIf

If [Aliquota Reduzida BCIPI ]>0 And
   [Aliquota de IPI         ]>0 And
   PARAM_PEDIDO<>"S"
   Then [Valor do IPI ]=Round((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
   Else [Valor do IPI ]=Round(([Preco Total]*[Aliquota de IPI ])/100,2)
EndIf

If PARAM_PEDIDO<>"S"
   Then [Valor do ISSQN ]=Round(([Preco Total]*[Aliquota de ISSQN ])/100,2)
EndIf 

;----- Ajustes Informa‡äes Adicionais em 05.12.2016 ------------------
GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
If ReTval
   Then 
        ;-- Descricao Complementar ---------------------------------------------------
        If SYS_CODIGO_CLIENTE = "0410" or
           SYS_CODIGO_CLIENTE = "0000"   
           then If REG_ITEM["Descricao Complementar"]<>""
                   Then sDESCRCOMPL=REG_ITEM["Descricao Complementar"]
                        If Not IsBlank([Informacoes_Adicionais])
                           Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sDESCRCOMPL
                           Else [Informacoes_Adicionais] = sDESCRCOMPL
                        EndIf   
                EndIf
        endif   
        
        GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item]  To REG_ITEMCOMP
        If Retval
           Then
                ;-- Informac‡äes Adicionais --------------------------------------------------
                If REG_ITEMCOMP["Informacoes_Adicionais"] <> ""
                   Then if not isblank([Informacoes_Adicionais])
                           then [Informacoes_Adicionais] = [Informacoes_Adicionais]  + "-" + REG_ITEMCOMP["Informacoes_Adicionais"] 
                           Else [Informacoes_Adicionais] = REG_ITEMCOMP["Informacoes_Adicionais"]
                        endif   
                EndIf
                
                ;-- FCI ----------------------------------------------------------------------
                If REG_ITEMCOMP["FCI"] <> ""
                  Then sFCI="RESOLUCAO DO SENADO FEDERAL N. 13/12 FCI " + REG_ITEMCOMP["FCI"]
                  
                       If Search("RESOLUCAO DO SENADO",[Informacoes_Adicionais])=0
                          Then 
                               If Not IsBlank([Informacoes_Adicionais])
                                  then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - "  + sFCI
                                  Else [Informacoes_Adicionais] = sFCI 
                               EndIf    
                       EndIf               
                EndIf
        EndIf     
        
        ;-- Informa‡äes Adicionais do Pedido -----------------------------------
        If PARAM_PEDIDO="S"
           Then GetRecord "\\Sistemas\\Vendas\\PedidoI" [PedidoI->Numero do Pedido],[PedidoI->Item do Pedido] To REG_ITEMPED
                If Retval
                   Then
                        ;-- Informac‡äes Adicionais --------------------------------------------------
                        If REG_ITEMPED["Informacoes_Adicionais"]<>"" And Search(REG_ITEMPED["Informacoes_Adicionais"],[Informacoes_Adicionais])=0 
                           Then If Not isblank([Informacoes_Adicionais])
                                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais]  + "-" + REG_ITEMPED["Informacoes_Adicionais"] 
                                   Else [Informacoes_Adicionais] = REG_ITEMPED["Informacoes_Adicionais"]
                                EndIf   
                        EndIf
                EndIf
        EndIf
        
        ;-- Simbologia ---------------------------------------------------------------
        If SYS_CODIGO_CLIENTE="0236" Or SYS_CODIGO_CLIENTE="0260" Or SYS_CODIGO_CLIENTE="0298" Or
           SYS_CODIGO_CLIENTE="0051" Or SYS_CODIGO_CLIENTE="0228"  
           Then 
                If REG_ITEM["Descricao da Simbologia"] <> ""
                   Then sSIMBOLOGIA="Simbol: "+REG_ITEM["Descricao da Simbologia"]    
                        If REG_ITEM["Pais"]<>""
                           Then sSIMBOLOGIA = sSIMBOLOGIA + " - " + REG_ITEM["Pais"]
                        EndIf
                        If Not IsBlank([Informacoes_Adicionais])
                           Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sSIMBOLOGIA
                           Else [Informacoes_Adicionais] = sSIMBOLOGIA
                        EndIf   
                EndIf
        EndIf
        
        ;-- Codigo de Barras ---------------------------------------------------------
        If SYS_CODIGO_CLIENTE="0297"
           Then 
                If regItens["Codigo de Barras"]<>"" and regItens["Tipo Codigo_Barras"]<>"A-EAN13"
                   Then sCDBARRA="EAN13 "+regItens["Codigo de Barras"]
                        If Not IsBlank([Informacoes_Adicionais])
                           Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sCDBARRA
                           Else [Informacoes_Adicionais] = sCDBARRA
                        EndIf   
                EndIf
        EndIf

        ;-- Composi‡Æo + Simbologia_Impressao ------------------------------------------
        If SYS_CODIGO_CLIENTE="0390"
           Then 
                GetRecord "\\Sistemas\\Estoque\\Iten_tec" [Codigo do Item] To regiten_tec 
                If RetVal
                   Then 
                        If regiten_tec["Composicao"] <> ""
                           Then If Not IsBlank([Informacoes_Adicionais])
                                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + regiten_tec["Composicao"]
                                   Else [Informacoes_Adicionais] = regiten_tec["Composicao"]
                                EndIf   
                        EndIf
                        If regiten_tec["Simbologia_Impressao"] <> ""
                           Then If Not IsBlank([Informacoes_Adicionais])
                                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + regiten_tec["Simbologia_Impressao"]
                                   Else [Informacoes_Adicionais] = regiten_tec["Simbologia_Impressao"]
                                EndIf   
                        EndIf
                EndIf
        EndIf

EndIf 

Release Vars REG_ITEMCOMP, sFCI,sSIMBOLOGIA,sCDBARRA,sDESCRCOMPL,regiten_tec

EndProc    ; (Copia_Ped_Orc_Fatura)


;*******************************************************************************
;* Copia Dados do Item do Pedido igual p/ Item da Fatura                       *
;*******************************************************************************
Proc SoCopiaPedidoFatura()  

    [Numero Pedido_Orcamento ]=[PedidoI->Numero do Pedido        ]
    [Item Pedido_Orcamento   ]=[PedidoI->Item do Pedido          ]

    [Codigo do Item          ]=[PedidoI->Codigo do Item          ]
    [Tipo do Item            ]=[PedidoI->Tipo do Item            ]
    [Descricao do Item       ]=[PedidoI->Descricao do Item       ]
    [Codigo da Cor_Tecido    ]=[PedidoI->Codigo da Cor_Tecido    ]
    [Descricao da Cor_Tecido ]=[PedidoI->Descricao da Cor_Tecido ]
    [Tamanho                 ]=[PedidoI->Tamanho                 ]
    [Quantidade              ]=[PedidoI->Quantidade              ]
    [Unidade Fiscal          ]=[PedidoI->Unidade Fiscal          ]
    [Preco Unitario          ]=[PedidoI->Preco Unitario          ]
    [Preco Unitario Tabela   ]=[PedidoI->Preco Unitario Tabela   ]

    [Tipo Desconto Item      ]=[PedidoI->Tipo Desconto Item      ]
    [Taxa Desconto Unitario  ]=[PedidoI->Taxa Desconto Unitario  ]
    [Valor Desconto Unitario ]=[PedidoI->Valor Desconto Unitario ]
    If [Tipo Desconto Item ]="U"
       Then [Valor Desconto Item]=Round([Quantidade]*[Valor Desconto Unitario ],2)
       Else [Valor Desconto Item]=[PedidoI->Valor Desconto Item  ]
    Endif   
    
    [Preco Total             ]=Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]

    [CFO                     ]=[PedidoI->CFO                     ]
    
    if [FaturaC->UF]="EX" and substr([CFO],1,1)="7" and [Unidade Fiscal]="PC"
       then [Unidade Fiscal]="UN"
    endif   
    
    [NCM                     ]=[PedidoI->NCM                     ]

    [Tipo Tributacao         ]=[PedidoI->Tipo Tributacao         ]
    [CSOSN                   ]=[PedidoI->CSOSN                   ]
    [Tributacao de ICMS      ]=[PedidoI->Tributacao de ICMS      ]
    [Aliquota Reduzida BCICMS]=[PedidoI->Aliquota Reduzida BCICMS]
    [ICMS_BC                 ]=[PedidoI->ICMS_BC                 ]
    [Aliquota de ICMS        ]=[PedidoI->Aliquota de ICMS        ]
    [Valor do ICMS           ]=[PedidoI->Valor do ICMS           ]
   ;[ICMS_CredSN_Aliquota    ]=[PedidoI->ICMS_CredSN_Aliquota    ]
   ;[ICMS_CredSN_Valor       ]=[PedidoI->ICMS_CredSN_Valor       ]

    [Codigo MVA              ]=[PedidoI->Codigo MVA              ]
    [MVA                     ]=[PedidoI->MVA                     ]
    [ICMS_ST_Aliquota Reduzida]=[PedidoI->ICMS_ST_Aliquota Reduzida]
    [ICMS_ST_BC              ]=[PedidoI->ICMS_ST_BC               ]
    [ICMS_ST_Aliquota        ]=[PedidoI->ICMS_ST_Aliquota         ]
    [ICMS_ST_Valor           ]=[PedidoI->ICMS_ST_Valor            ]

    [Tributacao de IPI       ]=[PedidoI->Tributacao de IPI       ]
    [IPI_CST                 ]=[PedidoI->IPI_CST                 ]
    [IPI_BC                  ]=[PedidoI->IPI_BC                  ]
    [Aliquota de IPI         ]=[PedidoI->Aliquota de IPI         ]
    [Valor do IPI            ]=[PedidoI->Valor do IPI            ]

    [Tributacao de ISSQN     ]=[PedidoI->Tributacao de ISSQN     ]
   ;[ISSQN_BC                ]=[PedidoI->ISSQN_BC                ]
    [Aliquota de ISSQN       ]=[PedidoI->Aliquota de ISSQN       ]
   ;[Valor do ISSQN          ]=[PedidoI->Valor do ISSQN          ]
   ;[Codigo_Servico          ]=[PedidoI->Codigo_Servico          ]
   ;[ISSQN_UF                ]=[PedidoI->ISSQN_UF                ]
   ;[ISSQN_Municipio         ]=[PedidoI->ISSQN_Municipio         ]
    [Informacoes_Adicionais  ]=[PedidoI->Informacoes_Adicionais  ] 

    [PIS_CST                 ]=[PedidoI->PIS_CST                 ]
   ;[PIS_BC                  ]=[PedidoI->PIS_BC                  ]
    [PIS_ALIQUOTA            ]=[PedidoI->PIS_ALIQUOTA            ]
   ;[PIS_Valor               ]=[PedidoI->PIS_Valor               ]
    
    [COFINS_CST              ]=[PedidoI->COFINS_CST              ]
   ;[COFINS_BC               ]=[PedidoI->COFINS_BC               ]
    [COFINS_ALIQUOTA         ]=[PedidoI->COFINS_ALIQUOTA         ]          
   ;[COFINS_Valor            ]=[PedidoI->COFINS_Valor            ]

    [Taxa Desconto Total     ]=[PedidoI->Taxa Desconto Total     ]
    [Valor Desconto Total    ]=[PedidoI->Valor Desconto Total    ]
    [Peso Liquido            ]=[PedidoI->Peso Liquido            ]
    [Peso Embalagem          ]=[PedidoI->Peso Embalagem          ]
    [Volumes                 ]=[PedidoI->Volumes                 ]
    [Comissao do Item        ]=[PedidoI->Comissao do Item        ]
    [Codigo da Tabela        ]=[PedidoI->Codigo da Tabela        ]

    [Numero_Pedido_Compra    ]=[PedidoI->Numero_Pedido_Compra     ]
    [Item_Pedido_Compra      ]=[PedidoI->Item_Pedido_Compra       ]
    
EndProc    ; (SoCopiaPedidoFatura)


;*******************************************************************************
;* Rotina p/ Checagem Saldo Pedido                                            **
;*******************************************************************************
Proc Checa_Pedido()
Private NOVOSALDO

If PARAM_PEDIDO<>"S"
   Then Return True
EndIf
If PARAM_PEDIDO="S" And DESTIN_ATUALIZA_PEDIDOS<>"S"
   Then Return True
EndIf
If IsBlank([FaturaI->Numero Pedido_Orcamento]) And
   IsBlank([FaturaI->Item Pedido_Orcamento])
   Then Return True
EndIf

Moveto "FaturaC"
[Numero Pedido_Orcamento]=[FaturaI->Numero Pedido_Orcamento]

Moveto "PedidoI"
Moveto [Item do Pedido]
Locate [FaturaI->Item Pedido_Orcamento]
If Not RetVal
   Then Mensagem("Item do Pedido n„o encontrado !")
        Moveto "FaturaI"
        Return False
   Else ;---- NÆo checa o SALDO do Pedido -----------
        If SYS_CODIGO_CLIENTE="0237"
           Then Moveto "FaturaI" 
                Return True
        EndIf
        NOVOSALDO=-1
        Switch
          Case CHAVEI=1:
               NOVOSALDO=NDecimal(([Quantidade]-[Quantidade Faturada])-[FaturaI->Quantidade],3)
          Case CHAVEI=0:
               NOVOSALDO=NDecimal(((([Quantidade]-[Quantidade Faturada])+QUANT)-[FaturaI->Quantidade]),3)
        EndSwitch
EndIf
   
Moveto "FaturaI"
If NOVOSALDO>=0
   Then Return True
   Else Mensagem("Saldo do Pedido Insuficiente em "+StrVal(Format("W11.3,EIC",NOVOSALDO))+", Verificar !")
        If PARAM_BLOQPED_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc    ; (Checa_Pedido)

;*******************************************************************************
;* Verificacao Maximo de Dias de Atraso                                        *
;*******************************************************************************
Proc Closed Dias_Atraso()
UseVars AutoLib, ErrorProc,
        ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO, 
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, PARAM_DIAS_ATRASO

Private CREDITO_TOTAV, CREDITO_TOTV, DIAS_ATRASO, MSG

Aguarde("Aguarde, Analisando Documentos c/ Dias Atrasados")

;; Titulos a Vencer e Vencidos
CREDITO_TOTAV  = 0
CREDITO_TOTV   = 0
DIAS_ATRASO    = 0
MSG="Pedido "+[FaturaC->Numero do Pedido]+"//"
MSG=MSG+"Cliente "+[FaturaC->Codigo]+"-"+[FaturaC->Razao Social]+"// //"

UnLockRecord
echo off

FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli"
Moveto [Codigo]
Locate [FaturaC->Codigo]
If Not RetVal
   Then Mensagem("Cliente sem n§ dias p/ atraso informado na ficha financeira !")
   Else DIAS_ATRASO=[Maximo Dias Atraso]
        If DIAS_ATRASO<=0
           Then MSG="Cliente sem n§ dias p/ atraso informado na ficha financeira !// //"
        EndIf
EndIf

Moveto "\\Sistemas\\Ctarec\\Duplic"
Moveto [Codigo do Destinatario]
Locate IndexOrder by "IndDup22" [FaturaC->Codigo]
If RetVal
	 Then While [Codigo do Destinatario]=[FaturaC->Codigo]
         If ([Numero Docto Gerador]<>[FaturaC->Numero Nota Gerada] Or
            IsBlank([Numero Docto Gerador])) And
            [Data de Emissao     ]<>[FaturaC->Data de Emissao   ]
            Then If [Saldo do Documento]>0.01
                   Then If [Data de Vencimento]>=Today()
                           Then CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                           Else If (Today()-[Data de Vencimento])>=DIAS_ATRASO
                                   Then CREDITO_TOTV =CREDITO_TOTV +[Saldo do Documento]
                                   Else CREDITO_TOTAV=CREDITO_TOTAV+[Saldo do Documento]
                                EndIf
                        EndIf
                 EndIf
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
          Locate IndexOrder by "IndDup22" Next [FaturaC->Codigo]
          If Not RetVal Then QuitLoop EndIf
				EndWhile
EndIf
Moveto "FaturaC"
FormKey
echo Normal
echo off


LimpAguarde()

If CREDITO_TOTV > 0
   Then MSG=MSG+Completa("Maximo de Dias de Atraso..:"+Format("W10",DIAS_ATRASO),38," ")+"//"
        MSG=MSG+"Duplicatas com Dias Atraso:"+Format("W10.2,EIC",CREDITO_TOTV)+"//"
        MSG=MSG+"Duplicatas a Receber      :"+Format("W10.2,EIC",CREDITO_TOTAV)+"//"
        MSG=MSG+"Total Duplicatas a Receber:"+Format("W10.2,EIC",CREDITO_TOTAV+CREDITO_TOTV)
        If PARAM_DIAS_ATRASO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then Grava_LogEx("BIB_FAT LibAtras")
                        Return True
                   Else Return False
                EndIf
           Else Mensagem(MSG)
                Return False
        EndIf
   Else Return True
EndIf

EndProc   ; (Dias_Atraso)

;*******************************************************************************
;* Checa Caixa                                                                 *
;*******************************************************************************
Proc Verifica_Caixa(empresa)
private empresa, reg_p_fatura, reg_conta

GetRecord "\\Sistemas\\Vendas\\P_Fatura" empresa To reg_p_fatura
if retval
   then GetRecord "\\Sistemas\\Ctacor\\Conta" reg_p_fatura["Codigo_Conta_Caixa"] To reg_conta
        if retval
           then return true
           else MENSAGEM("Conta Caixa: "+reg_p_fatura["Codigo_Conta_Caixa"]+", Paramˆtro Fatura n„o cadastrada !")
                return false
        endif   
   else MENSAGEM("Paramˆtro Fatura Empresa: "+empresa+", n„o cadastrado !")
        return false
endif
EndProc   ; (Verifica_Caixa)

;*******************************************************************************
;* Atualizacao de Cheques                                                      *
;*******************************************************************************
Proc CHEQUES()
Private NUMEROL, EXISTE_CHEQUE_LIQUIDADO, primeiravez

while true

  Aguarde("Efetuando Estorno CHEQUES TERCEIROS "+Opcaoc+" "+NOTAFISC)

  NUMEROL=""
  Moveto "\\Sistemas\\CheqRec\\ChequeC"
  Moveto [Codigo da Empresa]
  Locate IndexOrder by "Indchc01" [NotaC->Codigo da Empresa],[NotaC->Tipo do Documento],[NotaC->Numero do Documento]
  if retval
    then NUMEROL=[Numero do Lancamento]
    else Moveto [Observacao do Lancamento]
         Locate "REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
         if retval
            then NUMEROL=[Numero do Lancamento]
         endif
  endif      
    
  if not isblank(NUMEROL)
     then
          EXISTE_CHEQUE_LIQUIDADO=false
     
         Moveto "\\Sistemas\\CheqRec\\ChequeI"
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If RetVal
            Then While [Numero do Lancamento]=NUMEROL
  
                   If [Situacao]<>"EM ABERTO"
                      Then EXISTE_CHEQUE_LIQUIDADO=True
                           quitloop
                   EndIf
                   
                   Skip
                   If EOT() Then QuitLoop EndIf
                 EndWhile
         EndIf
         
         if EXISTE_CHEQUE_LIQUIDADO
            then
                 MSG="J  existem cheques movimentados para esta Nota.//"
                 MSG=MSG+"Os cheques n„o podem ser estornados.//"
                 MSG=MSG+"Verificar no Lan‡amento de Cheques Ok !//"
                 MSG=MSG+"Lan‡amento: "+StrVal(NUMEROL)+" - "+SubStr([\Sistemas\CheqRec\ChequeC->Observacao do Lancamento],1,20)
                 Mensagem(MSG)
                 
                 quitloop
         endif
         
         Moveto "\\Sistemas\\CheqRec\\ChequeI"
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If RetVal
            Then While [Numero do Lancamento]=NUMEROL
                   del
                   If EOT() Then QuitLoop EndIf
                 EndWhile
         EndIf
         
         Moveto "\\Sistemas\\CheqRec\\ChequeC"
         Del
  endif

  Aguarde("Atualizando CHEQUES TERCEIROS "+Opcaoc+" "+NOTAFISC)

  primeiravez=true

  Moveto "NotaV"
  Moveto [Codigo da Empresa]
  Locate [NotaC->Codigo da Empresa],[NotaC->Numero do Documento],[NotaC->Serie do Documento]
  If Not RetVal
     Then quitloop            
  EndIf
  
  while [Codigo da Empresa  ]=[NotaC->Codigo da Empresa  ] and
        [Numero do Documento]=[NotaC->Numero do Documento] and
        [Serie do Documento ]=[NotaC->Serie do Documento ]

    if ([forma de pagamento]="CH" or [forma de pagamento]="CP") and Not IsBlank([Numero_Cheque])
       then
            if primeiravez
               then primeiravez=false
               
                    Moveto "\\Sistemas\\CheqRec\\ChequeC"
                    While True
                      End
                      Moveto [Numero do Lancamento]
                      If Numero_Lancamento("Interno","Locked_Down")
                         Then NUMEROL = PROXLANCTO_NLANC
                              Release Vars PROXLANCTO_NLANC
                              quitloop
                      EndIf    
                    EndWhile
                    
                   ;While True
                   ;  Moveto [Numero do Lancamento]
                   ;  End
                   ;  If Numero_Lancamento("Interno","")
                   ;     Then NUMEROL = PROXLANCTO_NLANC
                   ;          Release Vars PROXLANCTO_NLANC
                   ;  EndIf
                   ;  Locate NUMEROL
                   ;  If Not Retval
                   ;     Then End Down
                   ;          [Numero do Lancamento ]=NUMEROL
                   ;          If Not IsLockRecord()
                   ;             Then QuitLoop
                   ;             Else Del
                   ;          EndIf
                   ;  EndIf
                   ;EndWhile
             
                   [Codigo da Empresa       ]=[NotaC->Codigo da Empresa       ]
                   [Data de Entrada         ]=[NotaC->Data de Emissao         ]
                   [Codigo                  ]=[NotaC->Codigo                  ]
                   [Codigo do Representante ]=[NotaC->Codigo do Representante ]
                   [Observacao do Lancamento]="REF. "+[NotaC->Codigo da Empresa]+"/"+[NotaC->Tipo do Documento]+"/"+[NotaC->Numero do Documento]
        
                   [Sistema Gerador         ]=[NotaC->Sistema Gerador         ]
                   [Tipo Docto Gerador      ]=[NotaC->Tipo do Documento       ]
                   [Numero Docto Gerador    ]=[NotaC->Numero do Documento     ]
                   [Serie Docto Gerador     ]=[NotaC->Serie do Documento      ]
                   [Numero_Carregamento_Orig]=[NotaC->Numero_Carregamento     ]
                   [Valor Total             ]=0
                   Controle_Dia()
                   UnLockRecord
                   
                   Moveto "NotaC"
                   [Numero Lancamento Cheque]=NUMEROL
                   UnLockRecord

            endif
            
            Moveto "\\Sistemas\\CheqRec\\ChequeI"
            Moveto [Numero do Lancamento]
            Locate NUMEROL, NumVal([NotaV->Sequencia])
            If Not RetVal
               Then End
                    Down
                    [Numero do Lancamento]=NUMEROL
                    [Sequencia do Cheque ]=NumVal([NotaV->Sequencia])
                    [Codigo_Banco        ]=[NotaV->Codigo_Banco   ]
                    [Agencia             ]=[NotaV->Agencia        ]
                    [Numero_Conta        ]=[NotaV->Numero_Conta   ]
                    [Numero_Cheque       ]=[NotaV->Numero_Cheque  ]
                    [CPF                 ]=[NotaV->CPF            ]
                    [Tipo_Emitente       ]=[NotaV->Tipo_Emitente  ]
                    [Titular_Cheque      ]=[NotaV->Titular_Cheque ]
                    [Cidade              ]=[NotaV->Cidade         ]
                    [UF                  ]=[NotaV->UF             ]
                    [Data Vencimento     ]=[NotaV->Data           ]
                    [Valor               ]=[NotaV->Valor          ]
                    [Observacao do Cheque]=[NotaV->Observacao     ]
                    [Codigo CMC7         ]=[NotaV->Codigo CMC7    ]
                    
                    [Sistema Origem      ]=[NotaC->Sistema Gerador     ]
                    [Tipo do Documento   ]=[NotaC->Tipo do Documento   ]
                    [Numero do Documento ]=[NotaC->Numero do Documento ]
                    [Codigo_Cliente      ]=[NotaC->Codigo              ]
                    [Data_Entrada        ]=[NotaC->Data de Emissao     ]
                    [Situacao            ]="EM ABERTO"
                    
                    [Codigo da Conta     ]=CX_CONTA_CAIXA
                    [Codigo da Empresa   ]=[NotaC->Codigo da Empresa       ]
                    Controle_Dia()
                    UnLockRecord
                    
                    Moveto "\\Sistemas\\CheqRec\\ChequeC"
                    [Valor Total         ]=[Valor Total  ]+[NotaV->Valor   ]
                    UnLockRecord
            EndIf
    endif

    moveto "NotaV"
    skip
    if eot() then quitloop endif
  endwhile

  quitloop
endwhile

Moveto "FaturaC"

EndProc    ;  (Cheques)

;*******************************************************************************
;* Rotina para exclusao do rateio da comissao                                  *
;*******************************************************************************
Proc Closed Excluir_Rateio_Comissao()
UseVars AutoLib, ErrorProc, ORDFAT, SEQIT

Moveto "FaturaC"
UnLockRecord
FormKey

Moveto "FaturaIC"
Moveto [Numero da OF]
Locate ORDFAT,SEQIT
If RetVal
   Then While [Numero da OF]=ORDFAT And [Item da OF]=SEQIT
          Del
        EndWhile
EndIf

Moveto "FaturaC"
UnLockRecord
FormKey
Moveto [Numero da OF]
Locate ORDFAT
Moveto "FaturaI"

EndProc  ; (Excluir_Rateio_Comissao)

;*******************************************************************************
;* Rotina para Rateio de Comissao Vencimentos                                  *
;*******************************************************************************
Proc Closed RATEIO_COMISSAO_VENCTOS()
UseVars AutoLib, ErrorProc, PARAM_TITCRED, sys_Codigo_Cliente

Private TCOM, COM_NF, DIFER, TOT_VECTOS, vrcomis, numparc, rateiook

rateiook=true

If Not IsAssigned(PARAM_TITCRED)          Then PARAM_TITCRED=""          EndIf

If [FaturaC->Tipo de Pagamento     ]="O" or
   [FaturaC->Tipo Movimento Estoque]="E"
   Then rateiook=false
EndIf

switch
  case sys_codigo_cliente="0388" or
       sys_codigo_cliente="0427" : 
    ;pode fazer
  
  case PARAM_TITCRED="T"         : rateiook=false

endswitch

if not rateiook
   then
        Moveto "FaturaC"
        Return
endif    

Aguarde("Rateio Comissoes/Vencimentos")

Moveto "FaturaV"
Moveto [Valor] TOT_VECTOS=ImageCSum()

TCOM      =0
numparc   =0

switch
  case sys_Codigo_Cliente="0388" or
       sys_Codigo_Cliente="0427" :
        COM_NF=NDecimal(([FaturaC->Valor Mercadoria Liquido]*[FaturaC->Comissao do Representante])/100,2)
        If TOT_VECTOS>0
           Then Scan
                  numparc=numparc+1
                EndScan
                
                vrcomis=NDecimal((COM_NF/numparc),2)
        EndIf

  otherwise                      : COM_NF=NDecimal(([FaturaC->Valor Nota Fiscal       ]*[FaturaC->Comissao do Representante])/100,2)

endswitch

If TOT_VECTOS>0
   Then Scan

          switch
            case sys_Codigo_Cliente="0388" or
                 sys_Codigo_Cliente="0427" : [Valor da Comissao]=vrcomis
                                             
            otherwise                      : [Valor da Comissao]=NDecimal(([Valor  ]*[FaturaC->Comissao do Representante])/100,2) 

          endswitch
          TCOM=TCOM+[Valor da Comissao]
          
        EndScan

          switch
            case sys_Codigo_Cliente="0382" : ;nÆo calcula diferen‡a
                                             
            otherwise                      : 
              DIFER              =COM_NF-TCOM
              [Valor da Comissao]=[Valor da Comissao]+DIFER
              UnLockRecord

          endswitch
EndIf

Moveto "FaturaC"
EndProc ; (RATEIO_COMISSAO_VENCTOS)

;*******************************************************************************
;* Rotina para Apresentar Mensagem de Venda dos Clientes                       *
;*******************************************************************************
Proc Mensagem_Venda()
Private MSG_VENDA  

MSG_VENDA = ""
GetRecord "\\Sistemas\\Cadastro\\DestMsg" [Codigo] To REG_DESTMSG
If RetVal
   Then MSG_VENDA = REG_DESTMSG["Observacoes"]
EndIf                        

If MSG_VENDA<>""
   Then Ler_Memo("Observa‡”es para Venda",11,01,10,76,MSG_VENDA)
EndIf                      
     
EndProc ;(Mensagem_Venda)
                                                           
;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_SPC()
Private NomeCampo,Retorno,DATA_SPC,BLOQUEIA_SPC

Retorno=True
NomeCampo=Field()
BLOQUEIA_SPC=False

UnLockRecord
FormKey
LockRecord

Moveto "\\Sistemas\\Cadastro\\FichaCli" 
Moveto [Codigo]
Locate [\Sistemas\Vendas\FaturaC->Codigo]
If RetVal
   Then DATA_SPC=[Data_Ultima_Consulta]
        If DATA_SPC=BlankDate() Or
           DATA_SPC+PARAM_NBLOQUEIO_SPC <= Today()
           Then BLOQUEIA_SPC=True
        EndIf   
   Else DATA_SPC=BlankDate()
        BLOQUEIA_SPC=True          
EndIf

If BLOQUEIA_SPC
   Then If DATA_SPC<>BlankDate()
           Then DATA_SPC=         "Efetuar uma nova consulta no SPC!//"
                DATA_SPC=DATA_SPC+"Ultima Consulta: "+SubsTr(StrVal([Data_Ultima_Consulta]),1,2)+"/"
                DATA_SPC=DATA_SPC+                    SubsTr(StrVal([Data_Ultima_Consulta]),4,2)+"/"
                DATA_SPC=DATA_SPC+                    SubsTr(StrVal([Data_Ultima_Consulta]),7,4)
           Else DATA_SPC=         "Efetuar uma consulta no SPC!//"
                DATA_SPC=DATA_SPC+"N„o consta nenhuma data de consulta deste cliente!"
        EndIf            
        If Not IsAssigned(MSG_SPC)
           Then MSG=    "Opera‡„o Bloqueada!//"
                MSG=MSG+DATA_SPC
                Libera_Bloqueio(MSG)
                If Ok="S"
                   Then Grava_LogEx("BIB_FAT BloqDSPC")
                   Else Retorno=False
                EndIf
           Else Mensagem(DATA_SPC)     
        EndIf
EndIf


Moveto "FaturaC"
FormKey

Moveto Field NomeCampo
Return Retorno
EndProc

;*******************************************************************************
;* Verificacao Restricao CNPJ/CPF                                              *
;*******************************************************************************
Proc Closed Restricao_CNPJCPF()
UseVars AutoLib, ErrorProc,
       ORDFAT, SYS_CHAPA_USUARIO, SYS_NOME_USUARIO, SYS_NIVEL_USUARIO,
        SYS_NCONEXAO, SYS_ESTACAO, SYS_SCRIPT, PARAM_RESTR_CNPJCPF

Private regrestric, dtrestric, MSG, MSG2

Aguarde("Aguarde, consultando se existe restri‡Æo para pessoa")

dtrestric=BlankDate()
getrecord "\\Sistemas\\Cadastro\\Restric" [FaturaC->CGC] to regrestric
if retval
   Then If regrestric["Consta_Restricao"]="S"
           Then dtrestric=regrestric["Ultima Restricao"]
        Endif    
endif

LimpAguarde()

If Not IsBlank(dtrestric)
   Then MSG=""
        MSG=MSG+Completa("Cliente: "+[FaturaC->Razao Social]+" - "+[FaturaC->CGC],70," ")+"//" 
        MSG=MSG+Completa("Consta restri‡Æo para venda, £ltima em "+LTrim(Format("D13",dtrestric))+".",70," ")
        If PARAM_RESTR_CNPJCPF="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then Grava_LogEx("BIB_FAT Restric")
                        Return True
                   Else Return False
                EndIf
           Else Mensagem(MSG)
                Return False
        EndIf
   Else Return True
EndIf

EndProc   ; (Restricao_CNPJCPF)


;*******************************************************************************
;* Rotina para transferir dados do cupom para a nota                           *
;*******************************************************************************
Proc Closed Transfere_Dados_Nota()
UseVars AutoLib, ErrorProc, VSD_CUPOM, NUMERO_OF, PARAM_TRANSPORTADORA

Private VRMERC, VRDESCTO, TXDESCTO_TOTAL, VBC

;****** Gera Item da Nota Fiscal **************************
Moveto "FaturaI"
Moveto [Numero da Of]
Locate [FaturaC->Numero da Of]
If RetVal
   Then While True
          Del
          Locate Next [FaturaC->Numero da Of]
          If Not RetVal
             Then QuitLoop
          EndIf
        EndWhile
EndIf

VRMERC = [NotaC->Valor Mercadoria]

Moveto "NotaI"
Moveto [Codigo da Empresa]
Locate [FaturaC->Codigo da Empresa],VSD_CUPOM,""
While [Codigo da Empresa  ]=[FaturaC->Codigo da Empresa] And
      [Numero do Documento]=VSD_CUPOM And
      [Serie do Documento ]=""
  
  ;---- Verifica existˆncia do item --------------------------------------------
  GetRecord "\\Sistemas\\Estoque\\Itens" [NotaI->Codigo do Item] To REG_BUSCA_LOOKUP
  If Not RetVal
     Then Mensagem("Item "+[NotaI->Codigo do Item]+" n„o localizado no cadastro de itens!")
     Else Moveto "FaturaI"
          End
          Down
        
          [Numero da Of            ] = NUMERO_OF
          [Item da OF              ] = [NotaI->Item do Documento       ]
          [Numero Pedido_Orcamento ] = [NotaI->Numero Pedido_Orcamento ]
          [Item Pedido_Orcamento   ] = [NotaI->Item Pedido_Orcamento   ]
          [Tipo do Item            ] = [NotaI->Tipo do Item            ]
          [Codigo do Item          ] = [NotaI->Codigo do Item          ]
          [Descricao do Item       ] = [NotaI->Descricao do Item       ]
          [Codigo da Cor_Tecido    ] = [NotaI->Codigo da Cor_Tecido    ]
          [Descricao da Cor_Tecido ] = [NotaI->Descricao da Cor_Tecido ]
          [Tamanho                 ] = [NotaI->Tamanho                 ]
          [Quantidade              ] = [NotaI->Quantidade              ]
          [Unidade Fiscal          ] = [NotaI->Unidade Fiscal          ]
          [Preco Unitario          ] = [NotaI->Preco Unitario          ]
          [Preco Unitario Tabela   ] = [NotaI->Preco Unitario Tabela   ]
          [Custo Medio Unitario    ] = [NotaI->Custo Medio Unitario    ]

          [Tipo Desconto Item      ] = [NotaI->Tipo Desconto Item      ]
          [Taxa Desconto Unitario  ] = [NotaI->Taxa Desconto Unitario  ]
          [Valor Desconto Unitario ] = [NotaI->Valor Desconto Unitario ]
          [Valor Desconto Item     ] = [NotaI->Valor Desconto Item     ]
          [Preco Total             ] = [NotaI->Preco Total             ]

          [Tributacao de IPI       ] = [NotaI->Tributacao de IPI       ]
          [Aliquota Reduzida BCIPI ] = [NotaI->Aliquota Reduzida BCIPI ]
          [Aliquota de IPI         ] = [NotaI->Aliquota de IPI         ]
          [Valor do Ipi            ] = Round(([Preco Total]*[Aliquota de IPI])/100,2)
          [Tributacao de ICMS      ] = [NotaI->Tributacao de ICMS      ]
          [Aliquota Reduzida BCICMS] = [NotaI->Aliquota Reduzida BCICMS]
          [Aliquota de ICMS        ] = [NotaI->Aliquota de ICMS        ]
          
          If [FaturaC->Taxa de Desconto]>0
             Then VRDESCTO=Round((VRMERC*[NotaC->Taxa de Desconto])/100,2)
                  TXDESCTO_TOTAL=[NotaC->Taxa de Desconto]
             Else VRDESCTO=[NotaC->Valor do Desconto]
                  TXDESCTO_TOTAL=(VRDESCTO/VRMERC)*100
          EndIf
          [Taxa Desconto Total     ] = TXDESCTO_TOTAL
          [Valor Desconto Total    ] = Round((([Preco Total]*TXDESCTO_TOTAL)/100),5)
                                 VBC = [Preco Total]-[Valor Desconto Total]
                                 VBC = VBC-Round((VBC*[Aliquota Reduzida BCICMS])/100,2)
          [Valor do ICMS           ] = Round((VBC*[Aliquota de ICMS])/100,2)
          [Tributacao de ISSQN     ] = [NotaI->Tributacao de ISSQN     ]
          [Aliquota de ISSQN       ] = [NotaI->Aliquota de ISSQN       ]
          [Valor do ISSQN          ] = Round(([Preco Total]*[Aliquota de ISSQN])/100,2)
          [Peso Liquido            ] = [NotaI->Peso Liquido            ]
          [Peso Embalagem          ] = [NotaI->Peso Embalagem          ]
          [Volumes                 ] = [NotaI->Volumes                 ]
          [Tipo Tributacao         ] = [NotaI->Tipo Tributacao         ]
          UnLockRecord
          Moveto "NotaI"
  EndIf
  Release Vars REG_BUSCA_LOOKUP
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

;****** Gera Cabeca da Digitacao da Nota Fiscal *************************
Moveto "Faturac"
[Numero da Of             ] = NUMERO_OF
[Data de Emissao          ] = Today()
[Data de Saida            ] = Today()
[Hora de Saida            ] = Time()
[Codigo                   ] = [NotaC->Codigo                   ]
[Tipo                     ] = [NotaC->Tipo                     ]
[Nome Fantasia EmitDest   ] = [NotaC->Nome Fantasia EmitDest   ]
[Tipo Pessoa              ] = [NotaC->Tipo Pessoa              ]
[Consumidor Final         ] = [NotaC->Consumidor Final         ]
[Razao Social             ] = [NotaC->Razao Social             ]
[Cidade                   ] = [NotaC->Cidade                   ]
[UF                       ] = [NotaC->UF                       ]
[Aliquota de ICMS         ] = [NotaC->Aliquota de ICMS         ]
[CGC                      ] = [NotaC->CGC                      ]
[Codigo do Representante  ] = [NotaC->Codigo do Representante  ]
[Nome Fantasia Represent  ] = [NotaC->Nome Fantasia Represent  ]
[Comissao do Representante] = [NotaC->Comissao do Representante]
[CFO                      ] = [NotaC->CFO                      ]
[Atualiza Estoque         ] = [NotaC->Atualiza Estoque         ]
[Tipo Movimento Estoque   ] = [NotaC->Tipo Movimento Estoque   ]
[Codigo da Transportadora ] = [NotaC->Codigo da Transportadora ]
[Nome Fantasia Transport  ] = [NotaC->Nome Fantasia Transport  ]
[Placa do Veiculo         ] = [NotaC->Placa do Veiculo         ]
[UF Veiculo               ] = [NotaC->UF Veiculo               ]
[Frete por Conta          ] = [NotaC->Frete por Conta          ]
[Taxa de Desconto         ] = [NotaC->Taxa de Desconto         ]
[Valor do Desconto        ] = [NotaC->Valor do Desconto        ]
[Valor Mercadoria         ] = [NotaC->Valor Mercadoria         ]
[Valor Servico            ] = [NotaC->Valor Servico            ]
[Valor Desconto           ] = [NotaC->Valor Desconto           ]
[Valor Mercadoria Liquido ] = [NotaC->Valor Mercadoria Liquido ]
[Valor BCICMS             ] = [NotaC->Valor BCICMS             ]
[Valor ICMS               ] = [NotaC->Valor ICMS               ]
[Valor IPI                ] = [NotaC->Valor IPI                ]
[Valor ISSQN              ] = [NotaC->Valor ISSQN              ]
[Valor Nota Fiscal        ] = [NotaC->Valor Nota Fiscal        ]
[Valor Despesas Acessorias] = [NotaC->Valor Despesas Acessorias]
[Valor BCSubstituicao ICMS] = [NotaC->Valor BCSubstituicao ICMS]
[Valor Substituicao ICMS  ] = [NotaC->Valor Substituicao ICMS  ]
[Frete Incluso na Nota    ] = [NotaC->Frete Incluso na Nota    ]
[Aliquota BCFrete Nota    ] = [NotaC->Aliquota BCFrete Nota    ]
[Valor do Frete           ] = [NotaC->Valor do Frete           ]
[Aliquota BCICMS Frete    ] = [NotaC->Aliquota BCICMS Frete    ]
[Aliquota de ICMS Frete   ] = [NotaC->Aliquota de ICMS Frete   ]
[Cfo Frete                ] = [NotaC->Cfo Frete                ]
[Valor do Seguro          ] = [NotaC->Valor do Seguro          ]
[Numero de Volumes        ] = [NotaC->Numero de Volumes        ]
[Peso Bruto               ] = [NotaC->Peso Bruto               ]
[Peso Liquido             ] = [NotaC->Peso Liquido             ]
[Numero Nota Original     ] = [NotaC->Numero Nota Original     ]
[Codigo da Tabela         ] = [NotaC->Codigo da Tabela         ]
[Codigo da Transportadora ] = PARAM_TRANSPORTADORA
[Observacao na Nota Fiscal] = "Referente a Cupon(s) No.(s) : " + VSD_CUPOM

EndProc  ;Transfere_Dados_Nota()

;*******************************************************************************
;* Rotina Montar Vencimentos pelo Pedido                                       *
;*******************************************************************************
Proc Closed PED_VECTOS()
UseVars AutoLib, ErrorProc

Private REGISTRO

[Numero Pedido_Orcamento]=[Numero do Pedido]
Moveto "FaturaV"
If RecordStatus("New")=False
  Then Moveto "FaturaC"
       Return
EndIf

Moveto "FaturaC"
UnLockRecord
FormKey
IsLockRecord()

{TableAdd} {PedidoV}

Moveto "PedidoV"
Moveto [Numero do Pedido]
Locate [FaturaC->Numero do Pedido]
If RetVal
   Then While [Numero do Pedido]=[FaturaC->Numero do Pedido]
          CopyToArray REGISTRO
          REGISTRO[2]=[FaturaC->Numero da OF]

          Moveto "FaturaV"
          End
          Down
          CopyFromArray REGISTRO
          UnLockRecord

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

Moveto "PedidoV"
Do_It!
ClearImage

Moveto "FaturaC"
CoEditKey
FormKey
IsLockRecord()

EndProc    ; (Ped_Vectos)

;*******************************************************************************
;* Situa‡Æo da Expedi‡Æo                                                       *
;*******************************************************************************
Proc Situacao_Expedicao()
Private AUX_EXPEDICAO,AUX_TABELA,REG_EXPEDICAO

AUX_EXPEDICAO = [FaturaC->Numero da Expedicao]

AUX_TABELA = "ExpedC"

GetRecord "\\Sistemas\\Vendas\\"+AUX_TABELA AUX_EXPEDICAO To REG_EXPEDICAO
If RetVal
   Then If REG_EXPEDICAO["Situacao da OE"]="LIBERADO"
           Then Return
        EndIf
   Else Return
EndIf

Moveto "FaturaC"
UnLockRecord
FormKey
IsLockRecord()

{TableAdd} TypeIn AUX_TABELA Enter

Moveto [Numero da OE]
Locate [FaturaC->Numero da Expedicao]
If ReTval
   Then [Situacao da OE]="LIBERADO"
        UnLockRecord
EndIf

Do_It!
Moveto  AUX_TABELA ClearImage
Moveto "FaturaC"
CoEditKey
FormKey
IsLockRecord()   

EndProc ;Situacao_Expedicao()

;*******************************************************************************
;* Rotina para Verificar Pedido                                                *
;*******************************************************************************
Proc Existe_Pedido()
Private MSG

If [FaturaC->Numero do Pedido]="" Or PARAM_BLOQ_ITEM="N" And PARAM_BLOQ_ITEM_EXPED="N"        
   Then Return False
EndIf
     
If PARAM_BLOQ_ITEM="S" Or (PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>"")
   Then If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
           Then MSG = "N„o ‚ poss¡vel incluir itens a partir desta tecla/op‡„o."
                FastMsg(MSG)
           Else MSG = "N„o ‚ poss¡vel incluir itens a partir desta tecla/op‡„o.////"+
                      "Verificar o pedido "+[FaturaC->Numero do Pedido]+" e realizar a inclus„o de novos itens caso//"+
                      "necess rio e realizar um novo faturamento para este pedido se alterado."
                Mensagem(MSG)      
        EndIf
        Return True
EndIf
Return False

EndProc ;Existe_Pedido()

;*******************************************************************************
;* Rotina p/ Buscar Item Agrupados                                             *
;*******************************************************************************
Proc Busca_Item_Agrupado()    
Private QTD_NOTA,AUX_QTDF

;Em 28/07/2017 foi removido o campo [Composicao de Dias] onde amarzenava um controlador p/ estornar pedidos agrupados -> [*AGRUPADO*]
;Foi adicionado um campo [Item do Pedido Agrupado] onde se tornou este controlador, substituindo o controlador citado

If [FaturaI->Item do Pedido Agrupado]="S" And Search("PEDIDOI",Upper(Table()))>0 
   Then Moveto [Codigo do Item]
        Locate [FaturaI->Codigo do Item]
        If RetVal
           Then While [FaturaI->Numero Pedido_Orcamento]=[Numero do Pedido]
                  If [FaturaI->Codigo do Item]=[Codigo do Item] And [Quantidade Faturada]>0
                     Then QTD_NOTA      = [FaturaI->Quantidade]
                          While QTD_NOTA > 0 
                            AUX_ITEM_PED = [Item do Pedido]
                            If [FaturaI->Codigo do Item]=[Codigo do Item] And 
                               NumVal([FaturaI->Preco Unitario])=NumVal([Preco Unitario])
                               Then If [Quantidade Faturada] - QTD_NOTA >= 0
                                       Then AUX_QTDF = [Quantidade Faturada]
                                            [Quantidade Faturada] = [Quantidade Faturada] - QTD_NOTA
                                            QTD_NOTA = QTD_NOTA - AUX_QTDF
                                            If [Quantidade Faturada]=0 Then [Quantidade Faturada]=BlankNum() EndIf
                                       Else QTD_NOTA = QTD_NOTA - [Quantidade Faturada]
                                            [Quantidade Faturada] = BlankNum()
                                    EndIf
                                    UnLockRecord
                                    SaveTables
                                    
                                    Release Vars AUX_QTDF                                                                        
                                    If QTD_NOTA=0 Then QuitLoop EndIf
                            EndIf   
                            Skip
                            If Eot() Then QuitLoop EndIf
                            If [FaturaI->Numero Pedido_Orcamento]<>[Numero do Pedido]
                               Then QuitLoop
                            EndIf   
                          EndWhile
                  EndIf
                  Skip
                  If Eot() Then QuitLoop EndIf
                EndWhile
        EndIf
        UnLockRecord
EndIf
           
EndProc ;Busca_Item_Agrupado()

;*******************************************************************************
;* Rotina p/ Agrupar Pedidos                                                   *
;*******************************************************************************
Proc Agrupa_Pedido(PARAM)
Private ai, CONTADOR,PEDIDO_ARRAY

If SYS_CODIGO_CLIENTE<>"0382" Or SubStr(Upper(Directory()),1,2)<>"X:"
   Then Return False
EndIf

If PARAM="VALIDA"  
   Then Return True
EndIf

CONTADOR = 0
DynArray PEDIDO_ARRAY[]
                              
Moveto "FaturaI"
If RecordStatus("New")=True
   Then Mensagem("Verifique se h  item(ns) deste pedido faturado(s).")
        Return
EndIf   

Home
Scan                
  ACHOU_ITEM = False
  
  GetRecord "\\Sistemas\\Vendas\\FaturaI" [Numero da OF],[Item da OF] To REF_FATURAI
  PEDIDO_PRECO  = REF_FATURAI["Preco Unitario"]
    
  For ai From 1 To DynArraySize(PEDIDO_ARRAY)
    PED_ITEM  = SubStr(PEDIDO_ARRAY[ai],1,10)
    PED_PRECO = Ltrim(Rtrim(SubStr(PEDIDO_ARRAY[ai],11,12)))
    If PED_PRECO<>""
       Then PED_PRECO = NumVal(PED_PRECO)
    EndIf   
    PED_QTD   = Ltrim(Rtrim(SubStr(PEDIDO_ARRAY[ai],23,12)))
    If PED_QTD<>""
       Then PED_QTD = NumVal(PED_QTD)
    EndIf
    
    If PED_ITEM = [Codigo do Item] And (PED_PRECO = PEDIDO_PRECO Or (IsBlank(PEDIDO_PRECO) And IsBlank(PED_PRECO)))
       Then If PED_QTD<>""
               Then PED_QTD = PED_QTD + [Quantidade]
               Else PED_QTD = [Quantidade]
            EndIf   
            PEDIDO_ARRAY[ai] = SubStr(PEDIDO_ARRAY[ai],1,22)+Format("W12.3",PED_QTD) 
            ACHOU_ITEM = True
            QuitLoop  
    EndIf    
  Endfor
  If Not ACHOU_ITEM
     Then CONTADOR = CONTADOR + 1
          PEDIDO_ARRAY[CONTADOR] = Format("W10",[Codigo do Item])+Format("W12.2",PEDIDO_PRECO)+Format("W12.3",[Quantidade])
  EndIf
EndScan

Moveto "FaturaI"
While RecordStatus("New")=False
  Del
EndWhile
                                                          
SEQ=0
For ai From 1 To DynArraySize(PEDIDO_ARRAY)
  Down
  SEQ = SEQ + 1
  [Item da OF             ] = SEQ
  [Codigo do Item         ] = SubStr(PEDIDO_ARRAY[ai],1,10)
  [Numero Pedido_Orcamento] = [FaturaC->Numero do Pedido]
  [Item do Pedido Agrupado] = "S"
  QTD     = Rtrim(Ltrim(SubStr(PEDIDO_ARRAY[ai],23,12)))
  PR_UNIT = Rtrim(Ltrim(SubStr(PEDIDO_ARRAY[ai],11,12)))
  If QTD<>""
     Then [Quantidade     ] = NumVal(QTD)
  EndIf
  If PR_UNIT<>""
     Then [Preco Unitario ] = NumVal(PR_UNIT)
          [Preco Total    ] = [Quantidade]*[Preco Unitario]
  EndIf   
  UnLockRecord
EndFor

EndProc ;Agrupa_Pedido()

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc LIMPA_OFS()

CONFGERAL("Confirma limpeza da NF Gerada para este Carregamento ?")
If OK<>"S"
   Then Return
EndIf

Scan For [Numero_Carregamento]=PED_ORC_FATURAR
  [Docto Nota Gerada ]=""
  [Serie Nota Gerada ]=""
  [Numero Nota Gerada]=""
  [Sistema Gerador   ]=""
  
  [Data de Emissao   ]=Today()
  [Data de Saida     ]=Today()
  [Hora de Saida     ]=Time()
EndScan

EndProc ;()LIMPA_OFS

;******************************************************************************
;** Monta Procedures                                                        ***
;******************************************************************************
WriteLib "\\Sistemas\\Vendas\\Bib_Fat"
         Checagem_Pagina1, PED_VECTOS, 
         CALC_VENCTOS, Pega_Preco,Checa_Pedido,Cria_Ficha, 
         ATUA_SITUACAO_PEDIDO_ORCAMENTO, COPIA_PED_ORC_FATURA,
         Dias_Atraso, Verifica_Caixa, CHEQUES, Transfere_Dados_Nota,
         Checa_Comissao_Vendedor, Excluir_Rateio_Comissao,
         RATEIO_COMISSAO_VENCTOS,Mensagem_Venda,
         Checa_Comissao_Produto, Checa_SPC,Data_Dialog, 
         Restricao_CNPJCPF,Calc_OF,
         Calcular_Vencimentos, SoCopiaPedidoFatura, Situacao_Expedicao,
         Existe_Pedido, Busca_Item_Agrupado, Agrupa_Pedido, LIMPA_OFS
