;** ECFAC  *********************************************************************
;*  Acerto de Cupom Fiscal                                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido  em: 31/08/2002 por Anivel Augusto Rodrigues
;Alterado em     : 07/04/2004 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 30/12/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 06/09/2012 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando for parcelas fixas "PARAM_DATAS_VENCTOS"    
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CL=CartÆo Parcelado
;Ultima Alteracao: 16/05/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado GetP_Fatura()

;*******************************************************************************
;* Rotina para Controlar Chave da Nota Fiscal                                  *
;*******************************************************************************
Proc CHAVEC()
COPIOU_REGISTRO=False
FACA_DIGITAC =True
NF_Cancelada =False
While True
  Moveto "Notac"
  End
  Moveto [Codigo da Empresa]
  
  If OPCAO_FORM="4"
     Then Down
     Else PgDn PgDn PgDn PgDn
  EndIf

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

  MSGCAMPO=Field()
  
  If Field()="Codigo do Documento" Or
     Field()="Codigo da Empresa"
     Then TECLA="F1=Tabelas"
     Else TECLA=""
  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="4"
                Then OPCAO_FORM="5"
                Else OPCAO_FORM="4"
             EndIf
             Del
             CHAVEC=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":

             If OPCAO_FORM="4"
                Then PAGINA("NotaC","MR")
                Else PAGINA("NotaC","MT")
             EndIf
             CHAVEC=0
             EMPRESA=[Codigo da Empresa  ]
             NUMDOC =[Numero do Documento]
             SERIE  =[Serie do Documento ]
             If EDITAR="S"
                Then If OPCAO_FORM="4"
                        Then PickForm "5"
                     EndIf
                     Return
                Else If EXCLUIR="S"
                        Then MENSAGEM("Fun‡„o Invalida")
                     EndIf
                     QuitLoop
             EndIf
        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
                       If OPCAO_FORM="4"
                          Then PickForm "5"
                       EndIf
                       Moveto [Codigo da Empresa]
                       Locate EMPRESA,NUMDOC,SERIE
                       If Retval
                          Then CHAVEC=0
                          Else CHAVEC=1
                               PgDn PgDn PgDn PgDn
                               [Codigo da Empresa       ] = EMPRESA
                               [Numero do Documento     ] = NUMDOC
                               [Codigo do Documento     ] = CODDOC
                       EndIf
                       If IsLockRecord()
                          Then If OPCAO_FORM="4"
                                  Then PickForm "4"
                               EndIf
                               QuitLoop
                       EndIf
                       Return
             EndSwitch
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (ChaveC)

;*******************************************************************************
;* Rotina para Digitacao da Cabeca                                             *
;*******************************************************************************
Proc DigitaC()
FACA_DIGITAF =True
Moveto "NotaC"
If [Situacao]="C"
   Then Mensagem("Nota Fiscal Cancelada !")
        CHAVEC=9
        Return
EndIf
If [Forma de Pagamento]="NO"
   Then Mensagem("Cupom de Venda a Prazo !")
        CHAVEC=9
        Return
EndIf
If Not Carrega_Parametros()
   Then If CHAVEC=1
           Then Del
        EndIf
        CHAVEC=9
        Return
   Else If CHAVEC=1
          Then [Codigo da Destinacao    ] = PARAM_DESTINACAO
               [Codigo da Transportadora] = PARAM_TRANSPORTADORA
               [Codigo da Tabela        ] = PARAM_TABELA_PRECO
        Endif
EndIf

Moveto [Data de Acerto]
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"
         Then TECLA=TECLA + "F1=Tabelas  "
      EndIf

      Prompt TECLA

      MSGCAMPO=Field()

      If Field()="Comissao Paga"
         Then MSGCAMPO="Cupom Faturado (Sim/N„o)"
      EndIf

    ;;If Field()="Data de Acerto" And IsBlank([Data de Acerto])
    ;;   Then [Data de Acerto]=Today()
    ;;EndIf

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

      Switch
      Case RetVal="F1":
           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"
              Then CONSULTAF1()
            EndIf
      Case RetVal="PGDN" And Not Isblank([Data de Acerto]):
           If Checagem_Pagina1() Then QuitLoop EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="ESC":
           Switch

           Case Field()="Data de Acerto":
                If CHAVEC=1
                   Then Del
                   Else If RecordStatus("Modified")=True
                           Then Undo
                        EndIf
                EndIf
                CHAVEC=9
                QuitLoop
           OtherWise:
                Left
           EndSwitch
      Case Retval="ENTER":
           Switch
           Case Field()="Data de Acerto":
                If IsBlank([]) Then []=Today() EndIf
                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

Private CAMPOS_OK, NCAMPO

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 CAMPOS_OK
  Then Moveto "NotaC"
       Moveto Field NCAMPO
       Return False
EndIf

;*** Aliquota do Estado ***
Moveto [UF]
Ativa_Lookup()
Moveto [UF]
Locate [NotaC->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=""

Moveto [Codigo da Destinacao]
Ativa_Lookup()
Moveto [Codigo da Destinacao]
Locate [NotaC->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]
EndIf
KeyPress "ESC"
[Aliquota de ICMS         ]=UF_ALIQUOTA_ICMS

;*** Tabela de Kilometragem ***
Moveto [Codigo]
Ativa_Lookup()
Moveto [Codigo]
Locate [NotaC->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 "NotaC"
Return True
EndProc   ;  (Checagem_Pagina1)

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

Moveto "NotaC"
Moveto [Forma de Pagamento]
While True

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

      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"

    Switch
      Case RetVal="F1":
           If Field()="Forma de Pagamento"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4":
           CALC_VENCTOS()
           Moveto [Forma de Pagamento]
      Case RetVal="F8":
           Moveto "NotaV"
           While True
               CHAVEV()
               If CHAVEV=9 Then QuitLoop EndIf
               DIGITAV()
           EndWhile
           Moveto [Valor]
           TOT_VECTOS=ImageCSum()
           Moveto "NotaC"
           If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
              Then MSG="Valor total dos vencimentos difere da nota fiscal !//"
                   MSG=MSG+"Vencimentos= "+StrVal(TOT_VECTOS)
                   MSG=MSG+"   Nota Fiscal= "+StrVal([Valor Nota Fiscal])
                   MSG=MSG+"// Diferen‡a= "+StrVal([Valor Nota Fiscal]-TOT_VECTOS)
                   Mensagem(MSG)
           EndIf
           Moveto [Forma de Pagamento]
      Case RetVal="PGUP":
           CHAVEF=9
           QuitLoop
      Case RetVal="PGDN":
           If IsBlank([Tipo de Pagamento])     Then Mensagem("Tipo Pagto Invalido !")  Loop EndIf
           If Search("VEND",[NotaC->Descricao da Destinacao])>0
              Then Moveto "NotaV"
                   Moveto [Valor]
                   TOT_VECTOS=ImageCSum()
                   Moveto "NotaC"
                   If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                      Then MSG="O valor total dos vencimentos difere do valor da nota fiscal !//"
                           MSG=MSG+"Finalizar assim mesmo ?"
                           ConfGeral(MSG)
                           If OK<>"S"
                              Then Loop
                           EndIf
                   EndIf
           EndIf
           QuitLoop
      Case RetVal="ESC":
        Switch
           Case Field()="Forma de Pagamento":
                CHAVEF=9
                QuitLoop
           OtherWise:
                Left
        EndSwitch
      Case RetVal="ENTER":
        Switch
           Case Field()="Forma de Pagamento":
                If IsBlank([]) Then Loop EndIf
           OtherWise:
                Right
        EndSwitch
    EndSwitch
EndWhile
EndProc   ; (DigitaF)

;*******************************************************************************
;* 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 "NotaV"
           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":
                  [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
                  CancelDialog
             Case Campo="ABC_Frete"     : Campo="Frete_Incluso"
             Case Campo="Valor_Frete"   : Campo="ABC_Frete"
             Case Campo="AICMS_Frete"   : Campo="Valor_Frete"
             Case Campo="CFO_Frete"     : Campo="AICMS_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=NDecimal((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 BCICMS Frete ]=VSD_ABCICMS_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="CFO_Frete"
                  EndIf
             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 "NotaV"
                                  [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  =[NotaC->Razao Social]
                                  VSD_Cidade=[NotaC->Cidade      ]
                                  VSD_UF    =[NotaC->Uf          ]
                                  VSD_CPF   =[NotaC->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 "NotaV"
                                 [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 "NotaV"
                                 [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<[NotaC->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 "NotaV"
                                  [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 de Cheques                                                        *
;*******************************************************************************
Proc Digita_Cheque()
INICIO_DIALOG=True
OP_SHOWD="Cheque"
Echo Normal
Echo Off

Moveto "NotaV"
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 "NotaV"
VSD_NCartao   =[Numero do Cartao    ]
VSD_NomeCartao=[Nome do Cartao      ]

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

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

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

Enddialog

EndProc

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

Moveto "NotaV"
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 Calculo de Vencimentos                                          *
;*******************************************************************************
Proc Closed CALC_VENCTOS()
UseVars AutoLib, ErrorProc, PARAM_DATAS_VENCTOS

Private Contador_Repeticao, ncc, NPC, i, pos_s, NP,
        VRVENCTO, VRDIFERE, j, NDIAS,
        DIA_VECTO, MES_VECTO, ANO_VECTO

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

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

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

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

j=1
i=1
While i<=NP
  pos_s=SearchFrom("/",[NotaC->Composicao de Dias],j)
  If pos_s=0
     Then If i>1
             Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,(Len([NotaC->Composicao de Dias])-(j-1))))
             Else If Not IsBlank([NotaC->Composicao de Dias])
                     Then NDIAS=NumVal(SubStr([NotaC->Composicao de Dias],j,Len([NotaC->Composicao de Dias])))
                     Else NDIAS=0
                  EndIf
          EndIf
     Else NDIAS=NumVal(SubStr([NotaC->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([NotaC->Data de Emissao])
                  MES_VECTO=Month([NotaC->Data de Emissao])
                  ANO_VECTO=Year([NotaC->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)+"."+StrVal(ANO_VECTO))
             Else [Numero de Dias   ]=NDIAS*i
                  [Data             ]=[NotaC->Data de Emissao]+(NDIAS*i)
          EndIf
     Else [Numero de Dias   ]=NDIAS
          [Data             ]=[NotaC->Data de Emissao]+NDIAS
  EndIf
  If i<>NP
     Then [Valor]=VRVENCTO
     Else [Valor]=VRVENCTO+VRDIFERE
  EndIf
  [Forma de Pagamento]=[NotaC->Forma de Pagamento]

  i=i+1
EndWhile

Moveto "NotaC"

EndProc    ; (Calc_Venctos)

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

  While True

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

        Prompt TECLA

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

        Switch
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             PAGINA("NotaV","MR")
             If EDITAR="S"
                Then CHAVEV=0
                     SEQ=[Sequencia]
                     Return
                Else If EXCLUIR="S"
                        Then CONFIRMA()
                             If OK="S"
                                Then Del
                             EndIf
                     EndIf
                     QuitLoop
             EndIf
        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
                    []=[NotaC->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)

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

If IsEmpty("P_Fatura")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Return False
EndIf
If not GetP_Fatura(VSDGEMPRESA)
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Return False
   Else Return True      
EndIf

EndProc ; (Carrega_Parametros)

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

View NOWINDOW "P_Fatura"
View NOWINDOW "NotaV"

EndProc  ; (Carrega_Tabelas)

;*******************************************************************************
;* Rotina Principal Nota Fiscal                                                *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,"+
        "\\Sistemas\\Cadastro\\Bib_Show,"+
        "\\Sistemas\\Cadastro\\Bib_Parm,"+
        "\\Sistemas\\Vendas\\Bib_Fat"
If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
PARAM_EMPRESA=SYS_EMPRESA_DEFAULT
PARAM_CONSIGNACAO="N"
Carrega_Tabelas()

ANT_EMPRESA=""
ANT_CDDOCTO=""

CoEdit "NotaC"
PickForm "5"
Moveto "NotaC"
PickForm "4"
OPCAO_FORM="4"

While True
  CHAVEC()
  If CHAVEC=9 Then QuitLoop EndIf
  If CHAVEC=5
     Then If OPCAO_FORM="4"
             Then PickForm "4"
             Else PickForm "5"
          EndIf
          Loop
  EndIf
  While FACA_DIGITAC
    DIGITAC()
    If CHAVEC=9 Then QuitLoop EndIf
    While FACA_DIGITAF
      DIGITAF()
      If CHAVEF=0
         Then FACA_DIGITAC=False
              FACA_CHAVEI =False
      EndIf
      QuitLoop
    EndWhile
  EndWhile
  If OPCAO_FORM="4"
     Then PickForm "4"
  EndIf
EndWhile
Do_It!
ClearAll
Release Vars All
Release Procs All
