;** FaturaCF *******************************************************************
;*  Digitacao de Cupom Fiscal Eletronico                                       *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 22/02/2016 por Kamila Gomes            
;Ultima Alteracao: 07/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes FatICom e NotaICom nÆo Usa        
;Ultima Alteracao: 20/04/2016 por Kamila Gomes
;Motivo Alteracao: Alterada Faticom e Notaicom para FaturICM e  NotaICM
;Ultima Alteracao: 12/05/2016 por Bruno Carvalho
;Motivo Alteracao: Inclusao ModoLocalizarItem()   
;Ultima Alteracao: 20/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Fracionado] e [Edita Descricao do Item]
;Ultima Alteracao: 14/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajsutado o Endere‡o de Entrega e o Endere‡o de Cobran‡a p/ ser armazenado na tabela FaturaCC e ajustado controle na BIB_VEND
;Ultima Alteracao: 14/06/2016 por Bruno Carvalho
;Motivo Alteracao: Removido "FaturOCP" e "NotaOCP"
;Ultima Alteracao: 17/06/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado novo processo p/ numero de lan‡amento 
;Ultima Alteracao: 14/06/2016 por Kamila Gomes
;Motivo Alteracao: Ajustes campos Situacaoo do Orcamento e Situacao do cliente
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao GetP_Balcao(), GetP_Entra()
;Ultima Alteracao: 09/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes uso de getrecord substituicao de view em tabelas
;Ultima Alteracao: 21/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes controle item showdialog, duplicidade e localizar
;Ultima Alteracao: 10/02/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pessoa inativa 
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes JC_Digita - Justificativa Contingencia
;Ultima Alteracao: 24/05/2017 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ buscar c¢digo de barra na "Iten_Bar" -> Codigo_Barras2() 
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 14/07/2017 por Bruno Carvalho
;Motivo Alteracao: Removido "NotaOcp"
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 28/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar modelo no item 0003            
;Ultima Alteracao: 31/08/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desconto item
;Ultima Alteracao: 25/09/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes Checa_MVA() e remo‡Æo do FaturaCF p/ Bib_Vend -> Checa_MVA()
;Ultima Alteracao: 14/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Registro_Item("Ler")+CalcularPrecoTotal_Item()
;Ultima Alteracao: 23/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes mensagem qtde fracionada    
;Ultima Alteracao: 04/07/2018 por Bruno Carvalho             
;Motivo Alteracao: Ajustes CD_BARRA ao localizar o item, p/ nÆo alinhar a 10 d¡gitos -> ITEM_FRACIONADO
;Ultima Alteracao: 23/07/2018 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes IMPRIGERAL() -> FT_GNF
;Ultima Alteracao: 14/12/2018 por Kamila Gomes                           
;Motivo Alteracao: Fun‡Æo para pegar Fuso Horario do computador
;Ultima Alteracao: 31/10/2019 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes eliminar Calc_NLinhas_Descricao()
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 28/04/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado TipoItem_ControlaEstoque()

;*******************************************************************************
;* Rotina para Controlar Chave da Ordem de Faturamento                         *
;*******************************************************************************
Proc CHAVEC()
PARAM_CUPOM_FISCAL=""
AUX_CONT_CLIENTE  =0

NFEJA_AUTORIZADA=False
COPIOU_REGISTRO=False
FACA_DIGITAC=True
INICIO_PAGINA=True

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


While True
  Moveto "FaturaC"
  Moveto [Numero da OF]
  End
  Moveto [Numero da OF]
  ORDFAT=[Numero da OF]

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

  SetaCorRegistro("Editar")
  While True
  MSGCAMPO=""
  TECLA=""
  AguardaTeclasPadrao()

  If RetVal=-33
     Then 
          SemFuncoes()
           
;         Echo Normal
;         Echo Off
;         ShowPopup " Fun‡”es " CENTERED
;          "F6 ~I~mprimir Todas       ": " Imprime Fatura                   " :"F6",
;          "~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=-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="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PARAM_CUPOM_FISCAL=""

           COPIOU_REGISTRO=False
           FACA_DIGITAC=True
           INICIO_PAGINA=True

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

           If OPCAO_FORM=OPCAO_FORM_REL
              Then PAGINA("FaturaC","MR")
              Else PAGINA("FaturaC","MT")
           EndIf
           ORDFAT=[Numero da OF]
           Switch
             Case EDITAR="S":
                  PickForm OPCAO_FORM_MAN
                  Echo Normal
                  Echo Off
                  If Checa_Controle([Numero_Controle_Dia])
                     Then CHAVEC=0
                          CALC_VENCTO=False
                          Controla_EdicaoC()
                     Else UnLockRecord
                  EndIf
             Case EXCLUIR="S":
                  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
             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="F6":
;        Del
;        Play "FT_GNF"
;        QuitLoop
    Case Retval="ENTER": 
         If Numero_Lancamento("","F")
            Then ORDFAT = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC  
            Else QuitLoop
         EndIf
         If Not PROXIMO_LANCTO_REG_ACHOU
           Then GetRecord "\\Sistemas\\Vendas\\FaturaI" ORDFAT To REG_FATURAI
                If RetVal
                   Then Mensagem(Completa("A Ordem de Faturamento "+ORDFAT+" esta com erro, verificar empresa e/ou os",74," ")+
                                 Completa("itens j  existentes!                                                      ",74," ")+"//"+
                                 Completa("-> Recuperar a OF "+ORDFAT+" ou exclu¡-la!",74," "))
                        Del
                        QuitLoop         
                EndIf
         EndIf    
         PickForm "1"    
         Moveto [Numero da OF]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf
            Else CHAVEC=1
                 CALC_VENCTO=True
                 If Not Checa_Controle(SYS_CONTROLE_DIA)
                    Then OPCAO_FORM="F"
                    Else Return         
                 EndIf                  
         EndIf         
         If CHAVEC=1
            Then Del
         EndIf
         If OPCAO_FORM="F"
            Then PickForm "F"
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile

EndProc   ;ChaveC()

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

INICIO_DIALOG=True

JUSTCANCFE=""   
VSD_Flag  =""
Echo Normal
Echo Off

While True
  Showdialog "Cancelamento de CF-e" Proc "SD_Justificativa"
     Trigger "OPEN","ARRIVE"
      Key "ENTER","ESC","ClearArea"
       @ 09,15 height 08 width 49
  
     Label  @ 01,00 "Justificativa" For "TG_JUST"
     Accept @ 02,01 Width 45 "A255"  Picture "!*!" Tag "TG_JUST" To VSDGJUST  
  
     Pushbutton @ 04,11 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
     Pushbutton @ 04,25 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  
  Enddialog
  If Not RetVal
     Then Return False
  EndIf

  If VSDGJUST= "" 
     Then Mensagem("Informe a Justificativa !") 
          Return False                                         
          Loop
  EndIf
  JUSTCANCFE=VSDGJUST
  UnLockrecord  
  Return True
EndWhile
EndProc
;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Justificativa(Disparo,Campo,Evento,Elemento)
Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] =  27: 
          Temp=False
          Switch
            Case Campo="TG_JUST"           : Campo="NO"
            Case Campo="YES" Or Campo="NO" : Campo="TG_JUST"
          EndSwitch
     Case Evento["KeyCode"] = 13: 
          Temp=False
          If Checa_TAG()
             Then Switch
                     Case Campo="TG_JUST" : Campo="YES"
                          VSDGJUST = ControlValue("TG_JUST")
                          If Not IsBlank(VSDGJUST)
                             Then VSDGJUST=VSDGJUST
                          EndIf   
                     Case Campo="YES" : AcceptDialog     
                  EndSwitch
          EnDIf
          RefreshDialog   
   EndSwitch
EndIf

SelectControl Campo
RefreshDialog

Return Temp
EndProc  ; SD_ContaPadrao()


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

TX_DESCTO_CLIE=0

REEMITIR    =False
SOIMPRIMIR  =False

FACA_CHAVEI =True
Moveto "FaturaC"

If INICIO_PAGINA
   Then ;---- Incluido em 09.11.2015 ----------------------------------
        ANT_DTE = [Data de Emissao]
        If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVEC=1
           Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
        EndIf

        If CHAVEC=1 And SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR)
           Then [Codigo da Empresa]=SYS_USUARIO_CODEMPR
        EndIf

        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
                If CHAVEC=1
                   Then [Codigo da Empresa       ]=PARAM_EMPRESA
                        [Codigo da Destinacao    ]=PARAM_DESTINACAO
                        [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                        [Codigo                  ]=PARAM_CLIENTE
                        [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                        [Codigo do Representante ]=PARAM_VENDEDOR
                        [Condicao de Pagamento   ]=PARAM_COND_PAGTO
                        [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                EndIf
        EndIf
        If CHAVEC=0 And Search("CUPOM",[Descricao da Destinacao])=0
           Then Mensagem("Opera‡Æo de CF-e, utilizar rotina CUPOM FISCAL ELETRâNICO !")
                CHAVEC=9
                Return
        EndIf
        
        If Not IsBlank([Numero Nota Gerada])
           Then 
                Switch 
                  ;-- Tratando NFC-e ---------------------------------------------------------
                  Case SubStr([FaturaC->Sistema Gerador],1,1)="x" :

                       NOTAFISC =[Numero Nota Gerada]
                       CODFISC  =[Docto Nota Gerada ]
                       SERIEFISC=[Serie Nota Gerada ]
                          
                       If [FaturaC->Sistema Gerador]="x!"  ; NF-e j  emitida e autorizada
                          Then 
                               MSG="CF-e "+NOTAFISC+" j„ foi enviado e autorizado no SEFAZ !"
                               MSG=MSG+"// //Deseja CANCELAR o Cupom Fiscal Eletr“nico?"
                               If Not ConfGeral_N(MSG)
                                 Then CHAVEC=9
                                      Return
                               EndIf        

                               COR_MENSAGEM="ALERTA" 
                               MSG="Deseja realmente CANCELAR esse CF-e?"
                               If Not ConfGeral_N(MSG)
                                  Then CHAVEC=9
                                       Return
                               EndIf        
                               Release Vars COR_MENSAGEM

                               If PARAM_BLOQUEIA_CANCEL<>"N" 
                                  Then If Not CHECA_SUPERVISOR()
                                          Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !")
                                               CHAVEC=9
                                               Return
                                       EndIf
                               EndIf      
                               
                               OpcaoC="CF-e"
                               CHECANFE_AUT=True
                               CANC=True
                               If Checagem_Pagina1() 
                                  Then If Digita_JustCanc()
                                          Then If nfeAutorizada("Cancela")
                                                  Then SITUACAO=Opcaoc  
                                                       TIPO="CANCELAR"
                                                       Play "FT_DESF"
                                                       
                                                       UnLockRecord
                                                       FormKey
                                                       SaveTables
                                                       
                                                       Moveto "NumeroNF"
                                                       Locate [FaturaC->Codigo da Empresa],CODFISC
                                        							 If Not RetVal
                                          								 Then Mensagem("Empresa Sem Controle de Numera‡„o de "+Opcaoc+" !")
                                                                Return
                                                           Else [Proximo Numero     ] = [Proximo Numero] + 1
                                                                [Data Ultima Emissao] = [FaturaC->Data de Emissao]
                                                                UnLockRecord
                                        							 EndIf
                                                       Moveto "FaturaC"
                                                       UnLockRecord
                                                       FormKey 
        
                                               EndIf
                                       EndIf

                              EndIf        
                              
                              CHAVEC=9
                              Return
                       EndIf

                       CHECANFE_AUT=True
                       If Not Checagem_Pagina1()
                          Then CHAVEC=9
                               Return
                       EndIf
                       CHECANFE_AUT=False

                       If nfeAutorizada("Consulta")
                          Then 
                               Switch
                                 Case denegada:
                                  
                                   OpcaoC="CF-e"

                                   TIPO    ="CANCELAR"
                                   SITUACAO="DENEGAR"
                                   Play "FT_DESF"
                                   
                                   COR_MENSAGEM="ALERTA" 
                                   MSG="CF-e foi DENEGADO pelo Sefaz !"
                                   Mensagem(MSG)

                                 case cancelada:
                                   Echo Normal
                                   Echo Off
                                   ShowPopup " Op‡”es " CENTERED
                                       "Cancelamento ~N~ormal"      : " Cancelamento dentro do prazo 30 minutos" :"NORMAL",
                                       "Cancelamento ~E~xtemporƒneo": " Cancelamento fora do prazo de 24 horas":"EXTEMPORANEO",
                                       Separator,
                                       "~S~air"                   : " Ignorar op‡äes"                         :"Cancela"
                                   EndMenu
                                   To Opcaoc
                                   echo off
                           
                                   If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                                      Then CHAVEC=9
                                           Return
                                   EndIf
                                   
                                   If Opcaoc = "EXTEMPORANEO"
                                      Then GRAVA_OK=False
                                           Play "FT_DTCAN"
                                           If Not GRAVA_OK
                                              Then CHAVEC=9
                                                   Return
                                           EndIf
                                   EndIf
                                 
                                   TIPO    ="CANCELAR"
                                   SITUACAO=Opcaoc  
                                   Play "FT_DESF"

                               EndSwitch 

                               CHAVEC=9
                               Return

                      Else
                       
                       
                      Echo Normal
                      Echo Off
                      OpcaoC="Reenviar"

                      ShowPopup " Op‡”es " CENTERED
                          "~R~eenviar" : " Reenviar CF-e "+[FaturaC->Numero Nota Gerada]          :"Reenviar",
                          "~A~lterar"  : " Alterar/Reenviar CF-e "+[FaturaC->Numero Nota Gerada]  :"Alterar",
                          "~D~esfazer" : " Desfazer CF-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 CHAVEC=9
                                Return
                        EndIf
                        
                        If Opcaoc="Desfazer" 
                           Then
                              MSG="Para desfazer este CF-e "+NOTAFISC+" gerada em modo "
                              Switch
                                Case SubStr([FaturaC->Sistema Gerador],1,1)="x" : 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 manager;          //"
                              MSG=MSG+"- Se poss¡vel DESFAZER a NFC-e no manager;          // //"
                              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               
                              CHAVEC=9
                              Return
                                  
                        EndIf   

                        If (ModoCFe="Normal") And [FaturaC->Sistema Gerador]="s" And ModoCFe="SCAN" 
                           Then Mensagem("Reenvio em modo Normal da CF-e "+NOTAFISC+" n„o ‚ poss¡vel !// //A mesma J  foi enviada em modo SCAN !") 
                                CHAVEC=9
                                Return
                        EndIf    
                 
                        If ModoCFe="SCAN" And [FaturaC->Sistema Gerador]="x" 
                           Then Mensagem("Reenvio em modo SCAN da CF-e "+NOTAFISC+" n„o ‚ poss¡vel !// //A mesma J  foi enviada em modo Normal !") 
                                CHAVEC=9
                                Return
                        EndIf    
                  
                        If Opcaoc="Reenviar"
                           Then Moveto "FaturaC"
                                REEMITIR=True
                                Return
                        EndIf
                    EndIf
                  OtherWise:                          
                    ;-- Tratando outros documentos ----------------------------------------------------------
                    DoctoGerado=[Docto Nota Gerada]+"/"+[Numero Nota Gerada]+"-"+[Serie Nota Gerada]

                    If SubStr([FaturaC->Sistema Gerador],1,1)="C"
                       Then MSG="Esta ordem de faturamento gerou o documento:// //"
                            MSG=MSG+DoctoGerado+"// //"
                            MSG=MSG+"Documento com situa‡Æo: CANCELADO !"
                            Mensagem(MSG)
                            CHAVEC=9
                            Return
                    EndIf
                    If [FaturaC->Sistema Gerador]="DN"
                       Then MSG="Esta ordem de faturamento gerou o documento:// //"
                            MSG=MSG+DoctoGerado+"// //"
                            MSG=MSG+"Documento com situa‡Æo: DENEGADO !"
                            Mensagem(MSG)
                            CHAVEC=9
                            Return
                    EndIf
                    If Search("TROCA",[Descricao da Destinacao])>0
                       Then Mensagem("Opera‡Æo de TROCA, utilizar rotina TROCA/VENDA !")
                            CHAVEC=9
                            Return
                    EndIf

                    While True

                      Echo Normal
                      Echo Off
                    
                      opcao1="."  dopcao1=""  ropcao1="Esc"
                      
                      If Not IsBlank(PARAM_DOC_ROM) And SubStr([Docto Nota Gerada],1,2)="RO"
                         Then opcao1="~I~mprimir 2¦ via"  dopcao1=" Imprime 2¦ via Romaneio "  ropcao1="Reimprimir"
                      EndIf                        

                      Echo Normal
                      Echo Off
                      ShowPopup " Op‡”es " CENTERED
                          "~R~eemissÆo do documento" : " ReemissÆo/Regera‡Æo da ordem de faturamento do documento "+DoctoGerado :"Imprimir",
                          "~A~lterar a O.F."         : " Altera‡Æo/ReemissÆo da ordem de faturamento do documento "+DoctoGerado :"Alterar",
                          opcao1                     : dopcao1+DoctoGerado                                                      : ropcao1,
                          "~C~ancelar o documento"   : " Cancelamento do documento gerado "+DoctoGerado                         :"Cancelar",
                          Separator,
                          "~S~air"      : " Ignorar op‡äes"                                                        :"Cancela"
                      EndMenu
                      To Opcaoc
                      echo off

                      If Not Retval Or Opcaoc="Cancela" or Opcaoc="Esc"
                         Then CHAVEC=9
                              Return
                      EndIf
                 
                      Switch
                        Case Opcaoc="Alterar":                
                          If PARAM_BLOQUEIA_ALTERA<>"N" 
                            Then Mensagem("BLOQUEADO, Altera‡Æo/Reemiss„o nÆo ‚ permitida !") 
                                 If PARAM_BLOQUEIA_ALTERA="P" 
                                    Then If Not CHECA_SUPERVISOR() 
                                            Then Loop
                                         EndIf
                                    Else Loop     
                                 EndIf      
                          EndIf
                          QuitLoop 
                          
                        Case Opcaoc="Imprimir":          
                          If PARAM_BLOQUEIA_REEMISSAO<>"N"
                             Then Mensagem("BLOQUEADO, Reemiss„o nÆo ‚ permitida !")
                                  If PARAM_BLOQUEIA_REEMISSAO="P"
                                     Then If Not CHECA_SUPERVISOR()
                                             Then Loop
                                          EndIf   
                                     Else Loop       
                                  EndIf   
                          EndIf
                          If Not Checagem_Pagina1()
                             Then Loop
                          EndIf   
                          Moveto "FaturaC"
                          REEMITIR=True
                          Return

                        Case Opcaoc="Reimprimir":          
                          If PARAM_BLOQUEIA_IMPRESSAO2<>"N"
                             Then Mensagem("BLOQUEADO, ImpressÆo 2¦ via nÆo ‚ permitida !")
                                  If PARAM_BLOQUEIA_IMPRESSAO2="P"
                                     Then If Not CHECA_SUPERVISOR()
                                             Then Loop
                                          EndIf   
                                     Else Loop       
                                  EndIf   
                          EndIf          
                          If Not Checagem_Pagina1()
                             Then Loop
                          EndIf   
                          Moveto "FaturaC"
                          REEMITIR  =True
                          SOIMPRIMIR=True
                          Return

                        Case Opcaoc="Cancelar":
                          If PARAM_BLOQUEIA_CANCEL<>"N" 
                             Then Mensagem("BLOQUEADO, Cancelamento nÆo permitido !") 
                                  If PARAM_BLOQUEIA_CANCEL="P" 
                                     Then If Not CHECA_SUPERVISOR() 
                                             Then Loop
                                          EndIf
                                     Else Loop     
                                  EndIf      
                          EndIf

                          MSG="Esta ordem de faturamento gerou o documento:// //"
                          MSG=MSG+DoctoGerado+"// //"
                          MSG=MSG+"Deseja CANCELAR este documento gerado ?" 
                          If ConfGeral_N(MSG)
                              Then COR_MENSAGEM="ALERTA" 
                                   MSG="Deseja realmente CANCELAR este documento gerado ?"
                                   If ConfGeral_N(MSG)
                                      Then TIPO="CANCELAR"
                                           Play "FT_DESF"    
                                           CHAVEC=9
                                           Return
                                      Else Loop
                                   EndIf        
                              Else Loop
                          EndIf              
                      EndSwitch
                    EndWhile

                EndSwitch           
        EndIf              
EndIf

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

        If Not IsBlank([Codigo da Empresa])
           Then If PARAM_ORCAMENTO="S"
                   Then Moveto [Numero do Orcamento]
                   Else If IsBlank([Codigo da Destinacao])
                           Then Moveto [Codigo da Destinacao]
                           Else If PARAM_FATURA_IGUAL_OF="S"
                                   Then Moveto [Data de Emissao     ]
                                   Else Moveto [Codigo              ]
                                EndIf
                        EndIf
                EndIf
           Else Moveto [Codigo da Empresa]   
        EndIf
EndIf

FACA_CHAVEDV=True
FACA_CHAVEI=True
INICIO_PAGINA=False

V_EMPRES=[Codigo da Empresa      ]
V_DESTIN=[Codigo da Destinacao   ]
V_COD   =[Codigo                 ]
V_REPRES=[Codigo do Representante]

While True

  TECLA=" Esc=Retornar  F8=Locais  PgDn  "
  If Field()="Numero do Pedido"         Or
     Field()="Numero do Orcamento"      Or
     Field()="Codigo da Empresa"        Or
     Field()="Codigo da Destinacao"     Or
     Field()="Codigo"                   Or
     Field()="UF"                       Or
     Field()="Cidade"                   Or
     Field()="Codigo do Representante"  Or
     Field()="Codigo da Tabela"         Or
     Field()="Condicao de Pagamento"    Or
     (Field()="Nome do Autorizado" And [Tipo]="C")
     Then TECLA=TECLA + "F1=Tabelas  "
  EndIf
  If CHAVEC=0
     Then TECLA=TECLA + "Del=Excluir  "
  EndIf

  If CHAVEC=1 And PARAM_CUPOM_FISCAL="S"
     Then TECLA=TECLA+"F2=Imp.Cupom F4=Imp.Cupons"
  EndIf

  MSGCAMPO=Field()
  If Field()="Consumidor Final"
     Then MSGCAMPO="Consumidor Final (Sim/N„o) * Sim = Calculo ICMS sobre o Valor da Nota Fiscal"
  EndIf
  If Field()="Numero Nota Original"
     Then MSGCAMPO="Informe o Numero da Nota Original a que esta Emiss„o se Refere !"
  EndIf
  If Field()="Origem do Pedido"
     Then MSGCAMPO="Visita, Fone, Balc„o"
  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§ ou ISENTO p/ Inscr. Estadual"
  EndIf
  If Field()="Codigo"
     Then If [Tipo Movimento Estoque]="S"
             Then MSGCAMPO="C¢digo do Destinatario"
             Else MSGCAMPO="C¢digo do Emitente"
          EndIf
  EndIf
  If Field()="Data de Saida"
     Then If [Tipo Movimento Estoque]="S"
             Then MSGCAMPO="Data de Saida"
             Else MSGCAMPO="Data de Entrada"
          EndIf
  EndIf
  If Field()="Hora de Saida"
     Then If [Tipo Movimento Estoque]="S"
             Then MSGCAMPO="Hora de Saida"
             Else MSGCAMPO="Hora de Entrada"
          EndIf
  EndIf                     
  
  If Field()="Numero do Pedido"         Or
     Field()="Numero do Orcamento"      Or
     Field()="Codigo da Empresa"        Or
     Field()="Codigo da Destinacao"     Or
     Field()="Codigo"                   Or
     Field()="UF"                       Or
     Field()="Cidade"                   Or
     Field()="Codigo do Representante"  Or
     Field()="Codigo da Tabela"         Or
     Field()="Condicao de Pagamento"    Or
     Field()="Numero_Carregamento"      Or
    (Field()="Nome do Autorizado" And [Tipo]="C")
     Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
  EndIf  

  If Field()="Nome do Autorizado" And [Tipo]="C"
     Then Monta_Opcoes("Autorizado",[Codigo])
  EndIf

  If Field()="Codigo da Destinacao"
    Then DEST_ANT      = [Codigo da Destinacao]
         DEST_DESC_ANT = [Descricao da Destinacao] 
  EndIf

  If Field()="Codigo da Empresa"      Then Monta_Opcoes("Empresas","")     EndIf
  If Field()="Codigo da Destinacao"   Then Monta_Opcoes("Destinacoes","")  EndIf

  Prompt TECLA
  Wait Field
       Until "F1","F2","F4","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F8","F9"

  Switch
    Case RetVal="F1":  
       If Field()="Codigo da Destinacao"         
          Then If Seleciona_Opcoes("Destinacoes","CR")
                  Then If [Codigo da Destinacao]<>DEST_ANT
                          Then DESTINACAO_COD_NOVO = [Codigo da Destinacao   ] 
                               DESTINACAO_DES_NOVO = [Descricao da Destinacao]
                               
                               [Codigo da Destinacao   ] = DEST_ANT
                               [Descricao da Destinacao] = DEST_DESC_ANT 
                               
                               FAZ_ROTINA = False
                               Moveto "FaturaI"
                               Moveto [Item da Of]
                               If RecordStatus("New")= False
                                  Then If SYS_CODIGO_CLIENTE="0102" And Search("ORCAMENTO",Upper([FaturaC->Descricao da Destinacao])) > 0
                                          Then If Search("VEND",Upper(DESTINACAO_DES_NOVO)) > 0 And Search("TROCA",Upper(DESTINACAO_DES_NOVO)) = 0
                                                  Then Moveto "FaturaC"  
                                                       [Codigo da Destinacao   ] = DESTINACAO_COD_NOVO
                                                       [Descricao da Destinacao] = DESTINACAO_DES_NOVO
                                                       Moveto "FaturaI"
                                                       CHAVEI=1
                                                       ATUALIZA_QUANTIDADE() 
                                                       CALC_VENCTO  = True      
                                                       Moveto "FaturaC"
                                                  Else Moveto "FaturaC"
                                                       Mensagem("A nova Destina‡„o tem que ser VENDA !")
                                               EndIf
                                          Else Moveto "FaturaC" 
                                               Mensagem("A Destina‡„o n„o pode ser alterada !// J  existem itens lan‡ados para esta OF. ")
                                       EndIf        
                                  Else FAZ_ROTINA = True  
                               EndIf   
                               
                               Moveto "FaturaC"
                               If FAZ_ROTINA
                                  Then [Codigo da Destinacao   ] = DESTINACAO_COD_NOVO
                                       [Descricao da Destinacao] = DESTINACAO_DES_NOVO
                               EndIf                
                               Release Vars DESTINACAO_COD_NOVO, DESTINACAO_DES_NOVO
                        EndIf
                        Moveto [Codigo da Destinacao]
               EndIf
       Endif
       If Field()="Codigo da Empresa"         
          Then Seleciona_Opcoes("Empresas","CR")
       Endif
  
       If Field()="Numero do Pedido"           Or
          Field()="Numero do Orcamento"      Or
          Field()="CFO"                      Or
          Field()="UF"                       Or
          Field()="Cidade"                   Or
         (Field()="Codigo" And PARAM_TPC_CLIE<>"S") Or
          Field()="Codigo do Representante"  Or
          Field()="Codigo da Tabela"         Or
          Field()="Condicao de Pagamento"
          Then CONSULTAF1()
        EndIf
        If Field()="Nome do Autorizado" And [Tipo]="C"
           Then Seleciona_Opcoes("Autorizado","CR")
        EndIf
  
        If Field()="Codigo"
           Then If PARAM_TPC_CLIE="S" 
                   Then OP_INSERT_ITEM=True
                        Play "Sw_Clie"
                        If Sw_Cliente_Pesquisado<>""
                           Then [Codigo]=Sw_Cliente_Pesquisado
                        EndIf
                EndIf
                If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                   Then [Codigo do Representante] = V_REPRES 
                EndIf
       EndIf
        
   Case RetVal="F2" Or RetVal="F4" And CHAVEC=1 And PARAM_CUPOM_FISCAL="S":
        If IsBlank([Codigo da Destinacao])
           Then Mensagem("Informe o Codigo da Destina‡„o")
                Loop
        EndIf
        Tecla_Dig=RetVal
        Campo_Ant=Field()
        Moveto [Codigo da Destinacao]
        Ativa_Lookup()
        Moveto [Codigo da Destinacao]
        Locate [FaturaC->Codigo da Destinacao]
        If [Atualiza Estoque]="S"
           Then Mensagem("Aten‡„o! Codigo da Destina‡„o Inv lida-> Atualiza Estoque=Sim")
                KeyPress "ESC"
                Moveto Field Campo_Ant
                Loop
        EndIf
        KeyPress "ESC"

        Switch
         Case Tecla_Dig="F2":
              Entra_Numero_Cupom()
         Case Tecla_Dig="F4":
              Do_It!
              Play "FT_CF"
              Carrega_Tabelas()
              CoEdit NoWindow "FaturaC"
              PickForm "3"
              Moveto [Numero da OF]
              Locate ORDFAT
        EndSwitch
        Moveto Field(Campo_Ant)
        Loop

  Case RetVal="PGDN":
       If Field()="Numero do Pedido" Or
          Field()="Numero do Orcamento"
          Then Loop
       EndIf
       If Search("VEND",[Descricao da Destinacao])>0 And
          [Nome Fantasia EmitDest]<>"DIVERSOS" And [Tipo]="C" And
          PARAM_MESES_SEMVENDA>0
          Then If Not Checa_Meses_SemVenda()
                  Then Loop
               EndIf
       EndIf
      
      If Field()="Codigo da Empresa"
         Then If [Codigo da Empresa   ]<>V_EMPRES
                 Then Moveto "FaturaI"
                      Moveto [Item da Of]
                      If RecordStatus("New")= False
                         Then Moveto "FaturaC" 
                              [Codigo da Empresa]=V_EMPRES
                              Mensagem("A Empresa n„o pode ser alterada !// J  existe itens lan‡ados para esta OF. ")
                         Else Moveto "FaturaC"
                      EndIf
              EndIf
      EndIf         
           
         If Checagem_Pagina1()
            Then If SYS_CODIGO_CLIENTE="0102"
                    Then Grava_Telefone()
                 EndIf
                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 Nota Fiscal N§ "+[Numero Nota Gerada])
                  Else If QuerExcluir("desta Ordem de Faturamento")
                          Then GRAVA_LOG=True
                               EXCLUSAO_C()
                               CHAVEC=9
                               QuitLoop
                       EndIf
               EndIf
       EndIf
  Case Retval="F8":
       ShowDialog_Endereco()
  Case Retval="F9":
       Enderecos()
  Case Retval="ESC":
       Switch
       Case Field()="Codigo da Empresa":
            If QuerDesfazer("F")
               Then EXCLUSAO_C()
                    CHAVEC=9
                    QuitLoop
            Endif
       Case Field()="Numero do Pedido" Or 
            Field()="Numero do Orcamento"      : 
            If (CHAVEC=1 And SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR))
               Then If QuerDesfazer("F")
                       Then EXCLUSAO_C()
                            CHAVEC=9
                            QuitLoop
                       Else Loop     
                    Endif
               Else Moveto [Codigo da Empresa   ]      
            EndIf
       Case Field()="Codigo da Destinacao"     :
            If CHAVEC=1 And SYS_USUARIO_BALCAO="S" And Not IsBlank(SYS_USUARIO_CODEMPR)
               Then If QuerDesfazer("F")
                       Then EXCLUSAO_C()
                            CHAVEC=9
                            QuitLoop
                       Else Loop
                    Endif
            EndIf   
            If CHAVEC=0
               Then If QuerDesfazer("F")
                       Then Undo
                            CHAVEC=9
                            QuitLoop
                    EndIf
               Else Moveto [Codigo da Empresa]
            EndIf
       Case Field()="Codigo"                   : Moveto [Codigo da Destinacao] 
       Case Field()="CFO"                      : Moveto [Codigo da Destinacao]
       Case Field()="Data de Emissao"          : Moveto [CFO                 ]
       Case Field()="Consumidor Final"         : Moveto [Codigo              ]
       Case Field()="Razao Social"             : Moveto [Consumidor Final    ]
       Case Field()="Telefone"                 : 
            If SYS_CODIGO_CLIENTE="0102"
               Then If Not IsBlank([]) 
                       Then Moveto [UF] 
                       Else Loop
                    EndIf
               Else Moveto [UF]      
            EndIf
            
       Case Field()="Nome do Autorizado"       : Moveto [Razao Social]
       Case Field()="Condicao de Pagamento"    :
            If PARAM_UTILIZAVENDEDOR="S"
               Then If SYS_USUARIO_BALCAO = "S" and Not IsBlank(SYS_USUARIO_CODVEND)                                   
                       Then Moveto [Nome do Autorizado]
                       Else Moveto [Codigo do Representante]
                    EndIf
               Else Moveto [Codigo do Representante]    
            EndIf
       
       
       Case Field()="Codigo da Tabela"            : Moveto [Condicao de Pagamento]
       Case Field()="Codigo do Representante"     : Moveto [Nome do Autorizado]            
       OtherWise:
            Left
       EndSwitch
       
  Case Retval="ENTER":
       If IsBlank([])
          Then If Field()="Codigo da Empresa" Or
                  Field()="Codigo da Destinacao" Or
                  Field()="CFO" Or
                  Field()="Data de Emissao" Or
                  Field()="Codigo" Or
                  Field()="Codigo do Representante" Or
                  Field()="Condicao de Pagamento" 
                  Then Loop
               EndIf
       EndIf
 
       Switch
       Case Field()="Codigo da Empresa":
            If Not Checa_Opcoes("Empresas",[])
               Then Mensagem("Empresa inv lida !")
                    Loop
            EndIf

            If Carrega_Parametros()
               Then If [Codigo da Empresa   ]<>V_EMPRES
                       Then Moveto "FaturaI"
                            Moveto [Item da Of]
                            If RecordStatus("New")= False
                               Then Moveto "FaturaC" 
                                    [Codigo da Empresa]=V_EMPRES
                                    Mensagem("A Empresa n„o pode ser alterada !// J  existe itens lan‡ados para esta OF. ")
                               Else Moveto "FaturaC"
                                    V_EMPRES=[Codigo da Empresa   ]
                                    If CHAVEC=1
                                       Then [Codigo da Empresa       ]=PARAM_EMPRESA
                                            [Codigo da Destinacao    ]=PARAM_DESTINACAO
                                            [Codigo da Tabela        ]=PARAM_TABELA_PRECO
                                            [Codigo                  ]=PARAM_CLIENTE
                                            [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                                            [Codigo do Representante ]=PARAM_VENDEDOR
                                            [Condicao de Pagamento   ]=PARAM_COND_PAGTO
                                            [Forma de Pagamento      ]=PARAM_FORMA_PAGTO
                                    EndIf
                            EndIf        
                    EndIf        
                    If PARAM_ORCAMENTO="S"
                       Then Moveto [Numero do Orcamento ]
                       Else Moveto [Codigo da Destinacao]
                    EndIf
            EndIf
       Case Field()="Numero do Orcamento":
            If Not IsBlank([])
               Then If CHAVEC=1
                       Then GetRecord "\\Sistemas\\Vendas\\OrcaC" [Numero do Orcamento] to REGOCC
                            If RetVal 
                               Then If REGOCC["Situacao do Orcamento"]<>"ABERTO" 
                                       Then Mensagem("Verificar a Situa‡„o do Or‡amento !//Status="+REGOCC["Situacao do Orcamento"])
        						                        Loop
                                    EndIf
                            EndIf

                            If Not Carrega_Parametros()
                               Then Loop
                            EndIf

                            V_COD=[CODIGO]
                            [Codigo]=""
                            [CODIGO]=V_COD

                            GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] to REG_CLIE_PED  
                             If not RetVal
                                Then Mensagem("Cliente Inv lido !")
                                     Loop
                                Else If REG_CLIE_PED["Situacao do Cliente"]="RECADASTRO"
                                        Then Mensagem("Verificar a Situa‡„o do Cliente !//Status="+REG_CLIE_PED["Situacao do Cliente"])
                                             Loop
                                     EndIf                            
                                     If REG_CLIE_PED["Situacao do Cliente"]="PESSIMO"
                                        Then Mensagem("Verificar a Situa‡„o do Cliente com a Gerencia !")
                                             If SYS_CODIGO_CLIENTE = "0112"
                                                Then If Not Checa_Supervisor()
                                                        Then Loop
                                                     EndIf
                                             EndIf    
                                     EndIf
                             EndIf

                            V_ORCAME=[Numero do Orcamento]
                            [Numero do Orcamento]=""
                            [Numero do Orcamento]=V_ORCAME

                            V_DESTIN2=[Codigo da Destinacao]
                            [Codigo da Destinacao]=""
                            [Codigo da Destinacao]=V_DESTIN2

                            If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                               Then [Codigo do Representante] = V_REPRES 
                               Else V_REPRES =[Codigo do Representante]
                                    [Codigo do Representante]=""
                                    [Codigo do Representante]=V_REPRES
                            EndIf

                            V_CONDPG =[Condicao de Pagamento]
                            [Condicao de Pagamento]=""
                            [Condicao de Pagamento]=V_CONDPG

                            V_TRANSP =[Codigo da Transportadora]
                            [Codigo da Transportadora]=""
                            [Codigo da Transportadora]=V_TRANSP

                            [Data de Emissao]=Today()
                            [Data de Saida  ]=Today()
                            [Hora de Saida  ]=Time()

                            If Search("VEND",[Descricao da Destinacao])>0
                               Then Mensagem_Venda()
                            EndIf           
                       

                    EndIf
            EndIf
               
            Moveto [Codigo da Destinacao]           
       Case Field()="Codigo da Destinacao":   
            If Not Checa_Opcoes("Destinacoes",[])
               Then Mensagem("Destinacao inv lida !")
                    Loop
            EndIf

            If [Codigo da Destinacao] <> DEST_ANT
             Then DESTINACAO_COD_NOVO = [Codigo da Destinacao   ] 
                  DESTINACAO_DES_NOVO = [Descricao da Destinacao]
             
                  [Codigo da Destinacao   ] = DEST_ANT
                  [Descricao da Destinacao] = DEST_DESC_ANT 

                  Moveto "FaturaI"
                  Moveto [Item da Of]
                  If RecordStatus("New")= False        
                     Then FAZ_ROTINA = False
                          If SYS_CODIGO_CLIENTE="0102" And Search("ORCAMENTO",Upper([FaturaC->Descricao da Destinacao])) > 0
                             Then If Search("VEND",Upper(DESTINACAO_DES_NOVO)) > 0 And Search("TROCA",Upper(DESTINACAO_DES_NOVO)) = 0
                                     Then Moveto "FaturaC"  
                                          [Codigo da Destinacao   ] = DESTINACAO_COD_NOVO
                                          [Descricao da Destinacao] = DESTINACAO_DES_NOVO
                                          If [Codigo da Destinacao ] <> V_DESTIN
                                             Then V_DESTIOBS=1
                                             Else V_DESTIOBS=0
                                          EndIf
                                          V_DESTIN = [Codigo da Destinacao]
                                          Moveto "FaturaI"
                                          CHAVEI=1
                                          ATUALIZA_QUANTIDADE() 
                                          CALC_VENCTO  = True      
                                          Moveto "FaturaC"
                                     Else Moveto "FaturaC"
                                          Mensagem("A nova Destina‡„o tem que ser VENDA !")
                                  EndIf
                             Else Moveto "FaturaC"
                                  Mensagem("A Destina‡„o n„o pode ser alterada !// J  existem itens lan‡ados para esta OF. ")
                         EndIf
                    Else FAZ_ROTINA = True     
                  EndIf
                 
                  Moveto "FaturaC"
                  If FAZ_ROTINA
                     Then [Codigo da Destinacao   ] = DESTINACAO_COD_NOVO
                          [Descricao da Destinacao] = DESTINACAO_DES_NOVO
                          If [Codigo da Destinacao ] <> V_DESTIN
                             Then V_DESTIOBS=1
                             Else V_DESTIOBS=0
                          EndIf
                          V_DESTIN = [Codigo da Destinacao]   
                  EndIf   
                  Release Vars DESTINACAO_COD_NOVO, DESTINACAO_DES_NOVO
            EndIf
            Moveto [CFO]        
       Case Field()="CFO":
            If Search("REMES",[Descricao da Destinacao])>0 Or
               Search("COMPLEM",[Descricao da Destinacao])>0
               Then Moveto [Numero Nota Original]
               Else Moveto [Data de Emissao]
            EndIf
       Case Field()="Numero Nota Original":
            []=ALINH()
            Right
       Case Field()="Data de Emissao":
            If CHAVEC=1 And Not IntervaloData([])
               Then Loop
            EndIf   
            ;---- Verifica a data de emissÆo antes da altera‡Æo e se mˆs diferente nÆo deixa prosseguir ----
            If IsAssigned(ANT_DTE) And ANT_DTE<>BlankDate() And ANT_DTE<>[Data de Emissao]
               Then If CHAVEC=0 And (Month(ANT_DTE)<>Month([Data de Emissao]) Or Year(ANT_DTE)<>Year([Data de Emissao]))
                       Then MSG= 
                                 "O  mˆs/ano da nova data informada "+AlinhM(StrVal([Data de Emissao]),10)+" ‚ diferente do mˆs/ano//"+
                                 "da data anterior "+AlinhM(StrVal(ANT_DTE),10)+"                                        ////"+
                                 "Opera‡„o n„o permitida.                                            //"+ 
                                 "Para  tal  situa‡„o  exclua  este lan‡amento e fa‡a um novo na data//"+
                                 "correta!                                                           "
                                 [Data de Emissao]=ANT_DTE
                                 Mensagem(MSG)
                                 Loop        
                    EndIf
            EndIf           
            Moveto [Data de Saida]
       Case Field()="Codigo": 
                   
            If SYS_CODIGO_CLIENTE="0334" Or
               SYS_CODIGO_CLIENTE="0344" Or
               SYS_CODIGO_CLIENTE="0275" Or
               SYS_CODIGO_CLIENTE="0102"
               Then Play "sw_ped"
            EndIf   

            If Search("VEND",[Descricao da Destinacao])>0
               Then Mensagem_Venda()
            EndIf
      
            TELEFONE=""
            GetRecord "\\Sistemas\\Cadastro\\Destinat" [Codigo] to REG_CLIE_PED  
            If not RetVal
               Then Mensagem("Pessoa Inv lido !")
                    Loop
               Else 
                    If REG_CLIE_PED["Inativo"]="S"
                       Then Mensagem("Pessoa Inativa !")
                            Loop
                    EndIf  
                    If REG_CLIE_PED["Situacao do Cliente"]="RECADASTRO"
                       Then Mensagem("Verificar a Situa‡„o da Pessoa !//Status="+REG_CLIE_PED["Situacao do Cliente"])
                            Loop
                    EndIf                            
                    If REG_CLIE_PED["Situacao do Cliente"]="PESSIMO"
                       Then Mensagem("Verificar a Situa‡„o da Pessoa com a Gerencia !")
                            If SYS_CODIGO_CLIENTE = "0112"
                               Then If Not Checa_Supervisor()
                                       Then Loop
                                    EndIf
                            EndIf    
                    EndIf
            EndIf

            If CHAVEC=1
               Then If Search("VEND",[Descricao da Destinacao])>0   And 
                       [Nome Fantasia EmitDest]<>"CONSUMIDOR FINAL" And
                       [Nome Fantasia EmitDest]<>"DIVERSOS"         And
                       [Tipo]="C"                                   And
                       PARAM_NBLOQUEIO_SPC > 0
                       Then MSG_SPC="AVISO_SPC"
                            Checa_SPC()
                            Release Vars MSG_SPC
                    EndIf        
            EndIf        

            If PARAM_UTILIZAVENDEDOR="S"
               Then If SYS_USUARIO_BALCAO = "S" And Not IsBlank(SYS_USUARIO_CODVEND)                        
                       Then If CHAVEC=1 
                               Then [Codigo do Representante]=SYS_USUARIO_CODVEND
                            EndIf
                            If SYS_CODIGO_CLIENTE="0322"
                               Then LOC_TAB_PRECO("A VISTA")
                            EndIf   
                            Moveto [Codigo da Tabela]
                       Else Moveto [Codigo do Representante]
                    EndIf
            EndIf
                      
            If IsBlank([Codigo do Representante])
               Then [Codigo do Representante]=PARAM_VENDEDOR
            EndIf
            If IsBlank([Codigo da Transportadora])
               Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
            EndIf
            If [Codigo]<>V_COD
               Then If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                       Then 
                       Else V_REPRES = [Codigo do Representante]
                            [Codigo do Representante] = ""
                            [Codigo do Representante] = V_REPRES
                    EndIf                    
                    
                    V_COD=[Codigo]
                    ENDERECOS()
            EndIf
            
            If [Tipo]<>"C"
               Then [Consumidor Final]="N"
            EndIf

            Moveto [Nome do Autorizado]
            
            If SYS_CODIGO_CLIENTE="0102" And IsBlank([Telefone])
               Then Moveto [Telefone]
               ELse If SYS_CODIGO_CLIENTE="0102" And Not IsBlank([Telefone])
                       Then TELEFONE=[Telefone]
                            Moveto [Telefone]
                    EndIF        
            EndIf   

            If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
               Then [Codigo do Representante] = V_REPRES 
            EndIf
            
            If SYS_CODIGO_CLIENTE="0334" And (Search("DIVERSO",[FaturaC->Razao Social])>0 Or IsBlank([FaturaC->Razao Social]))
               Then Mensagem("Informe o nome do cliente !")
                    Moveto [Razao Social] 
            EndIf
       Case Field()="Razao Social" : 
            If SYS_CODIGO_CLIENTE="0334" And (Search("DIVERSO",[FaturaC->Razao Social])>0 Or IsBlank([FaturaC->Razao Social]))
               Then Mensagem("Informe o nome do cliente !")
                    Moveto [Razao Social]
               ELse Right     
            EndIf
       Case Field()="Consumidor Final":
            If IsBlank([])                                                     
               Then []="N"
            EndIf
            Moveto [Razao Social]                             
       Case Field()="Telefone":                       
            If SYS_CODIGO_CLIENTE="0102" 
               Then If IsBlank([])
                       Then FastMsg("Campo Obrigatorio! ")
                            Loop
                    EndIf 
            EndIf
            Moveto [Nome do Autorizado]                                           
       Case Field()="Nome do Autorizado":
            If PARAM_BLOQUEIA_AUTORI="S"
               Then If [Tipo]="C"
                       Then If IsBlank([Nome do Autorizado]) 
                               Then If DynArraySize(Opcoes)>0
                                       Then Mensagem("Autorizado n„o informado!// // Tecle F1 para consultar!")
                                            Loop
                                       Else [Nome do Autorizado ]=""
                                            [CPF do Autorizado  ]=""
                                            [Data da Autorizacao]=BlankDate()    
                                    EndIf
                               Else If Not Checa_Opcoes("Autorizado",[])
                                       Then Mensagem("Autorizado n„o cadastrado!")
                                       Else Moveto [CPF do Autorizado] 
                                    EndIf
                                    Loop
                            EndIf
                       Else [Nome do Autorizado ]=""
                            [CPF do Autorizado  ]=""
                            [Data da Autorizacao]=BlankDate()                 
                    EndIf
               Else Moveto [CPF do Autorizado] 
            EndIf        
            Moveto [Codigo do Representante]
                                          
            If PARAM_UTILIZAVENDEDOR="S"
                Then If SYS_USUARIO_BALCAO = "S" and Not IsBlank(SYS_USUARIO_CODVEND)                                   
                        Then If CHAVEC=1 
                               Then [Codigo do Representante]=SYS_USUARIO_CODVEND
                            EndIf
                             If SYS_CODIGO_CLIENTE="0322"
                                Then LOC_TAB_PRECO("A VISTA")
                             EndIf   
                             Moveto [Codigo da Tabela]
                        Else Moveto [Codigo do Representante]
                     EndIf
            EndIf
            
       Case Field()="CPF do Autorizado":    
            If PARAM_UTILIZAVENDEDOR="S"
               Then If SYS_USUARIO_BALCAO = "S" and Not IsBlank(SYS_USUARIO_CODVEND) and Sys_Codigo_Cliente <> "0102"                                   
                       Then If CHAVEC=1 
                               Then [Codigo do Representante]=SYS_USUARIO_CODVEND
                            EndIf
                            If SYS_CODIGO_CLIENTE="0322"
                               Then LOC_TAB_PRECO("A VISTA")
                            EndIf   
                            Moveto [Codigo da Tabela]
                       Else Moveto [Codigo do Representante]
                    EndIf
            EndIf

       Case Field()="Codigo do Representante":
            If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
               Then If PARAM_BLOQ_ALTERA_REP="S" And CHAVEC=0
                       Then If [Codigo do Representante]<>V_REPRES 
                               Then Mensagem("Verificar a permiss„o para altera‡„o do representante !")
                                    [Codigo do Representante] = V_REPRES
                            EndIf      
                    EndIf
                    Moveto [Comissao do Representante]        
               Else GetRecord "\\Sistemas\\Cadastro\\Represen" [FaturaC->Codigo do Representante] To REP_INATIVO
                    If RetVal
                       Then If REP_INATIVO["Inativo Represent"]="S"
                               Then Mensagem("Representante/Vendedor Inativo !")
                                    Release Vars REP_INATIVO      
                                    Loop
                            EndIf
                    EndIf       
                    Release Vars REP_INATIVO        
                    If [Codigo do Representante]<>V_REPRES
                       Then V_REPRES =[Codigo do Representante]
                            [Codigo do Representante]=""
                            [Codigo do Representante]=V_REPRES
                    EndIf
                    Moveto [Comissao do Representante]
            EndIf        
       Case Field()="Comissao do Representante":
            If PARAM_VISITA="S" 
               Then Moveto [Origem do Pedido]
               Else Moveto [Condicao de Pagamento]
            EndIf
       Case Field()="Condicao de Pagamento":
            If SYS_CODIGO_CLIENTE="0322"
               Then LOC_TAB_PRECO("A VISTA")
            EndIf           
            Moveto [Codigo da Tabela]
       Case Field()="Codigo da Tabela":
            If Search("VEND",[Descricao da Destinacao])>0 And
               [Nome Fantasia EmitDest]<>"DIVERSOS" And [Tipo]="C" And
               PARAM_MESES_SEMVENDA>0
               Then If Not Checa_Meses_SemVenda()
                       Then Loop
                    EndIf
            EndIf              
            If Checagem_Pagina1()
               Then If SYS_CODIGO_CLIENTE="0102"
                       Then Grava_Telefone()
                    EndIf
                    QuitLoop 
            EndIf
       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
  SomatoriaDosItens()

  Moveto [Item da OF]
  End
  NITEM = [Item da OF]
  Down
  Moveto [Item da OF]
  Seta_Sequencia(NITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False
    MSGCAMPO=""
    TECLA= " Esc=Retornar  F7=Paginar  Alt+F=Fun‡”es  PgUp/PgDn "
    Prompt TECLA

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

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
              "F3  ~V~er Ficha              " : " Ver itens modo ficha             " : "F3",
              "F5  C~o~nsulta               " : " Consultar tabela pre‡o           " : "F5",
              "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()
         DigitaI()
         QuitLoop
    Case RetVal="F5":
         If Search("SIMPLES REMESSA ENTR",[FaturaC->Descricao da Destinacao])>0
            Then Mensagem("InclusÆo nÆo permitida !// No lan‡amento ‚ poss¡vel faturar somente itens do pedido !") 
            Else VSDGEMPRESA=[FaturaC->Codigo da Empresa]
                 If IsBlank([FaturaC->Codigo da Tabela])
                    Then VSDGTABELA =PARAM_TABELA_PRECO
                    Else VSDGTABELA =[FaturaC->Codigo da Tabela]
                 EndIf
                 SEQIT=[Item da OF]
        
                 Moveto "FaturaC"
                 Resynckey
                 KeyPress "F7"
                 OP_INSERT_ITEM=True
                 VSDG_PESQ_SWCONS = True
                 If PARAM_EXIBECUSTO="N"
                    Then Play "SW_CONSS"
                    Else Play "SW_CONS"
                 EndIF
        
                 Moveto "FaturaC"
                 KeyPress "F7"
                 
                 Moveto "FaturaI"
                 Moveto [Item da OF]
                 Locate ORDFAT,SEQIT
                 IsLockRecord()
                 Echo Off
        
                 If Sw_Item_Pesquisado="" Then Loop EndIf
        
                 CHAVEI=1
        
                 [Codigo do Item  ]=Sw_Item_Pesquisado
                 [Codigo da Tabela]=VSDGTABELA
                 Item_Ins_Consulta=True

                 Return
         EndIf        
    Case Retval="F9":
         Del
         OPCHAVEI="CDB"
         CHAVEI=7
         Return
    Case Retval="F8":
         Del
         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
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           FACA_DIGITAF=True

           PAGINA("FaturaI","MR")
           SEQIT=[Item da OF]
           If EDITAR="S"
              Then CHAVEI=0
                   Controla_EdicaoI()
              Else If EXCLUIR="S"
                      Then If QuerExcluir("")
                              Then CHAVEI=8
                                   GRAVA_LOG=True
                                   EXCLUSAO_I()
                                   Release Vars GRAVA_LOG
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SomatoriaDosItens()
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         SEQIT=[]
         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("Numero m ximo da sequencia permitida: 900 !")
                 Del
                 QuitLoop
         EndIf

         Del
         Locate ORDFAT,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else
                 If Search("SIMPLES REMESSA ENTR",[FaturaC->Descricao da Destinacao])>0
                    Then Mensagem("InclusÆo nÆo permitida !// No lan‡amento ‚ poss¡vel faturar somente itens do pedido !")
                         QuitLoop
                 EndIf
            
                 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()
Private etiqok

FACA_DIGITAF=True

If REEMITIR
   Then CHAVEI=9
        Return
EndIf

Moveto "FaturaI"
SomatoriaDosItens()

While True

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

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

  CHAVEI=1
  Opcao_Ver = False
  SetaCorRegistro("Editar")
  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 CDBarras()
                    QuitLoop
            EndIf
    EndIf    
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private NITEMOF,FRACIONADO,ITEM_FRACIONADO

Moveto [Codigo do Item]
Ativa_Lookup()
Moveto [Codigo de Barras ]
Locate Dados_Item
If RetVal
   Then Moveto [Codigo do Item]
        ITEM_FRACIONADO = [Codigo do Item]
   Else Moveto [Codigo do Item]
        ;If Len(Dados_Item) < 10
        ;   Then ITEM_FRACIONADO = AlinhM(Dados_Item,10)
        ;   Else ITEM_FRACIONADO = Dados_Item
        ;EndIf
        ITEM_FRACIONADO = Dados_Item   
        Locate ITEM_FRACIONADO
        If Not RetVal
           Then KeyPress "ESC"
                If Codigo_Barras2(ITEM_FRACIONADO,"S")
                   Then ITEM_FRACIONADO = CODIGO_BARRA2
                   Else ITEM_FRACIONADO = ""
                EndIf
                Moveto [Codigo do Item]
                Ativa_Lookup()
                Moveto [Codigo do Item]
                Locate ITEM_FRACIONADO   
                If Not RetVal
                   Then KeyPress "ESC"
                        Del
                        Release Vars ITEM_FRACIONADO
                        Return
                EndIf        
        EndIf   
EndIf   
KeyPress "ESC"
        
GetRecord "\\Sistemas\\Estoque\\Iten_Com" ITEM_FRACIONADO To FRACIONADO
If RetVal
   Then If FRACIONADO["Fracionado"]="N" And (Dados_QTD-Int(Dados_QTD))<>0
           Then Mensagem("A Quantidade do Item ["+ITEM_FRACIONADO+"] nÆo pode ser Fracionado !// //Definido no cadastro do item !")
                Del
                Release Vars FRACIONADO,ITEM_FRACIONADO 
                Return
        EndIf        
   Else Mensagem("Item n„o Cadastrado !")
        Del
        Release Vars FRACIONADO,ITEM_FRACIONADO 
        Return
EndIf
Release Vars FRACIONADO 

If PARAM_DUPLICIDADE_ITEM And Not IsBlank(ITEM_FRACIONADO)
   Then NITEMOF=[Item da OF]
        Del
        Moveto [Codigo do Item]
        Locate ITEM_FRACIONADO
        If RetVal
           Then End
                Mensagem("O Item ["+ITEM_FRACIONADO+"], j  est  lan‡ado nesta OF !")
                Release Vars NITEMOF,ITEM_FRACIONADO
                Return
        EndIf
        End Down
        Moveto [Item da OF]
        [Item da OF]=NITEMOF
        
        Release Vars NITEMOF
EndIf
Release Vars ITEM_FRACIONADO 

ITOK=True
[Quantidade]=Dados_QTD             
CODIGO_BARRA=Dados_Item                

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   ;CDBarras()       

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

Item_ok=False

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

If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       KeyPress "ESC"

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

         [Codigo do Item] =VSD_I_Codigo_Item
         
         If Origem="Codigo_Barras"
            Then Pega_Preco("Cod_Barras")
            Else Pega_Preco("Novo")
         EndIf
         
         If Origem="Codigo_Barras"
            Then If [Preco Unitario]<=0
                   Then Mensagem("Item sem tabela de pre‡o !")
                        QuitLoop
                 EndIf
         EndIf                              

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

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

                        [COFINS_CST     ]="49"
                        [COFINS_Aliquota]=BlankNum()
                 EndIf        
                         
            Else
                 ;;alterado 12/02/2014 
                 ;;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
                 VSD_I_CST_Item=[Tipo Tributacao]

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

                 ;;alterado 12/02/2014 
                 ;;e se for "SIMPLES.." pega novos dados 
                 Switch
                   Case (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"):
        
                         Switch
                           Case SYS_CODIGO_CLIENTE = "0342" : [CSOSN]="102"
                           Case (Search("MOSTR",[FaturaC->Descricao da Destinacao])>0  Or
                                 Search("DEVOL",[FaturaC->Descricao da Destinacao])>0  Or
                                 Search("BRIND",[FaturaC->Descricao da Destinacao])>0) And
                                SYS_CLIENTE_CONFEC<>"":
                                [CSOSN]="400"

                           Case ( [FaturaC->Tipo Movimento Estoque]="S" And
                                  (Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                                   [FaturaC->Tipo Pessoa]="FISICA") )
                                  Or 
                                ( [FaturaC->Tipo Movimento Estoque]="E" Or
                                  Search("VEND",[FaturaC->Descricao da Destinacao])=0 Or
                                  [FaturaC->Tipo Pessoa]="FISICA" ):  
                                 Switch
                                   Case [CSOSN]="101": [CSOSN]="102" 
                                   Case [CSOSN]="201": [CSOSN]="202" 
                                 EndSwitch
                                
                         EndSwitch
                         VSD_I_CSOSN=SubStr([Tipo Tributacao],1,1)+[CSOSN]
        
                         Switch
                           Case [CSOSN]="101" Or [CSOSN]="900":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                [MVA                 ]=BlankNum()
                                [ICMS_ST_Aliquota    ]=BlankNum()
        
                           Case [CSOSN]="201":
                                [ICMS_CREDSN_Aliquota]=ALIQUOTA_CREDITO_ICMS_NOSN
                                 If OPCAO_RED_BCICMS="1"
                                    Then [Aliquota Reduzida BCICMS]=BlankNum()
                                 EndIf
                                 [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                 Checa_MVA("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" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="E": 
                                [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])

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

                   OtherWise: ;-- DEBITRO/CREDITO -----

                         Switch
                           Case (TribCST="10" Or TribCST="30" Or TribCST="70"):
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                           Case TribCST="60" And Search("DEVOL",[FaturaC->Descricao da Destinacao])>0 And [FaturaC->Tipo Movimento Estoque]="E":
                                [ICMS_ST_Aliquota]=UF_ALIQUOTA_ICMS_INTERNA
                                Checa_MVA("FATURA",[Tributacao de ICMS],[Codigo MVA])
                           OtherWise:     
                                [MVA             ]=BlankNum()
                                [ICMS_ST_Aliquota]=BlankNum()
                         EndSwitch
                         If SYS_CODIGO_CLIENTE = "0342" 
                            Then [CSOSN ]="101"
                            Else [CSOSN ]="900"
                         EndIf
                         [ICMS_CREDSN_Aliquota]=BlankNum()
                         [ICMS_CredSN_Valor   ]=BlankNum()

                 EndSwitch
                 
         EndIf   

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

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

         If Search("VENDA",[FaturaC->Descricao da Destinacao])=0 And [FaturaC->Tipo Movimento Estoque]<>"S"
            Then [PIS_CST        ]  ="49"
                 [PIS_ALIQUOTA   ]=BlankNum() 
                 [COFINS_CST     ]  ="49"
                 [COFINS_ALIQUOTA]=BlankNum() 
         EndIf 
         If [PIS_CST]     ="99" Then [PIS_CST]    ="49" EndIf 
         If [COFINS_CST]  ="99" Then [COFINS_CST] ="49" EndIf  

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

Echo Off
Return Item_ok
EndProc

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

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

If INICIO_DIALOG
   Then If CHAVEI=0
           Then Switch
                  Case Not IsBlank(VSD_I_Pedido_Item): Campo="I_Quantidade"
                  Case EDITA_DESCRICAO_ITEM = "S"    : Campo="I_Descricao_Item"
                  Case PARAM_COR_TECIDO="S"          : Campo="I_Codigo_Cor_Tecido"
                  Case PARAM_TAMANHO="S"             : Campo="I_Tamanho"
                  Case PARAM_TABPR_ITEM="S"          : Campo="I_Tabela"
                  OtherWise                          : Campo="I_Quantidade"
                EndSwitch
                
;----- Brasil Textil ---------------------------------------------------------------------

                If SYS_CODIGO_CLIENTE="0239" And
                	[FaturaC->Tipo Movimento Estoque]="S" And
                	[FaturaI->Valor IPI por Unidade]>0
                   Then Campo="I_Preco_Unitario"
                   Else Campo="I_Quantidade"
                EndIf    
                
;-----------------------------------------------------------------------------------------

                TABANT=VSD_I_TABELA

           Else If PARAM_ORCAMENTO="S"
                   Then If IsBlank([FaturaC->Numero do Orcamento])
                           Then Campo="I_Codigo_Item"
                           Else Campo="I_Pedido"
                        EndIf
                   Else Campo="I_Codigo_Item"
                EndIf
        EndIf
        INICIO_DIALOG=False
EndIf

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

        VSD_I_BC_ICMS     =BlankNum()
        VSD_I_Valor_ICMS  =BlankNum()

        VSD_I_Valor_CSOSN =BlankNum() 

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

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

If Opcao_Ver=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 Evento["KeyCode"] = -33
      Then Echo Normal
           Echo Off
           ShowPopup " Fun‡”es " CENTERED      
           "F3 Alterar Desconto         ": " Alterar Desconto do Item           " :"F3",
           "F5 A~l~tera Pre‡o           ": " Altera Pre‡o                       " :"F5",
           "F6 A~l~tera Comiss„o        ": " Altera Comiss„o                    " :"F6",
           "F7 ~A~ltera Localiza‡„o     ": " Altera forma 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" or MenuVar="Esc"
             Then Return
          EndIf                                         
          Evento["KeyCode"]=MenuVar
   EndIf 

   Switch
     Case Opcao_Ver=True:
          Temp=False
          Switch
            Case Evento["KeyCode"] =  27:
                 CancelDialog
            OtherWise:
              Mover_Reg=True
              Switch
                Case Evento["KeyCode"] = -71:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Home
                     EndIf
                Case Evento["KeyCode"] = -79:
                     If AtLast()
                        Then Mover_Reg=False Beep
                        Else End
                     EndIf
                Case Evento["KeyCode"] = -73:
                     If AtFirst()
                        Then Mover_Reg=False Beep
                        Else Up
                     EndIf
                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:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          Temp=False
          If CHAVEI=0
             Then If QuerExcluir("")
                     Then CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -61 Or Evento["KeyCode"] = "F3"):
          DigitaDescto_Item()
          
     Case (Evento["KeyCode"] = -63 Or Evento["KeyCode"] = "F5")And Not F5_ATIVADO:
          If PARAM_ALTERA_PRECO="P"
             Then If Checa_Supervisor()
                     Then F5_ATIVADO=True
                          Campo="I_Preco_Unitario"
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -64 Or Evento["KeyCode"] = "F6")  And Not F6_ATIVADO:
          If Not IsBlank(VSD_I_Codigo_Item)
             Then If PARAM_COMIS_ITEM="P"
                     Then Libera_Bloqueio("")
                          If Ok="S"
                             Then F6_ATIVADO=True
                                  Campo="I_Comissao_Item"
                          EndIf
                  EndIf
          EndIf
     Case (Evento["KeyCode"] = -66 Or Evento["KeyCode"] = "F8"):    
          Edita_Memo("Informacoes_Adicionais",15,01,06,78,"Informa‡”es Adicionais do Item NFe")
          VSD_I_InfAdic=[Informacoes_Adicionais]
     Case Evento["KeyCode"] = -65 Or Evento["KeyCode"] = "F7" :
          ModoLocalizarItem("SELECAO","","FATURA")
          
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item"        Or
             Campo="I_Tipo_Item"          Or
             Campo="I_Codigo_Cor_Tecido"  Or
             Campo="I_Tabela"             Or
             Campo="I_CST_Item"           Or
             Campo="I_CST_IPI"            Or
             Campo="I_TISSQN"             Or
             Campo="I_CST_PIS"            Or
             Campo="I_CST_COFINS"         Or
             Campo="I_CFOP"               Or              
             Campo="I_CSOSN"              Or
             Campo="I_MUNSERV"                     
             Then Dynarray WinArray5[]
                  Window Handle Dialog to JANELA
                  Window GetAttributes JANELA To WinArray5
                  WinArray5["FLOATING"]=False
                  Window SetAttributes JANELA From WinArray5

                  If Campo="I_Codigo_Item"        Then Moveto [Codigo do Item]         EndIf
                  If Campo="I_Tipo_Item"          Then Moveto [Tipo do Item]           EndIf
                  If Campo="I_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido]   EndIf
                  
                  If Campo="I_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     ]
                          VSD_I_CST_Item       = [Tipo Tributacao  ]
                  EndIf
                  
                  If Campo="I_Tipo_Item"
                     Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Tipo_Item"
                  EndIf
                  
                  If Campo="I_Codigo_Cor_Tecido"
                     Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                          VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                          Campo="I_Codigo_Cor_Tecido"
                  EndIf

                  If Campo="I_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
         Temp=False
     Case Evento["KeyCode"] = 27:
          Temp=False
          Switch
            Case Campo="I_Pedido":
                 CancelDialog
            Case Campo="I_Pedido_Item"      : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"      :
                 If Not IsBlank([Numero Pedido_Orcamento])
                    Then Campo="I_Pedido_Item"
                    Else CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    :
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else CancelDialog
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido" :
                 Switch
                   Case EDITA_DESCRICAO_ITEM = "S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Tamanho":
                 Switch
                   Case PARAM_COR_TECIDO="S"       : Campo="I_Codigo_Cor_Tecido"
                   Case EDITA_DESCRICAO_ITEM = "S" : Campo="I_Descricao_Item"
                   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"
                   Case PARAM_COR_TECIDO="S"       : Campo="I_Codigo_Cor_Tecido"
                   Case EDITA_DESCRICAO_ITEM = "S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch
            Case Campo="I_Quantidade":
                 Switch
                   Case Not IsBlank(VSD_I_Pedido_Item):
                        If CHAVEI=1
                           Then Campo="I_Pedido_Item"
                           Else CancelDialog
                        EndIf
                   Case PARAM_TABPR_ITEM="S"       : Campo="I_Tabela"
                   Case PARAM_TAMANHO="S"          : Campo="I_Tamanho"
                   Case PARAM_COR_TECIDO="S"       : Campo="I_Codigo_Cor_Tecido"
                   Case EDITA_DESCRICAO_ITEM = "S" : Campo="I_Descricao_Item"
                   OtherWise:
                        If CHAVEI=1
                           Then Campo="I_Codigo_Item"
                           Else CancelDialog
                        EndIf
                 EndSwitch


;----- Brasil Textil ---------------------------------------------------------------------

            Case SYS_CODIGO_CLIENTE="0239" And
							  [FaturaC->Tipo Movimento Estoque]="S"  And
               	[FaturaI->Valor IPI por Unidade]>0     And
                 (Campo="I_UN_Item"                  Or
                  Campo="I_Preco_Unitario"           Or
                  Campo="I_Tipo_Desconto_Item"       Or
                  Campo="I_Preco_Total"              Or
                  Campo="I_Comissao_Item"            Or
                  Campo="I_CST_Item")             :

	               CancelDialog

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


            Case Campo="I_UN_Item"                  Or
                 Campo="I_Preco_Unitario"           Or
                 Campo="I_Tipo_Desconto_Item"       Or
                 Campo="I_Preco_Total"              Or
                 Campo="I_CSOSN"                    Or
                 Campo="I_Comissao_Item"            Or
                 Campo="I_Entrega"                   : Campo="I_Quantidade"
            
            Case Campo="I_DataEntregar"      : Campo="I_Entrega"

             Case Campo="I_CST_Item"          :                       
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    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_ACSOSN"       Or
                 Campo="I_Valor_CSOSN"       : Campo="I_CSOSN"

            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_Quantidade"
                    Else Campo="I_CST_IPI"
                 EndIf
        
            Case Campo="I_AISSQN"       Or
                 Campo="I_BC_ISSQN"     Or
                 Campo="I_Valor_ISSQN"       : Campo="I_TISSQN"

            Case Campo="I_CST_PIS"           :
                 If VSD_I_Tipo_Item="C"
                    Then Campo="I_TISSQN"
                    Else Campo="I_CST_IPI" 
                 EndIf

            Case Campo="I_APIS"         Or
                 Campo="I_Valor_PIS"    Or     
                 Campo="I_BC_PIS"       Or
                 Campo="I_CST_COFINS"        : Campo="I_CST_PIS"

            Case Campo="I_ACOFINS"      Or
                 Campo="I_BC_COFINS"    Or 
                 Campo="I_Valor_COFINS"      : Campo="I_CST_COFINS"

            Case Campo="I_CFOP"              : 
                 If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                    Then Campo="I_CSOSN"
                    Else Campo="I_CST_Item"
                 EndIf
            
            Case Campo="I_NCM"      Or         
                 Campo="I_CDSERV"   Or
                 Campo="I_MUNSERV"           : Campo="I_CFOP"
                   
            Case Campo="I_Numero_Volumes"    : Campo="I_CFOP"
            Case Campo="I_Peso_Liquido"      : Campo="I_Numero_Volumes"
            Case Campo="I_Peso_Embalagem"    : Campo="I_Peso_Liquido"
          EndSwitch
     Case Evento["KeyCode"] = 13:
          Temp=False
          Switch
            Case Campo="I_Pedido":
                 VSD_I_Pedido=AlinhM(ControlValue("I_Pedido"),6)
                 If VSD_I_Pedido="000000"
                    Then VSD_I_Pedido     =""
                         VSD_I_Pedido_Item=0
                         Campo="I_Codigo_Item"
                    Else Campo="I_Pedido_Item"
                 EndIf
            Case Campo="I_Pedido_Item":
                 VSD_I_Pedido_Item=ControlValue("I_Pedido_Item")
                 If VSD_I_Pedido_Item=""
                    Then VSD_I_Pedido_Item=0
                 EndIf
                 If Not IsBlank(VSD_I_Pedido_Item)
                    Then Moveto "FaturaC"
                         [Numero Pedido_Orcamento]=VSD_I_Pedido
                         Moveto "OrcaI"
                         Moveto [Item do Orcamento]
                         Locate NumVal(VSD_I_Pedido_Item)
                         If Not RetVal
                            Then Mensagem("Item n„o Encontrado !")
                                 Moveto "FaturaI"
                            Else If ([Quantidade]-[Quantidade Faturada])<=0
                                    Then Mensagem("Item do Pedido c/ Saldo todo Faturado !")
                                 EndIf
                                 Moveto "FaturaI"
                                 Copia_Ped_Orc_Fatura()
                                 Registro_Item("Ler")

                                 Campo="I_Quantidade"
                         EndIf
                    Else Campo="I_Codigo_Item"
                 EndIf

            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"
                            Else ORIGEM = ""
                         EndIf
                         if Pega_Dados_Item(ORIGEM)
                            then
                                 ITEM_DUPLICADO = False
                                 
                                 If PARAM_DUPLICIDADE_ITEM
                                    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
                                         fastMSg("O Item ["+VSD_I_Codigo_Item+"] j  existe neste Pedido !")
                                    else
                                         Registro_Item("Ler")
                                         
                                         Ver_Saldo=True
                                         checa_estoque()
                                         
                                         switch
                                            Case EDITA_DESCRICAO_ITEM = "S"      : Campo="I_Descricao_Item"
                                            Case PARAM_COR_TECIDO="S"            : Campo="I_Codigo_Cor_Tecido"
                                            Case PARAM_TAMANHO="S"               : Campo="I_Tamanho"
                                            Case PARAM_TABPR_ITEM="S"            : Campo="I_Tabela"
                                            OtherWise                            : Campo="I_Quantidade"
                                         endswitch
                                 endif   
                         endif     
                 EndIf        
             Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 Switch
                   Case SYS_CODIGO_CLIENTE = "0251" or
                        SYS_CODIGO_CLIENTE = "0247" :
                        Moveto [Codigo do Item]                                              
                        Ativa_Lookup()                   
                        Locate [Faturai->Codigo do Item] 
                        If [Codigo da Familia]="005"
                            Then Play "Calc_Ma" 
                        EndIf   
                        KeyPress "ESC"
                        Campo="I_Quantidade"  
                   Case PARAM_COR_TECIDO="S"      : Campo="I_Codigo_Cor_Tecido"
                   Case PARAM_TAMANHO="S"         : Campo="I_Tamanho"
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   OtherWise                      : Campo="I_Quantidade"
                 EndSwitch
            Case Campo="I_Codigo_Cor_Tecido"      :
                 VSD_I_Codigo_Cor_Tecido=ControlValue("I_Codigo_Cor_Tecido")
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then Moveto [Codigo da Cor_Tecido]
                         If Busca_Lookup("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido,"SM")
                            Then [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=REG_BUSCA_LOOKUP["Descricao da Cor_Tecido"]       
                                 Campo="I_Descricao_Cor_Tecido"
                            Else Mensagem("Cor/Tecido n„o Cadastrado !")      
                                 VSD_I_Codigo_Cor_Tecido   ="" 
                                 VSD_I_Descricao_Cor_Tecido=""
                         EndIf        
                    Else Campo="I_Descricao_Cor_Tecido"             
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 If PARAM_TAMANHO="S"
                    Then Campo="I_Tamanho"
                    Else If PARAM_TABPR_ITEM="S"
                            Then Campo="I_Tabela"
                            Else Campo="I_Quantidade"
                         EndIf
                 EndIf
            Case Campo="I_Tamanho":
                 VSD_I_Tamanho=ControlValue("I_Tamanho")
                 Switch
                   Case PARAM_TABPR_ITEM="S"      : Campo="I_Tabela"
                   OtherWise                      : Campo="I_Quantidade"
                 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
                                 Campo="I_Quantidade"
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 KeyPress "ESC"
                                 Moveto "FaturaI"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To FRACIONADO
                 If RetVal
                    Then If FRACIONADO["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
                                 
                                 If [Quantidade]>0 And CHECA_ESTOQUE() And CHECA_PEDIDO() 
                                    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
                                         
                                         CalcularPrecoTotal_Item()
                
                                         Switch
                                           Case EDITA_DESCRICAO_ITEM = "S"    : 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_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                                           OtherWise                          :
                                                Campo="I_Preco_Total"
                                         EndSwitch
                                 EndIf
                         EndIf        
                 EndIf      
                 Release Vars FRACIONADO  
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Switch
                   Case PARAM_ALTERA_PRECO="S"        : Campo="I_Preco_Unitario"
                   Case PARAM_ALTERA_PRECO="N" And
                        Search("VEND",[FaturaC->Descricao da Destinacao])=0:
                                                        Campo="I_Preco_Unitario"
                   Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                   OtherWise                          :
                        Campo="I_Preco_Total"
                 EndSwitch
            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()
                                         if Liberou_Bloqueio
                                            Then CONTINUA=False          ; Continua e pula
                                                 Campo="I_Comissao_Item" ; pra comissao
                                         EndIf
                                    Else CONTINUA=False
                                 EndIf
                         EndIf
                 EndIf

                 ;*** Ajustes 21/03/2007 MinasLack
                 If (PARAM_BLOQ_DESCTO="S" Or PARAM_BLOQ_DESCTO="P") And
                    Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
                    PARAM_COMIS_MARCA="N" And
                    Not F5_ATIVADO
                    Then If VSD_I_Preco_Unitario<VSD_I_Preco_Tabela
                            Then CONTINUA=False
                                 Mensagem("Pre‡o unit rio n„o permitido, menor que pre‡o da Tabela !")
                         EndIf
                 EndIf

                 If CONTINUA
                    Then Switch
                           Case PARAM_DESCUNIT="S" and CHAVEI=1  : Campo="I_Tipo_Desconto_Item"
                           Case PARAM_COMIS_ITEM="S" : Campo="I_Comissao_Item"
                           Case PARAM_ENTREGA="S"    : Campo="I_Entrega"                          
                           Case PARAM_IMPOSTOS="S"   : 
                                 If VSD_I_Tipo_Item="C"
                                    Then Campo="I_TISSQN"
                                    Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                            Then Campo="I_CSOSN"
                                            Else Campo="I_CST_Item"
                                         EndIf
                                 EndIf
                           Case PARAM_VOLUMES="S"    : Campo="I_NUMERO_VOLUMES"
                           OtherWise                 : AcceptDialog
                         EndSwitch
                         If F5_ATIVADO=True
                            Then F5_ATIVADO=False
                                 Grava_LogEx("Fatura AltPreco")
                         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_COMIS_ITEM="S"     : Campo="I_Comissao_Item"
                                   Case PARAM_ENTREGA="S"        : Campo="I_Entrega"
                                   Case PARAM_IMPOSTOS="S"       : If VSD_I_Tipo_Item="C"
                                                                      Then Campo="I_TISSQN"
                                                                      Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                                              Then Campo="I_CSOSN"
                                                                              Else Campo="I_CST_Item"
                                                                           EndIf
                                                                  EndIf           
                                   Case PARAM_VOLUMES="S"        : Campo="I_NUMERO_VOLUMES"
                                   OtherWise                     : AcceptDialog
                                 EndSwitch  
                         EndIf
                 EndIf         
                
            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")
                 
                 CalcularPrecoTotal_Item()
                 Switch
                   Case PARAM_COMIS_ITEM="S"     : Campo="I_Comissao_Item"
                   Case PARAM_ENTREGA="S"        : Campo="I_Entrega"
                   Case PARAM_IMPOSTOS="S"       : If VSD_I_Tipo_Item="C"
                                                      Then Campo="I_TISSQN"
                                                      Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                              Then Campo="I_CSOSN"
                                                              Else Campo="I_CST_Item"
                                                           EndIf
                                                   EndIf           
                   Case PARAM_VOLUMES="S"        : Campo="I_NUMERO_VOLUMES"
                   OtherWise                     : AcceptDialog
                 EndSwitch                 
            Case Campo="I_Comissao_Item":
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")

                 If F6_ATIVADO=True
                    Then F6_ATIVADO=False
                         Grava_LogEx("Fatura AltPreco")
                 EndIf

                 Switch
                   Case PARAM_ENTREGA="S"   : 
                        If Search("VEND",[FaturaC->Descricao da Destinacao])>0 
                           Then Campo="I_Entrega"
                        EndIf
                   Case PARAM_IMPOSTOS="S"   :
                        If VSD_I_Tipo_Item="C"
                           Then Campo="I_TISSQN"
                           Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                   Then Campo="I_CSOSN"
                                   Else Campo="I_CST_Item"
                                EndIf
                         EndIf  
                   Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                   OtherWise                 : AcceptDialog
                 EndSwitch
                                  
            Case Campo="I_Entrega":
                 VSD_I_Entrega=ControlValue("I_Entrega")
                 If IsBlank(VSD_I_Entrega)
                    Then VSD_I_Entrega="S"
                 EndIf
                 If CHAVEI=1
                    Then If VSD_I_Entrega="S"
                            Then 
                                 VSD_I_DataEntregar=Today()
                                 VSD_I_DataEntrega =Today()
                                 Switch
                                   Case PARAM_IMPOSTOS="S"   : 
                                        If VSD_I_Tipo_Item="C"
                                           Then Campo="I_TISSQN"
                                           Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                   Then Campo="I_CSOSN"
                                                   Else Campo="I_CST_Item"
                                                EndIf
                                         EndIf  
                                   Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                                   OtherWise                 : AcceptDialog
                                 EndSwitch
                            Else VSD_I_DataEntregar=Today()
                                 VSD_I_DataEntrega =BlankDate()
                                 Campo="I_DataEntregar"
                         EndIf
                 EndIf
                 
                 If CHAVEI=0
                    Then If (Old_Entrega<>VSD_I_ENTREGA)
                            Then If Not IsBlank([FaturaC->Numero do Orcamento])
                                    Then Campo="I_DataEntregar"
                                    Else If Sys_Codigo_Cliente <> "0334"
                                            Then If Not Checa_Supervisor() 
                                                    Then MSG="SR. USUARIO////"
                                                         MSG=MSG+"Para altera‡„o da entrega somente o Supervisor do Sistema ! //"
                                                         MSG=MSG+"Opera‡„o Cancelada."
                                                         Mensagem(MSG)
                                                         CancelDialog
                                                    Else Campo="I_DataEntregar"
                                                 EndIf
                                            Else Campo="I_DataEntregar"     
                                        EndIf
                                 EndIf
                            Else If IsBlank(VSD_I_DataEntregar)
                                    Then Campo="I_DataEntregar"
                                    Else Switch
                                           Case PARAM_IMPOSTOS="S"   :
                                                If VSD_I_Tipo_Item="C"
                                                   Then Campo="I_TISSQN"
                                                   Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                                           Then Campo="I_CSOSN"
                                                           Else Campo="I_CST_Item"
                                                        EndIf
                                                EndIf 
                                           Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                                           OtherWise                 : AcceptDialog
                                         EndSwitch
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_DataEntregar"  :
                 VSD_I_DataEntregar=ControlValue("I_DataEntregar")
                 If IsBlank(VSD_I_DataEntregar) Or
                    VSD_I_DataEntregar<[FaturaC->Data de Emissao]
                    Then Mensagem("Data Invalida !")
                    Else Switch
                           Case PARAM_IMPOSTOS="S"   : 
                                If VSD_I_Tipo_Item="C"
                                   Then Campo="I_TISSQN"
                                   Else If (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                           Then Campo="I_CSOSN"
                                           Else Campo="I_CST_Item"
                                        EndIf
                                EndIf 
                           Case PARAM_VOLUMES="S"    : Campo="I_Numero_Volumes"
                           OtherWise                 : AcceptDialog
                         EndSwitch
                 EndIf                 

            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 (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")
                                    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
                                         If Sys_Codigo_Cliente = "0342"
                                            Then VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"101"
                                            Else VSD_I_CSOSN      =SubStr(VSD_I_CST_Item,1,1)+"900" 
                                         EndIf
                                         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                                                 
        
                                 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 (TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB")                     : Campo="I_ACSOSN"
                   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_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 TPEMPR="SIMPLES NACIONAL" Or TPEMPR="SIMPLES NAC. ESRB"
                                            Then Campo="I_CFOP"
                                            Else Campo="I_CST_PIS"
                                         EndIf
                                    Else Campo="I_AISSQN"
                                 EndIf   
                            Else Mensagem("CST ISSQN inv lida, use F1 para consultar !")   
                        EndIf
                 EndIf

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

            Case Campo="I_CST_PIS":
                 VSD_I_CST_PIS=ControlValue("I_CST_PIS")
                 If IsBlank(VSD_I_CST_PIS)
                    Then VSD_I_CST_PIS="49"
                 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="49"
                 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 VSD_I_NCM="" 
                                         Campo="I_CDSERV"
                                    Else VSD_I_CDSERV =BlankNum()
                                         VSD_I_MUNSERV=BlankNum()     
                                         VSD_I_UFSERV =""
                                         Campo="I_NCM"
                                 EndIf
                          EndSwitch
                 EndIf
                 Moveto "FaturaI"
                 Echo Off

            Case Campo="I_NCM":
                 VSD_I_NCM=ControlValue("I_NCM")
                 If PARAM_VOLUMES="S"
                    Then Campo="I_Numero_Volumes"
                    Else AcceptDialog
                 EndIf

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

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

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

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

Switch
  Case Campo="I_Seq"                     : MSGCAMPO="Sequencia"
  Case Campo="I_Pedido":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Numero do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Numero do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Numero da Ordem de Servi‡o"
       EndSwitch
  Case Campo="I_Pedido_Item":
       Switch
         Case MSG_Pedido_Orcamento="Pedido": MSGCAMPO="Sequencia do Item do Pedido"
         Case MSG_Pedido_Orcamento="Orcam.": MSGCAMPO="Sequencia do Item do Orcamento"
         Case MSG_Pedido_Orcamento="N§. OS": MSGCAMPO="Sequencia do Item da Ordem de Servi‡o"
       EndSwitch
  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_Tipo_Item"              : MSGCAMPO="Tipo do item"

  Case Campo="I_Codigo_Cor_Tecido"      : MSGCAMPO="Codigo da cor/tecido"
  Case Campo="I_Descricao_Cor_Tecido"   : MSGCAMPO="Descri‡Æo da cor/tecido"
  Case Campo="I_Tamanho"                : MSGCAMPO="Tamanho"
  Case Campo="I_Tabela"                 : MSGCAMPO="Codigo da tabela de pre‡o"

  Case Campo="I_Quantidade"             : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"                : MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario"         : MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_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_Custo_Unitario"         : MSGCAMPO="Custo Unitario"
  Case Campo="I_Preco_Tabela"           : MSGCAMPO="Pre‡o da Tabela de Pre‡o"
  Case Campo="I_Comissao_Item"          : MSGCAMPO="Comiss„o do Item"

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

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

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

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

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

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

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

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

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

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

  Case Campo="I_Entrega"                : MSGCAMPO="Entregue a Mercadoria p/ o Cliente no Balc„o (S/N)?"
  Case Campo="I_DataEntregar"           : MSGCAMPO="Data a Entregar a Mercadoria p/ o Cliente "

  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  "
EndIf
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
MontaRodapeSD(MSGCAMPO, TECLA)
Mouse Hide
RefreshDialog
Return Temp
EndProc     ; (Item_Dialog)

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

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
       [Tamanho                   ]=VSD_I_Tamanho

       [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                
       ;[NBM                       ]=VSD_I_CF_Item
  
       [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

       [ICMS_ST_Aliquota Reduzida ]=VSD_I_RBC_ST   
       [MVA                       ]=VSD_I_MVA                
       [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           

       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Codigo da Tabela          ]=VSD_I_Tabela

       [Entrega                   ]=VSD_I_Entrega
       [Data a Entregar           ]=VSD_I_DataEntregar
       [Data de Entrega           ]=VSD_I_DataEntrega

       UnLockRecord
       SaveTables

  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item da OF                ]

       If CHAVEI=1
          Then VSD_I_Pedido=[FaturaC->Numero do Orcamento]
          Else VSD_I_Pedido=[Numero Pedido_Orcamento   ]
       EndIf
       VSD_I_Pedido_Item            =[Item Pedido_Orcamento     ]

       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_Tamanho                =[Tamanho                   ]

       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_RBC_ST                 =[ICMS_ST_Aliquota Reduzida ]
       VSD_I_MVA                    =[MVA                       ]
       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_Numero_Volumes         =[Volumes                   ]
       VSD_I_Peso_Liquido           =[Peso Liquido              ]
       VSD_I_Peso_Embalagem         =[Peso Embalagem            ]
       VSD_I_Comissao_Item          =[Comissao do Item          ]
       VSD_I_Tabela                 =[Codigo da Tabela          ]
       
       VSD_I_Entrega                =[Entrega                   ]
       VSD_I_DataEntregar           =[Data a Entregar           ]
       VSD_I_DataEntrega            =[Data de Entrega           ]
       
       VSD_I_InfAdic                =[Informacoes_Adicionais    ]

       GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP        
       If RetVal
          Then EDITA_DESCRICAO_ITEM=REG_ITEMCOMP["Edita Descricao do Item"]
          Else EDITA_DESCRICAO_ITEM="N"
       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)
If CHAVEI=1
   Then If Not Item_Ins_Consulta
           Then [Codigo da Tabela     ]=[FaturaC->Codigo da Tabela     ]
        EndIf
EndIf
Registro_Item("Ler")
EndProc ; (Inicia_Registro)

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

;;Sleep 500
Liberou_Bloqueio=False
F5_ATIVADO=False
F6_ATIVADO=False

If PARAM_EXIBECUSTO="N"
   Then NL_CUSTO=30
   Else NL_CUSTO=08
EndIf

If Not IsBlank([FaturaC->Numero do Orcamento])
   Then MSG_Pedido_Orcamento="Orcam."
   Else MSG_Pedido_Orcamento="......"
EndIf
MSGCAMPO=""
MSG_NUMERO_LINHAS=""
Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F3","F4","F5","F6","F7","F8",-65,-33,"ClearArea",
                                "HOME","END","PGDN","PGUP"
     @ 02,0 height 21 width 80

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

   Label  @ 00,02 MSG_Pedido_Orcamento For "I_Pedido"
   Accept @ 00,17 Width 09 "A06" picture "#*#" Tag "I_Pedido" to VSD_I_Pedido
   Label  @ 00,10 "/Item" For "I_Pedido_Item"
   Accept @ 00,27 Width 06 "N" picture "#*#" Tag "I_Pedido_Item" to VSD_I_Pedido_Item
   
   Label  @ 01,00 ">" For "I_Codigo_Item"
   Accept @ 02,00 Width 16 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   
   @ 01,02 ?? LOCALIZAR_POR
   
   Label  @ 01,17 "Descricao Item" For "I_Descricao_Item"
   Accept @ 02,17 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   
   Label  @ 01,57 "TI" For "I_Tipo_Item"
   Accept @ 02,58 Width 03 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

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

   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,30 "TM" For "I_Tamanho"
   Accept @ 05,30 Width 05 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho
   Label  @ 04,42 "Tabela" For "I_Tabela"
   Accept @ 05,42 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela

   Label  @ 06,00 "Quantidade" For "I_Quantidade"
   Accept @ 07,00 Width 11 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 06,11 "UN" For "I_UN_Item"
   Accept @ 07,11 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item                               
   Label  @ 06,16 "Pr.Unit rio" For "I_Preco_Unitario"
	 Accept @ 07,17 Width 12 "N" picture "#*#.[######]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 06,30 "Pr.Bruto" For "I_Preco_Bruto"
   Accept @ 07,30 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Bruto" to VSD_I_Preco_Bruto
   Label  @ 06,42 "?Desconto" For "I_Tipo_Desconto_Item"
   Accept @ 07,42 Width  4 "A1"  picture "U,T" Tag "I_Tipo_Desconto_Item" to VSD_I_Tipo_Desconto_Item          
   Accept @ 07,45 Width 11 "A08" picture "!*!" Tag "I_Desconto_Descricao" to VSD_I_Desconto_Descricao
   Label  @ 06,54 "Vr.Desconto" For "I_Valor_Desconto_Item"
   Accept @ 07,56 Width 10 "$" picture "#*#.[##]" Tag "I_Valor_Desconto_Item" to VSD_I_Valor_Desconto_Item
   Label  @ 06,67 "Pr.L¡quido" For "I_Preco_Total"
   Accept @ 07,67 Width 11 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   Label  @ nl_custo  ,00 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ nl_custo+1,00 Width 11 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 08,16 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 09,17 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 08,30 "% Comiss„o" For "I_Comissao_Item"
   Accept @ 09,30 Width 11 "N" picture "#*#.[###]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   Label  @ 08,48 "Entrega/Datas" For "I_Entrega"
   Accept @ 09,49 Width 4  "A1" picture "S,N"              Tag "I_Entrega"      to VSD_I_Entrega
   Accept @ 09,52 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "I_DataEntregar" To VSD_I_DataEntregar
   Accept @ 09,65 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "I_DataEntrega"  To VSD_I_DataEntrega         
           
   PaintCanvas Attribute 124 02, 61, 03, 77
           
   @ 11,01 ?? "Impostos CST    %Red    Aliq.  BC        Valor"
                                 
   Label  @ 12,01 " CSOSN" For "I_CSOSN"
   Accept @ 12,09 Width 07 "A4" picture "####" Tag "I_CSOSN" to VSD_I_CSOSN
   PaintCanvas Attribute 112 12, 16, 12, 23
   Accept @ 12,24 Width 08 "N" picture "#*#.[##]" Tag "I_ACSOSN" to VSD_I_ACSOSN
   PaintCanvas Attribute 112 12, 30, 12, 41
   Accept @ 12,41 Width 12 "$" picture "#*#.[##]" Tag "I_Valor_CSOSN" to VSD_I_Valor_CSOSN

   Label  @ 13,01 "  ICMS" For "I_CST_Item"
   Accept @ 13,09 Width 07 "A3" picture "!*!"        Tag "I_CST_Item"    to VSD_I_CST_Item   
   Accept @ 13,16 Width 10 "N"  picture "#*#.[####]" Tag "I_RBC_ICMS"    to VSD_I_RBC_ICMS
   Accept @ 13,24 Width 08 "N"  picture "#*#.[##]"   Tag "I_AICMS"       to VSD_I_AICMS
   Accept @ 13,31 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ICMS"     to VSD_I_BC_ICMS     
   Accept @ 13,41 Width 12 "$"  picture "#*#.[##]"   Tag "I_Valor_ICMS"  to VSD_I_Valor_ICMS

   Label  @ 14,01 "MVA/ST" For "I_AST"
   Accept @ 14,09 Width 08 "N"  picture "#*#.[##]"   Tag "I_MVA"         to VSD_I_MVA
   Accept @ 14,16 Width 10 "N"  picture "#*#.[####]" Tag "I_RBC_ST"      to VSD_I_RBC_ST
   Accept @ 14,24 Width 08 "N"  picture "#*#.[##]"   Tag "I_AST"         to VSD_I_AST     
   Accept @ 14,31 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ST"       to VSD_I_BC_ST  
   Accept @ 14,41 Width 12 "$"  picture "#*#.[##]"   Tag "I_Valor_ST"    to VSD_I_Valor_ST

   Label  @ 15,01 "   IPI" For "I_CST_IPI"
   Accept @ 15,09 Width 07 "A2" picture "!*!"        Tag "I_CST_IPI"     to VSD_I_CST_IPI  
   Accept @ 15,16 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_IPI"     to VSD_I_RBC_IPI
   Accept @ 15,24 Width 08 "N"  picture "#*#.[##]"   Tag "I_AIPI"        to VSD_I_AIPI
   Accept @ 15,31 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_IPI"      to VSD_I_BC_IPI  
   Accept @ 15,41 Width 12 "$"  picture "#*#.[##]"   Tag "I_Valor_IPI"   to VSD_I_Valor_IPI

   Label  @ 16,01 " ISSQN" For "I_TISSQN"
   Accept @ 16,09 Width 07 "A1" picture "D,N,I,S,R"  Tag "I_TISSQN"       to VSD_I_TISSQN 
   Accept @ 16,16 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_ISSQN"    to VSD_I_RBC_ISSQN
   Accept @ 16,24 Width 08 "N"  picture "#*#.[##]"   Tag "I_AISSQN"       to VSD_I_AISSQN
   Accept @ 16,31 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_ISSQN"     to VSD_I_BC_ISSQN  
   Accept @ 16,41 Width 12 "$"  picture "#*#.[##]"   Tag "I_Valor_ISSQN"  to VSD_I_Valor_ISSQN

   Label  @ 17,01 "   PIS" For "I_CST_PIS"    
   Accept @ 17,09 Width 07 "A2" picture "!*!"        Tag "I_CST_PIS"      to VSD_I_CST_PIS  
   Accept @ 17,16 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_PIS"      to VSD_I_RBC_PIS
   Accept @ 17,24 Width 08 "N"  picture "#*#.[##]"   Tag "I_APIS"         to VSD_I_APIS
   Accept @ 17,31 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_PIS"       to VSD_I_BC_PIS  
   Accept @ 17,41 Width 12 "$"  picture "#*#.[##]"   Tag "I_Valor_PIS"    to VSD_I_Valor_PIS

   Label  @ 18,01 "COFINS" For "I_CST_COFINS"   
   Accept @ 18,09 Width 07 "A2" picture "!*!"        Tag "I_CST_COFINS"   to VSD_I_CST_COFINS 
   Accept @ 18,16 Width 10 "A2" picture "#*#.[####]" Tag "I_RBC_COFINS"   to VSD_I_RBC_COFINS
   Accept @ 18,24 Width 08 "N"  picture "#*#.[##]"   Tag "I_ACOFINS"      to VSD_I_ACOFINS
   Accept @ 18,31 Width 11 "$"  picture "#*#.[##]"   Tag "I_BC_COFINS"    to VSD_I_BC_COFINS  
   Accept @ 18,41 Width 12 "$"  picture "#*#.[##]"   Tag "I_Valor_COFINS" to VSD_I_Valor_COFINS

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

   Label  @ 14,54 "Servi‡o" For "I_CDSERV"
   Accept @ 15,54 Width 10 "N" picture "#*#" Tag "I_CDSERV" to VSD_I_CDSERV
   Label  @ 14,65 "Munic¡po" For "I_MUNSERV"
   Accept @ 15,64 Width 10 "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,53 "Qtde/Volumes" For "I_Numero_Volumes"
   Accept @ 16,67 Width 11 "N" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 17,53 "Peso Liquido" For "I_Peso_Liquido"
   Accept @ 17,67 Width 11 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 18,53 "Peso Embal.." For "I_Peso_Embalagem"
   Accept @ 18,67 Width 11 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

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

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

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

TabelaRefC="FaturaC"  TabelaRefI="FaturaI"

Aguarde("Somando itens")

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

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

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

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

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

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

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

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

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

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

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

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

Moveto TabelaRefI
nitens=0

Scan

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

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

  If SubStr(PARAM_DOC_NF,1,3)="NFE" And IsBlank([Tipo Tributacao])
     Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // CST/ICMS inv lido, verificar !")
  EndIf

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

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

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

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

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

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

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

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

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

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

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

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

          It_vr_icmscred[nitens]   =BlankNum()

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

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

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

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

  EndIf   

EndScan
LimpAguarde()

Moveto "FaturaC"
CHAVEF=0

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

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

If REEMITIR
   Then CONFIMPRIME()
        Return
EndIf

SomaVenctos("FaturaC","FaturaV")

While True

    MSGCAMPO=Field()
    
    If Field()="Valor BCSubstituicao ICMS" Then MSGCAMPO="Valor Base Calculo da Substituicao ICMS"            EndIf
    If Field()="Tipo de Pagamento"         Then MSGCAMPO="Tipo de Pagamento=> V=A Vista  P=A Prazo  O=Outros" EndIf
    If Field()="Composicao de Dias"        Then MSGCAMPO=MSGCAMPO+", Exemplo: 0/30/60/ "                      EndIf

      If Field()="Condicao de Pagamento" Or
         Field()="Forma de Pagamento"
         Then TECLA=" Esc=Retornar  F1=Tabelas  "
         Else TECLA=" Esc=Retornar              "
      EndIf
    TECLA=TECLA+"Alt+F=Fun‡”es  PgUp/PgDn=Finalizar "

    Prompt TECLA             

    Wait Field
         Until "ESC","ENTER","PGDN","F8","DOWN","PGUP",-33,"F1","F4","F5","F","D","F9","F10","F7"

    If RetVal=-33
       Then Echo Normal
            Echo Off
            ShowPopup " Fun‡”es " CENTERED
             "F4  ~C~alcula Vencimentos  ": " Calcula os Vencimentos           " :"F4",
             "F5  ~O~bservacao           ": " Observacao da Nota Fiscal        " :"F5",
             "F8  ~V~encimentos          ": " Vencimentos                      " :"F8",
             "F9  ~T~roco                ": " Valor para Troco                 " :"F9",
             "F7  Gerar T¡tulo de Crˆdito": " Gerar T¡tulo de Crˆdito          " :"F7",
             "F10 T¡tulo de Crˆdito      ": " Referenciar T¡tulo de Crˆdito    " :"F10",
             "~C~ancelar                 ": " Cancelar a Opera‡„o              " : "CANCELAR"
            EndMenu
            To MenuVar
            Echo Off
            
            If MenuVar="CANCELAR" or MenuVar="Esc"
               Then Loop
            EndIf                                         
            RetVal=MenuVar
    EndIf
    
    Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf                  
      Case RetVal="F4":
           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="F5":
           CampoAnt=Field()         
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      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":      
           VrTroco     = 0
           VSD_VrTroco = 0
           TR          = 1
           
           While True
             
             If Not IsAssigned(INICIO_DIALOG) Then INICIO_DIALOG=False EndIf
             If Not IsAssigned(OP_SHOWD)      Then OP_SHOWD=""         EndIf 
             
             Echo Normal
             Echo Off
             
             Showdialog "Valor p/ Troco" Proc "Geral_Dialog"
             Trigger "OPEN","ARRIVE"
             Key "TAB","ReverseTab","ENTER","ESC","ClearArea"
             @ 09,19 height 07 width 45
    
             
             Label  @ 1,01 "Informe o Valor Recebido: " for "I_VrTroco"
             Accept @ 1,28  Width 12 "$" picture "#*#.[##]" Tag "I_VrTroco" to VSD_VrTroco
 
             @ 03,02 ?? Spaces(13)+"Valor Troco:  "+Format("W"+StrVal(TR)+",AR",StrVal(VrTroco)) 
             
             PaintCanvas Attribute 121 03,28,03,39
             
             EndDialog
             Mouse Show
             
             If Not Retval Then QuitLoop EndIf   
             
             Switch
               Case VSD_VrTroco = 0 : Mensagem("O Valor deve ser diferente de ZERO !") 
                                      VrTroco=0
                                      TR=1
                                      Loop
               Case VSD_VrTroco < 0 : Mensagem("O Valor deve ser maior que ZERO !")
                                      TR=1
                                      VrTroco=0 
                                      Loop
               Case VSD_VrTroco <= [FaturaC->Valor Nota Fiscal] : Mensagem("O Valor deve ser maior que o Valor da Nota Fiscal !")
                                                                  VrTroco=0
                                                                  TR=1
                                                                  Loop
               OtherWise : VrTroco=VSD_VrTroco-[FaturaC->Valor Nota Fiscal]
                           TR=Len(VSD_VrTroco)
                           Loop 
             EndSwitch
           EndWhile

      Case RetVal="F7":
           VrTCCredito_Digita()

      Case RetVal="F10":
           Play "FT_LTC"

      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])  Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
              Then Mensagem("Forma Pagto Invalido !")
                   Loop
           EndIf
           If Search("VEND",[FaturaC->Descricao da Destinacao])>0
              Then If [Tipo de Pagamento]<>"O"
                      Then 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
                           If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                              Then Mensagem("O Valor Total dos Vencimentos Difere do Valor da Nota Fiscal !")
                                   Switch
                                     Case PARAM_BLOQVRVENCTO = "S" : Loop
                                     Case PARAM_BLOQVRVENCTO = "P" : If Not CHECA_SUPERVISOR() 
                                                                        Then Loop
                                                                     EndIf
                                   EndSwitch
                           EndIf
                   Endif
           EndIf

           If CHAVEC=1
              Then If Search("VEND",[Descricao da Destinacao])>0   And
                      [Nome Fantasia EmitDest]<>"DIVERSOS"         And
                      [Nome Fantasia EmitDest]<>"CONSUMIDOR FINAL" And
                      [Tipo]="C"                                   And                                 
                      PARAM_NBLOQUEIO_SPC > 0
                      Then If [Forma de Pagamento]<>"DN" And
                              [Forma de Pagamento]<>"CT" And
                              [Forma de Pagamento]<>"CL" And
                              [Forma de Pagamento]<>"CD" 
                              Then If Not Checa_SPC()
                                      Then Loop
                                   EndIf
                           EndIf        
                   EndIf        
           EndIf               
           
           If PARAM_ENTREGA="S"
              Then If Checa_Entrega()
                      Then [Entrega]="S"
                      Else [Entrega]="N"
                   EndIf
              Else [Entrega]="S"
           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
              
                   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"
           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()
           QuitLoop
      Case RetVal="F":
           Campo_Ant=Field()
           DIGITA_FRETE()
           CALC_OF()
           Moveto Field Campo_Ant
      Case RetVal="D":
           If Not Field()="Forma de Pagamento"
              Then DIGITA_DESCTO()
                   CALC_OF()
              Else KeyPress "D"
           EndIf
      Case RetVal="ESC":
        Switch
           Case Field()="Valor BCSubstituicao ICMS":
                CHAVEF=9
                QuitLoop
           Case Field()="Valor Substituicao ICMS":
                Moveto [Valor BCSubstituicao ICMS]
           Case Field()="Valor Despesas Acessorias":
                If PARAM_SUBSTICMS="S"
                   Then Moveto [Valor Substituicao ICMS]
                   Else CHAVEF=9
                        QuitLoop
                EndIf
           Case Field()="Valor do Seguro":
                Moveto [Valor Despesas Acessorias]
           Case Field()="Tipo de Pagamento":
                Moveto [Valor do Seguro]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS" Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro" Or 
                Field()="Condicao de Pagamento"      :
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro":
                       Moveto [Tipo de Pagamento]
                EndSwitch
                CALC_OF()
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then [Numero de Parcelas]=BlankNum()
                        [Composicao de Dias]=""
                        [Forma de Pagamento]="OU"
                        Moveto [Forma de Pagamento]
                   Else Moveto [Numero de Parcelas]               
                EndIf    
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
                Moveto [Tipo de Pagamento]
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc  ; (DigitaF)

;*******************************************************************************
;* 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

        TECLA= " Esc=Retornar  F7=Paginar  F9=LimpaVenctos  F10=TC"
        MSGCAMPO=""
        Prompt TECLA

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

        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 If QuerExcluir("")
                                  Then Del
                                  Else UnLockRecord
                               EndIf
                          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-" ) 
                  then skip    
                       if eot() then quitloop endif   
                  else unlockrecord
                       del
               endif        
             endwhile
             QuitLoop
              
        Case RetVal="F10":
             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"
           then Mensagem("Edi‡Æo para 'TC' nÆo permitida!")
                return
        EndIf   
        
        Moveto [Data]
EndIf
FPAGTO=[Forma de Pagamento]
While True
  TECLA= " Esc=Retornar  "
  If Field()="Forma de Pagamento"
     Then TECLA=TECLA+"F1=Tabelas  "
  EndIf
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  fpold=[Forma de Pagamento]

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

  Switch
  Case RetVal="F1":
       If Field()="Forma de Pagamento"
          Then CONSULTAF1()
       EndIf
  Case RetVal="ESC":
       If Field()="Numero de Dias"
          Then If QuerDesfazer("")
                  Then If CHAVEV=1
                          Then Del
                       EndIf
                       QuitLoop
               Endif
          Else Left
       EndIf
  Case RetVal="DEL":
       If QuerExcluir("")
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER":
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[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"
               then
                    Mensagem("Forma Pagamento nÆo permitida aqui, usea fun‡Æo [F10]=TC !")
                    []=fpold
                    
                    Loop
            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 Digita_Cheque()
               Else If []="CT" Or []="CD" Or []="CL"
                       Then Digita_Cartao()
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc   ; (DigitaV)

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc ESTOQUE()
CUSTO=BlankNum()

If [FaturaC->Atualiza Estoque]<>"S" Or IsBlank([FaturaI->Codigo do Item])
   Then Return
EndIf

If Not TipoItem_ControlaEstoque([FaturaI->Tipo do Item])
   Then Return
EndIf

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

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [FaturaC->Codigo da Empresa],
         [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
             Then Moveto "FaturaI"
                  Return False
             Else Loop
          EndIf
  EndIf
  While IsLockRecord() EndWhile
  QuitLoop
EndWhile
CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
If CUSTO=0 Or IsBlank(CUSTO)
   Then CUSTO=[Ultimo Custo Atual]
EndIf

Switch
  Case CHAVEI=1:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
     EndSwitch
  Case CHAVEI=8:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-([FaturaI->Custo Medio Unitario]*[FaturaI->Quantidade]),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal(([FaturaI->Custo Medio Unitario]*[FaturaI->Quantidade]),2),2)
       EndSwitch
  Case CHAVEI=0:
     Switch
       Case [FaturaC->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]-QUANT)+[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       Case [FaturaC->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]+QUANT)-[FaturaI->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]+CTTOTAL)-NDecimal((CUSTO*[FaturaI->Quantidade]),2),2)
       EndSwitch
EndSwitch
If ([Custo Total Atual]/[Saldo Atual])>0
   Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
EndIf
UnLockRecord

Moveto "FaturaI"
[Custo Medio Unitario]=CUSTO
EndProc  ; (Estoque)

;*******************************************************************************
;* Rotina p/ Checagem de Estoque Negativo                                     **
;*******************************************************************************
Proc CHECA_ESTOQUE()
                        
ULTIMO_CTENTRADA=0

If [FaturaC->Atualiza Estoque]<>"S" Or [FaturaC->Tipo Movimento Estoque]="E" Or IsBlank([FaturaI->Codigo do Item])
   Then Moveto "FaturaI"
        Return True
EndIf

If Not TipoItem_ControlaEstoque([FaturaI->Tipo do Item])
   Then Moveto "FaturaI"
        Return
EndIf

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

While True
  Moveto "\\Sistemas\\Estoque\\SdEstq"
  Locate [FaturaC->Codigo da Empresa],
         [FaturaI->Codigo do Item   ], ANO_EST, MES_EST
  If Not RetVal
     Then If Not Cria_Ficha([FaturaC->Codigo da Empresa],[FaturaI->Codigo do Item],False)
             Then Moveto "FaturaI"
                  Return False
             Else Loop
          EndIf
  EndIf
;;;;  While IsLockRecord() EndWhile
  QuitLoop
EndWhile

SALDOATUAL = [Saldo Atual]
NOVOSALDO = -1

If ATUALIZA_ORCAMENTO And SALDOATUAL < [FaturaI->Quantidade ]
   Then Moveto "FaturaI"
        Return False
EndIf

Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[FaturaI->Quantidade],3)
  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANT)-[FaturaI->Quantidade]),3)
EndSwitch           
VSD_I_Custo_Unitario=NDecimal(([Custo Total Atual]/[Saldo Atual]),5)
If VSD_I_Custo_Unitario=0 Or IsBlank(VSD_I_Custo_Unitario)
   Then VSD_I_Custo_Unitario=[Ultimo Custo Atual]
EndIf

ULTIMO_CTENTRADA    =NDecimal([Preco de Custo],2)
UnLockRecord

Moveto "FaturaI"
If NOVOSALDO>=0
   Then Return True
   Else MSG=    "Estoque Insuficiente em "+LTrim(StrVal(Format("W11.3,EIC",NOVOSALDO)))+", Verificar !// //"
        MSG=MSG+"Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30)
        Mensagem(MSG)
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc   ;  (Checa_Estoque)

;*******************************************************************************
;* Cabe‡alho do relatorio dos itens negativos.                                 *
;  Somente para o SYS_CODIGO_CLIENTE "0102"                                    *
;*******************************************************************************
Proc CABECALHO_ITEM_NEG()

Print File ARQIMP CI_10CPP
Print File ARQIMP "\n\n"
Print File ARQIMP Spaces(2)+Fill("-",80) + "\n"
Print File ARQIMP Spaces(2)+Format("W80,AC","RELACAO DE ITENS NEGATIVOS")+ "\n"
Print File ARQIMP Spaces(2)+Fill("-",80)+ "\n"
Print File ARQIMP "\n"
Print File ARQIMP Spaces(2)+"                                          __________ Quantidade __________"+"\n"
Print File ARQIMP Spaces(2)+"Item                                       Informada    Estoque  Diferenca"+"\n"
Print File ARQIMP Spaces(2)+"----------------------------------------- ---------- ---------- ----------"+"\n"

NLINHA = 9

EndProc ;CABECALHO_ITEM_NEG()

;*******************************************************************************
;* Rotina para Atualizar as quantidades em caso de itens negativos.            *
;           Somente para o SYS_CODIGO_CLIENTE "0102"                           *
;*******************************************************************************
Proc ATUALIZA_QUANTIDADE()
Private FAZ,MSG,ARQIMP,COR_MENSAGEM,qtdant

FAZ = False 
ATUALIZA_ORCAMENTO = True

Home
Moveto [Codigo do Item]
While True
  If Not CHECA_ESTOQUE()
     Then If Not FAZ
             Then ARQIMP=PrivDir()+"ITEM_NEG.Txt"
                  If IsFile(ARQIMP)
                     Then Deleta_Arquivo(ARQIMP)
                  EndIf
                  CABECALHO_ITEM_NEG()
                  FAZ = True
          EndIf
          If NLINHA > 60
             Then Print File ARQIMP "\f"
                  CABECALHO_ITEM_NEG()
          EndIf
          NLINHA = NLINHA + 1
          Print File ARQIMP Spaces(2)+Format("W10",[Codigo do Item])+Spaces(1)+Format("W30",[Descricao do Item])+
                            Spaces(1)+Format("W10,AR",[Quantidade])+
                            Spaces(1)+Format("W10,AR",SALDOATUAL)+
                            Spaces(1)+Format("W10,AR",SALDOATUAL-[Quantidade])+"\n"        
          
          qtdant       = [Quantidade]
          [Quantidade] = SALDOATUAL
          If [Quantidade] > 0 And [Preco Unitario] > 0
             Then 
                  if [Valor Desconto Item]>0
                     then
                          switch
                            case [Tipo Desconto Item]="U" : [Valor Desconto Item]=round([Quantidade]*[Valor Desconto Unitario],2)
                            case [Tipo Desconto Item]="T" :
                                 if [Taxa Desconto Unitario]>0 
                                    then [Valor Desconto Unitario]=round((round([Quantidade]*[Preco Unitario],2)*[Taxa Desconto Unitario])/100,2)
                                    else [Valor Desconto Unitario]=round(([Valor Desconto Item    ]/qtdant)*[Quantidade],2)
                                 endif 
                                 [Valor Desconto Item]=[Valor Desconto Unitario]  
                          endswitch
                  endif
                  [Preco Total] = Round([Quantidade]*[Preco Unitario],2)-[Valor Desconto Item]
             Else If AtLast()
                     Then Del
                          QuitLoop
                     Else Del
                          Loop
                  EndIf        
          EndIf
  EndIf
  ESTOQUE()
  If AtLast()
     Then QuitLoop
     Else Down
  EndIf   
EndWhile

If FAZ
   Then COR_MENSAGEM="1"
        MSG=    "Os itens com saldo insuficiente, terÆo suas quantidades alteradas//"
        MSG=MSG+"para que seu estoque nÆo fique negativo.                         //"
        MSG=MSG+"Ser  impressa uma listagem com as diferen‡as !                     "
        Mensagem(MSG)
        DISPOSITIVO()
        If OK<>"" 
           Then ImpriArq(ARQIMP)
        EndIf   
EndIf        

ATUALIZA_ORCAMENTO = False
Release Vars MSG,ARQIMP,FAZ,COR_MENSAGEM

Moveto [Item da OF]

EndProc

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc EXCLUSAO_C()
If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

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

Moveto "FaturaC"
If GRAVA_LOG Then Grava_LogEx("FaturaCF") EndIf
Del
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 FaturaCF") EndIf
Del

If PARAM_RATEIO_COMISSAO="I"
   Then Excluir_Rateio_Comissao()
EndIf

EndProc  ; (Exclusao_I)
;*******************************************************************************
;* Rotina para Impressao Geral (NF)                                            *
;*******************************************************************************
Proc nfeautorizada(Tipo)
Private cfeok, c, pos, pos2, cfeserie, s, i
 
PastaNfeManager  =RTrim(PARAM_CAMINHO_MANAGER)
GrupoeDoc        =RTrim(PARAM_GRUPO_EDOC)
CNPJ_Manager     =Tira_CharNum(CNPJNF_e)
denegada         =False
cancelada        =False

PastaNfeManagerMonitorar=PastaNfeManager+"Monitorar\\"+GrupoeDoc+"\\CFe\\"+CNPJ_Manager+"\\"
PastaNeverStop          = "C:\\Arquivos de Programas\\ManagerNeverStop\\"
PastaNeverStopMonitorar = PastaNeverStop+"Monitora\\"
  
If not IsAssigned(CANC) 
   Then CANC = false 
EndIf



cfeok=False
While True

  If Tipo="Status" Or Tipo="Consulta" Or Tipo="Cancela" Then
    
    ;--- Carregando parametros ----------------------------------------------------
    
    AmbienteCFe      =""
    ModoCFe          ="Normal"
    VersaoCFe        =""
    VersaoEsquema    =""
    LoteAutomaticoCFe=""
    
    ;--- Carregando parametros atraves do getconfig por CNPJ ----------------------
    Aguarde("Verificando configura‡”es do Manager eDoc !")
    
    conteudodoarquivo=""  
    FileWrite        PrivDir()+"Config.ini"   From  "getconfig" 
    FileWrite        PrivDir()+"funcao1.txt"  From  "DELT|"+PastaNfeManagerMonitorar+"modo\\Retorno\\Config.ini"+"\n"
    FileWrite Append PrivDir()+"funcao1.txt"  From  "COP|"+PrivDir()+"Config.ini"+"|"+PastaNfeManagerMonitorar+"modo\\Config.ini"+"\n"
    FileWrite Append PrivDir()+"funcao1.txt"  From  "DELT|"+PrivDir()+"Config.ini"+"\n" 
    FileWrite Append PrivDir()+"funcao1.txt"  From  "DELT|"+PrivDir()+"manager2.ini"+"\n"
    FileWrite Append PrivDir()+"funcao1.txt"  From  "COP|"+PastaNfeManagerMonitorar+"modo\\Retorno\\Config.ini"+"|"+PrivDir()+"manager2.ini"+"\n"
    ExecVisecf(PrivDir()+"funcao1.txt","")
    
    Aguarde("Verificando configura‡”es do Manager eDoc CNPJ "+CNPJ_Manager+" !")
    conteudodoarquivo="" 
    
    If Not LerConteudodoArquivo(PrivDir()+"manager2.ini") Or
       conteudodoarquivo="" 
       Then MSG="Configura‡äes do Manager eDoc p/ verificar !// //"
        	  MSG=MSG+".ini do CNPJ "+CNPJ_Manager+", nÆo encontrado//" 
         	  MSG=MSG+"// Verifique com suporte vise !"
         		Mensagem(MSG)
            cfeok=False
        		QuitLoop
    EndIf 
    conteudodoarquivo1=conteudodoarquivo  

    ;--- Carregando parametros atraves do getconfig ----------------------
    Aguarde("Verificando configura‡”es do Manager NeverStop !")
    
    conteudodoarquivo=""  
    FileWrite        PrivDir()+"Config.ini"   From  "getconfig" 
    FileWrite        PrivDir()+"funcao2.txt"  From  "DELT|"+PastaNeverStopMonitorar+"modo\\Retorno\\Config.ini"+"\n"
    FileWrite Append PrivDir()+"funcao2.txt"  From  "COP|"+PrivDir()+"Config.ini"+"|"+PastaNeverStopMonitorar+"modo\\Config.ini"+"\n"
    FileWrite Append PrivDir()+"funcao2.txt"  From  "DELT|"+PrivDir()+"Config.ini"+"\n" 
    FileWrite Append PrivDir()+"funcao2.txt"  From  "DELT|"+PrivDir()+"manager3.ini"+"\n"
    FileWrite Append PrivDir()+"funcao2.txt"  From  "COP|"+PastaNeverStopMonitorar+"modo\\Retorno\\Config.ini"+"|"+PrivDir()+"manager3.ini"+"\n"
    ExecVisecf(PrivDir()+"funcao2.txt","")
    
    Aguarde("Verificando configura‡”es do Manager Never Stop !")
    conteudodoarquivo="" 
  
    If Not LerConteudodoArquivo(PrivDir()+"manager3.ini") Or
       conteudodoarquivo="" 
       Then MSG="Configura‡äes do Manager Never Stop p/ verificar !// //"
         	  MSG=MSG+"// Verifique com suporte vise !"
         		Mensagem(MSG)
            cfeok=False
        		QuitLoop
    EndIf  
    
    conteudodoarquivo2=conteudodoarquivo   
    
    Pos=SearchFrom("[MANAGEREDOC]",conteudodoarquivo1,1)
    Pos2=SearchFrom("Ambiente=",conteudodoarquivo1,pos)
    AmbienteCFe=SubStr(conteudodoarquivo1,pos2+9,1)  
    
    Pos=1      ;SearchFrom("[MANAGEREDOC]",conteudodoarquivo,1)
    Pos2=SearchFrom("EDOC.VERSAOESQUEMA=",conteudodoarquivo2,pos)
    VersaoEsquema=Upper(SubStr(conteudodoarquivo2,pos2+19,7))

    Pos2=SearchFrom("NEVERSTOP.FUSOHORARIO=",conteudodoarquivo2,pos)
    
    if not PegouFusoHorario
      Then
        FileWrite PrivDir()+"funcao1.txt"  From  "FUSO"
        ExecVise(PrivDir()+"funcao1.txt")
        conteudodoarquivo=""
        If Not LerConteudodoArquivo8(PrivDir()+"funcao1.ret") Or
               conteudodoarquivo="" 
           Then Fuso_Horario="-03:00"
           Else Fuso_Horario=SubStr(conteudodoarquivo,1,6)
        EndIf
        PegouFusoHorario= true
    EndIf

    release vars conteudodoarquivo, conteudodoarquivo1, conteudodoarquivo2

    
    ;--- Verificando se Manager/eDoc ativo -----------------------------------------
    If GrupoeDoc<>"" ;*** EDOC ***
       Then Aguarde("Consultando Status do Manager NeverStop, aguarde at‚ 30 segundos !")
    EndIf

    ArqCFE_Consulta  =PastaNeverStopMonitorar+"Consulta\\Status.txt"
    ArqCFE_ConsultaR =PastaNeverStopMonitorar+"Consulta\\Retorno\\Status.txt"

    FileWrite        PrivDir()+"managsta.txt" From "Campos=codnf\n"+"filtro=codnf=0\n"+"inicio=0\n"+"limite=1"

    FileWrite        PrivDir()+"funcao2.txt" From "DELT|"+ArqCFe_ConsultaR+"\n"
    FileWrite Append PrivDir()+"funcao2.txt" From  "COP|"+PrivDir()+"managsta.txt"+"|"+ArqCFe_Consulta+"\n"
    ExecVisecf(PrivDir()+"funcao2.txt","")

    If ExisteArquivo(ArqCFe_ConsultaR,0)
       Then cfeok=True
    EndIf   
  
    If Not cfeok 
       Then Mensagem("ManagerNeverStop 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 manager ou tente novamente !")
            If Tipo="Status"
               Then cfeok=False
               Else cfeok=True
            EndIf    
  
    EndIf
    If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf
    If IsAssigned(conteudodoarquivo1) Then release vars conteudodoarquivo1  EndIf
    If IsAssigned(conteudodoarquivo2) Then release vars conteudodoarquivo2  EndIf
  EndIf
  If Tipo="Status"
     Then QuitLoop
  EndIf   
  
  ;--- Verificando situa‡Æo do CFe -----------------------------------------------
  If Tipo="Cancela" 
     Then 
        ArqCFE           ="cf"+StrVal(NOTAFISC)+".TX2"
        ArqCFE_Cancela   =PastaNeverStopMonitorar+"Cancela\\"+ArqCFe
        ArqCFE_CancelaR  =PastaNeverStopMonitorar+"Cancela\\Retorno\\"+ArqCFe
        
        ArqCFE           ="cf"+StrVal(NOTAFISC)+".TX2"
        ArqCFE_Consulta  =PastaNeverStopMonitorar+"ConsultaOffline\\"+ArqCFe
        ArqCFE_ConsultaR =PastaNeverStopMonitorar+"ConsultaOffline\\Retorno\\"+ArqCFe
        ArqCFE_Envia     =PastaNeverStopMonitorar+"Envia\\"+ArqCFe
        
        If GrupoeDoc<>"" ;*** EDOC ***
           Then Aguarde("Cancelando o CF-E "+NOTAFISC+" , aguarde at‚ 30 segundos !")
        EndIf
        
        s=""
        cfeserie=SERIEFISC 
        FileWrite PrivDir()+"managcon.txt" From "consulta=SAT\n"+ 
                                                "filtro=idintegracao="+StrVal(NumVal(NOTAFISC))+"\n"
      
        FileWrite        PrivDir()+"funcao3.txt" From "DELT|"+ARQCFE_ConsultaR+"\n"
        FileWrite Append PrivDir()+"funcao3.txt" From "DELT|"+PrivDir()+"managcon.ret"+"\n"
        FileWrite Append PrivDir()+"funcao3.txt" From "COP|" +PrivDir()+"managcon.txt"+"|"+ArqCFE_Consulta+"\n"
        ExecVisecf(PrivDir()+"funcao3.txt","")
      
        If ExisteArquivo(ArqCFE_ConsultaR,0)
           Then 
                FileWrite        PrivDir()+"funcao4.txt" From "COP|" +ArqCFE_ConsultaR+"|"+PrivDir()+"managcon.ret"+"\n"
                FileWrite Append PrivDir()+"funcao4.txt" From "DELT|" +ArqCFE_ConsultaR+"\n"
                ExecVisecf(PrivDir()+"funcao4.txt","")
      
                If ExisteArquivo(PrivDir()+"managcon.ret",0)
                   Then s="1"
                EndIf
        EndIf 
        FileRead PrivDir()+"managcon.ret" to conteudodoarquivo  
        CHAVE_ACESSO_NFe=SubStr(conteudodoarquivo,1,44)
        
        FileWrite PrivDir()+"managcan.txt" From "chavenota="+CHAVE_ACESSO_NFe+"\n"+
                                                "justificativa="+JUSTCANCFE+"\n"
      
        FileWrite        PrivDir()+"funcao3.txt" From "DELT|"+ArqCFE_CancelaR+"\n"
        FileWrite Append PrivDir()+"funcao3.txt" From "DELT|"+PrivDir()+"managcan.ret"+"\n"
        FileWrite Append PrivDir()+"funcao3.txt" From "COP|" +PrivDir()+"managcan.txt"+"|"+ArqCFE_Cancela+"\n"
        ExecVisecf(PrivDir()+"funcao3.txt","")
      
        If ExisteArquivo(ArqCFE_CancelaR,0)
           Then 
                FileWrite        PrivDir()+"funcao4.txt" From "COP|" +ArqCFE_CancelaR+"|"+PrivDir()+"managcan.ret"+"\n"
                FileWrite Append PrivDir()+"funcao4.txt" From "DELT|" +ArqCFE_CancelaR+"\n"
                ExecVisecf(PrivDir()+"funcao4.txt","")
      
                If ExisteArquivo(PrivDir()+"managcan.ret",0)
                   Then s="1"
                EndIf
        EndIf   
        If s=""
            Then Mensagem("Manager Never Stop 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 manager ou tente novamente !")
           
                cfeok=False
           Else FileRead PrivDir()+"managcan.ret" to conteudodoarquivo
                cancelada = False
                If Search("Cancelado com sucesso",conteudodoarquivo)>0
                   Then
                       Mensagem("CF-e "+NOTAFISC+" Cancelado no SEFAZ !")
                       cfeok=true
                       cancelada = True
                       CANC= false
                   Else Mensagem("NÆo foi poss¡vel Cancelar o CF-e !")
                       cfeok=False
                       cancelada = False
                       CANC= True
                 EndIf
        EndIf
      
        If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf
        
     Else  
        cfeok=False

        If Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>"" 
           Then If [FaturaC->Sistema Gerador]="x!" And
                   CANC = False
                   Then Mensagem("CF-e "+NOTAFISC+" j„ foi enviado e autorizado no SEFAZ !")
                        cfeok=true
                        QuitLoop
                EndIf        
        EndIf        
        ArqCFE           ="cf"+StrVal(NOTAFISC)+".TX2"
        ArqCFE_Consulta  =PastaNeverStopMonitorar+"ConsultaOffline\\"+ArqCFe
        ArqCFE_ConsultaR =PastaNeverStopMonitorar+"ConsultaOffline\\Retorno\\"+ArqCFe
        ArqCFE_Envia     =PastaNeverStopMonitorar+"Envia\\"+ArqCFe
      
        If GrupoeDoc<>"" ;*** EDOC ***
           Then Aguarde("Consultando a CF-E "+NOTAFISC+" no Manager Never Stop, aguarde at‚ 30 segundos !")
        EndIf
        s=""
        cfeserie=SERIEFISC 
        FileWrite PrivDir()+"managcon.txt" From "consulta=SAT\n"+ 
                                                "filtro=idintegracao="+StrVal(NumVal(NOTAFISC))+"\n"
      
        FileWrite        PrivDir()+"funcao3.txt" From "DELT|"+ARQCFE_ConsultaR+"\n"
        FileWrite Append PrivDir()+"funcao3.txt" From "DELT|"+PrivDir()+"managcon.ret"+"\n"
        FileWrite Append PrivDir()+"funcao3.txt" From "COP|" +PrivDir()+"managcon.txt"+"|"+ArqCFE_Consulta+"\n"
        ExecVisecf(PrivDir()+"funcao3.txt","")
      
        If ExisteArquivo(ArqCFE_ConsultaR,0)
           Then 
                FileWrite        PrivDir()+"funcao4.txt" From "COP|" +ArqCFE_ConsultaR+"|"+PrivDir()+"managcon.ret"+"\n"
                FileWrite Append PrivDir()+"funcao4.txt" From "DELT|" +ArqCFE_ConsultaR+"\n"
                ExecVisecf(PrivDir()+"funcao4.txt","")
      
                If ExisteArquivo(PrivDir()+"managcon.ret",0)
                   Then s="1"
                EndIf
        EndIf   
        If s=""
            Then Mensagem("Manager/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 manager ou tente novamente !")
           
                cfeok=true
           Else FileRead PrivDir()+"managcon.ret" to conteudodoarquivo
                denegada  = False
                cancelada = False 
                CHAVE_ACESSO_NFe=SubStr(conteudodoarquivo,1,44)
                Switch
                  Case Search("AUTORIZADA",conteudodoarquivo)>0 And IsBlank([Numero Nota Gerada]) And NOTAFISC<>"": 
                       MSG=    "CF-e "+NOTAFISC+" J  foi confirmada sua autoriza‡„o no SEFAZ !// //"
                       MSG=MSG+"Consulta a CF-e no Manager/eDoc !//"
                       MSG=MSG+"Verifique o controle de numera‡„o do CF-e se esta correta !"
                       Mensagem(MSG)
                       cfeok=true
                  Case Search("AUTORIZADA",conteudodoarquivo)>0:
                       Mensagem("CF-e "+NOTAFISC+" foi confirmada sua autoriza‡„o no SEFAZ !")
                       cfeok=true  
                  Case Search("CANCELADA",conteudodoarquivo)>0:
                       Mensagem("CF-e "+NOTAFISC+" J  foi cancelado no SEFAZ !// //Confirme cancelamento no Sistema !")
                       cfeok=true
                       cancelada = True
                       CANC= false
                  Case Search("DENEGADA",conteudodoarquivo)>0:
                       Mensagem("CF-e "+NOTAFISC+" est  denegada no SEFAZ !// //Confirme denega‡Æo no Sistema !")
                       cfeok=true
                       denegada = True
                  Case (Search("ENVIADA",conteudodoarquivo)>0 Or Search("REGISTRADA",conteudodoarquivo)>0) And [FaturaC->Sistema Gerador]="d":
                       Mensagem("CF-e "+NOTAFISC+" DPEC j  foi registrada como enviada pelo Manager !//"+
                                "Confirme sua autoriza‡Æo alterando o Manager para modo NORMAL !")
                       cfeok=true
                  Case (Search("ENVIADA",conteudodoarquivo)>0 Or Search("REGISTRADA",conteudodoarquivo)>0) And [FaturaC->Sistema Gerador]="f":
                       Mensagem("CF-e "+NOTAFISC+" FSDA j  foi registrado como enviada pelo Manager !//"+
                                "Confirme sua autoriza‡Æo alterando o Manager para modo NORMAL !")
                       cfeok=true
                 EndSwitch
      
                 Switch
                   Case IsBlank([Numero Nota Gerada]) And NOTAFISC<>"":
          
                     If not cfeok and Search(",",conteudodoarquivo)>0
                        Then MSG=    "CF-e "+SubStr(conteudodoarquivo,1,65)+"!// // Consulte a situa‡„o da CF-e no Manager/eDoc !// //"
                             MSG=MSG+"Deseja reenviar esta CF-e ?"
                             If ConfGeral(MSG)
                                Then cfeok=False
                                Else cfeok=true
                             Endif   
                     EndIf   
          
                   Case Not IsBlank([Numero Nota Gerada]) And NOTAFISC<>"":
          
                         If cfeok And (Search("AUTORIZADA",conteudodoarquivo)>0 Or Search("CANCELADA",conteudodoarquivo)>0)
                            Then
                                 Switch
                                   Case [FaturaC->Sistema Gerador]="x" : [FaturaC->Sistema Gerador]="x!"
                                 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]
                                          [Chave_Acesso_NFe ] = CHAVE_ACESSO_NFe
                                          UnLockRecord
                                  EndIf
                          
                                  Moveto "FaturaC"
                                  If Not IsFormView()
                                     Then FormKey
                                  EndIf   
      
                         EndIf
                            
                         If not cfeok and Search(",",conteudodoarquivo)>0
                            Then Mensagem("CF-e "+SubStr(conteudodoarquivo,1,65)+"!// // Consulte a situa‡„o da CF-e no Manager/eDoc !// //")
                         EndIf   
          
                 EndSwitch
        EndIf
      
        If IsAssigned(conteudodoarquivo) Then release vars conteudodoarquivo  EndIf

  EndIf
  QuitLoop  
EndWhile

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

LimpAguarde()
Return cfeok
Endproc


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

MSGCAMPO=""
Rateio_BC_Itens("FaturaC")

;***** Apenas reimprir romaneio *********************
If REEMITIR And SOIMPRIMIR
   Then Moveto "FaturaC"
        Resynckey
        Do_It!
        SaveTables
        
        CoEditKey                            
        FormKey
        
        While True
          If IsBlank(PARAM_RELAT_ROMA)
            Then Mensagem("Romaneio n„o configurado, ver parƒmetros !")
                 QuitLoop
          EndIf        
          
          CODFISC  ="ROM"  ; PadrÆo
          SERIEFISC="RO"
          
          NOTAFISC=[FaturaC->Numero Nota Gerada]
          If IsBlank([FaturaC->Numero Nota Gerada])
             Then CODFISC  =PARAM_DOC_ROM
                  SERIEFISC=PARAM_SER_ROM
             Else CODFISC  =[FaturaC->Docto Nota Gerada ]
                  SERIEFISC=[FaturaC->Serie Nota Gerada ]
          EndIf     
          
          NUMCOPIA=PARAM_NVIAS_ROMANEIO
          MSGDISPOSITIVO="Romaneio"
          DispositivoI("FAT")
          If OK=""
            Then QuitLoop
          EndIf
          N_COPIAS=NUMCOPIA
          Play PARAM_RELAT_ROMA
          
          QuitLoop
        EndWhile

        Moveto "FaturaC"
        UnLockRecord
        FormKey
        
        SaveTables

        Return
EndIf

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!

Echo Off
SaveTables

CoEditKey                            
FormKey

If (PARAM_LIMITE_CREDITO="S" Or PARAM_LIMITE_CREDITO="P") And
   [FaturaC->Tipo     ]="C" And
   [Nome Fantasia EmitDest]<>"DIVERSOS" And
   Search("VEND",[FaturaC->Descricao da Destinacao])>0 And
   Search("VIST",[FaturaC->Descricao CondPagto])=0
   Then If Not Limite_Credito()
           Then Moveto "FaturaC"
                UnLockRecord
                FormKey
                Return
        EndIf
EndIf

While True
  ModoCFe=""
  Switch
    Case REEMITIR And Not IsBlank([Numero Nota Gerada]) And SubStr([FaturaC->Docto Nota Gerada],1,4)="CFE": 
         Opcaoc="CF-e"
    OtherWise :
          ;Echo Normal
          Echo Off

          ShowPopup " Impress„o " CENTERED
              "~S~uspende"                     : " N„o Imprime no momento":"Suspende",
              "~C~upom Fiscal Eletr“nico"      : " Imprime Cupom Fiscal Eletr“nico":"CF-e"
          EndMenu To Opcaoc

          echo off

          If Opcaoc="Esc" Or Not Retval Or Opcaoc="Suspende"
             Then QuitLoop
          EndIf
  EndSwitch

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

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

         If Not Nfeautorizada("Status")
            Then QuitLoop
         Endif   

         opcaoc="CF-e em modo ["+ModoCFe+"]"

         CODFISC  =PARAM_DOC_NFEN
         SERIEFISC=PARAM_SER_NFEN
  EndSwitch

  If IsBlank([FaturaC->Numero Nota Gerada])
		 Then 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
             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 proximo numero para "+Opcaoc+" ?"
                            ConfGeral(MSG)
                            If OK<>"S"
                               Then Moveto "FaturaC"
                                    UnLockRecord
                                    FormKey
                                    Return
                            EndIf
                          EndWhile
                          If [FaturaC->Data de Emissao]<[Data Ultima Emissao] And SYS_CODIGO_CLIENTE<>"0334"
                             Then UnLockRecord
                                  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
     Else NOTAFISC=[FaturaC->Numero Nota Gerada]
  EndIf

  If IsBlank([FaturaC->Numero Nota Gerada])
     Then Moveto "FaturaC"
          NUM_FATURA=[Numero da OF     ]
          EMP_FATURA=[Codigo da Empresa]

          Moveto [Numero Nota Gerada]
          Locate NOTAFISC
          If RetVal
             Then NF_FATURADA=False
                  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
                  If NF_FATURADA
                     Then Moveto "NumeroNF"
                          UnLockRecord

                          MSG=    "O proximo 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 [Numero da OF]
          Locate NUM_FATURA
          If Not RetVal
             Then Moveto "NumeroNF"
                  UnLockRecord

                  Mensagem("Erro ao localizar Ordem de Fatura: "+NUM_FATURA)
                  QuitLoop
             Else While True
                    If Not IsLockRecord()
                       Then QuitLoop
                    EndIf
                  EndWhile
          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 Moveto "NumeroNF"
                          UnLockRecord

                          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 Moveto "NumeroNF"
                          UnLockRecord
                          QuitLoop
                  EndIf
             Else If IsBlank([FaturaC->Numero Nota Gerada])
                     Then Moveto "NumeroNF"
                          UnLockRecord
                  EndIf
                  Mensagem(Opcaoc+" N§ "+NOTAFISC+" j  existe no Sistema !// // Situa‡„o [CANCELADA] !")
                  QuitLoop
          EndIf

     Else Moveto "FaturaC"
          ConfGeral("Confirma Emiss„o "+Opcaoc+" N§ "+NOTAFISC+" ?")
          If OK="N"
             Then If IsBlank([FaturaC->Numero Nota Gerada])
                     Then Moveto "NumeroNF"
                          UnLockRecord
                  EndIf
                  QuitLoop
          EndIf
  EndIf
  
  Switch
    Case SubStr(Opcaoc,1,4)="CF-e":
  
         If SYS_CODIGO_CLIENTE="0296" 
            Then Switch
                   Case [FaturaC->Valor Mercadoria]<=0 And [FaturaC->Valor Servico]>0 : 
                        Mensagem("Essa Nota Fiscal deve conter item de mercadoria")
                        TIPO_SAIDA = "LIBERA_NUMNF"
                        QuitLoop
                 EndSwitch
         EndIf 
          
         If Not nfeautorizada("")
            Then GRAVA_CONTINGENCIA=True
                 If ModoCFe<>"Normal"
                    Then JC_Digita()
                 EndIf
                 If Not GRAVA_CONTINGENCIA
                    Then TIPO_SAIDA = "LIBERA_NUMNF"
                         QuitLoop
                 EndIf
                 
                 ;[FaturaC->Data de Emissao] = Today()
                 If Not IsBlank([FaturaC->Data de Saida]) And [FaturaC->Data de Saida]<=[FaturaC->Data de Emissao]
                    Then [FaturaC->Data de Saida  ] = [FaturaC->Data de Emissao]
                         If [Hora de Saida]<=Time()
                            Then [Hora de Saida] = Time()
                         EndIf   
                 EndIf
                 Play "NF_CFE" 
                 
                 nfeautorizada("")
                  
            Else TIPO_SAIDA = "LIBERA_NUMNF"
                 QuitLoop
         EndIf
  EndSwitch
  QuitLoop
EndWhile

Moveto "FaturaC"
UnLockRecord
FormKey

Echo Normal
Echo Off

SaveTables

EndProc   ; (ConfImprime )

;*******************************************************************************
;* Rotina para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()
Private ParamF, ParamE, ParamFat, ParamC 

If IsEmpty("P_Cupom")
   Then Mensagem("N„o esta Configurado os Parametros para Cupom!")
        Return False
EndIf

If IsEmpty("P_Fatura")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o [Saida/Fatura]!")
        Return False
EndIf


ParamF=False
If not GetP_Balcao([FaturaC->Codigo da Empresa])
   then Return False
   else PARAM_ALTERA_FP="S"
        ParamF=True
EndIf

ParamE=False
If not GetP_Entra([FaturaC->Codigo da Empresa])
   then Return False
   else ParamE=True
EndIf



UnLockRecord
KeyPress "F7"
While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile

ParamC=False
Moveto "\\Sistemas\\Vendas\\P_Cupom"
Moveto [Codigo_Empresa]
Locate [FaturaC->Codigo da Empresa]
If RetVal
   Then ParamC=True
   
        PARAM_EMPRESA                  =[Codigo_Empresa           ]
        PARAM_DESTINACAO               =[Codigo_Destinacao        ]
        PARAM_CONTA_CAIXA              =[Numero_Caixa             ]
        PARAM_CLIENTE                  =[Codigo_Cliente           ]
        PARAM_VENDEDOR                 =[Codigo_Vendedor          ]
        PARAM_DOC_NFEN                 =[NFEN_Codigo do Docto     ]  
        PARAM_TIP_NFEN                 =[NFEN_Tipo do Docto       ]  
        PARAM_SER_NFEN                 =[NFEN_Serie do Docto      ]  
               
        PARAM_DOC_DUPNFEN              =[NFEN Dup_Codigo do Docto ]  
        PARAM_TIP_DUPNFEN              =[NFEN Dup_Tipo do Docto   ]  
        PARAM_SER_DUPNFEN              =[NFEN Dup_Serie do Docto  ] 
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Cupom] !")
EndIf


ParamFat=False
GetRecord "\\Sistemas\\Vendas\\P_Fatura" [FaturaC->Codigo da Empresa] to REGP_FATURA
If RetVal
   Then ParamFat=True
        PARAM_GRUPO_EDOC               =REGP_FATURA["Grupo_eDoc"               ]
        PARAM_CAMINHO_MANAGER          =REGP_FATURA["Caminho_NfeManager"       ]
   Else Mensagem("Parametros n„o Cadastrado para esta Empresa [Saida/Fatura] !")
EndIf


Moveto "FaturaC"
KeyPress "F7"

If ParamF And ParamE
   Then Return True
   Else Return False
EndIf   
EndProc ; (Carrega_Parametros)

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

View NOWINDOW "P_Cupom"
View NOWINDOW "FaturaI"
View NOWINDOW "FaturaV"
View NOWINDOW "FaturaIC"
View NOWINDOW "FaturaR"
View NOWINDOW "FaturIDD"
View NOWINDOW "FaturIAD"
View NOWINDOW "FaturaCC"

View NOWINDOW "NotaC"
View NOWINDOW "NotaI"
View NOWINDOW "NotaIC"
View NOWINDOW "NotaV"
View NOWINDOW "NotaICM"
View NOWINDOW "NotaR"
View NOWINDOW "NotaICM"
View NOWINDOW "NotaIDD"
View NOWINDOW "NotaIAD"
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\\CtaRec\\Duplic"
View NOWINDOW  "\\Sistemas\\CtaRec\\P_Duplic"

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

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()

While FACA_DIGITAC
  Moveto "FaturaC"
  Moveto [Data de Emissao]
  Resynckey
  Sleep 300

  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
    Moveto "FaturaI"
    Moveto "FaturaC"
    Moveto [Tipo Movimento Estoque]
    Resynckey
    Sleep 300
    
    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
      Moveto "FaturaV"
      Moveto "FaturaC"
      Moveto [Forma de Pagamento]
      Resynckey
      Sleep 300

      DIGITAF()
      If CHAVEF=9 Then QuitLoop EndIf
      FACA_DIGITAC=False
      FACA_CHAVEI =False
      QuitLoop
    EndWhile
  EndWhile
EndWhile
Moveto "FaturaC"
If RecordStatus("Locked") Then UnLockRecord EndIf         
If OPCAO_FORM=OPCAO_FORM_REL
   Then PickForm OPCAO_FORM
EndIf

SaveTables
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\\Vendas\\Bib_Bal,"+
        "\\Sistemas\\Vendas\\Bib_Vend"
        
SYS_VALOR()
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO  = "9999" 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_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

PegouFusoHorario=false

;---- REGRAS CONFORME UTILIZACAO -----------------------------------------------
Switch
  Case SYS_CODIGO_CLIENTE="0342" Or 
       SYS_CHAPA_USUARIO ="9999"  : ROTINA_LIBERADA = True
  OtherWise                       : ROTINA_LIBERADA = False
EndSwitch  

;---- Dispon¡vel apenas para o CODIGO #0342# -----------------------------------
If Not ROTINA_LIBERADA
   Then Mensagem("Rotina indispon¡vel !//Verificar com o Suporte VISE !")
        Return
EndIf            

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

PARAM_BLOQ_ALTERA_REP = "N"
PARAM_DUPLICIDADE_ITEM= False
PARAM_RATEIO_COMISSAO = ""
INICIO_IMPRESSAO      = True
PARAM_AGRUPA_ITEM     = False
VERIFICA_CONSULTA     = "CFe"
ATUALIZA_ORCAMENTO    = False

Carrega_Tabelas()

Array AICMS[10]
Array AIPI[10]
Array AISSQN[10]
Array AIR[10]

Array VIICMS[10]
Array VIIPI[10]
Array VIISSQN[10]
Array VIIR[10]

Array BCICMS[10]
Array BCIPI[10]
Array BCISSQN[10]
Array BCIR[10]

Array RICMS[10]
Array RIPI[10]

Array dtvencto[12]
Array valorven[12]

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
EndIf

OPCAO_FORM_REL="11"
OPCAO_FORM_MAN="3"
OPCAO_FORM    =OPCAO_FORM_REL

Moveto "FaturaC"
PickForm OPCAO_FORM_MAN
Moveto "OrcaC"   SetaCorRegistro("Padrao")
Moveto "OrcaI"   SetaCorRegistro("Padrao")
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetaCorRegistro("Padrao")
Moveto "FaturaV" SetaCorRegistro("Padrao")

Moveto "FaturaC"
PickForm OPCAO_FORM

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()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then PickForm OPCAO_FORM
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
