;** NotaS2 *********************************************************************
;*  Digitacao de Nota Fiscal - Serie 2                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 20/06/2005 por Jose Luis Ameno da Silva
;Ultima Alteracao: 20/02/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Aliquota Reducao ICMS Frete
;Ultima Alteracao: 21/02/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Duplicata<>NF
;Ultima Alteracao: 11/08/2006 por Antonio Marcelo Alves
;Motivo Alteracao: Adicao da rotina Checa_Supervisor quando Excluir
;Ultima Alteracao: 06/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cheques()
;Ultima Alteracao: 04/08/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes opcoes reducao BCICMS               
;Ultima Alteracao: 15/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 14/03/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Tributacao de ISSQN  
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 10/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS" 
;Ultima Alteracao: 19/03/2013 por Bruno Carvalho
;Motivo Alteracao: Comentado a linha onde utilizava o campo/variavel "NBM"
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo INSS
;Ultima Alteracao: 07/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: exclusao referencia ao campo IR se nÆo for utilizado!
;Ultima Alteracao: 10/12/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Biblioteca Bib_Ven                  
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord        
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()            
;Ultima Alteracao: 03/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0396# -> PegaCodigoRaiz()
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 27/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar condi‡Æo pagamento por item
;Ultima Alteracao: 28/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes nÆo usar modelo no item 0003            
;Ultima Alteracao: 01/08/2017 por Bruno Carvalho
;Motivo Alteracao: Removido [Numero Nota Original]
;Ultima Alteracao: 01/08/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" -> [Edita Descricao do Item] 
;Ultima Alteracao: 06/11/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao realizar o SCAN -> ATUA_SITUACAO_PEDIDO_ORCAMENTO() **[Quantidade Faturada]>=[Quantidade]
;Ultima Alteracao: 27/01/2018 por Bruno Carvalho
;Motivo Alteracao: Removido processos que destinavam … variavel de controle EDITA_DESCRICAO_ITEM
;Ultima Alteracao: 18/07/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0419# -> PegaCodigoRaiz()
;Ultima Alteracao: 20/07/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 24/09/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes conta corrente cheque            
;Ultima Alteracao: 23/04/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0429# -> PegaCodigoRaiz()
;Ultima Alteracao: 19/11/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes RATEIO_COMISSAO_VENCTOS() bib_vend           
;Ultima Alteracao: 05/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado processos de #0388# para #0444#
;Ultima Alteracao: 28/04/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado TipoItem_ControlaEstoque()
;Ultima Alteracao: 15/08/2020 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes exclusÆo de declara‡äes de arrayïs p/ calculo de tributos que nÆo usam mais

;*******************************************************************************
;* Rotina para Controlar Chave da Nota Fiscal                                  *
;*******************************************************************************
Proc CHAVEC()

COPIOU_REGISTRO=False
INICIO_PAGINA=True

FACA_DIGITAC =True
NF_Cancelada =False
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

While True
  Moveto "Notas2c"
  End
  Moveto [Codigo da Empresa]
  
  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn PgDn
  EndIf
  Moveto [Codigo da Empresa]

  If Not IsBlank(ANT_EMPRESA)
     Then [Codigo da Empresa  ]=ANT_EMPRESA
          [Codigo do Documento]=ANT_CDDOCTO
     Else [Codigo da Empresa  ]=PARAM_EMPRESA
  EndIf
  While True

      MSGCAMPO=Field()

        If Field()="Codigo do Documento" Or
           Field()="Codigo da Empresa"
           Then TECLA="F1=Tabelas"
           Else TECLA=""
        Endif

     If Field()="Codigo da Empresa" And Not IsBlank([Codigo da Empresa])
        Then MSGCAMPO="Empresa: "+[Nome Fantasia Empresa]
     EndIf


     AguardaTeclasPadrao()

     Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F1":
             If Field()="Codigo do Documento" Or
                Field()="Codigo da Empresa"
                Then CONSULTAF1()
             Endif
        Case RetVal="F3":
             If OPCAO_FORM="F"
                Then OPCAO_FORM="1"
                Else OPCAO_FORM="F"
             EndIf
             Del
             CHAVEC=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               If OPCAO_FORM="F"
                  Then PAGINA("Notas2C","MR")
                  Else PAGINA("Notas2C","MT")
               EndIf
               EMPRESA=[Codigo da Empresa  ]
               NUMDOC =[Numero do Documento]
               SERIE  =[Serie do Documento ]
               Switch
                 Case EDITAR="S":
                      PickForm "1"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then CHAVEC=0
                              Return
                         Else UnLockRecord
                      EndIf
                 Case EXCLUIR="S":
                      PickForm "1"
                      Echo Normal
                      Echo Off
                      If Checa_Controle([Numero_Controle_Dia])
                         Then CARREG_ACERTADO=False
                              If Not IsBlank([Numero_Carregamento])
                                 Then Moveto [Numero_Carregamento]
                                      Ativa_Lookup()
                                      Moveto [Numero_Carregamento]
                                      Locate [Notas2C->Numero_Carregamento]
                                      If RetVal
                                         Then If [Situacao]="ACERTADO"
                                                 Then Mensagem("Carregamento j  foi ACERTADO !")
                                                      KeyPress "ESC"
                                                      UnLockRecord
                                                      CARREG_ACERTADO=True
                                              EndIf
                                      EndIf
                                      KeyPress "ESC"
                              EndIf

                              If Not CARREG_ACERTADO
                                 Then If Checa_Supervisor() And
                                         (IsBlank([Codigo da Empresa]) Or Carrega_Parametros()) And
                                         IsBlank([Situacao])
                                         Then Confirma()
                                              If OK="S"
                                                 Then EXCLUSAO_C()
                                                 Else UnLockRecord
                                              EndIf
                                         Else UnLockRecord
                                      EndIf
                              EndIf
                         Else UnLockRecord
                      EndIf
                 OtherWise: QuitLoop
               EndSwitch
               If OPCAO_FORM="1"
                  Then PickForm "1"
                  Else PickForm "F"
               EndIf
             EndWhile
             QuitLoop
        Case Retval="ESC":
             If Field()="Codigo da Empresa"
                Then CHAVEC=9
                     Del
                     Return
                Else Left
             EndIf
        Case Retval="ENTER":
             If IsBlank([])
                Then Loop
             EndIf
             Switch
                  Case Field()="Codigo da Empresa":
                       EMPRESA=[Codigo da Empresa]
                       Moveto [Numero do Documento]
                  Case Field()="Numero do Documento":
                       []=ALINH()
                       NUMDOC=[Numero do Documento]
                       Moveto [Codigo do Documento]
                  Case Field()="Codigo do Documento":
                       SERIE =[Serie do Documento]
                       CODDOC=[Codigo do Documento]

                       ANT_EMPRESA=[Codigo da Empresa]
                       ANT_CDDOCTO=[Codigo do Documento]

                       Del
                       PickForm "1"
                       Moveto [Codigo da Empresa]
                       Locate EMPRESA,NUMDOC,SERIE
                       If Retval
                          Then CHAVEC=0
                          Else CHAVEC=1
                               PgDn PgDn PgDn
                               [Codigo da Empresa       ] = EMPRESA
                               [Numero do Documento     ] = NUMDOC
                               [Codigo do Documento     ] = CODDOC
                       EndIf
                       If Not IsLockRecord()
                          Then Echo Normal
                               Echo Off
                               If (CHAVEC=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                                  (CHAVEC=0 And Checa_Controle([Numero_Controle_Dia]))
                                  Then Return
                               EndIf
                       EndIf
                       If CHAVEC=1
                          Then Del
                       EndIf
                       If OPCAO_FORM="F"
                          Then PickForm "F"
                       EndIf
                       QuitLoop
             EndSwitch
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

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


FACA_CHAVEI   = False
Moveto "Notas2C"
If [Situacao]="C"
   Then Mensagem("Notas Fiscal Cancelada !")
        CHAVEC=9
        Return
EndIf
If Not Carrega_Parametros()
   Then If CHAVEC=1
           Then Del
        EndIf
        CHAVEC=9
        Return
   Else If CHAVEC=1 And INICIO_PAGINA
           Then [Codigo da Destinacao    ] = PARAM_DESTINACAO
                [Codigo da Transportadora] = PARAM_TRANSPORTADORA
                [Codigo da Tabela        ] = PARAM_TABELA_PRECO
                [Sistema Gerador         ] = "MA"
        EndIf
EndIf

FACA_CHAVEI  = True
If CHAVEC=0
  Then If [Tipo do Documento]="CUP" Or
          [Tipo do Documento]="ROM" Or
          [Tipo do Documento]="NF1" Or
          [Tipo do Documento]="NF2"
          Then If INICIO_PAGINA
                  Then If (SYS_CODIGO_CLIENTE="0078" Or SYS_CODIGO_CLIENTE="0094")
                          And ([Forma de Pagamento]="NO")
                          Then If Not Checa_Supervisor()
                                  Then CHAVEC=9
                                       Return
                               EndIf
                       EndIf

                       If Not IsBlank([Numero_Carregamento])
                          Then Moveto [Numero_Carregamento]
                               Ativa_Lookup()
                               Moveto [Numero_Carregamento]
                               Locate [Notas2C->Numero_Carregamento]
                               If RetVal
                                  Then If [Situacao]="ACERTADO"
                                          Then Mensagem("Carregamento j  foi ACERTADO !")
                                               KeyPress "ESC"
                                               CHAVEC=9
                                               Return
                                       EndIf
                                  Else Mensagem("Carregamento n„o encontrado !")
                                               KeyPress "ESC"
                                       CHAVEC=9
                                       Return
                               EndIf
                               KeyPress "ESC"
                      ;   Else If Not Checa_Supervisor()
                      ;           Then CHAVEC=9
                      ;                Return
                      ;        EndIf
                       EndIf


               EndIf
       EndIf
       If [Tipo de Pagamento]="V"
          Then Moveto [Exportado_Caixa]
          Else If [Tipo do Documento]="CUP"
                  Then Moveto [Cupom Fiscal Faturado]
                  Else Moveto [Data de Acerto       ]
               EndIf
       EndIf
  Else If ANT_DEST   <>"" And
          ANT_DTEMI  <>BlankDate() And
          ANT_DTSAI  <>BlankDate() And
          ANT_DTACE  <>BlankDate() And
          ANT_CDTAB  <>""
          Then
               [Codigo da Destinacao]=ANT_DEST
               [Numero_Carregamento ]=ANT_NCARREG
               [Data de Emissao     ]=ANT_DTEMI
               [Data de Saida       ]=ANT_DTSAI
               [Data de Acerto      ]=ANT_DTACE
               [Codigo da Tabela    ]=ANT_CDTAB

               Moveto [Codigo]
          Else Moveto [Data de Acerto ]
       EndIf
EndIf
INICIO_PAGINA=False

While True

      TECLA=" Esc=Retornar  PgDn  "

      If Field()="Codigo da Empresa"        Or
         Field()="Codigo da Destinacao"     Or
         Field()="Codigo"                   Or
         Field()="Codigo da Transportadora" Or
         Field()="Codigo do Representante"  Or
         Field()="Codigo da Tabela"         Or
         Field()="Condicao de Pagamento"    Or
         Field()="Numero_Carregamento"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA + "Del=Excluir  F4=Cancelar  "
      EndIf
      TECLA=TECLA+"F8=Observa‡„o  "

      Prompt TECLA

      MSGCAMPO=Field()

      Switch
        Case Field()="Exportado_Caixa"       : MSGCAMPO="Nota Exportada p/ o Caixa (Sim/N„o) ? "
        Case Field()="Frete por Conta"       : MSGCAMPO="Frete Contra: 1_Emitente  2_Destinatario"
        Case Field()="Consumidor Final"      : MSGCAMPO="Consumidor Final (Sim/N„o) * Sim = Calculo ICMS sobre o Valor da Nota Fiscal"
        Case Field()="Numero Nota Original"  : MSGCAMPO="Informe o Numero da Nota Original a que esta Digita‡„o se Refere !"
        Case Field()="Codigo da Tabela"      : MSGCAMPO="C¢digo da Tabela de Pre‡o"
        Case Field()="Origem do Pedido"      : MSGCAMPO="Visita, Fone, Balc„o"
        Case Field()="CGC"                   : MSGCAMPO="CNPJ/CPF"
        Case Field()="Cupom Fiscal Faturado" : MSGCAMPO="Cupom Fiscal Faturado (Sim/N„o) ? "
        Case Field()="Tipo Pessoa"           : MSGCAMPO="Fisica, Juridica"
        Case Field()="Codigo"                :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="C¢digo do Destinatario"
                Else MSGCAMPO="C¢digo do Emitente"
             EndIf
        Case Field()="Data de Saida"         :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="Data de Saida"
                Else MSGCAMPO="Data de Entrada"
             EndIf
        Case Field()="Hora de Saida"         :
             If [Tipo Movimento Estoque]="S"
                Then MSGCAMPO="Hora de Saida"
                Else MSGCAMPO="Hora de Entrada"
             EndIf
        OtherWise:
             pos_p=SearchFrom("Transp",Field(),1)
             If pos_p>0 And Field()<>"Codigo da Transportadora"
                Then MSGCAMPO=SubStr(Field(),1,pos_p-1)+"da Transportadora"
             EndIf
      EndSwitch

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35","PGDN","F4","F8"

      Switch
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo da Destinacao"     Or
              Field()="Codigo"                   Or
              Field()="CFO"                      Or
              Field()="Codigo da Transportadora" Or
              Field()="Codigo do Representante"  Or
              Field()="Codigo da Tabela"         Or
              Field()="Condicao de Pagamento"    Or
              Field()="Numero_Carregamento"
              Then CONSULTAF1()
            EndIf
      Case RetVal="PGDN":
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If EXCLUSAO_C()
                      Then CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="F4":
           If CHAVEC=0
              Then CONFGERAL("Cancelar Nota Fiscal ?")
                   If OK="S"
                      Then CANCELA_NF()
                           CHAVEC=9
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="F8":
           CampoAnt=Field()
           Edita_Memo("Observacao na Nota Fiscal",08,01,15,76,"Observa‡”es")
           Moveto Field CampoAnt
           Prompt TECLA
      Case Retval="ESC":
           Switch
           Case Field()="Razao Social":
                Moveto [Tipo Pessoa]
           Case Field()="Numero_Carregamento":
                Moveto [Frete por Conta]
           Case Field()="Numero de Volumes":
                Moveto [Numero_Carregamento]
           Case Field()="Codigo da Transportadora":
                Moveto [Condicao de Pagamento]
           Case Field()="Placa do Veiculo":
                Moveto [Codigo da Transportadora]
           Case Field()="Comissao do Representante":
                Moveto [Codigo do Representante]
           Case Field()="Codigo da Tabela":
                Moveto [Condicao de Pagamento]
           Case Field()="Condicao de Pagamento":
                Moveto [Origem do Pedido]
           Case Field()="Origem do Pedido":
                Moveto [Codigo do Representante]
           Case Field()="Consumidor Final":
                Moveto [Codigo]
           Case Field()="CFO":
                Moveto [Codigo da Destinacao]
           Case Field()="Data de Saida":
                Moveto [Data de Emissao]
                ;If CHAVEC=1
                ;  Then Moveto [Data de Emissao]
                ;  Else Moveto [CFO]
                ;EndIf
           Case Field()="Data de Acerto" Or
                Field()="Exportado_Caixa":
                If CHAVEC=1
                   Then Del
                   Else If RecordStatus("Modified")=True
                           Then Undo
                        EndIf
                EndIf
                CHAVEC=9
                QuitLoop
           Case Field()="Data de Emissao":
                Moveto [CFO]
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           If IsBlank([])
              Then If Field()="Codigo da Empresa" Or
                      Field()="Codigo da Destinacao" Or
                      Field()="CFO" Or
                      Field()="Codigo" Or
                      Field()="Codigo do Representante" Or
                      Field()="Condicao de Pagamento"
                      Then Loop
                   EndIf
           EndIf
           Switch
           Case Field()="Exportado_Caixa":
                If [Tipo do Documento]="CUP"
                   Then Moveto [Cupom Fiscal Faturado]
                   Else Moveto [Codigo da Destinacao ]
                EndIf
           Case Field()="Codigo da Destinacao"  : Moveto [CFO]
           Case Field()="CFO"                   : Moveto [Data de Emissao]
           Case (Field()="Data de Saida" Or Field()="Data de Emissao" Or Field()="Data de Acerto"):
                If IsBlank([])
                   Then []=Today()
                EndIf

                If (Field()="Data de Emissao" Or Field()="Data de Acerto")
                   Then If Not IntervaloData([])
                           Then Loop
                        EndIf
                EndIf

                Right
           Case Field()="Hora de Saida" And IsBlank([]):
                []=Time()
                Right
           Case Field()="Codigo":
                If IsBlank([Codigo da Transportadora])
                   Then [Codigo da Transportadora]=PARAM_TRANSPORTADORA
                EndIf

                Moveto [Consumidor Final]
           Case Field()="Consumidor Final":
                If IsBlank([])
                   Then []="N"
                EndIf
                If [Nome Fantasia EmitDest]="DIVERSOS"
                   Then Moveto [Razao Social]
                   Else Moveto [Codigo do Representante]
                EndIf
           Case Field()="CGC":
                If IsBlank([]) Then Loop EndIf
                If Not Checa_CGC_CPF_Formatado([]) Then Loop EndIf
                Switch
                  Case Search(".",[CGC])=4:
                       [Tipo Pessoa]="FISICA"
                  Case Search(".",[CGC])=3:
                       [Tipo Pessoa]="JURIDICA"
                EndSwitch
                Right
           Case Field()="IE":
                If IsBlank([])
                   Then Loop
                EndIf
                Right
           Case Field()="Codigo do Representante":
                Moveto [Comissao do Representante]
           Case Field()="Frete por Conta":
                If IsBlank([])
                   Then Loop
                   Else Moveto [Numero_Carregamento]
                EndIf
           Case Field()="Numero_Carregamento":
                If Not IsBlank([]) And []<>"000000" And SYS_CODIGO_CLIENTE="0117"
                   Then Ativa_Lookup()
                        Moveto [Numero_Carregamento]
                        Locate [Notas2C->Numero_Carregamento]
                        If RetVal
                           Then If [Codigo do Representante]<>[Notas2C->Codigo do Representante]
                                   Then MSG=    "O Representante informado neste documento,//"
                                        MSG=MSG+"difere do Representante informado no Carregamento !// //"
                                        MSG=MSG+"Verificar, e se preciso anotar poss¡vel erro no Cadastro !"
                                        Mensagem(MSG)
                                EndIf
                        EndIf
                        KeyPress "ESC"
                EndIf
                Moveto [Numero de Volumes]
           Case Field()="Condicao de Pagamento":
                Moveto [Codigo da Tabela]
           Case Field()="Codigo da Tabela":
                Moveto [Codigo da Transportadora]
           Case Field()="Codigo da Transportadora":
                Moveto [Placa do Veiculo]
           Case Field()="Peso Liquido":
                If Checagem_Pagina1() Then QuitLoop EndIf
           OtherWise:
                Right
           EndSwitch
      EndSwitch
EndWhile
EndProc  ;(DigitaC)

;*******************************************************************************
;* Rotina para Localizar Aliquota_ICMS                                         *
;*******************************************************************************
Proc Closed Checagem_Pagina1()
UseVars AutoLib, ErrorProc, UF_ALIQUOTA_ICMS, TRIB_ICMS, KM_FRETE,
        TAXA_FRETE, VRMINIMO_FRETE, CHAVEC, SEM_RED_BCICMS

Private CAMPOS_OK, NCAMPO, CDDESTIN

NCAMPO=Field()
;*** Checagem de Campos ***
CAMPOS_OK=False
Switch
  Case IsBlank([Codigo da Empresa]):       Mensagem("Empresa Invalida !")
  Case IsBlank([Codigo da Destinacao]):    Mensagem("Destinacao Invalida !")
  Case IsBlank([Codigo do Representante]): Mensagem("Representante Invalido !")
  Case IsBlank([Codigo]):                  Mensagem("Destinatario/Emitente Invalido !")
  Case IsBlank([Data de Emissao]):         Mensagem("Emissao Invalido !")
  Case IsBlank([UF]):                      Mensagem("Estado Invalido !")
  Case IsBlank([CFO]):                     Mensagem("CFOP Invalido !")
  Case IsBlank([Consumidor Final]):        Mensagem("Tipo Consumidor Invalido !")
  Case IsBlank([Condicao de Pagamento]):   Mensagem("Condicao de Pagamento Invalida !")
;;Case IsBlank([IE]):                      Mensagem("Inscri‡„o Estadual Invalida !")
  OtherWise: CAMPOS_OK=True
EndSwitch

If Not IsBlank([Numero_Carregamento])
   Then Moveto [Numero_Carregamento]
        Ativa_Lookup()
        Moveto [Numero_Carregamento]
        Locate [Notas2C->Numero_Carregamento]
        If RetVal
           Then If [Situacao]="ACERTADO"
                   Then Mensagem("Carregamento j  foi ACERTADO !")
                        CAMPOS_OK=False
                EndIf
           Else Mensagem("Carregamento n„o encontrado !")
                CAMPOS_OK=False
        EndIf
        KeyPress "ESC"
EndIf

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

;*** Aliquota do Estado ***
Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [Notas2C->UF]
If RetVal
   Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
   Else UF_ALIQUOTA_ICMS=BlankNum()
EndIf
KeyPress "ESC"

;*** Aliquota/Tributacao/Observacao da Destinacao ***
TRIB_ICMS=""
SEM_RED_BCICMS="1"


CDDESTIN=[Codigo da Destinacao]
[Codigo da Destinacao]=""
[Codigo da Destinacao]=CDDESTIN

Moveto [Codigo da Destinacao]
Ativa_Lookup()
Moveto [Codigo da Destinacao]
Locate [Notas2C->Codigo da Destinacao]
If RetVal
   Then If [ICMS Aliquota do Estado]<>"S"
           Then UF_ALIQUOTA_ICMS=[Aliquota de ICMS]
        EndIf
        TRIB_ICMS=[Tributacao de ICMS]
        SEM_RED_BCICMS=[Sem Reducao BCICMS]
EndIf
KeyPress "ESC"
[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

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

TAXA_FRETE=0
VRMINIMO_FRETE=0

;;If Not IsBlank([Aliquota de ICMS Frete]) And
;;   [Frete Incluso na Nota]="+" Or
;;   [Frete Incluso na Nota]=":"
;;   Then [Aliquota de ICMS Frete]=[Aliquota de ICMS]
;;        [CFO Frete             ]=[CFO             ]
;;EndIf

Moveto "Notas2C"

Return True
EndProc   ;  (Checagem_Pagina1)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEI()

Moveto "Notas2I"
FACA_DIGITAF  = True
While True
  Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
  Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
  Moveto [Item do Documento]   VCITENS =ImageCCount()

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

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

  Opcao_Ver     = False
  While True

    TECLA= " Esc=Retornar  F3=Ver Ficha  F7=Paginar  PgDn/PgUp  "

    Prompt TECLA

    Wait Field
         Until "ESC","ENTER","F3","F7","HOME","UP","PGUP","PGDN","PGUP"

    Switch
    Case RetVal="F3":
         Del
         Moveto [Item do Documento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEI=0
         Home
         SEQIT=[Item do Documento]
         Inicia_Registro()
         DigitaI()
         QuitLoop
    Case Retval="PGDN":
         Del
         Moveto [Item do Documento]
         If RecordStatus("New")=True
            Then MENSAGEM("A Nota Fiscal deve ter pelo menos 1(um) Item !")
                 QuitLoop
         EndIf
         CHAVEI=9
         Return
    Case Retval="PGUP" Or RetVal="ESC":
         Del
         CHAVEI=9
         FACA_CHAVEI =False
         FACA_DIGITAF=False
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         While True
           Moveto [Preco Total      ]   VSVRMERC=ImageCSum()
           Moveto [Quantidade       ]   VSQTDE  =ImageCSum()
           Moveto [Item do Documento]   VCITENS =ImageCCount()
           PAGINA("Notas2I","MR")
           SEQIT=[Item do Documento]
           If EDITAR="S"
              Then CHAVEI=0
                   Return
              Else If EXCLUIR="S"
                      Then CONFIRMA()
                           If OK="S"
                              Then CHAVEI=8
                                   EXCLUSAO_I()
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
         EndWhile
         QuitLoop
    Case Retval="ENTER":
         If Not Seta_Sequencia(NITEM,True)
            Then Del
                 QuitLoop
         EndIf
         SEQIT=[]
         Del
         Locate EMPRESA,NUMDOC,SERIE,SEQIT
         If Retval
            Then CHAVEI=0
                 SEQIT=[]
            Else CHAVEI=1
                 End
                 Down
                 [Codigo da Empresa  ]=EMPRESA
                 [Numero do Documento]=NUMDOC
                 [Serie do Documento ]=SERIE
                 [Item do Documento  ]=NumVal(SEQIT)
                 UnLockRecord
                 Locate EMPRESA,NUMDOC,SERIE,SEQIT
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveI)

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

TECLA=" Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then If CHAVEI=0
           Then 
                If PARAM_COR_TECIDO="S"
                   Then Campo="I_Codigo_Cor_Tecido"
                   Else If PARAM_TAMANHO="S"
                           Then Campo="I_Tamanho"
                           Else If PARAM_TABPR_ITEM="S"
                                   Then Campo="I_Tabela"
                                   Else Campo="I_Quantidade"
                                EndIf
                        EndIf
                EndIf
           Else If PARAM_PEDIDO="S" Or PARAM_ORCAMENTO="S"
                   Then If IsBlank([Notas2C->Numero do Pedido]) And
                           IsBlank([Notas2C->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 Opcao_Ver=True Then Campo="I_Seq" EndIf

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   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 do Documento]
                      Inicia_Registro()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9 Or
          Evento["KeyCode"] = -15:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEI=0
             Then Confirma()
                  If OK="S"
                     Then CopyFromArray RegItem
                          CHAVEI=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -62 :
          Campo="I_Descricao_Item"
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item" Or
             Campo="I_Tipo_Item" Or
             Campo="I_Codigo_Cor_Tecido" Or
             Campo="I_Tabela"
             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 Moveto [Codigo da Tabela     ] EndIf
                  ConsultaF1()

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

                 Moveto "Notas2I"
         EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Pedido":
                 CHAVEI=9
                 Del
                 CancelDialog
            Case Campo="I_Pedido_Item"       : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"       : Campo="I_Pedido"
            Case Campo="I_Codigo_Item"       : Campo="I_Pedido_Item"
            Case Campo="I_Descricao_Item":
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else CHAVEI=9
                         CopyFromArray RegItem
                         CancelDialog
                 EndIf
            Case Campo="I_Codigo_Cor_Tecido" : Campo="I_Codigo_Item"
                 If CHAVEI=1
                    Then Campo="I_Codigo_Item"
                    Else CHAVEI=9
                         CopyFromArray RegItem
                         CancelDialog
                 EndIf
            Case Campo="I_Tamanho":
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If CHAVEI=1
                            Then Campo="I_Codigo_Item"
                            Else CHAVEI=9
                                 CopyFromArray RegItem
                                 CancelDialog
                         EndIf
                 EndIf
            ;Case Campo="I_CST_Item"          : Campo="I_CF_Item"    
            ;Case Campo="I_CF_Item"           : Campo="I_Tipo_Item"

            Case Campo="I_CST_Item"          : Campo="I_Tipo_Item"    
            Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
            Case Campo="I_Tabela":
                If CHAVEI=1
                   Then If PARAM_COR_TECIDO="S"
                           Then Campo="I_Codigo_Cor_Tecido"
                           Else If PARAM_TAMANHO="S"
                                   Then Campo="I_Tamanho"
                                   Else Campo="I_Codigo_Item"
                                EndIf
                        EndIf
                   Else CHAVEI=9
                        CopyFromArray RegItem
                        CancelDialog
                EndIf
           Case Campo="I_Quantidade":
                If PARAM_TABPR_ITEM="S"
                   Then Campo="I_Tabela"
                   Else If CHAVEI=1
                           Then If PARAM_COR_TECIDO="S"
                                   Then Campo="I_Codigo_Cor_Tecido"
                                   Else If PARAM_TAMANHO="S"
                                           Then Campo="I_Tamanho"
                                           Else If IsBlank(VSD_I_Codigo_Item)
                                                   Then Campo="I_CST_Item"
                                                   Else Campo="I_Codigo_Item"
                                                EndIf
                                        EndIf
                                EndIf
                           Else CHAVEI=9
                                CopyFromArray RegItem
                                CancelDialog
                        EndIf
                EndIf
            Case Campo="I_UN_Item"           : Campo="I_Quantidade"
            Case Campo="I_Preco_Unitario":
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_UN_Item"
                    Else Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Taxa_Desconto_Unitario" Or
                 Campo="I_Valor_Desconto_Unitario" Or
                 Campo="I_Preco_Total"       : Campo="I_Preco_Unitario"
            Case Campo="I_Comissao_Item"     : Campo="I_Preco_Total"
            Case Campo="I_TICMS"             : Campo="I_Comissao_Item"
            Case Campo="I_RBC_ICMS" Or
                 Campo="I_AICMS" Or
                 Campo="I_Valor_ICMS"        : Campo="I_TICMS"
            Case Campo="I_TIPI"              : Campo="I_TICMS"
            Case Campo="I_RBC_IPI" Or
                 Campo="I_AIPI" Or
                 Campo="I_Valor_IPI"         : Campo="I_TIPI"
            Case Campo="I_TISSQN"            : Campo="I_TIPI"
            Case Campo="I_AISSQN" Or
                 Campo="I_Valor_ISSQN"       : Campo="I_TISSQN"
            Case Campo="I_Numero_Volumes"    : Campo="I_Comissao_Item"
            Case Campo="I_Peso_Liquido"      : Campo="I_Numero_Volumes"
            Case Campo="I_Peso_Embalagem"    : Campo="I_Peso_Liquido"
            Case Campo="I_Comissao_Item"     : Campo="I_Quantidade"
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          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=""
                         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 "Notas2C"
                         [Numero Pedido_Orcamento]=VSD_I_Pedido
                         If PARAM_PEDIDO="S"
                            Then Moveto "PedidoI"
                                 Moveto [Item do Pedido]
                            Else Moveto "OrcaI"
                                 Moveto [Item do Orcamento]
                         EndIf
                         Locate NumVal(VSD_I_Pedido_Item)
                         If Not RetVal
                            Then Mensagem("Item do Pedido n„o Encontrado !")
                         EndIf
                         Moveto "Notas2I"
                 EndIf
                 Campo="I_Codigo_Item"
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Descricao_Item"
                    Else Moveto [Codigo do Item]
                         Ativa_Lookup()
                         If Len(ControlValue("I_Codigo_Item"))<=10
                            Then Moveto [Codigo do Item]
                                 Locate ALINHM(ControlValue("I_Codigo_Item"),10)
                            Else Moveto [Codigo de Barras]
                                 Locate IndexOrder by "cod_barras" ControlValue("I_Codigo_Item")
                         EndIf
                         If RetVal
                            Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                                 KeyPress "ESC"

                                 Pega_Preco("Novo")

                                 [Codigo do Item]=VSD_I_Codigo_Item

                                 If [Tributacao de ICMS]="D"
                                    Then If TRIB_ICMS="D" And UF_ALIQUOTA_ICMS>0
                                            Then [Aliquota de ICMS  ]=UF_ALIQUOTA_ICMS
                                            Else [Tributacao de ICMS]=TRIB_ICMS
                                         EndIf
                                         If SEM_RED_BCICMS="1"
                                            Then [Aliquota Reduzida BCICMS]=BlankNum()
                                         EndIf
                                 EndIf

                                 Registro_Item("Ler")
                                 If PARAM_COR_TECIDO="S"
                                    Then Campo="I_Codigo_Cor_Tecido"
                                    Else If PARAM_TAMANHO="S"
                                            Then Campo="I_Tamanho"
                                            Else If PARAM_TABPR_ITEM="S"
                                                    Then Campo="I_Tabela"
                                                    Else Campo="I_Quantidade"
                                                 EndIf
                                         EndIf
                                 EndIf
                            Else Mensagem("Item n„o Cadastrado !")
                                 VSD_I_Codigo_Item   =""
                                 VSD_I_Descricao_Item=""
                                 VSD_I_UN_Item       =""
                                 ;VSD_I_CF_Item       =""
                                 VSD_I_CST_Item      =""
                                 VSD_I_Tipo_Item     =""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Descricao_Item":
                 VSD_I_Descricao_Item=ControlValue("I_Descricao_Item")
                 Campo="I_Tipo_Item"
            Case Campo="I_Tipo_Item":
                 VSD_I_Tipo_Item=ControlValue("I_Tipo_Item")
                 If Not IsBlank(VSD_I_Tipo_Item)
                    Then Moveto [Tipo do Item]
                         Ativa_Lookup()
                         Moveto [Tipo do Item]
                         Locate VSD_I_Tipo_Item
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "Notas2I"
                                 [Tipo do Item]=VSD_I_Tipo_Item
                                 ;Campo="I_CF_Item"
                                 Campo="I_CST_Item"
                            Else Mensagem("Tipo do Item n„o Cadastrado !")
                                 VSD_I_Tipo_Item=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                    Else VSD_I_Tipo_Item=""
                 EndIf
            ;Case Campo="I_CF_Item":
            ;     VSD_I_CF_Item=ControlValue("I_CF_Item")
            ;     Campo="I_CST_Item"
            Case Campo="I_CST_Item":
                 VSD_I_CST_Item=ControlValue("I_CST_Item")
                 If PARAM_COR_TECIDO="S"
                    Then Campo="I_Codigo_Cor_Tecido"
                    Else If PARAM_TAMANHO="S"
                            Then Campo="I_Tamanho"
                            Else If PARAM_TABPR_ITEM="S"
                                    Then Campo="I_Tabela"
                                    Else Campo="I_Quantidade"
                                 EndIf
                         EndIf
                 EndIf
            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]
                         Ativa_Lookup()
                         Moveto [Codigo da Cor_Tecido]
                         Locate VSD_I_Codigo_Cor_Tecido
                         If RetVal
                            Then KeyPress "ESC"
                                 Moveto "Notas2I"
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[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=""
                                 KeyPress "ESC"
                         EndIf
                    Else Campo="I_Descricao_Cor_Tecido"
                 EndIf
                 Echo Off
            Case Campo="I_Descricao_Cor_Tecido" :
                 VSD_I_Descricao_Cor_Tecido=ControlValue("I_Descricao_Cor_Tecido")
                 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")
                 If PARAM_TABPR_ITEM="S"
                    Then Campo="I_Tabela"
                    Else Campo="I_Quantidade"
                 EndIf
            Case Campo="I_Tabela":
                 VSD_I_Tabela=ControlValue("I_Tabela")
                 If Not IsBlank(VSD_I_Tabela)
                    Then Moveto [Codigo da Tabela]
                         Ativa_Lookup()
                         Moveto [Codigo da Tabela]
                         Locate VSD_I_Tabela
                         If RetVal
                            Then KeyPress "ESC"
                                 [Codigo da Tabela]=VSD_I_Tabela
                                 Pega_Preco("Novo")
                                 Campo="I_Quantidade"
                            Else Mensagem("Tabela n„o Cadastrada !")
                                 VSD_I_Tabela=""
                                 KeyPress "ESC"
                         EndIf
                         Echo Off
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 [Quantidade]=VSD_I_Quantidade
                 If Checa_Estoque()
                    Then If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                         EndIf
                         If IsBlank(VSD_I_Codigo_Item)
                            Then Campo="I_UN_Item"
                            Else Campo="I_Preco_Unitario"
                         EndIf
                 EndIf
            Case Campo="I_UN_Item":
                 VSD_I_UN_Item=ControlValue("I_UN_Item")
                 Campo="I_Preco_Unitario"
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else If VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                         EndIf
                EndIf
                If PARAM_DESCUNIT="S"
                   Then Campo="I_Taxa_Desconto_Unitario"
                   Else Campo="I_Preco_Total"
                EndIf
            Case Campo="I_Taxa_Desconto_Unitario":
                 VSD_I_Taxa_Desconto_Unitario=ControlValue("I_Taxa_Desconto_Unitario")
                 If VSD_I_Taxa_Desconto_Unitario>0
                    Then VSD_I_Valor_Desconto_Unitario=NDecimal((VSD_I_Preco_Unitario*VSD_I_Taxa_Desconto_Unitario)/100,2)
                         Campo="I_Preco_Total"
                    Else Campo="I_Valor_Desconto_Unitario"
                 EndIf
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else If VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                         EndIf
                EndIf
            Case Campo="I_Valor_Desconto_Unitario":
                 VSD_I_Valor_Desconto_Unitario=ControlValue("I_Valor_Desconto_Unitario")
                 Campo="I_Preco_Total"
                 If VSD_I_Quantidade>0 and VSD_I_Preco_Unitario>0
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*(VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario)
                    Else If VSD_I_Preco_Unitario>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario-VSD_I_Valor_Desconto_Unitario
                         EndIf
                EndIf
            Case Campo="I_Preco_Total":
                 VSD_I_Preco_Total=ControlValue("I_Preco_Total")

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

                 If PARAM_COMIS_ITEM="S"
                    Then Campo="I_Comissao_Item"
                    Else If PARAM_IMPOSTOS="S"
                            Then Campo="I_TICMS"
                            Else If PARAM_VOLUMES="S"
                                    Then Campo="I_NUMERO_VOLUMES"
                                    Else AcceptDialog
                                 EndIf
                         EndIf
                 EndIf
            Case Campo="I_Comissao_Item":
                 VSD_I_Comissao_Item=ControlValue("I_Comissao_Item")
                 If PARAM_IMPOSTOS="S"
                    Then Campo="I_TICMS"
                    Else If PARAM_VOLUMES="S"
                            Then Campo="I_NUMERO_VOLUMES"
                            Else AcceptDialog
                         EndIf
                 EndIf
            Case Campo="I_TICMS":
                 VSD_I_TICMS=ControlValue("I_TICMS")
                 If VSD_I_TICMS<>"D"
                    Then If Not IsBlank(VSD_I_TICMS)
                            Then VSD_I_RBC_ICMS=BlankNum()
                                 VSD_I_AICMS=BlankNum()
                                 VSD_I_Valor_ICMS=BlankNum()
                                 Campo="I_TIPI"
                         EndIf
                    Else Campo="I_RBC_ICMS"
                EndIf
            Case Campo="I_RBC_ICMS":
                 VSD_I_RBC_ICMS=ControlValue("I_RBC_ICMS")
                 If VSD_I_RBC_ICMS>0 And
                    VSD_I_AICMS>0
                    Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                    Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                 EndIf
                 Campo="I_AICMS"
            Case Campo="I_AICMS":
                 VSD_I_AICMS=ControlValue("I_AICMS")
                 If Not IsBlank(VSD_I_AICMS)
                    Then If VSD_I_RBC_ICMS>0 And
                            VSD_I_AICMS>0
                            Then VSD_I_Valor_ICMS=Round(((VSD_I_Preco_Total-((VSD_I_Preco_Total*VSD_I_RBC_ICMS)/100))*VSD_I_AICMS)/100,2)
                            Else VSD_I_Valor_ICMS=Round((VSD_I_Preco_Total*VSD_I_AICMS)/100,2)
                         EndIf
                         Campo="I_Valor_ICMS"
                 EndIf
            Case Campo="I_Valor_ICMS":
                 VSD_I_Valor_ICMS=ControlValue("I_Valor_ICMS")
                 Campo="I_TIPI"
            Case Campo="I_TIPI":
                 VSD_I_TIPI=ControlValue("I_TIPI")
                 If VSD_I_TIPI<>"D"
                    Then If Not IsBlank(VSD_I_TIPI)
                            Then VSD_I_RBC_IPI=BlankNum()
                                 VSD_I_AIPI=BlankNum()
                                 VSD_I_Valor_IPI=BlankNum()
                                 Campo="I_TISSQN"
                         EndIf
                    Else Campo="I_AIPI"
                EndIf
            Case Campo="I_AIPI":
                 VSD_I_AIPI=ControlValue("I_AIPI")
                 If VSD_I_AIPI>0
                    Then VSD_I_Valor_IPI=Round((VSD_I_Preco_Total*VSD_I_AIPI)/100,2)
                 EndIf
                 Campo="I_Valor_IPI"
            Case Campo="I_Valor_IPI":
                 VSD_I_Valor_IPI=ControlValue("I_Valor_IPI")
                 Campo="I_TISSQN"
            Case Campo="I_TISSQN":
                 VSD_I_TISSQN=ControlValue("I_TISSQN")
                 If VSD_I_TISSQN<>"D"
                    Then If Not IsBlank(VSD_I_TISSQN)
                            Then VSD_I_AISSQN=BlankNum()
                                 VSD_I_Valor_ISSQN=BlankNum()
                                 Campo="I_Numero_Volumes"
                         EndIf
                    Else Campo="I_AISSQN"
                EndIf
            Case Campo="I_AISSQN":
                 VSD_I_AISSQN=ControlValue("I_AISSQN")
                 If Not IsBlank(VSD_I_AISSQN)
                    Then VSD_I_Valor_ISSQN=Round((VSD_I_Preco_Total*VSD_I_AISSQN)/100,2)
                         Campo="I_Valor_ISSQN"
                 EndIf
            Case Campo="I_Valor_ISSQN":
                 VSD_I_Valor_ISSQN=ControlValue("I_Valor_ISSQN")
                 Campo="I_Numero_Volumes"
            Case Campo="I_Numero_Volumes":
                 VSD_I_Numero_Volumes=ControlValue("I_Numero_Volumes")
                 Campo="I_Peso_Liquido"
            Case Campo="I_Peso_Liquido":
                 VSD_I_Peso_Liquido=ControlValue("I_Peso_Liquido")
                 Campo="I_Peso_Embalagem"
            Case Campo="I_Peso_Embalagem":
                 VSD_I_Peso_Embalagem=ControlValue("I_Peso_Embalagem")
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item" Or
   Campo="I_Tipo_Item" Or
   Campo="I_Codigo_Cor_Tecido" Or
   Campo="I_Codicao_Pagamento" Or
   Campo="I_Tabela"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  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"
       EndSwitch
  Case Campo="I_Codigo_Item":
       MSGCAMPO="Codigo do Item"
  Case Campo="I_Descricao_Item":
       MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item":
       MSGCAMPO="Tipo do Item"
  ;Case Campo="I_CF_Item":
  ;     MSGCAMPO="Normas Brasileiras de Mercadorias"
  Case Campo="I_CST_Item":
       MSGCAMPO="Codigo Situa‡„o Tributaria"
  Case Campo="I_Codigo_Cor_Tecido":
       MSGCAMPO="Codigo da Cor"
  Case Campo="I_Tamanho":
       MSGCAMPO="Tamanho"
  Case Campo="I_Quantidade":
       MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item":
       MSGCAMPO="Unidade Fiscal"
  Case Campo="I_Preco_Unitario":
       MSGCAMPO="Pre‡o Unitario"
  Case Campo="I_Taxa_Desconto_Unitario":
       MSGCAMPO="Taxa Desconto Unitario"
  Case Campo="I_Valor_Desconto_Unitario":
       MSGCAMPO="Valor Desconto Unitario"
  Case Campo="I_Preco_Total":
       MSGCAMPO="Pre‡o Total"
  Case Campo="I_Custo_Unitario":
       MSGCAMPO="Custo Unitario"
  Case Campo="I_Preco_Tabela":
       MSGCAMPO="Pre‡o da Tabela de Pre‡o"
  Case Campo="I_Comissao_Item":
       MSGCAMPO="Comiss„o do Item"
  Case Campo="I_TICMS":
       MSGCAMPO="Tributacao ICMS: N„o tributado,Debitado,Isento,Outros,Substitui‡„o"
  Case Campo="I_RBC_ICMS":
       MSGCAMPO="Aliquota Reduzida da Base de Calculo de ICMS"
  Case Campo="I_AICMS":
       MSGCAMPO="Aliquota de ICMS"
  Case Campo="Valor do ICMS":
       MSGCAMPO="Valor do ICMS"
  Case Campo="I_TIPI":
       MSGCAMPO="Tributa‡„o IPI: N„o tributado,Debitado,Isento,Outros"
  Case Campo="I_AIPI":
       MSGCAMPO="Aliquota de IPI"
  Case Campo="I_Valor_IPI":
       MSGCAMPO="Valor do IPI"
  Case Campo="I_TISSQN":
       MSGCAMPO="Tributacao ISSQN: Debitado,N„o tributado,Isenta,Substituta,Retida"
  Case Campo="I_AISSQN":
       MSGCAMPO="Aliquota do ISSQN"
  Case Campo="I_Valor_ISSQN":
       MSGCAMPO="Valor do ISSQN"
  Case Campo="I_Numero_Volumes":
       MSGCAMPO="Numero de Volumes"
  Case Campo="I_Peso_Liquido":
       MSGCAMPO="Peso Liquido"
  Case Campo="I_Peso_Embalagem":
       MSGCAMPO="Peso da Embalagem"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

If Opcao_Ver=True
   Then TECLA=" Esc=Retornar  Home/End/PgDn/PgUp=Paginar  "
EndIf

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

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


Switch
  Case Not IsBlank([Notas2C->Numero do Pedido]) Or PARAM_PEDIDO="S":
       MSG_Pedido_Orcamento="Pedido"
  Case Not IsBlank([Notas2C->Numero do Orcamento]) Or PARAM_ORCAMENTO="S":
       MSG_Pedido_Orcamento="Orcam."
  OtherWise:
       MSG_Pedido_Orcamento="......"
EndSwitch
MSG_NUMERO_LINHAS=""
Showdialog "Dados do Item [      ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 04,1 height 19 width 77

   Accept @ -01,41 Width 6 "N" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 MSG_Pedido_Orcamento For "I_Pedido"
   Accept @ 00,15 Width 09 "A06" picture "#*#" Tag "I_Pedido" to VSD_I_Pedido
   Label  @ 00,08 "/Item" For "I_Pedido_Item"
   Accept @ 00,25 Width 06 "N" picture "#*#" Tag "I_Pedido_Item" to VSD_I_Pedido_Item

   Label  @ 01,01 "Codigo Item" For "I_Codigo_Item"
   Accept @ 02,01 Width 13 "A25" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 01,15 "Descricao Item" For "I_Descricao_Item"
   @ 01,35 ?? MSG_NUMERO_LINHAS
   Accept @ 02,15 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 01,58 "TI" For "I_Tipo_Item"
   Accept @ 02,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 01,63 "CST" For "I_CST_Item"                                                  ; @ 01,69
   Accept @ 02,63 Width 05 "A3" picture "!*!" Tag "I_CST_Item" to VSD_I_CST_Item          ; @ 02,69
   ;Label  @ 01,69 "NBM" For "I_CF_Item"                                                  ; @ 01,63
   ;Accept @ 02,69 Width 05 "A10" picture "!*!" Tag "I_CF_Item" to VSD_I_CF_Item          ; @ 02,63

   Label  @ 03,02 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 04,08 Width 06 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Label  @ 03,15 "Descricao Cor/Tecido" For "I_Descricao_Cor_Tecido"
   Accept @ 04,15 Width 22 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido
   Label  @ 03,37 "Tamanho" For "I_Tamanho"
   Accept @ 04,38 Width 06 "A2" picture "!*!" Tag "I_Tamanho" to VSD_I_Tamanho

   Label  @ 05,06 "Tabela" For "I_Tabela"
   Accept @ 06,06 Width 08 "A5" picture "!*!" Tag "I_Tabela" to VSD_I_Tabela

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

   Label  @ 09,01 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 10,01 Width 13 "$" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 09,21 "Pr.Tabela" For "I_Preco_Tabela"
   Accept @ 10,21 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Tabela" to VSD_I_Preco_Tabela
   Label  @ 09,33 "% Comiss„o" For "I_Comissao_Item"
   Accept @ 10,34 Width 10 "N" picture "#*#.[##]" Tag "I_Comissao_Item" to VSD_I_Comissao_Item

   @ 11,01 ?? "Impostos T    %Red.BC    %        Valor       Volumes/Unidade"
   Label  @ 12,00 "ICMS..." For "I_TICMS"
   Accept @ 12,09 Width 4 "A1" picture "N,D,I,O,S" Tag "I_TICMS" to VSD_I_TICMS
   Accept @ 12,14 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_ICMS" to VSD_I_RBC_ICMS
   Accept @ 12,25 Width 08 "N" picture "#*#.[##]" Tag "I_AICMS" to VSD_I_AICMS
   Accept @ 12,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_ICMS" to VSD_I_Valor_ICMS

   Label  @ 13,00 "IPI...." For "I_TIPI"
   Accept @ 13,09 Width 4 "A1" picture "N,D,I,O" Tag "I_TIPI" to VSD_I_TIPI
   Accept @ 13,14 Width 10 "N" picture "#*#.[####]" Tag "I_RBC_IPI" to VSD_I_RBC_IPI
   Accept @ 13,25 Width 08 "N" picture "#*#.[##]" Tag "I_AIPI" to VSD_I_AIPI
   Accept @ 13,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_IPI" to VSD_I_Valor_IPI

   Label  @ 14,00 "ISSQN.." For "I_TISSQN"
   Accept @ 14,09 Width 4 "A1" picture "D,N,I,S,R" Tag "I_TISSQN" to VSD_I_TISSQN
   Accept @ 14,25 Width 08 "N" picture "#*#.[##]" Tag "I_AISSQN" to VSD_I_AISSQN
   Accept @ 14,34 Width 11 "$" picture "#*#.[##]" Tag "I_Valor_ISSQN" to VSD_I_Valor_ISSQN

   Label  @ 12,46 "Quantidade...." For "I_Numero_Volumes"
   Accept @ 12,62 Width 12 "N" picture "#*#.[###]" Tag "I_Numero_Volumes" to VSD_I_Numero_Volumes
   Label  @ 13,46 "Peso Liquido.." For "I_Peso_Liquido"
   Accept @ 13,62 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Liquido" to VSD_I_Peso_Liquido
   Label  @ 14,46 "Peso Embalagem" For "I_Peso_Embalagem"
   Accept @ 14,62 Width 12 "N" picture "#*#.[###]" Tag "I_Peso_Embalagem" to VSD_I_Peso_Embalagem

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

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
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

       [Tipo Tributacao           ]=VSD_I_CST_Item

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

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

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

       [Tributacao de ICMS        ]=VSD_I_TICMS
       [Aliquota Reduzida BCICMS  ]=VSD_I_RBC_ICMS
       [Aliquota de ICMS          ]=VSD_I_AICMS
       [Valor do ICMS             ]=VSD_I_Valor_ICMS

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

       [Tributacao de ISSQN       ]=VSD_I_TISSQN
       [Aliquota de ISSQN         ]=VSD_I_AISSQN
       [Valor do ISSQN            ]=VSD_I_Valor_ISSQN

       [Volumes                   ]=VSD_I_Numero_Volumes
       [Peso Liquido              ]=VSD_I_Peso_Liquido
       [Peso Embalagem            ]=VSD_I_Peso_Embalagem
       [Comissao do Item          ]=VSD_I_Comissao_Item


       [Comissao do Item          ]=VSD_I_Comissao_Item
       [Codigo da Tabela          ]=VSD_I_Tabela
       UnLockRecord
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Item do Documento         ]

       VSD_I_Pedido                 =[Numero Pedido_Orcamento   ]
       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_CST_Item               =[Tipo Tributacao           ]

       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_Taxa_Desconto_Unitario =[Taxa Desconto Unitario    ]
       VSD_I_Valor_Desconto_Unitario=[Valor Desconto Unitario   ]
       VSD_I_Preco_Total            =Round([Preco Total               ],2)

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

       VSD_I_TICMS                  =[Tributacao de ICMS        ]
       VSD_I_RBC_ICMS               =[Aliquota Reduzida BCICMS  ]
       VSD_I_AICMS                  =[Aliquota de ICMS          ]
       VSD_I_Valor_ICMS             =[Valor do ICMS             ]

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

       VSD_I_TISSQN                 =[Tributacao de ISSQN       ]
       VSD_I_AISSQN                 =[Aliquota de ISSQN         ]
       VSD_I_Valor_ISSQN            =[Valor do ISSQN            ]

       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_Comissao_Item          =[Comissao do Item          ]
       VSD_I_Tabela                 =[Codigo da Tabela          ]
EndSwitch
EndProc   ; (Registro_Item)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Item do Documento]
Locate [Notas2C->Codigo da Empresa],[Notas2C->Numero do Documento],
       [Notas2C->Serie do Documento],SEQIT
CopyToArray RegItem
QUANT   = [Quantidade          ]
CTTOTAL = NDecimal(([Quantidade]*[Custo Medio Unitario]),2)
CODIGO_MARCA=""
If CHAVEI=1
   Then [Codigo da Tabela     ]=[Notas2C->Codigo da Tabela     ]
        [Condicao de Pagamento]=[Notas2C->Condicao de Pagamento]
EndIf
Registro_Item("Ler")

EndProc ; (Inicia_Registro)

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

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

If PARAM_TABPR_ITEM="S"
   Then TABPR=[Notas2I->Codigo da Tabela]
   Else TABPR=[Notas2C->Codigo da Tabela]
EndIf
CPGTO=[Notas2C->Condicao de Pagamento]

CodClie=[Notas2C->Codigo                 ]
CodRepr=[Notas2C->Codigo do Representante]
CodItem=VSD_I_Codigo_Item

GetRecord "\\Sistemas\\Estoque\\Itens" CodItem To regItens
If RetVal
   Then If Not IsBlank(regItens["Codigo da Grade"])
           Then If regItens["Tipo do Item"]<>"S" ;nÆo pega cod raiz para semi-acabado
                   Then CodItem=PegaCodigoRaiz(CodItem)
                EndIf
        EndIf
        
        If SYS_CODIGO_CLIENTE="0239" Or
           SYS_CODIGO_CLIENTE="0388" Or
           SYS_CODIGO_CLIENTE="0390" Or
           SYS_CODIGO_CLIENTE="0396" Or
           SYS_CODIGO_CLIENTE="0345" Or 
           SYS_CODIGO_CLIENTE="0419" Or
           SYS_CODIGO_CLIENTE="0444" Or 
           SYS_CODIGO_CLIENTE="0429"
           Then CodItem=PegaCodigoRaiz(CodItem)
        EndIf
EndIf

ITEM_PROMOCIONAL="N"
PesqOk          =False

If PARAM_UTILIZA_TABPR_CLIENTE="S"
   Then GetRecord "\\Sistemas\\Vendas\\Tbprcit" TABPR, CodClie, CodItem To Registro_TabPreco_Item
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If PARAM_UTILIZA_TABPR_REPRES="S" AND Not PesqOk
   Then GetRecord "\\Sistemas\\Vendas\\Tbprrit" TABPR, CodRepr, CodItem To Registro_TabPreco_Item   
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If Not PesqOk
   Then GetRecord "\\Sistemas\\Vendas\\Tbprite" TABPR, CodItem          To Registro_TabPreco_Item
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If PesqOK
   Then ITEM_PROMOCIONAL=Registro_TabPreco_Item["Em Promocao"]

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

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

EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Checagem de Composicao de Dias                                  *
;*******************************************************************************
Proc Checa_CompDias(Texto)
Private Texto,Contador_Repeticao,ncc

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

;*******************************************************************************
;* Rotina para Confirmacao de Valores                                          *
;*******************************************************************************
Proc DIGITAF()
CHAVEF=0
CHAVEV=1
COPIOU_REGISTRO=False

For I From 1 To 10
    AICMS[I] =BlankNum()
    AIPI[I]  =BlankNum()
    AISSQN[I]=BlankNum()


    BCICMS[I] =BlankNum()
    BCIPI[I]  =BlankNum()
    BCISSQN[I]=BlankNum()


    VIICMS[I] =BlankNum()
    VIIPI[I]  =BlankNum()
    VIISSQN[I]=BlankNum()


    RICMS[I] =BlankNum()
    RIPI[I]  =BlankNum()
EndFor

VRMERC=0
VRSERV=0

Moveto "Notas2I"
Scan
  If [Tributacao de ICMS]="D"
     Then For I From 1 To 10
              If Not IsBlank(AICMS[I])
                 Then If AICMS[I]=[Aliquota de ICMS] And RICMS[I]=[Aliquota Reduzida BCICMS]
                         Then BCICMS[I]=BCICMS[I]+[Preco Total]
                              If Not [Preco Total]>0
                                 Then VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                              EndIf
                              QuitLoop
                      EndIf
                 Else AICMS[I] =[Aliquota de ICMS]
                      RICMS[I] =[Aliquota Reduzida BCICMS]
                      BCICMS[I]=[Preco Total]
                      If Not [Preco Total]>0
                         Then VIICMS[I]=VIICMS[I]+[Valor do ICMS]
                      EndIf
                      QuitLoop
              EndIf
          EndFor
  EndIf

  If [Tributacao de IPI]="D"
     Then For I From 1 To 10
             If Not IsBlank(AIPI[I])
                Then If AIPI[I]=[Aliquota de IPI] And RIPI[I]=[Aliquota Reduzida BCIPI]
                         Then BCIPI[I]=BCIPI[I]+[Preco Total]
                              If Not [Preco Total]>0
                                 Then VIIPI[I]=VIIPI[I]+[Valor do IPI]
                              EndIf
                              QuitLoop
                      EndIf
                 Else AIPI[I] =[Aliquota de IPI]
                      RIPI[I] =[Aliquota Reduzida BCIPI]
                      BCIPI[I]=[Preco Total]
                      If Not [Preco Total]>0
                         Then VIIPI[I]=VIIPI[I]+[Valor do IPI]
                      EndIf
                      QuitLoop
             EndIf
         EndFor
  EndIf

  If [Tributacao de ISSQN]="D"
     Then For I From 1 To 10
              If Not IsBlank(AISSQN[I])
                 Then If AISSQN[I]=[Aliquota de ISSQN]
                         Then BCISSQN[I]=Round(BCISSQN[I]+[Preco Total],2)
                              VIISSQN[I]=VIISSQN[I]+[Valor do ISSQN]
                              QuitLoop
                      EndIf
                 Else AISSQN[I]=[Aliquota de ISSQN]
                      BCISSQN[I]=[Preco Total]
                      VIISSQN[I]=VIISSQN[I]+[Valor do ISSQN]
                      QuitLoop
              EndIf
          EndFor
  EndIf

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

Moveto "Notas2C"
CALC_NOTA()
If PARAM_SUBSTICMS="S"
   Then Moveto [Valor BCSubstituicao ICMS]
   Else Moveto [Valor Despesas Acessorias]
EndIf
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: 15/30/45/60 "                   EndIf

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

      Prompt TECLA

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

    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
           Calc_Venctos()
           Moveto [Tipo de Pagamento ]
      Case RetVal="F8":
           Moveto "Notas2V"
           While True
               CHAVEV()
               If CHAVEV=9 Then QuitLoop EndIf
               DIGITAV()
           EndWhile
           Moveto "Notas2C"
           Moveto [Tipo de Pagamento]
      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",[Notas2C->Descricao da Destinacao])>0
              Then Moveto "Notas2V"
                   Moveto [Valor]
                   TOT_VECTOS=ImageCSum()
                   Moveto "Notas2C"
                   If TOT_VECTOS>0  Or [Tipo de Pagamento]<>"O"
                      Then If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                              Then Mensagem("O Valor Total dos Vencimentos Difere do Valor da Nota Fiscal !")
                                   ConfGeral("Deseja encerrar c/ esta diferen‡a ?")
                                   If OK<>"S"
                                      Then Loop
                                   EndIf
                           EndIf
                   EndIf
           EndIf
           If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
              PARAM_UTILIZA_COMISSAO_VENDREAL="S"
              Then Switch
                     Case SYS_CODIGO_CLIENTE="0117":
                       If [Codigo da Destinacao]="001" Or
                          [Codigo da Destinacao]="002"
                          Then If Not Checa_Comissao_Produto()
                                  Then Loop
                               EndIf
                          Else If Not Checa_Comissao_Vendedor()
                                  Then Loop
                               EndIf
                       EndIf
                     OtherWise:
                       If Not Checa_Comissao_Vendedor()
                          Then Loop
                       EndIf
                   EndSwitch
           EndIf

           If PARAM_COMIS_VENCTO="S"
              Then RATEIO_COMISSAO_VENCTOS()
           EndIf

           ATUA_DADOS()
           QuitLoop
      Case RetVal="F":
           CHAVEV=4
           DIGITA_FRETE()
           CALC_NOTA()
      Case RetVal="D":
           CHAVEV=4
           If Not Field()="Forma de Pagamento"
              Then DIGITA_DESCTO()
                   CALC_NOTA()
              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]
           Case Field()="Forma de Pagamento":
                Moveto [Tipo de Pagamento]
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Valor BCSubstituicao ICMS" Or
                Field()="Valor Substituicao ICMS" Or
                Field()="Valor Despesas Acessorias" Or
                Field()="Valor do Seguro":
                Switch
                  Case Field()="Valor BCSubstituicao ICMS":
                       Moveto [Valor Substituicao ICMS]
                  Case Field()="Valor Substituicao ICMS":
                       Moveto [Valor Despesas Acessorias]
                  Case Field()="Valor Despesas Acessorias":
                       Moveto [Valor do Seguro]
                  Case Field()="Valor do Seguro":
                       Moveto [Tipo de Pagamento ]
                EndSwitch
                CALC_NOTA()
           Case Field()="Tipo de Pagamento":
                If IsBlank([]) Then Loop EndIf
                If []="O"
                   Then [Numero de Parcelas]=BlankNum()
                        [Composicao de Dias]=""
                        [Forma de Pagamento]=""
                   Else Moveto [Numero de Parcelas]
                EndIf
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

;*******************************************************************************
;* Rotina para Calculo de Vencimentos                                          *
;*******************************************************************************
Proc CALC_VENCTOS()
Private NPC, i, pos_s, NP, VREF,
        VRVENCTO, VRDIFERE, j, NDIAS,
        VCVENCTO, VCDIFERE,
        DIA_VECTO, MES_VECTO, ANO_VECTO

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

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

If [Notas2C->Tipo de Pagamento]="O"
   Then Moveto "Notas2C"
        Return
EndIf

NPC=1
i=1
If Not IsBlank([Notas2C->Composicao de Dias])
   Then While True
          pos_s=SearchFrom("/",[Notas2C->Composicao de Dias],i)
          If pos_s=0
             Then QuitLoop
             Else NPC=NPC+1
                  i=pos_s+1
          EndIf
        EndWhile
   Else NPC=0
EndIf
If NPC=0
   Then NP=[Notas2C->Numero de Parcelas]
   Else If NPC=1 And [Notas2C->Numero de Parcelas]>1
           Then NP=[Notas2C->Numero de Parcelas]
           Else NP=NPC
        EndIf
EndIf

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

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

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

  End
  Down
  [Sequencia        ]=AlinhM(StrVal(i),2)
  If pos_s=0 And NPC=1 And NP>1
     Then [Numero de Dias   ]=BlankNum()
          If PARAM_DATAS_VENCTOS="F"
             Then DIA_VECTO=Day([Notas2C->Data de Emissao])
                  MES_VECTO=Month([Notas2C->Data de Emissao])
                  ANO_VECTO=Year([Notas2C->Data de Emissao])
                  MES_VECTO=MES_VECTO+i
                  If MES_VECTO>12                
                     Then Switch
                            Case MES_VECTO>48 : ANO_AUXILIAR=4
                            Case MES_VECTO>36 : ANO_AUXILIAR=3
                            Case MES_VECTO>24 : ANO_AUXILIAR=2
                            Case MES_VECTO>12 : ANO_AUXILIAR=1
                          EndSwitch       
                          MES_VECTO=MES_VECTO-(12*ANO_AUXILIAR)
                          ANO_VECTO=ANO_VECTO+(1*ANO_AUXILIAR)
                  EndIf
                  ;*********** Verificando o Ultimo dia do Mˆs *****************     
                  Switch
                    Case NumVal(MES_VECTO)=2 And (NumVal(DIA_VECTO)=29 Or NumVal(DIA_VECTO)=30 Or NumVal(DIA_VECTO)=31) :
                         DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)         
                    Case NumVal(DIA_VECTO)=31 : DIA_VECTO=SubStr(Ultimo_Dia(AlinhM(StrVal(MES_VECTO),2)+StrVal(ANO_VECTO)),1,2)    
                  EndSwitch
                  [Data             ]=DateVal(AlinhM(StrVal(DIA_VECTO),2)+"."+AlinhM(StrVal(MES_VECTO),2)+"."+SubStr(StrVal(ANO_VECTO),3,2))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[Notas2C->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[Notas2C->Data de Emissao]+NDIAS
  EndIf
  If i<>NP
     Then [Valor            ]=VRVENCTO
          [Valor da Comissao]=VCVENCTO
     Else [Valor            ]=VRVENCTO+VRDIFERE
          [Valor da Comissao]=VCVENCTO+VCDIFERE
  EndIf
  [Forma de Pagamento]=[Notas2C->Forma de Pagamento]

  i=i+1
EndWhile

Moveto "Notas2C"

EndProc

;*******************************************************************************
;* Rotina para Calculo de Valores da Ordem de Faturamento                      *
;*******************************************************************************
Proc Calc_Nota()
Private VBC

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

VRBCICMS=0
VRICMS  =0
VRIPI   =0
VRISSQN =0
VRNF    =0

For I From 1 To 10
    If Not IsBlank(AICMS[I])
       Then If BCICMS[I]>0
               Then If SEM_RED_BCICMS<>"3"
                       Then VBC=BCICMS[I]-Round(((BCICMS[I]*TXDESCTO_TOTAL)/100),2)
                       Else VBC=BCICMS[I]
                    EndIf   
                    VBC=Round(VBC-((VBC*RICMS[I])/100),2)
                    VRBCICMS=VRBCICMS+VBC
                    VRICMS=Round(VRICMS+((VBC*AICMS[I])/100),2)
               Else VRICMS=VRICMS+VIICMS[I]
            EndIf
       Else VRICMS=VRICMS+VIICMS[I]
    EndIf
    If Not IsBlank(AIPI[I])
       Then If BCIPI[I]>0
               Then VBC=BCIPI[I]
                    VRIPI=Round(VRIPI+((VBC*AIPI[I])/100),2)
               Else VRIPI=VRIPI+VIIPI[I]
            EndIf
       Else VRIPI=VRIPI+VIIPI[I]
    EndIf
    If Not IsBlank(AISSQN[I])
       Then If BCISSQN[I]>0
               Then VRISSQN=Round(VRISSQN+((BCISSQN[I]*AISSQN[I])/100),2)
               Else VRISSQN=VRISSQN+VIISSQN[I]
            EndIf
    EndIf
EndFor

[Valor BCICMS]=VRBCICMS
[Valor ICMS  ]=VRICMS
[Valor IPI   ]=VRIPI
[Valor ISSQN ]=VRISSQN
[Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                     [Valor Substituicao ICMS]+[Valor do Seguro])
                     
If SYS_CODIGO_CLIENTE="0057"
   Then If [Codigo da Destinacao]="036"
           Then [Valor Nota Fiscal]=([Valor Mercadoria Liquido]+[Valor IPI]+[Valor Servico]+[Valor Despesas Acessorias]+
                                    [Valor do Seguro])
        EndIf
EndIf

VRNF=[Valor Nota Fiscal]

If [Aliquota BCFrete Nota]>0
   Then [Valor do Frete]=Round(([Valor Nota Fiscal]*[Aliquota BCFrete Nota])/100,2)
EndIf

If [Frete Incluso na Nota]="+"
   Then [Valor Nota Fiscal]=[Valor Nota Fiscal]+[Valor do Frete]
        If [Aliquota BCICMS Frete]>0
           Then [Valor BCICMS]=Round([Valor BCICMS]+([Valor do Frete]-(([Valor do Frete]*[Aliquota BCICMS Frete])/100)),2)
                [Valor ICMS  ]=Round([Valor ICMS]+((([Valor do Frete]-(([Valor do Frete]*[Aliquota BCICMS Frete])/100))*[Aliquota de ICMS Frete])/100),2)
           Else [Valor BCICMS]=[Valor BCICMS]+[Valor do Frete]
                [Valor ICMS  ]=Round([Valor ICMS]+(([Valor do Frete]*[Aliquota de ICMS Frete])/100),2)
        EndIf
EndIf

If [Consumidor Final]="S"
   Then [Valor BCICMS]=[Valor Nota Fiscal]
        [Valor ICMS  ]=Round(([Valor BCICMS]*UF_ALIQUOTA_ICMS)/100,2)
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC" Or
   [Descricao da Destinacao]="COMPLEMENTO ICMS CBC"
   Then [Valor Nota Fiscal       ]=BlankNum()
        [Valor Mercadoria        ]=BlankNum()
        [Valor Mercadoria Liquido]=BlankNum()
EndIf
If [Descricao da Destinacao]="COMPLEMENTO ICMS SBC"
   Then [Valor BCICMS            ]=BlankNum()
EndIf

If PARAM_UTILIZA_COMISSAO_VENDEDOR="S" Or
   PARAM_UTILIZA_COMISSAO_VENDREAL="S"
   Then Switch
          Case SYS_CODIGO_CLIENTE="0117":
            If [Codigo da Destinacao]="001" Or
               [Codigo da Destinacao]="002"
               Then Checa_Comissao_Produto()
               Else Checa_Comissao_Vendedor()
            EndIf
          OtherWise: Checa_Comissao_Vendedor()
        EndSwitch
EndIf

EndProc   ; (Calc_Nota)

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

If INICIO_DIALOG
   Then INICIO_DIALOG=False
EndIf      

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
      Case Evento["KeyCode"] = 9:
           Temp=False
      Case Evento["KeyCode"] = -59:
           If Campo="CBanco" Or
              Campo="NomeCartao" Or
              Campo="Cidade" Or
              Campo="UF"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="CBanco"     Then Moveto [Codigo_Banco  ] EndIf
                    If Campo="NomeCartao" Then Moveto [Nome do Cartao] EndIf
                    If Campo="Cidade"     Then Moveto [Cidade        ] EndIf
                    If Campo="UF"         Then Moveto [UF            ] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off

                    If Campo="CBanco"
                       Then VSD_CBanco=[Codigo_Banco      ]
                            VSD_NBanco=[Nome_Banco        ]
                    EndIf
                    If Campo="NomeCartao"
                       Then VSD_NomeCartao=[Nome do Cartao]
                    EndIf
                    If Campo="Cidade"
                       Then VSD_Cidade=[Cidade]
                    EndIf
                    If Campo="UF"
                       Then VSD_UF=[UF]
                    EndIf
                    Moveto "Notas2V"
           EndIf
           If Campo="TipoEmit"
              Then ShowPopup " Emitente " @ 14,39
                      "~P~roprio" : " O Proprio Cliente" : "PROPRIO",
                      "~T~erceiro": " De Terceiro": "TERCEIRO"
                   EndMenu
                    To MenuVar
                       If MenuVar<>"Esc"
                          Then VSD_TipoEmit=MenuVar
                       EndIf
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 4 And OP_SHOWD="Cheque":
           If COPIOU_REGISTRO
              Then REGISTRO["Sequencia"]     =SEQ
                   REGISTRO["Numero de Dias"]=[Numero de Dias]
                   REGISTRO["Data"]          =[Data]
                   REGISTRO["Valor"]         =[Valor]
                   CopyFromArray REGISTRO
                   Ler_Gravar_Cheque("Ler")
           EndIf
      Case Evento["KeyCode"] = -81 And OP_SHOWD="Cheque":
           VSD_CBanco   =ControlValue("CBanco")
           VSD_NCheque  =ControlValue("NCheque")
           VSD_Nome     =ControlValue("Nome")
           VSD_Agencia  =ControlValue("Agencia")
           VSD_CCorrente=ControlValue("CCorrente")
           VSD_TipoEmit =ControlValue("TipoEmit")
           VSD_Cidade   =ControlValue("Cidade")
           VSD_UF       =ControlValue("UF")
           VSD_DataV    =ControlValue("DataV")
           VSD_Valor    =ControlValue("Valor")
           VSD_Obs      =ControlValue("Obs")
           VSD_CPF      =ControlValue("CPF")

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

           If Pode_Gravar
              Then Ler_Gravar_Cheque("Gravar")
                   CancelDialog
           EndIf
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEV=0
               Then Confirma()
                    If OK="S"
                       Then Del
                            CancelDialog
                    EndIf
            EndIf
      Case Evento["KeyCode"] = 27:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso" : CancelDialog
                  [Frete Incluso na Nota ]=OLD_Frete_Incluso
                  [Aliquota BCFrete Nota ]=OLD_ABC_Frete
                  [Valor do Frete        ]=OLD_Frete
                  [Aliquota BCICMS Frete ]=OLD_ABCICMS_Frete
                  [Aliquota de ICMS Frete]=OLD_AICMS_Frete
                  [CFO Frete             ]=OLD_CFO_FRETE
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="ABCICMS_Frete" : Campo="AICMS_Frete"
             Case Campo="CFO_Frete"     : Campo="ABCICMS_Frete"
           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto"      : CancelDialog
             Case Campo="Descto"        : Campo="A_Descto"
           EndSwitch
      ;;;***** Cheque ****
           Switch
             Case Campo="CBanco"        : CancelDialog
             Case Campo="Agencia"       : Campo="CBanco"
             Case Campo="CCorrente"     : Campo="Agencia"
             Case Campo="NCheque"       : Campo="CCorrente"
             Case Campo="TipoEmit"      : Campo="NCheque"
             Case Campo="CPF"           : Campo="TipoEmit"
             Case Campo="Nome"          : Campo="CPF"
             Case Campo="Cidade"        : Campo="Nome"
             Case Campo="UF"            : Campo="Cidade"
             Case Campo="DataV"         : Campo="UF"
             Case Campo="Valor"         : Campo="DataV"
             Case Campo="Obs"           : Campo="Valor"
           EndSwitch
      ;;;***** Cartao ****
           Switch
             Case Campo="NCartao"       : CancelDialog
             Case Campo="NomeCartao"    : Campo="NCartao"
           EndSwitch
      ;;;***** Obs    ****
           Switch
             Case Campo="OBS"           : CancelDialog
           EndSwitch
      ;;;***** Cupom   ****
           Switch
             Case Campo="CUPOM"         : CancelDialog
           EndSwitch
      Case Evento["KeyCode"] = 13:
      ;;;***** Frete ****
           Switch
             Case Campo="Frete_Incluso":
                  VSD_Frete_Incluso=ControlValue("Frete_Incluso")
                  If IsBlank(VSD_Frete_Incluso)
                     Then VSD_Frete_Incluso="N"
                  Endif
                  Campo="ABC_Frete"
             Case Campo="ABC_Frete":
                  VSD_ABC_Frete=ControlValue("ABC_Frete")
                  If VSD_ABC_Frete>0
                     Then VSD_Frete=Round((VRNF*VSD_ABC_Frete)/100,2)
                          If VSD_Frete<VRMINIMO_FRETE
                             Then VSD_FRETE=VRMINIMO_FRETE
                          EndIf
                     Else VSD_ABC_Frete=BlankNum()
                  EndIf
                  Campo="Valor_Frete"
             Case Campo="Valor_Frete":
                  VSD_Frete=ControlValue("Valor_Frete")
                  If Not VSD_Frete>0
                     Then [Frete Incluso na Nota ]=":"
                          [Aliquota BCFrete Nota ]=BlankNum()
                          [Valor do Frete        ]=BlankNum()
                          [Aliquota BCICMS Frete ]=BlankNum()
                          [Aliquota de ICMS Frete]=BlankNum()
                          [CFO Frete             ]=""

                          CancelDialog
                     Else If VSD_Frete_Incluso="S"
                             Then ;;If VSD_CFO_Frete=""
                                  ;;   Then VSD_AICMS_Frete=UF_ALIQUOTA_ICMS
                                  ;;        VSD_CFO_Frete  =[NotaC->CFO]
                                  ;;EndIf

                                  If VSD_Frete_Incluso="S"
                                     Then [Frete Incluso na Nota ]="+"
                                     Else [Frete Incluso na Nota ]=":"
                                  EndIf
                                  [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                                  [Valor do Frete        ]=VSD_Frete
                                  [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                                  [CFO Frete             ]=VSD_CFO_Frete

                                  Campo="AICMS_Frete"
                             Else Campo="AICMS_Frete"
                          EndIf
                  EndIf
             Case Campo="AICMS_Frete":
                  VSD_AICMS_Frete=ControlValue("AICMS_Frete")
                  If Not IsBlank(VSD_AICMS_Frete) Or VSD_Frete<=0
                     Then Campo="ABCICMS_Frete"
                  EndIf
             Case Campo="ABCICMS_Frete":
                  VSD_ABCICMS_Frete=ControlValue("ABCICMS_Frete")
                  Campo="CFO_Frete"
             Case Campo="CFO_Frete":
                  VSD_CFO_Frete=ControlValue("CFO_Frete")

                  If Not IsBlank(VSD_CFO_Frete) And VSD_Frete>0
                     Then If VSD_Frete_Incluso="S"
                             Then [Frete Incluso na Nota ]="+"
                             Else [Frete Incluso na Nota ]=":"
                          EndIf
                          [Aliquota BCFrete Nota ]=VSD_ABC_Frete
                          [Valor do Frete        ]=VSD_Frete
                          [Aliquota BCICMS Frete ]=VSD_ABCICMS_Frete
                          [Aliquota de ICMS Frete]=VSD_AICMS_Frete
                          [CFO Frete             ]=VSD_CFO_Frete

                          CancelDialog
                  EndIf

           EndSwitch
      ;;;***** Descto ****
           Switch
             Case Campo="A_Descto":
                  VSD_A_Descto=ControlValue("A_Descto")
                  If VSD_A_Descto>0
                     Then VSD_Descto=BlankNum()
                          [Taxa de Desconto ]=VSD_A_Descto
                          [Valor do Desconto]=VSD_Descto

                          CancelDialog
                     Else VSD_A_Descto=BlankNum()
                          Campo="Descto"
                  EndIf
             Case Campo="Descto":
                  VSD_Descto=ControlValue("Descto")

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

                  CancelDialog
           EndSwitch

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

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


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

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

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="CBanco"      Or
   Campo="TipoEmit"    Or
   Campo="NomeCartao"  Or
   Campo="Cidade"      Or
   Campo="UF"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
If OP_SHOWD="Cheque" And COPIOU_REGISTRO
   Then TECLA=TECLA+"Ctrl+D=Copiar  PgDn=Finalizar  "
EndIf

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

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

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

;*******************************************************************************
;* Digitacao dos Dados do Frete                                                *
;*******************************************************************************
Proc Digita_Frete()
INICIO_DIALOG=True
OP_SHOWD="Frete"

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

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

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

Echo Normal
Echo Off

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

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

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

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

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

   Label  @ 2,17 "Vr Frete" For "Valor_Frete"
   Accept @ 3,16 Width 10 "$" picture "#*#.[##]" Tag "Valor_Frete" to VSD_Frete

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

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

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

Enddialog
EndProc    ;  (Digita_Frete)

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

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

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


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

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

Enddialog
EndProc

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

Moveto "Notas2V"
Ler_Gravar_Cheque("Ler")

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

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

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

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

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

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

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

   Label  @ 4,00 "CPF/CGC" for "CPF"
   Accept @ 5,01  Width 21 "A18" picture "##[.]###.###/####-##,###.###.###-##" Tag "CPF" to VSD_CPF

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

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

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

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

   Label  @ 6,51 "Valor do Cheque" for "Valor"
   Accept @ 7,52  Width 16 "$" picture "#*#.[##]" Tag "Valor" to VSD_Valor

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

Enddialog
EndProc  ; (Digita_Cheque)

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

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

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


   Label  @ 0,00 "N§ Cartao" for "NCartao"
   Accept @ 1,01  Width 22 "A19" picture "####.####.####.####" Tag "NCartao" to VSD_NCartao

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

Enddialog

EndProc

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

Moveto "Notas2V"
VSD_OBS       =[Observacao          ]

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

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

Enddialog
EndProc

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

;*******************************************************************************
;* Rotina para Digitacao de Vencimentos                                        *
;*******************************************************************************
Proc ChaveV()
While True
  Moveto [Sequencia]
  End
  SEQ = [Sequencia]
  Down
  Moveto [Sequencia]
  Seta_Sequencia(SEQ,False)

  While True

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

        Prompt TECLA

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

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

;*******************************************************************************
;* Rotina para Digitacao dos Vencimentos                                       *
;*******************************************************************************
Proc DigitaV()
If CHAVEV=1
   Then Moveto [Numero de Dias   ]
   Else Moveto [Forma de Pagamento]
EndIf
FPAGTO=[Forma de Pagamento]
While True

  TECLA= " Esc=Retornar  "
  If Field()="Forma de Pagamento"
     Then TECLA=TECLA+"F1=Tabelas  "
  EndIf
  If CHAVEV=0
     Then TECLA=TECLA+"Del=Excluir  "
  EndIf

  Prompt TECLA

  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 CHAVEV=1
                  Then Del
                EndIf
                QuitLoop
          Else Left
       EndIf
  Case RetVal="DEL":
       Confirma()
       If OK="S"
          Then Del
               QuitLoop
       EndIf
  Case RetVal="ENTER":
    Switch
       Case Field()="Numero de Dias":
            If Not IsBlank([]) Or []>0
               Then ND=[]
                    Right
                    []=[Notas2C->Data de Emissao]+ND
               Else Right
            EndIf
       Case Field()="Forma de Pagamento":
            If []<>FPAGTO And Not IsBlank(FPAGTO)
               Then Mensagem("Para mudar forma de Pagto exclua e inclua novamente este Vencimento Ok !")
                    Loop
            EndIf
            FPAGTO=[]
            If []="CH" or []="CP"
               Then Digita_Cheque()
               Else CHAVEV=4
                    If []="CT" or []="CD" Or []="CL"
                       Then Digita_Cartao()
                       Else Digita_Obs()
                    EndIf
            EndIf
            QuitLoop
       OtherWise:
            Right
    EndSwitch
  EndSwitch
EndWhile
EndProc    ; (DigitaV)

;*******************************************************************************
;* Atualiza Demais Dados                                                       *
;*******************************************************************************
Proc Atua_Dados()
Moveto "Notas2I"
Scan
  [Taxa Desconto Total ]=TXDESCTO_TOTAL
  [Valor Desconto Total]=Round(([Preco Total]*TXDESCTO_TOTAL)/100,5)
  VBC= [Preco Total]
  If [Aliquota de IPI]>0 And VBC>0
     Then [Valor do IPI    ]= Round((VBC*[Aliquota de IPI])/100,2)
  EndIf
  VBC= [Preco Total]-[Valor Desconto Total]
  VBC= VBC-Round((VBC*[Aliquota Reduzida BCICMS])/100,2)
  If [Aliquota de ICMS]>0 And VBC>0
     Then [Valor do ICMS   ]= Round((VBC*[Aliquota de ICMS])/100,2)
  EndIf
  VBC= [Preco Total]-[Valor Desconto Total]
  [Valor do ISSQN          ]= Round(([Preco Total]*[Aliquota de ISSQN])/100,2)
EndScan
UnLockRecord

Moveto "Notas2C"
UnLockRecord
KeyPress "F7"

;*********** Atualiza Ficha Financeira do Cliente ***********
If [Notas2C->Tipo]="C" And Search("VEND",[Notas2C->Descricao da Destinacao])>0
   Then Moveto "\\Sistemas\\Cadastro\\FichaCli"
        Moveto [Codigo]
        Locate [Notas2C->Codigo]
        If Not RetVal
           Then End Down
                [Codigo                  ]=[Notas2C->Codigo]
                [Data da Primeira Compra ]=[Notas2C->Data de Emissao]
                [Valor da Primeira Compra]=[Notas2C->Valor Nota Fiscal]
        EndIf
        If IsBlank([Data da Primeira Compra ])
           Then [Data da Primeira Compra ]=[Notas2C->Data de Emissao  ]
                [Valor da Primeira Compra]=[Notas2C->Valor Nota Fiscal]
        EndIf
        If [Notas2C->Valor Nota Fiscal]>=[Maior Fatura]
           Then [Maior Fatura        ]=[Notas2C->Valor Nota Fiscal]
                [Data da Maior Fatura]=[Notas2C->Data de Emissao  ]
        EndIf
        If [Data da Ultima Compra ]<=[Notas2C->Data de Emissao  ]
           Then [Data da Ultima Compra ]=[Notas2C->Data de Emissao  ]
                [Valor da Ultima Compra]=[Notas2C->Valor Nota Fiscal]
        EndIf
        UnLockRecord
EndIf
Moveto "Notas2C"

NLANCTO_CHEQUE         = [Notas2C->Numero Lancamento Cheque]
If PARAM_CHEQUES       = "S" Then CHEQUES()        EndIf

;******** Rotina Caixa/Banco e Duplicatas **************************************
APLIC_ORIGEM="NOTA"
OP_MOVCX    ="ATUALIZAR"
OP_MOVDP    ="ATUALIZAR"
CANCELA_DUP =False
If [Notas2C->Tipo Movimento Estoque]="S" And Search("VEND",[Notas2C->Descricao da Destinacao])>0
   Then EMPRESAFISC=[Notas2C->Codigo da Empresa  ]
        NotaFISC   =[Notas2C->Numero do Documento]
        SERIEFISC  =[Notas2C->Serie do Documento ]

        DP_NUMERO_GERADO=""
        CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
        If (PARAM_APRAZOAUTOMAT="S")
           Then OP_MOVDP="ESTORNAR"
                Play("Ft_Dups2")
        EndIf
       OP_MOVCX="ATUALIZAR"
       OP_MOVDP="ATUALIZAR"
        Switch
          Case [Notas2C->Tipo de Pagamento]="V":
               If PARAM_AVISTAAUTOMAT="S"
                  Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                       CX_VRLANC     =[Notas2C->Valor Nota Fiscal]
                  Else If PARAM_APRAZOAUTOMAT="S" And PARAM_AVISTADUPLIC="S"
                          Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                               Play("Ft_Dups2")
                       EndIf
               EndIf
          Case [Notas2C->Tipo de Pagamento]="P":
               If PARAM_AVISTAAUTOMAT="S"
                  Then Moveto "Notas2V"
                       Moveto [Numero do Documento]
                       Locate [Notas2C->Numero do Documento]
                       If RetVal
                          Then While [Numero do Documento]=[Notas2C->Numero do Documento]
                                 If [Data]=[Notas2C->Data de Emissao]
                                    Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                                         CX_VRLANC     =[Valor]
                                 EndIf
                                 Moveto "Notas2V"
                                 Skip
                                 If EOT() Then QuitLoop EndIf
                               EndWhile
                       EndIf
               EndIf
               If PARAM_APRAZOAUTOMAT="S"
                  Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                       Play("Ft_Dups2")
               EndIf
        EndSwitch
EndIf

Moveto "Notas2C"
UnLockRecord
KeyPress "F7"
EndProc     ; (Atua_Dados)

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

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

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

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

Moveto "\\Sistemas\\Estoque\\SdEstq"
Locate [Notas2C->Codigo da Empresa],
       [Notas2I->Codigo do Item   ], ANO_EST, MES_EST
If Not RetVal
   Then If CHAVEI<>8
           Then If Not Cria_Ficha([Notas2C->Codigo da Empresa],[Notas2I->Codigo do Item],False)
                   Then Moveto "Notas2I"
                        Return False
                EndIf
           Else Moveto "Notas2I"
                Return False
        EndIf
EndIf

While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile
CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
Switch
  Case CHAVEI=1:
     Switch
       Case [Notas2C->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[Notas2I->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal((CUSTO*[Notas2I->Quantidade]),2),2)
       Case [Notas2C->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[Notas2I->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-NDecimal((CUSTO*[Notas2I->Quantidade]),2),2)
     EndSwitch
  Case CHAVEI=8:
     Switch
       Case [Notas2C->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal([Saldo Atual]-[Notas2I->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]-([Notas2I->Custo Medio Unitario]*[Notas2I->Quantidade]),2)
       Case [Notas2C->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal([Saldo Atual]+[Notas2I->Quantidade],3)
            [Custo Total Atual] = NDecimal([Custo Total Atual]+NDecimal(([Notas2I->Custo Medio Unitario]*[Notas2I->Quantidade]),2),2)
       EndSwitch
  Case CHAVEI=0:
     Switch
       Case [Notas2C->Tipo Movimento Estoque]="E":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]-QUANT)+[Notas2I->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]-CTTOTAL)+NDecimal((CUSTO*[Notas2I->Quantidade]),2),2)
       Case [Notas2C->Tipo Movimento Estoque]="S":
            [Saldo Atual      ] = NDecimal(([Saldo Atual]+QUANT)-[Notas2I->Quantidade],3)
            [Custo Total Atual] = NDecimal(([Custo Total Atual]+CTTOTAL)-NDecimal((CUSTO*[Notas2I->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

If (CHAVEI=0 Or CHAVEI=1) And
   [Notas2C->Tipo Movimento Estoque]="S"
   Then Moveto "\\Sistemas\\Estoque\\EstqPrm"
        Locate [Notas2C->Codigo da Empresa],
               [Notas2I->Codigo do Item]
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile

        If Not IsBlank([Notas2C->Data de Saida])
           Then If [Notas2C->Data de Saida]>[Data da Ultima Saida]
                   Then [Data da Ultima Saida]=[Notas2C->Data de Saida]
                 EndIf
           Else If [Notas2C->Data de Emissao]>[Data da Ultima Saida]
                   Then [Data da Ultima Saida]=[Notas2C->Data de Emissao]
                 EndIf
        EndIf
        UnLockRecord
EndIf

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

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

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

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

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

Moveto "\\Sistemas\\Estoque\\SdEstq"
Locate [Notas2C->Codigo da Empresa],
       [Notas2I->Codigo do Item   ], ANO_EST, MES_EST
If Not RetVal
   Then If Not Cria_Ficha([Notas2C->Codigo da Empresa],[Notas2I->Codigo do Item],True)
           Then Moveto "Notas2I"
                Return False
        EndIf
EndIf

NOVOSALDO=-1
Switch
  Case CHAVEI=1:
       NOVOSALDO=NDecimal([Saldo Atual]-[Notas2I->Quantidade],3)
  Case CHAVEI=0:
       NOVOSALDO=NDecimal((([Saldo Atual]+QUANT)-[Notas2I->Quantidade]),3)
EndSwitch
VSD_I_Custo_Unitario=NDecimal(([Custo Total Atual]/[Saldo Atual]),5)
UnLockRecord

Moveto "Notas2I"
If NOVOSALDO>=0
   Then Return True
   Else Mensagem("Estoque Insuficiente em "+StrVal(Format("W11.3,EIC",NOVOSALDO))+", Verificar !")
        If PARAM_BLOQUEIA_NEG="S"
           Then Return False
           Else Return True
        EndIf
EndIf
EndProc   ; (Checa_Estoque)

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

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

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

Moveto "\\Sistemas\\Estoque\\EstqPrm"
Moveto [Codigo da Empresa]
Locate ESTQ_EMPRESA, ESTQ_ITEM
If Not RetVal
   Then End Down
        [Codigo da Empresa   ]=ESTQ_EMPRESA
        [Codigo do Item      ]=ESTQ_ITEM
        UnLockRecord
EndIf

Moveto "\\Sistemas\\Estoque\\SdEstq"
End Down
[Codigo da Empresa   ]=ESTQ_EMPRESA
[Codigo do Item      ]=ESTQ_ITEM
[Ano Referencia      ]=ESTQ_ANO
[Mes Referencia      ]=ESTQ_MES
UnLockRecord

Moveto [Codigo da Empresa]
Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Exclusao da Cabeca                                                          *
;*******************************************************************************
Proc Exclusao_C()
MSG="A exclus„o desta Nota Fiscal n„o estorna os //"
MSG=MSG+"poss¡veis lan‡amentos gerados no //"
MSG=MSG+"Contas a Receber ou no Caixa ! // //"
MSG=MSG+"Se necess rio o estorno, o fa‡a manualmente ! // //"
MSG=MSG+"Confirma a Exclus„o desta Nota Fiscal ?"
ConfGeral(MSG)
If OK<>"S"
   Then Return False
EndIf

Moveto "Notas2I"
While RecordStatus("New")=False
  EXCLUSAO_I()
EndWhile
Moveto "Notas2V"
While RecordStatus("New")=False
  Del
EndWhile

Moveto "Notas2C"
[Numero Pedido_Orcamento]=""
NLANCTO_CHEQUE=[Numero Lancamento Cheque]
UnLockRecord
KeyPress "F7"

;Moveto "NotaIDV"
;Moveto [Codigo da Empresa]
;Locate [Notas2C->Codigo da Empresa],
;       [Notas2C->Numero do Documento],
;       [Notas2C->Serie do Documento]
;While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] And
;      [Numero do Documento]=[Notas2C->Numero do Documento] And
;      [Serie do Documento ]=[Notas2C->Serie do Documento ]
;      Del
;      If EOT() Then QuitLoop EndIf
;EndWhile

;Estorna_Cupom("Exclusao")

Moveto "Notas2C"
CHAVEC=8
CHEQUES()
;;CONSIGNACAO()
;TROCA()

Moveto "Notas2C"
KeyPress "F7"
Del

Return True
EndProc    ;  (Exclusao_C)

;*******************************************************************************
;* Exclusao do Item                                                            *
;*******************************************************************************
Proc Exclusao_I()
CHAVEI=8
ESTOQUE()
ATUA_PEDIDO_ORCAMENTO()

Moveto "Notas2I"
SEQIT=[Item do Documento]
If Not NF_Cancelada
   Then Del
EndIf

;If PARAM_RATEIO_COMISSAO="I"
;   Then Excluir_Rateio_Comissao()
;EndIf

EndProc     ;  (Exclusao_I)

;*******************************************************************************
;* Cancelando Nota Fiscal                                                      *
;*******************************************************************************
Proc Cancela_NF()
NF_Cancelada=True
Moveto "Notas2I"
Scan
  EXCLUSAO_I()
EndScan

Moveto "Notas2C"
[Numero Pedido_Orcamento]=""
NLANCTO_CHEQUE=[Numero Lancamento Cheque]
UnLockRecord
KeyPress "F7"

;Estorna_Cupom("CancelaNF")

CHAVEC=8
CHEQUES()
;;CONSIGNACAO()
;TROCA()

;******** Rotina Caixa/Banco e Duplicatas **************************************
Moveto "Notas2C"
APLIC_ORIGEM="NOTA"
OP_MOVCX    ="CANCELAR"
OP_MOVDP    ="ATUALIZAR"
CANCELA_DUP =True
If [Notas2C->Tipo Movimento Estoque]="S" And Search("VEND",[Notas2C->Descricao da Destinacao])>0
   Then EMPRESAFISC=[Notas2C->Codigo da Empresa  ]
        NOTAFISC   =[Notas2C->Numero do Documento]
        SERIEFISC  =[Notas2C->Serie do Documento ]
        Switch
          Case [Notas2C->Tipo de Pagamento]="V":
               If PARAM_AVISTAAUTOMAT="S"
                  Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                       CX_VRLANC     =[Notas2C->Valor Nota Fiscal]
                  Else If PARAM_APRAZOAUTOMAT="S" And PARAM_AVISTADUPLIC="S"
                          Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                               Play("Ft_Dups2")
                       EndIf
               EndIf
          Case [Notas2C->Tipo de Pagamento]="P":
               If PARAM_AVISTAAUTOMAT="S"
                  Then Moveto "Notas2V"
                       Moveto [Codigo da Empresa]
                       Locate [Notas2C->Codigo da Empresa  ],
                              [Notas2C->Numero do Documento],
                              [Notas2C->Serie do Documento ]
                       If RetVal
                          Then While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] And
                                     [Numero do Documento]=[Notas2C->Numero do Documento] And
                                     [Serie do Documento ]=[Notas2C->Serie do Documento ]
                                 If [Data]=[Notas2C->Data de Emissao]
                                    Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                                         CX_VRLANC     =[Valor]
                                 EndIf
                                 Moveto "Notas2V"
                                 Skip
                                 If EOT() Then QuitLoop EndIf
                               EndWhile
                       EndIf
               EndIf
               If PARAM_APRAZOAUTOMAT="S"
                  Then CX_CONTA_CAIXA=PARAM_CONTA_CAIXA
                       Play("Ft_Dups2")
               EndIf
        EndSwitch
EndIf
;*******************************************************************************

Moveto "Notas2C"
[Situacao]="C"
UnLockRecord
KeyPress "F7"
NF_Cancelada=False
EndProc       ; (Cancela_NF)

;*******************************************************************************
;* Atualiza Quantidade Faturada do Pedido ou Orcamento                         *
;*******************************************************************************
Proc Atua_Pedido_Orcamento()
If PARAM_PEDIDO="S" Or PARAM_ORCAMENTO="S"
   Then If Not IsBlank([Notas2I->Numero Pedido_Orcamento]) And
           Not IsBlank([Notas2I->Item Pedido_Orcamento])
           Then Moveto "Notas2C"
                [Numero Pedido_Orcamento]=[Notas2I->Numero Pedido_Orcamento]
                If PARAM_PEDIDO="S"
                   Then Moveto "PedidoI"
                        Moveto [Item do Pedido]
                   Else Moveto "OrcaI"
                        Moveto [Item do Orcamento]
                EndIf
                Locate [Notas2I->Item Pedido_Orcamento]
                If RetVal
                   Then If CHAVEI<>8
                           Then [Quantidade Faturada]=([Quantidade Faturada]-QUANT)+[Notas2I->Quantidade]
                           Else [Quantidade Faturada]=[Quantidade Faturada]-[Notas2I->Quantidade]
                        EndIf
                        UnLockRecord
                        ATUA_SITUACAO_PEDIDO_ORCAMENTO()
                EndIf
        EndIf
EndIf
EndProc   ;(Atua_Pedido_Orcamento)

;*******************************************************************************
;* Atualiza Situacao do Pedido ou Orcamento                                    *
;*******************************************************************************
Proc Closed ATUA_SITUACAO_PEDIDO_ORCAMENTO()
UseVars AutoLib, ErrorProc, PARAM_PEDIDO

Private WC_NUMPED, WC_PEDFAT

WC_NUMPED=0
WC_PEDFAT=0
Scan
  WC_NUMPED=WC_NUMPED+1
  If [Quantidade Faturada]>=[Quantidade]
     Then WC_PEDFAT=WC_PEDFAT+1
  EndIf
EndScan
If WC_NUMPED>0
   Then If PARAM_PEDIDO="S"
           Then Moveto "PedidoC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Pedido   ]="FATURADO"
                   Else [Situacao do Pedido   ]="ABERTO"
                EndIf
           Else Moveto "OrcaC"
                If WC_NUMPED=WC_PEDFAT
                   Then [Situacao do Orcamento]="FATURADO"
                   Else [Situacao do Orcamento]="ABERTO"
                EndIf
        EndIf
        UnLockRecord
EndIf
EndProc    ;  (Atua_Situacao_Pedido_Orcamento)

;*******************************************************************************
;* Atualizacao de Cheques                                                      *
;*******************************************************************************
Proc Closed CHEQUES()
UseVars AutoLib, ErrorProc, NLANCTO_CHEQUE, PARAM_NLCHQ_IGUAL_NF, CHAVEC

Private NUMEROL, GERAR_CHEQUE, EXISTE_CHEQUE_LIQUIDADO, MSG

EXISTE_CHEQUE_LIQUIDADO=False

If Not IsBlank(NLANCTO_CHEQUE)
   Then Moveto "\\Sistemas\\CheqRec\\ChequeI"
        Moveto [Numero do Lancamento]
        Locate NLANCTO_CHEQUE
        If RetVal
           Then While [Numero do Lancamento]=NLANCTO_CHEQUE
                  If [Situacao]="LIQUIDADO" Or [Situacao]="PRORROGADO"
                     Then EXISTE_CHEQUE_LIQUIDADO=True
                          MSG="Cuidado !. Existem Cheques Liquidados ou Prorrogados p/ esta Nota.//"
                          MSG=MSG+"Os Cheques n„o podem ser atualizados por aqui//"
                          MSG=MSG+"Verificar no Controle de Cheques Ok !//"
                          MSG=MSG+"Lan‡amento: "+StrVal(NLANCTO_CHEQUE)+"  CH: "+SubStr([Observacao do Cheque],1,12)
                          Mensagem(MSG)
                          Skip
                          If EOT() Then QuitLoop EndIf
                     Else Del
                  EndIf
                EndWhile
        EndIf

        If Not EXISTE_CHEQUE_LIQUIDADO
           Then Moveto "\\Sistemas\\CheqRec\\ChequeC"
                Moveto [Numero do Lancamento]
                Locate NLANCTO_CHEQUE
                If RetVal
                   Then Del
                EndIf
        EndIf
EndIf
If CHAVEC=8
   Then Moveto "Notas2C"
        Return
EndIf

Moveto "\\Sistemas\\CheqRec\\ChequeC"
Moveto [Numero do Lancamento]
While True
  If EXISTE_CHEQUE_LIQUIDADO
     Then NUMEROL=NLANCTO_CHEQUE
     Else If PARAM_NLCHQ_IGUAL_NF="S"
             Then NUMEROL=NumVal([Notas2C->Numero do Documento])
             Else End
                  If [Numero do Lancamento]=BlankNum()
                     Then NUMEROL=1
                     Else NUMEROL=[Numero do Lancamento]+1
                  EndIf
          EndIf
  EndIf
  Locate NUMEROL
  If Not RetVal
     Then End
          Down
          [Numero do Lancamento   ]=NUMEROL
          If Not IsLockRecord()
             Then Controle_Dia()
                  QuitLoop
          EndIf
          Del
  EndIf
EndWhile

[Codigo da Empresa         ]=[Notas2C->Codigo da Empresa]
[Data de Entrada           ]=[Notas2C->Data de Emissao]
[Codigo                    ]=[Notas2C->Codigo]
[Codigo do Representante   ]=[Notas2C->Codigo do Representante]
[Observacao do Lancamento  ]="REF. "+[Notas2C->Codigo da Empresa]+"/"+[Notas2C->Tipo do Documento]+"/"+[Notas2C->Numero do Documento]
[Sistema Gerador           ]="DI"
[Tipo Docto Gerador        ]=[Notas2C->Tipo do Documento]
[Numero Docto Gerador      ]=[Notas2C->Numero do Documento]
[Numero_Carregamento_Orig  ]=[Notas2C->Numero_Carregamento]
UnLockRecord

GERAR_CHEQUE=False
Moveto "Notas2V"
Ins
Moveto [Codigo da Empresa]
Locate [Notas2C->Codigo da Empresa],
       [Notas2C->Numero do Documento],
       [Notas2C->Serie do Documento]
While [Codigo da Empresa  ]=[Notas2C->Codigo da Empresa  ] And
      [Numero do Documento]=[Notas2C->Numero do Documento] And
      [Serie do Documento ]=[Notas2C->Serie do Documento ]
      If [Forma de Pagamento]="CH" Or [Forma de Pagamento]="CP"
         Then
              If Not IsBlank([Numero_Cheque])
                 Then
                      Moveto "\\Sistemas\\CheqRec\\ChequeI"
                      Moveto [Numero do Lancamento]
                      Locate NUMEROL, NumVal([Notas2V->Sequencia])
                      If Not RetVal
                         Then End
                              Down
                              [Numero do Lancamento]=NUMEROL
                              [Sequencia do Cheque ]=NumVal([Notas2V->Sequencia])
                              [Data Vencimento     ]=[Notas2V->Data ]
                              [Valor               ]=[Notas2V->Valor]
                              [Codigo_Banco        ]=[Notas2V->Codigo_Banco]
                              [Numero_Cheque       ]=[Notas2V->Numero_Cheque]
                              [CPF                 ]=[Notas2V->CPF           ]
                              [Tipo_Emitente       ]=[Notas2V->Tipo_Emitente ]
                              [Titular_Cheque      ]=[Notas2V->Titular_Cheque]
                              [Cidade              ]=[Notas2V->Cidade        ]
                              [Agencia             ]=[Notas2V->Agencia       ]
                              [Numero_Conta        ]=[Notas2V->Numero_Conta  ]
                              [UF                  ]=[Notas2V->UF            ]
                              [Observacao do Cheque]=[Notas2V->Observacao    ]
                              [Sistema Origem      ]="NF"
                              [Tipo do Documento   ]="NF"
                              [Numero do Documento ]=[Notas2V->Numero do Documento]
                              [Codigo_Cliente      ]=[Notas2C->Codigo             ]

                              If RecordStatus("New")=True
                                 Then [Data_Entrada  ]=Today()
                              EndIf
                              Controle_Dia()
                              UnLockRecord
                              GERAR_CHEQUE=True
                      EndIf
                      Moveto "Notas2V"

              EndIf
      EndIf
      Skip
      If EOT() Then QuitLoop EndIf
EndWhile

If Not GERAR_CHEQUE And Not EXISTE_CHEQUE_LIQUIDADO
   Then Moveto "\\Sistemas\\CheqRec\\ChequeC"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then Del
        EndIf
        NUMEROL=BlankNum()
EndIf

Moveto "Notas2C"
While True
  If Not IsLockRecord()
     Then QuitLoop
  EndIf
EndWhile
[Numero Lancamento Cheque]=NUMEROL
UnLockRecord
EndProc   ; (Cheques)

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

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

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

NCampo=Field()
CODREP=[Notas2C->Codigo do Representante]
CODTAB=[Notas2C->Codigo da Tabela       ]

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

        Moveto "Notas2I"
        Scan
          TOT_MERC_TABELA=TOT_MERC_TABELA+NDecimal(([Quantidade]*[Preco Unitario Tabela]),2)
        EndScan
        Moveto "Notas2C"

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

Tx_Comissao  =BlankNum()
Tx_Encontrada=False

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

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

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

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

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

EndProc


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

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

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

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

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

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

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

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

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

Tx_Ajuste_Comissao  =BlankNum()
Tx_Encontrada=False

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

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

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

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

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

EndProc

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

If not GetP_Fatura([Notas2C->Codigo da Empresa])
   then Return False
EndIf

return true
EndProc ; (Carrega_Parametros)

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

View NOWINDOW "Notas2I"
View NOWINDOW "Notas2V"
View NOWINDOW "DupC"
View NOWINDOW "DupI"
View NOWINDOW "DupNF"
View NOWINDOW "NumeroDP"

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

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

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

View NOWINDOW  "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW  "\\Sistemas\\CtaCor\\MovCont"

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

EndProc  ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Proc,"+
        "\\Sistemas\\Vendas\\Bib_Vend"

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

PARAM_EMPRESA=SYS_EMPRESA_DEFAULT
PARAM_CONSIGNACAO="N"
PARAM_RATEIO_COMISSAO=""
Carrega_Tabelas()

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

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


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


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


Array RICMS[10]
Array RIPI[10]

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

CoEdit "Notas2C"
;************** Rotina para tratar o erro de tabela locada ********************
If ErrorCode()=4
   Then Do_It!
        ClearAll
        Release Vars All
        Release Procs All
        return
EndIf

PickForm "1"
Moveto "PedidoC" SetHighLight Current Record 51 Field 51
Moveto "PedidoI" SetHighLight Current Record 51 Field 51
Moveto "OrcaC"   SetHighLight Current Record 51 Field 51
Moveto "OrcaI"   SetHighLight Current Record 51 Field 51
Moveto "\\Sistemas\\Estoque\\SdEstq"  SetHighLight Current Record 51  Field 51
Moveto "\\Sistemas\\Estoque\\EstqPrm" SetHighLight Current Record 51  Field 51
Moveto "Notas2C"
PickForm "F"
OPCAO_FORM="F"

ANT_EMPRESA=""
ANT_CDDOCTO=""
ANT_DEST   =""
ANT_NCARREG=""
ANT_CDTAB  =""
ANT_DTEMI  =BlankDate()
ANT_DTSAI  =BlankDate()
ANT_DTACE  =BlankDate()

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="F"
             Then PickForm "F"
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  While FACA_DIGITAC
    DIGITAC()
    If CHAVEC=9 Then QuitLoop EndIf
    If CHAVEC=1 Then Controle_Dia() EndIf

    ANT_DEST   =[Codigo da Destinacao]
    ANT_NCARREG=[Numero_Carregamento ]
    ANT_DTEMI  =[Data de Emissao     ]
    ANT_DTSAI  =[Data de Saida       ]
    ANT_DTACE  =[Data de Acerto      ]
    ANT_CDTAB  =[Codigo da Tabela    ]

    While FACA_CHAVEI
      While True
        CHAVEI()
        If CHAVEI=9 Then QuitLoop EndIf
        INICIA_REGISTRO()
        DIGITAI()
        If CHAVEI<>9
           Then If CHAVEI<>8
                   Then ESTOQUE()
                        ATUA_PEDIDO_ORCAMENTO()
                EndIf
        EndIf
      EndWhile
      While FACA_DIGITAF
        DIGITAF()
        If CHAVEF=0
           Then FACA_DIGITAC=False
                FACA_CHAVEI =False
        EndIf
        QuitLoop
      EndWhile
    EndWhile
  EndWhile
  If OPCAO_FORM="F"
     Then PickForm "F"
  EndIf

  SaveTables

EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All

