;** Pedido *********************************************************************
;** Digitacao de Pedido de Venda                                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 08/09/1997 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP Item                             
;Ultima Alteracao: 01/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Agrupa
;Ultima Alteracao: 08/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Desconto Unitario Entretex
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 10/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calcudo de Volumes
;Ultima Alteracao: 25/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Dados_Cli()
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 05/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco()
;Ultima Alteracao: 08/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Rateio_Descto_Total()
;Ultima Alteracao: 16/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Codigo de Barras
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 03/06/2009 por Nikolas
;Motivo Alteracao: Ajustes inclusao cod migtextil 0228 no continua item
;Ultima Alteracao: 09/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes UF<>UFEmpresa/CFOP
;Ultima Alteracao: 29/07/2009 por Cleber Alves
;Motivo Alteracao: Rotina Cadastro, Situção,Inativo e Tipo Assistencia
;Ultima Alteracao: 31/10/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete por conta 0_Sem Frete                                             
;Ultima Alteracao: 02/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Ajustado Calculo Substituicao MVA Item
;Ultima Alteracao: 16/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao Sim/NÇo
;Ultima Alteracao: 24/11/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Troca de tabela de Preco/Condicao Pgto
;Ultima Alteracao: 02/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CalcICMS Adicicionais
;Ultima Alteracao: 07/12/2009 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo na Qtdade Digitos Modelo do Item
;Ultima Alteracao: 16/12/2009 por Bruno Carvalho
;Motivo Alteracao: Ajustes CHECA_MVA()
;Ultima Alteracao: 23/12/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo Substituicao e MVA Ajustado
;Ultima Alteracao: 18/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() Isabela Garcia         
;Ultima Alteracao: 19/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Observacao_Item                    
;Ultima Alteracao: 24/02/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() Brasil Textil
;Ultima Alteracao: 03/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Bloquear cliente situacao Recadastro
;Ultima Alteracao: 12/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Exclusao Pedido pelo Supervisor
;Ultima Alteracao: 15/03/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes F1 Cidades
;Ultima Alteracao: 31/03/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes F1 p/ "Dados do Cheque"
;Ultima Alteracao: 28/04/2010 por Cleber Alves            
;Motivo Alteracao: Play Calc_MA
;Ultima Alteracao: 04/05/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CFO Frete
;Ultima Alteracao: 14/05/2010 por Cleber Alves            
;Motivo Alteracao: Play Calc_MA
;Ultima Alteracao: 14/06/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Op‡Æo de Acrescimo Valor Item Unitario
;Ultima Alteracao: 01/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Dados_Clie() Nova codifica‡Æo
;Ultima Alteracao: 05/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CST item             
;Ultima Alteracao: 22/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Salvar dados Cliente 
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajuste CST ICMS   
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;Ultima Alteracao: 10/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes TAGs 
;Ultima Alteracao: 10/09/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN  
;Ultima Alteracao: 13/09/2010 por Karina Andrade
;Motivo Alteracao: Ajuste MSGCAMPO Telefone                             
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 07/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ReducÆo BCICMS apenas se houver desconto na NF
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajuste Rotina C¢digo de Barra
;Ultima Alteracao: 08/11/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes CLIENTE "0051"
;Ultima Alteracao: 22/11/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado novo organizador de itens
;Ultima Alteracao: 06/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 23/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Frete por Conta"
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 26/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mudanca automatica CSON                         
;Ultima Alteracao: 28/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete 
;Ultima Alteracao: 30/03/2011 por Bruno Carvalho
;Motivo Alteracao: Alerta na digita‡Æo do Item quando etiver com "Producao Esgotada"                                        
;Ultima Alteracao: 30/03/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete
;Ultima Alteracao: 26/04/2011 por Bruno Carvalho
;Motivo Alteracao: Altera‡Æo Layout e Procedimentos "Digita‡Æo dos Itens"                                   
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Produ‡Æo Esgotada"
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras  
;Ultima Alteracao: 10/06/2011 por Bruno Carvalho
;Motivo Alteracao: Adicionado na "ExclusÆo de Pedidos" - PedidoG
;Ultima Alteracao: 15/06/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao cadastrar novo cliente e novo ajuste para cliente 0222    
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 21/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Unlockrecord Agrupa()   
;Ultima Alteracao: 22/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes aceitar Item com Qtd e Vr >0                  
;Ultima Alteracao: 23/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC   
;Ultima Alteracao: 20/10/2011 por Anivel Karina Andrade
;Motivo Alteracao: Ajustes Direito ou nÆo de Crˆdito de ICMS para SIMPLES NAC so Pessoa JURIDICA s¢ VENDA
;Ultima Alteracao: 26/10/2011 por Karina Andrade
;Motivo Alteracao: Ajuste MSG Simples Nacional
;Ultima Alteracao: 08/11/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 29/11/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSON 101 Florita                              
;Ultima Alteracao: 13/12/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes MVA Ajustado SIMPLES NACIONAL                
;Ultima Alteracao: 03/01/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Preco Total do Item aceitar campo em branco para "0199"
;Ultima Alteracao: 06/01/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes VRBCST1 idem OF
;Ultima Alteracao: 10/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 14/02/2012 por Bruno Carvalho
;Motivo Alteracao: Alterado Estrutura das Observa‡äes para Tipo "M70" e ajustado no FORM
;Ultima Alteracao: 14/02/2012 por Bruno Carvalho
;Motivo Alteracao: Add Parƒmetros "Utiliza CP e FP de Pagto conforme cliente" e "Altera Pedido PosImpresso"
;Ultima Alteracao: 02/03/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes na utiliza‡Æo de "CP e FP de Pagto conforme cliente"
;Ultima Alteracao: 06/03/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustado Valor para PEDIMAGEM, impressÆo para pedido com imagem de fundo
;Motivo Alteracao: Ajustes CSOSN quando Destinacao for de Mostruario
;Ultima Alteracao: 16/03/2012 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/03/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes CFOP_Empresa para identifica‡Æo             
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes nÆo pegar mensagem das destina‡äa para mensagem da NF
;Ultima Alteracao: 02/04/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes ICMS item debitado or CST =?10 inforamr aliquota        
;Ultima Alteracao: 13/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes instru‡Æo de desconto ModaMil
;Ultima Alteracao: 17/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CSOSN=400 Confec‡Æo SIMPLES NACIONAL               
;Ultima Alteracao: 20/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes sem desconto BCICMS_ST                             
;Ultima Alteracao: 23/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ATIVEMPR para pega_CFOP                            
;Ultima Alteracao: 30/04/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo BCST sem Desconto   
;Ultima Alteracao: 19/06/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Calc_Of, Rateio_BC_Itens e ShowDialog dos Itens (Ajuste Imposto)  
;Ultima Alteracao: 22/06/2012 por Bruno Carvalho
;Motivo Alteracao: Removido CALCULA_ST  
;Ultima Alteracao: 27/06/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Calculo da nota= automatico, nÆo calcula, livre    
;Ultima Alteracao: 28/06/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado rotina p/ formas de localizar o item e ajustes CDBarras()   
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Message ShowDialog    
;Ultima Alteracao: 04/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes pegar novo MVA e %ST ao trocar CST/CSON    
;Ultima Alteracao: 16/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Proc Checa_MVA()
;Ultima Alteracao: 27/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes p/ Confec‡äes CSON=400 opera‡Æo diferente de venda
;Ultima Alteracao: 30/07/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Item_Dialog no campo da Observacao do Item
;Ultima Alteracao: 15/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes na rotina quando verifica o PARAM_PEDIDOIMP
;Ultima Alteracao: 16/08/2012 por Bruno Carvalho
;Motivo Alteracao: InclusÆo Digitai() "VSD_I_Referencia"
;Ultima Alteracao: 17/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CFOP servico d lmeida                         
;Ultima Alteracao: 17/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes Produ‡Æo Esgotada     
;Ultima Alteracao: 21/08/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes "Ficha do Item" para informar o valor exato VSD_I_Referencia
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()                         
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;Ultima Alteracao: 20/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao regime tributario DEBITO E CREDITO
;Ultima Alteracao: 24/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Dados_Item()
;Ultima Alteracao: 08/10/2012 por Kamila Gomes
;Motivo Alteracao: Ajustes I_Modelo_Item Tricostura: aumentou tm do campo calculo de volumes
;Ultima Alteracao: 24/10/2012 por Bruno Carvalho
;Motivo Alteracao: Add consulta "F5" na digita‡Æo dos itens
;Ultima Alteracao: 12/11/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao "I_Taxa_PrUni_PrTab" Diferen‡a % PrUnitario/PrTabela
;Ultima Alteracao: 20/12/2012 por Bruno Carvalho
;Motivo Alteracao: Add "VERIFICA_CONSULTA"
;Ultima Alteracao: 04/01/2013 por Bruno Carvalho
;Motivo Alteracao: Removido vari vel "VERIFICA_CONSULTA" onde estava sendo setada sem utiliza‡Æo
;Ultima Alteracao: 15/01/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo para buscar numero do pedido livre quando chegar ao limite m ximo
;Ultima Alteracao: 18/02/2013 por Bruno Carvalho
;Motivo Alteracao: Add tabelas que fazem parte dos ajustes realizados no "Sw_Cons"
;Ultima Alteracao: 18/02/2013 por Kamila Gomes
;Motivo Alteracao: Ajuste SetaCorRegistro(), Ajustes DigitaV()
;Ultima Alteracao: 22/02/2013 por Bruno Carvalho
;Motivo Alteracao: Add novas altera‡äes para cliente 0341

;Ultima Alteracao: 11/13/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao reducao bc st                                        

;  em desenvolvimento



;*******************************************************************************
;* Rotina para Controlar Chave do Pedido de Venda                              *
;*******************************************************************************
Proc ChaveC()
INICIO_PAGINA=True
COPIOU_REGISTRO=False
FACA_DIGITAC=True
                   
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True

  Moveto "PedidoC"
  End
  Moveto [Numero do Pedido]
  PEDIDO=[Numero do Pedido]
  If OPCAO_FORM="F"
    Then Down
    Else PgDn PgDn PgDn PgDn
  EndIf
  Moveto [Numero do Pedido]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

  Switch
    Case RetVal=-33 : SemFuncoes()
    Case RetVal=-94 : MsgTeclasPadrao()
    Case RetVal="F3":
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           INICIO_PAGINA=True
           COPIOU_REGISTRO=False
           FACA_DIGITAC=True

           VCITENS =BlankNum()
           VSQTDE  =BlankNum()
           VSVRMERC=BlankNum()

           If OPCAO_FORM="F"
              Then PAGINA("PedidoC","MR")
              Else PAGINA("PedidoC","MT")
           EndIf
           PEDIDO=[Numero do Pedido]
           Switch
             Case EDITAR="S":
                  PickForm "1"
                  Echo Normal 
                  Echo Off
                  If [Situacao do Pedido]="CANCELADO" Or
                     [Situacao do Pedido]="FATURADO"
                     Then If Checa_Controle([Numero_Controle_Dia])
                             Then CHAVEC=0
                                  Controla_EdicaoC()
                             Else UnLockRecord
                          EndIf
                     Else CHAVEC=0
                          Controla_EdicaoC()
                  EndIf
             Case EXCLUIR="S":      
                  PickForm "1"
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia]) And
                     (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                     Then If Checa_Supervisor()
                             Then If QuerExcluir("")
                                     Then EXCLUSAO_C()
                                     Else UnLockRecord
                                  EndIf
                             Else CONFGERAL("Cancelar Pedido de Venda")
                                  If OK="S"
                                     Then [Situacao do Pedido]="CANCELADO"
                                  Endif
                                  UnLockRecord
                          EndIf
                     Else UnLockRecord
                  EndIf
             OtherWise: QuitLoop
           EndSwitch
           If OPCAO_FORM="1"
              Then PickForm "1"
              Else PickForm "F"
           EndIf
           SetaPosForm()        
         EndWhile            
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return      
    Case Retval="ENTER": 
         If IsBlank([])
            Then If IsBlank(PEDIDO)
                    Then PEDIDO="1"
                    Else PEDIDO=Checa_Codigo("") ;PEDIDO=StrVal(NumVal(PEDIDO)+1)  
                         If IsBlank(PEDIDO)
                            Then QuitLoop
                         EndIf  
                 EndIf
            Else PEDIDO=[]
         EndIf
         PEDIDO=AlinhM(PEDIDO,6)
         If RecordStatus("New")=True
            Then Del
         EndIf

         PickForm "1"
         Locate PEDIDO
         If Retval
            Then CHAVEC=0
            Else CHAVEC=1
                 End
                 If Not IsBlank([Numero do Pedido])
                    Then PgDn PgDn PgDn PgDn
                 EndIf
                 Moveto [Numero do Pedido]
                 [Numero do Pedido]=PEDIDO
         EndIf
         If Not IsLockRecord()
            Then Echo Normal
                 Echo Off
                 If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA))
                    Then Return
                 EndIf
                 If CHAVEC=0
                    Then If [Situacao do Pedido]<>"CANCELADO" And
                            [Situacao do Pedido]<>"FATURADO"
                            Then Return
                            Else If Checa_Controle([Numero_Controle_Dia])
                                    Then Return
                                 EndIf
                         EndIf
                 EndIf
         EndIf
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Checagem do C¢digo                                              *
;*******************************************************************************
Proc Checa_Codigo(cod)
Private REUTILIZA_CODIGO

If PEDIDO="999999"
   Then REUTILIZA_CODIGO="S"
   Else REUTILIZA_CODIGO="N"
EndIf    

If Not IsBlank(cod)
   Then cod=AlinhE(cod)
EndIf

If REUTILIZA_CODIGO="S"
   Then cod=Proximo_Codigo(Cod)
   Else If IsBlank(cod)
           Then Home
                End
                cod=Novo_Codigo()
        EndIf
EndIf

Return cod

EndProc ;Checa_Codigo

;*******************************************************************************
;* Rotina para Criar Novo C¢digo                                               *
;*******************************************************************************
proc Novo_Codigo()
Private cod,vr

cod=[Numero do Pedido]
If IsBlank(cod)
   Then cod="1"
EndIf  
vr=SubStr(cod,1,1)
If vr>"9" or cod="999999"
   Then If SubStr(cod,2,5)="99999"
	         Then Switch
					        ;Case vr="9" : cod="A00000"
					        Case vr="9" : Mensagem("Fim de codigo disponivel !")
									              cod=""
					        OtherWise   : cod=Chr(asc(vr)+1)+"00000"
					      EndSwitch
					 Else cod=AlinhE(vr+StrVal(NumVal(SubStr(cod,2,5))+1))     
				EndIf	      
   Else cod=AlinhE(StrVal(NumVal(cod)+1))  
EndIf

Return cod 

EndProc ;Novo_Codigo

;*******************************************************************************
;* Rotina para Gerar Proximo Codigo no Intervalo                               *
;*******************************************************************************
Proc Proximo_Codigo(cod)
Private cod, CodLivre

PARAM_INICIAL="000001"
PARAM_FINAL  ="999999" 

If Not IsBlank(cod)
   Then Moveto [Numero do Pedido]
        Locate cod   
        If retval
           Then Return cod  
           Else If cod>=AlinhE(PARAM_INICIAL) And cod<=AlinhE(PARAM_FINAL)
                   Then Return cod 
                   Else Mensagem("C¢digo "+cod+" fora do Intervalo !!")
                        Return ""    
                EndIf
        EndIf
EndIf

Home
CodLivre=AlinhE(PARAM_INICIAL)
Moveto [Numero do Pedido]
Locate IndexOrder by "Numero do Pedido" BestMatch AlinhE(PARAM_INICIAL)
While True
   If CodLivre<=AlinhE(PARAM_FINAL) and CodLivre>=AlinhE(PARAM_INICIAL)
      Then 
					 If CodLivre=[Numero do Pedido]
              Then CodLivre=Novo_Codigo()
                   Skip
              Else cod=CodLivre
                   Return cod
           EndIf
           If EOT()
              Then Loop
           EndIf
      Else Mensagem("Fim dos c¢digos livres!!")
           Return ""
   EndIf
EndWhile

EndProc ;Proximo_Codigo

;******************************************************************************
;** Rotina Alinhamento Especial Codigo Destinat Letras e Numeros            ***
;******************************************************************************
proc AlinhE(vr)
Private vr
If Len(vr)<6 And SubStr(vr,1,1)>"9"
   Then vr=SubStr(vr,1,1)+AlinhM(SubStr(vr,2,5),5)     
   Else vr=AlinhM(vr,6)			   
EndIf	  
Return vr
EndProc

;*******************************************************************************
;* Rotina para Apresentar Mensagem de Venda dos Clientes                       *
;*******************************************************************************
Proc Mensagem_Venda()
Private CampoAnt, Janela_F2

CampoAnt=Field()
Moveto [Lookup_Destmsg]
Ativa_Lookup()

Window Handle Current to Janela_F2
Window Move Janela_F2 to 1,81

Moveto [Codigo]
Locate [\Sistemas\Vendas\PedidoC->Codigo]
If RetVal
   Then BEEP
        Moveto [Observacoes]
        JANELA_DIALOG_DESABILITA=True
        Ver_Memo("Observacoes",11,01,10,76,"Observa‡”es para Venda")        
EndIf
KeyPress "Esc"
Moveto Field CampoAnt
Prompt TECLA
EndProc ;(Mensagem_Venda)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
Private CONDPAGTO, DESCCONDPAGTO, FORMAPAGTO

TX_DESCTO_CLIE=0

Moveto "PedidoC"
If INICIO_PAGINA
   Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf
        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                If CHAVEC=1
                   Then [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                EndIf
        EndIf
EndIf

INICIO_PAGINA=False
FACA_CHAVEI=True

MONTA_OBS=False
V_DESTIN=[Codigo da Destinacao]
V_COD   =[Codigo]
If CHAVEC=1
   Then Moveto [Codigo da Empresa]
   Else If [Situacao do Pedido]="CANCELADO" Or
           [Situacao do Pedido]="FATURADO"
           Then Mensagem("Pedido ["+[Situacao do Pedido]+"] !")
                If PARAM_PEDIDOIMP="N" 
                   Then If Not Checa_Supervisor()
                           Then CHAVEC=9
                                Return
                        EndIf      
                EndIf
                Moveto [Situacao do Pedido]  
           Else If PARAM_PEDIDOIMP="N" And [Pedido Impresso]="S"
                   Then If SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"
                           Then If Not Checa_Supervisor()
                                   Then CHAVEC=9
                                        Return
                                EndIf        
                        EndIf    
                EndIf  
                Moveto [Situacao do Pedido]       
        EndIf
EndIf

While True
      TrocaTabela=False

      TECLA="Esc=Retornar  Alt+F=Fun‡”es  "
      If Field()="Codigo da Empresa"        Or
         Field()="Codigo da Destinacao"     Or
         Field()="Codigo"                   Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Condicao de Pagamento"    Or
         Field()="Forma de Pagamento"       Or    
         Field()="Numero_Carregamento"      Or
         Field()="Cidade"                   Or
         Field()="UF"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf
      TECLA=TECLA + "Del=Excluir  "

      If SYS_CODIGO_CLIENTE="0341"
         Then TECLA=TECLA+"F9=Nome do Animal  "
      EndIf  

      TECLA=TECLA + "PgDn  "

      If CHAVEC=1 And IsBlank([])
         Then If Field()="Data de Emissao"
                 Then []=Today()
              EndIf
      Endif

      Prompt TECLA

      MSGCAMPO=Field()
      If Field()="Situacao do Pedido"
         Then MSGCAMPO="Aberto, Suspenso, Cancelado, Faturado"
      EndIf
      If Field()="Consumidor Final"
         Then MSGCAMPO="Consumidor Final (Sim/N„o)"
      EndIf
      If Field()="Codigo da Tabela"
         Then MSGCAMPO="C¢digo da Tabela de Pre‡o"
      EndIf
      If Field()="Codigo"
         Then MSGCAMPO="C¢digo do Destinatario"
      EndIf
      If Field()="Origem do Pedido"
         Then MSGCAMPO="Visita, Fone, Balc„o"
      EndIf
      Wait Field
           Message MSGCAMPO
           
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","DOWN","UP","F6","F5","F4","F7","F8","F9","F3",-33

           If RetVal="F9" And SYS_CODIGO_CLIENTE<>"0341"
              Then Loop
           EndIf   

           If RetVal=-33
              Then If SYS_CODIGO_CLIENTE="0341"
                      Then Echo Normal
                           Echo Off
                           ShowPopup " Fun‡”es " CENTERED
                             "F3  ~E~ndere‡o/Cobran‡a " : " Endere‡o/Cobranca               " : "F3",
                             "F4  ~M~udar Pre‡o/CPagto" : " Alterar Pre‡os e Condi‡„o Pagto " : "F4",
                             "F5  Cli~e~nte           " : " Cliente                         " : "F5",
                             "F6  ~I~mprimir          " : " Imprimir Pedido                 " : "F6",
                             "F7  Copiar ~P~edido     " : " Copiar Pedido                   " : "F7",
                             "F8  ~L~iberar Pre‡os    " : " Libera‡„o p/ altera‡ao de pre‡os" : "F8",
                             "F9  ~N~ome do Animal    " : " Nome do Animal                  " : "F9",
                             "~C~ancelar              " : " Cancelar a Opera‡„o             " : "CANCELAR"
                           EndMenu
                           To MenuVar
                           Echo off
                      Else Echo Normal
                           Echo Off
                           ShowPopup " Fun‡”es " CENTERED
                             "F3  ~E~ndere‡o/Cobran‡a " : " Endere‡o/Cobranca               " : "F3",
                             "F4  ~M~udar Pre‡o/CPagto" : " Alterar Pre‡os e Condi‡„o Pagto " : "F4",
                             "F5  Cli~e~nte           " : " Cliente                         " : "F5",
                             "F6  ~I~mprimir          " : " Imprimir Pedido                 " : "F6",
                             "F7  Copiar ~P~edido     " : " Copiar Pedido                   " : "F7",
                             "F8  ~L~iberar Pre‡os    " : " Libera‡„o p/ altera‡ao de pre‡os" : "F8",
                             "~C~ancelar              " : " Cancelar a Opera‡„o             " : "CANCELAR"
                           EndMenu
                           To MenuVar
                           Echo off                           
                   EndIf
                   
                   If MenuVar="CANCELAR" or MenuVar="Esc"
                      Then Loop
                   EndIf
                   
                   RetVal=MenuVar     
            EndIf



      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
              Field()="Codigo"                   Or
              Field()="CFO"                      Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"    Or
              Field()="Forma de Pagamento"       Or
              Field()="Numero_Carregamento"      Or
              Field()="Cidade"                   Or
              Field()="UF"
              Then If CONSULTAF1()
                      Then If Field()="Cidade"
                              Then [UF  ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf
            EndIf
      Case RetVal="F4" And CHAVEC=0:
           If [Situacao do Pedido]<>"ABERTO"
              Then Mensagem("Mudan‡a de Pre‡os somente Pedido em ABERTO !")
                   Loop
           EndIf
           If Not Checagem_Pagina1() Then Loop EndIf
           CondPgto=[Condicao de Pagamento]
           TbPreco =[Codigo da Tabela]
           Play "TbprNew"                         
           If Not OK
              Then [Codigo da Tabela     ]=TbPreco
                   [Condicao de Pagamento]=CondPgto
                   Moveto [Codigo da Tabela]
                   UnLockRecord
                   Loop
           EndIf
           UnLockRecord

           TrocaTabela=True
           MSG_AGUARDE="Aguarde, Processando Valores"
           Moveto "PedidoI"
           Moveto [Item do Pedido]
           NR=ImageCMax()
           Scan
             Aguarde(MSG_AGUARDE+Barra(NR,[Item do Pedido]))
             VSD_I_Codigo_Item=[Codigo do Item]
             If Not Pega_Preco("Altera")
                Then QuitLoop
             EndIf
             UnLockRecord
           EndScan
           Carrega_array_Itens() 
           CALC_PEDIDO()  
           Moveto "PedidoC"
           If PARAM_CPGTO_ITEM="S"
              Then Calc_Venctos_Itens()
              Else Calc_Venctos()
           EndIf
           Moveto [Codigo da Tabela]
           LimpAguarde()

      Case RetVal="PGDN":
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If Checa_Supervisor()
                      Then If QuerExcluir("")
                              Then EXCLUSAO_C()
                              Else UnLockRecord
                           EndIf
                      Else CONFGERAL("Cancelar Pedido de Venda")
                           If OK="S"
                              Then [Situacao do Pedido]="CANCELADO"
                           Endif
                           UnLockRecord
                   EndIf
                   CHAVEC=9
                   QuitLoop
           EndIf
      Case Retval="F3":
           Endereco()
      Case Retval="F7" And CHAVEC=0:
           If Not Copiar()
              Then Loop
           EndIf
           CHAVEC=9       
           QuitLoop    
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Tabela":
                If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"                 
                   Then If PARAM_VISITA="S"
                           Then Moveto [Origem do Pedido]
                           Else Moveto [Comissao do Representante]
                        EndIf   
                   Else Moveto [Forma de Pagamento]
                EndIf
           Case Field()="Forma de Pagamento"   :
                Moveto [Condicao de Pagamento]     
           Case Field()="Condicao de Pagamento":
                If PARAM_VISITA="S"
                   Then Moveto [Origem do Pedido]
                   Else Moveto [Comissao do Representante]
                EndIf   
           Case Field()="Origem do Pedido":
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante":
                Moveto [Codigo do Representante]
           Case Field()="Codigo do Representante":
                Moveto [Codigo]
           Case Field()="Consumidor Final":
                Moveto [Codigo]                      
           Case Field()="CFO":
                Moveto [Codigo da Destinacao]
           Case Field()="Codigo da Destinacao":
                Moveto [Numero_Carregamento]
           Case Field()="Numero Pedido Origem":
                If CHAVEC=1
                   Then Moveto [Codigo da Empresa]
                   Else Moveto [Situacao do Pedido]
                EndIf  
           Case Field()="Situacao do Pedido":
                If CHAVEC=1
                   Then Moveto [Codigo da Empresa]
                   Else If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                EndIf
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then EXCLUSAO_C()
                        CHAVEC=9
                        QuitLoop
                EndIf
           OtherWise:
                Left    
           EndSwitch
      Case Retval="F5":
           DADOS_CLIE()
           If Not IsBlank([Codigo])
              Then Moveto [Codigo do Representante]
              Else Moveto [Codigo]
           EndIf
      Case Retval="F6": 
           npedido = [PedidoC->Numero do Pedido]
           ncampo  = Field()
           If IMPRIME()
              Then CHAVEC=9
                   QuitLoop
              Else Moveto Field ncampo
           EndIf
      Case Retval="F8":
           If PARAM_ALTERA_PRECO<>"P"
              Then Mensagem("Fun‡„o utilizada apenas com parametro de permiss„o ! ")
                   Loop
           EndIf

           MSG="Liberar altera‡„o de pre‡os para todos os itens deste Pedido ?"
           Libera_Bloqueio(MSG)
           If Ok="S"
              Then MSG="Pedido: "+PEDIDO+", Liberado precos "
                   Grava_Logt("#","AltPreco",MSG)
                   PARAM_ALTERA_PRECO="S"
           EndIf
      Case RetVal="F9":    
           VSD_I_Livre=[Livre] 
           While True
        
             If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
             If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 
        
             Echo Normal
             Echo Off
             
             Showdialog "Animal" Proc "Geral_Dialog"
             Trigger "OPEN","ARRIVE"
             Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
             @ 07,19 height 05 width 42
    
             Label  @ 1,00 "Nome do Animal: " For "I_Livre"   
             Accept @ 1,17  Width 22 "A20" picture "!*!" Tag "I_Livre" to VSD_I_Livre            
            
             EndDialog
             Mouse Show
             
             If Retval 
                Then [Livre]=VSD_I_Livre 
             EndIf
             QuitLoop
                
           EndWhile                 
      Case Retval="ENTER":
           If IsBlank([])
              Then If Field()="Codigo da Empresa"       Or
                      Field()="Codigo da Destinacao"    Or
                      Field()="CFO"                     Or
                      Field()="Data de Emissao"         Or
                      Field()="Codigo"                  Or
                      Field()="Codigo do Representante" Or
                      Field()="UF"                      Or
                      Field()="Condicao de Pagamento"   Or
                      Field()="Forma de Pagamento"      Or
                      Field()="Situacao do Pedido"      Or
                      Field()="Origem do Pedido"
                      Then Loop
                   EndIf
           EndIf

           Switch
           Case Field()="Codigo da Empresa":
                [Situacao do Pedido]="ABERTO"
                If Carrega_Parametros()
                   Then
                        [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Forma de Pagamento      ]=PARAM_FORMA_PAGTO

                        If Sys_Codigo_Cliente="0117"
                           Then [Codigo da Tabela   ]=NTABELA_ANTERIOR
                                [Numero_Carregamento]=NCARREG_ANTERIOR
                        EndIf

                        Moveto [Numero Pedido Origem]
                EndIf
           Case Field()="Situacao do Pedido":
                If IsBlank([])
                   Then []="ABERTO"
                EndIf
                Moveto [Numero Pedido Origem]
           Case Field()="Numero_Carregamento":
                Moveto [Codigo da Destinacao]
           Case Field()="Data de Entrega":
                If IsBlank([])
                   Then []=[Data de Emissao]
                EndIf
                If []<[Data de Emissao]
                   Then Mensagem("Data de Entrega invalida !")
                        Loop
                EndIf
                Moveto [Hora de Saida]
           Case Field()="Hora de Saida" :
                If IsBlank([])
                   Then []=Time()
                EndIf
                Moveto [Codigo]   
           Case Field()="Codigo da Destinacao":
                V_DESTIN=[]
                Moveto [CFO]
           Case Field()="Codigo":      
                If [Situacao do Cliente]="PESSIMO"
                   Then Mensagem("Verificar a Situa‡„o do Cliente !// Status="+[Situacao do Cliente])
                        Loop
                EndIf
                If [Situacao do Cliente]="RECADASTRO"
                   Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
                        Loop
                EndIf                     

                If [Codigo]<>V_COD
                   Then ENDERECOS()
                        V_REPRES =[Codigo do Representante]
                        [Codigo do Representante]=""
                        [Codigo do Representante]=V_REPRES
                    
                        V_COD=[Codigo]
                EndIf

                If Search("VEND",[Descricao da Destinacao])>0
                   Then Mensagem_Venda()
                EndIf
                
                If PARAM_CONDPAGTO<>"N"                    
                   Then Moveto [Codigo]
                        Ativa_Lookup()
                        Moveto [Codigo]
                        Locate [PedidoC->Codigo]
                        If RetVal
                           Then CONDPAGTO     = [CondPagto Cliente      ]
                                DESCCONDPAGTO = [Descricao CP Cliente   ]
                                FORMAPAGTO    = [Forma Pagamento Cliente]
                        EndIf             
                        KeyPress "ESC"   
                        [Condicao de Pagamento]=CONDPAGTO
                        [Descricao CondPagto  ]=DESCCONDPAGTO
                        [Forma de Pagamento   ]=FORMAPAGTO

                        Moveto "PedidoV"
                        If Not RecordStatus("New")
                           Then If PARAM_CPGTO_ITEM="S"
                                   Then Calc_Venctos_Itens()
                                   Else Calc_Venctos()
                                EndIf   
                        EndIf
                        Moveto "PedidoC" 
                EndIf
                Moveto [Consumidor Final]
           Case Field()="Consumidor Final":
                If IsBlank([])
                   Then []="N"
                EndIf
                If [Nome Fantasia EmitDest]="DIVERSOS"
                   Then Moveto [Razao Social]
                   Else Moveto [Codigo do Representante]
                EndIf
           Case Field()="IE":
                Moveto [Bairro]
           Case Field()="Codigo do Representante":
                Moveto [Comissao do Representante]
           Case Field()="Comissao do Representante":
                If PARAM_VISITA="S" 
                   Then Moveto [Origem do Pedido]
                   Else If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E" 
                           Then Moveto [Codigo da Tabela]
                           Else Moveto [Condicao de Pagamento]
                        EndIf   
                EndIf
           Case Field()="Condicao de Pagamento":
                Moveto [Forma de Pagamento]
           Case Field()="Forma de Pagamento":
                Moveto [Codigo da Tabela]
           Case Field()="Codigo da Tabela":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)
;*******************************************************************************
;* Rotina para Acrescimo Preco Unitario Item                                   *
;*******************************************************************************
Proc Acrescimo_Item()

INICIO_DIALOG=True
OP_SHOWD="Acrescimo"

VSD_Acrescimo=0

Showdialog "Acr‚scimo Pre‡o Unit rio" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "ENTER","ESC","ClearArea"
     @ 12,20 height 04 width 40

   Label  @ 0,00 "% Sobre a Tabela de Pre‡o" for "A_Acrescimo"
   Accept @ 1,02 Width 10 "N" picture "#*#.[###]" Tag "A_Acrescimo" to VSD_Acrescimo

Enddialog

If Not RetVal
   Then Return
EndIf

If VSD_Acrescimo<0
   Then Mensagem("% Inv lida !")
        Return
EndIf

MSG_AGUARDE="Aguarde, Calculando Valores"
Moveto "PedidoI"
Moveto [Item do Pedido]
NR=ImageCMax()
Scan
  Aguarde(MSG_AGUARDE+Barra(NR,[Item do Pedido]))

  [Preco Unitario       ]=[Preco Unitario Tabela]+(([Preco Unitario Tabela]*VSD_ACRESCIMO)/100)
  [Preco Total          ]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
  If [Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10"
     Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
             Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
             Else [Tributacao de Icms]=TRIB_ICMS
          EndIf
  EndIf

  If [Tributacao de ICMS]<>"D"
     Then If Not IsBlank([Tributacao de ICMS      ])
              Then [Aliquota Reduzida BCICMS]=BlankNum()
                   [Aliquota de ICMS        ]=BlankNum()
                   [Valor do ICMS           ]=BlankNum()
           EndIf
  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
     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

EndScan
LimpAguarde()                        
Endproc
   
;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Checagem_Pagina1()           
Private CAMPOS_OK, NCAMPO, OBS
                        
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 !")
  Case IsBlank([Situacao do Pedido]):      Mensagem("Situa‡„o do Pedido Invalida !")
  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

If SYS_CODIGO_CLIENTE="0341" And [Livre]=""
   Then Mensagem("Informe o Nome do Animal !")
        CAMPOS_OK=False
EndIf

;*** Situacao do Cliente ***
If [Situacao do Cliente]="RECADASTRO"
   Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+[Situacao do Cliente])
        CAMPOS_Ok=False
EndIf
If [Situacao do Cliente]="PESSIMO"
   Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
        CAMPOS_Ok=False
EndIf

;*** Pega UF Empresa Controle ***
Moveto [Codigo da Empresa]
If Busca_Lookup("Codigo da Empresa",[PedidoC->Codigo da Empresa],"Empresa: "+[PedidoC->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"]
   Else UF_EMPRESA="??"
        TPEMPR    ="??"
        ATIVEMPR  ="??"
EndIf

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

;*** Checagem da Tabela de Preco ***
Moveto [Codigo da Tabela]
Ativa_Lookup()
Moveto [Codigo da Tabela]
Locate [PedidoC->Codigo da Tabela]
If RetVal
   Then If [Ativa]="N"
           Then Mensagem("Tabela de Pre‡o Inativa !")
                CAMPOS_Ok=False
        EndIf
EndIf
KeyPress "ESC"

If Not CAMPOS_OK
  Then Moveto "PedidoC"
       Moveto Field NCAMPO
       Return False
EndIf


;*** Aliquota do Estado ***
Moveto [UF]
If Busca_Lookup("UF",[PedidoC->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",[PedidoC->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 ***
;;;;If CHAVEC=1
;;;;   Then OBS=[Observacao na Nota Fiscal]
;;;;   Else OBS=""
;;;;EndIf

ALIQUOTA_CREDITO_ICMS_NOSN =BlankNum()
TRIB_ICMS=""
TRIB_IPI =""
DESTIN_ATUALIZA_PEDIDOS=""
OPCAO_RED_BCICMS="1"
CALCULO_NF_AUTOMATICO="A"

TP_MOV_ESTOQUE="S"

Moveto [Codigo da Destinacao]
If Busca_Lookup("Codigo da Destinacao",[PedidoC->Codigo da Destinacao],"")
   Then 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"]
        TP_MOV_ESTOQUE=REG_BUSCA_LOOKUP["Tipo Movimento Estoque"]
        ;;;;;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"]
EndIf
;;;;;;;If CHAVEC=1 Then [Observacao na Nota Fiscal]=OBS EndIf

;*** Tabela de Kilometragem ***
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [PedidoC->Codigo]
If RetVal
   Then If IsBlank([Km Frete])
           Then KM_FRETE=0
           Else KM_FRETE=[Km Frete]
        EndIf
        TX_DESCTO_CLIE=[Taxa_Desconto Permitido]
   Else KM_Frete=0
EndIf
KeyPress "ESC"

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"

;*** Simples Nacional ***
If (TPEMPR="SIMPLES NACIONAL"     Or
   TPEMPR="SIMPLES NAC. ESRB")    And
   TP_MOV_ESTOQUE="S"             And
   [TIPO PESSOA]="JURIDICA"       And
   SubStr(Directory(),1,1)<>"X"   And
   Search("VEND",[Descricao da Destinacao])>0  
   Then Moveto [Codigo]
        If Busca_Lookup("Codigo",[PedidoC->Codigo],"")
           Then Switch 
                 ; Case (REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NACIONAL" Or
                 ;       REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NAC. ESRB") And
                 ;       ALIQUOTA_CREDITO_ICMS_NOSN>0:;
                 ; 
                 ;       MSG=    Completa([PedidoC->Nome Fantasia Empresa ]+"="+TPEMPR,70," ")+"//" 
                 ;       MSG=MSG+Completa([PedidoC->Nome Fantasia EmitDest]+"="+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                 ;       MSG=MSG+"Destinat rio sem direito a crˆdito de ICMS !"+"// //"
                 ;       MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                 ;       MSG=MSG+Completa("- Voce esta usando uma destina‡Æo com cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                 ;       MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                 ;       Mensagem(MSG)
                                                  
                  Case (REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NACIONAL" And
                        REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NAC. ESRB") And
                        ALIQUOTA_CREDITO_ICMS_NOSN<=0:
                        
                        MSG=    Completa([PedidoC->Nome Fantasia Empresa ]+" = "+TPEMPR,70," ")+"//" 
                        MSG=MSG+Completa([PedidoC->Nome Fantasia EmitDest]+" = "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                        MSG=MSG+"Destinat rio com direito a crˆdito de ICMS !"+"// //"
                        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo sem cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                        Mensagem(MSG)
                                                  
                EndSwitch           
        EndIf   
EndIf

Moveto "PedidoC"
Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Localizar Enderecos                                             *
;*******************************************************************************
Proc Closed Enderecos()
UseVars AutoLib, ErrorProc
Private AutoLib, ErrorProc, TPDEST, NCAMPO, CODIGO_OK

NCAMPO=Field()
TPDEST=[Tipo]
[Endereco de Entrega]=""      [Endereco de Cobranca]=""
[Bairro de Entrega  ]=""      [Bairro de Cobranca  ]=""
[CEP de Entrega     ]=""      [CEP de Cobranca     ]=""
[Cidade de Entrega  ]=""      [Cidade de Cobranca  ]=""
[UF de Entrega      ]=""      [UF de Cobranca      ]=""

CODIGO_OK=False
Moveto [Codigo_Entrega_Cobranca]
Ativa_Lookup()
Moveto [Codigo]
Locate [PedidoC->Codigo]
If RetVal
   Then CODIGO_OK=True
EndIf
KeyPress "ESC"

If CODIGO_OK
   Then [Codigo_Entrega_Cobranca]=[Codigo]
EndIf
If IsBlank([Endereco de Entrega])
   Then [Endereco de Entrega]="O MESMO"
EndIf
If IsBlank([Endereco de Cobranca])
   Then [Endereco de Cobranca]="O MESMO"
EndIf
Moveto Field NCAMPO
EndProc   ;  (EnderecoS)

;*******************************************************************************
;* Digitacao de Enderecos                                                      *
;*******************************************************************************
Proc Endereco()
Private Campo_Atual

Campo_Atual=Field()

VSD_E_Endereco=[Endereco de Entrega ]
VSD_E_Bairro  =[Bairro de Entrega   ]
VSD_E_Cidade  =[Cidade de Entrega   ]
VSD_E_UF      =[UF de Entrega       ]
VSD_E_CEP     =[CEP de Entrega      ]

VSD_C_Endereco=[Endereco de Cobranca]
VSD_C_Bairro  =[Bairro de Cobranca  ]
VSD_C_Cidade  =[Cidade de Cobranca  ]
VSD_C_UF      =[UF de Cobranca      ]
VSD_C_CEP     =[CEP de Cobranca     ]

INICIO_DIALOG=True
OP_SHOWD="Enderecos"

Showdialog "Endere‡os Complementares" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","PGDN","F8"
   @ 9,08 height 14 width 63

   Frame Single From 0,0 to 5,60
   @ 0,1 ?? " Local de Entrega "
   paintcanvas attribute 26 0, 0, 5, 60
   Label  @ 1,01 "Endere‡o" for "E_Endereco"
   Accept @ 2,02  Width 43 "A40" picture "!*!" Tag "E_Endereco" to VSD_E_Endereco
   Label  @ 1,45 "CEP" for "E_CEP"
   Accept @ 2,46  Width 13 "A10" picture "##.###-###" Tag "E_CEP" to VSD_E_CEP

   Label  @ 3,01 "Bairro" for "E_Bairro"
   Accept @ 4,02  Width 23 "A20" picture "!*!" Tag "E_Bairro" to VSD_E_Bairro
   Label  @ 3,25 "Cidade" for "E_Cidade"
   Accept @ 4,26  Width 23 "A20" picture "!*!" Tag "E_Cidade" to VSD_E_Cidade
   Label  @ 3,49 "UF" for "E_UF"
   Accept @ 4,50  Width 05 "A2" picture "!*!" Tag "E_UF" to VSD_E_UF

   Frame Single From 6,0 to 11,60
   @ 6,1 ?? " Local de Cobran‡a "
   paintcanvas attribute 30 6, 0,11, 60
   Label  @ 7,01 "Endere‡o" for "C_Endereco"
   Accept @ 8,02  Width 43 "A40" picture "!*!" Tag "C_Endereco" to VSD_C_Endereco
   Label  @ 7,45 "CEP" for "C_CEP"
   Accept @ 8,46  Width 13 "A10" picture "##.###-###" Tag "C_CEP" to VSD_C_CEP

   Label  @ 9,01 "Bairro" for "C_Bairro"
   Accept @ 10,02  Width 23 "A20" picture "!*!" Tag "C_Bairro" to VSD_C_Bairro
   Label  @ 9,25 "Cidade" for "C_Cidade"
   Accept @ 10,26  Width 23 "A20" picture "!*!" Tag "C_Cidade" to VSD_C_Cidade
   Label  @ 9,49 "UF" for "C_UF"
   Accept @ 10,50  Width 05 "A2" picture "!*!" Tag "C_UF" to VSD_C_UF

Enddialog
Mouse Show
[Endereco de Entrega ]=VSD_E_Endereco
[Bairro de Entrega   ]=VSD_E_Bairro
[Cidade de Entrega   ]=VSD_E_Cidade
[CEP de Entrega      ]=VSD_E_CEP
[UF de Entrega       ]=VSD_E_UF
[Endereco de Cobranca]=VSD_C_Endereco
[Bairro de Cobranca  ]=VSD_C_Bairro
[Cidade de Cobranca  ]=VSD_C_Cidade
[CEP de Cobranca     ]=VSD_C_CEP
[UF de Cobranca      ]=VSD_C_UF

Moveto Field Campo_Atual

EndProc

;********************************************************************************
;* Rotina para a escolha do Numero do Pedido                                    *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =   9: Temp=False
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_NPEDIDO" : CancelDialog
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo="TG_NPEDIDO"  :
                 VSDGNPEDIDO=AlinhM(ControlValue("TG_NPEDIDO"),6)
                 COD1=VSDGNPEDIDO
                  If COD1=[Numero do Pedido]
                     Then Mensagem("N§ de Pedido ja' existe !")
                     Else CODIGOANT =[Numero do Pedido]

                          Moveto [Numero do Pedido]
                          Locate COD1
                          If RetVal
                             Then Mensagem("N§ de Pedido ja' existe !")
                                  Locate CODIGOANT
                             Else Locate CODIGOANT
                                  AcceptDialog
                           EndIf
                  EndIf
          EndSwitch
   EndSwitch
EndIf
Switch
  Case Campo="TG_NPEDIDO":
     MSG_CAMPO="Informe o novo n£mero do pedido"
EndSwitch
Monta_Prompt(MSG_CAMPO,TECLA)
Mouse Hide
Return Temp
EndProc

;*******************************************************************************
;* Nova Referencia                                                             *
;*******************************************************************************
Proc NOVAREF()
Private Hora

Do_It!

Aguarde("Copiando Pedido")

{Ask} {PedidoC} Check
Moveto [Numero do Pedido   ] TypeIn "~CODIGOANT"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then Hora=Time()

        {Ask} {Answer} TypeIn "Fast"
        Moveto [Numero do Pedido   ] TypeIn "Changeto ~COD1"
        Moveto [Data de Emissao    ] TypeIn "Changeto Today"
        Moveto [Data de Entrega    ] TypeIn "Changeto Today"
        Moveto [Situacao do Pedido ] TypeIn "Changeto ABERTO"
        Moveto [Numero_Carregamento] TypeIn "Changeto Blank"
        Moveto [Codigo_Usuario     ] TypeIn "Changeto ~SYS_CHAPA_USUARIO"
        Moveto [Data_Inclusao      ] TypeIn "Changeto Today"
        Moveto [Hora_Inclusao      ] TypeIn "Changeto ~Hora"
        Moveto [Numero_Controle_Dia] TypeIn "Changeto ~SYS_CONTROLE_DIA"
        Do_It!

        {Tools} {More} {Add} {Answer} {Pedidoc} {NewEntries}

        ClearAll

        {Ask} {PedidoI} Check
        Moveto [Numero do Pedido   ] TypeIn "~CODIGOANT"
        Do_It!
        ClearAll

        If Not IsEmpty("Answer")
           Then {Ask} {Answer} TypeIn "Fast"
                Moveto [Numero do Pedido   ] TypeIn "Changeto ~COD1"
                Moveto [Quantidade Faturada] TypeIn "Changeto Blank"
                Do_It!

                {Tools} {More} {Add} {Answer} {Pedidoi} {NewEntries}

                ClearAll
        EndIf

        Mensagem("Pedido copiado !")
   Else Mensagem("Pedido n„o foi copiado, verificar !")
EndIf

ClearAll
LimpAguarde()
View NoWindow "\\Sistemas\\Cadastro\\Destinat"
View NoWindow "\\Sistemas\\Cadastro\\End_Cob"
View NoWindow "P_Pedido"
CoEdit NoWindow "PedidoC"
PickForm "1"

Moveto [Numero do Pedido]
Locate CODIGOANT

EndProc

;*******************************************************************************
;* Rotina para Copiar Pedidos                                                  *
;*******************************************************************************
Proc Copiar()
Private campoant

COD1=""

Echo Normal
Echo Off

Campoant=Field()

ShowDialog "Novo pedido" Proc "SD_Dialog"
Trigger "OPEN","ARRIVE"
Key "F1","ENTER","ESC","TAB",
    -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
 @ 01,01 Height 04 Width 21

  Label  @ 01,02 "N§" For "TG_NPEDIDO"
  Accept @ 01,07 Width 09 "A6"  Picture "#*#" Tag "TG_NPEDIDO" To VSDGNPEDIDO

EndDialog
Mouse Show
If Not RetVal
   Then Moveto Field campoant
        Return False
   Else NovaRef()
        Return True
EndIf

EndProc   ;  (Copiar)

;*******************************************************************************
;* Rotina para Dados do Cliente                                                *
;*******************************************************************************
Proc Dados_Clie()
Private CODIGO,CGC,CLIEOk

ClieOk=True
Moveto [Nome Fantasia EmitDest]
While True

      TECLA="Esc=Retornar  F2=Gravar_Dados  F3=Endere‡o/Cobranca  "

      Prompt TECLA
      MSGCAMPO=Field()
      If Field()="Consumidor Final"
         Then MSGCAMPO="Consumidor Final (Sim/N„o)"
      EndIf
      If Field()="CGC"
         Then MSGCAMPO="CNPJ/CPF"
      EndIf
      If Field()="Nome Fantasia EmitDest"
         Then MSGCAMPO="Nome Fantasia"
      EndIf
       If Field()="Telefone"               
         Then If[UF]="EX"
                Then MSGCAMPO="+PP XX NNNN-NNNN"
                Else MSGCAMPO="XX NNNN-NNNN"
              EndIf
      EndIf  
      If Field()="Codigo do Representante"  Or
         Field()="Cidade"                   Or
         Field()="UF"
         Then TECLA=TECLA + "F1=Tabelas "
      EndIf

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","FIELDVIEW","F35","F2","F3","F1"

      Switch
      Case RetVal="F1":
           If Field()="Codigo do Representante"  Or
              Field()="Cidade"                   Or
              Field()="UF"
              Then If CONSULTAF1()
                      Then If Field()="Cidade"
                              Then [UF  ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf
            EndIf
      Case Retval="F3":
           Endereco()
      Case RetVal="F2":
           UnLockRecord
           KeyPress "F7"
           
           If PARAM_CGC_CLIENTE="S" And IsBlank([PedidoC->Codigo])
              Then CGC=[CGC]
                   If IsBlank(CGC)                     
                      Then ClieOk=False 
                           Mensagem("CNPJ/CPF nÆo informado !")
                           QuitLoop 
                   EndIf
                   If Not Checa_CGC_CPF_Formatado(CGC) 
                      Then ClieOk=False 
                           QuitLoop 
                   EndIf

                   Moveto "\\Sistemas\\Cadastro\\Destinat"
                   If PARAM_CGC_FORNECEDOR="S"
                      Then Moveto [CGC]
                           Locate CGC
                      Else Moveto [Tipo]
                           Locate IndexOrder by "tipo_cgc" "C",CGC
                   EndIf
                   If Retval
                      Then ClieOk=False
                           Mensagem("J  existe pessoa com este CNPJ/CPF cadastrado !// verificar !")
                           QuitLoop
    									Else CODIGO=Checa_Codigo("")
                           If IsBlank(CODIGO)
                              Then ClieOk=False
                                   QuitLoop
                           EndIf   
                   EndIf
              Else CGC   =""
                   CODIGO=[Codigo]

                   Moveto "\\Sistemas\\Cadastro\\Destinat"

                   CODIGO=Checa_Codigo(CODIGO)
                   If IsBlank(CODIGO)
                      Then ClieOk=False
                           QuitLoop
                   EndIf   
           EndIf

           Moveto [Codigo]
           Locate CODIGO
           If Not Retval
              Then End Down
                   [Codigo             ]=CODIGO
                   [Tipo               ]="C"
                   [CGC                ]=CGC
                   [Situacao do CLiente]="BOM" 
                   [Tipo Assistencia   ]="EVENTUAL"
                   [Pais               ]="BRASIL"
                   [Data_Cadastro      ]=Today()
                   [Inativo            ]="N"
                   [Data da Manutencao ]=Today()
                   [Hora da Manutencao ]=Time()
                   [Chapa              ]=SYS_CHAPA_USUARIO
           EndIf


           [Nome Fantasia EmitDest ]=[PedidoC->Nome Fantasia EmitDest ]
           [Razao Social           ]=[PedidoC->Razao Social           ]
           [Endereco               ]=[PedidoC->Endereco               ]
           [Bairro                 ]=[PedidoC->Bairro                 ]
           [CEP                    ]=[PedidoC->CEP                    ]
           [Cidade                 ]=[PedidoC->Cidade                 ]
           [UF                     ]=[PedidoC->UF                     ]
           [CGC                    ]=[PedidoC->CGC                    ]
           [IE                     ]=[PedidoC->IE                     ]
           [Telefone               ]=[PedidoC->Telefone               ]
           [Consumidor Final       ]=[PedidoC->Consumidor Final       ]
           [Codigo do Representante]=[PedidoC->Codigo do Representante]
           [Nome Fantasia Represent]=[PedidoC->Nome Fantasia Represent]
          
           Switch
             Case Search(".",[CGC])=4: [Tipo Pessoa]="FISICA"
             Case Search(".",[CGC])=3: [Tipo Pessoa]="JURIDICA"
           EndSwitch

           If SYS_CODIGO_CLIENTE="0222"
              Then [Regime_Tributario]="OUTROS" ;Pedido por Ana Carolina
           EndIF  
                      
           UnLockRecord

           Moveto "\\Sistemas\\Cadastro\\End_Cob"
           Moveto [Codigo]
           Locate CODIGO
           If Not RetVal
              Then End
                   Down
                   [Codigo]=CODIGO
           EndIf
           [Endereco de Cobranca]=[PedidoC->Endereco de Cobranca]
           [Bairro de Cobranca  ]=[PedidoC->Bairro de Cobranca  ]
           [CEP de Cobranca     ]=[PedidoC->CEP de Cobranca     ]
           [Cidade de Cobranca  ]=[PedidoC->Cidade de Cobranca  ]
           [UF de Cobranca      ]=[PedidoC->UF de Cobranca      ]
           [Endereco de Entrega ]=[PedidoC->Endereco de Entrega ]
           [Bairro de Entrega   ]=[PedidoC->Bairro de Entrega   ]
           [CEP de Entrega      ]=[PedidoC->CEP de Entrega      ]
           [Cidade de Entrega   ]=[PedidoC->Cidade de Entrega   ]
           [UF de Entrega       ]=[PedidoC->UF de Entrega       ]

           If IsBlank([Endereco de Cobranca])
              Then [Endereco de Cobranca]="O MESMO"
           EndIf
           If IsBlank([Endereco de Entrega])
              Then [Endereco de Entrega]="O MESMO"
           EndIf
           UnLockRecord

           Moveto "PedidoC"
           KeyPress "F7"
           If IsBlank([Codigo]) 
              Then [Codigo]=CODIGO
           EndIf
           Return
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="ESC":
           Switch
             Case Field()="Nome Fantasia EmitDest":
                  var_IE=[IE]
                  [IE]=""
                  [IE]=var_IE
                  Release Vars var_IE

                  If QuerDesfazer("os dados deste cliente")
                     Then QuitLoop
                  Endif
             Case Field()="Consumidor Final":
                  Moveto [Nome Fantasia EmitDest]
             Case Field()="Razao Social":
                  Moveto [Consumidor Final]
             Case Field()="Codigo do Representante":
                  Moveto [UF]
             OtherWise:
                  Left
           EndSwitch
      Case Retval="ENTER":
           Switch
             Case Field() = "Nome Fantasia EmitDest":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [Consumidor Final]
             Case Field()="Consumidor Final":
                  If IsBlank([])
                     Then []="N"
                  EndIf
                  Moveto [Razao Social]
             Case Field()="Razao Social":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [CGC]
             Case Field()="CGC":
                  If IsBlank([]) Then Loop EndIf
                  If Not Checa_CGC_CPF_Formatado([]) Then Loop EndIf
                  Switch
                    Case Search(".",[CGC])=4:
                         [Tipo Pessoa]="FISICA"
                    Case Search(".",[CGC])=3:
                         [Tipo Pessoa]="JURIDICA"
                  EndSwitch
                  Moveto [Endereco]
             Case Field()="Cidade":
                  If IsBlank([]) Then Loop EndIf
                  Right
             Case Field() = "UF":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [Telefone]
             Case Field()="IE":
                  If IsBlank([]) Then Loop EndIf
                  Moveto [Bairro]
             Case Field()="Codigo do Representante":
                  Moveto [Nome Fantasia EmitDest]
             OtherWise:
                  Right
           EndSwitch
      EndSwitch
EndWhile
Moveto "PedidoC"
If Not ClieOk
   Then KeyPress "F7"
EndIf   
EndProc   ;  (Dados_Clie)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()
Moveto "PedidoI"
FACA_DIGITAF=True

Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
Moveto [Item do Pedido]   VCITENS =ImageCCount()

While True

  Moveto [Item do Pedido]
  End
  NITEM = [Item do Pedido]
  Down
  Moveto [Item do Pedido]

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  SEQIT=[]

  Opcao_Ver = False
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False
    
    If Not Ler_CDBarras(22,00) 
       Then Del
            OPCHAVEI="CDC"
            CHAVEI=7
            Return
       Else If Dados_QTD<=0
               Then Mensagem("Quantidade tem que ser > ou = 1 !")
                    Loop
               Else CDBarras()
                    QuitLoop
            EndIf
    EndIf    
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()

ITOK=True
[Quantidade]=Dados_QTD             
CODIGO_BARRA=Dados_Item                
Prod_Esgt=""

If Not Pega_Dados_Item("Codigo_Barras") 
   Then Del
        Return
EndIf

Registro_Item("Ler")
VSD_I_Quantidade =[Quantidade]
VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)

Registro_Item("Gravar")

VSVRMERC=VSVRMERC+[Preco Total   ]
VSQTDE  =VSQTDE  +[Quantidade    ]
VCITENS =VCITENS +1

Moveto "PedidoI"
If RecordStatus("Locked") Then UnLockRecord EndIf

Sound 400 400
EndProc   ;CDBarras()

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc ChaveI()
Moveto "PedidoI"
FACA_DIGITAF=True
While True
  Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
  Moveto [Item do Pedido]   VCITENS =ImageCCount()

  End
  NITEM = [Item do Pedido]
  Down
  Moveto [Item do Pedido]

  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

    TECLA= "Esc=Retornar  Alt+F=Fun‡”es  PgDn/PgUp  "

    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGUP","PGDN","PGUP","F8","F9","F5","F6",-33

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha           " : " Ver itens modo Ficha                           " : "F3",
              "F5  C~o~nsulta            " : " Consultar Tabela Pre‡o                         " : "F5",
              "F6  ~O~rganiza Itens      " : " Organiza Itens pela Descricao ou C¢digo do Item" : "F6",
              "F7  A~c~r‚scimo           " : " % Acr‚scimo Pre‡o Unit rio                     " : "F7",
              "F8  ~A~grupa Intes        " : " Agrupa Itens                                   " : "F8",
              "F9  ~M~odo                " : " Ativa/Desativa Modo Codigo de Barras           " : "F9",
              "~C~ancelar                " : " Cancelar a Opera‡„o                            " : "CANCELAR"
            EndMenu
            To MenuVar
            echo off
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf

            RetVal=MenuVar
    EndIf

    Switch
    Case Retval="F8":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")=True
            Then MENSAGEM("O Pedido de Venda deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         ConfGeral("Confirma agrupar itens ?")
         If Ok="S" ; Alterado Karina
            Then If SYS_CLIENTE_CONFEC="0079" Or
                    SYS_CODIGO_CLIENTE="0162" Or
                    SYS_CLIENTE_CONFEC="0171" Or
                    SYS_CLIENTE_CONFEC="0185" Or
                    SYS_CLIENTE_CONFEC="0195" Or
                    SYS_CLIENTE_CONFEC="0196" Or
                    SYS_CODIGO_CLIENTE="0003" Or
                    SYS_CLIENTE_CONFEC="0222" Or
                    SYS_CLIENTE_CONFEC="0200" Or
                    SYS_CLIENTE_CONFEC="0204"
                    Then AGRUPAB()
                    Else AGRUPA()
                 EndIf
         EndIf
         QuitLoop
         
    Case RetVal="F5": 
         VSDGEMPRESA=[PedidoC->Codigo da Empresa]
         If IsBlank([PedidoC->Codigo da Tabela])
            Then VSDGTABELA =PARAM_TABELA_PRECO
            Else VSDGTABELA =[PedidoC->Codigo da Tabela]
         EndIf   
         Del                  
         Moveto "PedidoC"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True

         If PARAM_EXIBECUSTO="N"
            Then Play "SW_CONSS"
            Else Play "SW_CONS"
         EndIF
         Moveto "PedidoC"
         Moveto [Numero do Pedido]
         Locate PEDIDO
         KeyPress "F7"
         IsLockRecord()
         Moveto "PedidoI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

         While True
           Moveto [Item do Pedido]
           End
           NITEM = [Item do Pedido]
           Down
           Moveto [Item do Pedido]
           Seta_Sequencia(NITEM,False)
           If IsLockRecord()
              Then Del
                   Loop
           EndIf
           QuitLoop
         EndWhile
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf

         SEQIT=[Item do Pedido]
         CHAVEI=1
         [Numero do Pedido]=PEDIDO
         [Item do Pedido  ]=SEQIT
         [Codigo do Item  ]=Sw_Item_Pesquisado
         Item_Ins_Consulta=True

         Return

    Case Retval="F6":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")=True
            Then MENSAGEM("O Pedido de Venda deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         
         ORGANIZA_DESCIT = False
         ORGANIZA_NUMIT  = False
         
         Echo Normal
         Echo Off
         ShowPopup " Organizar por: " CENTERED
           "Descri‡„o do Item         " : " Organiza os itens pela sua descri‡„o    " : "DESC_IT",
           "C¢digo do Item            " : " Organiza os itens pelo seu c¢digo       " : "COD_IT",
           "~C~ancelar                " : " Cancelar a Opera‡„o                     " : "Cancelar" 
         EndMenu
         To OpcaoOrg
         echo off

         If OpcaoOrg="Cancelar" or OpcaoOrg="Esc"
            Then QuitLoop
         EndIf
        
         If OpcaoOrg="DESC_IT"
            Then ConfGeral("Confirma organizar pela descri‡„o do item ?")
                 ORGANIZA_DESCIT = True
            Else ConfGeral("Confirma organizar pelo c¢digo do item ?") 
                 ORGANIZA_NUMIT = True
         EndIf
        
         If Ok="S"
            Then Organiza_Itens()
         EndIf
         QuitLoop

    Case Retval="F7":
         If PARAM_ALTERA_PRECO <>"N"
            Then Del
                 Acrescimo_Item()
                 QuitLoop 
            Else Mensagem("Acr‚scimo n„o permitido para altera‡„o de pre‡o.//Verificar Parƒmetros!")
         EndIf
         
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case RetVal="F3":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item do Pedido]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case RetVal="PGDN":
         Del
         Moveto [Item do Pedido]
         If RecordStatus("New")=True
            Then MENSAGEM("O Pedido de Venda deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case RetVal="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto [Preco Total   ]   VSVRMERC=ImageCSum()
           Moveto [Quantidade    ]   VSQTDE  =ImageCSum()
           Moveto [Item do Pedido]   VCITENS =ImageCCount()

           PAGINA("PedidoI","MR")
           SEQIT=[Item do Pedido]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   EXCLUSAO_I()
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate PEDIDO,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Numero do Pedido]=PEDIDO
                 [Item do Pedido  ]=SEQIT
                 UnLockRecord
                 Locate PEDIDO,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Pega_Dados_Item(Origem) 
Private Item_ok, Origem

Item_ok=False

Moveto [Codigo do Item]
Ativa_Lookup()
Switch
  Case Origem="Codigo_Barras":
      Switch
        Case SYS_CODIGO_CLIENTE="0304":
              Moveto [Codigo de Barras]
              Locate IndexOrder by "cod_barras" CODIGO_BARRA
        OtherWise:        
              If Len(CODIGO_BARRA)<=10
                Then Moveto [Codigo do Item]
                     Locate ALINHM(CODIGO_BARRA,10)
                Else Moveto [Codigo de Barras]
                     Locate IndexOrder by "cod_barras" CODIGO_BARRA
              EndIf        
      EndSwitch       
  OtherWise:     
  Localizar_Item_Por()  
EndSwitch
                                                                             
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"

       While True
         VSD_I_Referencia=REG_BUSCA_LOOKUP["Referencia"]
                  
         If REG_BUSCA_LOOKUP["Inativo"]="S"
            Then Mensagem("Este item://"+REG_BUSCA_LOOKUP["Codigo do Item"]+" "+
                           REG_BUSCA_LOOKUP["Descricao do Item"]+"//"+"Referˆncia: "+
                           REG_BUSCA_LOOKUP["Referencia"]+"//"+
                          "Fornecedor: "+REG_BUSCA_LOOKUP["Codigo Fornecedor"]+"// // esta inativo !")
                 QuitLoop
         EndIf    

         If REG_BUSCA_LOOKUP["Producao Esgotada"] ="S"
            Then Mensagem("Este item: //"+REG_BUSCA_LOOKUP["Codigo do Item"]+"//"+REG_BUSCA_LOOKUP["Descricao do Item"]+"// // esta com produ‡„o esgotada !")
         EndIf

         FAMILIA=REG_BUSCA_LOOKUP["Codigo da Familia"] 

        ;-----------------------------------------------------------------------------------------       
         
         CODIGO_BARRA=REG_BUSCA_LOOKUP["Codigo do Item"]
         VSD_I_Codigo_Item =CODIGO_BARRA
         Pega_Preco("Novo")
         [Codigo do Item]  =CODIGO_BARRA

         If [Tipo do Item]="C" ; Servi‡o
            Then [Aliquota de ICMS      ]=BlankNum()
                 [Aliquota de IPI       ]=BlankNum()

                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then [PIS_CST        ]="99"
                         [PIS_Aliquota   ]=BlankNum()

                         [COFINS_CST     ]="99"
                         [COFINS_Aliquota]=BlankNum()
                 EndIf        
                         
            Else
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         Switch
                           Case (Search("MOSTR",[PedidoC->Descricao da Destinacao])>0  Or
                                 Search("DEVOL",[PedidoC->Descricao da Destinacao])>0  Or
                                 Search("BRIND",[PedidoC->Descricao da Destinacao])>0) And
                                SYS_CLIENTE_CONFEC<>"":
                                [CSOSN]="400"

                           Case ( TP_MOV_ESTOQUE="S" And
                                  (Search("VEND",[PedidoC->Descricao da Destinacao])>0 And
                                   [PedidoC->Tipo Pessoa]="FISICA") )
                                  Or 
                                ( TP_MOV_ESTOQUE="E" Or
                                  Search("VEND",[PedidoC->Descricao da Destinacao])=0 Or
                                  [PedidoC->Tipo Pessoa]="FISICA" ):  
                                 Switch
                                   Case [CSOSN]="101": [CSOSN]="102" 
                                   Case [CSOSN]="201": [CSOSN]="202" 
                                 EndSwitch

                         EndSwitch
                         VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]
        
                         Switch
                           Case [CSOSN]="101" Or [CSOSN]="900":         
                                ;[ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
        
                           Case [CSOSN]="201":
                                ;[ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf                                 
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA([Tributacao de ICMS],[Codigo MVA])
        
                           Case [CSOSN]="202" Or [CSOSN]="203" Or [CSOSN]="500":
                                ;[ICMS_CREDSN_Aliquota]=BlankNum()
                                If OPCAO_RED_BCICMS="1"
                                   Then [Aliquota Reduzida BCICMS]=BlankNum()
                                EndIf
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA([Tributacao de ICMS],[Codigo MVA])
        
                           OtherWise:
                                ;[ICMS_CREDSN_Aliquota]=BlankNum()
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
                         EndSwitch

                         [Tributacao de Icms      ]=Pega_TipoTributacao("CSOSN",[CSOSN])
                         [Aliquota Reduzida BCICMS]=BlankNum()
                         [Aliquota de ICMS        ]=BlankNum()                         
                         
                   OtherWise:
        
                         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
                         VSD_I_CST_Item=[Tipo Tributacao]
        
                         [CSOSN               ]="900"
                         [ICMS_CREDSN_Aliquota]=BlankNum()
                          
                         If (TribCST="10" Or TribCST="30" Or TribCST="70")
                            Then [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                 Checa_MVA([Tributacao de ICMS],[Codigo MVA])
                
                            Else [MVA             ]=BlankNum()
                                 [ICMS_ST_Aliquota]=BlankNum()
                         EndIf 

                         [Tributacao de ISSQN     ]="N"
                         [Aliquota de ISSQN       ]=BlankNum()
        
                 EndSwitch
                 
         EndIf   

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

         If [Tipo do Item]="C" ; Servi‡o
            Then If SYS_CODIGO_CLIENTE="0296"
                    Then [ISSQN_Municipio]=3122306
                         [ISSQN_UF       ]="MG"
                         Switch
                           Case Substr([PedidoC->CFO],1,1)="5" : [CFO]="5933"
                           Case Substr([PedidoC->CFO],1,1)="6" : [CFO]="6933"
                         EndSwitch  
                 EndIf
         EndIf

         If Search("VENDA",[PedidoC->Descricao da Destinacao])=0 And TP_MOV_ESTOQUE<>"S"
            Then [PIS_CST        ]  ="99"
                 [PIS_ALIQUOTA   ]=BlankNum() 
                 [COFINS_CST     ]  ="99"
                 [COFINS_ALIQUOTA]=BlankNum() 
         EndIf            
         
         Item_Ok=True
         QuitLoop
       EndWhile
  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf

Echo Off
Return Item_ok
EndProc
              
;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Localizar_Item_Por()

Switch
 Case SYS_CODIGO_CLIENTE="0296"      : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODFOR" 
                                       EndIf
 Case SYS_CODIGO_CLIENTE="0046" And 
      PARAM_UTILIZACDBARRA="S"       : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODBAR" 
                                       EndIf
 Case SYS_CODIGO_CLIENTE="0319"      : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODREF" 
                                       EndIf                                     
 OtherWise                           : If Not IsAssigned(LOCALIZA_CODIGO)
                                          Then LOCALIZA_CODIGO="LOC_CODITE" 
                                       EndIf                                      
EndSwitch             
              
Switch
  Case LOCALIZA_CODIGO="LOC_CODITE" : If Len(ControlValue("I_Codigo_Item"))<=10
                                         Then Moveto [Codigo do Item]
                                              Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                                      EndIf
  Case LOCALIZA_CODIGO="LOC_CODFOR" : Moveto [Codigo Fornecedor]
                                      Locate ControlValue("I_Codigo_Item")
  Case LOCALIZA_CODIGO="LOC_CODREF" : Moveto [Referencia]
                                      Locate ControlValue("I_Codigo_Item")
  Case LOCALIZA_CODIGO="LOC_CODBAR" : Moveto [Codigo de Barras]
                                      Locate IndexOrder by "cod_barras" ControlValue("I_Codigo_Item")  
EndSwitch     

EndProc ;Proc Localizar_Item_Por()              
                                                                      
;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
                   
TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If CHAVEI=0
   Then Moveto [Codigo do Item]
        Ativa_Lookup()
        Locate [Pedidoi->Codigo do Item]
        VSD_I_Referencia=[Referencia]
        KeyPress "ESC"
EndIf

If INICIO_DIALOG
   Then If CHAVEI=0    
           Then Switch     
                  Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                  Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                  Case PARAM_CPGTO_ITEM="S"          : Campo="I_Condicao_Pagamento"
                  OtherWise                          : Campo="I_Quantidade" 
                EndSwitch  
                TABANT=VSD_I_TABELA
                CPGANT=VSD_I_CONDICAO_PAGAMENTO   
           Else If REPETE
                   Then Campo="I_Codigo_Cor_Tecido"
                   Else Campo="I_Codigo_Item"
                Endif
        EndIf
        INICIO_DIALOG=False
EndIf

If Not Opcao_Ver And (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
   Then VSD_I_BC_ICMS     =BlankNum()
        VSD_I_Valor_ICMS  =BlankNum()

        VSD_I_Valor_CSOSN =BlankNum() 

        VSD_I_BC_ST       =BlankNum()
        VSD_I_Valor_ST    =BlankNum()
   
        VSD_I_BC_IPI      =BlankNum()
        VSD_I_Valor_IPI   =BlankNum()
   
        VSD_I_BC_ISSQN    =BlankNum()
        VSD_I_Valor_ISSQN =BlankNum()

        VSD_I_BC_PIS      =BlankNum()                             
        VSD_I_Valor_PIS   =BlankNum()
       
        VSD_I_BC_COFINS   =BlankNum()                             
        VSD_I_Valor_COFINS=BlankNum() 
EndIf    

If Opcao_Ver Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then

   If Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED
           "F4 ~D~escri‡„o              ": " Descri‡„o do Item                  " :"F4",
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma de localizar o item   " :"F7", 
           "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off  
          If MenuVar="CANCELAR" or MenuVar="Esc"
             Then Return
          EndIf                                         
          Evento["KeyCode"]=MenuVar
   EndIf 

   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                     If CHAVEI=0
                        Then Moveto [Codigo do Item]
                             Ativa_Lookup()
                             Locate [Pedidoi->Codigo do Item]
                             VSD_I_Referencia=[Referencia]
                             KeyPress "ESC"
                     EndIf
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
                     If CHAVEI=0
                        Then Moveto [Codigo do Item]
                             Ativa_Lookup()
                             Locate [Pedidoi->Codigo do Item]
                             VSD_I_Referencia=[Referencia]
                             KeyPress "ESC"
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item do Pedido]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -62 Or Evento["KeyCode"] = "F4") And Not F4_ATIVADO:
          F4_ATIVADO=True
          Campo_Ant=Campo
          Campo="I_Descricao_Item"          
     Case Evento["KeyCode"] = -63  And Not F5_ATIVADO:
          If Not IsBlank(VSD_I_Codigo_Item)
             Then If PARAM_ALTERA_PRECO="P"
                     Then Libera_Bloqueio("")
                          If Ok="S"
                             Then F5_ATIVADO=True
                                  Campo="I_Preco_Unitario"
                          EndIf
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -64  And Not F6_ATIVADO:
          If Not IsBlank(VSD_I_Codigo_Item)
             Then If PARAM_COMIS_ITEM="P"
                     Then Libera_Bloqueio("")
                          If Ok="S"
                             Then F6_ATIVADO=True
                                  Campo="I_Comissao_Item"
                          EndIf
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ShowPopup " Alterar Forma de Localizar o Item " CENTERED
            "Por Codigo do ~I~tem       " : " Localiza o item pelo seu c¢digo           " : "LOC_CODITE",
            "Por Codigo do ~F~ornecedor " : " Localiza o item pelo codigo do fornecedor " : "LOC_CODFOR",
            "Por ~R~eferencia do Item   " : " Localiza o item pela sua referencia       " : "LOC_CODREF",
            "Por Codigo de ~B~arra      " : " Localiza o item pelo c¢digo de barra      " : "LOC_CODBAR",
            Separator,
            "~C~ancelar               " : " Cancelar a Opera‡„o                       " : "CANCELAR"
          EndMenu
          To MenuVar
          Echo Off
          
          If MenuVar="CANCELAR" or MenuVar="Esc"
              Then Return
          EndIf                                         
          RetVal=MenuVar
          LOCALIZA_CODIGO = MenuVar
          
          Switch 
            Case LOCALIZA_CODIGO="LOC_CODITE" : LOCALIZAR_POR="CodItem" 
            Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="CodFor" 
            Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Ref."
            Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="CodBar"   
          EndSwitch  
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Tipo_Item"          Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_Condicao_Pagamento" Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or            
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"                     
             Then Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"        Then Moveto [Codigo do Item]         EndIf
                  If Campo="I_Tipo_Item"          Then Moveto [Tipo do Item]           EndIf
                  If Campo="I_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido]   EndIf
                  
                  If Campo="I_Condicao_Pagamento" 
                     Then FI_CDPGTOAnt=VSD_I_Condicao_Pagamento
                          FC_CDPGTOAnt=[PedidoC->Condicao de Pagamento]
                          Moveto "PedidoC"
                          Moveto [Condicao de Pagamento]  
                  EndIf
                  If Campo="I_Tabela"             
                     Then FI_TABELAAnt=VSD_I_Tabela
                          FC_TABELAAnt=[PedidoC->Codigo da Tabela]
                          Moveto "PedidoC"
                          Moveto [Codigo da Tabela]  
                  EndIf
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[PedidoC->CFO]
                          Moveto "PedidoC"
                          Moveto [CFO]
                  EndIf
                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[PedidoC->Cidade]
                          FC_UFSERVAnt =[PedidoC->UF]
                          Moveto "PedidoC"
                          Moveto [Cidade]  
                  EndIf

                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      VSD_I_CST_Item=Checa_CST("ICMS",TP_MOV_ESTOQUE,"")
                      If IsBlank(VSD_I_CST_Item)
                         Then VSD_I_CST_Item=CSTNew
                         Else [Tipo Tributacao]=VSD_I_CST_Item
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_IPI":          
                      CSTNew=VSD_I_CST_IPI 
                      VSD_I_CST_IPI=Checa_CST("IPI",TP_MOV_ESTOQUE,"")
                      If IsBlank(VSD_I_CST_IPI)
                         Then VSD_I_CST_IPI=CSTNew
                         Else [IPI_CST]=VSD_I_CST_IPI
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_PIS":          
                      CSTNew=VSD_I_CST_PIS 
                      VSD_I_CST_PIS=Checa_CST("PIS",TP_MOV_ESTOQUE,"")
                      If IsBlank(VSD_I_CST_PIS)
                         Then VSD_I_CST_PIS=CSTNew
                         Else [PIS_CST]=VSD_I_CST_PIS
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CST_COFINS":          
                      CSTNew=VSD_I_CST_COFINS 
                      VSD_I_CST_COFINS=Checa_CST("COFINS",TP_MOV_ESTOQUE,"")
                      If IsBlank(VSD_I_CST_COFINS)
                         Then VSD_I_CST_COFINS=CSTNew
                         Else [COFINS_CST]=VSD_I_CST_COFINS
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_CSOSN":          
                      CSTNew=VSD_I_CSOSN 
                      VSD_I_CSOSN=Checa_CSOSN2("","")
                      If IsBlank(VSD_I_CSOSN)
                         Then VSD_I_CSOSN=CSTNew
                         Else [CSOSN    ]=VSD_I_CSOSN
                      EndIf
                      Release Vars CSTNew
                    Case Campo="I_TISSQN":          
                      CSTNew=VSD_I_TISSQN 
                      VSD_I_TISSQN=Checa_CST("ISSQN","","")
                      If IsBlank(VSD_I_TISSQN)
                         Then VSD_I_TISSQN         =CSTNew
                         Else [Tributacao de ISSQN]=VSD_I_TISSQN        
                      EndIf
                      Release Vars CSTNew
                    OtherWise:         
                      If ConsultaF1()
                         Then Switch
                                Case Campo="I_CFOP":               
                                      FI_CFOAnt     =[PedidoC->CFO] 
                                      [PedidoC->CFO]=FC_CFOAnt
                                      Moveto "PedidoI"
                                      [PedidoI->CFO]=FI_CFOAnt
                                Case Campo="I_Tabela":               
                                      FI_TABELAAnt     =[PedidoC->Codigo da Tabela] 
                                      [PedidoC->Codigo da Tabela]=FC_TABELAAnt
                                      Moveto "PedidoI"
                                      [PedidoI->Codigo da Tabela]=FI_TABELAAnt
                                Case Campo="I_Condicao_Pagamento":               
                                      FI_CDPGTOAnt     =[PedidoC->Condicao de Pagamento] 
                                      [PedidoC->Condicao de Pagamento]=FC_CDPGTOAnt
                                      Moveto "PedidoI"
                                      [PedidoI->Condicao de Pagamento]=FI_CDPGTOAnt
                                Case Campo="I_MUNSERV":               
                                      [PedidoC->Cidade   ]=FC_MUNSERVAnt
                                      [PedidoC->UF       ]=FC_UFSERVAnt
                                      Moveto "PedidoI"
                                      [PedidoI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [PedidoI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                              EndSwitch
                         Else If Campo="I_CFOP" Or Campo="I_Tabela" Or Campo="I_Condicao_Pagamento" Or
                                 Campo="I_MUNSERV"  
                                 Then Moveto "PedidoI"
                              EndIf        
                      EndIf                          
                  EndSwitch                          
                
                  Window Select JANELA
                  WinArray5["FLOATING"]=True
                  Window SetAttributes JANELA From WinArray5

                  echo Normal
                  echo off

                  If Campo="I_Codigo_Item"
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_CF_Item       =[NBM              ]
                          VSD_I_UN_Item       =[Unidade Fiscal   ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]

                          Campo="I_Codigo_Item"
                  EndIf
                  If Campo="I_Tipo_Item"
                     Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Tipo_Item"
                  EndIf
                  If Campo="I_Codigo_Cor_Tecido"
                     Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                          VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                          Campo="I_Codigo_Cor_Tecido"
                 EndIf

                  If Campo="I_Condicao_Pagamento"
                     Then VSD_I_Condicao_Pagamento  =[Condicao de Pagamento  ]
                          VSD_I_Composicao_Dias     =[Composicao de Dias     ]
                          Release Vars FI_CDPGTOAnt,FC_CDPGTOAnt
                  EndIf
                  If Campo="I_Tabela"
                     Then VSD_I_Tabela              =[Codigo da Tabela       ]
                          Release Vars FI_TABELAAnt,FC_TABELAAnt
                  EndIf
                  If Campo="I_CFOP"
                     Then VSD_I_CFOP            =[CFO             ]
                          Campo="I_CFOP"
                          Release Vars FI_CFOAnt,FC_CFOAnt
                  EndIf
                   If Campo="I_MUNSERV"
                      Then VSD_I_MUNSERV=[PedidoI->ISSQN_Municipio]
                           VSD_I_UFSERV =[PedidoI->ISSQN_UF       ] 
                           Campo="I_MUNSERV"
                           Release Vars FI_MUNSERVAnt,FC_MUNSERVAnt,FI_UFSERVAnt,FC_UFSERVAnt
                   EndIf
                  If Campo="I_CST_Item"
                     Then VSD_I_CST_Item        =[Tipo Tributacao ]
                          Campo="I_CST_Item"
                  EndIf
                  
                  Moveto "PedidoI"
         EndIf
         Temp=False               
     Case Evento["KeyCode"] = 27:
          Switch
           Case Campo="I_Codigo_Item":
                CancelDialog
           Case Campo="I_Descricao_Item":
                If F4_ATIVADO
                   Then Campo=Campo_Ant
                        F4_ATIVADO=False
                   Else If CHAVEI=1                 
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                EndIf
           Case Campo="I_Obs_Item":
                Switch
                  Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"
                  OtherWise:
                    If CHAVEI=1
                       Then Campo="I_Codigo_Item"
                       Else CancelDialog
                    EndIf
                 EndSwitch    
           Case Campo="I_Codigo_Cor_Tecido":
                If REPETE
                   Then CancelDialog
                   Else Campo="I_Obs_Item"
                EndIf
           Case Campo="I_Descricao_Cor_Tecido"        : Campo="I_Codigo_Cor_Tecido"
           Case Campo="I_Tamanho":
                Switch
                   Case [Edita Descricao do Item]="S" : Campo="I_Descricao_Item"                  
                   Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                   OtherWise                          : Campo="I_Obs_Item"
                EndSwitch              
           Case Campo="I_Modelo_Item":
                Switch
                  Case PARAM_TAMANHO="S"              : Campo="I_Tamanho"
                  Case PARAM_COR_TECIDO="S"           : Campo="I_Codigo_Cor_Tecido"
                  Case [Edita Descricao do Item]="S"  : Campo="I_Descricao_Item"
                  OtherWise                           : Campo="I_Obs_Item"
                EndSwitch
           Case Campo="I_Tabela":
                Switch
                  Case SYS_CODIGO_CLIENTE="0003"      : Campo="I_Modelo_Item"
                  Case PARAM_TAMANHO="S"              : Campo="I_Tamanho"
                  Case PARAM_COR_TECIDO="S"           : Campo="I_Codigo_Cor_Tecido"
                  Case [Edita Descricao do Item]="S"  : Campo="I_Descricao_Item"
                  OtherWise                           : Campo="I_Obs_Item"
                EndSwitch               
           Case Campo="I_Condicao_Pagamento":
                Switch
                  Case PARAM_TABPR_ITEM="S"           : Campo="I_Tabela"
                  Case SYS_CODIGO_CLIENTE="0003"      : Campo="I_Modelo_Item"
                  Case PARAM_TAMANHO="S"              : Campo="I_Tamanho"
                  Case PARAM_COR_TECIDO="S"           : Campo="I_Codigo_Cor_Tecido"
                  Case [Edita Descricao do Item]="S"  : Campo="I_Descricao_Item"
                  OtherWise                           : Campo="I_Obs_Item"
                EndSwitch
           Case Campo="I_Composicao_Dias"             : Campo="I_Condicao_Pagamento"
           Case Campo="I_Quantidade":
                Switch
                  Case PARAM_CPGTO_ITEM="S"           : Campo="I_Condicao_Pagamento"
                  Case PARAM_TABPR_ITEM="S"           : Campo="I_Tabela"
                  Case SYS_CODIGO_CLIENTE="0003"      : Campo="I_Modelo_Item"
                  Case PARAM_TAMANHO="S"              : Campo="I_Tamanho"
                  Case PARAM_COR_TECIDO="S"           : Campo="I_Codigo_Cor_Tecido"
                  Case [Edita Descricao do Item]="S"  : Campo="I_Descricao_Item"
                  OtherWise                           : Campo="I_Obs_Item"
                EndSwitch


           Case Campo="I_UN_Item"                    Or
                Campo="I_Preco_Unitario"             Or
                Campo="I_Taxa_Desconto_Unitario"     Or
                Campo="I_Valor_Desconto_Unitario"    Or
                Campo="I_Preco_Total"                Or
                Campo="I_CST_Item"                   Or 
                Campo="I_Comissao_Item"              Or
                Campo="I_CSOSN"                       : Campo="I_Quantidade"
       
           Case Campo="I_RBC_ICMS"                   Or
                Campo="I_AICMS"                      Or
                Campo="I_BC_ICMS"                    Or
                Campo="I_Valor_ICMS"                  : 
                If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                   Then Campo="I_CSOSN"
                   Else Campo="I_CST_Item"
                EndIf
  
           Case Campo="I_ACSOSN"                     Or
                Campo="I_Valor_CSOSN"                : Campo="I_CSOSN"
  
           Case Campo="I_MVA"                        Or
                Campo="I_RBC_ST"                     Or
                Campo="I_AST"                        Or
                Campo="I_BC_ST"                      Or
                Campo="I_Valor_ST"                   Or
                Campo="I_CST_IPI"                    Or     
                Campo="I_CFOP"                        : 
                If VSD_I_Tipo_Item="C"
                   Then Campo="I_TISSQN"
                   Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                           Then Campo="I_CSOSN"
                           Else Campo="I_CST_Item"
                        EndIf
                EndIf
                  
           Case Campo="I_AIPI"                       Or
                Campo="I_Valor_IPI"                  Or  
                Campo="I_BC_IPI"                      : Campo="I_CST_IPI"
           
           Case Campo="I_TISSQN"                      :
                If VSD_I_Tipo_Item="C"
                   Then Campo="I_Quantidade"
                   Else Campo="I_CST_IPI"
                EndIf
       
           Case Campo="I_AISSQN"                     Or
                Campo="I_BC_ISSQN"                   Or
                Campo="I_Valor_ISSQN"                 : Campo="I_TISSQN"
     
           Case Campo="I_CST_PIS"                     :
                If VSD_I_Tipo_Item="C"
                   Then Campo="I_TISSQN"
                   Else Campo="I_CST_IPI" 
                EndIf

           Case Campo="I_APIS"                       Or
                Campo="I_Valor_PIS"                  Or     
                Campo="I_BC_PIS"                     Or
                Campo="I_CST_COFINS"                  : Campo="I_CST_PIS"
                                                   
           Case Campo="I_ACOFINS"                    Or
                Campo="I_BC_COFINS"                  Or 
                Campo="I_Valor_COFINS"                : Campo="I_CST_COFINS"
            
           Case Campo="I_NCM"                        Or         
                Campo="I_CDSERV"                     Or
                Campo="I_MUNSERV"                     : Campo="I_CFOP"
                                                 
           Case Campo="I_Numero_Volumes"              : Campo="I_CFOP"
           Case Campo="I_Peso_Liquido"                : Campo="I_Numero_Volumes"
           Case Campo="I_Peso_Embalagem"              : Campo="I_Peso_Liquido"
         EndSwitch                                     
         Temp=False
    Case Evento["KeyCode"] = 13: 
         Switch                  
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Mensagem("Item n„o cadastrado !")
                    Else If Pega_Dados_Item("")
                            Then Registro_Item("Ler")    
                                 VSD_I_Quantidade =[Quantidade]
                                 VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                                 If [Edita Descricao do Item]="S"
                                    Then Campo="I_Descricao_Item"  
                                    Else Campo="I_Obs_Item"  
                                 EndIf   
                            Else VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_CF_Item       =""
                                 VSD_I_UN_Item       =""
                                 VSD_I_Tipo_Item     =""
                         EndIf        
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")                
                 Switch  
                   Case SYS_CODIGO_CLIENTE = "0251" or
                        SYS_CODIGO_CLIENTE = "0247" : 
                        Moveto [Codigo do Item]                                              
                        Ativa_Lookup()                   
                        Locate [Pedidoi->Codigo do Item] 
                        If [Codigo da Familia]="005"
                            Then Play "Calc_Ma" 
                        EndIf   
                        KeyPress "ESC"
                 EndSwitch   
                 Campo="I_Obs_Item"   
            Case Campo="I_Obs_Item":
                 VSD_I_Obs_Item=ControlValue("I_Obs_Item")
                 Switch
                   Case F4_ATIVADO                : F4_ATIVADO=False
                                                    Campo=Campo_Ant
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                   OtherWise                      : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then VSD_I_Codigo_Cor_Tecido=AlinhM(VSD_I_Codigo_Cor_Tecido,4)
                         Moveto [Codigo da Cor_Tecido]
                         Ativa_Lookup()
                         Moveto [Codigo da Cor_Tecido]
                         Locate VSD_I_Codigo_Cor_Tecido
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "PedidoI"
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                                 Switch
                                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                                   OtherWise                      : Campo="I_Quantidade"
                                 EndSwitch
                            Else Mensagem("Cor/Tecido n„o Cadastrado !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                                 KeyPress "ESC"
                         EndIf
                    Else Campo="I_Descricao_Cor_Tecido"
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 Switch
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                   OtherWise                      : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Tamanho":
                 VSD_I_Tamanho=ControlValue("I_Tamanho")
                 Switch
                   Case SYS_CODIGO_CLIENTE="0003" : Campo="I_Modelo_Item"
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                   OtherWise                      : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Modelo_Item":
                 VSD_I_Modelo_Item=ControlValue("I_Modelo_Item")
                 Switch
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   Case PARAM_CPGTO_ITEM="S"      : Campo="I_Condicao_Pagamento"
                   OtherWise                      : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Tabela":
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then Moveto [Codigo da Tabela]
                         Ativa_Lookup()
                         Moveto [Codigo da Tabela]
                         Locate VSD_I_Tabela
                         If RetVal
                            Then KeyPress "ESC"
                                 [Codigo da Tabela]=VSD_I_Tabela
                                 If PARAM_CPGTO_ITEM="S"
                                    Then Campo="I_Condicao_Pagamento"
                                    Else If CHAVEI=1
                                            Then Pega_Preco("Novo")
                                            Else If VSD_I_TABELA<>TABANT
                                                    Then Pega_Preco("Novo")
                                                    Else Pega_Preco("Checa")
                                                 EndIf
                                         EndIf
                                         TABANT=VSD_I_TABELA
                                         Campo="I_Quantidade"
                                 EndIf
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 VSD_I_Tabela=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Condicao_Pagamento":
                 VSD_I_Condicao_Pagamento=ControlValue("I_Condicao_Pagamento")
                 If Not IsBlank(VSD_I_Condicao_Pagamento)
                    Then VSD_I_Condicao_Pagamento=AlinhM(VSD_I_Condicao_Pagamento,2)
                         Moveto [Condicao de Pagamento]
                         Ativa_Lookup()
                         Moveto [Condicao de Pagamento]
                         Locate VSD_I_Condicao_Pagamento
                         If RetVal
                            Then VSD_I_Composicao_Dias=[Composicao de Dias]
                                 KeyPress "ESC"
                                 [Condicao de Pagamento]=VSD_I_Condicao_Pagamento
                                 If CHAVEI=1
                                    Then Pega_Preco("Novo")
                                    Else If VSD_I_TABELA<>TABANT Or
                                            VSD_I_CONDICAO_PAGAMENTO<>CPGANT
                                            Then Pega_Preco("Novo")
                                            Else Pega_Preco("Checa")
                                         EndIf
                                 EndIf
                                 TABANT=VSD_I_TABELA
                                 CPGANT=VSD_I_CONDICAO_PAGAMENTO
                                 Campo="I_Composicao_Dias"
                            Else Mensagem("Condicao n„o Cadastrada !")
                                 VSD_I_Condicao_Pagamento=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf     
            Case Campo="I_Composicao_Dias":
                 VSD_I_Composicao_Dias=ControlValue("I_Composicao_Dias")
                 If VSD_I_Composicao_Dias=""
                    Then VSD_I_Composicao_Dias="0"
                 EndIf
                 If Checa_CompDias(VSD_I_Composicao_Dias)
                    Then Campo="I_Quantidade"
                 EndIf  
         
            Case Campo="I_Quantidade":      
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 [Quantidade]=VSD_I_Quantidade

                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                 EndIf

                 If PARAM_COMIS_MARCA="S" And
                    Search("VEND",[PedidoC->Descricao da Destinacao])>0 And
                    (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T")
                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario)
                            Else VSD_I_Preco_Total=VSD_I_Preco_Unitario
                         EndIf
                 EndIf

                 VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"

                 Switch
                   Case PARAM_ALTERA_PRECO="S"  : Campo="I_Preco_Unitario"
                   Case PARAM_DESCUNIT="S"      : Campo="I_Taxa_Desconto_Unitario"
                   OtherWise                    : VSD_I_Taxa_Desconto_Unitario =BlankNum()
                                                  VSD_I_Valor_Desconto_Unitario=BlankNum()
                                                  Campo="I_Preco_Total"
                 EndSwitch
                 
                 
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Switch
                   Case PARAM_ALTERA_PRECO="S"        : Campo="I_Preco_Unitario"
                   Case PARAM_ALTERA_PRECO="N" And
                        Search("VEND",[PedidoC->Descricao da Destinacao])=0:
                                                        Campo="I_Preco_Unitario"
                   Case PARAM_DESCUNIT="S"            : Campo="I_Taxa_Desconto_Unitario"
                   OtherWise                          :
                        VSD_I_Taxa_Desconto_Unitario =BlankNum()
                        VSD_I_Valor_Desconto_Unitario=BlankNum()
                        Campo="I_Preco_Total"
                 EndSwitch                 
                 
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If PARAM_DESCUNIT<>"S"
                    Then VSD_I_Taxa_Desconto_Unitario =BlankNum()
                         VSD_I_Valor_Desconto_Unitario=BlankNum()
                 EndIf

                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                 EndIf

                 CONTINUA=True
                 If PARAM_COMIS_MARCA="S"
                    Then If Search("VEND",[PedidoC->Descricao da Destinacao])>0 And
                            (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T")
                            Then If VSD_I_Preco_Unitario>=VSD_I_Preco_Tabela
                                    Then VSD_I_Taxa_Desconto_Unitario =0
                                         VSD_I_Valor_Desconto_Unitario=0
                                    Else VSD_I_Taxa_Desconto_Unitario =((VSD_I_Preco_Tabela-VSD_I_Preco_Unitario)*100)/VSD_I_Preco_Tabela
                                         VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Tabela*VSD_I_Taxa_Desconto_Unitario)/100
                                 EndIf
                                 Pega_Preco("Checa")       
                                 If Checa_Comissao()
                                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario)
                                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario)
                                         EndIf
                                         If Liberou_Bloqueio
                                            Then CONTINUA=False          ; Continua e pula
                                                 Campo="I_Comissao_Item" ; pra comissao
                                         EndIf
                                    Else CONTINUA=False
                                 EndIf
                         EndIf
                 EndIf

                 VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"

                 If CONTINUA
                    Then Switch
													 Case PARAM_DESCUNIT="S"   : Campo="I_Taxa_Desconto_Unitario"
                           Case PARAM_COMIS_ITEM="S" : Campo="I_Comissao_Item"
                           Case PARAM_IMPOSTOS="S"   : 
                                 If VSD_I_Tipo_Item="C"
                                    Then Campo="I_TISSQN"
                                    Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                            Then Campo="I_CSOSN"
                                            Else Campo="I_CST_Item"
                                         EndIf
                                 EndIf
                           Case PARAM_VOLUMES="S"    : Campo="I_NUMERO_VOLUMES"
                           OtherWise                 : AcceptDialog
                         EndSwitch                           
                         If F5_ATIVADO=True
                            Then F5_ATIVADO=False
                                 MSG="Pedido: "+PEDIDO+"/"+StrVal(SEQIT)+", TabPr/CPg: "
                                 MSG=MSG+VSD_I_Tabela+"/"+VSD_I_Condicao_Pagamento
                                 Grava_Logt("#","AltPreco",MSG)
                         EndIf
                 EndIf
            Case Campo="I_Taxa_Desconto_Unitario":
                 VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                 If VSD_I_Taxa_Desconto_Unitario>0
                    Then VSD_I_Valor_Desconto_Unitario=(VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100
                         If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf
                         If Checa_DescontoUnitario()
                            Then Campo="I_Preco_Total"
                         EndIf

                         VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"

                    Else Campo="I_Valor_Desconto_Unitario"
                 EndIf
            Case Campo="I_Valor_Desconto_Unitario":
                 VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                 If Checa_DescontoUnitario()
                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                            Else VSD_I_Preco_Total=(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf
                         Campo="I_Preco_Total"

                         VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"

                 EndIf
            Case Campo="I_Preco_Total":   
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")

                 Ok=""
                 If (VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0)
                    Then Ok="S"
                         VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                 EndIf
                 If SYS_CODIGO_CLIENTE="0003" Or SYS_CODIGO_CLIENTE="0199"
                    Then Ok="S"
                 EndIf

                 If Ok="S"
                    Then
                  Switch
                    Case PARAM_COMIS_ITEM="S"     : Campo="I_Comissao_Item"
                    Case PARAM_IMPOSTOS="S"       :
                         If VSD_I_Tipo_Item="C"
                            Then Campo="I_TISSQN"
                            Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                    Then Campo="I_CSOSN"
                                    Else Campo="I_CST_Item"
                                 EndIf
                         EndIf
                    Case PARAM_VOLUMES="S"        : Campo="I_NUMERO_VOLUMES"
                    OtherWise                     : AcceptDialog
                  EndSwitch
                  If REPETE
                     Then AcceptDialog
                  Endif
                 EndIf
            Case Campo="I_Comissao_Item":
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")

                 If F6_ATIVADO=True
                    Then F6_ATIVADO=False
                         MSG="Pedido: "+PEDIDO+"/"+StrVal(SEQIT)+", TabPr/CPg: "
                         MSG=MSG+VSD_I_Tabela+"/"+VSD_I_Condicao_Pagamento
                         Grava_Logt("#","AltComis",MSG)
                 EndIf                
                 Switch
                   Case PARAM_IMPOSTOS="S"   :
                        If VSD_I_Tipo_Item="C"
                           Then Campo="I_TISSQN"
                           Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                   Then Campo="I_CSOSN"
                                   Else Campo="I_CST_Item"
                                EndIf
                         EndIf   
                   Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                   OtherWise                 : AcceptDialog
                 EndSwitch
            Case Campo="I_CST_Item":
                VSD_I_CST_Item=ControlValue("I_CST_Item")
                 If Not IsBlank(VSD_I_CST_Item)
                    Then TribCST=Checa_CST("ICMS",TP_MOV_ESTOQUE,VSD_I_CST_Item)
                         If TribCST<>""
                            Then TribCST=SubStr(VSD_I_CST_Item,2,2)
                                 
                                 VSD_I_TICMS=Pega_TipoTributacao("ICMS",VSD_I_CST_Item) 

                                 VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900"
                                 VSD_I_ACSOSN     =BlankNum()
                                 VSD_I_Valor_CSOSN=BlankNum() 

                                 Switch
                                  Case (TribCST="00" Or TribCST="10"):   
                                       If TribCST="00"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_RBC_ST     =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       VSD_I_RBC_ICMS   =BlankNum()   
                                       Campo="I_AICMS"         
                                  Case (TribCST="20" Or TribCST="51" Or TribCST="60" Or TribCST="70" Or TribCST="90"):    
                                       Switch 
                                         Case (TribCST="20" Or TribCST="51"):
                                                             VSD_I_MVA        =BlankNum()
                                                             VSD_I_RBC_ST     =BlankNum()
                                                             VSD_I_AST        =BlankNum()
                                                             VSD_I_Valor_ST   =BlankNum()
                                                             VSD_I_BC_ST      =BlankNum()
                                                             Campo="I_RBC_ICMS"
                                         Case TribCST="60" : VSD_I_MVA        =BlankNum()
                                                             VSD_I_BC_ICMS    =BlankNum()
                                                             VSD_I_RBC_ICMS   =BlankNum()
                                                             VSD_I_AICMS      =BlankNum()
                                                             VSD_I_Valor_ICMS =BlankNum() 
                                                             Switch
                                                               Case Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 : Campo="I_MVA"
                                                               Case Search("VEND" ,[PedidoC->Descricao da Destinacao])>0 : Campo="I_CST_IPI"
                                                               OtherWise                                                 : Campo="I_MVA"
                                                             EndSwitch
                                         OtherWise         : Campo="I_RBC_ICMS"
                                       EndSwitch  
                                  Case (TribCST="30" Or TribCST="40" Or TribCST="41" Or                                                 
                                        TribCST="50" Or TribCST="51") :                            
                                       If TribCST<>"30"
                                          Then VSD_I_MVA       =BlankNum()
                                               VSD_I_RBC_ST    =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_CST_IPI"
                                          Else VSD_I_RBC_ICMS  =BlankNum()
                                               VSD_I_AICMS     =BlankNum()
                                               VSD_I_BC_ICMS   =BlankNum()
                                               VSD_I_Valor_ICMS=BlankNum()
                                               Campo="I_MVA"
                                       EndIf
       												  EndSwitch
               												  
                                If (TribCST="10" Or TribCST="30" Or TribCST="70") And
                                   VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                   Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                        Checa_MVA(VSD_I_TICMS,[Codigo MVA])
                                EndIf                                                 

                           Else Mensagem("CST ICMS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                           Case Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                           Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                           OtherWise                                                                          : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_BC_ICMS"
                 EndIf                 
            Case Campo="I_BC_ICMS":
                 VSD_I_BC_ICMS=ControlValue("I_BC_ICMS")
                 Campo="I_Valor_ICMS"                 
            Case Campo="I_Valor_ICMS": 
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                   Case Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 And TribCST="60"         : Campo="I_MVA"
                   Case (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or TribCST="90"): Campo="I_MVA"
                   OtherWise                                                                          : Campo="I_CST_IPI"
                 EndSwitch  
            Case Campo="I_CSOSN":
                 VSD_I_CSOSN=ControlValue("I_CSOSN")
                 If Not IsBlank(VSD_I_CSOSN)
                    Then TribCST=SubStr(Checa_CSOSN2("",VSD_I_CSOSN),2,3)
                         If TribCST<>""
                            Then Switch
                                  Case TribCST="101"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="102"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="103"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="201"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"10" VSD_I_TICMS="S"
                                  Case TribCST="202"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"10" VSD_I_TICMS="S"
                                  Case TribCST="203"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"30" VSD_I_TICMS="S"
                                  Case TribCST="300"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="400"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                  Case TribCST="500"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"60" VSD_I_TICMS="S"
                                  Case TribCST="900"    : VSD_I_CST_Item=SubStr(VSD_I_CSOSN,1,1)+"90" VSD_I_TICMS="O"
                                 EndSwitch

                                 If TribCST<>"900"
                                    Then VSD_I_RBC_ICMS  =BlankNum()
                                         VSD_I_AICMS     =BlankNum()
                                         VSD_I_BC_ICMS   =BlankNum()
                                         VSD_I_Valor_ICMS=BlankNum()
                                 EndIf

                                 Switch
                                  Case (TribCST="101" Or TribCST="201"):   
                                       If TribCST="101"
                                          Then VSD_I_MVA        =BlankNum()
                                               VSD_I_RBC_ST     =BlankNum()
                                               VSD_I_AST        =BlankNum()
                                               VSD_I_Valor_ST   =BlankNum()
                                               VSD_I_BC_ST      =BlankNum()
                                       EndIf                                     
                                       Campo="I_ACSOSN"        
                                  Case (TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"):    
                                       VSD_I_ACSOSN     =BlankNum()
                                       VSD_I_Valor_CSOSN=BlankNum()

                                       VSD_I_MVA       =BlankNum()
                                       VSD_I_RBC_ST    =BlankNum()
                                       VSD_I_AST       =BlankNum()
                                       VSD_I_BC_ST     =BlankNum()
                                       VSD_I_Valor_ST  =BlankNum()
                                       VSD_I_RBC_ICMS  =BlankNum()
                                       Campo="I_CST_IPI"               
                                  Case (TribCST="202" Or TribCST="203" Or TribCST="500"):    
                                       VSD_I_ACSOSN     =BlankNum()
                                       VSD_I_Valor_CSOSN=BlankNum()

                                       Switch
                                         Case Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 And TribCST="500"        : Campo="I_MVA"
                                         Case (TribCST="202" Or TribCST="203")                                              : Campo="I_MVA"
                                         Case (TribCST="500")                                                               : Campo="I_MVA"
                                               VSD_I_MVA       =BlankNum()
                                               VSD_I_RBC_ST    =BlankNum()
                                               VSD_I_AST       =BlankNum()
                                               VSD_I_BC_ST     =BlankNum()
                                               VSD_I_Valor_ST  =BlankNum()
                                               VSD_I_RBC_ICMS  =BlankNum()
                                               Campo="I_CST_IPI"
                                         OtherWise                                                                          : Campo="I_CST_IPI"
                                       EndSwitch  
                                  Case (TribCST="900") : Campo="I_RBC_ICMS"        
                                 EndSwitch

                                If (TribCST="201" Or TribCST="202" Or TribCST="203") And
                                   VSD_I_MVA<=0 And VSD_I_AST<=0 And CHAVEI=1
                                   Then VSD_I_AST=UF_ALIQUOTA_ICMS_INTERNA
                                        Checa_MVA(VSD_I_TICMS,[Codigo MVA])
                                EndIf                                                 

                            Else Mensagem("CSOSN inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACSOSN":
                 VSD_I_ACSOSN=ControlValue("I_ACSOSN")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Switch
                           Case (TribCST="900")                                                   : Campo="I_MVA"
                           Case (TribCST="201" Or TribCST="202" Or TribCST="203" Or TribCST="500"): Campo="I_MVA"
                           OtherWise                                                              : Campo="I_CST_IPI"
                         EndSwitch  
                    Else Campo="I_Valor_CSOSN"
                 EndIf                 
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 Switch
                   Case (TribCST="900")                                                   : Campo="I_MVA"
                   Case (TribCST="201" Or TribCST="202" Or TribCST="203" Or TribCST="500"): Campo="I_MVA"
                   OtherWise                                                              : Campo="I_CST_IPI"
                 EndSwitch  
            Case Campo="I_MVA":
                 VSD_I_MVA=ControlValue("I_MVA")
                 Campo="I_RBC_ST"


            Case Campo="I_RBC_ST":
                 VSD_I_RBC_ST=ControlValue("I_RBC_ST")
                 Campo="I_AST"

            Case Campo="I_AST":
                 VSD_I_AST=ControlValue("I_AST")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_IPI"
                    Else Campo="I_BC_ST"
                 EndIf             
            Case Campo="I_BC_ST":
                 VSD_I_BC_ST=ControlValue("I_BC_ST")
                 Campo="I_Valor_ST"
            Case Campo="I_Valor_ST":
                 VSD_I_Valor_ST=ControlValue("I_Valor_ST")
                 Campo="I_CST_IPI"               
            Case Campo="I_CST_IPI":
                 VSD_I_CST_IPI=ControlValue("I_CST_IPI")
                 If Not IsBlank(VSD_I_CST_IPI)                   
                    Then TribCST=Checa_CST("IPI",TP_MOV_ESTOQUE,VSD_I_CST_IPI)
                         If TribCST<>""
                            Then TribCST=VSD_I_CST_IPI
                                 
                                 VSD_I_TIPI=Pega_TipoTributacao("IPI",VSD_I_CST_IPI) 

                                 If VSD_I_TIPI<>"D" And VSD_I_TIPI<>"O"
                                    Then If Not IsBlank(VSD_I_TIPI)
                                            Then VSD_I_BC_IPI   =BlankNum()
                                                 VSD_I_AIPI     =BlankNum()
                                                 VSD_I_Valor_IPI=BlankNum()

                                                 Campo="I_CST_PIS"
                                         EndIf
                                    Else Campo="I_AIPI"
                                EndIf
                            Else Mensagem("CST IPI inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_AIPI":
                 VSD_I_AIPI=ControlValue("I_AIPI")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_PIS"
                    Else Campo="I_BC_IPI"
                 EndIf             
            Case Campo="I_BC_IPI":
                 VSD_I_BC_IPI=ControlValue("I_BC_IPI")
                 Campo="I_Valor_IPI"                 
            Case Campo="I_Valor_IPI":
                 VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
                 Campo="I_CST_PIS"

            Case Campo="I_TISSQN":
                 VSD_I_TISSQN=ControlValue("I_TISSQN")

                 If Not IsBlank(VSD_I_TISSQN)
                    Then TribCST=Checa_CST("ISSQN","",VSD_I_TISSQN)
                         If TribCST<>""
                            Then If VSD_I_TISSQN="N"
                                    Then VSD_I_BC_ISSQN   =BlankNum()
                                         VSD_I_AISSQN     =BlankNum()
                                         VSD_I_Valor_ISSQN=BlankNum()
        
                                         If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                                            Then Campo="I_CFOP"
                                            Else Campo="I_CST_PIS"
                                         EndIf
                                    Else Campo="I_AISSQN"
                                 EndIf   
                            Else Mensagem("CST ISSQN inv lida, use F1 para consultar !")   
                        EndIf
                 EndIf

            Case Campo="I_AISSQN":
                 VSD_I_AISSQN=ControlValue("I_AISSQN")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                            Then Campo="I_CFOP"
                            Else Campo="I_CST_PIS"
                         EndIf   
                    Else Campo="I_BC_ISSQN"
                 EndIf             
            Case Campo="I_BC_ISSQN":
                 VSD_I_BC_ISSQN=ControlValue("I_BC_ISSQN")
                 Campo="I_Valor_ISSQN"                 
            Case Campo="I_Valor_ISSQN":
                 VSD_I_Valor_ISSQN=ControlValue("I_Valor_ISSQN")
                 If TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                    Then Campo="I_CFOP"
                    Else Campo="I_CST_PIS"
                 EndIf   

            Case Campo="I_CST_PIS":
                 VSD_I_CST_PIS=ControlValue("I_CST_PIS")
                 If IsBlank(VSD_I_CST_PIS)
                    Then VSD_I_CST_PIS="99"
                 EndIf        
                 If Not IsBlank(VSD_I_CST_PIS)                   
                    Then TribCST=Checa_CST("PIS",TP_MOV_ESTOQUE,VSD_I_CST_PIS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_PIS   =BlankNum()
                                         VSD_I_APIS     =BlankNum()
                                         VSD_I_Valor_PIS=BlankNum()
                                         Campo="I_CST_COFINS"
                                    Else Campo="I_APIS"
                                EndIf
                            Else Mensagem("CST PIS inv lido, use F1 para consultar !")   
                         EndIf
                 EndIf
            Case Campo="I_APIS":
                 VSD_I_APIS=ControlValue("I_APIS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CST_COFINS"
                    Else Campo="I_BC_PIS"
                 EndIf             
            Case Campo="I_BC_PIS":
                 VSD_I_BC_PIS=ControlValue("I_BC_PIS")
                 Campo="I_Valor_PIS"                 
            Case Campo="I_Valor_PIS":
                 VSD_I_Valor_PIS=ControlValue("I_Valor_PIS")
                 Campo="I_CST_COFINS"

            Case Campo="I_CST_COFINS":
                 VSD_I_CST_COFINS=ControlValue("I_CST_COFINS")
                 If IsBlank(VSD_I_CST_COFINS)
                    Then VSD_I_CST_COFINS="99"
                 EndIf        
                 If Not IsBlank(VSD_I_CST_COFINS)                   
                    Then TribCST=Checa_CST("COFINS",TP_MOV_ESTOQUE,VSD_I_CST_COFINS)
                         If TribCST<>""
                            Then If TribCST="N"
                                    Then VSD_I_BC_COFINS   =BlankNum()
                                         VSD_I_ACOFINS     =BlankNum()
                                         VSD_I_Valor_COFINS=BlankNum()
                                         Campo="I_CFOP"
                                    Else Campo="I_ACOFINS"
                                EndIf
                            Else Mensagem("CST COFINS inv lido, use F1 para consultar !")   
                        EndIf
                 EndIf
            Case Campo="I_ACOFINS":
                 VSD_I_ACOFINS=ControlValue("I_ACOFINS")
                 If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
                    Then Campo="I_CFOP"
                    Else Campo="I_BC_COFINS"
                 EndIf             
            Case Campo="I_BC_COFINS":
                 VSD_I_BC_COFINS=ControlValue("I_BC_COFINS")
                 Campo="I_Valor_COFINS"                 
            Case Campo="I_Valor_COFINS":
                 VSD_I_Valor_COFINS=ControlValue("I_Valor_COFINS")
                 Campo="I_CFOP"

            Case Campo="I_CFOP":
                 VSD_I_CFOP=ControlValue("I_CFOP")

                 Moveto "PedidoC"
                 Moveto [CFO]
                 If Busca_Lookup("Codigo Fiscal de Operacao",VSD_I_CFOP,"CFOP "+VSD_I_CFOP+" n„o Cadastrado !")
                    Then Switch
                            Case SubStr(VSD_I_CFOP,1,1)<>SubStr([PedidoC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[PedidoC->CFO]+" !")
                            OtherWise: 
                                 If VSD_I_Tipo_Item="C"
                                    Then VSD_I_NCM="" 
                                         Campo="I_CDSERV"
                                    Else VSD_I_CDSERV =BlankNum()
                                         VSD_I_MUNSERV=BlankNum()     
                                         VSD_I_UFSERV =""
                                         Campo="I_NCM"
                                 EndIf
                          EndSwitch
                 EndIf
                 Moveto "PedidoI"
                 Echo Off
                                                               
            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else AcceptDialog
                 EndIf

            Case Campo="I_CDSERV":
                 VSD_I_CDSERV=ControlValue("I_CDSERV")
                 Campo="I_MUNSERV"
            Case Campo="I_MUNSERV":
                 VSD_I_MUNSERV=ControlValue("I_MUNSERV")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else AcceptDialog
                 EndIf

            Case Campo="I_Numero_Volumes":
                 VSD_I_Numero_Volumes=ControlValue("I_Numero_Volumes")
                 Campo="I_Peso_Liquido"
            Case Campo="I_Peso_Liquido":
                 VSD_I_Peso_Liquido=ControlValue("I_Peso_Liquido")
                 Campo="I_Peso_Embalagem"
            Case Campo="I_Peso_Embalagem":
                 VSD_I_Peso_Embalagem=ControlValue("I_Peso_Embalagem")
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"        Or
   Campo="I_Tipo_Item"          Or
   Campo="I_Codigo_Cor_Tecido"  Or
   Campo="I_Condicao_Pagamento" Or
   Campo="I_Tabela"             Or
   Campo="I_CFOP"               Or
   Campo="I_CST_Item"           Or  
   Campo="I_CST_IPI"            Or  
   Campo="I_CST_PIS"            Or  
   Campo="I_CST_COFINS"         Or
   Campo="I_CSOSN"              Or
   Campo="I_MUNSERV"                 
   Then TECLA=TECLA+"F1=Tabelas  "
   Else TECLA=TECLA+"            "
EndIf

If Not IsAssigned(LOCALIZAR_POR)
   Then Switch 
          Case SYS_CODIGO_CLIENTE="0319" Or
               SYS_CODIGO_CLIENTE="0296"  : LOCALIZAR_POR="Ref."
          Case SYS_CODIGO_CLIENTE="0046" And 
               PARAM_UTILIZACDBARRA="S"  : LOCALIZAR_POR="CodBar"
          OtherWise                      : LOCALIZAR_POR="CodItem"
        EndSwitch   
EndIf

Switch
  Case Campo="I_Seq"                     : MSGCAMPO="Sequencia"
  Case Campo="I_Quantidade_Faturada"     : MSGCAMPO="Quantidade Faturada"
  Case Campo="I_Obs_Item"                : MSGCAMPO="Observa‡„o do Item"
  Case Campo="I_Codigo_Item"             : 
       Switch
         Case LOCALIZAR_POR="CodItem": MSGCAMPO="C¢digo do Item"
         Case LOCALIZAR_POR="CodFor" : MSGCAMPO="C¢digo do Fornecedor"
         Case LOCALIZAR_POR="Ref."   : MSGCAMPO="Referˆncia"
         Case LOCALIZAR_POR="CodBar" : MSGCAMPO="C¢digo de Barra"
       EndSwitch

  Case Campo="I_Descricao_Item"         : MSGCAMPO="Descri‡„o do item"
  Case Campo="I_Tipo_Item"              : MSGCAMPO="Tipo do item"

  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"   : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tamanho"                : MSGCAMPO="Tamanho"
  Case Campo="I_Modelo_Item"            : MSGCAMPO="Sigla do modelo"
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"
  Case Campo="I_Condicao_Pagamento"     : MSGCAMPO="Codigo da condi‡Æo de pagamento"
  Case Campo="I_Composicao_Dias"        : MSGCAMPO="Composi‡Æo de dias"

  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Taxa_Desconto_Unitario" : MSGCAMPO="Taxa Desconto Unitario"
  Case Campo="I_Valor_Desconto_Unitario": MSGCAMPO="Valor Desconto Unitario"
  Case Campo="I_Preco_Total"            : MSGCAMPO="Pre‡o Total"
  Case Campo="I_Custo_Unitario"         : MSGCAMPO="Custo Unitario"
  Case Campo="I_Preco_Tabela"           : MSGCAMPO="Pre‡o da Tabela de Pre‡o"
  Case Campo="I_Comissao_Item"          : MSGCAMPO="Comiss„o do Item"

  Case Campo="I_TICMS"                  : MSGCAMPO="Tributacao ICMS: N„o tributado,Debitado,Isento,Outros,Substitui‡„o"
  Case Campo="I_CST_Item"               : MSGCAMPO="Codigo situa‡„o tributaria/ICMS"
  Case Campo="I_RBC_ICMS"               : MSGCAMPO="Aliquota redu‡Æo na base de calculo de ICMS"
  Case Campo="I_AICMS"                  : MSGCAMPO="Aliquota de ICMS"
  Case Campo="I_BC_ICMS"                : MSGCAMPO="Base de c lculo do ICMS com seus rateios proporcionais"  
  Case Campo="I_Valor_ICMS"             : MSGCAMPO="Valor do ICMS"

  Case Campo="I_ACSOSN"                 : MSGCAMPO="Aliquota de ICMS/Aproveitamento de credito SIMPLES NACIONAL"
  Case Campo="I_Valor_CSOSN"            : MSGCAMPO="Valor do ICMS/Aproveitamento de credito SIMPLES NACIONAL"

  Case Campo="I_MVA"                    : MSGCAMPO="Margem de valor agregado para base c lculo Subst.Tribut ria"
  Case Campo="I_RBC_ST"                 : MSGCAMPO="Aliquota redu‡Æo na base de calculo de c lculo Subst.Tribut ria"
  Case Campo="I_AST"                    : MSGCAMPO="Aliquota da Subst.Tribut ria"
  Case Campo="I_BC_ST"                  : MSGCAMPO="Base de c lculo da Subst.Tribut ria com seus rateios proporcionais"  
  Case Campo="I_Valor_ST"               : MSGCAMPO="Valor da Subst.Tribut ria"

  Case Campo="I_CST_IPI"                : MSGCAMPO="Codigo situa‡„o tributaria/IPI"
  Case Campo="I_AIPI"                   : MSGCAMPO="Aliquota de IPI"
  Case Campo="I_BC_IPI"                 : MSGCAMPO="Base de c lculo do IPI com seus rateios proporcionais"  
  Case Campo="I_Valor_IPI"              : MSGCAMPO="Valor do IPI"

  Case Campo="I_TISSQN"                 : MSGCAMPO="Tributa‡„o ISSQN: Debitado, N„o tributado, Substituta, Retida, Isenta"
  Case Campo="I_AISSQN"                 : MSGCAMPO="Aliquota do ISSQN"
  Case Campo="I_BC_ISSQN"               : MSGCAMPO="Base de c lculo do ISSQN com seus rateios proporcionais"  
  Case Campo="I_Valor_ISSQN"            : MSGCAMPO="Valor do ISSQN"

  Case Campo="I_CST_PIS"                : MSGCAMPO="Codigo situa‡„o tributaria/PIS"
  Case Campo="I_APIS"                   : MSGCAMPO="Aliquota do PIS"
  Case Campo="I_BC_PIS"                 : MSGCAMPO="Base de c lculo do PIS com seus rateios proporcionais"  
  Case Campo="I_Valor_PIS"              : MSGCAMPO="Valor do PIS"

  Case Campo="I_CST_COFINS"             : MSGCAMPO="Codigo situa‡„o tributaria/COFINS"
  Case Campo="I_ACOFINS"                : MSGCAMPO="Aliquota do COFINS"
  Case Campo="I_BC_COFINS"              : MSGCAMPO="Base de c lculo do COFINS com seus rateios proporcionais"  
  Case Campo="I_Valor_COFINS"           : MSGCAMPO="Valor do COFINS"

  Case Campo="I_Numero_Volumes"         : MSGCAMPO="Quantidade de volumes"
  Case Campo="I_Peso_Liquido"           : MSGCAMPO="Peso liquido"
  Case Campo="I_Peso_Embalagem"         : MSGCAMPO="Peso da embalagem"

  Case Campo="I_NCM"                    : MSGCAMPO="NCM"
  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ este Item"
  Case Campo="I_CSOSN"                  : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"

  Case Campo="I_CDSERV"                 : MSGCAMPO="C¢digo do servi‡o"
  Case Campo="I_MUNSERV"                : MSGCAMPO="C¢digo do munic¡pio onde o servi‡o foi prestado"
  OtherWise                              : MSGCAMPO=""
EndSwitch

If CHAVEI=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
    Else TECLA=TECLA+"                  "
EndIf

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
   Else TECLA=TECLA+"Alt+F=Fun‡”es  Localizar-> "+LOCALIZAR_POR 
EndIf

@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79
Message(MSGCAMPO)
Mouse Hide
RefreshDialog
Return TEMP
EndProc   ;  (Item_Dialog)
                  
;*******************************************************************************
;* Rotina para checagem MVA                                                    *
;*******************************************************************************
Proc Checa_MVA(ticms,cod)
Private a,b,cod

If ticms="S" And
   ((Search("VENDA",[PedidoC->Descricao da Destinacao])>0 And TP_MOV_ESTOQUE="S") Or
    (Search("DEVOL",[PedidoC->Descricao da Destinacao])>0 And TP_MOV_ESTOQUE="E")) 
   Then Moveto [Codigo MVA]
        If Not BUSCA_LOOKUP("Codigo MVA",[Codigo MVA],"Item "+[Codigo do Item]+", com c¢digo MVA n„o cadastrado !")
          Then Return False
        EndIf   
        [MVA         ]=REG_BUSCA_LOOKUP["MVA_1"]
        VSD_I_MVA     =[MVA         ]   
        If UF_EMPRESA=[PedidoC->UF] Or (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
           Then Return True
        EndIf   
        
        If REG_BUSCA_LOOKUP["Estados MVA_Ajustado"]="TODOS" Or
          Search([PedidoC->UF],REG_BUSCA_LOOKUP["Estados MVA_Ajustado"])>0
          Then a=1+([MVA]/100)
               b=(1-(UF_ALIQUOTA_ICMS/100))/(1-(UF_ALIQUOTA_ICMS_INTERNA/100))
               [MVA]    =Round(((a*b)-1)*100,2)
               VSD_I_MVA=[MVA         ]   
          Else 
               [MVA                      ]=BlankNum()
               [ICMS_ST_Aliquota         ]=BlankNum()
               [ICMS_ST_Aliquota Reduzida]=BlankNum()
               VSD_I_MVA           =[MVA             ]   
               VSD_I_AST           =[ICMS_ST_Aliquota]   

               If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                  Then 
                       VSD_I_TICMS         ="O"
                       VSD_I_CSOSN         =SubStr(VSD_I_CST,1,1)+"900"

                       [CSOSN             ]=SubStr(VSD_I_CSOSN,2,3)
                       [Tributacao de ICMS]=VSD_I_TICMS
                  Else 
                       VSD_I_TICMS         ="O"
                       VSD_I_CST_Item      =SubStr(VSD_I_CST_Item,1,1)+"90"
                       
                       [Tipo Tributacao   ]=VSD_I_CST_Item
                       [Tributacao de ICMS]=VSD_I_TICMS
               EndIf   
        EndIf
   Else [Codigo MVA               ]=""
        [MVA                      ]=BlankNum()   
        [ICMS_ST_Aliquota         ]=BlankNum()
        [ICMS_ST_Aliquota Reduzida]=BlankNum()

        VSD_I_MVA         =[MVA         ]
        VSD_I_AST         =[ICMS_ST_Aliquota]   
EndIf
Return True
EndProc

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro

Switch
  Case Funcao_Registro="Gravar":

       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Item            ]=VSD_I_Codigo_Item

       If SYS_CODIGO_CLIENTE="0003"
          Then [Descricao do Item ]=SubStr(VSD_I_Descricao_Item,1,30)+Spaces(30-Len(SubStr(VSD_I_Descricao_Item,1,30)))+VSD_I_Modelo_Item
          Else [Descricao do Item ]=VSD_I_Descricao_Item
       EndIf

       [Tipo Tributacao           ]=VSD_I_CST_Item

       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
       [Tamanho                   ]=VSD_I_Tamanho

       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Preco Total               ]=Round(VSD_I_Preco_Total,2)

       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela 
       [CFO                       ]=VSD_I_CFOP                
      
       [Tributacao de ICMS        ]=VSD_I_TICMS
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)              
       [MVA                       ]=VSD_I_MVA                
       [NCM                       ]=VSD_I_NCM   
       [NBM                       ]=VSD_I_CF_Item
                                                        
       [ICMS_ST_Aliquota          ]=VSD_I_AST       
       [ICMS_ST_Aliquota Reduzida ]=VSD_I_RBC_ST    
       [ICMS_ST_BC                ]=VSD_I_BC_ST
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST
       [ICMS_BC                   ]=VSD_I_BC_ICMS
       [ICMS_CredSN_Aliquota      ]=VSD_I_ACSOSN    
       [ICMS_CredSN_Valor         ]=VSD_I_Valor_CSOSN    

       [Tributacao de IPI         ]=VSD_I_TIPI
       [Aliquota Reduzida BCIPI   ]=VSD_I_RBC_IPI
       [Aliquota de IPI           ]=VSD_I_AIPI
       [Valor do IPI              ]=VSD_I_Valor_IPI
       [IPI_CST                   ]=VSD_I_CST_IPI
       [IPI_BC                    ]=VSD_I_BC_IPI
                                                      
       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [Aliquota de ISSQN         ]=VSD_I_AISSQN 
       [Codigo_Servico            ]=VSD_I_CDSERV  
       [ISSQN_BC                  ]=VSD_I_BC_ISSQN
       [ISSQN_UF                  ]=VSD_I_UFSERV   
       
       [PIS_CST                   ]=VSD_I_CST_PIS                
       [PIS_Aliquota              ]=VSD_I_APIS     
       [PIS_BC                    ]=VSD_I_BC_PIS             
       [PIS_Valor                 ]=VSD_I_Valor_PIS              
       
       [COFINS_CST                ]=VSD_I_CST_COFINS              
       [COFINS_Aliquota           ]=VSD_I_ACOFINS       
       [COFINS_BC                 ]=VSD_I_BC_COFINS         
       [COFINS_Valor              ]=VSD_I_Valor_COFINS                   
       
       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Condicao de Pagamento     ]=VSD_I_Condicao_Pagamento
       [Composicao de Dias        ]=VSD_I_Composicao_Dias
       [Codigo da Tabela          ]=VSD_I_Tabela
       [Observacao_Item           ]=VSD_I_Obs_Item
       UnLockRecord
                                                                            
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item do Pedido            ]

       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]

       If SYS_CODIGO_CLIENTE="0003"
          Then VSD_I_Descricao_Item         =Substr([Descricao do Item],1,30)
               VSD_I_Modelo_Item            =RTrim(Substr([Descricao do Item],31,7))
          Else VSD_I_Descricao_Item         =[Descricao do Item ]
       EndIf
       VSD_I_Obs_Item               =[Observacao_Item           ]
       
       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]
       VSD_I_Tamanho                =[Tamanho                   ]

       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_Quantidade_Faturada    =[Quantidade Faturada       ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Preco_Total            =Round([Preco Total         ],2)
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]

       VSD_I_Taxa_PrUni_PrTab=LTrim(Format("W8.1,S+",(((VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)/VSD_I_Preco_Tabela)*100)-100))+"%"

       VSD_I_CFOP                   =[CFO                       ]

       VSD_I_CST_Item               =[Tipo Tributacao           ]
       VSD_I_TICMS                  =[Tributacao de ICMS        ]
       VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
       VSD_I_AICMS                  =[Aliquota de ICMS          ]
       VSD_I_BC_ICMS                =[ICMS_BC                   ]
       VSD_I_Valor_ICMS             =[Valor do ICMS             ]

       VSD_I_CSOSN                  =SubStr([Tipo Tributacao],1,1)+[CSOSN]
       
       VSD_I_MVA                    =[MVA                       ]
       VSD_I_NCM                    =[NCM                       ]
       VSD_I_CF_Item                =[NBM                       ]
       
       VSD_I_RBC_ST                 =[ICMS_ST_Aliquota Reduzida ]
       VSD_I_AST                    =[ICMS_ST_Aliquota          ]
       VSD_I_BC_ST                  =[ICMS_ST_BC                ]
       VSD_I_Valor_ST               =[ICMS_ST_Valor             ]
       VSD_I_ACSOSN                 =[ICMS_CredSN_Aliquota      ]
       VSD_I_Valor_CSOSN            =[ICMS_CredSN_Valor         ]      
                      
       VSD_I_CST_IPI                =[IPI_CST                   ]
       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_RBC_IPI                =[Aliquota Reduzida BCIPI   ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]
       VSD_I_BC_IPI                 =[IPI_BC                    ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_RBC_ISSQN              =""
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_BC_ISSQN               =[ISSQN_BC                  ]
       VSD_I_CDSERV                 =[Codigo_Servico            ]
       VSD_I_UFSERV                 =[ISSQN_UF                  ]
       VSD_I_MUNSERV                =[ISSQN_Municipio           ]       
       
       VSD_I_CST_PIS                =[PIS_CST                   ]   
       VSD_I_APIS                   =[PIS_Aliquota              ]
       VSD_I_BC_PIS                 =[PIS_BC                    ]
       VSD_I_Valor_PIS              =[PIS_Valor                 ]   
                                                             
       VSD_I_CST_COFINS             =[COFINS_CST                ]    
       VSD_I_ACOFINS                =[COFINS_Aliquota           ]
       VSD_I_BC_COFINS              =[COFINS_BC                 ]
       VSD_I_Valor_COFINS           =[COFINS_Valor              ]
                                                   

       VSD_I_Numero_Volumes         =[Volumes                   ]
       VSD_I_Peso_Liquido           =[Peso Liquido              ]
       VSD_I_Peso_Embalagem         =[Peso Embalagem            ]
       VSD_I_Comissao_Item          =[Comissao do Item          ]
       VSD_I_Condicao_Pagamento     =[Condicao de Pagamento     ]
       VSD_I_Composicao_Dias        =[Composicao de Dias        ]
       VSD_I_Tabela                 =[Codigo da Tabela          ]
EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item do Pedido]
Locate [PedidoC->Numero do Pedido],SEQIT
CopyToArray RegItem
QUANT   = [Quantidade          ]
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ]=[PedidoC->Codigo da Tabela     ]
        [Condicao de Pagamento]=[PedidoC->Condicao de Pagamento]
        [Composicao de Dias   ]=[PedidoC->Composicao de Dias   ]
EndIf
Registro_Item("Ler")
EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()
Liberou_Bloqueio=False
F4_ATIVADO=False
F5_ATIVADO=False
F6_ATIVADO=False

Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","F5","F6","F7","F8","F9",-33,-147,"ClearArea","HOME","END","PGDN","PGUP"
     @ 02,0 height 21 width 80     

   Accept @ -01,43 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 42 "A45" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,57 "Referˆncia" For "I_Referencia"
   Accept @ 01,58 Width 19 "A17" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia  

   Label  @ 02,01 "Observa‡„o Item" For "I_Obs_Item"
   Accept @ 03,01 Width 65 "A100" picture "!*!" Tag "I_Obs_Item" to VSD_I_Obs_Item
   Label  @ 02,67 "TI" For "I_Tipo_Item"
   Accept @ 03,67 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 02,72 "CF" For "I_CF_Item"
   Accept @ 03,72 Width 05 "A10" picture "!*!" Tag "I_CF_Item" to VSD_I_CF_Item

   Label  @ 04,01 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,01 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 05,07 Width 20 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   Label  @ 04,28 "TM" For "I_Tamanho"
   Accept @ 05,28 Width 05 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho
   Label  @ 04,33 "Modelo" For "I_Modelo_Item"
   Accept @ 05,34 Width 10 "A7" picture "!*!" Tag "I_Modelo_Item" to VSD_I_Modelo_Item
   Label  @ 04,45 "Tabela" For "I_Tabela"
   Accept @ 05,45 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   Label  @ 04,53 "CPG" For "I_Condicao_Pagamento"
   Accept @ 05,54 Width 5 "A2" picture "#*#" Tag "I_Condicao_Pagamento" to VSD_I_Condicao_Pagamento
   Label  @ 04,58 "Comp. Dias" For "I_Composicao_Dias"
   Accept @ 05,58 Width 19 "A50" picture "!*!" Tag "I_Composicao_Dias" to VSD_I_Composicao_Dias

   Label  @ 06,01 "Quantidade" For "I_Quantidade"
   Accept @ 07,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 06,15 "UN" For "I_UN_Item"
   Accept @ 07,15 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 06,21 "Pr.Unitario" For "I_Preco_Unitario"
   Accept @ 07,21 Width 12 "N" picture "#*#.[####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 06,33 "%" For "I_Taxa_Desconto_Unitario"
   Accept @ 07,34 Width 10 "N" picture "#*#.[####]" Tag "I_Taxa_Desconto_Unitario" to VSD_I_Taxa_Desconto_Unitario
   Label  @ 06,35 "/Vr.Desconto" For "I_Valor_Desconto_Unitario"
   Accept @ 07,45 Width 12 "N" picture "#*#.[#####]" Tag "I_Valor_Desconto_Unitario" to VSD_I_Valor_Desconto_Unitario
   Label  @ 06,57 "Pr.Total" For "I_Preco_Total"
   Accept @ 07,58 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ 08,01 "Qtd.Faturada" For "I_Quantidade_Faturada"
   Accept @ 09,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade_Faturada" to VSD_I_Quantidade_Faturada
   Label  @ 08,21 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 09,21 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   
   Label  @ 08,33 "PrUni/Tab" For "I_Taxa_PrUni_PrTab"
   Accept @ 09,34 Width 10 "A7" picture "!*!" Tag "I_Taxa_PrUni_PrTab" to VSD_I_Taxa_PrUni_PrTab
   Label  @ 08,44 "% Comiss„o" For "I_Comissao_Item"
   Accept @ 09,45 Width 10 "N" picture "#*#.[###]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   @ 10,00 ?? "Imposto CST    %Red    Aliq.  BC        Valor"
                                 
   Label  @ 11,00 "  ICMS" For "I_CST_Item"
   Accept @ 11,07 Width 07 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item   
   Accept @ 11,14 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 11,22 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 11,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ICMS" to VSD_I_BC_ICMS     
   Accept @ 11,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 12,00 " CSOSN" For "I_CSOSN"
   Accept @ 12,07 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 12, 14, 12, 21
   Accept @ 12,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 12, 29, 12, 40
   Accept @ 12,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

   Label  @ 13,00 "MVA/ST" For "I_AST"
   Accept @ 13,07 Width 08 "N" picture "#*#.[##]" Tag "I_MVA" to VSD_I_MVA
   Accept @ 13,14 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ST" to VSD_I_RBC_ST
   Accept @ 13,22 Width 08 "N" picture "#*#.[##]" Tag "I_AST" to VSD_I_AST     
   Accept @ 13,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ST" to VSD_I_BC_ST  
   Accept @ 13,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ST" to VSD_I_Valor_ST

   Label  @ 14,00 "   IPI" For "I_CST_IPI"
   Accept @ 14,07 Width 07 "A2" picture "!*!" Tag "I_CST_IPI" to VSD_I_CST_IPI  
   Accept @ 14,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 14,22 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 14,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_IPI" to VSD_I_BC_IPI  
   Accept @ 14,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 15,00 " ISSQN" For "I_TISSQN"
   Accept @ 15,07 Width 07 "A1" picture "D,N,I,S,R" Tag "I_TISSQN" to VSD_I_TISSQN 
   Accept @ 15,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_ISSQN" to VSD_I_RBC_ISSQN
   Accept @ 15,22 Width 08 "N" picture "#*#.[##]" Tag "I_AISSQN" to VSD_I_AISSQN
   Accept @ 15,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_ISSQN" to VSD_I_BC_ISSQN  
   Accept @ 15,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_ISSQN" to VSD_I_Valor_ISSQN

   Label  @ 16,00 "   PIS" For "I_CST_PIS"    
   Accept @ 16,07 Width 07 "A2" picture "!*!" Tag "I_CST_PIS" to VSD_I_CST_PIS  
   Accept @ 16,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS" to VSD_I_RBC_PIS
   Accept @ 16,22 Width 08 "N" picture "#*#.[##]" Tag "I_APIS" to VSD_I_APIS
   Accept @ 16,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_PIS" to VSD_I_BC_PIS  
   Accept @ 16,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_PIS" to VSD_I_Valor_PIS

   Label  @ 17,00 "COFINS" For "I_CST_COFINS"   
   Accept @ 17,07 Width 07 "A2" picture "!*!" Tag "I_CST_COFINS" to VSD_I_CST_COFINS 
   Accept @ 17,13 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS" to VSD_I_RBC_COFINS
   Accept @ 17,22 Width 08 "N" picture "#*#.[##]" Tag "I_ACOFINS" to VSD_I_ACOFINS
   Accept @ 17,29 Width 11 "$" picture "#*#.[##]" Tag "I_BC_COFINS" to VSD_I_BC_COFINS  
   Accept @ 17,39 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

   Label  @ 10,52 "CFOP" For "I_CFOP"
   Accept @ 11,52 Width 07 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 10,60 "NCM" For "I_NCM"
   Accept @ 11,60 Width 12 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM

   Label  @ 13,51 "Servi‡o" For "I_CDSERV"
   Accept @ 14,52 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 13,62 "Munic¡po" For "I_MUNSERV"
   Accept @ 14,62 Width 10 "N" picture "#*#" Tag "I_MUNSERV" to VSD_I_MUNSERV
   Label  @ 13,72 "UF" For "I_UFSERV"
   Accept @ 14,72 Width 5  "A2" picture "!!" Tag "I_UFSERV" to VSD_I_UFSERV

   Label  @ 15,51 "Qtde/Volumes" For "I_Numero_Volumes"
   Accept @ 15,65 Width 12 "N" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 16,51 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 16,65 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 17,51 "Peso Embal.." For "I_Peso_Embalagem"
   Accept @ 17,65 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

Enddialog
Mouse Show
If RetVal
   Then Finaliza_Registro(True)
   Else Finaliza_Registro(False)
EndIf
EndProc  ; (DigitaI)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI<>1
           Then CopyFromArray RegItem
                UnLockRecord
        EndIf
        If CHAVEI=1 Or CHAVEI=8 Then Exclusao_I() EndIf
        CHAVEI=9
EndIf
EndProc   ; (Finaliza_Registro)

;*******************************************************************************
;* Rotina para Checar Comissao/Descto                                          *
;*******************************************************************************
Proc Checa_Comissao()
Private Tx_Comissao_Item, Tx_Descto_Item, Tx_Encontrada, ii, comisok, CODIGO_TAB

If IsBlank(VSD_I_Preco_Tabela) And Not IsBlank([PedidoC->Codigo da Tabela])
   Then Mensagem("Tabela de Pre‡o n„o Encontrada, Verificar !")
        Return False
EndIf

CODIGO_TAB  =VSD_I_Tabela
CODIGO_MARCA=[Codigo da Marca]
Moveto [Lookup_DesctoComis_Marca]
Ativa_Lookup()
Tx_Encontrada=False
For ii From 1 to 4
  Moveto [Codigo da Empresa]
  Locate [PedidoC->Codigo da Empresa], CODIGO_TAB,
         CODIGO_MARCA, VSD_I_Composicao_Dias
  If RetVal
     Then Tx_Encontrada=True
          QuitLoop
     Else Switch
            case ii=1 Or ii=3:
              CODIGO_MARCA="000"
            case ii=2:
              CODIGO_TAB  ="00000"
              CODIGO_MARCA=[Codigo da Marca]
          EndSwitch
  EndIf
EndFor

;If NumVal(StrVal(VSD_I_Preco_Unitario))>=NumVal(StrVal(VSD_I_Preco_Tabela))
;   Then Tx_Descto_Item=0
;   Else Tx_Descto_Item=(VSD_I_Preco_Unitario*100)/VSD_I_Preco_Tabela
;        Tx_Descto_Item=Round(100-Tx_Descto_Item,2)
;EndIf
;
;VSD_I_Taxa_Desconto_Unitario =Tx_Descto_Item
;VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Tabela*VSD_I_Taxa_Desconto_Unitario)/100,2)

Tx_Comissao_Item=BlankNum()
If Tx_Encontrada
   Then Tx_Encontrada=False
        While [Codigo da Empresa      ]=[PedidoC->Codigo da Empresa] And
              [Codigo da Tabela       ]=CODIGO_TAB   And
              [Codigo da Marca        ]=CODIGO_MARCA And
              [Composicao de Dias     ]=VSD_I_Composicao_Dias
          If [Taxa de Desconto]<=VSD_I_Taxa_Desconto_Unitario
             Then If ITEM_PROMOCIONAL="S"
                     Then Tx_Comissao_Item=[Taxa de Comissao Promocao]
                     Else Tx_Comissao_Item=[Taxa de Comissao Normal  ]
                  EndIf
                  Tx_Encontrada=True
             Else QuitLoop
          EndIf

          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
        VSD_I_Comissao_Item=Tx_Comissao_Item
EndIf

comisok=true

If IsBlank(Tx_Comissao_Item) Or Not Tx_Encontrada
   Then Mensagem("% Comiss„o na Tabela de Descontos/Comiss„o/Marca n„o encontrada,// Verificar Ok !")
        comisok=false
EndIf
Liberou_Bloqueio=False
If Tx_Comissao_Item=0 And Tx_Encontrada
   Then MSG="% Desconto concedido no Item fora da faixa !// //"
        MSG=MSG+"Conforme a Tabela de Descontos/Comiss„o/Marca,// Verificar Ok !"
        Libera_Bloqueio(MSG)
        If Ok<>"S"
           Then comisok=false
           Else MSG="Pedido: "+PEDIDO+"/"+StrVal(SEQIT)+", TabPr/CPg: "
                MSG=MSG+VSD_I_Tabela+"/"+VSD_I_Condicao_Pagamento
                Grava_Logt("#","AltPreco",MSG)
                Liberou_Bloqueio=True
        EndIf
EndIf

KeyPress "ESC"
Echo Off

If Sys_Codigo_Cliente="0001" And comisOk and VSD_I_Tamanho="NF"
   Then VSD_I_Comissao_Item=VSD_I_Comissao_Item-1
        If VSD_I_Comissao_Item<0
           Then VSD_I_Comissao_Item=0
        EndIf
EndIf

Return comisok
EndProc

;****************************************+**************************************
;* Rotina para Setar Vari veis de Impostos                                     *
;*******************************************************************************
Proc CALCULA_IMPOSTO()

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
VRBCINSS       =0
VRINSS         =0
VRIR           =0
VRNF           =0

MSG_AUTOMATICA="" 

Moveto TabelaRefC               
CopyToArray REG_TABELAREFC ; guarda dados registro mestre

;--- Rateio Frete, Seguro, Desconto, Despesas ----------------------------------
Frete_Valor      =0
Seguro_Valor     =0
OutDesp_Valor    =0
Descto_Valor     =0

For wi From 1 to DynArraySize(It_prtotal)

  If It_tpitem[wi]="C" ;servi‡o
     Then OutrosRateioOk=False    ;nÆo rateia frete e outros
          PORC_IT_MERC=0
     Else OutrosRateioOk=True
          PORC_IT_MERC=(It_prtotal[wi]/REG_TABELAREFC["Valor Mercadoria"])*100 
          If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
             Then OutrosRateioOk=False
          EndIf
  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]

          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

     Else It_txdescto[wi]=BlankNum()
          It_descto[wi]  =BlankNum()
          It_frete[wi]   =BlankNum()
          It_seguro[wi]  =BlankNum()
          It_outdesp[wi] =BlankNum()
  EndIf

EndFor           
    
;--- Calcular diferen‡a totalizadores ------------------------------------------
DIF_Descto_Valor       =NDecimal(REG_TABELAREFC["Valor Desconto"           ]-Descto_Valor ,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_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
              OutrosRateioOk=False    ;nÆo rateia frete e outros
            OtherWise              :  ;Diferente de servi‡o
              OutrosRateioOk=True     ;rateia frete e outros 
              If TP_MOV_ESTOQUE="S" And It_cfop[wi]="5902" ;saida industrializa‡Æo
                 Then OutrosRateioOk=False
              EndIf
          EndSwitch

          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   

                  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
        
          EndIf
          If DIF_Descto_Valor =0 And
             DIF_Frete_Valor  =0 And
             DIF_Seguro_Valor =0 And
             DIF_OutDesp_Valor=0
             Then QuitLoop
          EndIf
                                              
        EndFor
EndIf                     
          
;--- Calculando Impostos -------------------------------------------------------
For wi From 1 to DynArraySize(It_prtotal)

  Switch
    Case CALCULO_NF_AUTOMATICO="A":
      
      ;--- Calculando IPI ----------------------------------------------------------
      If It_aliq_ipi[wi]>0
         Then It_bc_ipi[wi]=It_prtotal[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]
            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]
            OtherWise:
                 VL_BC_ICMS=It_prtotal[wi]-It_descto[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]
            OtherWise:
                 VL_BC_ICMS=It_prtotal[wi]-It_descto[wi]
          EndSwitch
      EndSwitch
      VL_RED_BC =NDecimal((VL_BC_ICMS*It_red_icms[wi])/100,2)
      VL_BC_ICMS=VL_BC_ICMS-VL_RED_BC                   
      VL_BC_ICMS=VL_BC_ICMS+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]          
      EndIf   
    
      ;--- Calculando Credito ICMS Simples Nacional ------------------------
      If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
         SubStr(Directory(),1,1)<>"X"                              And
         (It_csosn_icms[wi]="101" Or It_csosn_icms[wi]="201")
         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_bc_icms[wi]    =BlankNum()
              It_vr_icms[wi]    =BlankNum()
      EndIf
    
      ;--- Calculando Substituicao Tributaria --------------------------------------
      If It_aliq_st[wi]>0
         Then
              VL_BC_ICMS_ST=VL_BC_ICMS+VL_RED_BC
              If REG_TABELAREFC["Consumidor Final"]<>"S" 
                 Then VL_BC_ICMS_ST=VL_BC_ICMS_ST+It_vr_ipi[wi] 
              EndIf   
        
              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)
              Switch
                Case It_aliq_icms[wi]>0:
                     VL_ICMS_ST=VL_ICMS_ST-It_vr_icms[wi]
                OtherWise             :
                     VL_ICMS_ST=VL_ICMS_ST-Round((VL_BC_ICMS*UF_ALIQUOTA_ICMS)/100,2)
              EndSwitch
        
              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 ISSQN --------------------------------------------------------
      If It_aliq_issqn[wi]>0
         Then It_bc_issqn[wi]=It_prtotal[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
    
      ;--- Calculando PIS ----------------------------------------------------------
      If It_aliq_pis[wi]>0
         Then It_bc_pis[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              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
         Then It_bc_cofins[wi]=(It_prtotal[wi]-It_descto[wi])+It_frete[wi]+It_seguro[wi]+It_outdesp[wi]
              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

  ;--- Somando Impostos --------------------------------------------------------
  VRBCIPI        =VRBCIPI      +It_bc_ipi[wi]
  VRIPI          =VRIPI        +It_vr_ipi[wi]
  VRBCICMS       =VRBCICMS     +It_bc_icms[wi]
  VRICMS         =VRICMS       +It_vr_icms[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]
                                                                          
EndFor

EndProc ;(IMPOSTO)

;*******************************************************************************
;*** Calcula Impostos
;*******************************************************************************
Proc Carrega_array_Itens()
Private CAMPOANT, VRBCICMS_CREDSN, nitens

TabelaRefC="Pedidoc"  TabelaRefI="Pedidoi"

Aguarde("Somando itens")

;-------- Variaveis para calculo de impostos por item --------------------------
Release Vars It_tpitem, It_prtotal, It_cfop,
             It_txdescto, It_descto, It_frete, It_seguro, It_outdesp,
             It_cst_icms, It_csosn_icms, It_trib_icms, It_red_icms, It_aliq_icms, It_bc_icms, It_vr_icms,
             It_aliq_icmscred, It_vr_icmscred,
             It_mva, It_red_st, It_aliq_st, It_vc_st, It_vr_st,
             It_cst_ipi, It_trib_ipi, It_aliq_ipi, It_bc_ipi, It_vr_ipi,
             It_trib_issqn, It_aliq_issqn, It_bc_issqn, It_vr_issqn,
             It_cst_pis, It_aliq_pis, It_bc_pis, It_vr_pis,
             It_cst_cofins, It_aliq_cofins, It_bc_cofins, It_vr_cofins 

DynArray It_tpitem[]
DynArray It_prtotal[]
DynArray It_cfop[]

DynArray It_txdescto[]
DynArray It_descto[]
DynArray It_frete[]
DynArray It_seguro[]
DynArray It_outdesp[]

DynArray It_cst_icms[]
DynArray It_trib_icms[]
DynArray It_red_icms[]
DynArray It_aliq_icms[]
DynArray It_bc_icms[]
DynArray It_vr_icms[]

DynArray It_csosn_icms[]
DynArray It_aliq_icmscred[]
DynArray It_vr_icmscred[]

DynArray It_mva[]
DynArray It_red_st[]
DynArray It_aliq_st[]
DynArray It_bc_st[]
DynArray It_vr_st[]

DynArray It_cst_ipi[]
DynArray It_trib_ipi[]
DynArray It_aliq_ipi[]
DynArray It_bc_ipi[]
DynArray It_vr_ipi[]

DynArray It_trib_issqn[]
DynArray It_aliq_issqn[]
DynArray It_bc_issqn[]
DynArray It_vr_issqn[]

DynArray It_cst_pis[]
DynArray It_aliq_pis[]
DynArray It_bc_pis[]
DynArray It_vr_pis[]

DynArray It_cst_cofins[]
DynArray It_aliq_cofins[]
DynArray It_bc_cofins[]
DynArray It_vr_cofins[]

;-------- Variaveis para calculo da nota ---------------------------------------

VRMERC          =0
VRSERV          =0
VRII            =0
VRBC_COMIS      =0
VRBCICMS_CREDSN =0

Moveto TabelaRefI
nitens=0
Scan

  If [Tipo do Item]<>"C"
     Then VRMERC=VRMERC+[Preco Total]
     Else VRSERV=VRSERV+[Preco Total]
  EndIf

  If PARAM_CALC_COMIS_ITEM="S"
     Then VRBC_COMIS=VRBC_COMIS+Round((([Preco Total]*[Comissao do Item])/100),2)
  EndIf

;;If SubStr([Tipo Tributacao],1,1)="1"
;;   Then VRII=VRII+[II_Valor Imposto]
;;EndIf

  ;-------- Variaveis para calculo imposto do item -------------------------------
  nitens=nitens+1
  It_tpitem[nitens]        =[Tipo do Item            ] 
  It_prtotal[nitens]       =[Preco Total             ] 
  It_cfop[nitens]          =[CFO                     ] 

  It_txdescto[nitens]      =BlankNum()  
  It_descto[nitens]        =BlankNum()  
  It_frete[nitens]         =BlankNum()
  It_seguro[nitens]        =BlankNum()  
  It_outdesp[nitens]       =BlankNum()  

  It_trib_icms[nitens]     =[Tributacao de ICMS      ]
  It_cst_icms[nitens]      =[Tipo Tributacao         ]
  It_red_icms[nitens]      =[Aliquota Reduzida BCICMS]
  It_aliq_icms[nitens]     =[Aliquota de ICMS        ]
  It_bc_icms[nitens]       =[ICMS_BC                 ]
  It_vr_icms[nitens]       =[Valor do ICMS           ]

  It_csosn_icms[nitens]    =[CSOSN                   ]
  It_aliq_icmscred[nitens] =[ICMS_CredSN_Aliquota    ]
  It_vr_icmscred[nitens]   =[ICMS_CredSN_Valor       ]

  It_mva[nitens]           =[MVA                     ]
  It_red_st[nitens]        =[ICMS_ST_Aliquota Reduzida]
  It_aliq_st[nitens]       =[ICMS_ST_Aliquota        ]
  It_bc_st[nitens]         =[ICMS_ST_BC              ]
  It_vr_st[nitens]         =[ICMS_ST_Valor           ]

  It_trib_ipi[nitens]      =[Tributacao de IPI       ]
  It_cst_ipi[nitens]       =[IPI_CST                 ]
  It_aliq_ipi[nitens]      =[Aliquota de IPI         ]
  It_bc_ipi[nitens]        =[IPI_BC                  ]
  It_vr_ipi[nitens]        =[Valor do IPI            ]

  It_trib_ISSQN[nitens]    =[Tributacao de ISSQN     ]
  It_aliq_ISSQN[nitens]    =[Aliquota de ISSQN       ]
  It_bc_ISSQN[nitens]      =[ISSQN_BC                ]
  It_vr_ISSQN[nitens]      =[Valor do ISSQN          ]

  It_cst_pis[nitens]       =[PIS_CST                 ]
  It_aliq_pis[nitens]      =[PIS_Aliquota            ]
  It_bc_pis[nitens]        =[PIS_BC                  ]
  It_vr_pis[nitens]        =[PIS_Valor               ]

  It_cst_cofins[nitens]    =[COFINS_CST              ]
  It_aliq_cofins[nitens]   =[COFINS_Aliquota         ]
  It_bc_cofins[nitens]     =[COFINS_BC               ]
  It_vr_cofins[nitens]     =[COFINS_Valor            ]


  If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
     SubStr(Directory(),1,1)<>"X"                              And
     (It_csosn_icms[nitens]="101" Or It_csosn_icms[nitens]="201")
     Then VRBCICMS_CREDSN  =VRBCICMS_CREDSN+It_prtotal[nitens]
  EndIf   

  If (CALCULO_NF_AUTOMATICO="A" or CALCULO_NF_AUTOMATICO="N")
     Then
          It_bc_icms[nitens]       =BlankNum()
          It_vr_icms[nitens]       =BlankNum()

          It_bc_st[nitens]         =BlankNum()
          It_vr_st[nitens]         =BlankNum()

          It_vr_icmscred[nitens]   =BlankNum()

          It_bc_ipi[nitens]        =BlankNum()
          It_vr_ipi[nitens]        =BlankNum()

          It_bc_ISSQN[nitens]      =BlankNum()
          It_vr_ISSQN[nitens]      =BlankNum()

          It_bc_pis[nitens]        =BlankNum()
          It_vr_pis[nitens]        =BlankNum()

          It_bc_cofins[nitens]     =BlankNum()
          It_vr_cofins[nitens]     =BlankNum()

  EndIf   

EndScan
LimpAguarde()

Moveto "PedidoC"
CHAVEF=0

;*** Simples Nacional ***
If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   SubStr(Directory(),1,1)<>"X"         
   Then Moveto [Codigo]
        If Busca_Lookup("Codigo",[PedidoC->Codigo],"")
           Then Switch 
                ;  Case (REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NACIONAL" Or
                ;        REG_BUSCA_LOOKUP["Regime_Tributario"] = "SIMPLES NAC. ESRB") And
                ;        ALIQUOTA_CREDITO_ICMS_NOSN>0:
                ;        CHAVEF=9
                ;
                ;        MSG=    Completa([PedidoC->Nome Fantasia Empresa ]+"="+TPEMPR,70," ")+"//" 
                ;        MSG=MSG+Completa([PedidoC->Nome Fantasia EmitDest]+"="+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                ;        MSG=MSG+"Destinat rio sem direito a crˆdito de ICMS !"+"// //"
                ;        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                ;        MSG=MSG+Completa("- Exite(m) iten(s) Isento/Outros de ICMS;",70," ")+"//"
                ;        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo com cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                ;        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                ;        Mensagem(MSG)
                                                  
                  Case SYS_CODIGO_CLIENTE<>"0219" And
                       (REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NACIONAL" And
                        REG_BUSCA_LOOKUP["Regime_Tributario"]<>"SIMPLES NAC. ESRB") And
                        VRBCICMS_CREDSN>0 And   
                        ALIQUOTA_CREDITO_ICMS_NOSN<=0:
                        CHAVEF=9
                        
                        MSG=    Completa([PedidoC->Nome Fantasia Empresa ]+" = "+TPEMPR,70," ")+"//" 
                        MSG=MSG+Completa([PedidoC->Nome Fantasia EmitDest]+" = "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"// //" 
                        MSG=MSG+"Destinat rio com direito a crˆdito de ICMS !"+"// //"
                        MSG=MSG+Completa("Verificar/Corrigir:",70," ")+"// //"
                        MSG=MSG+Completa("- Exite(m) iten(s) Isento/Outros de ICMS;",70," ")+"//"
                        MSG=MSG+Completa("- Voce esta usando uma destina‡Æo sem cr‚dito de icms: "+Format("W6.2,EIC",ALIQUOTA_CREDITO_ICMS_NOSN)+"%",70," ")+"//"
                        MSG=MSG+Completa("- Se regime tribut rio do destinat rio ‚ realmente "+REG_BUSCA_LOOKUP["Regime_Tributario"],70," ")+"//"
                        Mensagem(MSG)
                                                  
                EndSwitch           
        EndIf   
EndIf

EndProc ;(Carrega_array_Itens)

;*******************************************************************************
;* Rotina para Agrupar os Itens                                                *
;*******************************************************************************
Proc AGRUPA()
For I From 1 to 900
    CODIGO[I]=""
    QUANTI[I]=BlankNum()
    PRECOU[I]=BlankNum()
EndFor

Moveto "Pedidoi"
Scan
    Moveto [Codigo do Item]
    For I From 1 to 900
        If CODIGO[I]=[Codigo do Item]
           Then QUANTI[I]=QUANTI[I]+[Quantidade]
                QuitLoop
           Else If CODIGO[I]=""
                   Then CODIGO[I]=[Codigo do Item]
                        QUANTI[I]=[Quantidade]
                        PRECOU[I]=[Preco Unitario]
                        QuitLoop
                Endif
        Endif
    Endfor
EndScan

While RecordStatus("New")=False
  Del
EndWhile

For I From 1 to 900
    If IsBlank(CODIGO[I])
       Then QuitLoop
    Endif
    Moveto [Item do Pedido]
    End
    Down
    [Item do Pedido]=I
    [Codigo do Item]=CODIGO[I]
    [Quantidade]    =QUANTI[I]
    [Preco Unitario]=PRECOU[I]
    [Preco Total]   =Round([Preco Unitario]*[Quantidade],2)

    If [Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10"
       Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
               Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
               Else [Tributacao de Icms]=TRIB_ICMS
                    If Not IsBlank([Tipo Tributacao])
                      Then [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
                    EndIf
            EndIf
            If OPCAO_RED_BCICMS="1"
               Then [Aliquota Reduzida BCICMS]=BlankNum()
            EndIf
    EndIf

   ;* Seta Variaveis PegaCFOP
    Checa_CFOP      ="S"
    CFO_C           =[PedidoC->CFO      ]
    CFOP_TPITEM     =[Tipo do Item      ]
    CFOP_TRIBICMS   =[Tributacao de ICMS]
    CFOP_TPTRIB     =[Tipo Tributacao   ]
    CFOP_EMPRESA    =[PedidoC->Codigo da Empresa ]
    CFOP_ATIVEMPRESA=ATIVEMPR
    Play "\\Sistemas\\Exporta\\PegaCFOP"
    [CFO            ]=CFO_C
    [Tipo Tributacao]=CFOP_TPTRIB
     
    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
    UnLockRecord

Endfor
EndProc

;*******************************************************************************
;* Rotina para Agrupar os Itens                                                *
;*******************************************************************************
Proc AGRUPAB()
Private CODNOVO
For I From 1 to 900
    CODIGO[I]=""
    QUANTI[I]=BlankNum()
    PRECOU[I]=BlankNum()
EndFor
;Alterado Karina
If SYS_CLIENTE_CONFEC="0185" Or
   SYS_CLIENTE_CONFEC="0195" Or
   SYS_CLIENTE_CONFEC="0196" Or
   SYS_CODIGO_CLIENTE="0003" Or
   SYS_CLIENTE_CONFEC="0222" Or
   SYS_CLIENTE_CONFEC="0200" Or
   SYS_CLIENTE_CONFEC="0204" Or
   SYS_CLIENTE_CONFEC="0079"
   Then
        Echo Normal
        Echo Off
        ShowPopup " Fun‡”es " CENTERED
          "~N~ormal     " : " Codigo do Item Normal           " : "Normal",
          "Diferente ~1~" : " Codigo do Item Diferenciador [1]" : "Difer1",
          "Diferente ~2~" : " Codigo do Item Diferenciador [2]" : "Difer2",
          "~C~ancelar   " : " Cancelar a Opera‡„o  "            : "CANCELAR"
        EndMenu
        To MenuVar
        echo off
        If MenuVar="CANCELAR" or MenuVar="Esc"
           Then Return
        EndIf
EndIf

Moveto "Pedidoi"
Scan
    Switch; Alterado Karina
      Case SYS_CLIENTE_CONFEC="0185" Or
           SYS_CLIENTE_CONFEC="0195" Or
           SYS_CLIENTE_CONFEC="0196":
        Switch
          Case MenuVar="Normal" : CODNOVO=SubStr([Codigo do Item],1,7)+"000"
          Case MenuVar="Difer1" : CODNOVO=SubStr([Codigo do Item],1,6)+"1000"
          Case MenuVar="Difer2" : CODNOVO=SubStr([Codigo do Item],1,6)+"2000"
        EndSwitch
      Case SYS_CODIGO_CLIENTE="0003" Or
           SYS_CLIENTE_CONFEC="0222" Or
           SYS_CLIENTE_CONFEC="0079":
        Switch
          Case MenuVar="Normal" : CODNOVO=SubStr([Codigo do Item],1,6)+"0000"
          Case MenuVar="Difer1" : CODNOVO=SubStr([Codigo do Item],1,5)+"10000"
          Case MenuVar="Difer2" : CODNOVO=SubStr([Codigo do Item],1,5)+"20000"
        EndSwitch
      Case SYS_CLIENTE_CONFEC="0200" Or
           SYS_CLIENTE_CONFEC="0204":
        Switch
          Case MenuVar="Normal" : CODNOVO=SubStr([Codigo do Item],1,8)+"00"
          Case MenuVar="Difer1" : CODNOVO=SubStr([Codigo do Item],1,7)+"100"
          Case MenuVar="Difer2" : CODNOVO=SubStr([Codigo do Item],1,7)+"200"
        EndSwitch
    EndSwitch
    Moveto [Codigo do Item]
    For I From 1 to 900
        If CODIGO[I]=CODNOVO
           Then QUANTI[I]=QUANTI[I]+[Quantidade]
                QuitLoop
           Else If CODIGO[I]=""
                   Then CODIGO[I]=CODNOVO
                        QUANTI[I]=[Quantidade]
                        PRECOU[I]=[Preco Unitario]
                        QuitLoop
                Endif
        Endif
    Endfor
EndScan

While RecordStatus("New")=False
  Del
EndWhile

For I From 1 to 900
    If IsBlank(CODIGO[I])
       Then QuitLoop
    Endif
    Moveto [Item do Pedido]
    End
    Down
    [Item do Pedido]=I
    [Codigo do Item]=CODIGO[I]
    [Quantidade]    =QUANTI[I]
    [Preco Unitario]=PRECOU[I]
    [Preco Total]   =Round([Preco Unitario]*[Quantidade],2)

    If [Tributacao de ICMS]="D" Or SubStr([Tipo Tributacao],2,2)="10"
       Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
               Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
               Else [Tributacao de Icms]=TRIB_ICMS
                    If Not IsBlank([Tipo Tributacao])
                      Then [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
                    EndIf
            EndIf
            If OPCAO_RED_BCICMS="1"
               Then [Aliquota Reduzida BCICMS]=BlankNum()
            EndIf
    EndIf

   ;* Seta Variaveis PegaCFOP
    Checa_CFOP      ="S"
    CFO_C           =[PedidoC->CFO      ]
    CFOP_TPITEM     =[Tipo do Item      ]
    CFOP_TRIBICMS   =[Tributacao de ICMS]
    CFOP_TPTRIB     =[Tipo Tributacao   ]
    CFOP_EMPRESA    =[PedidoC->Codigo da Empresa ]
    CFOP_ATIVEMPRESA=ATIVEMPR
    Play "\\Sistemas\\Exporta\\PegaCFOP"
    [CFO            ]=CFO_C
    [Tipo Tributacao]=CFOP_TPTRIB
     
    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
    unlockrecord

Endfor
EndProc

;*******************************************************************************
;* Rotina para Organizar Itens                                                 *
;*******************************************************************************
Proc Organiza_Itens()
Private Cont, Nr

If [PedidoC->Situacao do Pedido]="FATURADO"
   Then Mensagem("Pedido ["+[PedidoC->Situacao do Pedido]+"] ! // //Organiza‡„o n„o disponivel !")
        Return
EndIf

Cont=0
Scan
  If [Quantidade Faturada]>0
     Then Cont=Cont+1
  EndIf
EndScan

If Cont>0
   Then Mensagem("Pedido com "+StrVal(Cont)+" itens j  FATURADOS ! // //Organiza‡„o n„o disponivel !")
        Return
EndIf

Aguarde("Organizando")

Moveto "PedidoC"
Do_It!
ClearAll

{Ask} {PedidoI} Check
Moveto [Numero do Pedido] TypeIn "~PEDIDO"
Do_It!
ClearAll

If Not IsBlank("Answer")
   Then If ORGANIZA_DESCIT
           Then Sort "Answer" On "Numero do Pedido","Descricao do Item","Item do Pedido"
                ClearAll
        Else If ORGANIZA_NUMIT
                Then Sort "Answer" On "Numero do Pedido","Codigo do Item","Item do Pedido"
                     ClearAll        
             EndIf
        EndIf     
    Else Mensagem("Erro durante a organiza‡„o, tente novamente !")
EndIf   

If Not IsBlank("Answer")
   Then
        View NoWindow "Answer"
        CoEdit NoWindow "PedidoI"
        Moveto [Numero do Pedido]
        Locate PEDIDO
        If RetVal
           Then While [Numero do Pedido]=PEDIDO
                  Del
                  If EOT() Then QuitLoop EndIf
                EndWhile

                NR = NRecords("Answer")
                Moveto "Answer"
                Scan

                  Barra(NR, RecNo())
                  Aguarde("Aguarde, Organizando "+BARRA_STRING)

                  [Item do Pedido]=RecNo()
                  CopyToArray REGPED

                  Moveto "PedidoI"
                  End
                  Down
                  CopyFromArray REGPED
                  UnLockRecord

                  Moveto "Answer"
                EndScan
                Do_It!
                ClearAll

                Delete "Answer"

                Mensagem("Fim organiza‡„o !")
           Else Mensagem("Erro durante a organiza‡„o, tente novamente !")
        EndIf
EndIf
         
LimpAguarde()

View NoWindow "\\Sistemas\\Cadastro\\Destinat"
View NoWindow "\\Sistemas\\Cadastro\\End_Cob"
View NoWindow "P_Pedido"
Coedit NoWindow "PedidoC"
PickForm "1"

Moveto [Numero do Pedido]
Locate PEDIDO

Moveto "PedidoI"

EndProc
        
;*******************************************************************************
;* Rotina para Digitacao do Pedido                                             *
;*******************************************************************************
Proc DigitaF()

Carrega_array_Itens()
CALC_PEDIDO()

If CHAVEF=9
   Then Return   
EndIf

Moveto [Valor Despesas Acessorias]

While True

      MSGCAMPO=Field()
      
      If Field()="Tipo de Pagamento"         Then MSGCAMPO="Tipo de Pagamento=> V=A Vista  P=A Prazo  O=Outros" EndIf
      If Field()="Composicao de Dias"
         Then MSGCAMPO=MSGCAMPO+", Exemplo: 15/30/45/60 "
      EndIf

      TECLA=" Esc=Retornar  "
      If Field()="Forma de Pagamento"
         Then TECLA=TECLA+"F1=Tabelas  "
         Else TECLA=TECLA+"            "
      EndIf
      TECLA=TECLA+"F4=Calc_Venctos  F8=Venctos  PgUp/PgDn  "

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "ESC","ENTER","PGDN","F8","PGUP","F1","F4","F","D";,-33

      ;If RetVal=-33
      ;   Then Echo Normal
      ;        Echo Off
      ;        ShowPopup " Fun‡”es " CENTERED
      ;          "F4  ~C~alcular Vencimentos  " : " Calcula Vencimentos             " : "F4",
      ;          "F8  ~V~encimentos           " : " Vencimentos                     " : "F8",
      ;          "~C~ancelar                  " : " Cancelar a Opera‡„o             " : "CANCELAR"
      ;        EndMenu
      ;        To MenuVar
      ;        echo off
      ;        If MenuVar="CANCELAR" or MenuVar="Esc"
      ;           Then Loop
      ;        EndIf
      ;  
      ;        RetVal=MenuVar
      ;EndIf

      Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4":
           CAMPOANT=Field()
           If PARAM_CPGTO_ITEM="S"
              Then Calc_Venctos_Itens()
              Else Calc_Venctos()
           EndIf
           If PARAM_CPGTO_ITEM="S"
              Then Moveto [Valor do Seguro]
              Else If PARAM_CONDPAGTO="S"
                       Then Moveto Field CAMPOANT
                       Else Moveto [Tipo de Pagamento]
                   EndIf    
           EndIf         
      Case RetVal="F8":
      
           If GERDUP_CDESCTO>"0"
              Then MSG="Fun‡Æo nÆo disponivel !// //"+
                       "Calculo autom tico, para condi‡Æo pagto com instru‡Æo de desconto !"
                   Mensagem(MSG)    
                   Loop
           EndIf                    
      
           If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"
              Then Mensagem ("Edi‡„o de Vencimentos n„o dispon¡vel!//Verificar com o Supervisor!")
              Else Moveto "PedidoV"
                   While True
                     CHAVEV()
                     If CHAVEV=9 Then QuitLoop EndIf
                     Controla_EdicaoV()
                   EndWhile
                   Moveto "PedidoC"
                   Moveto [Tipo de Pagamento]
           EndIf        
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop    
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])  Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
              Then Mensagem("Forma Pagto Invalido !")
                   Loop
           EndIf
           QuitLoop           

      Case RetVal="F":
           DIGITA_FRETE()
           CALC_PEDIDO()
           If PARAM_CPGTO_ITEM="S"
              Then Calc_Venctos_Itens()
              Else Calc_Venctos()
           EndIf
           
      Case RetVal="D":

           If GERDUP_CDESCTO>"0"
              Then MSG="Fun‡Æo nÆo disponivel !// //"+
                       "Calculo autom tico, para condi‡Æo pagto com instru‡Æo de desconto !"
                   Mensagem(MSG)    
                   Loop
           EndIf                    
           
           DIGITA_DESCTO()
           CALC_PEDIDO()
           If PARAM_CPGTO_ITEM="S"
              Then Calc_Venctos_Itens()
              Else Calc_Venctos()
           EndIf         
      Case RetVal="ESC":
        Switch
           Case Field()="Valor BCSubstituicao ICMS":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor Substituicao ICMS":
                Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Despesas Acessorias":
                If PARAM_SUBSTICMS="S"
                   Then Moveto [Valor Substituicao ICMS]
                   Else CHAVEF=9
                        QuitLoop
                EndIf
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Forma de Pagamento":
                If PARAM_CPGTO_ITEM="S"
                   Then Moveto [Valor do Seguro  ]
                   Else Moveto [Tipo de Pagamento]
                EndIf
           Case Field()="Tipo de Pagamento":
                Moveto [Valor do Seguro]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS"   Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro":
                       If PARAM_CPGTO_ITEM="S" 
                          Then QuitLoop
                          Else If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E"
                                  Then QuitLoop
                                  Else Moveto [Tipo de Pagamento]
                               EndIf   
                       EndIf
                EndSwitch
                CALC_PEDIDO()
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then If PARAM_CONDPAGTO="S" And SYS_NIVEL_USUARIO<>"S" And SYS_NIVEL_USUARIO<>"E" 
                           Then QuitLoop
                           Else [Numero de Parcelas]=BlankNum()
                                [Composicao de Dias]=""
                                QuitLoop
                        EndIf     
                   Else Moveto [Numero de Parcelas]               
                EndIf        
           Case Field()="Composicao de Dias":
                QuitLoop
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ;  (DigitaF)

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()

If Not Checa_CompDias([PedidoC->Composicao de Dias])
   Then Return
EndIf

Moveto "PedidoV"
Home
While Not RecordStatus("New")
  Del
EndWhile

NPC=1
i=1
If Not IsBlank([PedidoC->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[PedidoC->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=[PedidoC->Numero de Parcelas]
   Else If NPC=1 And [PedidoC->Numero de Parcelas]>1
           Then NP=[PedidoC->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

VRVENCTO=NDecimal(([PedidoC->Valor Nota Fiscal]/NP),2)
VRDIFERE=[PedidoC->Valor Nota Fiscal]-(VRVENCTO*NP)

If PARAM_COMIS_VENCTO="S"
   Then VREF=NDecimal(([PedidoC->Valor Nota Fiscal]*[PedidoC->Comissao do Representante])/100,2)
        VCVENCTO=NDecimal((VREF/NPC),2)
        VCDIFERE=VREF-(VCVENCTO*NPC)
   Else VCVENCTO=BlankNum()
        VCDIFERE=BlankNum()
EndIf

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[PedidoC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,(Len([PedidoC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([PedidoC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,Len([PedidoC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([PedidoC->Composicao de Dias],j,pos_s-j))
          j=pos_s+1
  EndIf

  End
  Down
  [Sequencia        ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([PedidoC->Data de Entrega])
                  MES_VECTO=Month([PedidoC->Data de Entrega])
                  ANO_VECTO=Year([PedidoC->Data de Entrega])
                  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)+"."+SubStr(StrVal(ANO_VECTO),3,2))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[PedidoC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[PedidoC->Data de Entrega]+NDIAS
  EndIf
  If i<>NP
     Then [Valor            ]=VRVENCTO
          [Valor da Comissao]=VCVENCTO
     Else [Valor            ]=VRVENCTO+VRDIFERE
          [Valor da Comissao]=VCVENCTO+VCDIFERE
  EndIf
  [Forma de Pagamento]=[PedidoC->Forma de Pagamento]

  i=i+1
EndWhile

Moveto "PedidoC"

EndProc

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS_ITENS()
Private DCompDD, DTVENCTO, Vencto_Encontrado, NPC, VBC, sq,
        VRVENCTO, VRDIFERE, NDIAS, SEQV, VREF, v, i, j, ii, v,
        VCVENCTO, VCDIFERE

Aguarde("Gerando Vencimentos/Comissoes")
Moveto "PedidoV"
Home
While Not RecordStatus("New")
  Del
EndWhile

For i From 1 To 12
  Dt_Vencto[i]=BlankDate()
  Vr_Vencto[i]=BlankNum()
  ND_Vencto[i]=BlankNum()
  VC_Vencto[i]=BlankNum()
EndFor

Moveto "PedidoI"
Scan
  DCompDD=[Composicao de Dias]
  NPC=1
  If Not IsBlank(DCompDD)
     Then i=1
          While True
            pos_s=SearchFrom("/",DCompDD,i)
            If pos_s=0
               Then QuitLoop
               Else NPC=NPC+1
                    i=pos_s+1
            EndIf
          EndWhile
  EndIf

  VREF=[Preco Total]-NDecimal(([Preco Total]*TXDESCTO_TOTAL)/100,2)
  VRVENCTO=NDecimal((VREF/NPC),2)
  VRDIFERE=VREF-(VRVENCTO*NPC)

  If PARAM_COMIS_VENCTO="S"
     Then VREF=NDecimal((VREF*[Comissao do Item])/100,2)
          VCVENCTO=NDecimal((VREF/NPC),2)
          VCDIFERE=VREF-(VCVENCTO*NPC)
     Else VCVENCTO=BlankNum()
          VCDIFERE=BlankNum()
  EndIf

  j=1
  i=1
  While i<=NPC
    pos_s=SearchFrom("/",DCompDD,j)
    If pos_s=0
       Then If i>1
               Then NDIAS=NumVal(SubStr(DCompDD,j,(Len(DCompDD)-(j-1))))
               Else If Not IsBlank(DCompDD)
                       Then NDIAS=NumVal(SubStr(DCompDD,j,Len(DCompDD)))
                       Else NDIAS=0
                    EndIf
            EndIf
       Else NDIAS=NumVal(SubStr(DCompDD,j,pos_s-j))
            j=pos_s+1
    EndIf
    DTVENCTO=[PedidoC->Data de Emissao]+NDIAS

    For v From 1 To 12
      If Dt_Vencto[v]=DTVENCTO Or
         IsBlank(Dt_Vencto[v])
         Then Dt_Vencto[v]=DTVENCTO
              If i<>NPC
                 Then Vr_Vencto[v]=Vr_Vencto[v]+VRVENCTO
                      VC_Vencto[v]=VC_Vencto[v]+VCVENCTO
                 Else Vr_Vencto[v]=Vr_Vencto[v]+VRVENCTO+VRDIFERE
                      VC_Vencto[v]=VC_Vencto[v]+VCVENCTO+VCDIFERE
              EndIf
              ND_Vencto[v]=NDIAS
              QuitLoop
      EndIf
    EndFor
    i=i+1
  EndWhile
EndScan

If [PedidoC->Frete Incluso na Nota]="+"
   Then Vr_Vencto[1]=Vr_Vencto[1]+[PedidoC->Valor do Frete]
EndIf
Vr_Vencto[1]=Vr_Vencto[1]+[PedidoC->Valor do Seguro]+[PedidoC->Valor Despesas Acessorias]

sq=1
Moveto "PedidoV"
For i From 1 To 12
  If IsBlank(Dt_Vencto[i]) Then Loop EndIf
  While True
    For v From 1 To 12
      If Not IsBlank(Dt_Vencto[v]) And
         Dt_Vencto[v]<=Dt_Vencto[i]
         Then ii=v
      EndIf
    EndFor
    End
    Down
    [Sequencia         ]=AlinhM(StrVal(sq),2)
    [Numero de Dias    ]=ND_Vencto[ii]
    [Data              ]=Dt_Vencto[ii]
    [Valor             ]=Vr_Vencto[ii]
    [Valor da Comissao ]=VC_Vencto[ii]
    [Forma de Pagamento]=[PedidoC->Forma de Pagamento]
    sq=sq+1
    Dt_Vencto[ii]=BlankDate()
    If IsBlank(Dt_Vencto[i]) Then QuitLoop EndIf
  EndWhile
EndFor

Moveto "PedidoC"
EndProc

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Checa_CompDias(Texto)
Private Texto,Contador_Repeticao
Contador_Repeticao=0
For ncc From 1 To Len(Texto)
    If Asc(SubStr(Texto,ncc,1))<47 Or
       Asc(SubStr(Texto,ncc,1))>57
       Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
            Return False
       Else If SubStr(Texto,ncc,1)="/"
               Then Contador_Repeticao=Contador_Repeticao+1
               Else Contador_Repeticao=0
            EndIf
            If Contador_Repeticao>1 Or
               SubStr(Texto,1,1)="/" Or
               SubStr(Texto,Len(Texto),1)="/"
               Then Mensagem("Formato da Composicao de Dias Invalido !//Exemplo= 30/60/90")
                    Return False
            EndIf
    EndIf
EndFor
Return True
EndProc

;****************************************+**************************************
;* Rotina para Calculo de Valores do Pedido                                    *
;*******************************************************************************
Proc CALC_PEDIDO()             
Aguarde("Calculando valores do pedido")

Switch
  Case Table()="Pedidoc": TabelaRefC="PedidoC"  TabelaRefI="PedidoI"
EndSwitch
 
Moveto TabelaRefC
CampoTab=Field()

[Valor Mercadoria]=VRMERC
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
[Valor Servico   ]=VRSERV
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]
 
CALCULA_IMPOSTO()

Moveto TabelaRefC
Moveto Field CampoTab

[Valor BCICMS ]=VRBCICMS
[Valor ICMS   ]=VRICMS
[Valor IPI    ]=VRIPI
[Valor BCISSQN]=VRBCISSQN
[Valor ISSQN  ]=VRISSQN
[Valor PIS    ]=VRPIS
[Valor COFINS ]=VRCOFINS
;[Valor II     ]=VRII    
;[Valor INSS   ]=VRINSS
;[Valor IR     ]=VRIR     

[Valor BCSubstituicao ICMS]=VRBCST
[Valor Substituicao ICMS  ]=VRST              

;[Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
;                     [Valor Substituicao ICMS]+[Valor do Seguro]+[Valor II])-([Valor INSS]+[Valor IR])
[Valor Nota Fiscal]=[Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                    [Valor Substituicao ICMS]+[Valor do Seguro]

VRNF=[Valor Nota Fiscal]

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

If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB") And
   VRICMS_CREDSN>0 And ALIQUOTA_CREDITO_ICMS_NOSN>0
   Then
        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

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

;*** 0=BlankNum() **************************************************************
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 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 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 INSS               ]=0 Then [Valor INSS               ]=BlankNum() EndIf

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

Moveto TabelaRefC
Moveto Field CampoTab

LimpAguarde()
EndProc     ;  (Calc_Pedidos)

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

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"] = -59:
           If Campo="CBanco"     Or
              Campo="NomeCartao" Or
              Campo="Cidade"     Or
              Campo="E_Cidade"   Or
              Campo="E_UF"       Or
              Campo="C_Cidade"   Or
              Campo="C_UF"
              Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="CBanco"     Then Moveto [Codigo_Banco       ] EndIf
                    If Campo="NomeCartao" Then Moveto [Nome do Cartao     ] EndIf
                    If Campo="E_Cidade"   Then Moveto [Cidade de Entrega  ] EndIf
                    If Campo="E_UF"       Then Moveto [UF de Entrega      ] EndIf
                    If Campo="C_Cidade"   Then Moveto [Cidade de Cobranca ] EndIf
                    If Campo="Cidade"     Then Moveto [Cidade             ] EndIf
                    If Campo="C_UF"       Then Moveto [UF de Cobranca     ] EndIf
                    If ConsultaF1()
                       Then If Campo="E_Cidade"
                               Then [UF de Entrega ]=Reg_ConsultaF1["UF"]
                                    VSD_E_UF        =Reg_ConsultaF1["UF"]
                            EndIf
                            If Campo="C_Cidade"
                               Then [UF de Cobranca]=Reg_ConsultaF1["UF"]
                                    VSD_C_UF        =Reg_ConsultaF1["UF"]
                            EndIf
                            If Campo="Cidade"
                              Then [UF]=Reg_ConsultaF1["UF"]
                                   VSD_UF=[UF]
                            EndIf
                    EndIf   

                    Window Select JANELA
                    WinArray5["FLOATING"]=True
                    Window SetAttributes JANELA From WinArray5

                    echo Normal
                    echo off

                    If Campo="CBanco"
                       Then VSD_CBanco=[Codigo_Banco      ]
                            VSD_NBanco=[Nome_Banco        ]
                    EndIf
                    If Campo="NomeCartao"
                       Then VSD_NomeCartao=[Nome do Cartao]
                    EndIf
                    If Campo="Cidade"
                       Then VSD_Cidade=[Cidade]
                    EndIf

                    Switch
                      Case Campo="E_Cidade": VSD_E_Cidade=[Cidade de Entrega]
                      Case Campo="E_UF"    : VSD_E_UF    =[UF de Entrega]
                      Case Campo="C_Cidade": VSD_C_Cidade=[Cidade de Cobranca]
                      Case Campo="C_UF"    : VSD_C_UF    =[UF de Cobranca]
                    EndSwitch
           EndIf
           If Campo="TipoEmit"
              Then ShowPopup " Emitente " @ 14,39
                      "~P~roprio" : " O Proprio Cliente" : "PROPRIO",
                      "~T~erceiro": " De Terceiro": "TERCEIRO"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then VSD_TipoEmit=MenuVar
                       EndIf
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 4 And OP_SHOWD="Cheque":
           If COPIOU_REGISTRO
              Then REGISTRO["Sequencia"]     =SEQ
                   REGISTRO["Numero de Dias"]=[Numero de Dias]
                   REGISTRO["Data"]          =[Data]
                   REGISTRO["Valor"]         =[Valor]
                   CopyFromArray REGISTRO
                   Ler_Gravar_Cheque("Ler")
           EndIf

      Case Evento["KeyCode"] = -81 And OP_SHOWD="Cheque":
           VSD_CBanco   =ControlValue("CBanco")
           VSD_NCheque  =ControlValue("NCheque")
           VSD_Nome     =ControlValue("Nome")
           VSD_Agencia  =ControlValue("Agencia")
           VSD_CCorrente=ControlValue("CCorrente")
           VSD_TipoEmit =ControlValue("TipoEmit")
           VSD_Cidade   =ControlValue("Cidade")
           VSD_UF       =ControlValue("UF")
           VSD_DataV    =ControlValue("DataV")
           VSD_Valor    =ControlValue("Valor")
           VSD_Obs      =ControlValue("Obs")
           VSD_CPF      =ControlValue("CPF")

           Pode_Gravar=True
           If IsBlank(VSD_TipoEmit)
              Then Mensagem("Emitente Invalido !")
                   Pode_Gravar=False
           EndIf
           If IsBlank(VSD_DataV)
              Then Mensagem("Data Vencimento Invalida !")
                   Pode_Gravar=False
           EndIf
           If IsBlank(VSD_Valor)
              Then Mensagem("Valor Invalido !")
                   Pode_Gravar=False
           EndIf

           If Pode_Gravar
              Then Ler_Gravar_Cheque("Gravar")
                   CancelDialog
           EndIf

      Case Evento["KeyCode"] = -81 And OP_SHOWD="Enderecos":
           VSD_E_Endereco=ControlValue("E_Endereco")
           VSD_E_CEP=ControlValue("E_CEP")
           VSD_E_Bairro=ControlValue("E_Bairro")
           VSD_E_Cidade=ControlValue("E_Cidade")
           VSD_E_UF=ControlValue("E_UF")
           VSD_C_Endereco=ControlValue("C_Endereco")
           VSD_C_CEP=ControlValue("C_CEP")
           VSD_C_Bairro=ControlValue("C_Bairro")
           VSD_C_Cidade=ControlValue("C_Cidade")
           VSD_C_UF=ControlValue("C_UF")
           AcceptDialog
 
      Case Evento["KeyCode"] = -66 And OP_SHOWD="Enderecos":
           If Campo="E_Endereco"
              Then VSD_E_Endereco= "O MESMO"
                   VSD_E_Bairro  = ""
                   VSD_E_Cidade  = ""
                   VSD_E_UF      = ""
                   VSD_E_CEP     = ""
           EndIf
           If Campo="C_Endereco"
              Then VSD_C_Endereco = "O MESMO"
                   VSD_C_Bairro   = ""
                   VSD_C_Cidade   = ""
                   VSD_C_UF       = ""
                   VSD_C_CEP      = ""
           EndIf

       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then If QuerExcluir("")
                       Then Del
                            CancelDialog
                    EndIf
            EndIf

      Case Evento["KeyCode"] = 27:
      ;;;***** Nome do Animal **** #0341#
           Switch
             Case Campo="I_Livre"       : CancelDialog  
           EndSwitch

      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
                  [Frete Incluso na Nota ]=OLD_Frete_Incluso
                  [Aliquota BCFrete Nota ]=OLD_ABC_Frete
                  [Valor do Frete        ]=OLD_Frete
                  [Aliquota BCICMS Frete ]=OLD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=OLD_AICMS_Frete
                  [CFO Frete             ]=OLD_CFO_FRETE
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="ABCICMS_Frete" : Campo="AICMS_Frete"
             Case Campo="CFO_Frete"     : Campo="ABCICMS_Frete"
             Case Campo="I_Flag"        : Campo="CFO_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch

      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco"        : CancelDialog
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit"      : Campo="NCheque"
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch

      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao"       : CancelDialog
             Case Campo="NomeCartao"    : Campo="NCartao"
           EndSwitch

      ;;;***** Obs    ****
           Switch
             Case Campo="OBS"           : CancelDialog
           EndSwitch

      ;;;***** Enderecos ******
           Switch
             Case Campo="E_Endereco": AcceptDialog
             Case Campo="E_CEP":      Campo="E_Endereco"
             Case Campo="E_Bairro":   Campo="E_CEP"
             Case Campo="E_Cidade":   Campo="E_Bairro"
             Case Campo="E_UF":       Campo="E_Cidade"
             Case Campo="C_Endereco": Campo="E_Endereco"
             Case Campo="C_CEP":      Campo="C_Endereco"
             Case Campo="C_Bairro":   Campo="C_CEP"
             Case Campo="C_Cidade":   Campo="C_Bairro"
             Case Campo="C_UF":       Campo="C_Cidade"
           EndSwitch
       ;;;***** Acrescimo ****
           Switch
             Case Campo="A_Acrescimo"   : CancelDialog
           EndSwitch
      Case Evento["KeyCode"] = 13:
      ;;;***** Nome do Animal **** #0341#
           Switch
             Case Campo="I_Livre"       : 
                  VSD_I_Livre=ControlValue("I_Livre")
                  AcceptDialog  
           EndSwitch

      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  Campo="ABC_Frete"
             Case Campo="ABC_Frete":
                  VSD_ABC_Frete=ControlValue("ABC_Frete")
                  If VSD_ABC_Frete>0
                     Then VSD_Frete=Round((VRNF*VSD_ABC_Frete)/100,2)
                          If VSD_Frete<VRMINIMO_FRETE
                             Then VSD_FRETE=VRMINIMO_FRETE
                          EndIf
                     Else VSD_ABC_Frete=BlankNum()
                  EndIf
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If Not VSD_Frete>0
                     Then [Frete Incluso na Nota ]=":"
                          [Aliquota BCFrete Nota ]=BlankNum()
                          [Valor do Frete        ]=BlankNum()
                          [Aliquota BCICMS Frete ]=BlankNum()
                          [Aliquota de ICMS Frete]=BlankNum()
                          [CFO Frete             ]=""

                          Campo="I_Flag"
                     Else If VSD_Frete_Incluso="S"
                             Then If VSD_Frete_Incluso="S"
                                     Then [Frete Incluso na Nota ]="+"
                                     Else [Frete Incluso na Nota ]=":"
                                  EndIf
                                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                                  [Valor do Frete        ]=VSD_Frete
                                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                                  [CFO Frete             ]=VSD_CFO_Frete
                                  Campo="AICMS_Frete"
                             Else Campo="AICMS_Frete"
                          EndIf
                  EndIf
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  If Not IsBlank(VSD_AICMS_Frete) Or VSD_Frete<=0
                     Then Campo="ABCICMS_Frete"
                  EndIf
             Case Campo="ABCICMS_Frete":
                  VSD_ABCICMS_Frete=ControlValue("ABCICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")
                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then Moveto [CFO Frete]
                          If Busca_Lookup("Codigo Fiscal de Operacao",VSD_CFO_Frete,"CFO Inv lido")
                            Then If VSD_Frete_Incluso="S"
                                    Then [Frete Incluso na Nota ]="+"     
                                    Else [Frete Incluso na Nota ]=":"
                                 EndIf
                            [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                            [Valor do Frete        ]=VSD_Frete
                            [Aliquota BCICMS Frete ]=VSD_ABCICMS_Frete
                            [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                            [CFO Frete             ]=VSD_CFO_Frete
                          
                            Campo="I_Flag"
                          EndIF  
                  EndIf
             Case Campo="I_Flag":
                  CancelDialog
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          AcceptDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")
                  AcceptDialog
           EndSwitch

      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco":
                  VSD_CBanco=ControlValue("CBanco")
                  If Not IsBlank(VSD_CBanco)
                     Then Moveto [Codigo_Banco]
                          Ativa_Lookup()
                          Moveto [Codigo_Banco]
                          Locate VSD_CBanco
                          If RetVal
                             Then VSD_CBanco=[Codigo_Banco      ]
                                  VSD_NBanco=[Nome_Banco        ]
                                  KeyPress "ESC"
                                  Moveto "PedidoV"
                                  [Codigo_Banco]=VSD_CBanco
                                  Campo="Agencia"
                             Else Mensagem("Banco n„o Cadastrado !")
                                  VSD_CBanco=""
                                  VSD_NBanco=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="Agencia":
                  VSD_Agencia=ControlValue("Agencia")
                  Campo="CCorrente"
             Case Campo="CCorrente":
                  VSD_CCorrente=ControlValue("CCorrente")
                  Campo="NCheque"
             Case Campo="NCheque":
                  VSD_NCheque=ControlValue("NCheque")
                  Campo="TipoEmit"
             Case Campo="TipoEmit":
                  VSD_TipoEmit=ControlValue("TipoEmit")
                  If Not IsBlank(VSD_TipoEmit)
                     Then If VSD_Nome="" And VSD_TipoEmit="PROPRIO"
                             Then VSD_Nome  =[PedidoC->Razao Social]
                                  VSD_Cidade=[PedidoC->Cidade      ]
                                  VSD_UF    =[PedidoC->Uf          ]
                                  VSD_CPF   =[PedidoC->CGC         ]
                                  Campo="DataV"
                             Else Campo="CPF"
                          EndIf
                  Endif
             Case Campo="CPF":
                  VSD_CPF=ControlValue("CPF")
                  Campo="Nome"
             Case Campo="Nome":
                  VSD_Nome=ControlValue("Nome")
                  Campo="Cidade"
             Case Campo="Cidade":
                  VSD_Cidade=ControlValue("Cidade")                         
                  If IsBlank(VSD_Cidade) 
                     Then Campo="Cidade"                     
                     Else Campo="UF"     
                  EndIf   
             Case Campo="UF":
                  VSD_UF=ControlValue("UF")
                   If IsBlank(VSD_UF) 
                      Then Campo="UF"                     
                      Else Campo="DataV"     
                   EndIf                  
                   If Not IsBlank(VSD_Cidade)
                      Then Moveto [Cidade]
                           Ativa_Lookup()
                           Moveto [Cidade]
                           Locate VSD_Cidade,VSD_UF
                           If RetVal
                              Then VSD_Cidade=[Cidade ]
                                   VSD_UF=[UF]
                                   KeyPress "ESC"
                                   Moveto "Pedidov"
                                   [Cidade]=VSD_Cidade
                                   [UF]=VSD_UF                                
                              Else Mensagem("Cidade/UF n„o Cadastrada !")
                                   VSD_Cidade=""
                                   Campo="Cidade"
                                   KeyPress "ESC"
                           EndIf
                           Echo Off                  
                  EndIf
             Case Campo="DataV":
                  VSD_DataV=ControlValue("DataV")
                  If Not IsBlank(VSD_DataV)
                     Then Campo="Valor"
                  EndIf
             Case Campo="Valor":
                  VSD_Valor=ControlValue("Valor")
                  If Not IsBlank(VSD_Valor)
                     Then Campo="Obs"
                  EndIf
             Case Campo="Obs":
                  VSD_Obs=ControlValue("Obs")

                  Ler_Gravar_Cheque("Gravar")
                  CopyToArray REGISTRO
                  COPIOU_REGISTRO=True
                  CancelDialog
           EndSwitch

      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao":
                  VSD_NCartao=ControlValue("NCartao")
                  Campo="NomeCartao"
             Case Campo="NomeCartao":
                  VSD_NomeCartao=ControlValue("NomeCartao")
                  If Not IsBlank(VSD_NomeCartao)
                     Then Moveto [Nome do Cartao]
                          Ativa_Lookup()
                          Moveto [Nome do Cartao]
                          Locate VSD_NomeCartao
                          If RetVal
                             Then KeyPress "ESC"
                                  Moveto "PedidoV"
                                  [Numero do Cartao    ]=VSD_NCartao
                                  [Nome do Cartao      ]=VSD_NomeCartao
                                  CancelDialog
                             Else Mensagem("Cart„o n„o Cadastrado !")
                                  VSD_NomeCartao=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
           EndSwitch

      ;;;***** OBS    ****
           Switch
             Case Campo="OBS":
                  VSD_OBS=ControlValue("OBS")
                  [Observacao          ]=VSD_OBS
                  CancelDialog
           EndSwitch

      ;;;***** Acrescimo ****
           Switch
             Case Campo="A_Acrescimo"   :
                  VSD_Acrescimo=ControlValue("A_Acrescimo")
                  AcceptDialog
           EndSwitch

      ;;;***** Enderecos ******
           Switch
             Case Campo="E_Endereco":
                  VSD_E_Endereco=ControlValue("E_Endereco")
                  Campo="E_CEP"
             Case Campo="E_CEP":
                  VSD_E_CEP=ControlValue("E_CEP")
                  Campo="E_Bairro"
             Case Campo="E_Bairro":
                  VSD_E_Bairro=ControlValue("E_Bairro")
                  Campo="E_Cidade"
             Case Campo="E_Cidade":
                  VSD_E_Cidade=ControlValue("E_Cidade")
                  If Not IsBlank(VSD_E_Cidade)
                     Then Moveto [Cidade de Entrega]
                          Ativa_Lookup()
                          Locate VSD_E_Cidade
                          If Not RetVal
                             Then Mensagem("Cidade invalida !")
                             Else Campo="E_UF"
                          EndIf
                          KeyPress "ESC"
                     Else Campo="E_UF"
                  EndIf
             Case Campo="E_UF":
                  VSD_E_UF=ControlValue("E_UF")
                  If Not IsBlank(VSD_E_UF)
                     Then Moveto [UF de Entrega]
                          Ativa_Lookup()
                          Locate VSD_E_UF
                          If Not RetVal
                             Then Mensagem("UF invalida !")
                             Else Campo="C_Endereco"
                          EndIf
                          KeyPress "ESC"
                     Else Campo="C_Endereco"
                  EndIf
             Case Campo="C_Endereco":
                  VSD_C_Endereco=ControlValue("C_Endereco")
                  Campo="C_CEP"
             Case Campo="C_CEP":
                  VSD_C_CEP=ControlValue("C_CEP")
                  Campo="C_Bairro"
             Case Campo="C_Bairro":
                  VSD_C_Bairro=ControlValue("C_Bairro")
                  Campo="C_Cidade"
             Case Campo="C_Cidade":
                  VSD_C_Cidade=ControlValue("C_Cidade")
                  Campo="C_UF"
             Case Campo="C_UF":
                  VSD_C_UF=ControlValue("C_UF")
                  AcceptDialog
           EndSwitch
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="TipoEmit"    Or
   Campo="NomeCartao"  Or
   Campo="E_Cidade"    Or
   Campo="E_UF"        Or
   Campo="C_Cidade"    Or
   Campo="C_UF"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

If Campo="E_Endereco" Or
   Campo="C_Endereco"
   Then TECLA=TECLA+"F8=Duplica Endere‡o  "
EndIf

If OP_SHOWD="Cheque" And COPIOU_REGISTRO
   Then TECLA=TECLA+"Ctrl+D=Copiar  PgDn=Finalizar  "
EndIf

If OP_SHOWD="Enderecos"
   Then TECLA=TECLA+"PgDn=Finalizar  "
EndIf

Switch
  Case Campo="*******":
       MSGCAMPO=""
  OtherWise:
       MSGCAMPO=""
EndSwitch

If (OP_SHOWD="Cheque" Or
    OP_SHOWD="Cartao" Or
    OP_SHOWD="Observacao") And
    CHAVEV=0
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

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

;*******************************************************************************
;* Digitacao dos Dados do Frete                                                *
;*******************************************************************************
Proc Digita_Frete()
Private ncampo

ncampo=Field()

INICIO_DIALOG=True
OP_SHOWD="Frete"

OLD_Frete_Incluso=[Frete Incluso na Nota ]
OLD_ABC_Frete    =[Aliquota BCFrete Nota ]
OLD_Frete        =[Valor do Frete        ]
OLD_ABCICMS_Frete=[Aliquota BCICMS Frete ]
OLD_AICMS_Frete  =[Aliquota de ICMS Frete]
OLD_CFO_FRETE    =[CFO Frete             ]

If [Frete Incluso na Nota ]="+" Or
   [Frete Incluso na Nota ]="S"
   Then VSD_Frete_Incluso="S"
   Else VSD_Frete_Incluso="N"
EndIf

If CHAVEC=1
   Then VSD_ABC_Frete    =TAXA_FRETE
   Else VSD_ABC_Frete    =[Aliquota BCFrete Nota ]
EndIf
VSD_Frete        =[Valor do Frete        ]
VSD_ABCICMS_Frete=[Aliquota BCICMS Frete ]
VSD_AICMS_Frete  =[Aliquota de ICMS Frete]
VSD_CFO_Frete    =[CFO Frete             ]
VSD_KM_Frete     =KM_FRETE
VSD_VRMINIMO_Frete=VRMINIMO_FRETE

VSD_Flag         =""
Echo Normal
Echo Off

Showdialog "Calculo do Frete" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,09 height 06 width 61

   Label  @ 0,00 "Soma na Nota" for "Frete_Incluso"
   Label  @ 1,04 "(Sim/N„o)"    for "Frete_Incluso"
   Accept @ 1,01  Width 4 "A1" picture "S,N" Tag "Frete_Incluso" to VSD_Frete_Incluso

   Label  @ 0,15 "Km Cliente" for "TKM_Frete"
   Accept @ 1,19 Width 7 "S" picture "#*#" Tag "TKM_Frete" to VSD_KM_Frete

   Label  @ 0,26 "%Aplicar" for "ABC_Frete"
   Accept @ 1,27 Width 8 "N" picture "#*#.[###]" Tag "ABC_Frete" to VSD_ABC_Frete

   Label  @ 0,35 "Vr Minimo" for "TVRMINIMO_Frete"
   Accept @ 1,36 Width 10 "$" picture "#*#.[##]" Tag "TVRMINIMO_Frete" to VSD_VRMINIMO_Frete

   Label  @ 0,46 "Vr Frete" For "Valor_Frete"
   Accept @ 1,47 Width 11 "$" picture "#*#.[##]" Tag "Valor_Frete" to VSD_Frete

   Label  @ 2,26 "%ICMS" for "AICMS_Frete"
   Accept @ 3,27 Width 8 "N" picture "#*#.[###]" Tag "AICMS_Frete" to VSD_AICMS_Frete

   Label  @ 2,34 "%Red.BCICMS" for "ABCICMS_Frete"
   Accept @ 3,36 Width 10 "N" picture "#*#.[###]" Tag "ABCICMS_Frete" to VSD_ABCICMS_Frete

   Label  @ 2,46 "CFOP" for "CFO_Frete"
   Accept @ 3,47 Width 7 "A4" picture "####" Tag "CFO_Frete" to VSD_CFO_Frete

   Accept @ 3,55 Width 1 "A1" picture "!" Tag "I_Flag" to VSD_I_Flag

Enddialog
Mouse Show
Moveto Field ncampo
EndProc    ;  (Digita_Frete)

;*******************************************************************************
;* Digitacao dos Dados do Desconto                                             *
;*******************************************************************************
Proc Digita_Descto()
INICIO_DIALOG=True
OP_SHOWD="Desconto"

VSD_A_Descto   =[Taxa de Desconto ]
VSD_Descto     =[Valor do Desconto]

Showdialog "Calculo do Desconto" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 12,20 height 04 width 32


   Label  @ 0,00 "%Sobre o Bruto" for "A_Descto"
   Accept @ 1,02 Width 10 "N" picture "#*#.[###]" Tag "A_Descto" to VSD_A_Descto

   Label  @ 0,18 "Valor" For "Descto"
   Accept @ 1,15 Width 13 "$" picture "#*#.[##]" Tag "Descto" to VSD_Descto

Enddialog
If Not RetVal
   Then Return
EndIf

DesctoOk=True
If PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P"
   Then If Search("VEND",[PedidoC->Descricao da Destinacao])>0
           Then DesctoOk=False
                If PARAM_BLOQ_TPDESCTO="I"
                   Then TX_DESCTO_BLOQUEIO=PARAM_BLOQ_TXDESCTO
                EndIf
                If VSD_A_Descto>0
                   Then If VSD_A_Descto<=TX_DESCTO_BLOQUEIO
                           Then DesctoOK=True
                        EndIf
                   Else If ((VSD_Descto/[PedidoC->Valor Mercadoria])*100)<=TX_DESCTO_BLOQUEIO
                           Then DesctoOK=True
                        EndIf
                EndIf
         EndIf
EndIf
If Not DesctoOK
   Then MSG="% Desconto concedido no Total acima do permitido !//"
        MSG=MSG+"Desconto m ximo = "+ Ltrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO)) +"% //"
        MSG=MSG+"// Verificar Ok !"
        If PARAM_BLOQ_DESCTO="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then DesctoOk=True
                        MSG="Pedido: "+NPED+", Descto > "+LTrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO))+"%"
                        Grava_Logt("#","DesctTot",MSG)
                EndIf
           Else Mensagem(MSG)
        EndIf
EndIf
If DesctoOk
   Then [Taxa de Desconto ]=VSD_A_Descto
        [Valor do Desconto]=VSD_Descto
EndIf

EndProc

;*******************************************************************************
;* Digitacao de Cheques                                                        *
;*******************************************************************************
Proc Digita_Cheque()
INICIO_DIALOG=True
OP_SHOWD="Cheque"
Echo Normal
Echo Off

Moveto "PedidoV"
Ler_Gravar_Cheque("Ler")

Showdialog "Dados do Cheque" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","PGDN","Ditto","ClearArea"
     @ 09,04 height 12 width 66

   Label  @ 0,00 "N§ Banco Nome Banco" for "CBanco"
   Accept @ 1,01  Width 8 "A4" picture "!*!" Tag "CBanco" to VSD_CBanco

   Accept @ 1,10  Width 23 "A20" picture "!*!" Tag "NBanco" to VSD_NBanco

   Label  @ 0,33 "Agencia" for "Agencia"
   Accept @ 1,34  Width 9 "A6" picture "!*!" Tag "Agencia" to VSD_Agencia

   Label  @ 2,00 "C/C" for "CCorrente"
   Accept @ 3,01  Width 13 "A10" picture "!*!" Tag "CCorrente" to VSD_CCorrente

   Label  @ 2,14 "N§ Cheque" for "NCheque"
   Accept @ 3,15  Width 13 "A10" picture "!*!" Tag "NCheque" to VSD_NCheque

   Label  @ 2,33 "Emitente" for "TipoEmit"
   Accept @ 3,34  Width 11 "A8" picture "PROPRIO,TERCEIRO" Tag "TipoEmit" to VSD_TipoEmit

   Label  @ 4,00 "CPF" for "CPF"
   Accept @ 5,01  Width 17 "A14" picture "!*!" Tag "CPF" to VSD_CPF

   Label  @ 4,19 "Nome do Titular" for "Nome"
   Accept @ 5,20  Width 43 "A40" picture "!*!" Tag "Nome" to VSD_Nome

   Label  @ 6,00 "Cidade" for "Cidade"
   Accept @ 7,01  Width 23 "A20" picture "!*!" Tag "Cidade" to VSD_Cidade

   Label  @ 6,24 "UF" for "UF"
   Accept @ 7,25  Width 5  "A2" picture "!*!" Tag "UF" to VSD_UF

   Label  @ 6,36 "Dt Vencto " for "DataV"
   Accept @ 7,37  Width 13 "D" picture "#[#];.##;.##[##]" Tag "DataV" to VSD_DataV

   Label  @ 6,50 "Valor" for "Valor"
   Accept @ 7,51  Width 12 "$" picture "#*#.[##]" Tag "Valor" to VSD_Valor

   Label  @ 08,00 "Observa‡„o do Cheque" for "Obs"
   Accept @ 09,01  Width 62 "A70" picture "!*!" Tag "Obs" to VSD_Obs

Enddialog
Mouse Show
EndProc  ; (Digita_Cheque)

;*******************************************************************************
;* Digitacao de Cartao                                                         *
;*******************************************************************************
Proc Digita_Cartao()
INICIO_DIALOG=True
OP_SHOWD="Cartao"

Moveto "PedidoV"
VSD_NCartao   =[Numero do Cartao    ]
VSD_NomeCartao=[Nome do Cartao      ]

Showdialog "Dados do Cartao" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,08 height 04 width 48

   Label  @ 0,00 "N§ Autoriza‡Æo" for "NCartao"
   Accept @ 1,01  Width 22 "A19" picture "!*!" Tag "NCartao" to VSD_NCartao

   Label  @ 0,25 "Nome do Cartao" for "NomeCartao"
   Accept @ 1,26 Width 18 "A15" picture "!*!" Tag "NomeCartao" To VSD_NomeCartao

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Digitacao de Observacao                                                     *
;*******************************************************************************
Proc Digita_Obs()
INICIO_DIALOG=True
OP_SHOWD="Observacao"

Moveto "PedidoV"
VSD_OBS       =[Observacao          ]

Showdialog "Observa‡„o" Proc "Geral_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea"
     @ 09,08 height 03 width 68

   Accept @ 0,01  Width 64 "A70" picture "!*!" Tag "OBS" to VSD_OBS

Enddialog
Mouse Show
EndProc

;*******************************************************************************
;* Ler ou Gravar Dados do Cheque                                               *
;*******************************************************************************
Proc Ler_Gravar_Cheque(Opcao)
Private Opcao
Switch
  Case Opcao="Ler":
       VSD_DataV    =[Data          ]
       VSD_CBanco   =[Codigo_Banco  ]
       VSD_NBanco   =[Nome_Banco    ]
       VSD_Agencia  =[Agencia       ]
       VSD_CCorrente=[Numero_Conta  ]
       VSD_NCheque  =[Numero_Cheque ]
       VSD_TipoEmit =[Tipo_Emitente ]
       VSD_Nome     =[Titular_Cheque]
       VSD_Cidade   =[Cidade        ]
       VSD_UF       =[UF            ]
       VSD_Valor    =[Valor         ]
       VSD_Obs      =[Observacao    ]
       VSD_CPF      =[CPF           ]
  Case Opcao="Gravar":
       [Data          ]=VSD_DataV
       [Codigo_Banco  ]=VSD_CBanco
       [Nome_Banco    ]=VSD_NBanco
       [Agencia       ]=VSD_Agencia
       [Numero_Conta  ]=VSD_CCorrente
       [Numero_Cheque ]=VSD_NCheque
       [Tipo_Emitente ]=VSD_TipoEmit
       [Titular_Cheque]=VSD_Nome
       [Cidade        ]=VSD_Cidade
       [UF            ]=VSD_UF
       [Observacao    ]=VSD_Obs
       [Valor         ]=VSD_Valor
       [CPF           ]=VSD_CPF
EndSwitch
EndProc   ;  (Ler_Gravar_Cheque)

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc CHAVEV()
While True
  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

        TECLA= "Esc=Retornar F7=Paginar F9=Limpa_Venctos"

        Prompt TECLA

        Wait Field
             Until "ESC","ENTER","F7","HOME","UP","PGUP","F9"

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               PAGINA("PedidoV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             While Not RecordStatus("New")
               Del
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVEV=9
             Del
             Return
        Case Retval="ENTER":
       If Not Seta_Sequencia(SEQ,True)
                Then Del
                     QuitLoop
             EndIf
             SEQ=[]
             Del
             Locate SEQ
             If Retval
                Then CHAVEV=0
                Else CHAVEV=1
                     End Down
                     [Sequencia]=SEQ
                     UnLockRecord
                     Locate SEQ
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DIGITAV()

If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else Moveto [Data]
EndIf        
FPAGTO=[Forma de Pagamento]
While True
  TECLA= " Esc=Retornar  "
  If Field()="Forma de Pagamento"
     Then TECLA=TECLA+"F1=Tabelas  "
  EndIf
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait Field
       Message Field()
       Until "ESC","ENTER","DEL","F1"

  Switch
  Case RetVal="F1":
       If Field()="Forma de Pagamento"
          Then CONSULTAF1()
       EndIf
  Case RetVal="ESC":
       If Field()="Numero de Dias"
          Then If QuerDesfazer("")
                  Then If CHAVEV=1
                          Then Del
                       EndIf
                       QuitLoop
               Endif
          Else Left
       EndIf
  Case RetVal="DEL":
       If QuerExcluir("")
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER": 
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[PedidoC->Data de Emissao]+ND
               Else Right
            EndIf     
       Case Field()="Data":
               If IsFieldNull([]) Then Loop EndIf
               Right
       Case Field()="Valor":
               If IsFieldNull([]) Then Loop EndIf
               Right
       Case Field()="Forma de Pagamento":
            If IsFieldNull([]) Then Loop EndIf 
            If []<>FPAGTO And Not IsBlank(FPAGTO)
               Then Mensagem("Para mudar forma de Pagto exclua e inclua novamente este Vencimento Ok !")
                    []=FPAGTO
                    Loop
            EndIf
            FPAGTO=[]
            If []="CH" or []="CP"
               Then Digita_Cheque()
               Else If []="CT"
                       Then Digita_Cartao()
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Digitacao Cabeca 2¦ Pagina                                      *
;*******************************************************************************
Proc DIGITAD()
CHAVED=0

Moveto "PedidoC"
V_TRANSP=[Codigo da Transportadora]
Moveto [Codigo da Transportadora]
If CHAVEC=1 And IsBlank([Razao Social Transport])
   Then [Codigo da Transportadora]=""
        [Codigo da Transportadora]=V_TRANSP
        If IsBlank([Codigo da Transportadora])
           Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                V_TRANSP=[Codigo da Transportadora]
        Endif
EndIf
While True

      TECLA="Esc=Retornar  Alt+F=Fun‡”es  "

      If Field()="Codigo da Transportadora" Or
         Field()="Codigo do Veiculo"        Or
         Field()="Cidade Transport"         Or
         Field()="UF Transport"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf
      TECLA=TECLA+"PgUp/PgDn"

      MSGCAMPO = Field()
      If Field()="Frete por Conta"    
          Then MSGCAMPO="Frete por Conta, Consulte [F1]"
      EndIf  
      pos_p=SearchFrom("Transp",Field(),1)
      If pos_p>0 And Field()<>"Codigo da Transportadora"
         Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
      EndIf

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","PGDN","PGUP","F4","F6","F7","F8",-33

      If RetVal=-33
         Then Echo Normal
              Echo Off
              ShowPopup " Fun‡”es " CENTERED
                "F6  ~I~mprimir                  " : " Imprimir Pedido                 " : "F6",
                "F7  Observa‡„o da ~N~ota Fiscal " : " Observa‡„o da Nota Fiscal       " : "F7",
                "F8  Observa‡„o do ~P~edido      " : " Observa‡„o do Pedido            " : "F8",
                "~C~ancelar                      " : " Cancelar a Opera‡„o             " : "CANCELAR"
              EndMenu
              To MenuVar
              echo off
              If MenuVar="CANCELAR" or MenuVar="Esc"
                 Then Loop
              EndIf
  
              RetVal=MenuVar
      EndIf

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Transportadora" Or
              Field()="Codigo do Veiculo"        Or
              Field()="Cidade Transport"         Or
              Field()="UF Transport"
              Then If CONSULTAF1()
                      Then If Field()="Cidade Transport"
                              Then [UF Transport ]=Reg_ConsultaF1["UF"]
                           EndIf
                   EndIf
           EndIf
           If Field()="Frete por Conta"
              Then FreteporConta()
           EndIf   
      Case RetVal="F7":           
           Edita_Memo("Observacao na Nota Fiscal",15,00,07,80,"Observa‡„o da Nota Fiscal")    
      Case RetVal="F8":           
           Edita_Memo("Observacao do Pedido",15,00,07,80,"Observa‡„o do Pedido")                
      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Transportadora":
                CHAVED=9
                QuitLoop
           Case Field()="Razao Social Transport":
                Moveto [Codigo da Transportadora]
           Case Field()="Codigo do Veiculo":
                Moveto [Razao Social Transport]
           Case Field()="Numero de Volumes":
                Moveto [Codigo do Veiculo]
           Case Field()="Observacao na Nota Fiscal": 
                Moveto [Numero de Volumes]
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGUP":
           CHAVED=9
           QuitLoop
      Case Retval="PGDN":
           If IsBlank([Codigo da Transportadora]) Then Mensagem("Transportador Invalido !") Loop EndIf
           If IsBlank([Frete por Conta]) Then Mensagem("Frete por Conta Invalido !") Loop EndIf
           QuitLoop
      Case Retval="F6":
           If IsBlank([Codigo da Transportadora]) Then Mensagem("Transportador Invalido !") Loop EndIf
           If IsBlank([Frete por Conta]) Then Mensagem("Frete por Conta Invalido !") Loop EndIf
           npedido = [PedidoC->Numero do Pedido]
           ncampo=Field()
           If IMPRIME()
              Then QuitLoop
              Else Moveto Field ncampo
           EndIf
      Case Retval="F4":
           CALC_VOLUMES()
      Case Retval="ENTER":
           Switch
           Case Field()="Codigo da Transportadora":
                If IsBlank([]) Then Loop EndIf
                If V_TRANSP<>[] And [Nome Fantasia Transport]="O PROPRIO"
                   Then [Razao Social Transport ]=[Razao Social  ]
                        [Endereco Transport     ]=[Endereco      ]
                        [Bairro Transport       ]=[Bairro        ]
                        [CEP Transport          ]=[CEP           ]
                        [Cidade Transport       ]=[Cidade        ]
                        [UF Transport           ]=[UF            ]
                        [CGC Transport          ]=[CGC           ]
                        [IE Transport           ]=[IE            ]
                        Moveto [Codigo do Veiculo]
                   Else If V_TRANSP<>[] And [Nome Fantasia Transport]="DIVERSOS"
                           Then Moveto [Razao Social Transport]
                           Else Moveto [Codigo do Veiculo]
                       EndIf
                EndIf
                V_TRANSP=[Codigo da Transportadora]
           Case Field()="Frete por Conta":
                If IsFieldNull([]) 
                   Then Loop 
                EndIf
                Moveto [Numero de Volumes]
           Case Field()="Peso Liquido":     
                Moveto [Numero de Volumes]
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DIGITAD)

;*******************************************************************************
;* Rotina para Calculos de Caracteristicas de Volumes                          *
;*******************************************************************************
Proc CALC_VOLUMES()
Moveto "PedidoI"
NVOL   =0
PESOL  =0
PESOB  =0
DMARCA =""
NMARCA =0
DUNID  =""
NUNID  =0
Scan
  If DMARCA<>[Descricao da Marca]
     Then DMARCA=[Descricao da Marca]
          NMARCA=NMARCA+1
  EndIf
  If DUNID <>[Descricao da Unidade]
     Then DUNID =[Descricao da Unidade]
          NUNID =NUNID+1
  EndIf
  NVOL =NVOL +NDecimal(([Quantidade]*[Volumes]),2)
  PESOL=PESOL+NDecimal(([Quantidade]*[Peso Liquido]),2)
  PESOB=PESOB+NDecimal(([Quantidade]*[Peso Embalagem]),2)

  If [Volumes]>0 And [Volumes]<1
     Then NUNID =NUNID+2
  EndIf
EndScan
Moveto "PedidoC"
If (PESOB+PESOL)>0
   Then [Peso Bruto  ]=PESOB+PESOL
   Else [Peso Bruto  ]=BlankNum()
EndIf
If PESOL>0
   Then [Peso Liquido]=PESOL
   Else [Peso Liquido]=BlankNum()
EndIf
If NVOL>0
   Then If NVOL-Int(NVOL)>0
           Then NVOL=NVOL+1
        EndIf
        [Numero de Volumes]=NVOL
   Else [Numero de Volumes]=BlankNum()
EndIf
If NMARCA>1
   Then [Marca dos Volumes]="DIVERSAS"
   Else [Marca dos Volumes]=DMARCA
EndIf
If Sys_codigo_cliente="0003"
    Then [Especie de Volumes]="VOLUME(S)"
    Else If NUNID>1
         Then [Especie de Volumes]="VOLUME(S)"
         Else [Especie de Volumes]=DUNID
    EndIf
EndIf
Moveto [Numero de Volumes]
Endproc

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
;Proc Estoque()
;Moveto "\\Sistemas\\Estoque\\EstQPrm"
;Locate [PedidoC->Codigo da Empresa], [PedidoI->Codigo do Item]
;While True
;  If Not IsLockRecord()
;     Then QuitLoop
;  EndIf
;EndWhile
;Switch
;  Case CHAVEI=1:
;       [Quantidade Empenhada]=[Quantidade Empenhada]+[PedidoI->Quantidade]
;  Case CHAVEI=8:
;       [Quantidade Empenhada]=[Quantidade Empenhada]-[PedidoI->Quantidade]
;  Case CHAVEI=0:
;       [Quantidade Empenhada]=([Quantidade Empenhada]-QUANT)+[PedidoI->Quantidade]
;EndSwitch
;UnLockRecord
;Moveto "PedidoI"
;EndProc

;*******************************************************************************
;* Rotina p/ Checagem de Estoque Negativo                                     **
;*******************************************************************************
;Proc CHECA_ESTOQUE()
;Private NOVOSALDO

;Moveto "\\Sistemas\\Estoque\\EstqPrm"
;Locate [PedidoC->Codigo da Empresa], [PedidoI->Codigo do Item]
;If Not RetVal
;   Then Mensagem("Item n„o Cadastrado em Ficha de Estoque !")
;        Moveto "PedidoI"
;        Return False
;EndIf

;Moveto "PedidoI"
;Return True
;EndProc

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc Exclusao_C()
Moveto "PedidoI"
CHAVEI=8
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  EXCLUSAO_I()
EndWhile
Moveto "PedidoV"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile
Moveto "PedidoG"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile
Moveto "PedidoC"
Del
EndProc ;(EXCLUSAO_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Exclusao_I()
;; ESTOQUE()
Del
EndProc ;(EXCLUSAO_I)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON,IMPRESSO

IMPRESSO=False

Opcaoc="Gerencial"
If Not IsBlank(PARAM_RELATORIO_S)
   Then Echo Normal
        Echo Off
        ShowPopup " Relatorio " CENTERED
           "~G~erencial" : " Imprime Modelo Gerencial"   :"Gerencial",
           "~E~xpedi‡„o" : " Imprime Modelo p/ Expedi‡„o":"Expedi‡„o",
           "~A~mbos"     : " Imprime Ambos os Modelos"   :"Ambos"
        EndMenu
        To Opcaoc

        Echo off

        If Not RetVal or Opcaoc="Esc"
           Then Return False
        EndIf
EndIf

CODPED=[PedidoC->Numero do Pedido]
UnLockRecord
Do_It!

Dispositivo()
If OK=""
   Then CoEditKey
        Return False
EndIf

PEDIMAGEM = Opcaoc

LoopdoDispositivo=False
If Opcaoc="Ambos" Or Opcaoc="Gerencial"
   Then Play PARAM_RELATORIO
EndIf
If Opcaoc="Ambos" Or Opcaoc="Expedi‡„o"
   Then Moveto "PedidoC"
        PickForm "1"
        Play PARAM_RELATORIO_S
EndIf

IMPRESSO=True

Do_It!
ClearAll

View NoWindow "\\Sistemas\\Cadastro\\Destinat"
View NoWindow "\\Sistemas\\Cadastro\\End_Cob"
View NoWindow "P_Pedido"
Coedit NoWindow "PedidoC"
PickForm "1"

If IMPRESSO
   Then Moveto [Numero do Pedido]
        Locate npedido
        If RetVal
           Then [Pedido Impresso]="S"
        EndIf   
EndIf   

Return True
EndProc

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

CodItem=VSD_I_Codigo_Item
Moveto [Codigo do Item]
If Busca_Lookup("Codigo do Item",CodItem,"")
   Then If Not IsBlank(REG_BUSCA_LOOKUP["Codigo da Grade"])
           Then CodItem=PegaCodigoRaiz(CodItem)
        EndIf

        If SYS_CODIGO_CLIENTE="0239"
           Then CodItem=PegaCodigoRaiz(CodItem)
        EndIf

EndIf


If TrocaTabela
   Then TABPR=[PedidoC->Codigo da Tabela     ]
        CPGTO=[PedidoC->Condicao de Pagamento]
   Else If PARAM_TABPR_ITEM="S"
           Then TABPR=[PedidoI->Codigo da Tabela]
           Else TABPR=[PedidoC->Codigo da Tabela]
        EndIf
        If PARAM_CPGTO_ITEM="S"
           Then CPGTO=[PedidoI->Condicao de Pagamento]
           Else CPGTO=[PedidoC->Condicao de Pagamento]
        EndIf
EndIf   

ITEM_PROMOCIONAL="N"
PesqOk     =False

If PARAM_UTILIZA_TABPR_CLIENTE="S"
   Then Moveto [Lookup_TabPreco_Cliente]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,[PedidoC->Codigo],CodItem
        If RetVal
           Then PesqOk=True
           Else KeyPress "ESC"
        EndIf
EndIf

If PARAM_UTILIZA_TABPR_REPRES="S" AND Not PesqOk
   Then Moveto [Lookup_TabPreco_Repres]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,[PedidoC->Codigo do Representante],CodItem
        If RetVal
           Then PesqOk=True
           Else KeyPress "ESC"
        EndIf
EndIf

If Not PesqOk
   Then Moveto [Lookup_TabPreco_Item]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,CodItem
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If PesqOK
   Then CopyToArray Registro_TabPreco_Item
        ITEM_PROMOCIONAL=[Em Promocao]
        KeyPress "ESC"

        If OpcaoP="Checa"
           Then Return True
        EndIf

        If PARAM_PEGAPRECO_CPAGTO = "S"
           Then 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 If OpcaoP="Altera"
                           Then MSG="Na Tabela de Pre‡o ["+TABPR+"] n„o consta a condi‡„o de pagamento ["+CPGTO+"]!// //"
                                MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !// //"
                                MSG=MSG+"Continuar a altera‡„o nos outros Itens ?"
                                ConfGeral(MSG)
                                If OK<>"S"
                                   Then Return False
                                EndIf
                           Else [Preco Unitario       ]=BlankNum()
                                [Preco Unitario Tabela]=BlankNum()
                        EndIf
                EndIf
           Else [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

        EndIf
   Else KeyPress "ESC"
        If OpcaoP="Altera"
           Then MSG="Item ["+CodItem+"] n„o consta na Tabela de Pre‡o ["+TABPR+"]!// //"
                MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !// //"
                MSG=MSG+"Continuar a altera‡„o nos outros Itens ?"
                ConfGeral(MSG)
                If OK<>"S"
                   Then Return False
                EndIf
           Else [Preco Unitario       ]=BlankNum()
                [Preco Unitario Tabela]=BlankNum()
        EndIf
EndIf

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

Moveto "PedidoI"
Switch
  Case OpcaoP="Novo":
       [Preco Unitario       ]=VSD_I_Preco_Unitario
       [Preco Unitario Tabela]=VSD_I_Preco_Tabela
  Case OpcaoP="Altera":
       If [Preco Unitario]<=0
          Then Undo
               MSG="O Item ["+CodItem+"] esta sem valor na Tabela de Pre‡o ["+TABPR+"]!// //"
               MSG=MSG+"Valor do Item n„o foi alterado, Anote e Verifique !"
               Mensagem(MSG)
          Else [Preco Unitario       ]=VSD_I_Preco_Unitario
               [Preco Unitario Tabela]=VSD_I_Preco_Tabela

               [Codigo da Tabela     ]=TABPR
               [Condicao de Pagamento]=CPGTO

               If [Taxa Desconto Unitario]>0
                  Then [Valor Desconto Unitario]=NDecimal(([Preco Unitario]*[Taxa Desconto Unitario])/100,2)
               EndIf
               If [Quantidade]>0
                  Then [Preco Total]=[Quantidade]*([Preco Unitario]-[Valor Desconto Unitario])
                  Else If [Preco Unitario]>0
                          Then [Preco Total]=[Preco Unitario]-[Valor Desconto Unitario]
                       EndIf
               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 [Tributacao de IPI]<>"D"
                  Then If Not IsBlank([Tributacao de IPI])
                          Then [Aliquota de IPI]=BlankNum()
                               [Valor do IPI   ]=BlankNum()
                       EndIf
               EndIf
               If [Aliquota de IPI        ]>0
                  Then [Valor do IPI]=Round(([Preco Total]*[Aliquota de IPI])/100,2)
               EndIf
       EndIf
EndSwitch

Echo Normal
Echo Off

Return True
EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para checagem desconto unitario                                      *
;*******************************************************************************
Proc Checa_DescontoUnitario()
Private TX_DESCTO_BLOQUEIO_UNIT, DesctoOK, VrBase, TxCalc

DesctoOk=True
If PARAM_BLOQ_DESCTOUNIT="S" Or PARAM_BLOQ_DESCTOUNIT="P"
   Then If Search("VEND",[PedidoC->Descricao da Destinacao])>0
           Then DesctoOk=False
                If PARAM_ALTERA_PRECO="S"
                   Then VrBase=VSD_I_Preco_Tabela
                   Else VrBase=VSD_I_Preco_Unitario
                EndIf
                Tx_Calc=(VSD_I_Valor_Desconto_Unitario/VrBase)*100

                TX_DESCTO_BLOQUEIO_UNIT=TX_DESCTO_BLOQUEIO
                If PARAM_BLOQ_TPDESCTOUNIT="I"
                   Then TX_DESCTO_BLOQUEIO_UNIT=PARAM_BLOQ_TXDESCTOUNIT
                EndIf
                If PARAM_BLOQ_TPDESCTOUNIT="P"
                   Then Moveto [Codigo do Item]
                        If Busca_Lookup("Codigo do Item",[Codigo do Item],"")
                           Then TX_DESCTO_BLOQUEIO_UNIT=REG_BUSCA_LOOKUP["Desconto Maximo"]
                           Else TX_DESCTO_BLOQUEIO_UNIT=0
                        EndIf
                EndIf
                If tx_calc<=TX_DESCTO_BLOQUEIO_UNIT
                   Then DesctoOK=True
                EndIf
         EndIf
EndIf
If Not DesctoOK
   Then MSG="% Desconto concedido no Item acima do permitido !//"
        MSG=MSG+"Desconto m ximo = "+ Ltrim(Format("W6.2,EIC",TX_DESCTO_BLOQUEIO_UNIT)) +"%.  "
        Switch
          Case PARAM_BLOQ_TPDESCTOUNIT="I":MSG=MSG+"Conforme Parƒmetro //"
          Case PARAM_BLOQ_TPDESCTOUNIT="C":MSG=MSG+"Conforme a Condi‡„o de Pagto //"
          Case PARAM_BLOQ_TPDESCTOUNIT="P":MSG=MSG+"Conforme o Item //"
        EndSwitch
        MSG=MSG+"// Verificar Ok !"
        If PARAM_BLOQ_DESCTOUNIT="P"
           Then Libera_Bloqueio(MSG)
                If Ok="S"
                   Then DesctoOk=True
                        MSG="Fatura: "+ORDFAT+", Descto > "+LTrim(Format("W6.2,EIC",Tx_calc))+"%"
                        MSG=MSG+" Item: "+VSD_I_Codigo_Item+" "+VSD_I_Descricao_Item
                        Grava_Logt("#","DesctUnt",MSG)
                EndIf
           Else Mensagem(MSG)
        EndIf
EndIf
Return DesctoOk
EndProc

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Rateio_BC_Itens(TabelaRefC)
Private nitens,TabelaRefC, TabelaRefI, REG_TABELAREFC

;--- Seta Tabelas de Trabalho --------------------------------------------------
Moveto TabelaRefC
Switch
  Case TabelaRefC="PedidoC" : TabelaRefI="PedidoI"
EndSwitch

CopyToArray REG_TABELAREFC ; guarda dados registro mestre
Aguarde("Atualizando rateios nos itens")

Moveto TabelaRefI
nitens=0
Scan
  nitens=nitens+1

  [Taxa Desconto Total      ]=It_txdescto[nitens]        
  [Valor Desconto Total     ]=It_descto[nitens]          
  ;[Valor Frete Total        ]=It_frete[nitens]         
  ;[Valor Seguro Total       ]=It_seguro[nitens]          
  ;[Valor OutDesp Total      ]=It_outdesp[nitens]         

  [ICMS_BC                  ]=It_bc_icms[nitens]       
  [Valor do ICMS            ]=It_vr_icms[nitens]       

  [ICMS_CREDSN_Aliquota     ]=It_aliq_icmscred[nitens]  
  [ICMS_CREDSN_Valor        ]=It_vr_icmscred[nitens]   

  [ICMS_ST_Aliquota         ]=It_aliq_st[nitens]        
  [ICMS_ST_BC               ]=It_bc_st[nitens]         
  [ICMS_ST_Valor            ]=It_vr_st[nitens]         

  [IPI_BC                   ]=It_bc_ipi[nitens]        
  [Valor do IPI             ]=It_vr_ipi[nitens]        

  [ISSQN_BC                 ]=It_bc_issqn[nitens]      
  [Valor do ISSQN           ]=It_vr_issqn[nitens]      

  [PIS_BC                   ]=It_bc_pis[nitens]        
  [PIS_Valor                ]=It_vr_pis[nitens]         

  [COFINS_BC                ]=It_bc_cofins[nitens]     
  [COFINS_Valor             ]=It_vr_cofins[nitens]     

EndScan
If RecordStatus("Locked") Then UnLockRecord EndIf         

Moveto TabelaRefC

LimpAguarde()
EndProc   ; (Rateio_BC_Itens)

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

If IsEmpty("P_Pedido")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Return False
EndIf

UnLockRecord
KeyPress "F7"
IsLockRecord()

Moveto "P_Pedido"
Moveto [Codigo_Empresa]
Locate [PedidoC->Codigo da Empresa]
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        Moveto "PedidoC"
        KeyPress "F7"
        Return False
EndIf
PARAM_DESTINACAO               =[Codigo_Destinacao        ]
PARAM_RELATORIO                =[Script_Impressao         ]
PARAM_RELATORIO_S              =[Script_Impressao_S       ]
PARAM_DATAS_VENCTOS            =[Datas_Vencimentos        ]
PARAM_COR_TECIDO               =[Cor_Tecido               ]
PARAM_TAMANHO                  =[Tamanho                  ]

PARAM_VOLUMES                  =[Volumes                  ]
PARAM_SUBSTICMS                =[Substituicao ICMS        ]  
PARAM_IMPOSTOS                 =[Impostos                 ]
PARAM_TABELA_PRECO             =[Tabela_Preco             ]
PARAM_TRANSPORTADORA           =[Codigo_Transportadora    ]
PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto       ]
PARAM_COMIS_ITEM               =[Comissao_Item            ]
PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]
PARAM_CPGTO_ITEM               =[Utiliza_Cond_Pagto_Item  ]
PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
PARAM_VISITA                   =[Utiliza_Visita           ]
PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
PARAM_CALCIMPOSTOS             =[Utiliza_Calculo_Impostos ]

PARAM_BLOQ_DESCTO              =[Utiliza_Bloqueio_Descto  ]
PARAM_BLOQ_TPDESCTO            =[Tipo_Bloqueio_Descto     ]
PARAM_BLOQ_TXDESCTO            =[Taxa_Bloqueio_Descto     ]

PARAM_DESCUNIT                 =[Desconto Unitario        ]
PARAM_BLOQ_DESCTOUNIT          =[Utiliza_Bloqueio_DesctoUn]
PARAM_BLOQ_TPDESCTOUNIT        =[Tipo_Bloqueio_DesctoUn   ]
PARAM_BLOQ_TXDESCTOUNIT        =[Taxa_Bloqueio_DesctoUn   ]

PARAM_CONDPAGTO                =[Utiliza CP e FP Cliente  ]
PARAM_PEDIDOIMP                =[Altera Pedido PosImpresso]
PARAM_EXIBECUSTO               =[Exibe_Custo_Item_Consulta]

If SYS_CODIGO_CLIENTE="0102" Or
   SYS_CODIGO_CLIENTE="0114"
   Then PARAM_CALC_COMIS_ITEM="S"
   Else PARAM_CALC_COMIS_ITEM="N"
EndIf

Moveto "PedidoC"
KeyPress "F7"
LockRecord
Return True

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
Moveto "PedidoI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoV()
DIGITAV()
Moveto "PedidoV"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
OPCHAVEI=""
While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
          NTABELA_ANTERIOR =[Codigo da Tabela   ]
          NCARREG_ANTERIOR =[Numero_Carregamento]
  EndIf

  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else REPETE=False
              CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              While True
                Controla_EdicaoI()

                If (SYS_CODIGO_CLIENTE="0051" OR SYS_CODIGO_CLIENTE="0228") And CHAVEI=1
                   Then CONFGERAL("Continua com mesmo Item ?")
                        If OK="S"
                           Then CopyToArray Temp

                                REPETE=True
                                While True
                                  End
                                  NITEM = [Item do Pedido]
                                  Down
                                  Moveto [Item do Pedido]

                                  Seta_Sequencia(NITEM,False)
                                  If IsLockRecord()
                                     Then Del
                                          Loop
                                  EndIf
                                  QuitLoop
                                EndWhile

                                Temp["Item do Pedido"]     =[Item do Pedido]
                                Temp["Codigo da Cor_Tecido"]=""
                                Temp["Descricao da Cor_Tecido"]=""
                                Temp["Quantidade"]         =BlankNum()
                                Temp["Quantidade Faturada"]=BlankNum()
                                Temp["Preco Total"]        =BlankNum()
                                Temp["Valor do ICMS"]      =BlankNum()
                                Temp["Valor do IPI"]       =BlankNum()
                                SEQIT                      =[Item do Pedido]

                                CopyFromArray Temp

                           Else REPETE=False
                                QuitLoop
                        EndIf
                   Else QuitLoop
                EndIf
              EndWhile
      EndIf
    EndWhile
    While FACA_DIGITAF
      DIGITAF()
      Rateio_BC_Itens("PedidoC")
      If CHAVEF=9 Then QuitLoop EndIf
      DIGITAD()
      If CHAVED=0
         Then FACA_DIGITAC=False
              FACA_CHAVEI =False
              QuitLoop
      EndIf
    EndWhile
  EndWhile
EndWhile
Moveto "PedidoC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf

SaveTables
EndProc

;*******************************************************************************
;* Rotina Carrega Parametros                                                   *
;*******************************************************************************
Proc Carrega_ParametrosD()

View NoWindow "\\Sistemas\\Cadastro\\P_Dest"
If IsEmpty("\\Sistemas\\Cadastro\\P_Dest")
   Then CoEditKey
        [Utiliza_CGC_Cliente]="N"
        Do_It!
EndIf
PARAM_CGC_CLIENTE   =[Utiliza_CGC_Cliente]
PARAM_CGC_FORNECEDOR=[Utiliza_CGC_Fornecedor]
PARAM_REUTILIZA     =[Reutiliza_Cod      ]
PARAM_INICIAL       =[Cliente_Inicial    ]
PARAM_FINAL         =[Cliente_Final      ]
ClearImage

EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc

View NoWindow "\\Sistemas\\Cadastro\\Destinat"
View NoWindow "\\Sistemas\\Cadastro\\End_Cob"
View NoWindow "P_Pedido"

View NOWINDOW "TbPrIte"
View NOWINDOW "TbPrCpg"
View NOWINDOW "TbprCli"
View NOWINDOW "TbprCit"

View NOWINDOW  "\\Sistemas\\Estoque\\Itens"
View NOWINDOW  "\\Sistemas\\Estoque\\SdEstq"
View NOWINDOW  "\\Sistemas\\Estoque\\EstqPrm"    

EndProc   ; (Carrega_Tabelas)

;***************************+***************************************************
;* Rotina Principal Pedidos                                                    *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""    EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""      EndIf

Carrega_ParametrosD()

NTABELA_ANTERIOR=""
NCARREG_ANTERIOR=""

VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

Array CODIGO[900]
Array QUANTI[900]
Array PRECOU[900]

Array AICMS[10]
Array AIPI[10]

Array VIICMS[10]
Array VIIPI[10]

Array BCICMS[10]
Array BCIPI[10]

Array RICMS[10]
Array RIPI[10]


Array AMVA[10]
Array BCMVA[10]
Array VRIPIMVA[10]

Array Dt_Vencto[12]
Array Vr_Vencto[12]
Array ND_Vencto[12]
Array VC_Vencto[12]

Carrega_Tabelas()
CoEdit NoWindow "PedidoC"
PickForm "F"
OPCAO_FORM="F"

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
