;** BNFCe **********************************************************************
;*  Digitacao de Ordem de Faturamento e Emissao NFCe                           *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 10/08/2020 por Anivel Augusto Rodrigues
;Ultima Alteracao: 08/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes proc opcao()               
;Ultima Alteracao: 08/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FATURA_PEDIDO_ORCAMENTO(), ATUA_PEDIDO_ORCAMENTO()
;Ultima Alteracao: 14/10/2020 por Bruno Carvalho
;Motivo Alteracao: Valida‡Æo de formata‡Æo no [Telefone]
;Ultima Alteracao: 19/10/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes para verificar o status da destina‡Æo 
;Ultima Alteracao: 29/10/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes razao consumidor final
;Motivo Alteracao: Alterado proc Filtrar() p/ FiltrarFatura(), SelecionaFiltro() p/ SelecionaFiltroFatura() e 
;                  LimpaFiltro() p/ LimpaFiltroFatura() e movido p/ Bib_Vend, adicionado op‡Æo para FILTRO "F5"
;Ultima Alteracao: 10/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes IsRegimeSimplesNacional, IsRegimeSimplesNacionalESRB
;Ultima Alteracao: 12/11/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CONFIMPRIME() checagem mesmo numero de nota gerada
;Ultima Alteracao: 18/11/2020 por Bruno Carvalho             
;Motivo Alteracao: Adicionado op‡Æo para inutilizar a nota                   
;Ultima Alteracao: 21/11/2020 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Adicionado op‡Æo para inutilizar a nota                   
;Ultima Alteracao: 02/12/2020 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes VSDGNOMTPPAGTO
;Ultima Alteracao: 07/01/2020 por Bruno/Anivel
;Motivo Alteracao: Ajustes para AtualizaRegistroControle() ao editar ou excluir o registro                                    
;Ultima Alteracao: 07/01/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes nÆo checar ncm paraitem cancelado
;Ultima Alteracao: 14/01/2020 por Bruno/Anivel
;Motivo Alteracao: Ajustes p/ nÆo deixar excluir lan‡amento ao alterar o registro no MODOFILTRAR
;Ultima Alteracao: 02/02/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes validar valor maximo 3000 sem dados do cliente
;Ultima Alteracao: 03/02/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes Carrega_Parametros() p/ carregar parƒmetro somente quando [codigo da empresa]<>""
;Ultima Alteracao: 04/02/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes rodape endere‡o
;Ultima Alteracao: 09/02/2021 por Bruno Carvalho             
;Motivo Alteracao: Ajustes "Echo Normal" e "Echo Off" na no inicio da proc ChecarNFcePendentes()
;Ultima Alteracao: 16/02/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes f6 definir impressora padrÆo 
;Ultima Alteracao: 18/02/2021 por Bruno Carvalho             
;Motivo Alteracao: Removido processo espec¡fico da rotina do FATURA ao pressioanr "F8" e buscar somente expedi‡äes
;Ultima Alteracao: 18/02/2021 por Bruno Carvalho             
;Motivo Alteracao: Desabilitado fun‡Æo "F8" para CUPOM  
;Ultima Alteracao: 19/02/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir em fun‡äes Desconto
;Ultima Alteracao: 26/02/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado RetVal da Tecla ao chamar Desconto (SHIFT+D) na proc DIGITAF()            
;Ultima Alteracao: 27/02/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Frete
;Ultima Alteracao: 15/04/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CupomPresente #0227
;Ultima Alteracao: 16/04/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado biblioteca "Bib_Bloq" 
;Ultima Alteracao: 19/04/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes excluir chavec()      
;Ultima Alteracao: 27/04/2021 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao informar a destina‡Æo, verificado o parƒmetro se [Utiliza_NFCe]="S"
;Ultima Alteracao: 28/04/2021 por Anivel Augusto Rodrigues             
;Motivo Alteracao: Ajustes campos novos destin indicador intermediador
;Ultima Alteracao: 29/04/2021 por Bruno Carvalho             
;Motivo Alteracao: Erro ao entrar no BNFCE quando acessado pelo paradox
;Ultima Alteracao: 30/04/2021 por Bruno Carvalho                           
;Motivo Alteracao: Comentado onde ‚ aplicado EdocLerConfig()
                  
;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Faturamento                         *
;*******************************************************************************
Proc CHAVEC()

FACA_DIGITAC=True
INICIO_PAGINA=True

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

VSDGENDENT    =""
VSDGENDCOB    =""
VSDGTRANSPOR  =""

CHAVE_ACESSO_NFE=""
CHECANFE_AUT=False

While True
  Moveto TabelaControle ; FILTRO
  Moveto [Numero da OF]
  End
  Moveto [Numero da OF]
  ORDFAT=[Numero da OF]

  If OPCAO_FORM=OPCAO_FORM_REL
    Then Down
    Else CtrlPgDn
  EndIf
  Moveto [Numero da OF]

  SetaCorRegistro("Editar")
  While True

  COPIOU_REGISTRO=False
  VSDGNOMTPPAGTO=""
  
  MSGCAMPO=""
  TECLA=strval(Nrecords(TabelaControle))+" registros" 
  
  AguardaTeclasPadraoCF()
  
  Switch
    Case RetVal="F5" : RetVal = MenuFiltrar()
                       Release Vars MfOpcao
    Case RetVal=-33  :
         MSGCAMPO=""
         TECLA=""
     
         Echo Normal
         Echo Off

         ShowPopup " Fun‡”es " CENTERED
          "F4 ~A~tualizar REGISTRADAS": " Atualizar NFCeïs REGISTRADAS como AUTORIZADAS" :"F4",
          "F6 ~I~mpressora           ": " Definir impressra padrÆo para NFCe           " :"F6",
          "~C~ancelar                ": " Cancelar a Opera‡„o              " : "CANCELAR"
         EndMenu
         To MenuVar
         
         Echo Off
         If MenuVar="CANCELAR" or MenuVar="Esc"
            Then Loop
         EndIf                                         
         RetVal=MenuVar
  EndSwitch

  Switch
    ; ---- FILTRO --------------------------------------------------------------
    Case RetVal="MENUFILTRAR" :
         CHAVEC=99
         Del
         Return
    Case RetVal="MENUFILTROTODOS" :
         MODOFILTRAR=False
         CHAVEC=98
         Del
         Return
    ;---------------------------------------------------------------------------
    Case RetVal=-94  : MsgTeclasPadrao()
    Case RetVal="F3" :
         If OPCAO_FORM=OPCAO_FORM_REL
            Then OPCAO_FORM=OPCAO_FORM_MAN
            Else OPCAO_FORM=OPCAO_FORM_REL
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F4" and OPCAO_FORM=OPCAO_FORM_REL :
         del
         if Confgeral("Deseja verificar todas autoriza‡äes pendentes")
            then ChecarNFcePendentes()
         endif
         CHAVEC=5
         Return

    Case RetVal="F6" :
         del
         Carrega_Impressora()
         Quitloop

    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" :
         MODOPAGINA = True
         Del
         While True
           FACA_DIGITAC=True
           INICIO_PAGINA=True

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

           CHECANFE_AUT=False

           If OPCAO_FORM=OPCAO_FORM_REL
              Then PAGINA(TabelaControle,"MR")
              Else PAGINA(TabelaControle,"MT")
           EndIf
           ORDFAT=[Numero da OF]
           Switch
             Case EDITAR="S":
                  If PegaRegistroControle("Numero da OF",ORDFAT) ;FILTRO
                     Then PickForm OPCAO_FORM_MAN
                          Echo Normal
                          Echo Off
                          If Checa_Controle([Numero_Controle_Dia])
                             Then CHAVEC=0
                                  CALC_VENCTO=False
                                  Controla_EdicaoC()
                             Else UnLockRecord
                                  AtualizaRegistroControle("Numero da OF",ORDFAT,MODOPAGINA)
                          EndIf
                  EndIf
             Case EXCLUIR="S":
                  If PegaRegistroControle("Numero da OF",ORDFAT) ;FILTRO
                     Then PickForm OPCAO_FORM_MAN
                          Echo Normal
                          Echo Off
                          If Checa_Controle([Numero_Controle_Dia]) And
                             (IsBlank([Codigo da Empresa]) Or Carrega_Parametros())
                             Then If Not IsBlank([Numero Nota Gerada])
                                     Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !//"+
                                                   "J  Gerou Nota Fiscal N§ "+[Numero Nota Gerada])
                                          UnLockRecord   
                                     Else If QuerExcluir("desta Ordem de Faturamento")
                                             Then DESTIN_ATUALIZA_PEDIDOS=""
                                                  Moveto [Codigo da Destinacao]
                                                  Ativa_Lookup()
                                                  Moveto [Codigo da Destinacao]
                                                  Locate [FaturaC->Codigo da Destinacao]
                                                  If RetVal
                                                     Then DESTIN_ATUALIZA_PEDIDOS=[Atualiza Pedidos]
                                                  EndIf
                                                  KeyPress "ESC"
                                                  GRAVA_LOG=True
                                                  EXCLUSAO_C()
                                             Else UnLockRecord
                                          EndIf
                                  EndIf
                             Else UnLockRecord
                          EndIf                          
                          AtualizaRegistroControle("Numero da OF",ORDFAT,MODOPAGINA)
                  EndIf         
             OtherWise: QuitLoop
           EndSwitch
           
           If OPCAO_FORM=OPCAO_FORM_REL
              Then PickForm OPCAO_FORM
           EndIf
           
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         CHAVEC=9
         Del
         Return
         
    Case Retval="ENTER":  
         If MODOFILTRAR       
            Then If TabelaControle<>TabelaPrincipal
                    Then 
                         ORDFAT = [Numero da OF]
                         del
                         FormKey 

                         Moveto TabelaPrincipal
                         PickForm OPCAO_FORM_REL
                         Moveto [Numero da OF]
                         end
                         Down
                         [Numero da OF] = ORDFAT 
                 EndIf
         EndIf

         MODOPAGINA  = False
         CALC_VENCTO = False

         If Numero_Lancamento("",OPCAO_FORM_REL)
            Then ORDFAT = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC
                 
                 PickForm OPCAO_FORM_MAN    
                 Moveto [Numero da OF]
                 If PROXIMO_LANCTO_REG_ACHOU
                    Then 
                         If Checa_Controle(SYS_CONTROLE_DIA)
                            Then 
                                 CHAVEC=0
                                 If MODOFILTRAR
                                    Then STATUSFILTRO = "UPDATE"
                                 EndIf
                                 return
                         Endif
                    Else 
                         If Checa_Controle(SYS_CONTROLE_DIA)
                            Then 
                                 CHAVEC=1
                                 If MODOFILTRAR
                                    Then STATUSFILTRO = "INSERT"
                                 EndIf
                                 CALC_VENCTO=True
                                 return
                            Else Del
                         Endif
                 EndIf
         endif          

         If MODOFILTRAR
            Then If TabelaControle<>TabelaPrincipal
                    Then FormKey 
                         Moveto TabelaControle
                         FormKey
                 EndIf
         EndIf
         PickForm OPCAO_FORM

         QuitLoop
    EndSwitch                             
  EndWhile
EndWhile

EndProc   ; (ChaveC)
              
;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc CancelarNFCe()

while true
  Echo Normal
  Echo Off
  ShowPopup " Op‡”es " CENTERED
     "Cancelamento ~N~ormal"      : " Cancelamento dentro do prazo 24 horas" :"NORMAL",
     Separator,
     "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
  EndMenu
  To Opcaoc
  echo off
  
  If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
    Then quitloop
  EndIf
  
  TIPO    ="CANCELAR"
  SITUACAO=Opcaoc  
  Play "FT_DESF"

  quitloop         
endwhile

endproc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc InicioDIGITACOk()
private result

result=false

while true

  Switch 
    case Search("RO",[Docto Nota Gerada])>0 :
      MSG="Esta ordem de faturamento gerou o documento:// //"
      MSG=MSG+[Docto Nota Gerada]+"/"+[Numero Nota Gerada]+"-"+[Serie Nota Gerada]+"// //"
      MSG=MSG+"Opera‡Æo de ROMANEIO controlada em outra rotina !// // Verficar !"
      Mensagem(MSG) 
      quitloop

    case Search("NFE",[Docto Nota Gerada])>0 :
      MSG="Esta ordem de faturamento gerou o documento:// //"
      MSG=MSG+[Docto Nota Gerada]+"/"+[Numero Nota Gerada]+"-"+[Serie Nota Gerada]+"// //"
      MSG=MSG+"Opera‡Æo de NF-e controlada em outra rotina !// // Verficar !"
      Mensagem(MSG) 
      quitloop

    case Search("NSE",[Docto Nota Gerada])>0:
      MSG="Esta ordem de faturamento gerou o documento:// //"
      MSG=MSG+[Docto Nota Gerada]+"/"+[Numero Nota Gerada]+"-"+[Serie Nota Gerada]+"// //"
      MSG=MSG+"Opera‡Æo de NFS-e controlada em outra rotina !// // Verficar !"
      Mensagem(MSG) 
      quitloop

    case Search("NCE",[Docto Nota Gerada])=0 and CHAVEC=0: 
      ;-- Tratando outros documentos ----------------------------------------------------------
      MSG="Esta ordem de faturamento gerou o documento:// //"
      MSG=MSG+[Docto Nota Gerada]+"/"+[Numero Nota Gerada]+"-"+[Serie Nota Gerada]+"// //"
      MSG=MSG+"Opera‡Æo nÆo ‚ NFC-e, controlada em outra rotina !// // Verficar !"
      Mensagem(MSG) 
      quitloop

  EndSwitch 

  If CHAVEC=1  
     then Switch
            Case MODOFILTRAR_EMPRESA<>""          : [Codigo da Empresa]=MODOFILTRAR_EMPRESA
            Case Not IsBlank(SYS_EMPRESA_DEFAULT) : [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
            OtherWise                             :     
            if SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR)
               Then [Codigo da Empresa]=SYS_USUARIO_CODEMPR
            EndIf
          EndSwitch  
  endif   
         
  If Not Carrega_Parametros()
     Then quitloop
  EndIf
  
  If [FaturaC->Codigo da Empresa]<>"" And CHAVEC=1
     Then [Codigo da Empresa       ]=PARAM_EMPRESA
          [Codigo da Destinacao    ]=PARAM_DESTINACAO
          [Codigo da Tabela        ]=PARAM_TABELA_PRECO
          [Codigo                  ]=PARAM_CLIENTE
          [Codigo do Representante ]=PARAM_VENDEDOR
          [Condicao de Pagamento   ]=PARAM_COND_PAGTO
          [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
          [Codigo da Transportadora]=PARAM_TRANSPORTADORA
          [Frete por Conta         ]="0"
          [Docto Nota Gerada       ]=PARAM_DOC_NCE
          [Consumidor Final        ]="S"
  EndIf

  result=true
  quitloop
endwhile

return result
endproc


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc DocumentoJaEmitidoOk()
private result

result=false

NOTAFISC =[Numero Nota Gerada]
CODFISC  =[Docto Nota Gerada ]
SERIEFISC=[Serie Nota Gerada ]

while true

  switch
    ;-------------------------------------------------------------------------------------------------------
    case [FaturaC->Sistema Gerador]="C"     :               ; NFC-e j  emitida e autorizada/cancelada
      MSG="NFC-e "+NOTAFISC+" j„ foi autorizada e cancelada no SEFAZ !"
      Mensagem(MSG)
      quitloop

    case [FaturaC->Sistema Gerador]="n!" Or                 ; NFC-e j  emitida e autorizada
         [FaturaC->Sistema Gerador]="s!"    :
      
      switch
        case sys_codigo_cliente="0227":
          opcao1="Cupom de Presente"  dopcao1="Imprimir cupom de presente NFCe "+NOTAFISC  ropcao1="CupomPresente"
        
        otherwise                     :
          opcao1="."  dopcao1=""  ropcao1="Esc"

      endswitch

      switch
        case opcao1<>"." :
      
          Echo Normal
          Echo Off
          ShowPopup " Op‡”es " CENTERED
              opcao1                        : dopcao1                                                 : ropcao1,
              "~C~ancelar a NFCe          " : " Cancelamento da NFCe "+NOTAFISC                       :"CancelarNFCe",
              Separator,
              "[ESC]=~S~air               " : " Ignorar op‡äes"                                       :"Cancela"
          EndMenu
          To Opcaoc
          echo off
      
        otherwise        :
          OpcaoC="CancelarNFCe" 
          
      endswitch
          
      switch
        case OpcaoC="CancelarNFCe" :
          MSG="NFC-e "+NOTAFISC+" j„ foi enviada e autorizada no SEFAZ !"
          MSG=MSG+"// //Deseja CANCELAR a Nota Fiscal?"
          If Not ConfGeral_N(MSG)
             Then quitloop          
          EndIf        
          
          COR_MENSAGEM="ALERTA" 
          MSG="Deseja realmente CANCELAR essa Nota Fiscal?"
          If Not ConfGeral_N(MSG)
           Then quitloop
          EndIf        
          Release Vars COR_MENSAGEM
          
          If PARAM_BLOQUEIA_CANCEL<>"N" 
            Then If Not CHECA_SUPERVISOR()
                    Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !")
                         quitloop
                 EndIf
          EndIf      

          OpcaoC="NFC-e"
          CHECANFE_AUT=True
          CANC=True
          If Checagem_Pagina1() and EdocLerConfig() and EdocConsultar("Situacao") 
             Then
                 switch
                    case Not SituacaoNFeCancelada:
                      Mensagem("Nota AUTORIZADA no SEFAZ. Primeiro, efetue o Cancelamento no eDOC !")
                       
                    case SituacaoNFeCancelada:
                      CancelarNFCe()
    
                  endswitch
          EndIf       
      
        case OpcaoC="CupomPresente" :
          Play "RO_0227P"
      endswitch
      quitloop
      
    ;---------------------------------------------------------------------------
    otherwise:                                                                  ;NFC-e j  emitida e nÆo autorizada       
      CHECANFE_AUT=True
      If Not Checagem_Pagina1()
         Then quitloop
      EndIf
      CHECANFE_AUT=False

      If not EdocLerConfig() or not EdocConsultar("Situacao") 
         Then quitloop
      EndIf

      Switch
       ;------------------------------------------------------------------------
       Case SituacaoNFeDenegada:
        
         OpcaoC="NFC-e"
      
         TIPO    ="CANCELAR"
         SITUACAO="DENEGAR"
         Play "FT_DESF"
         
         COR_MENSAGEM="ALERTA" 
         MSG="NFC-e foi DENEGADA pelo Sefaz !"
         Mensagem(MSG)
         quitloop
      
       ;------------------------------------------------------------------------
       case SituacaoNFeCancelada:
         Mensagem("NFC-e "+NOTAFISC+", AUTORIZADA/CANCELADA no Edoc/SEFAZ !// //Cancele tamb‚m no Sistema !")
         CancelarNFCe()
         quitloop

       case SituacaoNFeAutorizada:
         MSG=    "NFC-e "+NOTAFISC+", AUTORIZADA no Edoc/SEFAZ !"
         Mensagem(MSG)
         quitloop

       case SituacaoNFeRejeitada:
         MSG=    "NFC-e "+NOTAFISC+", REJEITADA no Edoc/SEFAZ !// //DESCARTAR primeiro no eDoc, e tente novamente !"
         Mensagem(MSG)
         quitloop

       case SituacaoNFeRegistrada:
         MSG=    "NFC-e "+NOTAFISC+", REGISTRADA no Edoc/SEFAZ !// //RESOLVER primeiro no eDoc, e tente novamente !"
         Mensagem(MSG)
         quitloop

       case SituacaoNFeRecebida:
         MSG=    "NFC-e "+NOTAFISC+", RECEBIDA no Edoc/SEFAZ !// //RESOLVER primeiro no eDoc, e tente novamente !"
         Mensagem(MSG)
         quitloop

       case Not SituacaoNFeExiste and [FaturaC->Data de Emissao]<today() :
         [Data de Emissao]=Today()
         [Data de Saida  ]=Today()
         [Hora de Saida  ]=Time()
      
         Opcaoc="Alterar"

       otherwise:
          Echo Normal
          Echo Off
          OpcaoC="Reenviar"
          
          ShowPopup " Op‡”es " CENTERED
            "~R~eenviar"   : " Reenviar NFC-e "+[FaturaC->Numero Nota Gerada]          :"Reenviar",
            "~A~lterar"    : " Alterar/Reenviar NFC-e "+[FaturaC->Numero Nota Gerada]  :"Alterar",
            "~I~nutilizar" : " Inutilizar NFC-e "+[FaturaC->Numero Nota Gerada]        :"Inutilizar",
          ;;;"~D~esfazer"  : " Desfazer NFC-e "+[FaturaC->Numero Nota Gerada]+" gerada, para gerar outro numero/modo":"Desfazer",
              Separator,
              "~S~air"     : " Ignorar op‡äes"                                        :"Cancela"
          EndMenu
          To Opcaoc
          
          echo off
             
          If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
             Then quitloop
          EndIf
            
          If Opcaoc="Inutilizar"
             Then COR_MENSAGEM="1"
                  MSG =       Completa("Antes de efetuar esta rotina vocˆ deve primeiramente efetuar a",62," ")+"//"
                  MSG = MSG + Completa("Inutiliza‡Æo da NFC-e no eDOC",62," ")                  
                  Mensagem(MSG)
                  Release Vars COR_MENSAGEM
                  If ConfGeral_N("Deseja realmente inutilizar essa NFC-e ?")
                    Then COR_MENSAGEM="ALERTA" 
                         MSG="Deseja realmente INUTILIZAR essa NFC-e ?"
                         If ConfGeral_N(MSG)
                            Then Echo Normal
                                 Echo Off  
                                 ShowPopup " Op‡Æo " CENTERED
                                   "Inutilizar apenas a NFC-e               " : " Inutilizar apenas a NFC-e                           " : "INUTILIZAR",
                                   "Inutilizar a NFC-e e gerar nova OF      " : " Inutilizar a NFC-e e gerar nova Ordem de Faturamento" : "INUTILIZAR_GERA",
                                   Separator,
                                  "~C~ancelar                               " : " Cancelar a opera‡„o                                 " : "CANCELAR"
                                EndMenu
                                To MenuVar
                                Echo Off
                                If MenuVar="CANCELAR" or MenuVar="Esc"
                                   Then QuitLoop
                                EndIf
                                
                                EdocConsultar("Inutilizada") 
                         EndIf
                  EndIf               
                  Quitloop
          EndIf
          
          If Opcaoc="xxxxDesfazer" 
             Then
                  MSG="Para desfazer esta NFC-e "+NOTAFISC+" gerada em modo "
                  Switch
                    Case SubStr([FaturaC->Sistema Gerador],1,1)="n" : MSG=MSG+"Normal"
                    Case SubStr([FaturaC->Sistema Gerador],1,1)="s" : MSG=MSG+"SCAN"  ; ajustar
                  EndSwitch
                  MSG=MSG+",// voce deve primeiramente:// //"
                  MSG=MSG+"- RESOLVER a situa‡„o da NFC-e no eDOC;          //"
                  MSG=MSG+"- Se poss¡vel DESFAZER a NFC-e no eDOC;          // //"
                  MSG=MSG+"- Desfazer a NFC-e gerada neste Sistema;            //"
                  MSG=MSG+"- Verificar/Corrigir o n£mero da pr¢xima NFC-e a ser//"
                  MSG=MSG+"  gerada, no modo Normal/SCAN conforme necess rio. // //"
                  If ConfGeral_N(MSG+"Deseja realmente desfazer ?")
                    Then COR_MENSAGEM="ALERTA" 
                         MSG="Deseja realmente DESFAZER essa NFC-e ?"
                         If ConfGeral_N(MSG)
                            Then TIPO="DESFAZER"         
                                 Play "FT_DESF"
                         EndIf
                  EndIf               
                  quitloop
          EndIf   
          
          If ModoNFe="Normal" And [FaturaC->Sistema Gerador]="s" 
             Then Mensagem("Reenvio em modo Normal da NFC-e "+NOTAFISC+" n„o ‚ poss¡vel !// //A mesma J  foi enviada em modo Contingˆncia Offline !") 
                  quitloop
          EndIf    
          
          If ModoNFe="SCAN" And [FaturaC->Sistema Gerador]="n" 
             Then Mensagem("Reenvio em modo Contingˆncia Offline da NFC-e "+NOTAFISC+" n„o ‚ poss¡vel !// //A mesma J  foi enviada em modo Normal !") 
                  quitloop
          EndIf    

          [Hora de Saida  ]=Time()
       
      endSwitch
      
  endswitch

  result=true 
  quitloop
endwhile

return result
endproc


;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DIGITAC()

REEMITIR       =False
NOVA_DESTINACAO=False
NOVO_PEDIDO    =False
NOVO_CLIENTE   =False
FACA_CHAVEI    =True
FACA_DIGITAT   =True
Moveto "FaturaC"
Moveto [Numero da OF]
Echo Normal
Echo Off

If INICIO_PAGINA 
   Then If CHAVEC=0
           Then Carrega_Endereco("CARREGA")
                Carrega_Endereco("ATUALIZA")
           Else NOVO_CLIENTE = True
                VSDGENDENT   = ""
                VSDGENDCOB   = ""
                VSDGTRANSP   = ""
        EndIf
        BibVend_SetaVariaveis("FaturaC","Forma de Pagamento")

        Carrega_Transportador("CARREGA_FATURA","Redespacho")
        Carrega_Transportador("CARREGA_FATURA","Transportador")
        Carrega_Transportador("ATUALIZA","Transportador")
        Carrega_Transportador("ATUALIZA_FORM","")
                       
        if not InicioDIGITACOk()
           then
                if CHAVEC=1 then EXCLUSAO_C() endif
           
                CHAVEC=9
                Return
        endif          

        switch
          case [IndPres ]="1" : IndPresDescricao="PRESENCIAL"
          case [IndPres ]="4" : IndPresDescricao="NFC-e entrega domic¡lio"
          otherwise           : IndPresDescricao=""
        endswitch
   
        if not isblank([FaturaC->Numero Nota Gerada]) 
           then
                if not DocumentoJaEmitidoOk()
                   then  
                        CHAVEC=9
                        Return
                endif
                If Opcaoc="Reenviar"
                   Then Moveto "FaturaC"
                        REEMITIR=True
                        Return
                EndIf
        endif
EndIf

If CHAVEC=0 Or Not INICIO_PAGINA
   Then Moveto [Codigo]
        NOVA_DESTINACAO=False
   Else 
        [Data de Emissao]=Today()
        [Data de Saida  ]=Today()
        [Hora de Saida  ]=Time()

        switch
          case isblank([Codigo da Empresa])    : moveto [Codigo da Empresa      ]
          case isblank([Codigo da Destinacao]) : moveto [Codigo da Destinacao   ]
          otherwise                            : moveto [Codigo                 ]
        endswitch
        NOVA_DESTINACAO=True
EndIf

FACA_CHAVEDV =True
FACA_CHAVEI  =True
FACA_DIGITAT =True
INICIO_PAGINA=False

CODCLIANT=[Codigo]

While True

  TECLA=" Esc=Retornar  "

  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  "
     Else TECLA=TECLA + "             "
  EndIf
  TECLA=TECLA + "                                    PgDn"

  MSGCAMPO=Field()
  If Field()="Endereco"               
	   Then MSGCAMPO="Endere‡o: Logradouro, Numero, Complemento"
  EndIf   
  If Field()="Telefone" Or Field()="Celular"                
     Then If [UF]="EX"
             Then MSGCAMPO="+PP XX NNNN-NNNN"
             Else MSGCAMPO="Telefone: (XX) XXXX-XXXX ou (XX) X XXXX-XXXX"
          EndIf 
  EndIf
  If Field()="Codigo da Tabela"
     Then MSGCAMPO="C¢digo da Tabela de Pre‡o"
  EndIf
  If Field()="Tipo Pessoa"
     Then MSGCAMPO=MSGCAMPO+": Fisica, Juridica"
  EndIf
  If Field()="CGC"
     Then MSGCAMPO="CNPJ/CPF"
  EndIf
  If Field()="IE"
     Then MSGCAMPO="Informe o N§, ISENTO ou NAOCONTRIBUINTE p/ Inscri‡„o Estadual"
  EndIf
  If Field()="Codigo"
     Then MSGCAMPO="C¢digo do Destinatario"
  EndIf

  If Field()="Codigo da Destinacao"     Or
     Field()="Codigo do Representante"  Or
     Field()="Codigo da Tabela"         Or
     Field()="Codigo"                   Or
     Field()="Cidade"                   Or
     Field()="UF"                      
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  switch
      case Field()="Codigo da Destinacao"  : Monta_Opcoes("Destinacoes","NFCE")
      case Field()="Codigo da Empresa"     : Monta_Opcoes("Empresas","") 
  endswitch

  Prompt TECLA
  Wait Field
       Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN"

  Switch
    Case RetVal="F1":
       If Field()="Codigo da Destinacao"         
          Then If Seleciona_Opcoes("Destinacoes","CR")
                  Then Moveto [Codigo da Destinacao]
               EndIf
       Endif

       If Field()="Codigo do Representante"  Or
          Field()="Codigo da Tabela"         Or
          Field()="Codigo"                   Or
          Field()="Cidade"                   Or
          Field()="UF"                      
           Then CONSULTAF1()
       EndIf        
       
       If Field()="Codigo da Empresa"         
          Then Seleciona_Opcoes("Empresas","CR")
       Endif 
                             
  Case RetVal="PGDN":

       If isblank([Codigo da Empresa])
          Then fastmsg("Empresa inv lida !")
               Loop
       EndIf
       If isblank([Codigo])
          Then fastmsg("Pessoa inv lida !")
               Loop
       EndIf
       If isblank([Codigo da Tabela])
          Then fastmsg("Tabela Pre‡o inv lida !")
               Loop
       EndIf
       If isblank([Codigo da Destinacao]) or
          [Tipo Movimento Estoque]<>"S"   or
          search([CFO],"5101,5102,5103,5104,5115,5401,5403,5405,5653,5656,5657,5933")=0
          Then fastmsg("Destina‡Æo/CFOP inv lida !")
               Loop
       EndIf
       if [CGC]<>"00.000.000/0000-00" and
          [CGC]<>"000.000.000-00" 
          then If Not Checa_CGC_CPF_Formatado([CGC]) 
                  Then Fastmsg("Pessoa do Exterior use 00.000.000/0000-00 ou 000.000.000-00 !")
                       Loop
               endif        
       endif
       Switch
         Case Search(".",[CGC])=4: [Tipo Pessoa]="FISICA"  
         Case Search(".",[CGC])=3: [Tipo Pessoa]="JURIDICA"
       EndSwitch

       [Consumidor Final]="S"

       If [Codigo]<>CODCLIANT
          Then NOVO_CLIENTE = True
               CODCLIANT = [Codigo]
               If [IndPres]="4"
                  Then Carrega_Transportador("CARREGA_FATURA","Transportador")
                       Carrega_Transportador("CARREGA_CLIENTE","Redespacho")
                       Carrega_Transportador("ATUALIZA_FORM","") 
               EndIf
       EndIf

       If Checagem_Pagina1()
          Then QuitLoop 
       EndIf
                  
  Case Retval="FIELDVIEW" or Retval="F35":
       EDITFIELD()
  Case Retval="DEL":
       If CHAVEC=0
          Then If Not IsBlank([Numero Nota Gerada])
                  Then Mensagem("Esta Ordem de Faturamento n„o pode ser excluida !// J  Gerou NFCe N§ "+[Numero Nota Gerada])
                  Else If MODOFILTRAR 
                          Then FastMsg("Modo [FILTRO] fun‡Æo nÆo permitida !")
                               Loop
                          Else If QuerExcluir("desta Ordem de Faturamento")
                                  Then GRAVA_LOG=True
                                       EXCLUSAO_C()
                                       CHAVEC=9
                                       QuitLoop
                               EndIf
                       EndIf
               EndIf
       EndIf
  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Destinacao" Or Field()="Codigo da Empresa":
            If CHAVEC=1 
               Then If QuerDesfazer("F")
                       Then EXCLUSAO_C()
                            CHAVEC=9
                            QuitLoop
                       Else Loop
                    Endif
            EndIf   

            If QuerDesfazer("F")
               Then Undo
            EndIf
            CHAVEC=9
            QuitLoop
       
       Case Field()="Codigo"                   : moveto [Codigo da Destinacao   ]

       Case Field()="Razao Social"             : moveto [Codigo      ]  
       Case Field()="CGC"                      : moveto [Razao Social]
       Case Field()="Codigo do Representante"  : moveto [Codigo]
       Case Field()="Codigo da Tabela"         : 
            switch
              case PARAM_UTILIZAVENDEDOR="S"  : moveto [Codigo do Representante]
              otherwise                       : moveto [Codigo                ] 
            endswitch     
       OtherWise:
            Left
       EndSwitch
       
  Case Retval="ENTER":
       If IsBlank([])
          Then If Field()="Codigo" Or
                  Field()="Codigo da Destinacao" Or
                  Field()="Codigo do Representante" Or
                  Field()="Codigo da Tabela"
                  Then fastmsg("Valor inv lido !")
                       Loop
               EndIf
       EndIf
 
       Switch
       Case Field()="Codigo da Empresa":
            If Not Checa_Opcoes("Empresas",[])
               Then Mensagem("Empresa inv lida !")
                    Loop
               Else If InicioDIGITACOk()
                       Then Moveto [Codigo da Destinacao]
                            If MODOFILTRAR_EMPRESA<>""
                               Then If [Codigo da Empresa]<>MODOFILTRAR_EMPRESA
                                       Then Mensagem("Empresa informada difere da empresa cadastrada para esse usu rio!")
                                            Moveto [Codigo da Empresa]
                                    EndIf
                            EndIf
                    EndIf
            EndIf 
       Case Field()="Codigo da Destinacao": 
            If isblank([Codigo da Empresa])
               Then fastmsg("Empresa inv lida !")
                    Loop
            EndIf
            GetRecord "Destin" [Codigo da Destinacao] To REG_DESTIN
            If Retval
               Then Switch
                      Case REG_DESTIN["Inativo Destin"]="S" : 
                           FastMsg("Destina‡Æo "+[Codigo da Destinacao]+" est  inativa!")
                           Loop  
                      Case REG_DESTIN["Utiliza_NFCe"]<>"S" :
                           FastMsg("Destina‡Æo sem parƒmetro definido para NFCe!")
                           Loop  
                    EndSwitch
            EndIf
            switch
              case [IndPres ]="1" : IndPresDescricao="PRESENCIAL"
              case [IndPres ]="4" : IndPresDescricao="NFC-e entrega domic¡lio"
              otherwise           : IndPresDescricao=""
            endswitch
            moveto [Codigo]
            
       Case Field()="Codigo": 
            [Consumidor Final        ]="S"
            [Codigo do Representante ]=PARAM_VENDEDOR
            
            If NOVO_CLIENTE And [IndPres]="4"
               Then Carrega_Transportador("CARREGA_FATURA","Transportador")
                    Carrega_Transportador("CARREGA_CLIENTE","Redespacho")
                    Carrega_Transportador("ATUALIZA_FORM","")
            EndIf   
                
            Moveto [Razao Social]

       Case Field()="CGC":  
            if [CGC]<>"00.000.000/0000-00" and
               [CGC]<>"000.000.000-00" 
               then If Not Checa_CGC_CPF_Formatado([]) 
                       Then Fastmsg("Pessoa do Exterior use 00.000.000/0000-00 ou 000.000.000-00 !")
                            Loop
                    endif        
            endif
            Switch
              Case Search(".",[CGC])=4: [Tipo Pessoa]="FISICA"  
              Case Search(".",[CGC])=3: [Tipo Pessoa]="JURIDICA"
            EndSwitch
            moveto [IE]

       Case Field()="CEP"      : 
          If Not Isblank([CEP]) And CHAVEC = 1 
               Then Busca_Cep([CEP])
                    [Endereco] = BUSCA_CEP_ENDERECO
                    [Bairro  ] = BUSCA_CEP_BAIRRO
                    [Cidade  ] = BUSCA_CEP_CIDADE
                    [UF      ] = BUSCA_CEP_UF
                    Release Vars BUSCA_CEP_ENDERECO, BUSCA_CEP_BAIRRO, BUSCA_CEP_CIDADE, BUSCA_CEP_UF
            EndIf
            Moveto [Endereco]

       Case Field() = "UF":
            If Not IsBlank([Cidade]) or
               Not IsBlank([UF]) 
                Then 
                     getrecord "\\sistemas\\cadastro\\cidades" [FaturaC->Cidade],[FaturaC->UF] to reg_cidades 
                     if not retval
                        then fastmsg("Cidade/UF n„o Cadastrada !")
                             loop
                     EndIf
            Endif    
            moveto [Telefone]                      

       Case Field()="Telefone":             
            If Not Valida_Telefone(Upper(Field()))
               Then Moveto [Telefone]
               Else switch
                      case PARAM_UTILIZAVENDEDOR="S"      : moveto [Codigo do Representante]
                      case PARAM_ALTERA_TABELA_PRECO="S"  : moveto [Codigo da Tabela       ]
                      otherwise                           : moveto [Codigo                 ]
                    endswitch 
            EndIf       
       Case Field()="Codigo do Representante":
            If Not Verifica_Representante([FaturaC->Codigo do Representante])
               Then Mensagem("Representante/Vendedor Inativo !")
                    Loop
            EndIf 
            switch
              case PARAM_ALTERA_TABELA_PRECO   ="S"  : moveto [Codigo da Tabela       ]
              otherwise                              : moveto [Codigo                 ]
            endswitch
            
       Case Field()="Codigo da Tabela":
            moveto [Codigo]

       OtherWise:
            Right
       EndSwitch
  EndSwitch
EndWhile
EndProc  ;(DigitaC)      

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()
FACA_DIGITAF=True

If REEMITIR
   Then CHAVEI=9
        Return
EndIf

Moveto "FaturaI"
While True
  Moveto "FaturaI"
  Usando_Expedicao =False
  
  SomatoriaDosItens()
  
  Moveto [Item da OF]
  End
  NITEM = [Item da OF]
  Down
  [Numero da OF]=ORDFAT
  Moveto [Item da OF]

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

  if []>500
     then Echo Normal
          Mensagem("NÆo informar mais de 500 itens no documento ROM/NFe !// //Verificar !")
          Echo Off 
  endif

  Sw_Item_Pesquisado=""
  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True

    MSGCAMPO=""
    TECLA= " Esc=Retornar  F7=Paginar   Alt+F=Fun‡”es                 PgUp  PgDn"
    Prompt TECLA

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

    If RetVal=-33
       Then 
            MSGCAMPO=""
            TECLA=""
       
            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",
            ; "F8  ~F~atura Pedido/Or‡amento/Expedi‡Æo/Requisi‡Æo/Programa‡Æo/Devol" :
            ;  " Faturar Pedido/Or‡amento/Expedi‡Æo/Requisi‡Æo/Programa‡Æo/Devolu‡Æo" : "F8",
              "F9  ~M~odo                             " : " Ativa/Desativa modo c¢digo 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="F3":
         Del
         Moveto [Item da OF]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item da OF]
         Inicia_Registro()
         If PARAM_DADOS_ITEM_RESUMO="S"
            Then DigitaI_Resumo()
            Else DigitaI()
         EndIf   
         QuitLoop
         
    Case RetVal="F5":
         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
             Then Del
                  FastMsg("Fun‡„o desabilitada, expedi‡„o j  foi informada!")
                  QuitLoop
         EndIf 
         VSDGEMPRESA=[FaturaC->Codigo da Empresa]
         If IsBlank([FaturaC->Codigo da Tabela])
            Then VSDGTABELA =PARAM_TABELA_PRECO
            Else VSDGTABELA =[FaturaC->Codigo da Tabela]
         EndIf
         Del
         Moveto "FaturaC"
         UnLockRecord
         KeyPress "F7"
         IsLockRecord()
         OP_INSERT_ITEM=True
         VSDG_PESQ_SWCONS = True
         If PARAM_EXIBECUSTO="N"
            Then Play "SW_CONSS"
            Else Play "SW_CONS"
         EndIF

         Moveto "FaturaC"
         Moveto [Numero da OF]
         Locate ORDFAT
         KeyPress "F7"
         
         IsLockRecord()
         Moveto "FaturaI"

         If Sw_Item_Pesquisado="" Then QuitLoop EndIf

         If Existe_Pedido()
            Then QuitLoop
         EndIf

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

         SEQIT=[Item da OF  ]
         CHAVEI=1
         [Numero da OF    ]=ORDFAT
         [Item da OF      ]=SEQIT
         [Codigo do Item  ]=Sw_Item_Pesquisado
         [Codigo da Tabela]=VSDGTABELA
         Item_Ins_Consulta=True

         Return
    Case Retval="F9":
         Del
         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
            Then FastMsg("Fun‡„o desabilitada, expedi‡„o j  foi informada!")
                 QuitLoop
         EndIf
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="F8":
         Del
         QuitLoop
         
         ;Desabilitado fun‡Æo para CUPOM
         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
            Then FastMsg("Fun‡„o desabilitada, expedi‡„o j  foi informada!")
                 QuitLoop
         EndIf
         
         MSGCAMPO=""
         TECLA=""
     
         Echo Normal
         Echo Off
         
         ShowPopup " Op‡”es " CENTERED
           "~P~edido                      " : " Carregar itens do pedido                       ":"PEDIDO",
           separator,
           "~E~xpedi‡„o c/Pedido          " : " Carregar itens da ordem de expedi‡„o com Pedido":"EXPEDICAO",       ;Origem da Expedi‡Æo = "IC"  e "IQ"
           "Expedi‡„o ~s~/Pedido          " : " Carregar itens da ordem de expedi‡„o sem Pedido":"EXPEDICAOS",      ;Origem da Expedi‡Æo = "ES"  , "EC e "ER"
           "Expedi‡„o c/~O~F              " : " Carregar itens da ordem de expedi‡„o com OF"    :"EXPEDICAOOF",     ;Origem da Expedi‡Æo = "OF"
           separator,
           "~C~upom Fiscal                " : " Carregar itens do cupom fiscal"                 :"CUPOMFISCAL",
           "~R~equisi‡Æo                  " : " Carregar itens da requisi‡Æo"                   :"EXPEDICAOREQ",    
           "Programa‡Æo/Externa[Confec‡Æo]" : " Carregar itens da programa‡Æo"                  :"EXPEDICAOPROG",   
           Separator,
           "~C~ancela                     " : " Cancelar"                                       :"Cancela"
         EndMenu
         To Opcaoc          

         If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
            Then QuitLoop
         EndIf  
         
         Switch
           Case Opcaoc="PEDIDO"      : FATURA_PEDIDO_ORCAMENTO()
                                                                      
           Case Opcaoc="EXPEDICAO"   :
             switch
               case SYS_CODIGO_CLIENTE="0345" Or 
                    SYS_CODIGO_CLIENTE="0388" Or 
                    SYS_CODIGO_CLIENTE="0427" Or 
                    SYS_CODIGO_CLIENTE="0390" Or 
                    SYS_CODIGO_CLIENTE="0396" Or 
                    SYS_CODIGO_CLIENTE="0408" Or
                    SYS_CODIGO_CLIENTE="0419" Or
                    SYS_CODIGO_CLIENTE="0444" Or
                    SYS_CODIGO_CLIENTE="0429"    :
                 ROTINA_EXPEDICAO="ETIQ"
                 Play("Ft_Expiq")

               case SYS_CODIGO_CLIENTE="0377"    :
                 ROTINA_EXPEDICAO="PED"
                 Play("Ft_ExpOF")
               
               otherwise                         :
                 ROTINA_EXPEDICAO=""
                 Play("Ft_Exped")
                
             endswitch

           Case Opcaoc="EXPEDICAOS"  :    
                If not isblank([FaturaC->Numero do Pedido])
                   then 
                        Mensagem("O pedido "+[FaturaC-> Numero do Pedido]+" est  informado na nota !") 
                        QuitLoop     
                   else 
                        Switch
                          Case SYS_CODIGO_CLIENTE="0377" : ROTINA_EXPEDICAO="SEM_PED"
                                                           Play("Ft_ExpOF")

                          Case PARAM_EXPED_TIPO="C"      : Play("Ft_ExpdC")

                          Case PARAM_EXPED_TIPO="R" and
                               PARAM_EXPED_AGRUPA ="S"   : Play("Ft_ExpdC") ;Clientes [0361] e [0343]

                          Case PARAM_EXPED_TIPO="R" and
                               PARAM_EXPED_AGRUPA<>"S"   : Play("Ft_ExpdR") 

                          OtherWise                      : Play("Ft_Expds")
                          
                        EndSwitch
                EndIf        

           Case Opcaoc="EXPEDICAOOF"    : ROTINA_EXPEDICAO="OF"
                                          Play("Ft_ExpOF")

           Case Opcaoc="EXPEDICAOREQ"   : Play("Ft_REQ")

           Case Opcaoc="EXPEDICAOPROG"  : 
             if sys_cliente_confec<>""
                then Play("Ft_PROG")
                else fastmsg("Op‡Æo nÆo diponivel!")
                     quitloop 
             endif

           Case Opcaoc="CUPOMFISCAL" :
             If SYS_CODIGO_CLIENTE<>"0294" 
                Then Mensagem("Op‡„o n„o liberada !//Verificar com o Suporte Vise !")
                     QuitLoop 
                Else GetRecord "Destin" [FaturaC->Codigo da Destinacao] To REG_DESTIN
                     If Not RetVal
                        Then QuitLoop
                        Else Switch 
                               Case REG_DESTIN["CFO"]<>"5929"                                                 : 
                                    Mensagem("Processo liberado apenas para o CFOP 5929!")
                                    QuitLoop 
                               Case REG_DESTIN["Atualiza Estoque"]<>"S" And REG_DESTIN["Gera Duplicata"]<>"S" :  
                                    Mensagem("Destina‡Æo que ATUALIZA ESTOQUE e ATUALIZA FINANCEIRO nÆo ‚ permitido neste processo!")
                                    QuitLoop 
                               OtherWise                                                                      :
                                    Play("FT_CUP")
                             EndSwitch
                     EndIf        
             EndIf             
           
         EndSwitch
         If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
            Then If [FaturaC->Numero da Expedicao]<>"" And OPCHAVEI="CDB" Then OPCHAVEI="CDC" EndIf
         EndIf
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Item da Of]
         If RecordStatus("New")=True
            Then MENSAGEM("A Ordem de Faturamento deve ter pelo menos 1(um) Item Ok !")
                 QuitLoop
         EndIf
         
        ;If SYS_CODIGO_CLIENTE="0204" And  [Codigo da Tabela]="00002"
        ;    Then If [Item da Of]<6 And SYS_NIVEL_USUARIO ="P" 
        ;           Then MENSAGEM("A Ordem de Faturamento deve ter pelo menos 6(seis) Itens Ok !")
        ;                 QuitLoop
        ;         EndIf
        ;EndIf
        
        If [Tipo do Item]<>"C"
           Then Home
                Moveto [Codigo do Item]  
                While True
                  If Len([NCM]) <> 8 and [Situacao_item]<>"C"    
                     Then MENSAGEM("O NCM do Item ["+[Codigo do Item]+"], est  incorreto!// Verifique ! ")
                          QuitLoop
                     Else If AtLast()
                             Then QuitLoop
                             Else Skip
                          EndIf   
                  EndIf        
                EndWhile
        EndIf
        Moveto [Item da OF]
                   
        If Not ISBlank([FaturaC->Numero do Pedido]) And DESTIN_ATUALIZA_PEDIDOS="S" And [FaturaC->Tipo Movimento Estoque]="S" 
           Then GetRecord "\\Sistemas\\Vendas\\PedidoC" [FaturaC->Numero do Pedido] To REG_BUSCA_LOOKUP
                If Retval
                   Then If REG_BUSCA_LOOKUP["Situacao do Pedido"]="ABERTO" 
                           Then Mensagem("O Pedido "+[FaturaC->Numero do Pedido]+" continua em "+REG_BUSCA_LOOKUP["Situacao do Pedido"]+", faturado parcial !")
                        EndIf
                EndIf
                Moveto "FaturaI"   
        EndIf

         ;---- Verifica ocorrˆncias de falhas de itens do(s) pedido(s) --------- 
         If Not Agrupa_Pedido("VALIDA")
            Then If (PARAM_BLOQ_ITEM="S" And (CHAVEC=1 Or [FaturaC->Numero Nota Gerada]="") And [FaturaC->Numero do Pedido]<>"") 
                    Then PED_ERRO = False
                         Home
                         Scan
                           If Rtrim([Numero Pedido_Orcamento])="" Or Rtrim([Item Pedido_Orcamento])=""
                              Then If Not PED_ERRO Then PED_ERRO = True EndIf 
                                   MSG = Completa("Sequˆncia "+Rtrim([Item da OF])+" do Item "+Format("W10",[Codigo do Item])+
                                                  " est  com dados incorretos.",72," ")+"////"+
                                         Completa("Numero do Pedido: "+Format("W6",[Numero Pedido_Orcamento]),72," ")+"//"+
                                         Completa("Item do Pedido  : "+Format("W3",[Item Pedido_Orcamento]),72," ")+"////"+
                                         Completa("Recarregue o pedido para a inclus„o correta dos itens!",72," ")
                                   Mensagem(MSG)
                           EndIf
                         EndScan
                         If PED_ERRO 
                            Then Release Vars PED_ERRO
                                 QuitLoop
                            Else Release Vars PED_ERRO     
                         EndIf
                 EndIf
         EndIf 
         ;----------------------------------------------------------------------
         CHAVEI=9
         Return
    Case RetVal="ESC" Or Retval="PGUP":
         Del
         CHAVEI=9   
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         FACA_DIGITAT=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_DIGITAF=True
           
           PAGINA("FaturaI","MR")

           SEQIT=[Item da OF]
           If EDITAR="S"
              Then If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
                      Then FastMsg("Edi‡„o n„o permitida!")
                      Else CHAVEI=0
                           Controla_EdicaoI()
                   EndIf
              Else If EXCLUIR="S"
                      Then If PARAM_BLOQ_ITEM_EXPED = "S" And [FaturaC->Numero da Expedicao]<>""
                              Then FastMsg("Exclus„o n„o permitida!")
                              Else If QuerExcluir("")
                                      Then CHAVEI=8
                                           GRAVA_LOG=True
                                           CANCELA_I()
                                           Release Vars GRAVA_LOG
                                      Else UnLockRecord
                                   EndIf
                           EndIf        
                      Else QuitLoop
                   EndIf
           EndIf
           
           SomatoriaDosItens()
           
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":  
         If Existe_Pedido()
            Then Del
                 QuitLoop
         EndIf

         If PARAM_BLOQ_ITEM_EXPED="S" And [FaturaC->Numero da Expedicao]<>""
            Then FastMsg("N„o ‚ poss¡vel incluir itens a partir desta tecla/op‡„o.")
                 Del
                 QuitLoop
         EndIf
         
         SEQIT=[]
         If Isblank(SEQIT) 
             Then Del 
                  QuitLoop 
         EndIf
         If SEQIT>(NITEM+1)
            Then NITEM=NITEM+1
                 SEQIT=NITEM
         EndIf   
         If Not Seta_Sequencia(SEQIT,True)
            Then Del
                 QuitLoop
         EndIf
         
         If SEQIT>900
            Then Mensagem("N£mero m ximo de itens permitidos ‚ 900 !")
                 Del
                 QuitLoop
         EndIf

         Del
         Locate ORDFAT,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else 
                 CHAVEI=1
                 End
                 Down
                 [Numero da OF]=ORDFAT
                 [Item da OF  ]=SEQIT
                 UnLockRecord
                 Locate ORDFAT,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

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

If REEMITIR
   Then CHAVEI=9
        Return
EndIf

Moveto "FaturaI"
CODBAR_ANT="*****"

SomatoriaDosItens()

While True

  Moveto [Item da OF]
  End
  NITEM = [Item da OF]
  Down
  [Numero da OF]=ORDFAT
  Moveto [Item da OF]

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

  While True
    Item_Ins_Consulta=False
    
    MSGCAMPO=""

    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 If Not Existe_Pedido()
                       Then CDBarras()
                            QuitLoop
                    EndIf
            EndIf
    EndIf        
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()          

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

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

Registro_Item("Ler")
CalcularPrecoTotal_Item()
Registro_Item("Gravar")

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

Estoque()

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

Sound 400 400
EndProc   ; (ChaveCdBar)

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

Item_ok=False
Switch
  Case Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog" :
       If Origem="Codigo_Barras_ShowDialog"
          Then Dados_Item = VSD_I_Codigo_Item
               Dados_QTD  = BlankNum()
         Else CODIGO_BARRA = Dados_Item     
       EndIf
       
       If IsAssigned(CODBAR_ANT)  And 
          IsAssigned(Dados_Item)  And 
          IsAssigned(Dados_QTD)   And 
          CODIGO_BARRA=Dados_Item And 
          Dados_Item=CODBAR_ANT   And 
          SYS_CODIGO_CLIENTE<>"0239"
          Then REG_ITEMOF["Item da OF"]=[Item da OF]
               REG_ITEMOF["Quantidade"]=Dados_QTD
               CopyFromArray REG_ITEMOF
       
               Echo Off 
               Return True
       EndIf
       
       Moveto [Codigo do Item]
       Ativa_Lookup()
       Moveto [Codigo de Barras]
       Locate Dados_Item
       If RetVal
          Then Moveto [Codigo do Item]
          Else If Codigo_Barras2(Dados_Item,"")
                  Then PEGA_DADOS_CODITEM = CODIGO_BARRA2
                  Else PEGA_DADOS_CODITEM = Dados_Item
               EndIf
               Moveto [Codigo do Item]
               Locate PEGA_DADOS_CODITEM
               Release Vars PEGA_DADOS_CODITEM
       EndIf
             
  Case Origem="Cor_Tecido" :                                                     
       Moveto [Codigo do Item]
       Ativa_Lookup()
       Moveto [Referencia]
       If SYS_CODIGO_CLIENTE="0388" Or 
          SYS_CODIGO_CLIENTE="0427" Or
          SYS_CODIGO_CLIENTE="0390" Or
          SYS_CODIGO_CLIENTE="0345" Or 
          SYS_CODIGO_CLIENTE="0396" Or
          SYS_CODIGO_CLIENTE="0408" Or
          SYS_CODIGO_CLIENTE="0419" Or
          SYS_CODIGO_CLIENTE="0444" Or
          SYS_CODIGO_CLIENTE="0429"
          Then TIPO_ITEM = "T"
          Else TIPO_ITEM = "P"
       EndIf   
       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
       
       ;---- 2¦ Tentativa ao localizar o item pelo tipo do item ----------------
       If Not RetVal And (SYS_CODIGO_CLIENTE="0388" Or SYS_CODIGO_CLIENTE="0427" Or SYS_CODIGO_CLIENTE="0419" Or SYS_CODIGO_CLIENTE="0429" Or
                          SYS_CODIGO_CLIENTE="0444")  
          Then TIPO_ITEM = "P"
               Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido

               ;---- 3¦ Tentativa: Materia Prima -------------------------------
               If Not RetVal And (SYS_CODIGO_CLIENTE="0388")  
                  Then TIPO_ITEM = "M"
                       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
               EndIf
               
               ;---- 4¦ Tentativa: Aplica‡Æo Direta ----------------------------
               If Not RetVal And (SYS_CODIGO_CLIENTE="0427")  
                  Then TIPO_ITEM = "D"
                       Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
               EndIf
       EndIf
       
       ;---- Verifica Codigo do Item de acordo com o Tamanho -------------------
       If RetVal                             And 
          PARAM_TAMANHO="S"                  And 
          SYS_CODIGO_CLIENTE="0391"          And 
          IsAssigned(VSD_I_Tamanho_Variacao) And 
          Not IsBlank(VSD_I_Tamanho_Variacao)
          Then Retval=False 
               While VSD_I_REFERENCIA         = [Referencia          ] And 
                      TIPO_ITEM               = [Tipo do Item        ] And
                      VSD_I_Codigo_Cor_Tecido = [Codigo da Cor_Tecido]
                 If [DTamanho]=VSD_I_Tamanho_Variacao
                    Then Retval = True
                         QuitLoop
                 EndIf 
                 Skip
                 If Eot() Then QuitLoop EndIf
               EndWhile 
       EndIf
  OtherWise:
       Moveto [Codigo do Item]
       Ativa_Lookup()
       ModoLocalizarItem("LOCALIZAR",VSD_I_Codigo_Item,"")
      
EndSwitch
If RetVal
   Then CopyToArray regItens           
        KeyPress "ESC"

        While True
         VSD_I_Codigo_Item=regItens["Codigo do Item"]
        
         ;---- C¢digo de Barras ------------------------------------------------
         If Origem = "Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOM
                 If RetVal
                    Then If REG_ITEMCOM["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                 QuitLoop
                         EndIf        
                    Else Mensagem("Item n„o Cadastrado !")
                         QuitLoop
                 EndIf
                  
                 If PARAM_DUPLICIDADE_ITEM And Not IsBlank(VSD_I_Codigo_Item)
                    Then NITEMOF=[Item da OF]
                         Del
                         Moveto [Codigo do Item]
                         Locate VSD_I_Codigo_Item
                         If RetVal
                            Then End Down
                                 Mensagem("O Item ["+VSD_I_Codigo_Item+"], j  est  lan‡ado nesta OF !")
                                 QuitLoop
                         EndIf
                         End Down
                         Moveto [Item da OF]
                         [Item da OF]=NITEMOF
                 EndIf
                 
                 ITOK=True
                 [Quantidade]=Dados_QTD             
                 CODIGO_BARRA=Dados_Item      
         EndIf

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

         CAMPO_ANT = Field()
         ITEM_OF   = [Item da OF]
         
         If Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then Pega_Preco("Cod_Barras")
            Else Pega_Preco("Novo")
         EndIf
         
         Moveto [Item da OF]
         Locate ITEM_OF
         Moveto Field CAMPO_ANT
         Release Vars CAMPO_ANT,ITEM_OF
         
         If Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog"
            Then If [Preco Unitario]<=0
                   Then Mensagem("Item sem tabela de pre‡o !")
                        QuitLoop
                 EndIf
         EndIf               

         Ajusta_Dados_Item() 

         Item_Ok=True

         If (Origem="Codigo_Barras" Or Origem="Codigo_Barras_ShowDialog") And Isassigned(Dados_Item)
            Then CODBAR_ANT=Dados_Item
                 CopyToArray REG_ITEMOF
         EndIf

         QuitLoop
       EndWhile
       
  Else KeyPress "ESC"
       Mensagem("Item n„o Cadastrado !")
EndIf

Echo Off
Return Item_ok
EndProc



;*******************************************************************************
;* Rotina Ajustar Dados do Item                                                *
;*******************************************************************************
Proc Ajusta_Dados_Item()
private sFCI, sSIMBOLOGIA, regdestinat, pessoa_regimetributario, pessoacontribuinte,regncmuf

;--- tratando ICMS -------------------------------------------------------------
switch
 case [Tipo do Item]="C": ; Servi‡o

   [Aliquota de ICMS      ]=BlankNum()
   [Aliquota de IPI       ]=BlankNum()

   If IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
      Then 
          [PIS_CST        ]="99"
          [PIS_Aliquota   ]=BlankNum()

          [COFINS_CST     ]="99"
          [COFINS_Aliquota]=BlankNum()
   EndIf        

   If SYS_CODIGO_CLIENTE="0121" or 
      SYS_CODIGO_CLIENTE="0034" or    
      SYS_CODIGO_CLIENTE="0092"    
      Then [ISSQN_Municipio]=3122306
           [ISSQN_UF       ]="MG"
         ;;Switch
         ;;  Case Substr([FaturaC->CFO],1,1)="5" : [CFO]="5949"
         ;;  Case Substr([FaturaC->CFO],1,1)="6" : [CFO]="6949"
         ;;EndSwitch  
   EndIf
   
 otherwise:
   [Tributacao de ISSQN     ]="N"
   [Aliquota de ISSQN       ]=BlankNum()

   VSD_I_CST_Item      = [Tipo Tributacao   ]
   VSD_I_TICMS         = [Tributacao de ICMS]
   
   ;-- Remessa p/ Industrializa‡Æo ------------------------------- 
   If SYS_CODIGO_CLIENTE="0227" And [CFO]="5901" And Search("INDUST",[FaturaC->Descricao da Destinacao])>0
      Then [Tipo Tributacao        ]=substr([Tipo Tributacao],1,1)+"50"
           [Tributacao de Icms     ]=TRIB_ICMS
           [Tributacao de IPI      ]="N"
           [IPI_CST                ]="99"
           [Aliquota de IPI        ]=BlankNum()
           [PIS_CST                ]="99"
           [PIS_ALIQUOTA           ]=BlankNum()
           [COFINS_CST             ]="99"
           [COFINS_ALIQUOTA        ]=BlankNum()
    EndIf   

   ;-- pega dados primeiro como "DEBITO/CREDITO" -----------------
   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
   ;--------------------------------------------------------------

   Switch
     Case IsRegimeSimplesNacional(TPEMPR):
       getrecord "\\sistemas\\cadastro\\destinat" [FaturaC->Codigo] to regdestinat
       if retval
          then pessoa_regimetributario=regdestinat["Regime_Tributario"]
          else pessoa_regimetributario=""
       endif
       pessoacontribuinte=true 
       switch
         case [FaturaC->Tipo Pessoa]="FISICA"                  : pessoacontribuinte=false
         case [FaturaC->IE         ]="ISENTO"                  : pessoacontribuinte=false
         case [FaturaC->IE         ]="NAOCONTRIBUINTE"         : pessoacontribuinte=false
         case IsRegimeSimplesNacional(pessoa_regimetributario) : pessoacontribuinte=false
       endswitch

       Switch
         Case [FaturaC->Tipo Movimento Estoque]="S": ; Saida    
       
           if Search("DEVOL",[FaturaC->Descricao da Destinacao])>0  
              then [CSOSN]="900"
           endif

           if Search("MOSTR",[FaturaC->Descricao da Destinacao])>0  Or
              Search("BRIND",[FaturaC->Descricao da Destinacao])>0  Or
              Search("BONIF",[FaturaC->Descricao da Destinacao])>0 
              then [CSOSN]="400"
           endif   

           if Search("VEND",[FaturaC->Descricao da Destinacao])>0 and
              not pessoacontribuinte
              then
                   Switch
                     Case [CSOSN]="101": [CSOSN]="102" 
                     Case [CSOSN]="201": [CSOSN]="202" 
                   EndSwitch
           endif        

         Case [FaturaC->Tipo Movimento Estoque]="E": ; Entrada    
       
           [CSOSN]="400"

       EndSwitch

       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("FATURA",[Tributacao de ICMS],[Codigo MVA])

         Case [CSOSN]="202" Or [CSOSN]="203":
              [ICMS_CREDSN_Aliquota]=BlankNum()
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
               [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
               
         Case [CSOSN]="500":
              [ICMS_CREDSN_Aliquota]=BlankNum()
               If OPCAO_RED_BCICMS="1"
                  Then [Aliquota Reduzida BCICMS]=BlankNum()
               EndIf
               if Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And 
                  [FaturaC->Tipo Movimento Estoque]="E"
                  then
                       [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                       Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
               endif

         OtherWise:                          
              [ICMS_CREDSN_Aliquota]=BlankNum()
              [MVA                 ]=BlankNum()
              [ICMS_ST_Aliquota    ]=BlankNum()                  

       EndSwitch

     OtherWise: ;-- DEBITRO/CREDITO -----
       pessoacontribuinte=true 
       switch
         case [FaturaC->Tipo Pessoa]="FISICA"             : pessoacontribuinte=false
         case [FaturaC->IE         ]="ISENTO"             : pessoacontribuinte=false
         case [FaturaC->IE         ]="NAOCONTRIBUINTE"    : pessoacontribuinte=false
       endswitch

       Switch
         Case (TribCST="10" Or TribCST="30" Or TribCST="70"):
           switch
             case sys_Codigo_Cliente="0112" and not pessoacontribuinte and
                  Search("VEND",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S": 
               getrecord "\\sistemas\\estoque\\ncmuf" [NCM],[FaturaC->UF] to regncmuf
               if retval
                  then if regncmuf["FCP_Aliquota"]>0 and [Aliquota de ICMS]>0
                          then [Aliquota de ICMS]=[Aliquota de ICMS]+regncmuf["FCP_Aliquota"]
                       endif   
               endif
               [Tipo Tributacao   ]=SubStr([Tipo Tributacao],1,1)+"00"                
               [Tributacao de Icms]="D"
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()

             case sys_Codigo_Cliente="0112" and pessoacontribuinte and
                  Search("VEND",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S": 
               [ICMS_ST_Aliquota]=[Aliquota de ICMS]
               [Aliquota de ICMS]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])

             case [FaturaC->Tipo Pessoa]="FISICA":
               [Tipo Tributacao   ]=SubStr([Tipo Tributacao],1,1)+"00"                
               [Tributacao de Icms]="D"
               [MVA               ]=BlankNum()
               [ICMS_ST_Aliquota  ]=BlankNum()

             otherwise                     :
               [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
               Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
             
           endswitch

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

         OtherWise:     
           switch
             case sys_Codigo_Cliente="0112" and not pessoacontribuinte and
                  Search("VEND",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S": 
               getrecord "\\sistemas\\estoque\\ncmuf" [NCM],[FaturaC->UF] to regncmuf
               if retval
                  then if regncmuf["FCP_Aliquota"]>0 and [Aliquota de ICMS]>0 
                          then [Aliquota de ICMS]=[Aliquota de ICMS]+regncmuf["FCP_Aliquota"]
                       endif   
               endif
             case sys_Codigo_Cliente="0112" and pessoacontribuinte and
                  Search("VEND",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="S": 
               [Aliquota de ICMS]=UF_ALIQUOTA_ICMS_INTERNA
               [MVA             ]=BlankNum()
               [ICMS_ST_Aliquota]=BlankNum()
               
             otherwise:
              [MVA             ]=BlankNum()
              [ICMS_ST_Aliquota]=BlankNum()
             
           endswitch

       EndSwitch

       [CSOSN               ]="900"
       [ICMS_CREDSN_Aliquota]=BlankNum()
       [ICMS_CredSN_Valor   ]=BlankNum()

   EndSwitch
 
endswitch

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

[CFO            ]=CFO_C
[Tipo Tributacao]=CFOP_TPTRIB
;-------------------------------------------------------------------------------

;--- tratando IPI/Entrada ------------------------------------------------------
if [FaturaC->Tipo Movimento Estoque]="E" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0
   then
        switch
          case [IPI_CST ]="50" : [IPI_CST ]="00"
          case [IPI_CST ]="51" : [IPI_CST ]="01"
          case [IPI_CST ]="52" : [IPI_CST ]="02"
          case [IPI_CST ]="53" : [IPI_CST ]="03"
          case [IPI_CST ]="54" : [IPI_CST ]="04"
          case [IPI_CST ]="55" : [IPI_CST ]="05"
        endswitch
endif

;--- tratando PIS/COFINS -------------------------------------------------------
If IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
    Then 
         [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
         [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
Endif
   
if not IsRegimeSimplesNacional(TPEMPR) 
   then
        if [FaturaC->Tipo Movimento Estoque]="E"
           then
                switch
                  case Search("DEVOL",[FaturaC->Descricao da Destinacao])>0:
                    switch
                      case [PIS_CST ]="01" : [PIS_CST ]="50"   [COFINS_CST ]="50"
                      case [PIS_CST ]="06" : [PIS_CST ]="73"   [COFINS_CST ]="73"
                      case [PIS_CST ]="07" : [PIS_CST ]="71"   [COFINS_CST ]="71"
                      case [PIS_CST ]="08" : [PIS_CST ]="74"   [COFINS_CST ]="74"
                      case [PIS_CST ]="09" : [PIS_CST ]="72"   [COFINS_CST ]="72"
                      case [PIS_CST ]="49" : [PIS_CST ]="98"   [COFINS_CST ]="98"
                    endswitch
                  
                  otherwise:
                   [PIS_CST        ]  ="99"  [PIS_ALIQUOTA   ]=BlankNum() 
                   [COFINS_CST     ]  ="99"  [COFINS_ALIQUOTA]=BlankNum() 
                    
                endswitch
        endif
Endif
        
;-------------------------------------------------------------------------------
If SYS_CODIGO_CLIENTE = "0388" or
   SYS_CODIGO_CLIENTE = "0427"  
  Then 
       if Search("VEND",[FaturaC->Descricao da Destinacao])>0  And  
          SubStr([CFO],1,1)="6"                                And 
          [FaturaC->Consumidor Final]="S"                      And
          ( [FaturaC->Tipo Pessoa]="FISICA"  or [FaturaC->IE]="NAOCONTRIBUINTE" ) 
          then if [Tipo do Item]="P" and [CFO]<>"6107" then [CFO]="6107" endif
               if [Tipo do Item]="T" and [CFO]<>"6108" then [CFO]="6108" endif
       endif
endif
         
;--- tratando zona franca manaus -- 21/10/2016 -------------------------------
if not IsRegimeSimplesNacional(TPEMPR) and
   Motivo_Desoneracao_ICMS<>"" And Aliquota_ICMS_Desonerado>0 and
   not IsBlank([FaturaC->ISUFRAMA])
   Then 
        if ( search([CFO],"6109,6110,6120,6122,6123,6151,6152")>0 or 
             search([CFO],"6651,6652,6654,6655,6658,6659,6910")>0 )
             then

                  if sys_codigo_cliente="0388" Or   ; Manutex
                     sys_codigo_cliente="0427" Or   ; Primetex
                     sys_codigo_cliente="0274" Or   ; Podium
                     sys_codigo_cliente="0390"      ; Polar  
                     then if substr([Tipo Tributacao],1,1)="0" or
                             substr([Tipo Tributacao],1,1)="5"   
                             then 
                                  [Tipo Tributacao   ]=substr([Tipo Tributacao],1,1)+"40"
                                  [Tributacao de Icms]="I"
                                  [Aliquota de ICMS  ]=BlankNum()                                
                          endif
                  endif   
                 
                  if search(SubStr([Tipo Tributacao],2,2),"20,30,40,70,90")>0 
                     then
                          [PIS_CST        ]="06"  [PIS_ALIQUOTA   ]=0 
                          [COFINS_CST     ]="06"  [COFINS_ALIQUOTA]=0
                  endif         
        endif
EndIf

;---- Rotina aplicada em 27.03.2014 -----------------         
If ( not IsRegimeSimplesNacional(TPEMPR) And [FaturaC->Tipo Movimento Estoque]="S" And
     Search("VEND",[FaturaC->Descricao da Destinacao])>0  And SubStr([CFO],1,1)="6" ) or             
   ( not IsRegimeSimplesNacional(TPEMPR) And [FaturaC->Tipo Movimento Estoque]="E" And
     Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And SubStr([CFO],1,1)="2" )                
   Then 
        If SubStr([Tipo Tributacao],2,2) = "00" Or
           SubStr([Tipo Tributacao],2,2) = "10" Or
           SubStr([Tipo Tributacao],2,2) = "20" Or
           SubStr([Tipo Tributacao],2,2) = "70" Or
           SubStr([Tipo Tributacao],2,2) = "90" 
           Then If SubStr([Tipo Tributacao],1,1)="1" Or
                   SubStr([Tipo Tributacao],1,1)="2" Or
                   SubStr([Tipo Tributacao],1,1)="8" Or
                   SubStr([Tipo Tributacao],1,1)="3"
                   Then 
                        [Aliquota de ICMS] = 4
                        
                        if sys_codigo_cliente="0345" ; vitoria textil
                           then
                               If regItens["Codigo da Marca"]="100" ;;;xxxxxxxxx a definir
                                  Then [Aliquota de ICMS] = UF_ALIQUOTA_ICMS
                               EndIf
                        endif       
                EndIf
        EndIf         
EndIf 
                                   
;----  Aplicado p/ Empresa #0373# e #0352# em 09.09.2015 ------
If ( SYS_CODIGO_CLIENTE="0318" Or SYS_CODIGO_CLIENTE="0370" Or SYS_CODIGO_CLIENTE="0373" Or 
     SYS_CODIGO_CLIENTE="0352" Or SYS_CODIGO_CLIENTE="0376" Or SYS_CODIGO_CLIENTE="0374" )  
   And Search("VEND",[FaturaC->Descricao da Destinacao]) > 0 And [FaturaC->UF]="MG"
  Then
       If [Tributacao de Icms]="D" Or [Tributacao de Icms]="S" 
          Then If SubStr([Tipo Tributacao],1,1)<>"1" And
                  SubStr([Tipo Tributacao],1,1)<>"2" And
                  SubStr([Tipo Tributacao],1,1)<>"8" 
                  Then 
                       If [Tipo Tributacao]="300" Or (SYS_CODIGO_CLIENTE="0376" And [Tipo Tributacao]="500")
                          Then [Aliquota de ICMS] = 18
                          Else [Aliquota de ICMS] = regItens["Aliquota de ICMS"]
                       EndIf   
               EndIf
               
               If SubStr([Tipo Tributacao],1,1)="2" Or 
                  (SYS_CODIGO_CLIENTE="0352" And Search("VEND",[FaturaC->Descricao da Destinacao]) > 0 And [FaturaC->UF]="MG")
                  Then If regItens["Codigo da Marca"]="001" ;;;Pl sticos
                          Then [Aliquota de ICMS] = 18
                       EndIf
              EndIf
       EndIf    
EndIf 

If SYS_CODIGO_CLIENTE = "0227"  ; mostruario
   then
        If ([CFO]="5912" Or [CFO]="6912") ;Remessa para Mostru rio
          Then 
               [Tributacao de IPI      ]="N"
               [IPI_CST                ]="99"
               [Aliquota de IPI        ]=BlankNum()
               [PIS_CST                ]="99"
               [PIS_ALIQUOTA           ]=BlankNum()
               [COFINS_CST             ]="99"
               [COFINS_ALIQUOTA        ]=BlankNum()
        EndIf            
        If ([CFO]="1913" Or [CFO]="2913") ;Retorno de Mostru rio
          Then 
               [Tributacao de IPI      ]="N"
               [IPI_CST                ]="49"
               [Aliquota de IPI        ]=BlankNum()
               [PIS_CST                ]="99"
               [PIS_ALIQUOTA           ]=BlankNum()
               [COFINS_CST             ]="99"
               [COFINS_ALIQUOTA        ]=BlankNum()
        EndIf            

       if [FaturaC->Codigo da Empresa]="0003" and [IPI_CST]="51"
          then [IPI_CST          ]="99"
               [Tributacao de IPI]="O"
       endif
endif


If SYS_CODIGO_CLIENTE = "0274"  ; mostruario, demonstra‡Æo
  Then 
       If [CFO]="1913"
          Then [Tipo Tributacao           ]="090"
               [Tributacao de ICMS        ]="N"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [IPI_CST                   ]="03"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf

       If [CFO]="5912"
          Then [Tipo Tributacao           ]="050"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [IPI_CST                   ]="53"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
       
        If [CFO]="6912"
          Then [Tipo Tributacao           ]="041"
               [Tributacao de ICMS        ]="N"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [Aliquota de ICMS          ]=0
               [ICMS_BC                   ]=0
               [Valor do ICMS             ]=0
               [IPI_CST                   ]="53"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
       
       If [CFO]="6923" or [CFO]="5923"
          Then [Tipo Tributacao           ]="090"
               [Tributacao de ICMS        ]="O"
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf

EndIf  

If SYS_CODIGO_CLIENTE = "0413"  ; mostruario
  Then 
       If [CFO]="1913" or [CFO]="2913"
          Then [Tipo Tributacao           ]="050"
               [Tributacao de ICMS        ]="O"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [IPI_CST                   ]="03"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="99"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="99"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
       If [CFO]="5912" or [CFO]="6912"
          Then [Tipo Tributacao           ]="050"
               [Tributacao de ICMS        ]="N"
               [ICMS_BC                   ]=0
               [Aliquota de ICMS          ]=0
               [Aliquota Reduzida BCICMS  ]=0
               [IPI_CST                   ]="53"
               [Tributacao de IPI         ]="N"
               [Aliquota de IPI           ]=0
               [PIS_CST                   ]="08"
               [PIS_ALIQUOTA              ]=0 
               [COFINS_CST                ]="08"
               [COFINS_ALIQUOTA           ]=0 
       EndIf
EndIf  


;-- Ajusta Descricao -----------------------------------------------------------
If SYS_CODIGO_CLIENTE = "0319"
  Then If len([Descricao do Item])<=30
          Then [Descricao do Item]=Completa([Descricao do Item],31," ")+regItens["Codigo Fornecedor"]
       EndIf
EndIf  

;-- Descricao Complementar ---------------------------------------------------
If SYS_CODIGO_CLIENTE = "0410" or
   SYS_CODIGO_CLIENTE = "0000"   
   then If regItens["Descricao Complementar"]<>""
           Then sDESCRCOMPL=regItens["Descricao Complementar"]
                If Not IsBlank([Informacoes_Adicionais])
                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sDESCRCOMPL   
                   Else [Informacoes_Adicionais] = sDESCRCOMPL
                EndIf   
        EndIf
endif   

;----- Ajustes Informa‡äes Adicionais em 05.12.2016 ------------------
GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Item] To REG_ITEMCOMP
If RetVal
   Then 
        ;-- Informac‡äes Adicionais --------------------------------------------------
        If REG_ITEMCOMP["Informacoes_Adicionais"] <> ""
           Then if Not isblank([Informacoes_Adicionais])
                   then [Informacoes_Adicionais] = [Informacoes_Adicionais]  + "-" + REG_ITEMCOMP["Informacoes_Adicionais"]
                   Else [Informacoes_Adicionais] = REG_ITEMCOMP["Informacoes_Adicionais"]
                endif   
        EndIf
        
        ;-- FCI ----------------------------------------------------------------------
        If REG_ITEMCOMP["FCI"] <> ""
          Then sFCI="RESOLUCAO DO SENADO FEDERAL N. 13/12 FCI " + REG_ITEMCOMP["FCI"]
          
               If Search("RESOLUCAO DO SENADO",[Informacoes_Adicionais])=0
                  Then 
                       If Not IsBlank([Informacoes_Adicionais])
                          then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - "  + sFCI
                          Else [Informacoes_Adicionais] = sFCI 
                       EndIf    
               EndIf               
        EndIf
        
EndIf

;-- Simbologia ---------------------------------------------------------------
If SYS_CODIGO_CLIENTE="0236" Or SYS_CODIGO_CLIENTE="0260" Or SYS_CODIGO_CLIENTE="0298" Or
   SYS_CODIGO_CLIENTE="0051" Or SYS_CODIGO_CLIENTE="0228"  
   Then 
        If regItens["Descricao da Simbologia"] <> ""
           Then sSIMBOLOGIA="Simbol: "+regItens["Descricao da Simbologia"]    
                If regItens["Pais"]<>""
                   Then sSIMBOLOGIA = sSIMBOLOGIA + " - " + regItens["Pais"]
                EndIf
                If Not IsBlank([Informacoes_Adicionais])
                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sSIMBOLOGIA   
                   Else [Informacoes_Adicionais] = sSIMBOLOGIA
                EndIf   
        EndIf
EndIf

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

;-- Codigo de Barras ---------------------------------------------------------
If SYS_CODIGO_CLIENTE="0227" Or
   SYS_CODIGO_CLIENTE="0294"
   Then 
        If regItens["Codigo de Barras"]<>"" and regItens["Tipo Codigo_Barras"]<>"A-EAN13"
           Then sCDBARRA="EAN13 "+regItens["Codigo de Barras"]
                If Not IsBlank([Informacoes_Adicionais])
                   Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " - " + sCDBARRA          
                   Else [Informacoes_Adicionais] = sCDBARRA
                EndIf   
        EndIf
EndIf

Release Vars sFCI,sSIMBOLOGIA,regiten_tec,sCDBARRA,sDESCRCOMPL

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

If SYS_CODIGO_CLIENTE="0418" and (PARAM_COMIS_ITEM="S" or PARAM_COMIS_ITEM="P")
   then [Comissao do Item]=[Faturac->Comissao do Representante]
endif   

endproc



;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private Janela, WinArray5  ;

TECLA=" Esc=Retornar  "
MSGCAMPO=""
Temp=True
Old_Entrega=[Entrega]      

Mouse Show
If INICIO_DIALOG
   Then If CHAVEI=0
           Then Switch                
                  Case PARAM_DADOS_ITEM_RESUMO="S"     : Campo="I_Quantidade"
                  Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                  Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                  OtherWise                            : Campo="I_Quantidade"
                EndSwitch
                
                TABANT=VSD_I_TABELA
           Else Campo="I_Codigo_Item"
        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=True Then Campo="I_Seq" EndIf

If Disparo="OPEN"
   Then
        TiraSombraShowDialog()
EndIf        

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

   If PARAM_DADOS_ITEM_RESUMO="S"
      Then If Evento["KeyCode"] = -33
              Then Echo Normal
                   Echo Off
                   ShowPopup " Fun‡”es " CENTERED
                   "[F4] Alterar ~D~escri‡„o      ": " Alterar Descri‡„o do Item          " :"F4",
                   "[F5] Alterar ~P~re‡o          ": " Alterar Pre‡o do Item              " :"F5", 
                   "[F7] Alterar Modo ~L~ocalizar ": " Alterar Modo de Localizar o Item   " :"F7",
                   Separator, 
                   "~C~ancelar                  ": " Cancelar a Opera‡„o                " : "CANCELAR"
                  EndMenu
                  To MenuVar
                  Echo Off  
                  If MenuVar<>"CANCELAR" and MenuVar<>"Esc"
                     Then Evento["KeyCode"]=MenuVar
                  EndIf 
           EndIf
      Else If Evento["KeyCode"] = -33
              Then Echo Normal
                   Echo Off
                   ShowPopup " Fun‡”es " CENTERED
                   "[F3]    Alterar Desconto          ": " Alterar Desconto do Item            " :"F3",
                   "[F4]    Alterar ~D~escri‡„o       ": " Alterar Descri‡„o do Item           " :"F4",
                   "[F5]    Alterar ~P~re‡o           ": " Alterar Pre‡o do Item               " :"F5",
                   "[F7]    Alterar Modo ~L~ocalizar  ": " Alterar Modo de Localizar o Item    " :"F7", 
                   "[F8]    ~I~nforma‡”es Adicionais  ": " Informa‡”es Adicionais do Item NFe  " :"F8",
                   Separator,
                   "~C~ancelar                       ": " Cancelar a Opera‡„o                  " : "CANCELAR"
                  EndMenu
                  To MenuVar
                  Echo Off  
                  If MenuVar<>"CANCELAR" and MenuVar<>"Esc"
                     Then Evento["KeyCode"]=MenuVar
                  EndIf 
           EndIf
   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
                Case Evento["KeyCode"] = -81:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else Down
                     EndIf
              EndSwitch
              If Mover_Reg=True
                 Then SEQIT=[Item da OF]
                      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 CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -61 Or Evento["KeyCode"] = "F3"):
           if PARAM_DADOS_ITEM_RESUMO<>"S"
              then DigitaDescto_Item()
           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 Or Evento["KeyCode"] = "F5")  And Not F5_ATIVADO:
          If PARAM_ALTERA_PRECO<>"P"
             Then FastMsg("Fun‡„o n„o configurada para essa op‡„o")
             Else If PARAM_ALTERA_PRECO="P"
                     Then If Checa_Supervisor()
                             Then F5_ATIVADO=True
                                  Campo_Ant=Campo
                                  Campo="I_Preco_Unitario"
                          EndIf
                  EndIf                
          EndIf        
          
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","FATURA")
          
     Case (Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8"):    
          If PARAM_DADOS_ITEM_RESUMO="N"
             Then Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item NFe")
                  VSD_I_InfAdic=[Informacoes_Adicionais]
          EndIf
     Case Evento["KeyCode"] = -81 : ; PGDN
          If PARAM_DADOS_ITEM_RESUMO="N"
             Then If Campo="I_CSOSN"    Or
                     Campo="I_CST_Item" Or
                     (Campo="I_TISSQN" and VSD_I_Tipo_Item="C")
                     Then AcceptDialog
                  EndIf   
          EndIf                    
     Case Evento["KeyCode"] = 3 and sys_Codigo_Cliente="0377"and VSD_I_UN_Item="KG" And 
          (Campo="I_Quantidade" Or Campo="I_Quantidade_Solicitada"): 
          Campo_Ant = Campo 
          Play "CalcPCKG"
          Campo=Campo_Ant
          Release Vars Campo_Ant
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             (Campo="I_Codigo_Cor_Tecido" And PARAM_DADOS_ITEM_RESUMO<>"S") 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_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido]   EndIf
                  
                  If Campo="I_Tabela"             
                     Then FI_TABELAAnt=VSD_I_Tabela
                          FC_TABELAAnt=[FaturaC->Codigo da Tabela]
                          Moveto "FaturaC"
                          Moveto [Codigo da Tabela]  
                  EndIf
                  If Campo="I_CFOP"               
                     Then FI_CFOAnt=VSD_I_CFOP
                          FC_CFOAnt=[FaturaC->CFO]
                          Moveto "FaturaC"
                          Moveto [CFO]
                  EndIf
                  If Campo="I_MUNSERV"             
                     Then FI_MUNSERVAnt=VSD_I_MUNSERV
                          FI_UFSERVAnt =VSD_I_UFSERV
                          FC_MUNSERVAnt=[FaturaC->Cidade]
                          FC_UFSERVAnt =[FaturaC->UF]
                          Moveto "FaturaC"
                          Moveto [Cidade]  
                  EndIf

                  Switch
                    Case Campo="I_CST_Item":          
                      CSTNew=VSD_I_CST_Item 
                      VSD_I_CST_Item=Checa_CST("ICMS",[FaturaC->Tipo Movimento 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",[FaturaC->Tipo Movimento 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",[FaturaC->Tipo Movimento 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",[FaturaC->Tipo Movimento 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     =[FaturaC->CFO] 
                                      [FaturaC->CFO]=FC_CFOAnt
                                      Moveto "FaturaI"
                                      [FaturaI->CFO]=FI_CFOAnt
                                Case Campo="I_Tabela":               
                                      FI_TABELAAnt     =[FaturaC->Codigo da Tabela] 
                                      [FaturaC->Codigo da Tabela]=FC_TABELAAnt
                                      Moveto "FaturaI"
                                      [FaturaI->Codigo da Tabela]=FI_TABELAAnt
                                Case Campo="I_MUNSERV":               
                                      [FaturaC->Cidade   ]=FC_MUNSERVAnt
                                      [FaturaC->UF       ]=FC_UFSERVAnt
                                      Moveto "FaturaI"
                                      [FaturaI->ISSQN_Municipio]=Reg_ConsultaF1["Codigo_Cidade"]
                                      [FaturaI->ISSQN_UF       ]=Reg_ConsultaF1["UF"] 
                              EndSwitch
                         Else If Campo="I_CFOP" Or Campo="I_Tabela" Or Campo="I_MUNSERV"  
                                 Then Moveto "FaturaI"
                              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_UN_Item        = [Unidade Fiscal   ]
                          VSD_I_Tipo_Item      = [Tipo do 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_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=[FaturaI->ISSQN_Municipio]
                           VSD_I_UFSERV =[FaturaI->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 "FaturaI"
         EndIf
         If Campo="I_Codigo_Cor_Tecido" And PARAM_DADOS_ITEM_RESUMO="S" And LOCALIZA_CODIGO="LOC_CODREF" 
            Then Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                 Seleciona_Opcoes_Cor("Codigo da Cor_Tecido","")
                 Moveto [Codigo do Item]                   
         EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Temp=False
          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_Codigo_Cor_Tecido" :
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else CancelDialog
                 EndIf
            Case Campo="I_Tamanho_Variacao":
                 Switch
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Tabela":
                 Switch
                   Case PARAM_TAMANHO="S"          : Campo="I_Tamanho_Variacao"
                   Case PARAM_UTILIZA_VARIACOES    : Campo="I_Tamanho_Variacao"
                   Case PARAM_COR_TECIDO="S"       : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Quantidade_Solicitada" : 
                 Switch
                   Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                   Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                   Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                   Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch

            Case Campo="I_Quantidade" : 
                 Switch
                   Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                   Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                   Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                   Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                   Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch

            Case Campo="I_UN_Item"                  Or
                 Campo="I_Tipo_Desconto_Item"       Or
                 Campo="I_Preco_Total"              Or
                 Campo="I_CSOSN"                  : Campo="I_Quantidade"

            Case Campo="I_Preco_Unitario"    :
                 If F5_ATIVADO
                    Then Campo=Campo_Ant
                         F5_ATIVADO=False
                 EndIf
                 Campo="I_Quantidade"


            Case Campo="I_CSOSN"              : Campo="I_Quantidade"              

            Case Campo="I_ACSOSN"       Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"

            Case Campo="I_CST_Item"          :                       
                 If IsRegimeSimplesNacional(TPEMPR)
                    Then Campo="I_CSOSN"
                    Else Campo="I_Quantidade"
                 EndIf

            Case Campo="I_RBC_ICMS"     Or
                 Campo="I_AICMS"        Or
                 Campo="I_BC_ICMS"      Or
                 Campo="I_Valor_ICMS"   Or       
                 Campo="I_MVA"               : Campo="I_CST_Item"

            Case Campo="I_RBC_ST"       Or
                 Campo="I_AST"          Or
                 Campo="I_BC_ST"        Or
                 Campo="I_Valor_ST"          : Campo="I_MVA"

            Case Campo="I_CST_IPI"           : Campo="I_CST_Item"
                   
            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_Peidido_Compra"
                    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_CFOP"              : Campo="I_Quantidade"

            Case Campo="I_NCM"      Or         
                 Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_CFOP"

            Case Campo="I_RAT_FRETE"         : Campo="I_NCM"
                 
            Case Campo="I_RAT_SEGURO"    Or
                 Campo="I_RAT_DESCONTO"  Or 
                 Campo="I_RAT_OUTDESP"       : Campo="I_RAT_FRETE"

          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 FastMsg("Valor inv lido !")
                    Else If LOCALIZA_CODIGO = "LOC_CODBAR"
                            Then CODIGO_BARRA = VSD_I_Codigo_Item
                                 ORIGEM = "Codigo_Barras_ShowDialog"
                            Else ORIGEM = ""
                         EndIf
                         [Informacoes_Adicionais]=""
                         If Pega_Dados_Item(ORIGEM)
                            Then ITEM_DUPLICADO = False
                                 If PARAM_DUPLICIDADE_ITEM And Not PARAM_UTILIZA_VARIACOES
                                    then Moveto [Codigo do Item]
                                         Locate VSD_I_Codigo_Item
                                         while retval
                                           If [Item da OF]<>SEQIT 
                                              Then 
                                                   ITEM_DUPLICADO=True
                                                   quitloop
                                           EndIf
                                           skip
                                           if eot() then quitloop endif
                                           Locate Next VSD_I_Codigo_Item
                                         endwhile
                                         
                                         Moveto [Item da OF]
                                         Locate [FaturaC->Numero da OF],SEQIT
                                 EndIf
                                 
                                 If ITEM_DUPLICADO
                                    Then 
                                         switch
                                           case sys_Codigo_cliente="0431":
                                             Mensagem("O Item ["+VSD_I_Codigo_Item+"] j  existe nesta fatura !")
                                             ITEM_DUPLICADO=false
                                           
                                           otherwise :
                                             fastMSg("O Item ["+VSD_I_Codigo_Item+"] j  existe nesta fatura !")

                                         endswitch
                                 endif        
                                 If not ITEM_DUPLICADO
                                    Then 
                                         Registro_Item("Ler")
                                         
                                         Ver_Saldo=True
                                         checa_estoque()
                                         
                                         switch
                                            case PARAM_DADOS_ITEM_RESUMO="S"     : 
                                               switch
                                                  Case PARAM_COR_TECIDO="S"            : Monta_Opcoes_Cor("Codigo da Cor_Tecido","")
                                                                                         Campo="I_Codigo_Cor_Tecido"
                                                  Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                                                  Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                                                  Otherwise                            : Campo="I_Quantidade"
                                               endswitch                                                        
                                                                                   
                                            Otherwise:
                                               switch
                                                  Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                                                  Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                                                  Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                                                  Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                                                  Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                                                  Otherwise                            : Campo="I_Quantidade"
                                               endswitch                                                        
                                         endswitch                                                        
                                 endif   
                                 
                                 ;---- Particularidades #0377# ----------------------------------------------------------------
                                 If SYS_CODIGO_CLIENTE="0377" And Campo<>"I_Codigo_Item" And Not IsBlank(VSD_I_Codigo_Item) 
                                    Then If Search("DISCO",Upper(VSD_I_Descricao_Item))>0
                                            Then If PARAM_UTILIZA_TABPR_CLIENTE="S"
                                                    Then If IsAssigned(LOCALIZA_CODIGO) And LOCALIZA_CODIGO = "LOC_CODBAR"
                                                            Then TABPR=[FaturaC->Codigo da Tabela]
                                                            Else TABPR=[FaturaI->Codigo da Tabela]
                                                         EndIf
                                                         ;** Verifica se cliente possui tabela de pre‡o espec¡fica e se item est  com pre‡o  
                                                         GetRecord "\\Sistemas\\Vendas\\Tbprcli" TABPR,[FaturaC->Codigo] To REG_TBPRECO
                                                         If RetVal
                                                            Then GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, [FaturaC->Codigo], VSD_I_Codigo_Item To REG_TBPRECO
                                                                 If Not RetVal
                                                                    Then Mensagem("Item "+VSD_I_Codigo_Item+" "+Rtrim(VSD_I_Descricao_Item)+
                                                                                  " sem tabela de pre‡o por cliente ["+[FaturaC->Codigo]+"]!")
                                                                         VSD_I_Preco_Tabela=""
                                                                         Campo="I_Codigo_Item" 
                                                                 EndIf
                                                         EndIf        
                                                 EndIf    
                                         EndIf
                                 EndIf   
                         endif     
                 EndIf        
                 
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 
                 If F4_ATIVADO
                    Then Campo=Campo_Ant
                         F4_ATIVADO=False
                    else
                         Switch  
                           Case SYS_CODIGO_CLIENTE = "0251" or
                                SYS_CODIGO_CLIENTE = "0247" : 
                                Moveto [Codigo do Item]                                              
                                Ativa_Lookup()                   
                                Locate [Faturai->Codigo do Item] 
                                If [Codigo da Familia]="005"
                                    Then Play "Calc_Ma" 
                                EndIf   
                                KeyPress "ESC"
                                If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                   Then Campo="I_Quantidade_Solicitada" 
                                   Else Campo="I_Quantidade"
                                EndIf                              
                           Case PARAM_DADOS_ITEM_RESUMO="S"     : If PARAM_UTILIZA_VARIACOES
                                                                     Then Campo="I_Tamanho_Variacao" 
                                                                     Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                             Then Campo="I_Quantidade_Solicitada" 
                                                                             Else Campo="I_Quantidade"
                                                                          EndIf 
                                                                  EndIf                         
                           Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                           Case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                           Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                           Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                           Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                           Otherwise                            : Campo="I_Quantidade"
                         EndSwitch
                 endif
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 
                 switch
                   Case PARAM_DADOS_ITEM_RESUMO="S":
                     If IsBlank(VSD_I_Codigo_Cor_Tecido)
                        then FastMsg("Informe a Cor do Tecido!")        
                        Else PROCESSA_COR       = False
                             PROCESSA_CORTECIDO = False

                             switch
                               case len(VSD_I_Codigo_Cor_Tecido)>4:
                                 VSD_I_Sigla_Cor_Tecido = Rtrim(VSD_I_Codigo_Cor_Tecido)
                                 For i From 1 To DynArraySize(Opcoes)
                                   If VSD_I_Sigla_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                      Then VSD_I_Codigo_Cor_Tecido    = AlinhM(RTrim(SubStr(Opcoes[i],23,04)),4)
                                           VSD_I_Descricao_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                           PROCESSA_COR=True
                                           QuitLoop
                                   EndIf
                                 EndFor 
                                 If Not PROCESSA_COR
                                    Then FastMsg("Valor n„o Localizado!")
                                         VSD_I_Descricao_Cor_Tecido = ""
                                    Else PROCESSA_CORTECIDO = True     
                                 EndIf
                               
                               case Type(NumVal(Rtrim(VSD_I_Codigo_Cor_Tecido)))<>"N":
                                 VSD_I_Sigla_Cor_Tecido = Rtrim(VSD_I_Codigo_Cor_Tecido)
                                 For i From 1 To DynArraySize(Opcoes)
                                   If VSD_I_Sigla_Cor_Tecido = Ltrim(RTrim(SubStr(Opcoes[i],29,05)))
                                      Then VSD_I_Codigo_Cor_Tecido    = AlinhM(RTrim(SubStr(Opcoes[i],23,04)),4)
                                           VSD_I_Descricao_Cor_Tecido = RTrim(SubStr(Opcoes[i],01,20))
                                           PROCESSA_COR=True
                                           QuitLoop
                                   EndIf
                                 EndFor
                                 If Not PROCESSA_COR
                                    Then FastMsg("Sigla do Tecido n„o Localizada!")
                                         VSD_I_Descricao_Cor_Tecido = ""
                                    Else PROCESSA_CORTECIDO = True     
                                 EndIf
                               
                               otherwise:
                                 PROCESSA_COR       = True
                                 PROCESSA_CORTECIDO = True     
                             
                             endswitch

                             If PROCESSA_COR 
                                Then VSD_I_Codigo_Cor_Tecido = AlinhM(VSD_I_Codigo_Cor_Tecido,4)
                                     GetRecord "\\Sistemas\\Estoque\\Cores" VSD_I_Codigo_Cor_Tecido To REG_COR
                                     If not RetVal
                                         then FastMsg("A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!")
                                              VSD_I_Descricao_Cor_Tecido = ""
                                              PROCESSA_CORTECIDO=False
                                          
                                         else VSD_I_Codigo_Cor_Tecido   =REG_COR["Codigo da Cor_Tecido"]
                                              VSD_I_Descricao_Cor_Tecido=REG_COR["Descricao da Cor_Tecido"]                                         
                                     
                                              If Pega_Dados_Item("Cor_Tecido")
                                                 Then Registro_Item("Ler")
                                                      If PARAM_UTILIZA_VARIACOES
                                                         Then Campo="I_Tamanho_Variacao" 
                                                         Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                                 Then Campo="I_Quantidade_Solicitada" 
                                                                 Else Campo="I_Quantidade"
                                                              EndIf 
                                                      EndIf    
                                                 Else VSD_I_Codigo_Cor_Tecido   =""
                                                      VSD_I_Descricao_Cor_Tecido=""
                                                      PROCESSA_CORTECIDO=False
                                              EndIf
                                      endif


                                      If PROCESSA_CORTECIDO
                                         Then 
                                              ITEM_DUPLICADO = False
                                              If PARAM_DUPLICIDADE_ITEM and 
                                                 not PARAM_UTILIZA_VARIACOES    
                                                 Then 
                                                      Moveto [Codigo do Item]
                                                      Locate VSD_I_Codigo_Item
                                                      while retval
                                                        If [Item da OF]<>SEQIT 
                                                           Then ITEM_DUPLICADO=True
                                                                Quitloop  
                                                        EndIf
                                                        skip
                                                        if eot() then quitloop endif
                                                        Locate Next VSD_I_Codigo_Item
                                                        if not Retval then quitloop endif
                                                      endwhile
                                                      
                                                      MSG = "Item "+VSD_I_Codigo_Item+" referente a cor "+VSD_I_Codigo_Cor_Tecido+
                                                            " j  est  lan‡ado na sequˆncia "+StrVal([Item da OF])+"!"
                                                      
                                                      Moveto [Item da OF]
                                                      Locate [FaturaC->Numero da OF],SEQIT
                                              EndIf

                                              If ITEM_DUPLICADO
                                                 Then 
                                                      switch
                                                        case sys_Codigo_cliente="0431":
                                                          Mensagem(MSG)
                                                          ITEM_DUPLICADO=false
                                                         
                                                        otherwise :
                                                          fastMSg(MSG)
                                                          VSD_I_Codigo_Cor_Tecido   =""
                                                          VSD_I_Descricao_Cor_Tecido=""
                                                          Campo="I_Codigo_Cor_Tecido"
              
                                                      endswitch
                                              endif        
                                              If Not ITEM_DUPLICADO
                                                 Then 
                                                      Switch
                                                       Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                                                       Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                                                       Otherwise                            : Campo="I_Quantidade"
                                                     EndSwitch
                                              EndIf
                                      EndIf         
                             EndIf
                                                           
                     EndIf
                     Echo Off    
                   otherwise:
                     If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                        Then VSD_I_Codigo_Cor_Tecido = AlinhM(VSD_I_Codigo_Cor_Tecido,4) 
                             GetRecord "\\Sistemas\\Estoque\\Cores" VSD_I_Codigo_Cor_Tecido To REG_COR
                             If not RetVal
                                 then 
                                      FastMsg("A cor ["+VSD_I_Codigo_Cor_Tecido+"] n„o foi localizada!")
                                      VSD_I_Descricao_Cor_Tecido = ""
                                 else 
                                      VSD_I_Codigo_Cor_Tecido   =REG_COR["Codigo da Cor_Tecido"]
                                      VSD_I_Descricao_Cor_Tecido=REG_COR["Descricao da Cor_Tecido"]
                                      Switch
                                       case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                                       case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                                       Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                                       Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                                       Otherwise                            : Campo="I_Quantidade"
                                     EndSwitch
                             endif                                             
                        Else Campo="I_Descricao_Cor_Tecido"
                     EndIf
                     Echo Off
                 endswitch
                 
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 Switch
                   case PARAM_TAMANHO="S"               : Campo="I_Tamanho_Variacao"
                   case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                   Case PARAM_UTILIZA_VARIACOES         : Campo="I_Tamanho_Variacao"
                   Case PARAM_UTILIZA_QTD_SOLICITADA="S": Campo="I_Quantidade_Solicitada"
                   Otherwise                            : Campo="I_Quantidade"
                 EndSwitch

            Case Campo="I_Tamanho_Variacao":
                 VSD_I_Tamanho_Variacao=ControlValue("I_Tamanho_Variacao")

                 switch
                   case Not PARAM_UTILIZA_VARIACOES:
                     If PARAM_TABPR_ITEM="S"
                        Then Campo="I_Tabela"
                        Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                Then Campo="I_Quantidade_Solicitada" 
                                Else Campo="I_Quantidade"
                             EndIf 
                     EndIf
                     
                     If SYS_CODIGO_CLIENTE="0391" and Not IsBlank(VSD_I_Tamanho_Variacao)
                        Then 
                              Moveto [Codigo do Item]
                              Ativa_Lookup()
                              Moveto [Referencia]
                              TIPO_ITEM = "P"
                              Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, TIPO_ITEM, VSD_I_Codigo_Cor_Tecido
                              If RetVal
                                 Then Processa_Item=False 
                                      While VSD_I_REFERENCIA         = [Referencia          ] And 
                                             TIPO_ITEM               = [Tipo do Item        ] And
                                             VSD_I_Codigo_Cor_Tecido = [Codigo da Cor_Tecido]
                     
                                        If [DTamanho]=VSD_I_Tamanho_Variacao
                                           Then Processa_Item = True
                                                QuitLoop
                                        EndIf 
                                        Skip
                                        If Eot() Then QuitLoop EndIf
                                      EndWhile
                                      If Processa_Item
                                         Then 
                                              CopyToArray REG_ITEM
                                              VSD_I_Codigo_Item    = REG_ITEM["Codigo do Item"]
                                              VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                              KeyPress "ESC"
                                              If Pega_Dados_Item("")
                                                 Then Registro_Item("Ler")

                                                      VSD_I_Tamanho_Variacao = REG_ITEM["DTamanho"]                                                         
                                                      If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                                         Then Campo="I_Quantidade_Solicitada" 
                                                         Else Campo="I_Quantidade"
                                                      EndIf
                                              EndIf
                                         Else 
                                              KeyPress "ESC"
                                              FastMsg("Tamanho "+StrVal(VSD_I_Tamanho_Variacao)+" da referˆncia "+
                                                       VSD_I_REFERENCIA+" n„o foi localizado!")
                                      EndIf                                          
                                 Else 
                                      KeyPress "ESC"
                                      FastMsg("Item n„o foi localizado!")
                              EndIf
                     EndIf
                     Echo Off
                   
                   otherwise:
                     ITEM_DUPLICADO=False
                     If PARAM_DUPLICIDADE_ITEM And PARAM_UTILIZA_VARIACOES  
                        Then
                             MSG=""
                             Moveto [Codigo do Item]
                             Locate VSD_I_Codigo_Item
                             while retval
                               If [Item da OF]<>SEQIT 
                                  Then 
                                       AUX_VSD_I_Variacoes = ""
                                       If [Informacoes_Adicionais]<>""
                                          Then PosI=Search("V[",Upper([Informacoes_Adicionais]))
                                               If PosI>0 
                                                  Then 
                                                       PosF = Search("]",SubStr(Upper([Informacoes_Adicionais]),PosI+2,Len([Informacoes_Adicionais])))
                                                       AUX_VSD_I_Variacoes = SubStr([Informacoes_Adicionais],PosI+2,PosF-1)         
                                               EndIf
                                                                                                                  
                                               If Rtrim(AUX_VSD_I_Variacoes)=Rtrim(VSD_I_Tamanho_Variacao)
                                                  Then ITEM_DUPLICADO=True
                                                       QuitLoop
                                               EndIf                                                  
                                               Release Vars PosI,PosF
                                          Else 
                                               If VSD_I_Tamanho_Variacao = AUX_VSD_I_Variacoes
                                                  Then ITEM_DUPLICADO=True
                                                       QuitLoop
                                               EndIf
                                       EndIf
                               EndIf
                               skip
                               if eot() then quitloop endif
                               Locate Next VSD_I_Codigo_Item
                               if not Retval then quitloop endif
                             EndWhile
                             If ITEM_DUPLICADO
                                Then MSG = "Item "+VSD_I_Codigo_Item+" referente a cor "+VSD_I_Codigo_Cor_Tecido+" com a varia‡Æo "+
                                           Rtrim(Ltrim(VSD_I_Tamanho_Variacao))+" j  est  lan‡ado na sequˆncia "+StrVal([Item da OF])+"!"
                             EndIf                                                                            

                             Moveto [Item da OF]
                             Locate [FaturaC->Numero da OF],SEQIT
                     EndIf
                     
                     If ITEM_DUPLICADO
                        Then 
                             switch
                               case sys_Codigo_cliente="0431":
                                 Mensagem(MSG)
                                 ITEM_DUPLICADO=false
                                 
                               otherwise :
                                 Mensagem(MSG)

                             endswitch
                     endif        
                     If ITEM_DUPLICADO
                        Then Campo="I_Tamanho_Variacao"
                        Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                Then Campo="I_Quantidade_Solicitada" 
                                Else Campo="I_Quantidade"
                             EndIf 
                     EndIf

                 endswitch

            Case Campo="I_Tabela":
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then 
                         Moveto "FaturaC"
                         Moveto [Codigo da Tabela]
                         Ativa_Lookup()
                         Moveto [Codigo da Tabela]
                         Locate VSD_I_Tabela
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "FaturaI"
                                 [Codigo da Tabela]=VSD_I_Tabela
                                  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
                                  If PARAM_UTILIZA_VARIACOES
                                     Then Campo="I_Tamanho_Variacao" 
                                     Else If PARAM_UTILIZA_QTD_SOLICITADA="S"
                                             Then Campo="I_Quantidade_Solicitada" 
                                             Else Campo="I_Quantidade"
                                          EndIf 
                                  EndIf
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 KeyPress "ESC"
                                 Moveto "FaturaI"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade_Solicitada" :
                 VSD_I_Quantidade_Solicitada=ControlValue("I_Quantidade_Solicitada")
                 If VSD_I_Quantidade_Solicitada>0 
                    Then If CHAVEI=1
                            Then GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOM
                                 If RetVal
                                    Then If REG_ITEMCOM["Fracionado"]="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                                            Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                                            Else [Quantidade]=VSD_I_Quantidade_Solicitada
                                                 VERIFICA_SALDO_DISPONIVEL=True
                                                 If CHECA_ESTOQUE()  
                                                    Then [Quantidade]=SALDO_DISPONIVEL            
                                                    Else [Quantidade]=BlankNum()  
                                                 EndIf
                                                 VSD_I_Quantidade = [Quantidade] 
                                                 Release Vars VERIFICA_SALDO_DISPONIVEL
                                                 Campo="I_Quantidade"
                                         EndIf
                                    Else FastMsg("N„o foi localizado a tabela de complemento deste item!")
                                 EndIf
                            Else Campo="I_Quantidade"
                         EndIf
                    Else Campo="I_Quantidade"      
                 EndIf           
            Case Campo="I_Quantidade" :   
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                
                 okqtd=true
                 If ITEM_CONTROLA_ESTOQUE="SIM" And IsAssigned(FINALIDADE_DESTINACAO) And (FINALIDADE_DESTINACAO="1" or FINALIDADE_DESTINACAO="4")
                    then if VSD_I_Quantidade<=0
                            then okqtd=false
                         endif
                         
                         if not okqtd
                            then If PARAM_UTILIZA_QTD_SOLICITADA<>"S" 
                                    Then fastmsg("Quantidade inv lida !") 
                                 EndIf
                         endif
                 endif      
                 
                 If VSD_I_Quantidade=0
                    Then If PARAM_UTILIZA_QTD_SOLICITADA="S" 
                            Then If VSD_I_Quantidade_Solicitada>0
                                    Then VSD_I_Preco_Bruto            =blanknum()
                                         VSD_I_Tipo_Desconto_Item     =""
                                         VSD_I_Desconto_Descricao     ="" 
                                         VSD_I_Taxa_Desconto_Unitario =blanknum()
                                         VSD_I_Valor_Desconto_Unitario=blanknum()
                                         VSD_I_Valor_Desconto_Item    =blanknum()
                                         VSD_I_Preco_Total            =0
                                         AcceptDialog
                                 EndIf
                         EndIf 
                 EndIf       
                 
                 while okqtd
                   If QTD_FRACIONADA="N" And (VSD_I_Quantidade-Int(VSD_I_Quantidade))<>0
                      Then Mensagem("A Quantidade do Item ["+VSD_I_Codigo_Item+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                           quitloop
                   endif

                   [Quantidade]=VSD_I_Quantidade
                   
                   Release Vars ver_saldo
                   
                   FAZ_PROCESSO=False
                   If Agrupa_Pedido("VALIDA")
                      Then If CHECA_ESTOQUE()                    Then FAZ_PROCESSO=True EndIf 
                      Else If CHECA_ESTOQUE() and CHECA_PEDIDO() Then FAZ_PROCESSO=True EndIf
                   EndIf   
                   
                   If FAZ_PROCESSO 
                      then
                           If PARAM_TRANSF_ULTCT="S"
                              Then If Search("TRANSF",[FaturaC->Descricao da Destinacao])>0 And
                                      (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="T") And
                                      CHAVEI=1
                                      Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                   EndIf
                           EndIf
                           
                           If sys_Codigo_Cliente="0377"
                              Then If Search("INDUSTR",[FaturaC->Descricao da Destinacao])>0 And
                                      (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="S" Or VSD_I_Tipo_Item="T") And
                                      CHAVEI=1
                                      Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                   EndIf
                           EndIf
                           If sys_Codigo_Cliente="0294" and [FaturaC->Tipo Movimento Estoque]="S"
                              Then If Search("PERDA",[FaturaC->Descricao da Destinacao])>0 And
                                      (VSD_I_Tipo_Item="P" Or VSD_I_Tipo_Item="S" Or VSD_I_Tipo_Item="T") And
                                      CHAVEI=1
                                      Then VSD_I_Preco_Unitario=ULTIMO_CTENTRADA
                                   EndIf
                           EndIf
        
                           CalcularPrecoTotal_Item()
        
                           Switch
                             Case (EDITA_DESCRICAO_ITEM ="S" and VSD_I_Tipo_Item ="D"   ) or
                                  (sys_codigo_cliente="0216" and SYS_DRIVE_SISTEMA="X:" ): Campo="I_UN_Item"
        
                             Case PARAM_ALTERA_PRECO="S"          : Campo="I_Preco_Unitario"
                             Case PARAM_ALTERA_PRECO="N" And
                                  Search("VEND",[FaturaC->Descricao da Destinacao])=0:  
                                                                  Campo="I_Preco_Unitario"   
                             Case PARAM_ALTERA_PRECO="N" And
                                  Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
                                  VSD_I_Preco_Unitario<=0         : Campo="I_Preco_Unitario"  
                                                                    Mensagem("Item sem tabela de pre‡o !")
                             Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                             OtherWise                             : 
                                  If ALTERA_PRECO_TOTAL="S"
                                     Then Campo="I_Preco_Total"
                                     Else Switch
                                            Case PARAM_DADOS_ITEM_RESUMO="S" : AcceptDialog
                                                                               
                                             Case PARAM_IMPOSTOS="S"          :
                                                  If VSD_I_Tipo_Item="C"
                                                     Then Campo="I_TISSQN"
                                                     Else 
                                                          If IsRegimeSimplesNacional(TPEMPR)
                                                             Then Campo="I_CSOSN"
                                                             Else Campo="I_CST_Item"
                                                          EndIf
                                                   EndIf   
                                             OtherWise                 : AcceptDialog
                                          EndSwitch            
                                  EndIf
                           EndSwitch  
                   EndIf       
                   
                   quitloop
                 endwhile
                          
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 
                 CalcularPrecoTotal_Item()

                 CONTINUA=True
                 If PARAM_COMIS_MARCA="S"
                    Then If Search("VEND",[FaturaC->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_Tipo_Desconto_Item     =""
                                         VSD_I_Taxa_Desconto_Unitario =0
                                         VSD_I_Valor_Desconto_Unitario=0
                                    Else VSD_I_Tipo_Desconto_Item     ="U"
                                         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 
                                         CalcularPrecoTotal_Item()
                                    Else CONTINUA=False
                                 EndIf
                         EndIf
                 EndIf

                 If SYS_CODIGO_CLIENTE<>"0376" And
                    SYS_CODIGO_CLIENTE<>"0377"
                    Then If (PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P") And
                            Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                            PARAM_COMIS_MARCA="N"
                            Then If VSD_I_Preco_Tabela>0 And NumVal(VSD_I_Preco_Unitario)<NumVal(VSD_I_Preco_Tabela)
                                    Then CONTINUA=False
                                         Mensagem("Pre‡o unit rio n„o permitido, menor que pre‡o da Tabela !")
                                 EndIf
                         EndIf
                 EndIf
                 
                 If [FaturaC->Tipo Movimento Estoque]="S"               And 
                    FINALIDADE_DESTINACAO="1"                           And
                    Search("VEND",[FaturaC->Descricao da Destinacao])>0 And 
                    VSD_I_Preco_Unitario<=0                             And
                    VSD_I_Quantidade>0        
                    Then CONTINUA=False
                         Mensagem("Informe o pre‡o para prosseguir!")
                 EndIf
                    
                 If CONTINUA
                    Then 
                         If F5_ATIVADO=True
                            Then F5_ATIVADO=False
                                 Campo=Campo_Ant

                                 Grava_LogEx("Fatura AltPreco")
                            else     
                                 Switch                    
        													 Case PARAM_DADOS_ITEM_RESUMO="S" : 
                                        If ALTERA_PRECO_TOTAL="S"
                                           Then Campo="I_Preco_Total" 
                                           Else AcceptDialog
                                        EndIf
                                   Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                                   Case PARAM_IMPOSTOS="S"          :
                                        If VSD_I_Tipo_Item="C"
                                           Then Campo="I_TISSQN"
                                           Else If IsRegimeSimplesNacional(TPEMPR)
                                                   Then Campo="I_CSOSN"
                                                   Else Campo="I_CST_Item"
                                                EndIf
                                         EndIf   
                                   OtherWise                 : AcceptDialog
                                 EndSwitch
                         EndIf
                 EndIf

            Case Campo="I_Tipo_Desconto_Item":
                 VSD_I_Tipo_Desconto_Item    =ControlValue("I_Tipo_Desconto_Item")

                 desctoitemok=true
                 if isblank(VSD_I_Tipo_Desconto_Item)
                    then 
                         CalcularPrecoTotal_Item()
                    else 
                         if CHAVEI=1
                            then if not DigitaDescto_Item()
                                    then desctoitemok=false
                                 endif
                         endif
                 endif
                  
                 if desctoitemok
                    then          
                          If ALTERA_PRECO_TOTAL="S"
                             Then Campo="I_Preco_Total"
                             Else Switch
                                    Case PARAM_DADOS_ITEM_RESUMO="S" : AcceptDialog
                                   Case PARAM_IMPOSTOS="S"          :
                                        If VSD_I_Tipo_Item="C"
                                           Then Campo="I_TISSQN"
                                           Else If IsRegimeSimplesNacional(TPEMPR)
                                                   Then Campo="I_CSOSN"
                                                   Else Campo="I_CST_Item"
                                                EndIf
                                         EndIf   
                                   OtherWise                 : AcceptDialog
                                  EndSwitch            
                          EndIf
                  endif

            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 
                 CalcularPrecoTotal_Item()
                 Switch
                   Case PARAM_DADOS_ITEM_RESUMO="S" : AcceptDialog
                   Case PARAM_IMPOSTOS="S"          :
                        If VSD_I_Tipo_Item="C"
                           Then Campo="I_TISSQN"
                           Else If IsRegimeSimplesNacional(TPEMPR)
                                   Then Campo="I_CSOSN"
                                   Else Campo="I_CST_Item"
                                EndIf
                         EndIf   
                   OtherWise                 : AcceptDialog
                 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
                                 If (TribCST="500" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0) ;se for devolu‡Æo
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"90"
                                 EndIf
                                 If (TribCST="500" And Search("DEVOL",[FaturaC->Descricao da Destinacao])=0) ; se nÆo for devolu‡Æo
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"60"
                                 EndIf
                         
                                 If TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"
                                    Then VSD_I_CST_Item   =SubStr(VSD_I_CSOSN,1,1)+"90"
                                         VSD_I_BC_ICMS    =BlankNum()
                                         VSD_I_RBC_ICMS   =BlankNum()
                                         VSD_I_AICMS      =BlankNum()
                                         VSD_I_Valor_ICMS =BlankNum()
                                 EndIf          
                                 If TribCST="101" Or TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"     
                                    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                                     
                                 If TribCST<>"101" And TribCST<>"201" And TribCST<>"900" 
                                    Then VSD_I_ACSOSN     =BlankNum()
                                         VSD_I_Valor_CSOSN=BlankNum()
                                 EndIf 

                                 Switch
                                  Case (TribCST="101" Or TribCST="201" Or TribCST="900"): 
                                       Campo="I_ACSOSN" 
                                  Case (TribCST="102" Or TribCST="103" Or TribCST="300" Or TribCST="400"):    
                                       Campo="I_CST_IPI"
                                  OtherWise:
                                       Campo="I_CST_Item"
                                 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("FATURA",VSD_I_TICMS,[Codigo MVA])
                              ;;;EndIf                                                 

                                 If (TribCST="101" Or TribCST="201") And VSD_I_ACSOSN<=0 
                                    ;;;;;;And CHAVEI=1
                                    Then VSD_I_ACSOSN=ALIQUOTA_CREDITO_ICMS_NOSN
                                 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="102" Or TribCST="103" Or TribCST="300" Or TribCST="400":       
                               Campo="I_CST_IPI"
                          OtherWise:
                               Campo="I_CST_Item"
                         EndSwitch
                    Else Campo="I_Valor_CSOSN"
                 EndIf                 
            Case Campo="I_Valor_CSOSN":
                 VSD_I_Valor_CSOSN=ControlValue("I_Valor_CSOSN")
                 Campo="I_CST_Item"

            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",[FaturaC->Tipo Movimento 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) 

                                 If IsRegimeSimplesNacional(TPEMPR)
                                    Then
                                         CONTINUA=False
                                         Switch

                                           Case (SubStr(VSD_I_CSOSN,2,3)="101" Or SubStr(VSD_I_CSOSN,2,3)="102") And 
                                                (TribCST="00" Or TribCST="20" Or TribCST="90")                       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="103" And 
                                                (TribCST="40" Or TribCST="41" Or TribCST="50" Or TribCST="51")       : CONTINUA=True 

                                           Case (SubStr(VSD_I_CSOSN,2,3)="201" Or SubStr(VSD_I_CSOSN,2,3)="202" Or 
                                                 SubStr(VSD_I_CSOSN,2,3)="203" Or SubStr(VSD_I_CSOSN,2,3)="500") And 
                                                (TribCST="10" Or TribCST="30" Or TribCST="60" Or TribCST="70" Or                  
                                                 TribCST="90")                                                       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="300" And 
                                                TribCST<>"??"                                                        : CONTINUA=True ;?verificar qual

                                           Case SubStr(VSD_I_CSOSN,2,3)="400" And 
                                                (TribCST="40" Or TribCST="41" Or TribCST="50" Or TribCST="51")       : CONTINUA=True 

                                           Case SubStr(VSD_I_CSOSN,2,3)="900" And 
                                                TribCST<>"??"                                                        : CONTINUA=True ;?qualquer

                                         EndSwitch
                                    Else CONTINUA=True
                                         VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900"
                                         VSD_I_ACSOSN     =BlankNum()
                                         VSD_I_Valor_CSOSN=BlankNum()
                                 EndIf
                                 
                                 If Not CONTINUA 
                                    Then Mensagem("CST ICMS difere da regra para o CSOSN informado.//Verifique !")
                                    Else
                                         If TribCST="00" Or TribCST="20" Or TribCST="40" Or TribCST="41" Or
                                            TribCST="50" Or TribCST="51" Or
                                            (TribCST="60" And Search("DEVOL",[FaturaC->Descricao da Destinacao])=0)
                                            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        
                                         If TribCST<>"20" And TribCST<>"70" And TribCST<>"90"       
                                            Then VSD_I_RBC_ICMS   =BlankNum()
                                         EndIf 
                                         If TribCST="30" Or TribCST="40" Or TribCST="41" Or 
                                            TribCST="50" Or TribCST="51" Or                    
                                            (TribCST="60" And Search("DEVOL",[FaturaC->Descricao da Destinacao])=0)
                                            Then VSD_I_RBC_ICMS  =BlankNum()
                                                 VSD_I_AICMS     =BlankNum()
                                                 VSD_I_BC_ICMS   =BlankNum()
                                                 VSD_I_Valor_ICMS=BlankNum()
                                         EndIf 
    
                                         Switch
                                          Case TribCST="00" Or TribCST="10"                         : Campo="I_AICMS"         
                                          Case TribCST="20" Or TribCST="70" Or TribCST="90"         : Campo="I_RBC_ICMS"
                                          Case TribCST="60" And 
                                               Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 : Campo="I_MVA"
                                          OtherWise                                                 : Campo="I_CST_IPI"
               												  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("FATURA",VSD_I_TICMS,[Codigo MVA])
                                        EndIf
                                        
                                        ;---- Rotina aplicada em 27.03.2014 ---------         
                                       If IsRegimeSimplesNacional(TPEMPR)  And
                                          [FaturaC->Tipo Movimento Estoque] ="S"  And
                                           Search("VEND",[FaturaC->Descricao da Destinacao])>0  and
                                           SubStr([CFO],1,1)="6"
                                           Then If TribCST="00" Or TribCST="10" Or TribCST="20" Or
                                                   TribCST="70" Or TribCST="90"
                                                   Then If (SubStr(VSD_I_CST_Item,1,1)="1" Or
                                                            SubStr(VSD_I_CST_Item,1,1)="2" Or
                                                            SubStr(VSD_I_CST_Item,1,1)="3" )
                                                            Then VSD_I_AICMS = 4 
                                                        EndIf
                                                Endif
                                        EndIf
        
                                 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 Search("DEVOL",[FaturaC->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 Search("DEVOL",[FaturaC->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_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",[FaturaC->Tipo Movimento 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 IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
                                            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 IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
                            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 IsRegimeSimplesNacional(TPEMPR) Or IsRegimeSimplesNacionalESRB(TPEMPR)
                    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",[FaturaC->Tipo Movimento 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",[FaturaC->Tipo Movimento 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 "FaturaC"
                 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([FaturaC->CFO],1,1):
                                 Mensagem("CFOP "+VSD_I_CFOP+" difere da OF "+[FaturaC->CFO]+" !")
                            OtherWise: 
                                 If VSD_I_Tipo_Item="C"
                                    Then Campo="I_CDSERV"
                                    Else VSD_I_CDSERV =BlankNum()
                                         VSD_I_MUNSERV=BlankNum()     
                                         VSD_I_UFSERV =""
                                         Campo="I_NCM"
                                 EndIf
                          EndSwitch
                 EndIf
                 Moveto "FaturaI"
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If Len(VSD_I_NCM) <> 8
                    Then MENSAGEM("O NCM est  incorreto ! //Verifique ! ")
                 EndIf   
                 
                 If CALCULO_NF_AUTOMATICO="L"
                    then 
                         Campo="I_RAT_FRETE"
                    else
                         AcceptDialog
                 endif        
                 
                 
            Case Campo="I_RAT_FRETE":
                 VSD_I_RAT_FRETE=ControlValue("I_RAT_FRETE")
                 Campo="I_RAT_SEGURO"
            Case Campo="I_RAT_SEGURO": 
                 VSD_I_RAT_SEGURO=ControlValue("I_RAT_SEGURO")
                 Campo="I_RAT_DESCONTO" 
            Case Campo="I_RAT_DESCONTO":
                 VSD_I_RAT_DESCONTO=ControlValue("I_RAT_DESCONTO")
                 Campo="I_RAT_OUTDESP"
            Case Campo="I_RAT_OUTDESP": 
                 VSD_I_RAT_OUTDESP=ControlValue("I_RAT_OUTDESP")
                 AcceptDialog

            Case Campo="I_CDSERV":
                 VSD_I_CDSERV=ControlValue("I_CDSERV")
                 Campo="I_MUNSERV"
            Case Campo="I_MUNSERV":
                 VSD_I_MUNSERV=ControlValue("I_MUNSERV")
                 AcceptDialog
                 
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Cor_Tecido"  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

Switch
  Case Campo="I_Seq"                    : MSGCAMPO="Sequencia"
  
  Case Campo="I_Codigo_Item"            : MSGCAMPO=LOCALIZAR_POR +", [F1]Consultar tabela  [F7]Alterar modo localizar"

  Case Campo="I_Descricao_Item"         : MSGCAMPO="Descri‡„o 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_Variacao"       : If PARAM_UTILIZA_VARIACOES
                                             Then MSGCAMPO="Varia‡Æo do item" 
                                             Else MSGCAMPO="Tamanho"
                                          EndIf    
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"
  
  Case Campo="I_Quantidade"             : 
    switch
      case sys_Codigo_Cliente="0377" and
           VSD_I_UN_Item="KG"           : MSGCAMPO="Quantidade, Ctrl+C = Calcular Pe‡as->Kg"
      otherwise                         : MSGCAMPO="Quantidade"
    endswitch
    
  Case Campo="I_Quantidade_Solicitada"  : MSGCAMPO="Quantidade Solicitada"
       Switch
         Case sys_Codigo_Cliente="0377" and
              VSD_I_UN_Item="KG"           : MSGCAMPO="Quantidade Solicitada, Ctrl+C = Calcular Pe‡as->Kg"
         Otherwise                         : MSGCAMPO="Quantidade Solicitada"
       Endswitch
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Tipo_Desconto_Item"     : MSGCAMPO="Tipo Desconto no Item: U=Pre‡o Unit rio  T=Total Bruto"
  Case Campo="I_Preco_Total"            : MSGCAMPO="Pre‡o Total"
  
  Case Campo="I_CSOSN"                  : MSGCAMPO="ICMS - C¢digo de situa‡Æo da opera‡Æo no Simples Nacional"

  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_NCM"                    : MSGCAMPO="NCM"
  Case Campo="I_CFOP"                   : MSGCAMPO="CFOP p/ este Item"

  Case Campo="I_RAT_FRETE"              : MSGCAMPO="Valor Frete, rateio deste Item"
  Case Campo="I_RAT_SEGURO"             : MSGCAMPO="Valor Seguro, rateio deste Item"
  Case Campo="I_RAT_DESCONTO"           : MSGCAMPO="Valor Desconto, rateio deste Item"
  Case Campo="I_RAT_OUTDESP"            : MSGCAMPO="Valor Outras Despesas, rateio deste Item"

  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  "
   
        If campo="I_CSOSN"         or
           campo="I_CST_Item"      Or
          (Campo="I_TISSQN" and VSD_I_Tipo_Item="C")
           then TECLA=TECLA+"PgDn=Finalizar  "
        endif           
    
EndIf

MontaRodapeSD(MSGCAMPO, TECLA)

Mouse Hide
RefreshDialog
Return Temp
EndProc   ;  (Item_Dialog)
                          
;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI_Resumo()

PARAM_DESCUNIT   = "N"
Liberou_Bloqueio = False
                       
F4_ATIVADO=False
F5_ATIVADO=False
F6_ATIVADO=False                            

MSGCAMPO=""

ModoLocalizarItem("","","")

Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
    Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F3","F4","F5","F7","F8",-33,-147,"ClearArea",
    "HOME","END","PGDN","PGUP",3,-61
     @ 00,00 height 06 width 80
     
   Accept @ -01,43 Width 6 "A3" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 ">" For "I_Codigo_Item"
   Accept @ 01,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   
   @ 00,02 ?? LOCALIZAR_POR
   
   Label  @ 00,17 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,17 Width 33 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,50 "TI" For "I_Tipo_Item"
   Accept @ 01,51 Width 03 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   
   Label  @ 00,55 "UN" For "I_UN_Item"
   Accept @ 01,55 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item                               
   
   Label  @ 00,69 "Tabela" For "I_Tabela"
   Accept @ 01,70 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   
   Label  @ 02,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,00 Width 07 "A5" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 03,06 Width 16 "A10" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   
   Label  @ 02,22 "Varia‡oes" For "I_Tamanho_Variacao"
   Accept @ 03,23 Width 09 "A6" picture "!*!" Tag "I_Tamanho_Variacao" to VSD_I_Tamanho_Variacao
   
   Label  @ 02,32 "Quantidade" For "I_Quantidade"
   Accept @ 03,33 Width 12 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   
   Label  @ 02,45 "Pr.Unitario" For "I_Preco_Unitario"
	 Accept @ 03,46 Width 11 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,57 "Pr.Total" For "I_Preco_Total"
   Accept @ 03,58 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total
   
EndDialog
Mouse Show
If RetVal
   Then Registro_Item("Gravar")
   Else If CHAVEI=1
           Then Del
           Else CopyFromArray RegItem
                UnLockRecord
                If CHAVEI=8
                   Then Exclusao_I()
                EndIf
        EndIf
        CHAVEI=9
EndIf
EndProc  ;  (DigitaI_Resumo)     

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DigitaI()

Liberou_Bloqueio=False                       
F4_ATIVADO=False
F5_ATIVADO=False
F6_ATIVADO=False                            

MSGCAMPO=""

titulo_estoque=""
saldo_estoque =""
MSGCAMPO     =""

If PARAM_UTILIZA_VARIACOES
   Then TIT_TM_VARIACO = "Varia‡oes"
   Else TIT_TM_VARIACO = "TM"
EndIf

ModoLocalizarItem("","","")

Showdialog "Dados do Item [                          ]" Proc "Item_Dialog"
   Trigger "OPEN"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F3","F4","F5","F7","F8",-23,-33,-147,
    "ClearArea","HOME","END","PGDN","PGUP",3
     @ 01,0 height 22 width 80

   Accept @ -01,33 Width 6  "A3"  Tag "I_Seq"        To VSD_I_SEQ
   Accept @ -01,39 Width 20 "A20" Tag "I_SeqTitShow" To VSD_IseqTitShow

   Label  @ 00,00 ">" For "I_Codigo_Item"
   Accept @ 01,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
          @ 00,03 ?? LOCALIZAR_POR
 
   Label  @ 00,17 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,17 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,58 "TI" For "I_Tipo_Item"
   Accept @ 01,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 00,62 "Referˆncia" For "I_Referencia"
   Accept @ 01,62 Width 16 "A13" picture "!*!" Tag "I_Referencia" to VSD_I_Referencia

   Label  @ 02,00 "[F8]Inf.Adic->" For "I_InfAdic"
   Accept @ 02,17 Width 61 "A100" picture "!*!" Tag "I_InfAdic" to VSD_I_InfAdic

   @ 09,01 ?? titulo_estoque
   @ 10,01 ?? saldo_estoque
   PaintCanvas Attribute 124 09, 00, 10, 15


   Label  @ 04,00 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 05,00 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Accept @ 05,06 Width 23 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   
   Label  @ 04,29 TIT_TM_VARIACO For "I_Tamanho_Variacao"
   Accept @ 05,30 Width 11 "A6" picture "!*!" Tag "I_Tamanho_Variacao" to VSD_I_Tamanho_Variacao
   
   Label  @ 04,42 "Tabela" For "I_Tabela"
   Accept @ 05,42 Width 09 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela
   
   Label  @ 04,67 "Qtd.Solic." For "I_Quantidade_Solicitada"
   Accept @ 05,67 Width 11 "N" picture "#*#.[###]" Tag "I_Quantidade_Solicitada" to VSD_I_Quantidade_Solicitada
 
   Label  @ 07,00 "Quantidade" For "I_Quantidade"
   Accept @ 08,00 Width 11 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 07,11 "UN" For "I_UN_Item"
   Accept @ 08,11 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item                               
   Label  @ 07,16 "Pr.Unit rio" For "I_Preco_Unitario"
 	 Accept @ 08,17 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 07,30 "Pr.Bruto" For "I_Preco_Bruto"
   Accept @ 08,30 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Bruto" to VSD_I_Preco_Bruto
   Label  @ 07,42 "?Desconto" For "I_Tipo_Desconto_Item"
   Accept @ 08,42 Width  4 "A1"  picture "U,T" Tag "I_Tipo_Desconto_Item" to VSD_I_Tipo_Desconto_Item          
   Accept @ 08,45 Width 11 "A08" picture "!*!" Tag "I_Desconto_Descricao" to VSD_I_Desconto_Descricao
   Label  @ 07,54 "Vr.Desconto" For "I_Valor_Desconto_Item"
   Accept @ 08,56 Width 10 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Item" to VSD_I_Valor_Desconto_Item
   Label  @ 07,67 "Pr.L¡quido" For "I_Preco_Total"
   Accept @ 08,67 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   @ 12,00 ?? "Impostos CST    %Red    Aliq.  BC        Valor"
                                 
   Label  @ 13,00 " CSOSN" For "I_CSOSN"
   Accept @ 13,08 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 13, 15, 13, 22
   Accept @ 13,23 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 13, 29, 13, 49
   Accept @ 13,40 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

   Label  @ 14,00 "  ICMS" For "I_CST_Item"
   Accept @ 14,08 Width 07 "A3" picture "!*!"        Tag "I_CST_Item"    to VSD_I_CST_Item   
   Accept @ 14,15 Width 10 "N"  picture "#*#.[####]" Tag "I_RBC_ICMS"    to VSD_I_RBC_ICMS
   Accept @ 14,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AICMS"       to VSD_I_AICMS
   Accept @ 14,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ICMS"     to VSD_I_BC_ICMS     
   Accept @ 14,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_ICMS"  to VSD_I_Valor_ICMS

   Label  @ 15,00 "MVA/ST" For "I_AST"
   Accept @ 15,08 Width 08 "N"  picture "#*#.[##]"   Tag "I_MVA"         to VSD_I_MVA
   Accept @ 15,15 Width 10 "N"  picture "#*#.[####]" Tag "I_RBC_ST"      to VSD_I_RBC_ST
   Accept @ 15,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AST"         to VSD_I_AST     
   Accept @ 15,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ST"       to VSD_I_BC_ST  
   Accept @ 15,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_ST"    to VSD_I_Valor_ST

   Label  @ 16,00 "   IPI" For "I_CST_IPI"
   Accept @ 16,08 Width 07 "A2" picture "!*!"        Tag "I_CST_IPI"     to VSD_I_CST_IPI  
   Accept @ 16,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI"     to VSD_I_RBC_IPI
   Accept @ 16,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_AIPI"        to VSD_I_AIPI
   Accept @ 16,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_IPI"      to VSD_I_BC_IPI  
   Accept @ 16,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_IPI"   to VSD_I_Valor_IPI

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

   Label  @ 18,00 "   PIS" For "I_CST_PIS"    
   Accept @ 18,08 Width 07 "A2" picture "!*!"        Tag "I_CST_PIS"      to VSD_I_CST_PIS  
   Accept @ 18,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS"      to VSD_I_RBC_PIS
   Accept @ 18,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_APIS"         to VSD_I_APIS
   Accept @ 18,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_PIS"       to VSD_I_BC_PIS  
   Accept @ 18,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_PIS"    to VSD_I_Valor_PIS

   Label  @ 19,00 "COFINS" For "I_CST_COFINS"   
   Accept @ 19,08 Width 07 "A2" picture "!*!"        Tag "I_CST_COFINS"   to VSD_I_CST_COFINS 
   Accept @ 19,15 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS"   to VSD_I_RBC_COFINS
   Accept @ 19,23 Width 08 "N"  picture "#*#.[##]"   Tag "I_ACOFINS"      to VSD_I_ACOFINS
   Accept @ 19,30 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_COFINS"    to VSD_I_BC_COFINS  
   Accept @ 19,40 Width 11 "$"  picture "#*#.[##]"   Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

   Label  @ 12,58 "CFOP" For "I_CFOP"
   Accept @ 13,58 Width 08 "A4" picture "####" Tag "I_CFOP" to VSD_I_CFOP
   Label  @ 12,67 "NCM" For "I_NCM"
   Accept @ 13,67 Width 11 "A8" picture "#*#" Tag "I_NCM" to VSD_I_NCM

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


   Label  @ 16,54 "Frete"    For "I_RAT_FRETE"
   Accept @ 17,54 Width 12 "$" picture "#*#.[##]" Tag "I_RAT_FRETE" to VSD_I_RAT_FRETE
   Label  @ 16,67 "Seguro"   For "I_RAT_SEGURO"
   Accept @ 17,67 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_SEGURO" to VSD_I_RAT_SEGURO

   Label  @ 18,54 "Desconto" For "I_RAT_DESCONTO"
   Accept @ 19,54 Width 12 "$" picture "#*#.[##]" Tag "I_RAT_DESCONTO" to VSD_I_RAT_DESCONTO
   Label  @ 18,67 "OutDesp"  For "I_RAT_OUTDESP"
   Accept @ 19,67 Width 11 "$" picture "#*#.[##]" Tag "I_RAT_OUTDESP" to VSD_I_RAT_OUTDESP


EndDialog
Mouse Show
If RetVal
   Then Registro_Item("Gravar")
   Else If CHAVEI=1
           Then Del
           Else CopyFromArray RegItem
                UnLockRecord
                If CHAVEI=8
                   Then Exclusao_I()
                EndIf
        EndIf
        CHAVEI=9
EndIf
EndProc  ;  (DigitaI)

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro, regitem, REG_ITEMCOMP, regtpitem
          
Switch
  Case Funcao_Registro="Gravar": 
       [Numero Pedido_Orcamento   ]=VSD_I_Pedido
       [Item Pedido_Orcamento     ]=VSD_I_Pedido_Item

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

       [Descricao do Item         ]=VSD_I_Descricao_Item

       [Codigo da Cor_Tecido      ]=VSD_I_Codigo_Cor_Tecido
       [Descricao da Cor_Tecido   ]=VSD_I_Descricao_Cor_Tecido
       
       If Not PARAM_UTILIZA_VARIACOES
          Then [Tamanho           ]=VSD_I_Tamanho_Variacao
       EndIf   
       
       [Quantidade                ]=VSD_I_Quantidade
       [Unidade Fiscal            ]=VSD_I_UN_Item
       [Preco Unitario            ]=VSD_I_Preco_Unitario
       [Tipo Desconto Item        ]=VSD_I_Tipo_Desconto_Item
       [Taxa Desconto Unitario    ]=VSD_I_Taxa_Desconto_Unitario
       [Valor Desconto Unitario   ]=VSD_I_Valor_Desconto_Unitario
       [Valor Desconto Item       ]=VSD_I_Valor_Desconto_Item    
       [Preco Total               ]=VSD_I_Preco_Total

       [Custo Medio Unitario      ]=VSD_I_Custo_Unitario
       [Preco Unitario Tabela     ]=VSD_I_Preco_Tabela

       [CFO                       ]=VSD_I_CFOP                
       [NCM                       ]=VSD_I_NCM                

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

       [CSOSN                     ]=SubStr(VSD_I_CSOSN,2,3)              
       [ICMS_CredSN_Aliquota      ]=VSD_I_ACSOSN    
       [ICMS_CredSN_Valor         ]=VSD_I_Valor_CSOSN

       [MVA                       ]=VSD_I_MVA                
       [ICMS_ST_Aliquota Reduzida ]=VSD_I_RBC_ST    
       [ICMS_ST_Aliquota          ]=VSD_I_AST       
       [ICMS_ST_BC                ]=VSD_I_BC_ST
       [ICMS_ST_Valor             ]=VSD_I_Valor_ST

       [Tributacao de IPI         ]=VSD_I_TIPI
       [Aliquota Reduzida BCIPI   ]=VSD_I_RBC_IPI
       [Aliquota de IPI           ]=VSD_I_AIPI
       [IPI_BC                    ]=VSD_I_BC_IPI
       [Valor do IPI              ]=VSD_I_Valor_IPI

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [Aliquota de ISSQN         ]=VSD_I_AISSQN
       [ISSQN_BC                  ]=VSD_I_BC_ISSQN
       [Valor do ISSQN            ]=VSD_I_Valor_ISSQN
       [Codigo_Servico            ]=VSD_I_CDSERV   
       [ISSQN_UF                  ]=VSD_I_UFSERV   
       [ISSQN_Municipio           ]=VSD_I_MUNSERV   

       [IPI_CST                   ]=VSD_I_CST_IPI                
       [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           

       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Codigo da Tabela          ]=VSD_I_Tabela
       
       If PARAM_UTILIZA_QTD_SOLICITADA="S"
         Then [Quantidade Solicitada]=VSD_I_Quantidade_Solicitada
       EndIf  

       [Valor Frete Total         ]=VSD_I_RAT_FRETE               
       [Valor Seguro Total        ]=VSD_I_RAT_SEGURO              
       [Valor Desconto Total      ]=VSD_I_RAT_DESCONTO            
       [Valor OutDesp Total       ]=VSD_I_RAT_OUTDESP
       
       If PARAM_UTILIZA_VARIACOES
          Then If VSD_I_Tamanho_Variacao<>"" Then VSD_I_Tamanho_Variacao = "V["+VSD_I_Tamanho_Variacao+"]" EndIf                 
               If VSD_I_Tamanho_Variacao<>""
                  Then PosI=Search("V[",Upper([Informacoes_Adicionais]))
                       If PosI>0 
                          Then PosF= Search("]",SubStr(Upper([Informacoes_Adicionais]),PosI+2,Len([Informacoes_Adicionais]))) 
       
       INFADIC_A = Rtrim(Ltrim(SubStr([Informacoes_Adicionais],1,PosI-2)))
       INFADIC_B = Rtrim(Ltrim(SubStr([Informacoes_Adicionais],PosI+Len(VSD_I_Tamanho_Variacao),Len([Informacoes_Adicionais]))))
       Switch
         Case INFADIC_A<>"" And INFADIC_B<>"" : [Informacoes_Adicionais] = INFADIC_A+" "+VSD_I_Tamanho_Variacao+" "+INFADIC_B
         Case INFADIC_A=""  And INFADIC_B<>"" : [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao+" "+INFADIC_B
         Case INFADIC_B=""  And INFADIC_A<>"" : [Informacoes_Adicionais] = INFADIC_A+" "+VSD_I_Tamanho_Variacao
         Case INFADIC_B=""  And INFADIC_A=""  : [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao
       EndSwitch  
                          Else If [Informacoes_Adicionais]<>""
                                  Then [Informacoes_Adicionais] = [Informacoes_Adicionais] + " " + VSD_I_Tamanho_Variacao                                                   
                                  Else [Informacoes_Adicionais] = VSD_I_Tamanho_Variacao
                               EndIf              
                       EndIf
                       Release Vars PosI,PosF,INFADIC_A,INFADIC_B
                  Else [Informacoes_Adicionais]=Rtrim(Ltrim(VSD_I_InfAdic)) 
               EndIf            
       EndIf
       
       [Referencia                ]=VSD_I_Referencia
       
       UnLockRecord
       SaveTables
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item da OF                ]

       If CHAVEI=1
          Then VSD_I_Pedido      = ""
               VSD_I_Pedido_Item = BlankNum()
          Else VSD_I_Pedido      = [Numero Pedido_Orcamento     ]
               VSD_I_Pedido_Item = [Item Pedido_Orcamento       ]
       EndIf
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Item            ]

       VSD_I_Descricao_Item         =[Descricao do Item         ]

       VSD_I_Codigo_Cor_Tecido      =[Codigo da Cor_Tecido      ]
       VSD_I_Descricao_Cor_Tecido   =[Descricao da Cor_Tecido   ]
       
       VSD_I_Quantidade             =[Quantidade                ]
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Preco_Unitario         =[Preco Unitario            ]
       VSD_I_Custo_Unitario         =[Custo Medio Unitario      ]
       VSD_I_Preco_Tabela           =[Preco Unitario Tabela     ]
       VSD_I_Preco_Total            =[Preco Total               ]

       VSD_I_Tipo_Desconto_Item     =[Tipo Desconto Item        ]
       VSD_I_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Valor_Desconto_Item    =[Valor Desconto Item       ]

       CalcularPrecoTotal_Item()           

       VSD_I_CFOP                   =[CFO                       ]
       VSD_I_NCM                    =[NCM                       ]

       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_ACSOSN                 =[ICMS_CredSN_Aliquota      ]    
       VSD_I_Valor_CSOSN            =[ICMS_CredSN_Valor         ]

       VSD_I_MVA                    =[MVA                       ]
       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_CST_IPI                =[IPI_CST                   ]
       VSD_I_TIPI                   =[Tributacao de IPI         ]
       VSD_I_RBC_IPI                =BlankNum()
     ;;VSD_I_RBC_IPI                =[Aliquota Reduzida BCIPI   ]
       VSD_I_AIPI                   =[Aliquota de IPI           ]
       VSD_I_BC_IPI                 =[IPI_BC                    ]
       VSD_I_Valor_IPI              =[Valor do IPI              ]

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_BC_ISSQN               =[ISSQN_BC                  ]
       VSD_I_Valor_ISSQN            =[Valor do ISSQN            ]
       VSD_I_CDSERV                 =[Codigo_Servico            ]   
       VSD_I_UFSERV                 =[ISSQN_UF                  ]   
       VSD_I_MUNSERV                =[ISSQN_Municipio           ]   

       VSD_I_TPIS                   =""                          
       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_TCOFINS                =""                          
       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_Comissao_Item          =[Comissao do Item          ]
       
       VSD_I_Tabela                 =[Codigo da Tabela          ]
       VSD_I_Quantidade_Solicitada  =[Quantidade Solicitada     ] 
       
       VSD_I_RAT_FRETE              = [Valor Frete Total        ]
       VSD_I_RAT_SEGURO             = [Valor Seguro Total       ]
       VSD_I_RAT_DESCONTO           = [Valor Desconto Total     ]
       VSD_I_RAT_OUTDESP            = [Valor OutDesp Total      ]
  
       If Not PARAM_UTILIZA_VARIACOES
          Then VSD_I_Tamanho_Variacao = [Tamanho]
       EndIf
  
       VSD_I_InfAdic                = [Informacoes_Adicionais   ]
       
       If PARAM_UTILIZA_VARIACOES
          Then VSD_I_Tamanho_Variacao=""
               If PARAM_UTILIZA_VARIACOES
                  Then VSD_I_Tamanho_Variacao=""
                       If VSD_I_InfAdic<>""
                          Then PosI=Search("V[",Upper(VSD_I_InfAdic))
                               If PosI>0
                                  Then PosF = Search("]",SubStr(Upper(VSD_I_InfAdic),PosI+2,Len(VSD_I_InfAdic)))
                                       VSD_I_Tamanho_Variacao = SubStr(VSD_I_InfAdic,PosI+2,PosF-1)
                               EndIf
                               Release Vars PosI,PosF 
                       EndIf
                       
                       If PARAM_DADOS_ITEM_RESUMO<>"S"
                          Then VSD_I_Tamanho_Variacao = VSD_I_Tamanho_Variacao 
                       EndIf   
               EndIf
          Else VSD_I_Tamanho_Variacao=""
       EndIf    
       
       VSD_I_Referencia             =[Referencia                ]
       
       GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP        
       If RetVal
          Then EDITA_DESCRICAO_ITEM=REG_ITEMCOMP["Edita Descricao do Item"]
               QTD_FRACIONADA      =REG_ITEMCOMP["Fracionado"             ]
          Else EDITA_DESCRICAO_ITEM="N"
               QTD_FRACIONADA      ="S"
       EndIf

       GetRecord "\\Sistemas\\Estoque\\TpItem"   VSD_I_Tipo_Item   To regtpitem           
       If RetVal
          Then ITEM_CONTROLA_ESTOQUE =regtpitem["Controla Estoque"]
          Else ITEM_CONTROLA_ESTOQUE=""
       EndIf
       
       ;---- ComissÆo cadastrada no item apenas quando item for de promo‡Æo diante a tabela de pre‡o, caso contr rio,
       ;     a coimssÆo ser  referente ao informado no representante desde que haja tabela de pre‡o incluida
       If CHAVEI=1 And SYS_CODIGO_CLIENTE = "0345" And Len(Rtrim(VSD_I_Codigo_Item))=10 And VSD_I_Codigo_Cor_Tecido<>"" 
          Then AUX_VSD_I_Comissao_Item = VSD_I_Comissao_Item
               VSD_I_Comissao_Item     = ""
               If Rtrim(VSD_I_Tabela)<>""     
                  Then AUX_CODITEM = PegaCodigoRaiz(VSD_I_Codigo_Item)
                       GetRecord "\\Sistemas\\Vendas\\Tbprite" VSD_I_Tabela,AUX_CODITEM To REG_TABPRECO
                       If Retval
                          Then Switch
                                 Case REG_TABPRECO["Em Promocao"]<>"S" : VSD_I_Comissao_Item = [FaturaC->Comissao do Representante]
                                 Case REG_TABPRECO["Em Promocao"]="S"  : VSD_I_Comissao_Item = AUX_VSD_I_Comissao_Item
                               EndSwitch
                       EndIf
               EndIf
               Release Vars AUX_VSD_I_Comissao_Item,AUX_CODITEM
       EndIf
       
       If IsAssigned(LOCALIZA_CODIGO)
          Then Switch
                 Case LOCALIZA_CODIGO="LOC_CODFOR" : LOCALIZAR_POR="C¢d item Fornecedor"
                 Case LOCALIZA_CODIGO="LOC_CODREF" : LOCALIZAR_POR="Referˆncia"
                 Case LOCALIZA_CODIGO="LOC_CODBAR" : LOCALIZAR_POR="C¢digo Barras"
                 otherwise:
                      LOCALIZA_CODIGO="LOC_CODITE"   LOCALIZAR_POR="C¢digo Item"
               EndSwitch
       EndIf
       
       ;-- titulo showdialog
       Switch
         Case Not IsBlank([FaturaC->Numero do Pedido])    and not isblank(VSD_I_Pedido): VSD_IseqTitShow="Pedido"
         Case Not IsBlank([FaturaC->Numero do Orcamento]) and not isblank(VSD_I_Pedido): VSD_IseqTitShow="Or‡amento"
         otherwise                                                                     : VSD_IseqTitShow=""
       EndSwitch
       if not isblank(VSD_IseqTitShow) then VSD_IseqTitShow=VSD_IseqTitShow+" "+VSD_I_Pedido+"/"+Strval(VSD_I_Pedido_Item) endif
               
EndSwitch
EndProc   ;  (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()

INICIO_DIALOG=True
Moveto [Item da OF]
Locate [FaturaC->Numero da OF],SEQIT
CopyToArray RegItem
QUANT   =[Quantidade        ]
CTTOTAL =NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ] = [FaturaC->Codigo da Tabela     ]
EndIf
Registro_Item("Ler")

EndProc ; (Inicia_Registro)
 
;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DigitaF()
Private VRBCICMS_CREDSN, nitens

Moveto "FaturaC"

If PARAM_AGRUPA_ITEM
   Then PARAM_FT_GRUP = "ITENS AGRUPADOS"
   Else PARAM_FT_GRUP = "ITENS"
endif
Play "FT_GRUP"

Moveto "FaturaC"
CHAVEF=0

Moveto [Valor Despesas Acessorias]
           
CALC_OF()

If REEMITIR
   Then Return
EndIf

If CALC_VENCTO
   Then If IsBlank([Tipo de Pagamento])     
				   Then CALC_VENCTO=False
				EndIf
        If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
           Then CALC_VENCTO=False
        EndIf
        if CALC_VENCTO Then CALC_VENCTOS() EndIf
        CALC_VENCTO=False
EndIf

SomaVenctos("FaturaC","FaturaV")

While True

    MSGCAMPO=Field()
    TECLA=" Esc=Retornar               Alt+F=Fun‡”es                 PgUp  PgDn"
    
    If Field()="Forma 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: 0/30/60/ "                      EndIf

    If Field()="Condicao de Pagamento" Or
       Field()="Forma de Pagamento"
       Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
    EndIf

    Switch
      Case Field()="Condicao de Pagamento" : Monta_Opcoes("Condicao de Pagamento","ECF")     
      Case Field()="Forma de Pagamento"    : Monta_Opcoes("Forma de Pagamento","ECF")
    EndSwitch
    
    Prompt TECLA
    Wait Field
         Until "ESC","ENTER","PGDN","F8","DOWN","PGUP",-33,"F1","F3","F4","F","D","F9","F6","F7",-61,-68,"F10",68,70

    If RetVal=-33
       Then 
            Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F3  ~P~ontua‡Æo de Cliente   ": " Consulta/Resgate de pontua‡Æo de clientes" :"F3",
             "F4  ~C~alcula Vencimentos    ": " Calcula os Vencimentos                   " :"F4",
             "F6  T¡t~u~lo de Cr‚dito      ": " Referenciar T¡tulo de Cr‚dito            " :"F6",
             "F7  ~G~erar T¡tulo de Cr‚dito": " Gerar T¡tulo de Cr‚dito                  " :"F7",
             "F8  ~V~encimentos            ": " Vencimentos                              " :"F8",
             "F9  ~T~roco                  ": " Valor para Troco                         " :"F9",
             Separator,
             "Shift+D ~D~esconto           ": " Informar Desconto                        " :"D",
             "Shift+F ~F~rete              ": " Informar Frete                           " :"F",
             Separator,
             "~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()="Condicao de Pagamento" Or
           ;   Field()="Forma de Pagamento"
           ;   Then CONSULTAF1()
           ;EndIf        
           Switch
             Case Field()="Condicao de Pagamento" : Seleciona_Opcoes("Condicao de Pagamento","CR")
             Case Field()="Forma de Pagamento"    : Seleciona_Opcoes("Forma de Pagamento","CR") 
                                                    BibVend_SetaVariaveis("FaturaC","Forma de Pagamento")
           EndSwitch        
      Case RetVal="F3" Or RetVal=-61 :
           PARAM_PONTOS_ROTINA="CONSULTA"
           Play "FT_PONTO"
      Case RetVal="F4":
           If IsBlank([Forma de Pagamento]) 
              Then fastmsg("Forma Pagto Invalida !") 
                   Loop 
           EndIf
           If IsBlank([Tipo de Pagamento]) or [Tipo de Pagamento]="O"   
              Then fastmsg("Tipo Pagto Invalido !")  
                   Loop 
           EndIf
           If IsBlank([Composicao de Dias])
              Then Mensagem("Informe a Composi‡„o de Dias para se calcular os Vencimentos!")
                   Loop
           EndIf      
           
           VrEntrada_Digita()
           
           Nome_Cartao=""
           Numero_Cartao=""
           
           If [Forma de Pagamento]="CT" Or
              [Forma de Pagamento]="CD" Or
              [Forma de Pagamento]="CL"
              Then CHAVEV=1
                   If Not Digita_Cartao()
                      Then UnLockRecord
                           Moveto "FaturaC"
                           Loop
                   EndIf
                   
                   UnLockRecord
           EndIf
           
           CALC_VENCTOS()
           SomaVenctos("FaturaC","FaturaV")
                                
      Case RetVal="F8" Or RetVal="DOWN":     
           Moveto "FaturaV"
           While True
             CHAVEV()
             If CHAVEV=9
                Then QuitLoop
             EndIf
             Controla_EdicaoV()
           EndWhile
           SetaCorRegistro("Padrao")

           Moveto "FaturaC"
           Moveto [Tipo de Pagamento]

      Case RetVal="F9":     
           DIGITA_TROCO() 
           
      Case RetVal="F7":
           VrTCCredito_Digita()

      Case RetVal="F6":
           Play "FT_LTC"      
       
      Case RetVal="PGUP":
           FACA_DIGITAF=False
           FACA_DIGITAT=False           
           CHAVEF=9
           QuitLoop

      Case RetVal="PGDN": 
           If IsBlank([Forma de Pagamento]) 
              Then fastmsg("Forma Pagto Invalida !") 
                   Loop 
           EndIf
           If IsBlank([Tipo de Pagamento]) or [Tipo de Pagamento]="O"   
              Then fastmsg("Tipo Pagto Invalido !")  
                   Loop 
           EndIf
           
           Moveto "FaturaV"
           TOT_VECTOS=0
           CHAVEV=0
           Scan
             If [Data]<[FaturaC->Data de Emissao]
                Then CHAVEV=1
                     MSG="Vencimento invalido !// //"
                     MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                     MSG=MSG+" inferior a data de emiss„o !"
                     Mensagem(MSG)
             EndIf
             TOT_VECTOS=TOT_VECTOS+[Valor]
           EndScan
           UnLockRecord
           Moveto "FaturaC"
           If CHAVEV=1
              Then Loop
           EndIf
           
           msg=""
           Switch
             case PARAM_TITCRED="T":
                if StrVal(TOT_VECTOS-[Valor TC])<>StrVal([Valor Nota Fiscal])
                   then msg="O valor total dos vencimentos menos t¡tulo de cr‚dito,// difere do valor da nota fiscal !" 
                endif   
             
             otherwise                                : 
               If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                  Then msg="O valor total dos vencimentos difere do valor da nota fiscal !"
               EndIf
               
           endSwitch
           if msg<>""
              then mensagem(msg)
           endif   

           If PARAM_CALC_COMIS_ITEM="S"
              Then Moveto "FaturaC"
                   VRBC_COMIS=Round(VRBC_COMIS-((VRBC_COMIS*TXDESCTO_TOTAL)/100),2)
                   tx_comis  =Round(((VRBC_COMIS/[Valor Mercadoria Liquido])*100),2)
                   [Comissao do representante]=tx_comis
                  
                   If PARAM_COMIS_TOTAL_NOTA = "S"
                      Then ;---- Distribui a comissÆo em cada parcela de acordo com o Total da Nota (Mercadoria, Servi‡o, outros) -------
                           VRCALC_COMIS=0
                           Moveto "FaturaV"
                           Scan For Not IsBlank([Valor])
                             [Valor da Comissao]=Round(([Valor]*tx_comis)/100,2)
                             VRCALC_COMIS       =VRCALC_COMIS+[Valor da Comissao]
                             UnLockRecord
                           EndScan
                           If Not IsBlank([Valor])
                              Then [Valor da Comissao]=[Valor da Comissao]+(VRBC_COMIS-VRCALC_COMIS)
                                   UnLockRecord
                           EndIf
                           Release Vars tx_comis
                           Moveto "FaturaC"
                      Else ;---- Distribui a comissÆo em cada parcela de acordo com o valor apurado nos itens e NAO no total da nota -----
                           VRCALC_COMIS=0
                           Moveto "FaturaV"
                           Scan For Not IsBlank([Valor])
                             [Valor da Comissao] = Round((VRBC_COMIS * (([Valor]*100)/[Faturac->Valor Nota Fiscal]))/100,2)
                             VRCALC_COMIS        = VRCALC_COMIS+[Valor da Comissao]
                             UnLockRecord
                           EndScan
                           If Not IsBlank([Valor])
                              Then [Valor da Comissao]=[Valor da Comissao]+(VRBC_COMIS-VRCALC_COMIS) 
                                   UnLockRecord
                           EndIf 
                   EndIf        
           EndIf

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

           If PARAM_COMIS_VENCTO="S" And
              PARAM_CALC_COMIS_ITEM<>"S"
              Then RATEIO_COMISSAO_VENCTOS()
           EndIf

           ;ConfImprime()
           
           FACA_DIGITAT=True
           QuitLoop

      Case RetVal="D" Or RetVal=68:
           If Not Field()="Forma de Pagamento"
              Then DIGITA_DESCTO()
                   CALC_OF()
              ;Else KeyPress "E"
           EndIf

      Case RetVal="F" Or RetVal=70:
           If [IndPres]<>"4"
              then Mensagem("Frete s¢ destina‡Æo com Entrega + Transportador !")
                   loop
              
              else Campo_Ant=Field()
                   DIGITA_FRETE()
                ;; Carrega_Transportador("ATUALIZA_FORM","")
                   Calc_Of()
                   Moveto Field Campo_Ant
           endif

      Case RetVal="ESC": 
        Switch
           Case Field()="Valor Despesas Acessorias" :  
                FACA_DIGITAF=False
                FACA_DIGITAT=False
                CHAVEF=9
                QuitLoop
           Case Field()="Condicao de Pagamento"    : Moveto [Valor Despesas Acessorias]
           Case Field()="Forma de Pagamento"       : Moveto [Condicao de Pagamento]
           OtherWise:
                Left
        EndSwitch

      Case RetVal="ENTER":
        Switch
           Case Field()="Valor Despesas Acessorias"       : Moveto [Condicao de Pagamento]  
                CALC_OF()
           
           Case Field()="Condicao de Pagamento":
                If IsBlank([]) or [Tipo de Pagamento]="O"
                   Then fastmsg("Condi‡Æo de pagamento inv lida !")
                        Loop
                EndIf   
                If Not Checa_Opcoes("Condicao de Pagamento",[])
                   Then Mensagem("Condi‡Æo de pagamento inv lida !")
                        Loop     
                   Else If [Tipo de Pagamento]="P"
                           Then Moveto [Numero de Parcelas]
                           else Moveto [Forma de Pagamento]  
                        EndIf
                EndIf            
           Case Field()="Forma de Pagamento":
                If IsBlank([]) 
                   Then fastmsg("Forma de pagamento inv lida!") 
                        Loop       
                EndIf
                If Not Checa_Opcoes("Forma de Pagamento",[])
                   Then Mensagem("Forma de pagamento inv lida!")
                        Loop     
                   Else BibVend_SetaVariaveis("FaturaC","Forma de Pagamento")
                        Moveto [Valor Despesas Acessorias]
                EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc  ; (DigitaF)

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DigitaT()
Private VRBCICMS_CREDSN, nitens

Moveto "FaturaC"
CHAVET=0

If [IndPres]<>"4"
   Then Moveto [Numero Frete Cotacao]
   Else Moveto [Codigo da Transportadora] 
EndIf   

If REEMITIR
   Then CONFIMPRIME()
        Return
EndIf

While True
    MSGCAMPO=Field()
    TECLA=" Esc=Retornar               Alt+F=Fun‡”es                 PgUp  PgDn=Finalizar"
    
    Switch
      Case Field()="RNTC Veiculo" : 
           MSGCAMPO="Registro Nacional de Transportador de Carga (ANTT)"
      Case Field()="Numero Frete Cotacao" :
           MSGCAMPO="[F8] Observa‡Æo"
    EndSwitch        

    If Field()="Codigo da Transportadora" Or
       Field()="Codigo do Veiculo"        Or
       Field()="Cidade Transport"         Or
       Field()="Frete por Conta"    
       Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
    EndIf
    
    Prompt TECLA
    Wait Field
         Until "ESC","ENTER","PGDN","F8","DOWN","PGUP",-33,"F1","F3","F4","D","F9","F6","F7",-61,-67,"F9",-66,"F8"

    If [IndPres]<>"4" 
       Then If RetVal=-33
               Then Echo Normal
                    Echo Off
                    ShowPopup " Fun‡”es " CENTERED
                     "[F8] ~O~bserva‡äes             " : " Observa‡äes                        " : "F8",
                     Separator,
                     "~C~ancelar                     " : " Cancelar a Opera‡„o                " : "CANCELAR"
                    EndMenu
                    To MenuVar
                    Echo Off
                    
                    If MenuVar="CANCELAR" or MenuVar="Esc"
                       Then Loop
                    EndIf                                         
                    RetVal=MenuVar
            EndIf
       Else If RetVal=-33
               Then Echo Normal
                    Echo Off
                    ShowPopup " Fun‡”es " CENTERED
                     "[F4] ~C~alcular Volumes        " : " Calcular Volumes                   " : "F4",
                     "[F7] ~E~ndere‡os               " : " Endere‡os Entrega/Retirada/Cobranca" : "F7",
                     "[F8] ~O~bserva‡äes             " : " Observa‡äes                        " : "F8",
                     "[F9] Tran~s~portador/Redespacho" : " Transportador/Redespacho           " : "F9",
                     Separator,
                     "~C~ancelar                     " : " Cancelar a Opera‡„o                " : "CANCELAR"
                    EndMenu
                    To MenuVar
                    Echo Off
                    
                    If MenuVar="CANCELAR" or MenuVar="Esc"
                       Then Loop
                    EndIf                                         
                    RetVal=MenuVar
            EndIf
    EndIf
    
    Switch                                    
      Case RetVal="F1":
           If Field()="Codigo da Transportadora" Or
              Field()="Codigo do Veiculo"        Or
              Field()="Cidade 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
           
           If Field()="Codigo da Transportadora"
              Then Carrega_Transportador("CARREGA_FATURA","Transportador")
                   Carrega_Transportador("ATUALIZA_FORM","")
           EndIf            
    
      Case Retval="F4":
           If [IndPres]="4"
              Then CALC_VOLUMES("FATURA")
           EndIf   
      
      Case Retval="F7" Or Retval=-66 :
           If [IndPres]<>"4"
              Then Mensagem("Com local de entrega, use outra destina‡Æo com Indicador de presen‡a [4-entrega a domic¡lio]!")
              Else ShowDialog_Endereco()
           EndIf
           
      Case Retval="F8":
           CampoAnt=Field()
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
           
      Case Retval="F9" Or Retval=-67:
           If [IndPres]<>"4"
              Then Mensagem("Com Transportador, use outra destina‡Æo com Indicador de presen‡a [4-entrega a domic¡lio]!")
              Else Field_Ant = Field()
                   ShowDialog_TranspRedespacho()
                   Carrega_Transportador("CARREGA_FATURA","Redespacho")
                   Carrega_Transportador("CARREGA_FATURA","Transportador")
                   Carrega_Transportador("ATUALIZA","Transportador")                   
                   Carrega_Transportador("ATUALIZA_FORM","")
                   Moveto Field Field_Ant
           EndIf
           
      Case RetVal="PGUP":
           CHAVET=9
           QuitLoop

      Case RetVal="PGDN":
           Moveto "FaturaC"
           MSG_REDESPACHO()
           
           ConfImprime()
           QuitLoop

      Case RetVal="ESC":
        Switch
           
           Case Field()="Codigo da Transportadora" Or
                Field()="Numero Frete Cotacao"      :
                CHAVET=9                        
                QuitLoop
           Case Field()="Codigo do Veiculo" :
                Moveto [Codigo da Transportadora]
           OtherWise:
                Left
        EndSwitch

      Case RetVal="ENTER":
        Switch
          Case Field()="Numero Frete Cotacao"     :
          Case Field()="Codigo da Transportadora" :
               Carrega_Transportador("CARREGA_FATURA","Transportador")
               Carrega_Transportador("ATUALIZA_FORM","")
               Moveto [Codigo do Veiculo]
          Case Field()="Peso Liquido"             :
               Moveto [Codigo do Veiculo]
          OtherWise : 
               Right
        EndSwitch       
    EndSwitch
EndWhile

EndProc  ; (DigitaT)

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc CHAVEV()
While True
  Moveto "FaturaV"

  SomaVenctos("FaturaV","FaturaV")

  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  SetaCorRegistro("Editar")
  While True

        MSGCAMPO=""
        TECLA= " Esc=Retornar  F7=Paginar  F9=LimpaVenctos  F6=TC"

        Prompt TECLA

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

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
             
               SomaVenctos("FaturaV","FaturaV")

               PAGINA("FaturaV","MR")
               If EDITAR="S"
                  Then CHAVEV=0
                       SEQ=[Sequencia]
                       Controla_EdicaoV()
                  Else If EXCLUIR="S"
                          Then EXCLUIR_VENCTO=False
                               If [Forma de Pagamento]="RP" And [Observacao]<>""
                                  Then LANCTO_RESGATE = [Observacao]
                                       PARAM_PONTOS_ROTINA="EXCLUI_RESGATE_PONTOS"
                                       Play "FT_PONTO"
                                  Else If QuerExcluir("")
                                          Then EXCLUIR_VENCTO=True
                                       EndIf   
                               EndIf
                               If EXCLUIR_VENCTO
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                               Release Vars EXCLUIR_VENCTO,LANCTO_RESGATE,PARAM_PONTOS_ROTINA
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="F9":
             Home
             while true
               if RecordStatus("New")
                  then quitloop
               endif   

               if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC" and
                  (substr([Numero do Cartao],1,3)="CP-" or substr([Numero do Cartao],1,3)="CR-" )) OR
                  [Forma de Pagamento]="RP" 
                  then skip    
                       if eot() then quitloop endif   
                  else unlockrecord
                       del
               endif        
             endwhile
             QuitLoop
              
        Case RetVal="F6":
             del
             Play "FT_LTC"
             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
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ;  (ChaveV)

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

If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else 
        if (PARAM_TITCRED="T" And [Forma de Pagamento]="TC") Or [Forma de Pagamento]="RP" 
           then Mensagem("Edi‡Æo para '"+[Forma de Pagamento]+"' nÆo permitida!")
                Return
        EndIf
        Moveto [Data]
EndIf
FPAGTO=[Forma de Pagamento]
While True
  TECLA= " Esc=Retornar  "
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
     Else TECLA=TECLA+"             "
  EndIf

  fpold=[Forma de Pagamento]
  
  MSGCAMPO=field()
  If Field()="Forma de Pagamento"
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf

  Prompt TECLA
  SetaCorRegistro("Editando")
  Wait 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
                          Else Undo
                       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
                    []=[FaturaC->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 (PARAM_TITCRED="T" and []="TC") Or []="RP" 
               then Switch
                      Case []="TC" : Mensagem("Forma Pagamento nÆo permitida aqui, use a fun‡Æo [F6]=TC !")
                                     []=fpold
                                     Loop
                      Case []="RP" : Mensagem("Forma Pagamento nÆo permitida aqui, use a fun‡Æo [F3] !")
                                     []=fpold
                                     Loop
                    EndSwitch                                 
            endif   
            
            If PARAM_ALTERA_FP="S"
               Then If []<>FPAGTO And (FPAGTO="CT" Or FPAGTO="CD" Or FPAGTO="CH" Or FPAGTO="CP" Or FPAGTO="CL")
                       Then Switch
                              Case FPAGTO="CH" or FPAGTO="CP" :
                                   Moveto "FaturaV"
                                   If [Codigo_Banco  ]<>"" Or   
                                      [Nome_Banco    ]<>"" Or   
                                      [Agencia       ]<>"" Or   
                                      [Numero_Cheque ]<>"" Or   
                                      [Titular_Cheque]<>""  
                                      Then ConfGeral("Se continuar a fazer essa altera‡Æo os dados//"+
                                                     "armazenados serÆo perdidos.////"+
                                                     "Deseja continuar o processo ?")
                                           If OK<>"S"
                                              Then []=FPAGTO
                                                   Loop
                                              Else [Codigo_Banco  ]=""
                                                   [Nome_Banco    ]=""
                                                   [Agencia       ]=""
                                                   [Numero_Conta  ]=""
                                                   [Numero_Cheque ]=""
                                                   [Tipo_Emitente ]=""
                                                   [Titular_Cheque]=""
                                                   [Cidade        ]=""
                                                   [UF            ]=""
                                                   [Observacao    ]=""
                                                   [CPF           ]=""
                                           EndIf
                                           UnLockRecord
                                   EndIf
                              Case FPAGTO="CT" Or FPAGTO="CD" Or FPAGTO="CL":
                                   Moveto "FaturaV"   
                                   If [Numero do Cartao]<>"" Or
                                      [Nome do Cartao  ]<>""
                                      Then ConfGeral("Se continuar a fazer essa altera‡Æo os dados//"+
                                                     "armazenados serÆo perdidos.////"+
                                                     "Deseja continuar o processo ?")
                                           If OK<>"S"
                                              Then []=FPAGTO
                                                   Loop
                                              Else [Numero do Cartao]=""
                                                   [Nome do Cartao  ]=""
                                           EndIf
                                           UnLockRecord
                                   EndIf   
                            EndSwitch  
                    EndIf     
               Else If []<>FPAGTO And Not IsBlank(FPAGTO)
                       Then Mensagem("Para mudar forma de Pagto exclua e inclua novamente este Vencimento Ok !")
                            []=FPAGTO
                            Loop
                    EndIf         
            EndIf        
            FPAGTO=[]
            If []="CH" or []="CP" 
               Then Play "FT_ECH"
               Else If []="CT" Or []="CD" or []="CL"
                       Then if not Digita_Cartao() then loop endif
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc   ; (DigitaV)




;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()
Private ANT_GRAVA_LOG

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
;NÆo vai ocorrer LOG de itens exclu¡dos se cabe‡a for exclu¡da
ANT_GRAVA_LOG = GRAVA_LOG
GRAVA_LOG     = False

LimpaRodape(0)
Aguarde("Excluindo lan‡amento")                                                           

Moveto "FaturaI"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  EXCLUSAO_I()
EndWhile

Moveto "FaturaV"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile

Moveto "Faturacc"
While RecordStatus("New")=False
  While IsLockRecord() EndWhile
  Del
EndWhile

Moveto "FaturaC"
UnLockRecord
KeyPress "F7"

Moveto "FaturICM"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While  [Numero da OF]=[FaturaC->Numero da OF]
       Del
       If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaIC"
Moveto [Numero da OF]
Locate [FaturaC->Numero da OF]
While  [Numero da OF]=[FaturaC->Numero da OF]
       Del
       If EOT() Then QuitLoop EndIf
EndWhile

Moveto "FaturaC"  
KeyPress "F7"
GRAVA_LOG = ANT_GRAVA_LOG
If GRAVA_LOG Then Grava_LogEx("Fatura") EndIf
Del

Release Vars GRAVA_LOG
LimpaRodape(0)                                                           

If MODOFILTRAR and STATUSFILTRO="UPDATE" Then STATUSFILTRO="DEL" EndIf
If MODOFILTRAR and STATUSFILTRO="INSERT" Then STATUSFILTRO=""    EndIf

EndProc   ; (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc EXCLUSAO_I()
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf
CHAVEI=8

ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()
Moveto "FaturaI"
SEQIT=[Item da OF]
If GRAVA_LOG Then Grava_LogEx("Item do Balcao") EndIf
Del

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

EndProc  ; (Exclusao_I)


;*******************************************************************************
;* Cancelamento do Item                                                        *
;*******************************************************************************
Proc CANCELA_I()
CHAVEI=8

ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()
Moveto "FaturaI"
[Situacao_Item]="C"
unlockrecord

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

EndProc  ; (CANCELA_I)

;*******************************************************************************
;* ROTINA PARA CONFIRMACAO DE TESTE DE IMPRESSAO                               *
;*******************************************************************************
Proc CONFIMPRIME()
Private OPCAOC,OPCAON,NUM_FATURA,EMP_FATURA,NF_FATURADA, TIPO_SAIDA

TIPO_SAIDA            =""
PARAM_VISUALIZAR_DANFE=False

MSGCAMPO=""
LimpaRodape(0)

VSD_TG_EDest = "***Indefinido***"  
GetRecord "\\Sistemas\\Cadastro\\Destmail" [FaturaC->Codigo],"C" To REG_DestE
If not RetVal
  Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [FaturaC->Codigo] To REG_DestinatE
       If RetVal
          Then VSD_TG_EDest = REG_DestinatE["Endereco_Eletronico"]
               If VSD_TG_EDest = "" then VSD_TG_EDest = "***Indefinido***"  endIf
       EndIf 
  Else VSD_TG_EDest = REG_DestE["Email"] 
EndIf

;---- Rateio Fatura ------------------------------------------------------
Moveto "FaturaC"
If PARAM_AGRUPA_ITEM
   Then 
        ;---- Rateio Itens do FaturaG ------------------------------------
        PARAM_CALCOF = ""     ;ativar gravar calculos faturac 
        PARAM_FT_GRUP = "RATEIOS AGRUPADOS"
        Play "FT_GRUP"

        ;---- Carrega Variaveis do Item para o FaturaI ------------------- 
        DestruirArrayItens()

        ;---- Carregar Itens do FaturaI ----------------------------------
        PARAM_FT_GRUP = "ITENS"
        Play "FT_GRUP"
        
        PARAM_CALCOF = "ITEM" ;desativar gravar calculos faturac
        Calc_Of()
EndIf

;---- Rateio Itens do FaturaI "PARAM" ----------------------------
PARAM_FT_GRUP = "RATEIOS"
Play "FT_GRUP"

;---- Release vars array itens -------------------------------------------
PARAM_CALCOF = ""     ;ativar gravar calculos faturac 
DestruirArrayItens()

If PARAM_RATEIO_COMISSAO="T"
   Then Moveto "FaturaC"
        Moveto [Codigo do Representante]
        Echo Normal
        Echo Off
        APLIC_ORIGEM="FATURA"
        SEQIT=0
        Play "Ft_Comis"
EndIf

UnLockRecord
Do_It!
SaveTables                   

Echo Normal
Echo Off 

CoEditKey                            
FormKey

If (PARAM_LIMITE_CREDITO="S" Or PARAM_LIMITE_CREDITO="P") And
   [FaturaC->Tipo     ]="C" And
   [Nome Fantasia EmitDest]<>"DIVERSOS" And [Nome Fantasia EmitDest]<>"CONSUMIDOR FINAL" And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0
   Then If SYS_CODIGO_CLIENTE<>"0222"
           Then If Search("VIST",[FaturaC->Descricao CondPagto])=0 
                   Then If Not Limite_Credito()
                           Then TIPO_SAIDA="NAO_FAZ"
                        EndIf
                EndIf
           Else If Not Limite_Credito()
                   Then TIPO_SAIDA="NAO_FAZ"
                EndIf
        EndIf        
EndIF   

If ([FaturaC->Razao Social]="DIVERSOS" or [FaturaC->Razao Social]="CONSUMIDOR FINAL" or [FaturaC->Razao Social]="" ) and
   [FaturaC->Valor Nota Fiscal]>3000
   Then Mensagem("Para venda superior a R$ 3.000,00, //‚ obrigat¢rio informar os dados do cliente !// // Corrigir esta nota !")
        TIPO_SAIDA="NAO_FAZ"
endif
If ([FaturaC->Razao Social]="DIVERSOS" or [FaturaC->Razao Social]="CONSUMIDOR FINAL" or [FaturaC->Razao Social]="" ) and [FaturaC->IndPres]="4" 
   Then Mensagem("Para venda com entrega informar dados do Cliente e Transportadora !")
        TIPO_SAIDA="NAO_FAZ"
endif



While TIPO_SAIDA<>"NAO_FAZ"
  ModoNFe=""

  ;EdocLerConfig()

  Switch
    Case REEMITIR And Not IsBlank(PARAM_DOC_NCE)  
                  And Not IsBlank([Numero Nota Gerada]) And SubStr([FaturaC->Docto Nota Gerada],1,3)="NCE": 
                      
      Opcaoc="NFC-e"                

    OtherWise:

      ;Echo Normal
      Echo Off
    
      opcao1="."  dopcao1=""  ropcao1="Esc"
    
      If Not IsBlank(PARAM_DOC_NCE)
         Then opcao1="Nota Fiscal/~E~letr“nica/"+PARAM_DOC_NCE  dopcao1=" Gera Nota Fiscal Eletr“nica/"+PARAM_DOC_NCE  ropcao1="NFC-e/"+PARAM_DOC_NCE 
      EndIf
      
      If Not IsBlank([Numero Nota Gerada])
         Then Switch
                Case SubStr([FaturaC->Docto Nota Gerada],1,3)="NCE" and [FaturaC->Docto Nota Gerada]=PARAM_DOC_NCE:
                
                      opcao1="Nota Fiscal/~E~letr“nica/"+PARAM_DOC_NCE  dopcao1=" Gera Nota Fiscal Eletr“nica/"+PARAM_DOC_NCE  ropcao1="NFC-e/"+PARAM_DOC_NCE 
              EndSwitch
      EndIf   
      ShowPopup " Impress„o " CENTERED
          "~S~uspende              " : " N„o Imprime no momento        " : "Suspende",
          opcao1                     : dopcao1                           : ropcao1
      EndMenu To Opcaoc
      echo off
    
      If Opcaoc="Esc" Or Not Retval Or Opcaoc="Suspende" Or Opcaoc="Visualizar"
         Then If Opcaoc="Visualizar" Then Play "VIS_DANF" EndIf
              QuitLoop
      EndIf
                       
  EndSwitch

  if [FaturaC->Data de Emissao]<today()
     then
          MSG=    "Detectado necessidade de alterar a data do documento "+format("D13",[FaturaC->Data de Emissao])+" !// //" 
          MSG=MSG+"OF foi gerada anterior a hoje "+format("D13",today())+"// //" 
          MSG=MSG+"Confirme se seu computador est  com a data correta !//" 
          MSG=MSG+"Confirma altera‡Æo da data ?"
          if ConfGeral(MSG)
             then 
                  [Data de Emissao]=Today()
                  [Data de Saida  ]=Today()
                  [Hora de Saida  ]=Time()
          endif
          Mensagem("Documento nÆo emitido, Verficar e tente novamente !")
          quitloop
  endif        

  ;***** Obtendo o Numero da Nota Fiscal *******
  NOTAFISC ="000000"

  Switch
    Case SubStr(Opcaoc,1,5)="NFC-e":
         If SubStr(PARAM_DOC_NCE,1,3)<>"NCE" Or (SubStr(PARAM_DOC_DUPNCE,1,3)<>"DCE")
            Then Mensagem("Configura‡„o inv lida NFCe/Duplicata, ver parƒmetros !")
                 QuitLoop
         EndIf

         opcaoc="NFC-e em modo ["+ModoNFe+"]"

         CODFISC  =PARAM_DOC_NCE
         SERIEFISC=PARAM_SER_NCE

  EndSwitch

  If not IsBlank([FaturaC->Numero Nota Gerada])
		 Then 
          NOTAFISC=[FaturaC->Numero Nota Gerada]
     Else 
          TIPO_SAIDA = "NOVANOTA"  

          If PARAM_FATURA_IGUAL_OF="S"
						 Then 
                  NOTAFISC=[FaturaC->Numero da OF]
									Moveto "NumeroNf"
									Moveto [Codigo da Empresa]
									Locate [FaturaC->Codigo da Empresa],CODFISC
									If Not RetVal
										 Then Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                          QuitLoop
									EndIf
									
                  If [FaturaC->Data de Emissao]<[Data Ultima Emissao]
                     Then MSG=Opcaoc+" com Data de Emiss„o inferior a data da ultima emiss„o!// //"
                          MSG=MSG+"Verificar no controle de numera‡„o !"
                          Mensagem(MSG)
                          QuitLoop
                  EndIf
             Else 
                  Moveto "NumeroNf"
                  Moveto [Codigo da Empresa]
                  Locate [FaturaC->Codigo da Empresa],CODFISC
                  If RetVal
                     Then While True
                            NOTAFISC = [Proximo Numero]
                            NOTAFISC = ALVAR(StrVal(NOTAFISC),6,"0")

                            LockRecord
                            If RetVal
                               Then QuitLoop
                            EndIf
                            MSG="O usu rio "+Upper(ErrorUser())+", esta gerando:// //"
                            MSG=MSG+Opcaoc+" N§ "+NOTAFISC+" !// //"
                            MSG=MSG+"Efetuar uma nova tentativa para//"
                            MSG=MSG+"libera‡„o do pr¢ximo n£mero para "+Opcaoc+" ?"
                            ConfGeral(MSG)
                            If OK<>"S"
                               Then Moveto "FaturaC"
                                    UnLockRecord
                                    FormKey
                                    Return
                            EndIf
                          EndWhile

                          If [FaturaC->Data de Emissao]<[Data Ultima Emissao]
                             Then 
                                  MSG=Opcaoc+",//com Data de Emiss„o inferior a data da ultima emiss„o!// //"
                                  MSG=MSG+"Verificar no controle de numera‡„o !"
                                  Mensagem(MSG)
                                  QuitLoop
                          EndIf
                     Else Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                          QuitLoop
                  EndIf
          EndIf
  EndIf

  If IsBlank([FaturaC->Numero Nota Gerada])
     Then Moveto "FaturaC"
          NUM_FATURA =[Numero da OF     ]
          EMP_FATURA =[Codigo da Empresa]
          NF_FATURADA=False
          
          Moveto [Numero Nota Gerada]
          Locate NOTAFISC
          If RetVal
             Then 
                  While True
                    If [Codigo da Empresa]=EMP_FATURA And
                       [Docto Nota Gerada]=CODFISC    And
                       [Serie Nota Gerada]=SERIEFISC
                       Then NF_FATURADA=True
                            QuitLoop
                    EndIf   
                    Skip
                    If EOT() Then Quitloop EndIf
                    Locate Next NOTAFISC
                    If Not RetVal
                       Then QuitLoop
                    EndIf
                  EndWhile
          EndIf

          Moveto [Numero da OF]
          Locate NUM_FATURA
          If Not RetVal
             Then Mensagem("Erro ao localizar Ordem de Fatura: "+NUM_FATURA)
                  QuitLoop
             Else While True
                    If Not IsLockRecord()
                       Then QuitLoop
                    EndIf
                  EndWhile
          EndIf
          
          If NF_FATURADA
             Then 
                  MSG=    "O pr¢ximo n§ "+Opcaoc+" "+NOTAFISC+" j  foi gerado pela //"
                  MSG=MSG+"Ordem de Faturamento n§ "+[FaturaC->Numero da OF]+"// //"
                  MSG=MSG+"Verificar no controle da numera‡„o se //"
                  MSG=MSG+"a ordem esta correta ou//"
                  MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                  MSG=MSG+"Emiss„o n„o permitida !"
                  Mensagem(MSG)
                  QuitLoop
          EndIf
  EndIf

  Moveto "NotaC"
  Moveto [Codigo da Empresa]
  Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
  If RetVal
     Then Moveto "FaturaC"
          If [NotaC->Situacao]<>"C"
             Then MSG=Opcaoc+" N§ "+NOTAFISC+" j  existe no Sistema !// //"
                  If IsBlank([FaturaC->Numero Nota Gerada])
                     Then
                          MSG=MSG+"Verificar no controle da numera‡„o se //"
                          MSG=MSG+"a ordem esta correta ou//"
                          MSG=MSG+"no registro das notas a atual situa‡„o da mesma. !// //"
                          MSG=MSG+"Emiss„o n„o permitida !"
                          Mensagem(MSG)
                          QuitLoop
                     Else If [NotaC->Numero da OF]<>[FaturaC->Numero da OF]
                             Then MSG=MSG+"E esta foi gerada pela Ordem de Fatura "+[NotaC->Numero da OF]+".//"
                                  MSG=MSG+"Verificar no controle da numera‡„o se //"
                                  MSG=MSG+"a ordem esta correta ou Ordem de Faturamento e Registro de notas.// //"
                                  MSG=MSG+"Emiss„o n„o permitida !"
                                  Mensagem(MSG)
                                  QuitLoop
                             Else MSG=MSG+"Deseja emit¡-la novamente ?"
                          EndIf
                  EndIf
                  ConfGeral(MSG)
                  If OK="N"
                     Then QuitLoop           
                  EndIf
             Else 
                  Mensagem(Opcaoc+" N§ "+NOTAFISC+" j  existe no Sistema !// // Situa‡„o [CANCELADA] !")
                  QuitLoop
          EndIf

     Else Moveto "FaturaC"
          ConfGeral("Confirma Emiss„o "+Opcaoc+" N§ "+NOTAFISC+"/"+CODFISC+" ?")
          If OK="N"
             Then 
                  QuitLoop
          EndIf
  EndIf

  Switch
    Case SubStr(Opcaoc,1,5)="NFC-e":
         if not EdocLerConfig() or Not EdocConsultar("Enviar")
            then 
                 quitloop
         endif
    
         GRAVA_CONTINGENCIA=True
         If ModoNFe<>"Normal"
            Then JC_Digita()
         EndIf
         If Not GRAVA_CONTINGENCIA
            Then 
                 QuitLoop
         EndIf
         
         [Hora de Saida] = Time()
         switch
           case VersaoNFe="4.00" : Play "NF_NCE40"
           otherwise             : mensagem("VersÆo NFC-e "+VersaoNFe+", nÆo disponivel !// //Verificar com Suporte !") 
         endswitch
         
  EndSwitch

  switch
    case search("XXXXXX",CODFISC)>0:


    otherwise                      : 
    ;;******  Emissao de Carne ************
    Moveto "FaturaC"
    If Not IsBlank(PARAM_RELAT_CARNE) And [FaturaC->Forma de Pagamento]="CR"
       Then 
           ;Echo Normal
            Echo Off                                    
            ShowPopup " Op‡”es " CENTERED
              "C~a~rnˆ"    : "Imprime Carnˆ"     :"Carne",
              "~C~ancelar" : "N„o Imprime Carnˆ" :"Cancelar"
            EndMenu
            To Opcaon
  
            Echo off
  
            If (Opcaon<>"Esc") and (Opcaon<>"Cancelar")
                Then If Opcaon="Carne"
                        Then MSGDISPOSITIVO=Opcaon
                             DispositivoI("CR")
                             If OK<>""
                                Then Play PARAM_RELAT_CARNE
                             EndIf
                     EndIf
            EndIf
    EndIf
  
    ;;******  Emissao de Titulo de Credito ************
    Moveto "FaturaC"
    If PARAM_TITCRED="T"
       then Play "FT_IVALE"
    endif   

  Endswitch

  QuitLoop
EndWhile

if TIPO_SAIDA = "NOVANOTA"
   then
        Moveto "NumeroNF"
        If RecordStatus("Locked") Then UnLockRecord EndIf
Endif

Moveto "FaturaC"
UnLockRecord
formkey

Echo Normal
Echo Off

SaveTables
EndProc   ; (ConfImprime)

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc EdocLerConfig()
private pos, pos2, s

;--- Carregando variaves ------------------------------------------------------
PastaNfeManager  =RTrim(PARAM_CAMINHO_MANAGER)
GrupoeDoc        =RTrim(PARAM_GRUPO_EDOC)
CNPJ_Manager     =Tira_CharNum(CNPJNF_e)

EdocStatusOk     =True 

If not IsAssigned(CANC) 
   Then CANC = false 
EndIf

PastaNfeManagerMonitorar=PastaNfeManager+"Monitorar\\"+GrupoeDoc+"\\NFCe\\"+CNPJ_Manager+"\\"

;--- Carregando parametros ----------------------------------------------------
AmbienteNFe    =""
ModoNFe        =""
VersaoNFe      =""
VersaoEsquema  =""
Fuso_Horario   =""

;--- Carregando parametros atraves do getconfig por CNPJ ----------------------
Aguarde("Verificando configura‡”es/Status do eDOC CNPJ "+CNPJ_Manager+" !")

while true
  switch
    case search("NCE",CODFISC)>0: 
      
      FileWrite        PrivDir()+"manager2.ini" From  ""               
          
      FileWrite        PrivDir()+"funcao1.txt"  From  "EDOCS|"+PrivDir()+"|"+PastaNfeManagerMonitorar+"|"+"st"+StrVal(ORDFAT)+".ini"+"\n"
      ExecVise(PrivDir()+"funcao1.txt")
      conteudodoarquivo="" 
      
      If Not LerConteudodoArquivo8(PrivDir()+"manager2.ini") Or
         conteudodoarquivo="" 
         Then 
              MSG="Configura‡äes do eDOC !// //"
          	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", nÆo encontrado!" 
           	  MSG=MSG+"// //Verifique se ManagerEDoc esta carregado !"
           		Mensagem(MSG)
              EdocStatusOk=False
              quitloop
      EndIf
      
      Pos=SearchFrom("[NFCE]",conteudodoarquivo,1)
      Pos2=SearchFrom("Ambiente=",conteudodoarquivo,pos)
      AmbienteNFe=SubStr(conteudodoarquivo,pos2+9,1)
  
      Pos=SearchFrom("[NFCE]",conteudodoarquivo,1)
      Pos2=SearchFrom("VersaoManual=",conteudodoarquivo,pos)
      s=Upper(Tira_CharEspecial(SubStr(conteudodoarquivo,pos2+13,4)))
      If s="6.0"  Then VersaoNFe="4.00"  EndIf
      
      Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
      Pos2=SearchFrom("LoteAutomatico=",conteudodoarquivo,pos)
      LoteAutomaticoNFe=SubStr(conteudodoarquivo,pos2+15,1)
  
      Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
      Pos2=SearchFrom("Modo=",conteudodoarquivo,pos)
      s=Tira_CharEspecial(SubStr(conteudodoarquivo,pos2+5,2))
      If s="1"  Then ModoNFe="Normal"  EndIf
      If s="10" Then ModoNFe="SCAN"    EndIf
      
      If IsBlank(ModoNFe)
         Then MSG="Configura‡äes do eDOC !// //"
          	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", gravar configura‡äes.//" 
           	  MSG=MSG+"// Verificar tempo de resposta do computador muito lento !"
           	  MSG=MSG+"// Tente desativar antiv¡rus e outros programas !"
           	  MSG=MSG+"// //Verifique se ManagerEDoc esta carregado !"
           		Mensagem(MSG)
              EdocStatusOk=False
              QuitLoop
      Endif   
      
      Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
      Pos2=SearchFrom("VersaoEsquema=",conteudodoarquivo,pos)
      VersaoEsquema=Upper(SubStr(conteudodoarquivo,pos2+14,7))
      
      Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
      Pos2=SearchFrom("FusoHorario=",conteudodoarquivo,pos)
      Fuso_Horario=SubStr(conteudodoarquivo,Pos2+12,6)
    
  endswitch

  quitloop
endwhile

If AmbienteNFe="2"
   Then Mensagem("Utilizando NFC-e em ambiente de [ HOMOLOGA€ŽO ] !")
EndIf   

release vars conteudodoarquivo 
LimpAguarde()

return EdocStatusOk
endproc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc EdocConsultar(operacao)
private nfeserie, status, operacao

EdocConsultaOk           =True 

SituacaoNFeExiste        =False

SituacaoNFeRegistrada    =False
SituacaoNFeEnviada       =False
SituacaoNFeRecebida      =False

SituacaoNFeDenegada      =False
SituacaoNFeAutorizada    =False
SituacaoNFeCancelada     =False
SituacaoNFeRejeitada     =False
  
while True

  Aguarde("Consultando a NFC-e "+NOTAFISC+" no eDOC, aguarde at‚ 30 segundos !")
  ArqNFE="nc"+StrVal(NOTAFISC)+".TX2"

  nfeserie=substr(SERIEFISC,4,1)

  switch
    case operacao="Inutilizada":
      FileWrite PrivDir()+"managcon.txt" From "cnpj="+CNPJ_Manager+"\n"+
                                              "Campos=cnpj,nfini,nffin,serie,dtcadastro,justificativa\n"+
                                              "filtro="+
                                              "nfini="+StrVal(NumVal(NOTAFISC))+" AND "+
                                              "nffin="+StrVal(NumVal(NOTAFISC))+" AND "+
                                              "serie='"+nfeserie+"'"+"\n"+
                                              "Visao=TspdNFCeFaixaInut"+"\n"    

    otherwise                  :
      FileWrite PrivDir()+"managcon.txt" From "cnpj="+CNPJ_Manager+"\n"+ 
                                              "Campos=cnpj,numero,serie,situacao\n"+
                                              "filtro="+
                                              "cnpj="+CNPJ_Manager+" AND "+
                                              "serie='"+nfeserie+"' AND "+
                                              "numero="+StrVal(NumVal(NOTAFISC))+"\n"
    
     
  endswitch

  Deleta_Arquivo(PrivDir()+"managcon.ret")
  
  FileWrite        PrivDir()+"funcao2.txt" From "EDOCC|"+PrivDir()+"|"+PastaNfeManagerMonitorar+"|"+ArqNFE+"\n"
  ExecVisecf(PrivDir()+"funcao2.txt","")
  
  If not ExisteArquivo8(PrivDir()+"managcon.ret",0)
     then Mensagem("eDOC da Empresa ["+NOMENF_e+"],// n„o esta carregado/ocupado/inativo !// //Antiv¡rus ou problemas com permiss”es de usu rio podem//"+
                   "estar impedindo que o arquivo seja criado.// // Verifique o eDOC ou tente novamente !// // Verifique se ManagerEDoc esta carregado !")
          EdocConsultaOk=False
          quitloop
  endif        

  FileRead PrivDir()+"managcon.ret" to conteudodoarquivo
  

  status=""
  Switch
    Case Search("AUTORIZADA",conteudodoarquivo)>0: 
      SituacaoNFeExiste    =true
      SituacaoNFeAutorizada=true
      status="AUTORIZADA"
  
    Case Search("CANCELADA",conteudodoarquivo)>0:
      SituacaoNFeExiste    =true
      SituacaoNFeAutorizada=true
      SituacaoNFeCancelada =true
      status="CANCELADA"
  
    Case Search("DENEGADA",conteudodoarquivo)>0:
      SituacaoNFeExiste    =true
      SituacaoNFeDenegada = true
      status="DENEGADA"
      
    Case Search("REGISTRADA",conteudodoarquivo)>0:
      SituacaoNFeExiste    =true
      SituacaoNFeRegistrada=true 
      status="REGISTRADA"
      
    Case Search("ENVIADA",conteudodoarquivo)>0:
      SituacaoNFeExiste    =true
      SituacaoNFeEnviada   =true
      status="ENVIADA"
      
    Case Search("RECEBIDA",conteudodoarquivo)>0:
      SituacaoNFeExiste    =true
      SituacaoNFeRecebida  =true
      status="RECEBIDA"
  
    Case Search("REJEITADA",conteudodoarquivo)>0:
      SituacaoNFeExiste    =true
      SituacaoNFeRejeitada =true
      status="REJEITADA"
  
  EndSwitch

  switch
    ;-------------------------------------------------------------------------------------------------------
    case operacao="Enviar":
      Switch
        Case IsBlank([Numero Nota Gerada]) and SituacaoNFeExiste                                           :  ; nota nova
          MSG=    "NFC-e "+NOTAFISC+", "+status+" no Edoc/SEFAZ !// //"
          MSG=MSG+"Consultar/Resolver/Descartar a NFC-e no eDOC !// //"
          MSG=MSG+"Verifique o controle de numera‡„o da pr¢xima nota se esta correta !"
          Mensagem(MSG)
          EdocConsultaOk=false
    
        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeAutorizada and not SituacaoNFeCancelada      :  ; nota existente
          Mensagem("NFC-e "+NOTAFISC+" foi confirmada sua autoriza‡„o no SEFAZ !")
          EdocConsultaOk=false
        
        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeAutorizada and SituacaoNFeCancelada          :  ; nota existente 
          Mensagem("NFC-e "+NOTAFISC+" J  foi cancelada no SEFAZ !// //Confirme cancelamento no Sistema !")
          EdocConsultaOk=false

        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeRegistrada                                   :  ; nota existente 
          MSG="NFC-e "+NOTAFISC+" j  foi REGISTRADA pelo eDOC "
          Switch
           Case [FaturaC->Sistema Gerador]="n" : 
             MSG=MSG+"Modo Normal !// //"
             MSG=MSG+"Confirme sua autoriza‡Æo no eDOC,// em Modo: Normal e use [RESOLVER] !// //"
          
           Case [FaturaC->Sistema Gerador]="s" : 
             MSG=MSG+"Modo Contingˆncia Offline !// //"
             MSG=MSG+"Confirme sua autoriza‡Æo no eDOC,// se poss¡vel ative Modo: Normal e use [RESOLVER] !// //" 
          
          EndSwitch
          MSG=MSG+"Aguardar atualiza‡Æo do Status da NFCe !"
          Mensagem(MSG)         
          EdocConsultaOk=false

        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeEnviada                                     :  ; nota existente 
          MSG="NFC-e "+NOTAFISC+" j  foi ENVIADA pelo eDOC, Modo "
          Switch
           Case [FaturaC->Sistema Gerador]="n" : MSG=MSG+"Normal !// //"
           Case [FaturaC->Sistema Gerador]="s" : MSG=MSG+"Contingˆncia Offline !// //" 
          EndSwitch
          MSG=MSG+"Confirme sua autoriza‡Æo no eDOC, use [RESOLVER] !// //"
          MSG=MSG+"Se NFCe emitida em contingˆncia use [RESOLVER] no eDOC, //aguardar atualiza‡Æo do Status da NFCe !"
          EdocConsultaOk=false

        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeExiste                                       :  ; nota existente
          MSG=    "NFC-e "+NOTAFISC+", "+status+" no Edoc/SEFAZ !// //"
          MSG=MSG+"Consultar/Resolver/Descartar a NFC-e no eDOC !//"
          Mensagem(MSG)
          EdocConsultaOk=false

      endSwitch


    ;-------------------------------------------------------------------------------------------------------
    case operacao="Situacao":
      Switch
        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeAutorizada and not SituacaoNFeCancelada      :  ; nota existente
          operacao="Autorizar"

        Case not IsBlank([Numero Nota Gerada]) and SituacaoNFeAutorizada and SituacaoNFeCancelada          :  ; nota existente
          operacao="Autorizar"

        Case SituacaoNFeExiste:
          MSG=    "NFC-e "+NOTAFISC+", "+status+" no Edoc/SEFAZ !"
          Mensagem(MSG)

      endSwitch

    ;-------------------------------------------------------------------------------------------------------
    case operacao="Inutilizada":
      if Search(","+nfeserie+",",conteudodoarquivo)>0 and
         Search(","+StrVal(NumVal(NOTAFISC))+",",conteudodoarquivo)>0
         then
              PARAM_INUTILIZAR = MenuVar 
              Play "FT_INUT"
              Release Vars PARAM_INUTILIZAR
         else
              Mensagem("NFC-e Inicial "+NOTAFISC+" e Final "+NOTAFISC+", nÆo consta na Inutiliza‡Æo no eDOC !")
              EdocConsultaOk=false
      endif

  endswitch

  ;-------------------------------------------------------------------------------------------------------
  if EdocConsultaOk and operacao="Autorizar" and SituacaoNFeAutorizada and not SituacaoNFeCancelada and
     ([FaturaC->Sistema Gerador]="n" or [FaturaC->Sistema Gerador]="s")
     then
          Switch
           Case [FaturaC->Sistema Gerador]="n" : [FaturaC->Sistema Gerador]="n!" 
           Case [FaturaC->Sistema Gerador]="s" : [FaturaC->Sistema Gerador]="s!" 
          EndSwitch
          UnLockRecord
          
          If IsFormView()
             Then FormKey
          EndIf   
          
          Moveto "NotaC"
          Moveto [Codigo da Empresa]
          Locate [FaturaC->Codigo da Empresa], NOTAFISC, SERIEFISC
          If RetVal
             Then [Sistema Gerador]=[FaturaC->Sistema Gerador]
                  UnLockRecord
          EndIf
          
          Moveto "FaturaC"
          If Not IsFormView()
             Then FormKey
          EndIf   
  endif     

  ;-------------------------------------------------------------------------------------------------------
  if EdocConsultaOk and operacao="Autorizar" and SituacaoNFeAutorizada and SituacaoNFeCancelada and [FaturaC->Sistema Gerador]<>"C"
     then 
          Mensagem("NFCe "+[FaturaC->Numero Nota Gerada]+" CANCELADA no Sefaz, mas nÆo no Sistema, verificar !")
  endif     

  quitloop
endwhile

release vars conteudodoarquivo
LimpAguarde()

return EdocConsultaOk
endproc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
proc ChecarNFcePendentes()
private NR,emprant, regfaturac, fimloop

MODOPAGINA  = False
                
fimloop=false
emprant="???"                             
Echo Normal
Echo Off
Formkey

LimpaRodape(0)
NR = NRecords(Table())
Scan 

  moveto [Numero da OF]

  Barra(NR, RecNo())
  ExibeRodape(1,"Aguarde, consultando NFCe nÆo autorizada no sistema "+BARRA_STRING)

  if substr([Docto Nota Gerada],1,3)<>"NCE"  then loop endif 
  if isblank([Numero Nota Gerada])           then loop endif             
  if [Sistema Gerador  ]="n!"                then loop endif 
  if [Sistema Gerador  ]="s!"                then loop endif 
  if [Sistema Gerador  ]="C"                 then loop endif 

  fimloop=false
  
  while true
    ORDFAT         =[Numero da OF]
    STATUSFILTRO   =""
    CANC           =False
    NOVA_DESTINACAO=False
    NOVO_PEDIDO    =False
    NOVO_CLIENTE   =False

    NOTAFISC =[Numero Nota Gerada]
    CODFISC  =[Docto Nota Gerada ]
    SERIEFISC=[Serie Nota Gerada ]

    If MODOFILTRAR       
      Then If TabelaControle<>TabelaPrincipal
              Then 
                   moveto TabelaPrincipal
                   moveto [Numero da OF]
                   locate ORDFAT
                   if not retval
                      then quitloop
                   endif
           endif   
    EndIf

    if [Codigo da Empresa]<>emprant
       then If Not Carrega_Parametros() ; carregar apena uma vez
               Then quitloop
            EndIf
    EndIf
    If not Checagem_Pagina1()                  
       then quitloop 
    endif
    moveto [Numero da OF]

    if [Codigo da Empresa]<>emprant
       then emprant=[Codigo da Empresa] ; carregar apena uma vez
            If Not EdocLerConfig()
               Then fimloop=true
                    quitloop
            EndIf
    EndIf

    if not EdocConsultar("Autorizar")
       then If RecordStatus("Locked") Then UnLockRecord EndIf 
            Quitloop
    endif
    ;Echo Normal
    ;Echo Off
    If IsFormView()
       Then FormKey
    EndIf   

    copytoarray regfaturac  
    If RecordStatus("Locked") Then UnLockRecord EndIf

    moveto TabelaControle
    If MODOFILTRAR       
      Then If TabelaControle<>TabelaPrincipal
              Then 
                   copyfromarray regfaturac 
           endif   
    EndIf

    quitloop
  endwhile

  if fimloop then quitloop endif

endscan

Moveto TabelaControle
PickForm OPCAO_FORM

LimpaRodape(0)
if fimloop 
   then Mensagem("Processo abortado !// //Verificar !!") 
   else Mensagem("Fim do processo !// //Verificar !!")
endif   

endproc

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
Proc Carrega_Impressora()
Private ACHOU

If ConfGeral("Deseja manter somente a impressora definida no eDOC ?")
   then
        If IsFile(IMP_FILE) 
           then Deleta_Arquivo(IMP_FILE)
        endif
        Dispositivo=0
        Sys_Set_Porta="LPT1"    
        Return False
endif        

while true
  DispositivoI("NCE")
  If OK="" 
     Then Return False
  EndIf     
  If OK<>"I" And OK<>""
     Then Mensagem("Apenas para Impress„o NFCe! // //Impressora !")
          loop
  EndIf 
  
  If IsFile(IMP_FILE) 
     Then LeiaINI(IMP_FILE,"Dispositivo.N.null")
          LeiaINI(IMP_FILE,"Sys_Set_Porta.S.null")
  EndIf      
  
  quitloop
endwhile
Return True

EndProc ;Carrega_Impressora()

;*******************************************************************************
;* Rotina para Carregar Parametros *Particularidades                           *
;*******************************************************************************
Proc Param_Particularidades()

If SYS_CODIGO_CLIENTE = "0314"
   Then PARAM_BLOQ_ALTERA_REP = "S"
   Else PARAM_BLOQ_ALTERA_REP = "N"
EndIf

If SYS_CODIGO_CLIENTE = "0318" Or SYS_CODIGO_CLIENTE = "0370"
   Then PARAM_DUPLICIDADE_ITEM = True
   Else PARAM_DUPLICIDADE_ITEM = False
EndIf

Switch
  Case SYS_CODIGO_CLIENTE = "0235" : PARAM_CODBAR_PESO = 6
  Case SYS_CODIGO_CLIENTE = "0399" : PARAM_CODBAR_PESO = 4
  OtherWise                        : PARAM_CODBAR_PESO = 0
Endswitch

If SYS_CODIGO_CLIENTE = "0278" or
   SYS_CODIGO_CLIENTE = "0401"
   Then PARAM_RELATORIO_CUSTO=True
   Else PARAM_RELATORIO_CUSTO=False
EndIf

EndProc ;Param_Particularidades()

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

If [FaturaC->Codigo da Empresa]<>""
   Then If not GetP_NFCe([FaturaC->Codigo da Empresa])
           Then return false
        EndIf    
EndIf

PARAM_AGRUPA_ITEM = False

If IsAssigned(FILTRARVENDEDOR) and not isblank(FILTRARVENDEDOR) then PARAM_UTILIZAVENDEDOR="N" endif

return true
EndProc ; (Carrega_Parametros)

;*******************************************************************************
;* Rotina para Carregar Tabelas                                                *
;*******************************************************************************
Proc Closed Carrega_Tabelas()
UseVars AutoLib, ErrorProc,MODOFILTRAR,TabelaControle,TabelaPrincipal,OPCAO_FORM,
        OPCAO_FORM_MAN,OPCAO_FORM_REL
ClearAll

View NOWINDOW "FaturaI"
View NOWINDOW "FaturaV"
View NOWINDOW "FaturaCC"
View NOWINDOW "FaturaIC"
View NOWINDOW "FaturICM"

View NOWINDOW "NotaC"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaV"
View NOWINDOW "NotaICM"

View NOWINDOW "NumeroNF"
View NOWINDOW "NumeroDP"

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

View NOWINDOW  "\\Sistemas\\CheqRec\\ChequeC"
View NOWINDOW  "\\Sistemas\\CheqRec\\ChequeI"
View NOWINDOW  "\\Sistemas\\CheqRec\\CDPessoa"

View NOWINDOW  "\\Sistemas\\CtaRec\\Duplic"

View NOWINDOW  "\\Sistemas\\Cadastro\\FichaCli"
View NOWINDOW  "\\Sistemas\\Cadastro\\Feriados"
View NOWINDOW  "\\Sistemas\\Cadastro\\Destmsg"
View NOWINDOW "\\Sistemas\\Cadastro\\EmpAut"

If Not MODOFILTRAR
   Then CoEdit NOWINDOW "FaturaC"
        ;************** Rotina para tratar o erro de tabela locada ************
        If ErrorCode()=4
           Then Do_It!
                ClearAll
                Release Vars All
                Release Procs All
                return false
        EndIf
   Else If Not CoEditaTabelaControle() ; substitui Coedit da tabela principal
           Then Return False
        EndIf
EndIf

Moveto TabelaControle
PickForm OPCAO_FORM_MAN
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetaCorRegistro("Invisivel")
Moveto "PedidoC"  SetaCorRegistro("Invisivel")
Moveto "PedidoI"  SetaCorRegistro("Invisivel")
Moveto "OrcaC"    SetaCorRegistro("Invisivel")
Moveto "OrcaI"    SetaCorRegistro("Invisivel")
Moveto "FaturaV"  SetaCorRegistro("Padrao")
Moveto "FaturaCC" SetaCorRegistro("Invisivel")
Moveto TabelaControle
PickForm OPCAO_FORM

Return True

EndProc   ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
DIGITAI()
If CHAVEI<>9
   Then If CHAVEI<>8
           Then ESTOQUE()
                ATUA_PEDIDO_ORCAMENTO()

                If PARAM_RATEIO_COMISSAO="I"
                   Then APLIC_ORIGEM="FATURA"
                        Play "Ft_Comis"
                EndIf
        EndIf
EndIf
Moveto "FaturaI"
If RecordStatus("Locked") Then UnLockRecord EndIf         
EndProc

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

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()

Moveto "FaturaV"  SetaCorRegistro("Padrao")
Moveto "FaturaC"  SetaCorRegistro("Editar") 

CopyToArray REG_FATURAC

While FACA_DIGITAC
  DIGITAC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=1
     Then Controle_Dia()
  EndIf
  If Not IsAssigned(OPCHAVEI)
     Then If PARAM_UTILIZACDBARRA="S"
             Then OPCHAVEI="CDB"
             Else OPCHAVEI="CDC"
          EndIf
  EndIf
  
  While FACA_CHAVEI
    While True
      If OPCHAVEI="CDB"
         Then CHAVECDBAR()
              If CHAVEI=9 Then Quitloop EndIf
              If CHAVEI=7 Then     Loop EndIf
         Else CHAVEI()
              If CHAVEI=9 Then QuitLoop EndIf
              If CHAVEI=7 Then     Loop EndIf
              Controla_EdicaoI()
      EndIf
    EndWhile
    
    While FACA_DIGITAF
      While True
        DIGITAF()                   
        If CHAVEF = 9 Then QuitLoop EndIf
        QuitLoop
      EndWhile
      
      While FACA_DIGITAT
        DIGITAT()                   
        If CHAVET = 9 Then QuitLoop EndIf
      
        FACA_DIGITAC=False
        FACA_CHAVEI =False
        FACA_DIGITAF=False
        FACA_DIGITAT=False
        QuitLoop
      EndWhile
    EndWhile 
  EndWhile
EndWhile
Moveto "FaturaC"
If RecordStatus("Locked") Then UnLockRecord EndIf

AtualizaRegistroControle("Numero da OF",ORDFAT,MODOPAGINA)         
PickForm OPCAO_FORM

VSDGENDENT    =""
VSDGENDCOB    =""
VSDGENDRET    =""
VSDGTRANSPOR  =""

SaveTables
EndProc

;*******************************************************************************
;* Localiza e posiciona no regsitro da tabela principal                        *
;*******************************************************************************
Proc xxAtualizaRegistroControle(campochave,valorchave,emmodopagina)
Private reg, campochave, valorchave, emmodopagina

;*****PARAMETRO*****
; * CAMPO 
; * VALOR DO CAMPO
; * SE E MODO PAGINAR OU NAO

If MODOFILTRAR and Search("TEMP_",Upper(TabelaControle))>0
   Then 
        Switch
          Case Upper(STATUSFILTRO)="DEL":
               Formkey
               Moveto TabelaControle
               ;-------- Colocar o CASE da tabela e o Locate especifico --------
               Switch
                  Case TabelaPrincipal = "MovCont" :
                       Moveto Field campochave
                       If IsAssigned(CONTAG) And CONTAG<>""
                          Then Locate valorchave,CONTAG
                               If RetVal
                                  Then Del
                               EndIf
                       EndIf        
                       Locate valorchave,CONTA
                       If RetVal
                          Then Del
                       EndIf
                  
                  OtherWise :
                       Switch 
                         Case emmodopagina: 
                             Del
                         OtherWise      : 
                             Moveto Field campochave
                             Locate valorchave
                             If RetVal
                                Then Del
                             EndIf
                       EndSwitch
               EndSwitch
               FormKey        

          Case Upper(STATUSFILTRO)="UPDATE":
               Formkey
               CopyToArray reg

               Moveto TabelaControle
               Switch 
                 Case emmodopagina: 
                      Moveto Field campochave
                      Locate valorchave
                      CopyFromArray reg
                      UnLockRecord
                      
                 OtherWise      :
                     Moveto Field campochave
                     switch
                       Case TabelaPrincipal = "ChequeI" :
                         Locate NLC,SLC
                       Otherwise:
                         Locate valorchave      
                     endswitch
                     If RetVal
                        Then CopyFromArray reg
                             UnLockRecord
                     EndIf
               EndSwitch
               Formkey

          Case Upper(STATUSFILTRO)="INSERT":
               UnLockRecord
               Formkey
               CopyToArray reg
               
               Moveto TabelaControle
               Moveto Field campochave
               Locate valorchave
               If Not RetVal
                  Then End Down
               EndIf
               CopyFromArray reg
               UnLockRecord
               FormKey

          OtherWise:
               Formkey
               Moveto TabelaControle
               Formkey
        EndSwitch
EndIf   

STATUSFILTRO=""

Release vars reg, campochave, valorchave, emmodopagina
EndProc

;*******************************************************************************
;* Rotina Principal Emissao Nota Fiscal ou Romaneio                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\Cadastro\\Bib_Bloq,"+
        "\\Sistemas\\Vendas\\Bib_Fat,"+
        "\\Sistemas\\Vendas\\Bib_Vend"
        
sys_valor()
LimpaFiltroFatura()

MSG=""

{Ask}{FaturaC}
Moveto [Numero da OF      ]       Typein "Calc Count as Qtde" 
Moveto [Sistema Gerador   ] check Typein "n or s" 
Moveto [Docto Nota Gerada ]       Typein "NCE.."
do_it!
if not IsEmpty("Answer")
   then
        scan for [Qtde]>0  
          switch
            case [Sistema Gerador   ]="n" :
                                            MSG=MSG+"Existe(m) "+strval([Qtde])+" NFCe nÆo autorizadas no Sistema !    // //"
                                            MSG=MSG+"Verifique as OFïs para registrar como Autorizada no Sistema !     // //"
                                            MSG=MSG+"Se necess rio mande [RESOLVER] no eDoc, para os                   //"
                                            MSG=MSG+"documento(s) sejam autorizados no SEFAZ !                         "

            case [Sistema Gerador   ]="s" : 
                            if MSG<>"" then MSG=MSG+"// //------------------------------------------------------------------// //"  endif
                                            MSG=MSG+"Existe(m) "+strval([Qtde])+" NFCe em Modo Contingˆncia Offline !  // //"  
                                            MSG=MSG+"Assim que poss¡vel ative o Modo Normal no eDoc e mande [RESOLVER],//"
                                            MSG=MSG+"para os documento(s) sejam autorizados no SEFAZ !                 "

          endswitch 
        endscan
endif   
ClearAll
if MSG<>"" then Mensagem(MSG) endif

If Not IsAssigned(NOMEMPRESA)          Then NOMEMPRESA=""           EndIf
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""  EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""   EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""   EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO ="S"  EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  ="S"  EndIf
If Not IsAssigned(SYS_USUARIO_BALCAO)  Then SYS_USUARIO_BALCAO="N"  EndIf
If Not IsAssigned(APLIC_ORIGEM)        Then APLIC_ORIGEM      =""   EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO =""   EndIf
If Not IsAssigned(SYS_NCONEXAO)        Then SYS_NCONEXAO      =""   EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""   EndIf
If Not IsAssigned(SYS_CLIENTE_CONFEC)  Then SYS_CLIENTE_CONFEC=""   EndIf
If Not IsAssigned(SYS_USUARIO_BALCAO)  Then SYS_USUARIO_BALCAO=""   EndIf
If Not IsAssigned(SYS_USUARIO_CODEMPR) Then SYS_USUARIO_CODEMPR=""  EndIf

IMP_FILE=privdir()+"NCE_IMP.SC"
If IsFile(IMP_FILE) 
   Then LeiaINI(IMP_FILE,"Dispositivo.N.null")
        LeiaINI(IMP_FILE,"Sys_Set_Porta.S.null")
   else
        Dispositivo=0
        Sys_Set_Porta="LPT1"    
EndIf      

LeiaINI(PrivDir()+"LER_CHQ.ini","VSD_LEITORCHQ.S.1")

If IsFile(PrivDir()+"BNFCE.ini")
   Then LeiaINI(PrivDir()+"BNFCE.ini","LOCALIZA_CODIGO.S.null")
EndIf
If Not IsAssigned(LOCALIZA_CODIGO) Then LOCALIZA_CODIGO=""  EndIf
ModoLocalizarItem("","","")

VERIFICA_CONSULTA   = "BALCAO"
SYS_APLICATIVO      = "BNFCE"
TabelaTemp          = ""
TabelaPrincipal     = "FaturaC"
TabelaControle      = TabelaPrincipal
MODOFILTRAR         = True
MODOFILTRARATIVO    = True
MODOFILTRATODOS     = False        

If IsAssigned(MODOFILTRAR) And MODOFILTRAR
   then FILTRAREMPRESA = SYS_EMPRESA_DEFAULT 
        FILTRARVENDEDOR= "" 
        GetRecord "\\Sistemas\\Cadastro\\Usuarios" SYS_CHAPA_USUARIO To REG_USUARIO
        If RetVal
            Then If Not isblank(REG_USUARIO["Cod_Empresa"])
                    Then FILTRAREMPRESA = REG_USUARIO["Cod_Empresa"]
                 EndIf 
                 If Not isblank(REG_USUARIO["Codigo_Representante"])
                    Then FILTRARVENDEDOR = REG_USUARIO["Codigo_Representante"]
                 EndIf   
        EndIf
        MODOFILTRAR_EMPRESA = FILTRAREMPRESA
        SelecionaFiltroFatura()          
endif

Param_Particularidades()

PARAM_RATEIO_COMISSAO    = ""
INICIO_IMPRESSAO         = True
PARAM_AGRUPA_ITEM        = False
ATUALIZA_ORCAMENTO       = False
UTILIZANDO_CP_FP_CLIENTE = False

PARAM_RESTR_CNPJCPF      = "N"
PARAM_BLOQ_ITEM_EXPED    =" N"
PARAM_UTILIZA_VARIACOES  = False
PARAM_DADOS_ITEM_RESUMO  = "N"
PARAM_BLOQ_ITEM          = "N"

OPCAO_FORM_REL="12"
OPCAO_FORM_MAN="5"
OPCAO_FORM    =OPCAO_FORM_REL

IndPresDescricao=""

Array dtvencto[12]
Array valorven[12]

If Carrega_Tabelas()
   Then ;************** Rotina para tratar o erro de tabela locada ********************
        MES_EST       =""
        ANO_EST       =""
        V_DESTIOBS    = 1
        
        VSD_I_DataEntrega =BlankDate()
        VSD_I_DataEntregar=BlankDate()
        
        VCITENS    =BlankNum()
        VSQTDE     =BlankNum()
        VSVRMERC   =BlankNum()
        VSVRVENCTOS=BlankNum()
                                                       
        ;**** Em 09.04.2014 aplicado para verificar n£mero de registros ********
        If Verifica_NRegistros("Faturai")
           Then COR_MENSAGEM="1"
                Mensagem(MSG_TABELA)
                Release Vars COR_MENSAGEM,MSG_TABELA
           Else Release Vars MSG_TABELA     
        EndIf   
        
        If Verifica_NRegistros("Notai")
           Then COR_MENSAGEM="1"
                Mensagem(MSG_TABELA)
                Release Vars COR_MENSAGEM,MSG_TABELA
           Else Release Vars MSG_TABELA     
        EndIf  
        
        While True
          CHAVEC()
          ;--- FILTRO ------------------------------------------------------------------
          If CHAVEC=99 
             Then If FiltrarFatura()
                     Then MODOFILTRAR=True
                  EndIf
                  Carrega_Tabelas()
                  Loop
          EndIf
          If CHAVEC=98 
             Then AGUARDE("Visualizando todos registros")
                  MODOFILTRAR=False
                  Do_It!
                  
                  TabelaControle=TabelaPrincipal
                  Carrega_Tabelas()
                  Loop
          EndIf   
          ;-----------------------------------------------------------------------------  
          If CHAVEC=9 Then QuitLoop EndIf
          If CHAVEC=5
             Then PickForm OPCAO_FORM
                  Loop
          EndIf
          Controla_EdicaoC()
        EndWhile
EndIf
Do_It!
ClearAll
DeletaTabelaControle() ; FILTRO
Release Vars All
Release Procs All
