;** GeraOfPd *******************************************************************
;* Ordem de Faturamento sobre Pedidos                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 23/05/2006 por Anivel Augusto Rodrigues
;Ultima Alteracao: 31/07/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CUSTO=0->CUSTO=[Ultimo Custo Total]

;*******************************************************************************
;* Rotina p/ Selecionar e Ordernar Registros                                   *
;*******************************************************************************
Proc Seleciona()
ClearAll

{Ask} {PedidoC} Check
Moveto [Codigo da Empresa  ] TypeIn "~VSDGEMPRESA.."
If VSDGOPDT="E"
   Then Moveto [Data de Emissao    ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
   Else Moveto [Data_Inclusao      ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
EndIf
Moveto [Numero_Carregamento] TypeIn "~VSDGNCARREG.."
Moveto [Situacao do Pedido ] TypeIn "ABERTO"
Do_It!
ClearAll

If VSDGOPDT="E"
   Then Return
EndIf

For i From 1 To 2
  {Ask} {Answer} TypeIn "Fast Delete"
  If i=1
     Then Moveto [Data_Inclusao          ] TypeIn "~VSDGDTINI"
          Moveto [Hora_Inclusao          ] TypeIn "<~VSDGHRINI"
     Else Moveto [Data_Inclusao          ] TypeIn "~VSDGDTFIM"
          Moveto [Hora_Inclusao          ] TypeIn ">~VSDGHRFIM"
  EndIf
  Do_It!
  ClearAll
EndFor

EndProc    ; (Seleciona)

;*******************************************************************************
;* Rotina para transferir dados do cupom para a nota                           *
;*******************************************************************************
Proc Gera_OF()

ClearAll
If Not Carrega_Parametros()
   Then Return
EndIf

CoEdit "\\Sistemas\\CtaRec\\Duplic",
       "\\Sistemas\\CheqRec\\ChequeI",
       "\\Sistemas\\Cadastro\\FichaCli",
       "PedidoC","PedidoI",
       "FaturaI","FaturaV","FaturaC","Answer"

;nof=1

NR = NRecords("Answer")
Moveto "Answer"
Scan
  NPED=[Answer->Numero do Pedido]

  Barra(NR, RecNo())
  Aguarde("Aguarde, Processando Pedido: "+NPED+" /"+StrVal(Recno())+" "+BARRA_STRING)

  Moveto "PedidoI"
  Moveto [Numero do Pedido]
  Locate NPED
  If Not Retval
     Then Mensagem("Itens do Pedido "+NPED+" n„o encontrados.//  Verifique.")
          Moveto "Answer"
          Loop
  EndIf

  Moveto "PedidoC"
  Moveto [Numero do Pedido]
  Locate NPED
  If Not RetVal
     Then Mensagem("Pedido "+NPED+" n„o encontrado, Verificar !")
          Moveto "Answer"
          Loop
  EndIf

  Moveto "FaturaC"
  PickForm "1"
  ;Echo Normal
  While True
    End

    ORDFAT=[Numero da OF]
    If IsBlank(ORDFAT)
       Then ORDFAT="1"
       Else ORDFAT=StrVal(NumVal(ORDFAT)+1)
    EndIf
    ORDFAT=ALINHM(ORDFAT,6)

    ;;nof=nof+1
    ;;ORDFAT=ALINHM(StrVal(nof),6)

    Moveto [Numero da OF]
    Locate ORDFAT
    If Not Retval
       Then End PgDn PgDn PgDn PgDn
            [Numero da OF]=ORDFAT
            If Not IsLockRecord()
               Then QuitLoop
               Else Del
            EndIf
    EndIf
  EndWhile

  ;Echo OFF

  NOVO_PEDIDO      =True
  NOVA_DESTINACAO  =True

  [Numero do Pedido        ]=NPED

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

  V_PEDIDO=[Numero do Pedido]
  [Numero do Pedido]=""
  [Numero do Pedido]=V_PEDIDO

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

  V_REPRES =[Codigo do Representante]
  [Codigo do Representante]=""
  [Codigo do Representante]=V_REPRES

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

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

  V_PEDIDO=[Numero do Pedido]
  [Numero do Pedido]=""
  [Numero do Pedido]=V_PEDIDO

  V_VEICU  =[Codigo do Veiculo]
  [Codigo do Veiculo]=""
  [Codigo do Veiculo]=V_VEICU

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

  Echo Normal
  Echo Off
  If Not Checagem_Pagina1()
     Then Mensagem("Pedido "+NPED+" n„o faturado, Verificar !")
          Del
          FormKey
          Moveto "Answer"
          Loop
  EndIf
  If Search("VEND",[Descricao da Destinacao])>0
     Then Mensagem_Venda()
  EndIf

  Moveto [Numero_Carregamento]
  Ativa_Lookup()
  Moveto [Numero_Carregamento]
  Locate [FaturaC->Numero_Carregamento]
  If RetVal
     Then V_VEICU  =[Codigo do Veiculo]
          KeyPress "ESC"
          [Codigo do Veiculo]=V_VEICU
     Else KeyPress "ESC"
  EndIf

  ENDERECOS()
  Controle_Dia()

  ;****** Excluir Item da Fatura se existir **************************
  Moveto "FaturaI"
  While Not RecordStatus("New")
    Del
  EndWhile

  ;****** Fatura Itens Pedido ***********************
  Moveto "Faturac"
  If Checagem_Saldos()
     Then ;****** Fatura Itens Pedido ***********************
          FATURA_PEDIDO_ORCAMENTO()
          ;****** Gera Cabeca da OF *************************
          Moveto "Faturac"
          Fechar_Fatura()
     Else Moveto "Faturac"
          Del
          FormKey
  EndIf

  Moveto "Answer"
EndScan
Do_It!
ClearAll

Delete "Answer"

Echo Normal
Echo Off
Mensagem("Fim do processo !")

EndProc  ;

;*******************************************************************************
;* Rotina Fechar Fatura                                                       **
;*******************************************************************************
Proc Fechar_Fatura()

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

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

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

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

VRMERC=0
VRSERV=0
Moveto "FaturaI"
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 [Tributacao de INSS]="D"
     Then For I From 1 To 10
              If Not IsBlank(AINSS[I])
                 Then If AINSS[I]=[Aliquota de INSS]
                         Then BCINSS[I]=BCINSS[I]+[Preco Total]
                              VIINSS[I]=VIINSS[I]+[Valor do INSS]
                              QuitLoop
                      EndIf
                 Else AINSS[I]=[Aliquota de INSS]
                      BCINSS[I]=[Preco Total]
                      VIINSS[I]=VIINSS[I]+[Valor do INSS]
                      QuitLoop
              EndIf
          EndFor
  EndIf

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

          If [Tributacao de IR]="D"
             Then For I From 1 To 10
                      If Not IsBlank(AIR[I])
                         Then If AIR[I]=[Aliquota de IR]
                                 Then BCIR[I]=BCIR[I]+[Preco Total]
                                      VIIR[I]=VIIR[I]+[Valor do IR]
                                      QuitLoop
                              EndIf
                         Else AIR[I] =[Aliquota de IR]
                              BCIR[I]=[Preco Total]
                              VIIR[I]=VIIR[I]+[Valor do IR]
                              QuitLoop
                      EndIf
                  EndFor
          EndIf
  EndIf
EndScan

Moveto "FaturaC"
;**** Recalcular Desconto ?????
CALC_OF()

If PARAM_CPGTO_ITEM="S"
   Then Calc_Venctos_Itens()
   Else If IsBlank([Composicao de Dias]) And [Tipo de Pagamento]<>"O"
           Then Mensagem("OF "+ORDFAT+", Pedido "+NPED+" incompleto, Verificar !//"+
                         "Informe a Composi‡Æo de Dias para se calcular os Vencimentos!")
        EndIf
        Calc_Venctos()
EndIf

If IsBlank([Tipo de Pagamento])
   Then Mensagem("OF "+ORDFAT+", Pedido "+NPED+" incompleto, Verificar !//"+
                 "Tipo Pagto Invalido !")
EndIf
If IsBlank([Forma de Pagamento]) And [Tipo de Pagamento]<>"O"
   Then Mensagem("OF "+ORDFAT+", Pedido "+NPED+" incompleto, Verificar !//"+
                 "Forma Pagto Invalido !")
EndIf
If Search("VEND",[FaturaC->Descricao da Destinacao])>0
   Then If [Tipo de Pagamento]<>"O"
           Then Moveto "FaturaV"
                TOT_VECTOS=0
                CHAVEV=0
                Scan
                  If [Data]<[FaturaC->Data de Emissao]
                     Then CHAVEV=1
                          MSG="OF "+ORDFAT+", Pedido "+NPED+" incompleto, Verificar !//"
                          MSG="Vencimento invalido !// //"
                          MSG=MSG+"Vencimento ["+StrVal([Sequencia])+"] de "+Format("D13",[Data])
                          MSG=MSG+" inferior a data de emiss„o !"
                          Mensagem(MSG)
                  EndIf
                  TOT_VECTOS=TOT_VECTOS+[Valor]
                EndScan
                Moveto "FaturaC"
                If StrVal(TOT_VECTOS)<>StrVal([Valor Nota Fiscal])
                   Then Mensagem("OF "+ORDFAT+", Pedido "+NPED+" incompleto, Verificar !//"+
                                 "O Valor Total dos Vencimentos Difere do Valor da Nota Fiscal !")
                EndIf
        Endif
EndIf



If IsBlank([Codigo da Transportadora])
   Then Mensagem("OF "+ORDFAT+", Pedido "+NPED+" incompleto, Verificar !//"+
                 "Transportador Invalido !")
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

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

CALC_VOLUMES()

Moveto "Faturac"
UnLockRecord
FormKey

SaveTables

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

EndProc

;*******************************************************************************
;* Rotina Atualizacao do Estoque (Inclusao, Alteracao e Exclusao)             **
;*******************************************************************************
Proc Estoque()
CUSTO=BlankNum()
If [FaturaC->Atualiza Estoque]<>"S" Or
   IsBlank([FaturaI->Codigo do Item]) Or
   [FaturaI->Tipo do Item]="C" Or [FaturaI->Tipo do Item]="D" Or [FaturaI->Tipo do Item]="F" Or
   [FaturaI->Tipo do Item]="G" Or [FaturaI->Tipo do Item]="H" Or [FaturaI->Tipo do Item]="I"
   Then Return
EndIf

If Not IsBlank([FaturaC->Data de Saida])
   Then MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Saida]))
   Else MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Emissao]))
EndIf

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

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

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

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

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

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

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

If Not IsBlank([FaturaC->Data de Saida])
   Then MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Saida]))
   Else MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
        ANO_EST = StrVal(Year([FaturaC->Data de Emissao]))
EndIf

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

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

UnLockRecord

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


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


;*******************************************************************************
;* Faturamento de Pedido ou Orcamento Automatico                               *
;*******************************************************************************
Proc FATURA_PEDIDO_ORCAMENTO()
Private PED_ORC_FATURAR, PED_ORC_TITULO, OK, PED_ORC_FAT, SEQI, Atualiza

PED_ORC_FATURAR=[FaturaC->Numero do Pedido   ]

Moveto "FaturaC"
If PARAM_PEDIDO="S"
   Then [Numero Pedido_Orcamento]=PED_ORC_FATURAR
        Moveto "PedidoC"
        If RecordStatus("New")
           Then Mensagem("Pedido n„o Encontrado !")
                Return
           Else If [Codigo]<>[FaturaC->Codigo]
                   Then Mensagem("Pedido c/ Cliente diferente desta Fatura !")
                        Return
                EndIf
        EndIf
        Moveto "PedidoI"
   Else [Numero Pedido_Orcamento]=PED_ORC_FATURAR
        Moveto "OrcaC"
        If RecordStatus("New")
           Then Mensagem("Or‡amento n„o Encontrado !")
                Return
           Else If [Codigo]<>[FaturaC->Codigo]
                   Then Mensagem("Or‡amento c/ Cliente diferente desta Fatura !")
                        Return
                EndIf
        EndIf
        Moveto "OrcaI"
EndIf

Scan For ([Quantidade]-[Quantidade Faturada])>0
  Moveto "FaturaI"
  End
  SEQI=[Item da Of]
  If Isblank(SEQI)
     Then SEQI="1"
     Else SEQI=StrVal(NumVal(SEQI)+1)
  EndIf
  If NumVal(SEQI)>900
     Then Mensagem("Numero Maximo de Itens 900 permitidos !")
          QuitLoop
  EndIf
  Down

  [Numero da Of]=[FaturaC->Numero da Of]
  [Item da Of  ]=NumVal(SEQI)
  COPIA_PED_ORC_FATURA()
;;Echo Normal
;;Echo Off


  CHAVEI=1
  ATUALIZA=True
  If Not Checa_Estoque()
     Then MSG=    "OF "+ORDFAT+", Pedido "+NPED+"    Item do Pedido: "+StrVal([Item Pedido_Orcamento])+"// //"
          MSG=MSG+"Item: "+[Codigo do Item]+" - "+SubStr([Descricao do Item ],1,30)+"// //"
          MSG=MSG+"Quantidade pedida: "+StrVal(Format("W11.3,EICB",[Quantidade]))+"//"
          MSG=MSG+"- Estoque atual  : "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
          MSG=MSG+"                   -------------"                             +"//"
          MSG=MSG+"Falta em estoque : "+StrVal(Format("W11.3,EICB",NOVOSALDO*-1))+"// //"
          If PARAM_BAIXA_PARCIAL="S"
             Then If SALDOATUAL<=0
                     Then Del
                          ATUALIZA=False
                     Else MSG=MSG+"Faturando parcial: "+StrVal(Format("W11.3,EICB",SALDOATUAL))  +"//"
                  Endif
             Else Del
                  Atualiza=False
          EndIf

          If Not ATUALIZA
             Then MSG=MSG+"Item n„o pode ser Faturado por Saldo Insuficiente !//"
             Else [Quantidade]=SALDOATUAL
                  If [Quantidade]>0 and [Preco Unitario]>0
                      Then [Preco Total]=Round([Quantidade]*([Preco Unitario]-[Valor Desconto Unitario]),2)
                      Else If [Preco Unitario]>0
                              Then [Preco Total]=Round([Preco Unitario]-[Valor Desconto Unitario],2)
                           EndIf
                  EndIf

                  If [Tributacao de ICMS]<>"D"
                     Then If Not IsBlank([Tributacao de ICMS      ])
                              Then [Aliquota Reduzida BCICMS]=BlankNum()
                                   [Aliquota de ICMS        ]=BlankNum()
                                   [Valor do ICMS           ]=BlankNum()
                           EndIf
                  EndIf

                  If [Aliquota Reduzida BCICMS]>0 And
                     [Aliquota de ICMS        ]>0
                     Then [Valor do ICMS]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCICMS])/100))*[Aliquota de ICMS])/100,2)
                     Else [Valor do ICMS]=NDecimal(([Preco Total]*[Aliquota de ICMS])/100,2)
                  EndIf

                  If [Aliquota Reduzida BCIPI ]>0 And
                     [Aliquota de IPI         ]>0
                     Then [Valor do IPI ]=NDecimal((([Preco Total]-(([Preco Total]*[Aliquota Reduzida BCIPI ])/100))*[Aliquota de IPI])/100,2)
                     Else [Valor do IPI ]=NDecimal(([Preco Total]*[Aliquota de IPI ])/100,2)
                  EndIf
                  UnLockRecord
          EndIf
          Mensagem(MSG)
  EndIf

  If ATUALIZA
     Then ESTOQUE()
  EndIf

  If PARAM_PEDIDO="S"
     Then Moveto "PedidoI"
     Else Moveto "OrcaI"
  EndIf

  If ATUALIZA
     Then If (PARAM_ORCAMENTO="S") Or
             (PARAM_PEDIDO   ="S" And DESTIN_ATUALIZA_PEDIDOS="S")
             Then [Quantidade Faturada]=[Quantidade Faturada]+[FaturaI->Quantidade]
                  UnlockRecord
          EndIf
     Else ConfGeral("Continuar faturando os outros Itens deste pedido ?")
          If OK<>"S"
             Then Quitloop
          EndIf
  EndIf
EndScan
ATUA_SITUACAO_PEDIDO_ORCAMENTO()
EndProc   ;  (Fatura_Pedido_Orcamento)

;*******************************************************************************
;* Rotina para Chegagem de Saldos                                              *
;*******************************************************************************
Proc Checagem_Saldos()
Private PED_ORC_FATURAR, OK, wcp, wcf,qtd

If SYS_CODIGO_CLIENTE<>"0117"
   Then Return True
EndIf
Moveto "FaturaI"
Moveto "FaturaC"

[Numero Pedido_Orcamento]=[Numero do Pedido]
If PARAM_PEDIDO="S"
   Then Moveto "PedidoI"
   Else Moveto "OrcaI"
EndIf

Ok=True
wcp=0
wcf=0
Scan
  wcp=wcp+1
  If ([Quantidade]-[Quantidade Faturada])>0
     Then While True
            qtd=[Quantidade]-[Quantidade Faturada]
            If [FaturaC->Atualiza Estoque]<>"S" Or
               IsBlank([Codigo do Item]) Or
               [Tipo do Item]="C" Or [Tipo do Item]="D" Or [Tipo do Item]="F" Or
               [Tipo do Item]="G" Or [Tipo do Item]="H" Or [Tipo do Item]="I"
               Then wcf=wcf+1
                    QuitLoop
            EndIf

            If Not IsBlank([FaturaC->Data de Saida])
               Then MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Saida])),2)
                    ANO_EST = StrVal(Year([FaturaC->Data de Saida]))
               Else MES_EST = AlinhM(StrVal(Month([FaturaC->Data de Emissao])),2)
                    ANO_EST = StrVal(Year([FaturaC->Data de Emissao]))
            EndIf

            Moveto "\\Sistemas\\Estoque\\SdEstq"
            Locate [FaturaC->Codigo da Empresa],
                   [PedidoI->Codigo do Item   ], ANO_EST, MES_EST
            If RetVal
               Then SALDOATUAL=[Saldo Atual]
                    If IsBlank(SALDOATUAL)
                       Then SALDOATUAL=0
                    EndIf
               Else SALDOATUAL=0
            EndIf

            NOVOSALDO=NDecimal([Saldo Atual]-qtd,3)

            If NOVOSALDO>=0
               Then wcf=wcf+1
               Else MSG=    "Pedido "+NPED+" - "+[FaturaC->Nome Fantasia EmitDest]+"// //"
                    MSG=MSG+"Item: "+[PedidoI->Codigo do Item]+" - "+Completa(SubStr([PedidoI->Descricao do Item ],1,30),31," ")+"// //"
                    MSG=MSG+"Estoque Insuficiente, Verificar !"
                    Mensagem(MSG)
            EndIf
            QuitLoop
          EndWhile
  EndIf

  If PARAM_PEDIDO="S"
     Then Moveto "PedidoI"
     Else Moveto "OrcaI"
  EndIf

EndScan

Moveto "FaturaC"
[Numero Pedido_Orcamento]=""

If wcp<>wcf
   Then Ok=False
        MSG=    "O Pedido "+NPED+" - "+[FaturaC->Nome Fantasia EmitDest]+",//n„o foi FATURADO !!"
        Mensagem(MSG)
EndIf

Return Ok
EndProc

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

View "P_Fatura"
Moveto [Codigo_Empresa]
Locate VSDGEMPRESA
If Not RetVal
   Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
        ClearImage
        Return False
EndIf

PARAM_EMPRESA                  =[Codigo_Empresa           ]
PARAM_DESTINACAO               =[Codigo_Destinacao        ]
PARAM_CONTA_CAIXA              =[Codigo_Conta_Caixa       ]
PARAM_DATAS_VENCTOS            =[Datas_Vencimentos        ]
PARAM_COR_TECIDO               =[Cor_Tecido               ]
PARAM_TAMANHO                  =[Tamanho                  ]
PARAM_DESCUNIT                 =[Desconto Unitario        ]
PARAM_VOLUMES                  =[Volumes                  ]
PARAM_SUBSTICMS                =[Substituicao ICMS        ]
PARAM_PEDIDO                   =[Utiliza_Pedido           ]
PARAM_ORCAMENTO                =[Utiliza_Orcamento        ]
PARAM_ORDEM_SERVICO            =[Utiliza_OS               ]
PARAM_BLOQUEIA_NEG             =[Bloqueia_Estoque_Negativo]
PARAM_MULT_BCICMS              =[Multiplas_BC_ICMS        ]
PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
PARAM_IMPOSTOS                 =[Impostos                 ]
PARAM_TABELA_PRECO             =[Tabela_Preco             ]
PARAM_TRANSPORTADORA           =[Codigo_Transportadora    ]
PARAM_FORMA_PAGTO              =[Codigo_Forma_Pagto       ]
PARAM_TRANSFERENCIA            =[Utiliza_Transferencia    ]
PARAM_CONSIGNACAO              ="N"
PARAM_CHEQUES                  =[Utiliza_Controle_Cheques ]
PARAM_RELAT_NF                 =[Script_Impressao_NF      ]
PARAM_RELAT_ROMA               =[Script_Impressao_Romaneio]
PARAM_RELAT_NP                 =[Script_Impressao_NP      ]
PARAM_NITENS                   =[Numero_Itens             ]
PARAM_TAMANHO_DESCR            =[Tamanho_Descricao_Item   ]
PARAM_NLINHAS_OBS              =[NLinhas_Obs_Campo_Itens  ]
PARAM_NLCHQ_IGUAL_NF           =[NLCheque_Igual_NF        ]
PARAM_NVIAS_ROMANEIO           =[NVias_Romaneio           ]
PARAM_LIMITE_CREDITO           =[Utiliza_Limite_Credito   ]
PARAM_ALTERA_PRECO             =[Utiliza_Alteracao_Preco  ]
PARAM_DIAS_ATRASO              =[Utiliza_Dias_Atraso      ]
PARAM_CUPOM_FISCAL             =[Utiliza_Cupom_Fiscal     ]
PARAM_UTILIZACDBARRA           =[Utiliza_Codigo_Barras    ]
PARAM_BLOQUEIA_NF              =[Bloqueia_Reemissao_NF    ]
PARAM_AVISTAAUTOMAT            =[Gera_VendasVista_Automat ]
PARAM_APRAZOAUTOMAT            =[Gera_VendasPrazo_Automat ]
PARAM_AVISTADUPLIC             =[Gera_Duplicatas_AVista   ]
PARAM_TXJUROS                  =[Duplicata_TxJuros        ]
PARAM_FORMA_TXJUROS            =[Duplicata_Forma_TxJuros  ]
PARAM_DUPLIC_NUMERO            =[Gera_Duplicatas_Numero   ]
PARAM_CONTROLA_NITENS          =[Controla_Numero_Itens    ]
PARAM_COMIS_ITEM               =[Comissao_Item            ]
PARAM_COMIS_MARCA              =[Utiliza_Comissao_Marca   ]
PARAM_CPGTO_ITEM               =[Utiliza_Cond_Pagto_Item  ]
PARAM_TABPR_ITEM               =[Utiliza_Tabela_Preco_Item]
PARAM_COMIS_VENCTO             =[Calcula_Comissao_Vencto  ]
PARAM_VISITA                   =[Utiliza_Visita           ]
PARAM_BLOQUEIA_AUTORI          =[Bloqueia_Autorizados     ]

If SYS_CODIGO_CLIENTE="0052"
   Then PARAM_BLOQPED_NEG="N"
   Else PARAM_BLOQPED_NEG="S"
EndIf

PARAM_UTILIZA_COMISSAO_VENDEDOR=[Utiliza_Comissao_Vendedor]
PARAM_RATEIO_COMISSAO          =[Utiliza_Rateio_Comissao  ]
PARAM_TRANSF_ULTCT             =[Utiliza_UltCust_Transfer ]
PARAM_UTILIZA_COMISSAO_VENDREAL=[Utiliza_Comissao_VendReal]
PARAM_UTILIZA_TABPR_CLIENTE    =[Utiliza_TabPreco_Cliente ]
PARAM_UTILIZA_TABPR_REPRES     =[Utiliza_TabPreco_Repres  ]
PARAM_PEGAPRECO_CPAGTO         =[Pega_Preco_Tabela_CPagto ]
PARAM_BAIXA_PARCIAL            =[Utiliza_Baixa_Parcial_Ped]

;;PARAM_BLOQUEIA_NEG             =VSDGBLOQESTQ
;;PARAM_BAIXA_PARCIAL            =VSDGFATPARC

ClearImage
Return True

EndProc ; (Carrega_Parametros)


;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] =  -59:
          Temp=False
          Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_NCARREG"       : Campo="TG_EMPRESA"
            Case Campo="TG_OPDT"          : Campo="TG_NCARREG"
            Case Campo="TG_DTINI"         : Campo="TG_OPDT"
            Case Campo="TG_HRINI"         : Campo="TG_DTINI"
            Case Campo="TG_DTFIM"         : Campo="TG_HRINI"
            Case Campo="TG_HRFIM"         : Campo="TG_DTFIM"
            Case Campo="TG_BLOQESTQ"      : Campo="TG_HRFIM"
            Case Campo="TG_FATPARC"       : Campo="TG_BLOQESTQ"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" : Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG" : Campo="TG_OPDT"
                    Case Campo="TG_OPDT"    : Campo="TG_DTINI"
                         VSDGOPDT=ControlValue("TG_OPDT")
                         Switch
                           Case VSDGOPDT="E": VSDGDESCOPDT="DATA DE EMISSAO"
                           Case VSDGOPDT="I": VSDGDESCOPDT="DATA DE INCLUSAO"
                           OtherWise: Campo="TG_OPDT"
                         EndSwitch
                    Case Campo="TG_DTINI"   : Campo="TG_HRINI"
                    Case Campo="TG_HRINI"   : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   : Campo="TG_HRFIM"
                    Case Campo="TG_HRFIM"   : Campo="YES"

                  ;;Case Campo="TG_HRFIM"   : Campo="TG_BLOQESTQ"
                  ;;Case Campo="TG_BLOQESTQ": Campo="TG_FATPARC"
                  ;;     VSDGBLOQESTQ=ControlValue("TG_BLOQESTQ")
                  ;;     If IsBlank(VSDGBLOQESTQ)
                  ;;        Then VSDGBLOQESTQ="NAO"
                  ;;     EndIf
                  ;;Case Campo="TG_FATPARC" : Campo="YES"
                  ;;     VSDGFATPARC=ControlValue("TG_FATPARC")
                  ;;     If IsBlank(VSDGFATPARC)
                  ;;        Then VSDGFATPARC="SIM"
                  ;;     EndIf
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
     MSG_CAMPO="Informe uma Empresa "
  Case Campo="TG_OPDT":
     MSG_CAMPO="Op‡„o: Emiss„o/Inclus„o "
  Case Campo="TG_BLOQESTQ":
     MSG_CAMPO="Bloqueia Estoque Insuficiente: Sim/N„o"
  Case Campo="TG_FATPARC":
     MSG_CAMPO="Fatura Estoque Parcial: Sim/N„o"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Vendas\\Bib_Fat"
LimpAguarde()

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT="" EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""  EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO ="S" EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  ="S" EndIf
If Not IsAssigned(APLIC_ORIGEM)        Then APLIC_ORIGEM      =""  EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO =""  EndIf
If Not IsAssigned(SYS_NCONEXAO)        Then SYS_NCONEXAO      =""  EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""  EndIf
If Not IsAssigned(SYS_VERSAO_SOO)      Then SYS_VERSAO_SO     ="Windows"  EndIf

;Ler_Captura("")

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

PARAM_RATEIO_COMISSAO=""
PARAM_CONSIGNACAO    ="N"
PARAM_RELAT_NF       =""
INICIO_IMPRESSAO     =True

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

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

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

Array RICMS[10]
Array RIPI[10]

Array dtvencto[12]
Array valorven[12]

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

VSDGEMPRESA =""
VSDGNCARREG =""
VSDGOPDT    ="I"
VSDGDTINI   =Today()
VSDGDTFIM   =Today()
VSDGHRINI  =""
VSDGHRFIM  =""

While True

  ShowDialog "Ordem de Faturamento de Pedidos/Carregamento" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 13 Width 56

    Label  @ 00,02 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,03 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,11 Width 23 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "N§ Carregamento" For "TG_NCARREG"
    Accept @ 03,01 Width 9  "A6"  Picture "#*#" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 03,11 Width 23 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

    Label  @ 04,00 "Op‡„o de Datas" For "TG_OPDT"
    Accept @ 05,01 Width 04 "A1"  Picture "E,I" Tag "TG_OPDT" To VSDGOPDT
    Accept @ 05,06 Width 31 "A20"  Picture "!*!" Tag "TG_DESCOPDT" To VSDGDESCOPDT

    Label  @ 06,00 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 07,00 "de" For "TG_DTINI"
    Accept @ 07,04 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Accept @ 07,18 Width 08 "A5"  Picture "##:##" Tag "TG_HRINI" To VSDGHRINI

    Label  @ 07,26 "at‚" For "TG_DTFIM"
    Accept @ 07,31 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    Accept @ 07,45 Width 08 "A5"  Picture "##:##" Tag "TG_HRFIM" To VSDGHRFIM

;;  Label  @ 08,00 "Bloqueia Estoque" For "TG_BLOQESTQ"
;;  Accept @ 09,01 Width 07 "A3"  Picture "SIM,NAO" Tag "TG_BLOQESTQ" To VSDGBLOQESTQ

;;  Label  @ 08,30 "Fatura Parcial" For "TG_FATPARC"
;;  Accept @ 09,31 Width 07 "A3"  Picture "SIM,NAO" Tag "TG_FATPARC" To VSDGFATPARC

    Pushbutton @ 09,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,28 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  If IsBlank(VSDGEMPRESA)
     Then Mensagem("Empresa Invalida !")
          Loop
  EndIf
  If IsBlank(VSDGDTFIM)
     Then Mensagem("Data Final Invalida !")
          Loop
  EndIf

;;DISPOSITIVO()
;;If OK=""  Then Loop EndIf

  AGUARDE("Aguarde, processando pedidos")

  Seleciona()
  If IsEmpty("Answer")
     Then MENSAGEM("N„o existem registros a processar")
          Loop
  EndIf

  Gera_OF()

EndWhile
ClearAll
Release Vars All
Release Procs All
