;** ProgFund *******************************************************************
;*  Programacao de Fundicao                                                    *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 12/12/2016 por Bruno Carvalho
;Ultima Alteracao: 27/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 25/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desativar tecla alt+O (-24) ir ao prompt do DOS
;Ultima Alteracao: 26/06/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no plano de contas "SAIDA" ou "ENTRADA" -> Fun‡Æo PlContas() p/ verificar o plano de conta informado
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 11/02/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes de padroniza‡Æo nos campos [TG_CIDADE] e [TG_ESTADO]

;*******************************************************************************
;* Rotina para Controlar Chave                                                 *
;*******************************************************************************
Proc CHAVE()
INICIO=True
campocorrente=""

While True
  Moveto "ProgfC"
  End
  Moveto [Numero_ProgramacaoDisco]
  LANCTO=[Numero_ProgramacaoDisco]
   
  If OPCAO_FORM="F" Or OPCAO_FORM="2"
     Then Down
     Else CtrlPgDn
  EndIf
  Moveto [Numero_ProgramacaoDisco]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadrao()

    Switch
        Case RetVal=-33 : SemFuncoes()
        Case RetVal=-94 : MsgTeclasPadrao()
        Case RetVal="F3":
             If OPCAO_FORM="F" Or OPCAO_FORM="2"
                Then OPCAO_FORM="1"
                Else If PROGFUND_ROTINA="PRODUCAO"
                        Then OPCAO_FORM="2"
                        Else OPCAO_FORM="F"
                     EndIf   
             EndIf
             Del
             CHAVE=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               INICIO=True
               campocorrente=""
               If OPCAO_FORM="F" Or OPCAO_FORM="2"
                  Then PAGINA("ProgfC","MR")
                  Else PAGINA("ProgfC","MT")
               EndIf
               CHAVE=0
               LANCTO   =[Numero_ProgramacaoDisco]
               If Not IsBlank([Data_Producao])
                  Then MES=ALINHM(StrVal(Month([Data_Producao])),2)
                       ANO=ALINHM(StrVal(Year([Data_Producao])),4)
                  Else MES="00"
                       ANO="0000"
               EndIf                      
               If EDITAR="S"
                  Then If OPCAO_FORM="F" Or OPCAO_FORM="2" 
                          Then PickForm "1"
                               
                               Moveto "ProgfP" SetaCorRegistro("Padrao")
                               Moveto "ProgfC"
                       EndIf
                       If Checa_Controle([Numero_Controle_Dia])
                          Then Controla_EdicaoC()
                          Else UnLockRecord
                       EndIf
                  Else If EXCLUIR="S"
                           Then If PROGFUND_ROTINA="PRODUCAO"
                                   Then FastMsg("N„o ‚ poss¡vel excluir este registros!")
                                        UnLockRecord
                                   Else If QuerExcluir("") And Checa_Supervisor()
                                           Then If OPCAO_FORM="F" Or OPCAO_FORM="2"
                                                   Then PickForm "1"
                                                EndIf
                                                EXCLUSAO("Cabeca")
                                                If OPCAO_FORM="F" Or OPCAO_FORM="2"
                                                   Then If PROGFUND_ROTINA="PRODUCAO"
                                                           Then PickForm "2"
                                                           Else PickForm "F"
                                                        EndIf   
                                                EndIf
                                           Else UnLockRecord
                                        EndIf
                                EndIf                       
                           Else QuitLoop
                        EndIf
               EndIf
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             CHAVE=9
             Del
             Return                                  
        Case Retval="ENTER" : 
             If PROGFUND_ROTINA="PRODUCAO"
                Then Mensagem("N„o ‚ poss¡vel incluir registros!")
                     Loop
                Else If Numero_Lancamento("","F")
                        Then LANCTO = PROXLANCTO_NLANC
                             Release Vars PROXLANCTO_NLANC 
                        Else QuitLoop
                     EndIf
                     PickForm "1"
                     Moveto "ProgfC"
                     Moveto [Numero_ProgramacaoDisco]
                     If PROXIMO_LANCTO_REG_ACHOU
                        Then CHAVE=0
                             If Checa_Controle([Numero_Controle_Dia])
                                Then Return
                             EndIf
                        Else CHAVE=1
                             If Checa_Controle(SYS_CONTROLE_DIA)
                                Then Return
                                Else If PROGFUND_ROTINA="PRODUCAO"
                                        Then OPCAO_FORM="2"
                                        Else OPCAO_FORM="F"
                                     EndIf
                             EndIf
                     EndIf
                     If OPCAO_FORM="F" Or OPCAO_FORM="2"
                        Then PickForm OPCAO_FORM
                     EndIf
                     If CHAVE=1
                        Then Del
                     EndIf
             EndIf        
             QuitLoop
        EndSwitch
  EndWhile
EndWhile
EndProc   ; (Chave)

;*******************************************************************************
;* Rotina para Digitacao Dados Gerais                                          *
;*******************************************************************************
Proc DIGITA()
                        
If IsBlank(campocorrente)
   Then If [Situacao_Programacao]="FINALIZADA" And INICIO
           Then Mensagem("Programa‡„o de Fundi‡„o Finalizada!")
                If Not Checa_Supervisor()
                   Then CHAVE=9
                        Return
                EndIf
        EndIf

        If INICIO
           Then If Not IsBlank(SYS_EMPRESA_DEFAULT) And CHAVE=1
                   Then [Codigo da Empresa]=SYS_EMPRESA_DEFAULT
                EndIf
        EndIf
        INICIO=False

        Moveto [Codigo da Empresa]
        If CHAVE=1
           Then [Situacao_Programacao]="PROGRAMADA"
           Else If Not IsBlank([Codigo da Empresa])
                   Then If Not Carrega_Parametros()
                           Then CHAVE=9
                                Return
                           EndIf
                EndIf
                If Not IsBlank([Data_Producao])
                   Then MES=ALINHM(StrVal(Month([Data_Producao])),2)
                        ANO=ALINHM(StrVal(Year([Data_Producao])),4)
                EndIf                
                If PROGFUND_ROTINA="PRODUCAO"
                   Then Moveto [Data_Producao]
                   Else Moveto [Flag1]
                EndIf   
        EndIf
   Else Moveto Field campocorrente
EndIf
SetaCorRegistro("Editar")

While True
      TECLA=" Altt+F=Fun‡„o  PgDn=Finalizar  "

      MSGCAMPO=Field()
      Switch
        Case Field()="Data_Producao"            : MSGCAMPO="Data da Produ‡„o"
        Case Field()="Situacao_Programacao"     : MSGCAMPO="Situa‡„o da Programa‡„o"
        Case Field()="Tipo_Programacao"         : MSGCAMPO="Tipo Programa‡Æo: (E)ENTRADA, (P)PRODU€ÇO, (R)REMESSA"
        Case Field()="Codigo"                   : MSGCAMPO="Destinat rio/Emitente da Programa‡Æo"
        Case Field()="Flag1"                    : MSGCAMPO="pausa [Enter] pra prosseguir"
        Case Field()="Codigo Empresa Documento" : MSGCAMPO="C¢digo da Empresa referente ao Documento"
        Case Field()="Codigo do Documento"      : MSGCAMPO="C¢digo do Documento"
        Case Field()="Tipo do Documento"        : MSGCAMPO="Tipo do Documento"
        Case Field()="Serie do Documento"       : MSGCAMPO="Serie do Documento"
        Case Field()="Numero do Documento"      : MSGCAMPO="Numero do Documento"
        Case Field()=""                         : MSGCAMPO=""
      EndSwitch

      If Field()="Codigo da Empresa"        Or
         Field()="Codigo Empresa Documento" Or
         Field()="Codigo"                   Or 
         Field()="Situacao_Programacao"     Or 
         Field()="Codigo do Documento"      Or 
         Field()="Numero do Lancamento"
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      campocorrente=Field()
      Tecla_Funcao =""
      
      Prompt TECLA
      Wait Field
       Until "ESC","ENTER","HOME","UP","PGUP","PGDN","DEL","FIELDVIEW","DOWN",
             -94,-33,-115,-116,-133,-134,-145,-24,-30,-34,
             "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F35"
                        
      If RetVal=-33
         Then If Not Seleciona_Funcao()
                 Then Loop                                                 
                 Else Return
              EndIf
      EndIf
      
      Switch
      Case RetVal=-24  Or RetVal=-25  Or RetVal=-19  Or RetVal=-49 Or
           RetVal=-30  Or RetVal=-34  Or RetVal=-32  Or RetVal=-35 Or 
           RetVal=-36  Or RetVal="F6" Or RetVal="F5" Or RetVal=-80 Or
           RetVal=-145 :  
           Tecla_Funcao=RetVal
           Return
           
      Case RetVal="DOWN" :  
           Tecla_Funcao=-145
           Return
           
      Case RetVal="F1":
           If Field()="Codigo da Empresa"        Or
              Field()="Codigo Empresa Documento" Or
              Field()="Codigo"                   Or
              Field()="Codigo do Documento"      Or
              Field()="Numero do Lancamento"
              Then CONSULTAF1()                
           EndIf
           If PROGFUND_ROTINA="PRODUCAO"
              Then If Field()="Situacao_Programacao"
                      Then ShowPopup " Situa‡„o " @ 03,53
                             "~P~rogramada"  : " Programada     " : "PROGRAMADA",
                             "~E~m produ‡„o" : " Em produ‡„o    " : "EM PRODUCAO",
                             "~S~uspensa   " : " Suspensa       " : "SUSPENSA",
                             "~F~inalizada " : " Finalizada     " : "FINALIZADA"
                           EndMenu
                           To MenuVar
                           If MenuVar<>"Esc"
                              Then [Situacao_Programacao]=MenuVar
                           EndIf
                   EndIf
           EndIf

      Case Retval="ESC":
           Switch
           Case Field()="Codigo da Empresa":
                If QuerDesfazer("")
                   Then If CHAVE=1
                           Then Exclusao("Cabeca")
                           Else Undo
                        EndIf
                        CHAVE=9
                        QuitLoop
                EndIf
           Case Field()="Data_Producao"       :
                If CHAVE=1 
                   Then Moveto [Data_Programacao]
                   Else If QuerDesfazer("")
                           Then Undo
                                CHAVE=9
                                QuitLoop     
                        EndIf
                EndIf
           Case Field()="Tipo_Programacao"    :
                If PROGFUND_ROTINA="PRODUCAO"
                   Then Moveto [Data_Producao   ]
                   Else Moveto [Data_Programacao]
                EndIf
           Case Field()="Numero do Lancamento":
                Moveto [Codigo] 
           Case Field()="Codigo Empresa Documento" : 
                Moveto [Codigo]      
           Case Field()="Codigo do Documento":
                Moveto [Codigo Empresa Documento]   
           Case Field()="Data_Programacao":
                Moveto [Codigo da Empresa]       
           Case Field()="Numero do Documento" :
                Moveto [Codigo do Documento]
           Case Field()="Situacao_Programacao" :
                If CHAVE=1 
                   Then Left
                   Else If PROGFUND_ROTINA<>"PRODUCAO"
                           Then If QuerDesfazer("")
                                   Then Undo
                                        CHAVE=9
                                        QuitLoop
                                EndIf
                           Else Moveto [Data_Producao]                   
                        EndIf
                EndIf    
           Case Field()="Flag1" : 
                If CHAVE=1 
                   Then Moveto [Codigo]
                   Else If PROGFUND_ROTINA="PRODUCAO"
                           Then Moveto [Situacao_Programacao]
                           Else If QuerDesfazer("")
                                   Then Undo
                                        CHAVE=9
                                        QuitLoop
                                EndIf             
                        EndIf
                EndIf          
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGDN":
           If VALIDA_CAMPO()
              Then FINALIZADO=True
                   CHAVE=9
                   OPCAO=""
                   QuitLoop
              Else Loop     
           EndIf
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("") And Checa_Supervisor()
                      Then CHAVE=9
                           EXCLUSAO("Cabeca")
                           QuitLoop
                   EndIf
           EndIf
      Case RetVal="DOWN" And CHAVE=0:
           Tecla_Funcao=-36
           Return
      Case Retval="ENTER":
        Switch
          Case Field()="Codigo da Empresa"  : Moveto [Data_Programacao]
               ;If Not IsBlank([])
               ;   Then If Not Carrega_Parametros()
               ;           Then Loop
               ;        EndIf
               ;        Moveto [Data_Programacao]
               ;EndIf              
          Case Field()="Data_Programacao"  :
               If IsBlank([])
                  Then []=Today()
               EndIf
               MES=ALINHM(StrVal(Month([])),2)
               ANO=ALINHM(StrVal(Year([])),4)
               Moveto [Hora_Programacao]
          Case Field()="Hora_Programacao"  :
               If IsBlank([])
                  Then []=Time()
               EndIf
               If PROGFUND_ROTINA="PRODUCAO"
                  Then Moveto [Data_Producao]
                  Else [Situacao_Programacao] = "PROGRAMADA"
                       Moveto [Tipo_Programacao]     
               EndIf
          Case Field()="Data_Producao"  :
               If IsBlank([])
                  Then []=Today()
               EndIf 
               MES_PRODUCAO=ALINHM(StrVal(Month([])),2)
               ANO_PRODUCAO=ALINHM(StrVal(Year([])),4)               
               Moveto [Situacao_Programacao]   
          Case Field()="Situacao_Programacao"  :  
               If IsBlank([]) Then []="PROGRAMADA" EndIf
               Moveto [Flag1]
          Case Field()="Tipo_Programacao"   :
               If IsBlank([])
                  Then []="PRODUCAO"
               EndIf   
               Switch
                 Case []="ENTRADA" : [Tipo do Documento  ]=""
                                     [Serie do Documento ]=""
                                     [Numero do Documento]=""
               EndSwitch
               Moveto [Codigo]      
          Case Field()="Codigo"  : 
               If IsBlank([])
                  Then Fastmsg("Emitente/Destinat rio inv lido!")
                  Else If [Tipo_Programacao]="ENTRADA"
                          Then Moveto [Flag1]
                          Else Moveto [Codigo Empresa Documento]
                       EndIf     
               EndIf
          Case Field()="Codigo Empresa Documento":
               If IsBlank([])  
                  Then [Codigo do Documento]=""
                       [Tipo do Documento  ]=""
                       [Serie do Documento ]=""
                       [Numero do Documento]=""
                       FastMsg("Codigo da Empresa do Documento Inv lido!")
                  Else Moveto [Codigo do Documento]    
               EndIf     
          Case Field()="Codigo do Documento":
               If IsBlank([])  
                  Then [Tipo do Documento  ]=""
                       [Serie do Documento ]=""
                       [Numero do Documento]=""
                       FastMsg("Codigo do Documento Inv lido!")
                  Else Moveto [Numero do Documento]    
               EndIf   
          Case Field()="Tipo do Documento"  : Moveto [Serie do Documento]
          Case Field()="Serie do Documento" : Moveto [Numero do Documento]
          Case Field()="Numero do Documento": 
               If IsBlank([]) 
                  Then FastMsg("Numero do Documento Inv lido!")
                  Else If Len([Numero do Documento])<>6 Then [Numero do Documento]=AlinhM([Numero do Documento],6) EndIf
                       GetRecord "\\Sistemas\\Vendas\\NotaC" [Codigo Empresa Documento],[Numero do Documento],[Serie do Documento] To REG_NOTAC
                       If Not RetVal
                          Then FastMsg("Numero do Documento n„o localizado!")
                          Else If [Codigo]=REG_NOTAC["Codigo"]
                                   Then Adiciona_Consumo("Nota de Saida")
                                        Avanco_Tela()
                                        Return
                                  Else FastMsg("O emitente do documento informado n„o ‚ v lido!")
                               EndIf    
                       EndIf   
               EndIf 
          Case Field()="Flag1" :  
               Switch
                 Case PROGFUND_ROTINA="PRODUCAO" : If [Progfc->Tipo_Programacao]="REMESSA"
                                                      Then Tecla_Funcao=-49
                                                      Else Tecla_Funcao=-19
                                                   EndIf   
                                                   SetaCorRegistro("Invisivel")
                                                   Return
                 OtherWise                       : If CHAVE=0 And [Numero do Documento] <>"" 
                                                      Then GetRecord "\\Sistemas\\Vendas\\NotaC" [Codigo Empresa Documento],
                                                                                                 [Numero do Documento],
                                                                                                 [Serie do Documento] To REG_NOTAC
                                                           If Not RetVal
                                                              Then FastMsg("Numero do Documento n„o localizado!")
                                                              Else If [Codigo]=REG_NOTAC["Codigo"]
                                                                      Then Adiciona_Consumo("Nota de Saida")
                                                                           Avanco_Tela()
                                                                           Return
                                                                      Else FastMsg("O emitente do documento informado n„o ‚ v lido!")
                                                                   EndIf        
                                                           EndIf
                                                   EndIf
                                                   Avanco_Tela()
               EndSwitch
               SetaCorRegistro("Padrao")  
               Return
          OtherWise: Right
        EndSwitch
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Valida‡Æo de Campo                                              *
;*******************************************************************************
Proc VALIDA_CAMPO()
Private MSG,ANT_TAB,ANT_FIELD,ACHOU_PEDIDO

ANT_TAB    = Table()
ANT_FIELD  = Field()

MSG=""
If Rtrim([Progfc->Codigo da Empresa   ])="" Then MSG="Informe a Empresa!                " EndIF
If Rtrim([Progfc->Data_Programacao    ])="" Then MSG="Informe a Data da Programa‡„o!    " EndIF
If PROGFUND_ROTINA="PRODUCAO" And Rtrim([Progfc->Data_Producao])="" Then MSG="Informe a Data da Producao!" EndIF
If Rtrim([Progfc->Situacao_Programacao])="" Then MSG="Informe a Situa‡„o da Programa‡„o!" EndIF
If Rtrim([Progfc->Tipo_Programacao    ])="" Then MSG="Informe o Tipo de Programa‡„o!    " EndIF 

If [Progfc->Codigo]<>"" And ([Progfc->Codigo Empresa Documento]="" Or [Progfc->Codigo do Documento]="" Or [Progfc->Numero do Documento]="")
   Then MSG="Informe o Documento!"
EndIf   

;If PROGFUND_ROTINA="PRODUCAO" And [Progfc->Data_Producao]=BlankDate()
;   Then MSG="Informe a Data da Produ‡„o!"
;EndIf
  
If MSG<>""
   Then FastMsg(MSG)
        Return False
EndIf
    
If [Progfc->Tipo_Programacao]="PRODUCAO"
   Then If Table()="Progfp"
           Then ACHOU_PEDIDO=False
                Home
                Scan
                  If Rtrim([Numero do Pedido])<>""
                     Then ACHOU_PEDIDO=True
                          QuitLoop
                  EndIf    
                EndScan
                End Down
                If Not ACHOU_PEDIDO
                   Then FastMsg("N„o foi informado pedidos a atender!")
                        Return False
                EndIf   
           Else Moveto "ProgfP"
                If RecordStatus("New")=True
                   Then FastMsg("N„o foi informado pedidos a atender!")
                        Moveto ANT_TAB
                        Moveto Field ANT_FIELD
                        Return False
                EndIf
        EndIf   
EndIf
   
Moveto ANT_TAB
Moveto Field ANT_FIELD
Return True

EndProc ;VALIDA_CAMPO()

;*******************************************************************************
;* Rotina para Digitacao Dados Gerais                                          *
;*******************************************************************************
Proc DIGITAT()

Moveto "ProgfC"    
SetaCorRegistro("Editar")                   

If [Valor_Mao_Obra]>0
   Then If [Ajustes_Unidade]>0
           Then CUSTO_UNITARIO = NDecimal((([Custo Total Consumo]/[Quantidade_Consumo_Liq])+([Valor_Mao_Obra]+[Ajustes_Unidade])),3)
           Else CUSTO_UNITARIO = NDecimal((([Custo Total Consumo]/[Quantidade_Consumo_Liq])+[Valor_Mao_Obra]),3)
        EndIf  
   Else CUSTO_UNITARIO = BlankNum()
EndIf                                                

If PROGFUND_ROTINA="PRODUCAO" And [Tipo_Programacao]<>"REMESSA"
   Then Moveto [Valor_Mao_Obra]
   Else Moveto [Flag5]
EndIf   

While True      
      MSGCAMPO=Field()
      Switch
        Case Field()="Valor_Mao_Obra"       : MSGCAMPO="Valor de M„o de Obra"
        Case Field()="Flag5"                : MSGCAMPO="pausa [Enter] pra prosseguir"
        Case Field()=""                     : MSGCAMPO=""
      Endswitch

      If Field()=""
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      If PROGFUND_ROTINA="PRODUCAO"
        Then TECLA = "F8=Atualizar"
        Else TECLA = ""
      EndIf   

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA
      AguardaTeclasPadraoIt2()
        
      Switch           
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-115 Or RetVal=-116 :
           Tecla_Funcao=RetVal
           Return
           
      Case RetVal="F1" :
           If Field()="" Then CONSULTAF1() EndIf
      Case RetVal="F8" :
           If PROGFUND_ROTINA="PRODUCAO"
              Then ATUALIZA_PROCESSO=True
                   If [Situacao_Programacao]="FINALIZADA" 
                      Then MSG =       "Programa‡„o "+LANCTO+" j  foi FINALIZADA!//"
                           MSG = MSG + "Deseja realmente atualizar as informa‡”es?"
                           ConfGeral(MSG)
                           If Ok<>"S"
                              Then ATUALIZA_PROCESSO=False
                           EndIf   
                   EndIf   
                   If ATUALIZA_PROCESSO
                      Then If [Situacao_Programacao]<>"FINALIZADA"
                              Then ConfGeral("Deseja finalizar a programa‡„o "+LANCTO+"?")
                              Else Ok="S"
                           EndIf   
                           If Ok="S"  
                              Then If [Progfc->Tipo_Programacao]="REMESSA"
                                      Then If Not Requisicao_Remessa("")
                                              Then FINALIZADO=True
                                                   CHAVE=9
                                                   OPCAO=""
                                                   Moveto "ProgfC"  
                                                   Mensagem("Opera‡„o Abortada!")
                                                   QuitLoop
                                           EndIf   
                                      Else Switch
                                             Case CHAVE=1: Requisicao("Inclusao","P")                  
                                                           ;Requisicao("Inclusao","C")
                                             Case CHAVE=0: Requisicao("Alterar","P")
                                                           ;Requisicao("Alterar","C")
                                           EndSwitch 
                                   EndIf
                                   FINALIZADO=True
                                   CHAVE=9
                                   OPCAO=""
                                   Moveto "ProgfC"
                                   Moveto [Numero_ProgramacaoDisco]
                                   Locate LANCTO
                                   [Situacao_Programacao] = "FINALIZADA"
                                   Mensagem("Opera‡„o Conclu¡da!")
                                   QuitLoop 
                           EndIf
                   EndIf                            
           EndIf                      
      Case Retval="ESC": 
           Switch
             Case Field()="Valor_Mao_Obra"       : CHAVEIC=9
                                                   Tecla_Funcao=BlankNum()
                                                   campocorrente="Flag1"
                                                   Return 
             Case Field()="Ajustes_Unidade"      : Moveto [Valor_Mao_Obra]                                       
             Case Field()="Flag5"                : If PROGFUND_ROTINA="PRODUCAO"
                                                      Then Moveto [Ajustes_Unidade]
                                                      Else Tecla_Funcao=BlankNum()
                                                           campocorrente="Flag1"
                                                           Return
                                                   EndIf                                    
             OtherWise                     : Left
           EndSwitch
      Case Retval="PGDN":
           If VALIDA_CAMPO()
              Then FINALIZADO=True
                   CHAVE=9
                   OPCAO=""
                   QuitLoop
              Else Loop     
           EndIf        
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="DOWN" And CHAVE=0:
           Tecla_Funcao=-36
           Return
      Case Retval="ENTER": 
           Switch
              Case Field()="Valor_Mao_Obra"        : If [Valor_Mao_Obra]>0
                                                        Then If [Ajustes_Unidade]>0
                                                                Then CUSTO_UNITARIO = NDecimal((([Custo Total Consumo]/[Quantidade_Consumo_Liq])+
                                                                                      ([Valor_Mao_Obra]+[Ajustes_Unidade])),3)
                                                                Else CUSTO_UNITARIO = NDecimal((([Custo Total Consumo]/[Quantidade_Consumo_Liq])+
                                                                                      [Valor_Mao_Obra]),3)
                                                              EndIf  
                                                        Else CUSTO_UNITARIO = BlankNum()
                                                     EndIf   
                                                     Moveto [Ajustes_Unidade]
              Case Field()="Ajustes_Unidade"       : If [Ajustes_Unidade]>0
                                                        Then CUSTO_UNITARIO = NDecimal((([Custo Total Consumo]/[Quantidade_Consumo_Liq])+
                                                                              ([Valor_Mao_Obra]+[Ajustes_Unidade])),3)
                                                     EndIf   
                                                     Moveto [Flag5]
              Case Field()="Flag5"                 : Avanco_Tela()
                                                     Return                    
              OtherWise: Right
           EndSwitch
      EndSwitch
EndWhile

EndProc ;DIGITAT()      

;*******************************************************************************
;** Inclusao, Alteracao de Titulos Contas a Pagar                             **
;*******************************************************************************
Proc TITULOS()
Private SEQ,ImpOC
If PARAM_ATUA_CAPG<>"S"
   Then If CHAVEAP=8
           Then Del
        EndIf
        Return
EndIf
ImpOC=False

Moveto "ProgfC"
UnLockRecord
KeyPress "F7"

Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([ProgfCP->Numero Lancamento Titulos])
    Then While True
           End
           If [Numero do Lancamento]=""
              Then SEQ="000001"
              Else SEQ=ALINHM(StrVal(NumVal([Numero do Lancamento])+1),6)
           EndIf
           Down
           [Numero do Lancamento]=SEQ
           If Not IsLockRecord()
              Then QuitLoop
              Else Del
           EndIf
         EndWhile
    Else SEQ=[ProgfCP->Numero Lancamento Titulos]
         Locate [ProgfCP->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[ProgfCP->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                 MSG=MSG+"Referente ao vencimento ["+StrVal([ProgfCP->Sequencia do Lancamento])+"] n„o foi encontrado !//"
                 MSG=MSG+"Verificar fechamento mensal no Contas a Pagar Ok !//"
                 MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efetuado !"
                 Mensagem(MSG)

                 Moveto "ProgfCP"
                 CopyFromArray RegItem
                 UnLockRecord
                 If CHAVEAP=8
                    Then If Exclusao_Cabeca
                            Then OK="S"
                            Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                         EndIf
                         If OK="S"
                            Then Del
                         EndIf
                 EndIf
                 Moveto "ProgfC"
                 KeyPress "F7"

                 Moveto "ProgfCP"
                 Return
            Else
                 Oktit=True
                 Switch
                   Case [Sistema Gerador       ]<>"DC"                                      : oktit=False
                   Case [Lancamento Gerador    ]<>[ProgfCP->Numero_ProgramacaoDisco]        : oktit=False
                   Case [Sequencia Gerador     ]<>[ProgfCP->Sequencia do Lancamento]        : oktit=False
                   Case [Documento Referente   ]<>"PROD/"+[ProgfC->Numero_ProgramacaoDisco] : oktit=False
                 EndSwitch

                 If Not OkTit
                    Then MSG=    "O lan‡amento no Contas a Pagar n„o corresponde a Sequencia ["+StrVal([ProgfCP->Sequencia do Lancamento])+"] !//"
                         MSG=MSG+"Verificar no Contas a Pagar se o mes n„o foi fechado !//"
                         MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efetuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !"
                         If CHAVEAP=0
                            Then MSG=MSG+"//Se necess rio exclua esta Sequencia e fa‡a-a novamente !"
                                 Mensagem(MSG)

                                 Moveto "ProgfC"
                                 KeyPress "F7"

                                 Moveto "ProgfCP"
                                 Return
                            Else Mensagem(MSG)
                                 Moveto "ProgfCP"
                                 If CHAVEAP=8
                                    Then If Exclusao_Cabeca
                                            Then OK="S"
                                            Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                                         EndIf
                                         If OK="S"
                                            Then Del
                                         EndIf

                                         Moveto "ProgfC"
                                         KeyPress "F7"

                                         Moveto "ProgfCP"
                                         Return
                                 EndIf
                         EndIf
                 EndIf
         EndIf
EndIf

Oktit=True
If CHAVEAP=8 Or CHAVEAP=0
   Then If [Saldo do Documento]<>[Valor do Documento]
           Then Oktit=False
                MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Pagar,//"
                MSG=MSG+"referente a este documento: "+[ProgfC->Codigo da Empresa]+" / "+"PROD / "+[ProgfC->NNumero_ProgramacaoDisco]+"//"
                MSG=MSG+"n„o ser  efetuado, pois o T¡tulo J  teve baixa ! // //"
                MSG=MSG+"Verificar !"
                Mensagem(MSG)

                Moveto "ProgfCP"
                CopyFromArray RegItem
                UnLockRecord
                If CHAVEAP=8
                   Then If Exclusao_Cabeca
                           Then OK="S"
                           Else ConfGeral("Confirma esta exclus„o independente do lan‡amento no Contas a Pagar ?")
                        EndIf
                        If OK="S"
                           Then Del
                        EndIf
                EndIf
                Moveto "ProgfC"
                KeyPress "F7"

                Moveto "ProgfCP"
                Return

           Else If CHAVEAP=8
                   Then Del
                        Moveto "ProgfCP"
                        Del
                EndIf
        EndIf
EndIf

If (CHAVEAP=1) Or
   (CHAVEAP=0 and Oktit)
   Then [Codigo do Documento ]=VSD_V_CdDocto
        [Numero do Documento ]=VSD_V_NoDocto
        [Codigo do Emitente  ]=[ProgfC->Codigo               ]
        [Tipo do Lancamento  ]=[ProgfCP->Tipo do Lancamento  ]        
        [Data de Emissao     ]=[ProgfC->Data_Producao        ]
        [Data de Vencimento  ]=[ProgfCP->Data de Vencimento  ]
        [Data a Pagar        ]=[ProgfCP->Data a Pagar        ]
        [Data Competencia    ]=[ProgfCP->Data Competencia    ]
        [Valor do Documento  ]=[ProgfCP->Valor do Documento  ]
        [Saldo do Documento  ]=[ProgfCP->Valor do Documento  ]
        [Valor do Desconto   ]=[ProgfCP->Valor do Desconto   ]
        [Data Limite Desconto]=[ProgfCP->Data Limite Desconto]
        [Multa               ]=[ProgfCP->Multa               ]
        [Taxa de Juros       ]=[ProgfCP->Taxa de Juros       ]
        [Tipo Taxa de Juros  ]=[ProgfCP->Tipo Taxa de Juros  ]
        [NDias Taxa de Juros ]=[ProgfCP->NDias Taxa de Juros ]
        [Tipo do Pagamento   ]=[ProgfCP->Tipo do Pagamento   ]
        [Codigo da Conta     ]=[ProgfCP->Codigo da Conta     ]
        [Codigo da Empresa   ]=[ProgfC->Codigo da Empresa    ]
        [Observacoes         ]=[ProgfCP->Observacoes         ]
        [Codigo CCusto       ]=[ProgfCP->Codigo CCusto       ]
        [Codigo Plano_Conta  ]=[ProgfCP->Codigo Plano_Conta  ]
        If (CHAVEAP=1) Or (IsBlank([Sistema Gerador])) Or
           (CHAVEAP=0 And ImpOC)
           Then Controle_Dia()
                [Sistema Gerador   ]="DC"
                [Lancamento Gerador]=[ProgfCP->Numero_ProgramacaoDisco]
                [Sequencia Gerador ]=[ProgfCP->Sequencia do Lancamento]
        EndIf
        [Documento Referente ]="PROD/"+[ProgfC->Numero_ProgramacaoDisco]
        UnLockRecord

        Moveto "ProgfCP"
        If IsBlank([ProgfCP->Numero Lancamento Titulos])
           Then [Numero Lancamento Titulos]=SEQ
        EndIf
        UnLockRecord
EndIf

If (CHAVEAP=8 Or CHAVEAP=0) and Not Oktit
   Then Moveto "ProgfCP"
        CopyFromArray RegItem
        UnLockRecord
EndIf

Moveto "ProgfC"
KeyPress "F7"

Moveto "ProgfCP"

EndProc  ; (Titulos)

;*******************************************************************************
;* Rotina para Checagem do Tipo de Pagamento                                   *
;*******************************************************************************
Proc CHECA_TPPAGTO()
Private Valido_TpPagto

Valido_TpPagto=True
If [Tipo de Pagamento]<>TPPAGTO And Not IsBlank(TPPAGTO)
   Then Switch
          Case TPPAGTO="V" : 
               ConfGeral("Confirma exclus„o do lan‡amento a vista no Caixa/Banco ?")
               If OK="S"
                  Then Exclusao_Cabeca=False
                       CHAVEAV=8
                       CONTA()
                       Moveto "ProgfC"
                       TPPAGTO=[Tipo de Pagamento]
                  Else [Tipo de Pagamento]=TPPAGTO
                       Valido_TpPagto=False
               EndIf
          Case TPPAGTO="P" :
               ConfGeral("Confirma exclus„o do lan‡amento a prazo no Contas a Pagar ?")
               If OK="S"
                  Then Exclusao_Cabeca=False
                       Moveto "ProgfCP"
                       While RecordStatus("New")=False
                         CHAVEAP=8
                         CopyToArray RegItem
                         TITULOS()
                       EndWhile
                       Moveto "ProgfC"
                       TPPAGTO=[Tipo de Pagamento]
                  Else [Tipo de Pagamento]=TPPAGTO
                       Valido_TpPagto=False
               EndIf
       EndSwitch
EndIf

Moveto "ProgfC"
Moveto [Tipo de Pagamento]
Return Valido_TpPagto

EndProc ;CHECA_TPPAGTO()

;*******************************************************************************
;* Rotina para Localizar Item - Digitacao de Contas a Pagar                    *
;*******************************************************************************
Proc CHAVEAP()
MSGCAMPO     = ""
While True

  Moveto "ProgfCP"
  End
  SEQ = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]

  If IsBlank(SEQ)
     Then SEQ   = 1
     Else SEQ   = SEQ + 1
  EndIf
  []=SEQ
  LockRecord
  Locate SEQ

  Opcao_Ver    =False
  SetaCorRegistro("Editar")
  While True

    TECLA=" Esc=Retornar  F3=Ver Ficha  F7=Paginar  PgDn=Finalizar  "
    Prompt TECLA

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

    Switch
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           PAGINA("ProgfCP","MR")
           If EDITAR="S"
              Then CHAVEAP=0
                   Controla_EdicaoAP()
              Else If EXCLUIR="S"
                      Then If Checa_Supervisor()
                              Then If QuerExcluir("")
                                      Then CopyToArray RegItem
                                           Exclusao_Cabeca=False
                                           CHAVEAP=8
                                           TITULOS()
                                      Else UnLockRecord
                                   EndIf
                              Else UnLockRecord
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           SetaPosForm()
         EndWhile
         QuitLoop
         
    Case RetVal="F3":
         Del
         Moveto [Sequencia do Lancamento]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEAP=0
         Home
         SEQ=[Sequencia do Lancamento]
         Inicia_Registro_Venctos()
         Digita_APrazo()
         QuitLoop
         
    Case Retval="ESC" Or Retval="PGDN":
         CHAVEAP=9   
         Moveto [Valor do Documento]
         TOTVENC=ImageCSum()

         If NumVal(StrVal(TOTVENC)) <> NumVal(StrVal([ProgfC->Valor_Mao_Obra]*[ProgfC->Quantidade_Produzida]))
            Then MSG="Total dos vencimentos difere do total da programa‡„o!//"
                 MSG=MSG+"- Programado = "+Format("W10.2,EIC",[ProgfC->Valor_Mao_Obra]*[ProgfC->Quantidade_Produzida])+"//"
                 MSG=MSG+"-    Venctos = "+Format("W10.2,EIC",TOTVENC)
                 Mensagem(MSG)
         Endif
     
         Del
         Return
    Case Retval="ENTER":
         If Isblank([])
            Then If IsBlank(SEQ)
                    Then SEQ=1
                    Else SEQ=SEQ+1
                 EndIf
                 []=SEQ
         EndIf
         SEQ=[]
         Del
         Locate LANCTO,SEQ
         If Retval
            Then CHAVEAP=0
            Else CHAVEAP=1
                 End Down
                 [Numero_ProgramacaoDisco]=LANCTO
                 [Sequencia do Lancamento]=SEQ
                 UnLockRecord
                 Locate LANCTO,SEQ
         EndIf
         Return
    EndSwitch
  EndWhile
EndWhile

EndProc ;ChaveaP()

;*******************************************************************************
;* Rotina de Digitacao Dados a Prazo                                           *
;*******************************************************************************
Proc APrazo_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

CAIXA_BANCO=False
TECLA=" Esc=Retornar  "
MSGCAMPO=""
Temp=True

If INICIO_DIALOG
   Then Campo="V_Conta"
        INICIO_DIALOG=False
EndIf

If Opcao_Ver Then Campo="I_Seq" EndIf

If Campo="V_Conta"
   Then Monta_Opcoes("Codigo da Conta","")
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 SEQ=[Sequencia do Lancamento]
                      Inicia_Registro_Venctos()
              EndIf
          EndSwitch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEAP=0
               Then If QuerExcluir("")
                       Then CopyFromArray RegItem
                            CHAVEAP=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="V_TpPagto"     Or
               Campo="V_PlContas"    Or
               Campo="V_CCusto"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="V_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="V_CdDocto"     Then Moveto [Codigo do Documento] EndIf
                    If Campo="V_TpPagto"     Then Moveto [Tipo do Pagamento  ] EndIf
                    If Campo="V_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="V_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off
                    
                    If Campo="V_TpPagto"
                       Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                            VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                    EndIf
                    If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=[Descricao CCusto]
                   EndIf
                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                   EndIf
           EndIf
          
           
           If Campo="V_CdDocto"
              Then If SD_Seleciona_Opcoes("Codigo do Documento","CR",11,32)
                      Then VSD_V_CdDocto           =[Codigo do Documento]
                           VSD_V_TpDocto           =[Tipo do Documento  ]
                           VSD_V_SrDocto           =[Serie do Documento ]
                   EndIf 
                   SelectControl "V_CdDocto"
                   RefreshDialog
           EndIf

           If Campo="V_Conta"
              Then If SD_Seleciona_Opcoes("Codigo da Conta","CR",9,4)
                      Then VSD_V_Conta            = [Codigo da Conta   ]
                            VSD_V_Descricao_Conta = [Descricao da Conta]
                            VSD_V_Tipo_Conta      = [Tipo da Conta     ]
                   EndIf
                   SelectControl "V_Conta"
                   RefreshDialog
           Endif           

           If Campo="V_Tpoper"
              Then If SD_Seleciona_Opcoes("Tipo de Opera‡„o","CR",9,4)
                      Then VSD_V_Tpoper          =[Tipo de Operacao  ]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   SelectControl "V_Tpoper"
                   RefreshDialog
           Endif           
           
           If Campo="V_TpLancto" 
              Then If SD_Seleciona_Opcoes("Tipo do Lan‡amento","CR",11,4)
                      Then VSD_V_TpLancto          =[Tipo do Lancamento]
                           VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                   EndIf
                   SelectControl "V_TpLancto"
                   RefreshDialog
           Endif           
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAP=1
                             Then Del
                          EndIf
                          CHAVEAP=9
                          CancelDialog
                  EndIf
             Case Campo="V_TpLancto"    : 
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Codigo da Conta",VSD_V_Conta)
                  Campo="V_Conta"
             Case Campo="V_CdDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                  Campo="V_TpLancto"              
             Case Campo="V_NoDocto"     : 
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Codigo do Documento","")
                  Campo="V_CdDocto"
             Case Campo="V_DtVencto"    : Campo="V_NoDocto"
             Case Campo="V_DtaPagar"    : Campo="V_DtVencto"  
             Case Campo="V_Vr_Lancto"   : Campo="V_DtaPagar"
             Case Campo="V_TpPagto"     : Campo="V_Vr_Lancto"
             Case Campo="V_PlContas"    : Campo="V_TpPagto"
             Case Campo="V_CCusto"      : Campo="V_PlContas"
             Case Campo="V_DtCompet"    : Campo="V_CCusto"
             Case Campo="V_Vr_Descto"   : Campo="V_DtCompet"
             Case Campo="V_DtDescto"    : Campo="V_Vr_Descto"
             Case Campo="V_Multa"       : Campo="V_DtDescto"
             Case Campo="V_TxJuros"     : Campo="V_Multa"
             Case Campo="V_TpTxJuros"   : Campo="V_TxJuros"
             Case Campo="V_Observacoes" : Campo="V_TpTxJuros"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=ControlValue("V_Conta")
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  KeyPress "ESC"
                                  Moveto "ProgfCP"
                                  [Codigo da Conta ]=VSD_V_Conta
                                  Switch
                                    Case [Tipo da Conta]="X" : VSD_V_Tpoper="06"
                                    Case [Tipo da Conta]="C" : VSD_V_Tpoper="05"
                                  EndSwitch
                                  [Tipo de Operacao]=VSD_V_Tpoper
                                  Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                                  Campo="V_TpLancto"
                                  
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Checa_Opcoes("Tipo do Lan‡amento",VSD_V_TpLancto)
                     Then VSD_V_TpLancto          =Registro_F1["Tipo do Lancamento"]
                          VSD_V_Descricao_TpLancto=Registro_F1["Descricao do Lancamento"]
                          [Tipo do Lancamento]    =VSD_V_TpLancto
                          Monta_Opcoes("Codigo do Documento","")
                          Campo="V_CdDocto"
                          SelectControl "V_CdDocto"
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_V_TpLancto=""
                          VSD_V_Descricao_TpLancto=""
                          KeyPress "ESC"
                  EndIf                     
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Checa_Opcoes("Codigo do Documento",VSD_V_CdDocto)
                     Then VSD_V_CdDocto          =[Codigo do Documento]
                          VSD_V_TpDocto          =[Tipo do Documento  ]
                          VSD_V_SrDocto          =[Serie do Documento ]
                          [Codigo do Documento]  =VSD_V_CdDocto
                          Campo="V_NoDocto"
                          SelectControl "V_NoDocto"
                     Else Mensagem("Codigo Documento n„o Cadastrado !")
                          VSD_V_CdDocto          =""
                          VSD_V_TpDocto          =""
                          VSD_V_SrDocto          =""
                          KeyPress "ESC"
                  EndIf
             Case Campo="V_NoDocto"   : Campo="V_DtVencto"
                  VSD_V_NoDocto=ControlValue("V_NoDocto")
             Case Campo="V_DtVencto":
                  VSD_V_DtVencto=ControlValue("V_DtVencto")
                  If Not IsBlank(VSD_V_DtVencto)
                     Then If VSD_V_DtVencto<[ProgfC->Data_Producao]
                             Then MENSAGEM("Data de Vencimento Menor que a Emiss„o")
                             Else VSD_V_DtaPagar=VSD_V_DtVencto
                                  While True
                                    NDIAS=0
                                    If Dow(VSD_V_DtaPagar)="Sat"
                                       Then NDIAS=2
                                       Else If Dow(VSD_V_DtaPagar)="Sun"
                                               Then NDIAS=1
                                            EndIf
                                    EndIf
                                    DIA = VSD_V_DtaPagar

                                    ;Moveto [Lookup_Feriado]
                                    ;Ativa_Lookup()
                                    ;Moveto [Data do Feriado]
                                    ;Locate DIA
                                    ;If Retval
                                    ;   Then NDIAS=[Dias a Pagar]
                                    ;EndIf
                                    ;KeyPress "ESC"
                                    ;Echo Off

                                    VSD_V_DtaPagar=VSD_V_DtaPagar+NDIAS
                                    If NDIAS=0
                                       Then QuitLoop
                                    EndIf
                                  EndWhile
                                  Campo="V_DtaPagar"
                          EndIf
                  EndIf
             Case Campo="V_DtaPagar":
                  VSD_V_DtaPagar=ControlValue("V_DtaPagar")
                  If Not IsBlank(VSD_V_DtaPagar)
                     Then Campo="V_Vr_Lancto"
                  EndIf
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  If Not IsBlank(VSD_V_Vr_Lancto)
                     Then Campo="V_TpPagto"
                  EndIf
             Case Campo="V_TpPagto": 
                  VSD_V_TpPagto=ControlValue("V_TpPagto")
                  If Not IsBlank(VSD_V_TpPagto)
                     Then Moveto [Tipo do Pagamento]
                          Ativa_Lookup()
                          Moveto [Tipo do Pagamento]
                          Locate VSD_V_TpPagto
                          If RetVal
                             Then VSD_V_TpPagto          =[Tipo do Pagamento       ]
                                  VSD_V_Descricao_TpPagto=[Descricao Tipo Pagamento]
                                  KeyPress "ESC"
                                  [Tipo do Pagamento]=VSD_V_TpPagto
                                  Campo="V_PlContas"
                             Else Mensagem("Forma Pagamento invalido !")
                                  VSD_V_TpPagto          =""
                                  VSD_V_Descricao_TpPagto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="V_PlContas"           :
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then If PlContas(VSD_V_PlContas,"S")
                             Then VSD_V_PlContas           = REG_PLCONTAS["Codigo Plano_Conta"]
                                  VSD_V_Descricao_PlContas = LTrim(REG_PLCONTAS["Descricao Plano_Conta"])
                                  VSD_V_Codigo_Hist        = REG_PLCONTAS["Codigo do Historico"]
                                  Moveto "ProgfCP"
                                  [Codigo Plano_Conta]     = VSD_V_PlContas
                                  Campo="V_CCusto"
                             Else VSD_V_PlContas           = ""
                                  VSD_V_Descricao_PlContas = ""
                          EndIf   
                     Else VSD_V_Descricao_PlContas=""
                          Campo="V_CCusto"
                  EndIf
             Case Campo="V_CCusto"             :
                  VSD_V_CCusto=ControlValue("V_CCusto")
                  If Not IsBlank(VSD_V_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_V_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_CCusto          =""
                                          VSD_V_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_CCusto          =[Codigo CCusto]
                                          VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"

                                          [Codigo CCusto]=VSD_V_CCusto
                                          Campo="V_DtCompet"
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_V_CCusto          =""
                                  VSD_V_Descricao_CCusto=""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_CCusto=""
                          Campo="V_DtCompet"
                  EndIf
             Case Campo="V_DtCompet":                  
                  If VSD_V_DtCompet =BlankDate() and CHAVEAP=1 
                     then VSD_V_DtCompet = [ProgfC->Data_Producao]
                     Else VSD_V_DtCompet=ControlValue("V_DtCompet")
                  EndIf
                  Campo="V_Vr_Descto"                                  
             Case Campo="V_Vr_Descto":
                  VSD_V_Vr_Descto=ControlValue("V_Vr_Descto")
                  If VSD_V_Vr_Descto<=0 Or IsBlank(VSD_V_Vr_Descto)
                     Then VSD_V_DtDescto=BlankDate()
                          Campo="V_Multa"
                     Else Campo="V_DtDescto"
                  EndIf
             Case Campo="V_DtDescto":
                  VSD_V_DtDescto=ControlValue("V_DtDescto")
                  If IsBlank(VSD_V_DtDescto) And VSD_V_Vr_Descto>0
                     Then Campo="V_DtDescto"
                     Else If Not IsBlank(VSD_V_DtDescto) And VSD_V_Vr_Descto<=0
                             Then Campo="V_DtDescto"
                             Else Campo="V_Multa"
                          EndIf
									EndIf
             Case Campo="V_Multa"    : Campo="V_TxJuros"
                  VSD_V_Multa=ControlValue("V_Multa")
             Case Campo="V_TxJuros"  : Campo="V_TpTxJuros"
                  VSD_V_TxJuros=ControlValue("V_TxJuros")
             Case Campo="V_TpTxJuros":
                  VSD_V_TpTxJuros=ControlValue("V_TpTxJuros")
                  If VSD_V_TpTxJuros="D" Or VSD_V_TpTxJuros="M" Or VSD_V_TpTxJuros="A" Or VSD_V_TpTxJuros=""
                     Then Switch
                          Case VSD_V_TpTxJuros="":
                               VSD_V_NDTxJuros=0
                          Case VSD_V_TpTxJuros="D":
                               VSD_V_NDTxJuros=1
                          Case VSD_V_TpTxJuros="M":
                               VSD_V_NDTxJuros=30
                          Case VSD_V_TpTxJuros="A":
                               VSD_V_NDTxJuros=365
                          EndSwitch
                          Campo="V_Observacoes"
                  EndIf
             Case Campo="V_Observacoes":
                  VSD_V_Observacoes=ControlValue("V_Observacoes")
                  TPPAGTO=[ProgfC->Tipo de Pagamento]
                  AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="V_Conta"    Or
   Campo="V_Tpoper"   Or
   Campo="V_TpLancto" Or
   Campo="V_CdDocto"  Or
   Campo="V_TpPagto"  Or
   Campo="V_CCusto"   Or
   Campo="V_PlContas"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="":
       MSGCAMPO=""
EndSwitch

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

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

@ 23,0 ?? ">"+Format("W79,AL",MSGCAMPO)
PaintCanvas Attribute 30 23,0,23,79
          
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79

Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (APrazo_Dialog)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc SD_Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO,NL,NC)
Private OPCAODIVERSAS, LJ, AJ, ncp, SEMRETORNO

If DynArraySize(Opcoes)=0
   Then Mensagem("Tabela sem Registros !")
        Return False
EndIf

AJ=DynArraySize(Opcoes)
If AJ>15
   Then AJ=15
   Else If AJ<3 Then AJ=3 EndIf
EndIf

Switch
  Case OPCAODIVERSAS="Codigo do Documento" : If AJ>8 Then AJ=8 EndIf 
                                             ncp=1 LJ=66
  Case OPCAODIVERSAS="Tipo de Opera‡„o"    : ncp=1 LJ=31
  Case OPCAODIVERSAS="Tipo do Lan‡amento"  : ncp=1 LJ=32
  Case OPCAODIVERSAS="Codigo da Conta"     : ncp=1 LJ=37
EndSwitch

ArrayElement=0
Showdialog "Consulta "+OPCAODIVERSAS Proc "Opcoes_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "TAB","ReverseTab","ENTER","ESC"
     @ NL,NC height AJ+2 width LJ+5

   PickDynArray @0,01 Height AJ width LJ
   Columns ncp
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Codigo do Documento" : [Codigo do Documento]=Registro_F1["Codigo do Documento"]
                  Case OPCAODIVERSAS="Tipo de Opera‡„o"    : [Tipo de Operacao   ]=Registro_F1["Tipo de Operacao"   ]
                  Case OPCAODIVERSAS="Tipo do Lan‡amento"  : [Tipo do Lancamento ]=Registro_F1["Tipo do Lancamento" ]
                  Case OPCAODIVERSAS="Codigo da Conta"     : [Codigo da Conta    ]=Registro_F1["Codigo da Conta"    ]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (SD_Seleciona_Opcoes)

;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro_APrazo(ok)
Private ok
If Ok
   Then Registro_Item_APrazo("Gravar")
        Titulos()
   Else If CHAVEAP=0 or CHAVEAP=8
           Then CopyFromArray RegItem
        EndIf
        If CHAVEAP=8 Then Titulos() EndIf
EndIf
EndProc   ; (Finaliza_Registro_APrazo)

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro_Venctos()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [ProgfC->Numero_ProgramacaoDisco],SEQ
CopyToArray RegItem
Registro_Item_APrazo("Ler")
EndProc ; (Inicia_Registro_Venctos)

;*******************************************************************************
;* Rotina para Lancamento a Prazo                                              *
;*******************************************************************************
Proc Digita_APrazo()
Private MSG_ATUA,forok
MSGCAMPO     = ""

Moveto "ProgfCP"
If PARAM_ATUA_CAPG="S"
   Then MSG_ATUA=" - ATUALIZANDO !"
   Else MSG_ATUA=" - NAO ATUALIZA !"
EndIf

If CHAVEAP=1
   Then If [Sequencia do Lancamento]=1
           Then Moveto "ProgfC"
                Moveto [Codigo]
                If Busca_Lookup("Codigo",[ProgfC->Codigo],"SM")
                   Then Forok=True
                   Else Forok=False
                EndIf
                Moveto "ProgfCP"
                [Tipo do Lancamento ]="C"
                [Codigo do Documento]="PROD"
                [Numero do Documento]=LANCTO
                [Observacoes        ]="REF. PROD"+"/"+[ProgfC->Numero_ProgramacaoDisco]
                [Valor do Documento ] =[ProgfC->Valor_Mao_Obra]*[ProgfC->Quantidade_Produzida]
                If ForOk
                   Then [Codigo Plano_Conta    ]="2.2.01.01.003"                                ;Reg_Busca_Lookup["Codigo Plano_Conta"]
                        [Descricao Plano_Conta ]="INDUSTRIALIZACAO"                             ;LTrim([Descricao Plano_Conta])
                        [Codigo CCusto         ]=Reg_Busca_Lookup["Codigo CCusto"]
                        [Descricao CCusto      ]=LTrim([Descricao CCusto])
                EndIf

           Else UnLockRecord

                If Form()<>"None"
                   Then Moveto "ProgfC" UnLockRecord KeyPress "F7"
                EndIf   

                Moveto "ProgfCP"
                Moveto [Sequencia do Lancamento]
                Locate LANCTO,SEQ

                Moveto [Codigo da Conta    ] Ditto
                Moveto [Tipo do Lancamento ] Ditto
                Moveto [Codigo do Documento] Ditto
                Moveto [Numero do Documento] Ditto
                Moveto [Valor do Documento ] Ditto
                Moveto [Tipo do Pagamento  ] Ditto
                Moveto [Codigo CCusto      ] Ditto
                Moveto [Codigo Plano_Conta ] Ditto
                Moveto [Multa              ] Ditto
                Moveto [Taxa de Juros      ] Ditto
                Moveto [Tipo Taxa de Juros ] Ditto
                Moveto [NDias Taxa de Juros] Ditto
                Moveto [Observacoes        ] Ditto
                Moveto [Data Competencia   ] Ditto
                UnLockRecord

                Moveto "ProgfC"
                KeyPress "F7"
                Moveto "ProgfCP"
                Moveto [Sequencia do Lancamento]
                Locate LANCTO,SEQ

        EndIf
EndIf

INICIO_DIALOG=True
CopyToArray RegItem

Registro_Item_APrazo("Ler")

Showdialog "Dados do Vencimento [     ] Contas a Pagar"+MSG_ATUA Proc "APrazo_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","ClearArea","HOME","END","PGDN","PGUP"
     @ 06,2 height 16 width 74

   Accept @ -01,28 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 "Conta" For "V_Conta"
   Accept @ 01,01 Width 07 "A4" picture "#*#" Tag "V_Conta" to VSD_V_Conta
   Accept @ 01,07 Width 33 "A30" picture "!*!" Tag "V_Descricao_Conta" to VSD_V_Descricao_Conta

   Label  @ 00,57 "Lan‡to CtaPag" For "V_Lancamento"
   Accept @ 01,62 Width 09 "A6" picture "#*#" Tag "V_Lancamento" to VSD_V_Lancamento

   Label  @ 02,00 "Tipo Lan‡amento" For "V_TpLancto"
   Accept @ 03,01 Width 04 "A1" picture "!" Tag "V_TpLancto" to VSD_V_TpLancto
   Accept @ 03,05 Width 23 "A20" picture "!*!" Tag "V_Descricao_TpLancto" to VSD_V_Descricao_TpLancto

   Label  @ 02,28 "Codigo Documento" For "V_CdDocto"
   Accept @ 03,29 Width 07 "A4" picture "!*!" Tag "V_CdDocto" to VSD_V_CdDocto
   Accept @ 03,36 Width 07 "A4" picture "!*!" Tag "V_TpDocto" to VSD_V_TpDocto
   Accept @ 03,43 Width 07 "A4" picture "!*!" Tag "V_SrDocto" to VSD_V_SrDocto
   Label  @ 02,50 "N§ Documento" For "V_NoDocto"
   Accept @ 03,51 Width 13 "A10" picture "!*!" Tag "V_NoDocto" to VSD_V_NoDocto

   Label  @ 04,00 "Dt.Vencto" For "V_DtVencto"
   Accept @ 05,01 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtVencto" to VSD_V_DtVencto

   Label  @ 04,14 "Dt.a Pagar" For "V_DtaPagar"
   Accept @ 05,15 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtaPagar" to VSD_V_DtaPagar

   Label  @ 04,28 "Vr.Lan‡to" For "V_Vr_Lancto"
   Accept @ 05,29 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Lancto" to VSD_V_Vr_Lancto

   Label  @ 04,41 "Forma Pagamento" For "V_TpPagto"
   Accept @ 05,42 Width 05 "A2" picture "!*!" Tag "V_TpPagto" to VSD_V_TpPagto
   Accept @ 05,47 Width 24 "A20" picture "!*!" Tag "V_Descricao_TpPagto" to VSD_V_Descricao_TpPagto

   Label  @ 06,00 "Plano Contas" For "V_PlContas"
   Accept @ 07,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 07,17 Width 43 "A40" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas   
   
   Label  @ 08,00 "Centro Custo" For "V_CCusto"
   Accept @ 09,01 Width 10 "A7" picture "###.###" Tag "V_CCusto" to VSD_V_CCusto
   Accept @ 09,11 Width 28 "A25" picture "!*!" Tag "V_Descricao_CCusto" to VSD_V_Descricao_CCusto

   Label  @ 08,41 "Dt.Compet" For "V_DtCompet"
   Accept @ 09,42 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtCompet" to VSD_V_DtCompet

   Label  @ 10,00 "Vr.Descto" For "V_Vr_Descto"
   Accept @ 11,01 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Descto" to VSD_V_Vr_Descto

   Label  @ 11,13 "Ate" For "V_DtDescto"
   Accept @ 11,18 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtDescto" to VSD_V_DtDescto

   Label  @ 10,31 "Multa(%)" For "V_Multa"
   Accept @ 11,32 Width 09 "$" picture "#*#.[###]" Tag "V_Multa" to VSD_V_Multa

   Label  @ 10,41 "Taxa de Juros(%)" For "V_TxJuros"
   Accept @ 11,42 Width 09 "$" picture "#*#.[###]" Tag "V_TxJuros" to VSD_V_TxJuros

   Label  @ 11,56 "(Dia/Mes/Ano)" For "V_TpTxJuros"
   Accept @ 11,52 Width 4 "A1" picture "&" Tag "V_TpTxJuros" to VSD_V_TpTxJuros

   Label  @ 10,65 "Dias" For "V_TpTxJuros"
   Accept @ 10,59 Width 6 "S"  picture "###" Tag "V_NDTxJuros" to VSD_V_NDTxJuros

   Label  @ 12,00 "Observa‡oes" For "V_Observacoes"
   Accept @ 13,01 Width 70 "A100" picture "!*!" Tag "V_Observacoes" to VSD_V_Observacoes

Enddialog
Mouse Show
If RetVal
   Then Finaliza_Registro_APrazo(True)
   Else Finaliza_Registro_APrazo(False)
EndIf

EndProc  ; (Digita_APrazo)

;*******************************************************************************
;** Inclusao, Alteracao de Caixa/Banco                                        **
;*******************************************************************************
Proc CONTA()
Private SEQMOV

If IsAssigned(DOCTO_AVISTA) And CHAVEAV<>8
   Then VSD_V_NoDoctoAVista = DOCTO_AVISTA
EndIf    

If PARAM_ATUA_CXBC<>"S"
   Then If CHAVEAV=8
           Then Del
        EndIf
        Return
   Else Moveto "ProgfCV"
        UnLockRecord

        Moveto "ProgfC"
        UnLockRecord
        KeyPress "F7"
        
        Caixa_Banco_Ok=True
        Moveto "\\sistemas\\ctacor\\MovCont"
        Moveto [Numero do Lancamento]
        If IsBlank([ProgfCV->Numero do Lancamento CxBc]) And CHAVEAV<>8
           Then While True
                  End
                  If [Numero do Lancamento]=""
                     Then SEQMOV="000001"
                     Else SEQMOV=ALINHM(StrVal(NumVal([Numero do Lancamento])+1),6)
                  EndIf
                  Down
                  [Numero do Lancamento]=SEQMOV
                  If Not IsLockRecord() Then QuitLoop EndIf
                EndWhile
                CHAVEAV=1
           Else Locate [ProgfCV->Numero do Lancamento CxBc]
                If Not RetVal
                   Then Caixa_Banco_Ok=False
                   Else NUM_DOCTO_ANTERIOR=[Numero do Documento]   
                        Caixa_Banco_Ok=True
                EndIf
                
                ;*** Em Caso de Erro ***
                If Caixa_Banco_Ok
                   Then MSG=    "Movimento no Caixa/Banco n„o corresponde a esta programa‡„o!//"
                   Else MSG=    "Lan‡amento no Caixa/Banco n„o encontrado p/ esta programa‡„o!//"
                EndIf
                MSG=MSG+"Verificar no Caixa/Banco se o mes n„o foi fechado !//"
                MSG=MSG+"Neste caso o estorno no Caixa/Banco n„o sera efetuado !//"
                MSG=MSG+"Talvez algum outro erro gerou este problema !//"
        EndIf     
EndIf

Switch
  Case CHAVEAV=1 :
       If Not IsBlank([ProgfCV->Numero do Lancamento CxBc])
          Then MSG=    "J  existe um Lan‡amento no Caixa/Banco p/ esta programa‡„o!//"
               MSG=MSG+"Verificar no Caixa/Banco o Lan‡amento e Corrigi-lo !//"
               MSG=MSG+"Talvez algum erro gerou este problema !//"
               Mensagem()
       EndIf
       Caixa_Banco_Ok=True
       [Codigo da Conta       ]=[ProgfCV->Codigo da Conta]
       [Codigo da Empresa     ]=[ProgfC->Codigo da Empresa]
       [Data                  ]=[ProgfC->Data_Producao]
       [Data Competencia      ]=[Data]
       [Valor                 ]=[ProgfCV->Valor]
       [Valor do Desconto     ]=[ProgfCV->Valor do Desconto]
       [Valor do Juros        ]=[ProgfCV->Valor do Juros]
       [Numero do Cheque      ]=[ProgfCV->Numero do Cheque]
       [Codigo do Documento   ]=VSD_V_CdDocto  
       [Numero do Documento   ]=VSD_V_NoDoctoAVista
       [Tipo de Operacao      ]=[ProgfCV->Tipo de Operacao]      
       [Descricao do Historico]="PG "+VSD_V_TpDocto+"/"+VSD_V_NoDoctoAVista
       [Sistema Gerador       ]="DC"
       [Empresa Gerador       ]=[ProgfC->Codigo da Empresa]
       [Lancamento Gerador    ]=[ProgfC->Numero_ProgramacaoDisco]
       [Codigo do EmitDest    ]=[ProgfC->Codigo]
       [Tipo do Lancamento    ]=[ProgfCV->Tipo do Lancamento]
       [Data Cheque Descontado]=[ProgfCV->Data Cheque Descontado]
       [Codigo CCusto         ]=[ProgfCV->Codigo CCusto]
       [Cheque Pre-Datado     ]=[ProgfCV->Cheque Pre-Datado]
       [Data Cheque Pre-Datado]=[ProgfCV->Data Cheque Pre-Datado]
       [Codigo Plano_Conta    ]=[ProgfCV->Codigo Plano_Conta]
       If Not IsBlank([ProgfCV->Codigo do Historico])
          Then [Codigo do Historico   ]=[ProgfCV->Codigo do Historico]
               [Descricao do Historico]=[ProgfCV->"Descricao do Historico]
          Else If Not IsBlanK([ProgfCV->Descricao do Historico])
                  Then [Descricao do Historico]=[ProgfCV->Descricao do Historico]
               EndIf
       EndIf
       Controle_Dia()
       UnLockRecord
  
       Moveto "ProgfCV"
       [Numero do Lancamento CxBc]=SEQMOV
       UnLockRecord
  
       Atualiza_Saldo_Conta()
       Sleep 1000
  Case CHAVEAV=0:                                                      
       If Not Caixa_Banco_Ok  Or (Caixa_Banco_Ok  And ([Sistema Gerador       ]<>"DC"                               Or
                                                       [Empresa Gerador       ]<>[ProgfC->Codigo da Empresa]        Or
                                                       [Lancamento Gerador    ]<>[ProgfC->Numero_ProgramacaoDisco]  Or
                                                       [Codigo do Documento   ]<>VSD_V_CdDocto                      Or
                                                       [Numero do Documento   ]<>NUM_DOCTO_ANTERIOR))
            Then UnLockRecord
                 Moveto "ProgfCV"
                 CopyFromArray RegItem
                 UnLockRecord
                 
                 MSG=MSG+"Se necess rio exclua este Lan‡amento a Vista e fa‡a-o novamente !"
                 Mensagem(MSG)
                 Moveto "ProgfC" UnLockRecord KeyPress "F7"
            Else [Codigo da Conta       ]=[ProgfCV->Codigo da Conta]
                 [Codigo da Empresa     ]=[ProgfC->Codigo da Empresa]
                 [Data                  ]=[ProgfC->Data_Producao]
                 [Valor                 ]=[ProgfCV->Valor]
                 [Valor do Desconto     ]=[ProgfCV->Valor do Desconto]
                 [Valor do Juros        ]=[ProgfCV->Valor do Juros]
                 [Numero do Cheque      ]=[ProgfCV->Numero do Cheque]
                 [Codigo do Documento   ]=VSD_V_CdDocto
                 [Numero do Documento   ]=VSD_V_NoDoctoAVista
                 If [ProgfCV->Tipo da Conta]="X"
                    Then [Tipo de Operacao]="06"
                    Else [Tipo de Operacao]="05"
                 EndIf
                 [Descricao do Historico]="PG "+VSD_V_TpDocto+"/"+VSD_V_NoDoctoAVista
                 [Sistema Gerador       ]="DC"
                 [Empresa Gerador       ]=[ProgfC->Codigo da Empresa      ]
                 [Lancamento Gerador    ]=[ProgfC->Numero_ProgramacaoDisco]
                 [Codigo do EmitDest    ]=[ProgfC->Codigo                 ]
                 [Tipo do Lancamento    ]=[ProgfCV->Tipo do Lancamento]
                 [Data Cheque Descontado]=[ProgfCV->Data Cheque Descontado]
                 [Codigo CCusto         ]=[ProgfCV->Codigo CCusto]
                 [Cheque Pre-Datado     ]=[ProgfCV->Cheque Pre-Datado]
                 [Data Cheque Pre-Datado]=[ProgfCV->Data Cheque Pre-Datado]
                 [Codigo Plano_Conta    ]=[ProgfCV->Codigo Plano_Conta]
                 [Codigo do Historico   ]=[ProgfCV->Codigo do Historico]
                 If Not IsBlank([ProgfCV->Codigo do Historico])
                    Then [Codigo do Historico   ]=[ProgfCV->Codigo do Historico]
                         [Descricao do Historico]=[ProgfCV->Descricao do Historico]
                    Else If Not IsBlanK([ProgfCV->Descricao do Historico])
                            Then [Descricao do Historico]=[ProgfCV->Descricao do Historico]
                         EndIf
                 EndIf
                 UnLockRecord
                 Moveto "ProgfC"
                 UnLockRecord
                 
                 Atualiza_Saldo_Conta()
                 Sleep 1000
       EndIf
  Case CHAVEAV=8: 
       If Not Caixa_Banco_Ok  Or (Caixa_Banco_Ok  And ([Sistema Gerador       ]<>"DC"                               Or
                                                       [Empresa Gerador       ]<>[ProgfC->Codigo da Empresa   ]     Or
                                                       [Lancamento Gerador    ]<>[ProgfC->Numero_ProgramacaoDisco]  Or
                                                       [Codigo do Documento   ]<>VSD_V_CdDocto                      Or
                                                       [Numero do Documento   ]<>NUM_DOCTO_ANTERIOR))
            Then UnLockRecord
                 Moveto "ProgfCV"
                 If Exclusao_Cabeca
                    Then Mensagem(MSG)
                         OK="S"
                    Else MSG=MSG+"Deseja Excluir assim mesmo ?"
                         ConfGeral(MSG)
                 EndIf
                 If OK="S"
                    Then Del
                 EndIf
            Else Atualiza_Saldo_Conta()
                 Sleep 1000
                 Moveto "\\Sistemas\\CtaCor\\MovCont"
                 Del
                 Moveto "ProgfCV"
                 Del
       EndIf
EndSwitch

Moveto "ProgfC"
KeyPress "F7"
Moveto "ProgfCV"

EndProc ;CONTA()

;*******************************************************************************
;* Rotina para Atualizar o Saldo da Conta                                      *
;*******************************************************************************
Proc Atualiza_Saldo_Conta()
Moveto "\\Sistemas\\CtaCor\\SaldCont"
Moveto [Codigo da Conta]
Locate [ProgfCV->Codigo da Conta],ANO,MES
If Not RetVal
   Then End Down
        [Codigo da Conta]=[ProgfCV->Codigo da Conta]
        [Ano Referencia ]=ANO
        [Mes Referencia ]=MES
EndIf
If CHAVEAV<>8
   Then [Saidas]=([Saidas]-VALORANT)+[ProgfCV->Valor]
   Else [Saidas]=[Saidas]-[ProgfCV->Valor]
EndIf
UnLockRecord
EndProc ;Atualiza_Saldo_Conta()

;*******************************************************************************
;* Rotina para Lancamento a Vista                                              *
;*******************************************************************************
Proc Digita_AVista()
Private MSG_ATUA
MSGCAMPO     = ""

If PARAM_ATUA_CXBC="S"
   Then MSG_ATUA=" - ATUALIZANDO !"
   Else MSG_ATUA=" - NAO ATUALIZA !"
EndIf

Exclusao_Cabeca=False
Moveto "ProgfCV"
VALORANT=[Valor]
If RecordStatus("New")
   Then CHAVEAV=1
        [Tipo do Lancamento    ]="C"
        [Tipo de Operacao      ]="06"
        [Codigo do Documento  ]="PROD"
        [Numero do Documento  ]=LANCTO
        [Valor                ]=[ProgfC->Valor_Mao_Obra]*[ProgfC->Quantidade_Produzida]
        [Codigo Plano_Conta   ]="2.2.01.01.003"
        [Descricao Plano_Conta]="INDUSTRIALIZACAO"
        [Descricao do Historico]="PG "+[Tipo do Documento]+"/"+[Numero do Documento]
        NUM_DOCTO_ANTERIOR     = [Numero do Documento  ]
   Else CHAVEAV=0
        NUM_DOCTO_ANTERIOR     = [Numero do Documento  ]
EndIf

Release Vars DOCTO_AVISTA

INICIO_DIALOG=True
CopyToArray RegItem

Registro_AVista("Ler")
                                          
Showdialog "Caixa/Banco"+MSG_ATUA Proc "AVista_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","ENTER","ESC","ClearArea"
     @ 04,02 height 18 width 74

   Label  @ 00,00 "Conta" For "V_Conta"
   Accept @ 01,01 Width 07 "A4" picture "#*#" Tag "V_Conta" to VSD_V_Conta
   Accept @ 01,07 Width 48 "A27" picture "!*!" Tag "V_Descricao_Conta" to VSD_V_Descricao_Conta

   Label  @ 00,56 "Lan‡to Cxa/Bco" For "V_Lancamento"
   Accept @ 01,62 Width 09 "A6" picture "#*#" Tag "V_Lancamento" to VSD_V_Lancamento

   Label  @ 02,00 "Tipo Opera‡„o" For "V_Tpoper"                    
   Accept @ 03,01 Width 05 "A2" picture "#*#" Tag "V_Tpoper" to VSD_V_Tpoper
   Accept @ 03,05 Width 22 "A20" picture "!*!" Tag "I_Descricao_Tpoper" to VSD_I_Descricao_Tpoper

   Label  @ 02,27 "Tipo Lan‡amento" For "V_TpLancto"
   Accept @ 03,28 Width 04 "A1" picture "!" Tag "V_TpLancto" to VSD_V_TpLancto
   Accept @ 03,32 Width 23 "A20" picture "!*!" Tag "V_Descricao_TpLancto" to VSD_V_Descricao_TpLancto

   Label  @ 04,00 "Codigo Documento" For "V_CdDocto"
   Accept @ 05,01 Width 07 "A4" picture "!*!" Tag "V_CdDocto" to VSD_V_CdDocto
   Accept @ 05,08 Width 07 "A4" picture "!*!" Tag "V_TpDocto" to VSD_V_TpDocto
   Accept @ 05,15 Width 07 "A4" picture "!*!" Tag "V_SrDocto" to VSD_V_SrDocto
   
   Label  @ 04,22 "N§ Documento" For "V_NoDocto"
   Accept @ 05,23 Width 16 "A10" picture "!*!" Tag "V_NoDocto" to VSD_V_NoDoctoAVista

   Label  @ 06,00 "Vr.Lan‡to" For "V_Vr_Lancto"
   Accept @ 07,01 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Lancto" to VSD_V_Vr_Lancto

   Label  @ 06,13 "Vr.Juros" For "V_Vr_Juros"
   Accept @ 07,14 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Juros" to VSD_V_Vr_Juros
   
   Label  @ 06,26 "Vr.Descto" For "V_Vr_Descto"
   Accept @ 07,27 Width 12 "$" picture "#*#.[##]" Tag "V_Vr_Descto" to VSD_V_Vr_Descto

   Label  @ 08,00 "N§ Cheque" For "V_NoCheque"                                                          
   Accept @ 09,01 Width 13 "A11" picture "!*!" Tag "V_NoCheque" to VSD_V_NoCheque

   Label  @ 08,14 "Dt   Pre-Datado" For "I_DtCPrDat"
   Accept @ 09,15 Width 04 "A1" picture "S,N" Tag "I_ChPreDat" to VSD_I_ChPreDat
   Accept @ 09,19 Width 13 "D" picture "#[#];.##;.##[##]" Tag "I_DtCPrDat" to VSD_I_DtCPrDat

   Label  @ 08,32 "Dt.Descto" For "V_DtDescto"
   Accept @ 09,33 Width 13 "D" picture "#[#];.##;.##[##]" Tag "V_DtDescto" to VSD_V_DtDescto

   Label  @ 10,00 "Plano Contas" For "V_PlContas"
   Accept @ 11,01 Width 16 "A13" picture "!*!" Tag "V_PlContas" to VSD_V_PlContas
   Accept @ 11,17 Width 38 "A35" picture "!*!" Tag "V_Descricao_PlContas" to VSD_V_Descricao_PlContas

   Label  @ 12,00 "Centro Custo" For "V_CCusto"
   Accept @ 13,01 Width 10 "A7" picture "###.###" Tag "V_CCusto" to VSD_V_CCusto
   Accept @ 13,11 Width 28 "A25" picture "!*!" Tag "V_Descricao_CCusto" to VSD_V_Descricao_CCusto

   Label  @ 14,00 "Historico" For "V_Codigo_Hist"
   Accept @ 15,01 Width 07 "A4" picture "#*#" Tag "V_Codigo_Hist" to VSD_V_Codigo_Hist
   Accept @ 15,08 Width 63 "A70" picture "!*!" Tag "V_Descri_Hist" to VSD_V_Descri_Hist

Enddialog
Mouse Show    
        
If CHAVEAV<>9
   Then CONTA()
EndIf
Moveto "ProgfC"
Moveto [Tipo de Pagamento]

EndProc ;Digita_AVista()

;*******************************************************************************
;* Rotina de Digitacao Dados a Vista                                           *
;*******************************************************************************
Proc AVista_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5

CAIXA_BANCO=True
TECLA=" Esc=Retornar  "
MSGCAMPO=""

If INICIO_DIALOG
   Then TECLA=TECLA+"F1=Tabelas  "
        SelectControl "V_Conta"
        INICIO_DIALOG=False
EndIf

Temp=True

If Campo="V_Conta"
   Then Monta_Opcoes("Codigo da Conta",VSD_V_Conta)
EndIf

If Campo="V_Tpoper"
   Then Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
EndIf                 

If Disparo="EVENT" And DynArraySize(Evento)>0 And Evento["Type"]="KEY" Then
   Switch
       Case Evento["KeyCode"] = 9:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEAV=0
               Then If QuerExcluir("")
                       Then CopyFromArray RegItem
                            Exclusao_Cabeca=False
                            CHAVEAV=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59: 
            If Campo="V_PlContas"  Or
               Campo="V_CCusto"    Or
               Campo="V_Codigo_Hist"
               Then
                    Dynarray WinArray5[]
                    Window Handle Dialog to JANELA
                    Window GetAttributes JANELA To WinArray5
                    WinArray5["FLOATING"]=False
                    Window SetAttributes JANELA From WinArray5

                    If Campo="V_Conta"       Then Moveto [Codigo da Conta    ] EndIf
                    If Campo="V_CdDocto"     Then Moveto [Codigo do Documento] EndIf
                    If Campo="V_CCusto"      Then Moveto [Codigo CCusto      ] EndIf
                    If Campo="V_PlContas"    Then Moveto [Codigo Plano_Conta ] EndIf
                    If Campo="V_Codigo_Hist" Then Moveto [Codigo do Historico] EndIf
                    ConsultaF1()

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

                    echo Normal
                    echo off

                    If Campo="V_PlContas"
                       Then VSD_V_PlContas          =[Codigo Plano_Conta   ]
                            VSD_V_Descricao_PlContas=LTrim([Descricao Plano_Conta])
                            SelectControl "V_PlContas"
                   EndIf
                   If Campo="V_CCusto"
                       Then VSD_V_CCusto          =[Codigo CCusto   ]
                            VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                            SelectControl "V_CCusto"
                   EndIf
                    If Campo="V_Codigo_Hist"
                       Then VSD_V_Codigo_Hist     =[Codigo do Historico]
                            VSD_V_Descri_Hist     =[Descricao do Historico]
                            Campo="V_Codigo_Hist"
                   EndIf
                   TECLA=TECLA+"F1=Tabelas  "
                   Moveto "ProgfCV"
                   RefreshDialog
           EndIf

           If Campo="V_CdDocto"
              Then If SD_Seleciona_Opcoes("Codigo do Documento","CR",11,4)
                      Then VSD_V_CdDocto           =[Codigo do Documento]
                           VSD_V_TpDocto           =[Tipo do Documento  ]
                           VSD_V_SrDocto           =[Serie do Documento ]
                   EndIf 
                   SelectControl "V_CdDocto"
                   RefreshDialog
           EndIf

           If Campo="V_Conta"
              Then If SD_Seleciona_Opcoes("Codigo da Conta","CR",7,4)
                      Then VSD_V_Conta            = [Codigo da Conta   ]
                            VSD_V_Descricao_Conta = [Descricao da Conta]
                            VSD_V_Tipo_Conta      = [Tipo da Conta     ]
                   EndIf
                   SelectControl "V_Conta"
                   RefreshDialog
           Endif           

           If Campo="V_Tpoper"
              Then If SD_Seleciona_Opcoes("Tipo de Opera‡„o","CR",9,4)
                      Then VSD_V_Tpoper          =[Tipo de Operacao  ]
                           VSD_I_Descricao_Tpoper=[Descricao Operacao]
                   EndIf
                   SelectControl "V_Tpoper"
                   RefreshDialog
           Endif           
           
           If Campo="V_TpLancto" 
              Then If SD_Seleciona_Opcoes("Tipo do Lan‡amento","CR",9,31)
                      Then VSD_V_TpLancto          =[Tipo do Lancamento]
                           VSD_V_Descricao_TpLancto=[Descricao do Lancamento]
                   EndIf
                   SelectControl "V_TpLancto"
                   RefreshDialog
           Endif

           Temp=False
      Case Evento["KeyCode"] = 27: 
           Switch
             Case Campo="V_Conta":
                  If QuerDesfazer("")
                     Then If CHAVEAV = 1 ;Or RecordStatus("Modified")=True
                             Then Del
                          EndIf   
                          CHAVEAV=9
                          CancelDialog
                  EndIf
             Case Campo="V_Tpoper"               : 
                  Monta_Opcoes("Codigo da Conta",VSD_V_Conta)
                  SelectControl "V_Conta"
             Case Campo="V_TpLancto"             :
                  TECLA=TECLA+"F1=Tabelas  " 
                  Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
                  SelectControl "V_Tpoper"
             Case Campo="V_CdDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                  SelectControl "V_TpLancto" 
             Case Campo="V_NoDocto":
                  TECLA=TECLA+"F1=Tabelas  "
                  Monta_Opcoes("Codigo do Documento","")
                  SelectControl "V_CdDocto"
             Case Campo="V_Vr_Lancto":
                  SelectControl "V_NoDocto"
             Case Campo="V_Vr_Juros":
                  SelectControl "V_Vr_Lancto"
             Case Campo="V_Vr_Descto":
                  SelectControl "V_Vr_Juros"  
             Case Campo="V_NoCheque":
                  SelectControl "V_Vr_Descto"
             Case Campo="I_ChPreDat":
                  SelectControl "V_NoCheque"
             Case Campo="I_DtCPrDat":
                  SelectControl "I_ChPreDat"
             Case Campo="V_DtDescto":
                  SelectControl "I_ChPreDat"
             Case Campo="V_PlContas":
                  If VSD_V_Tipo_Conta<>"C"
                     Then SelectControl "V_Vr_Descto"
                     Else SelectControl "V_DtDescto"
                  EndIf       
             Case Campo="V_PlContas":
                  SelectControl "V_Vr_Descto"
             Case Campo="V_CCusto":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_PlContas"
             Case Campo="V_Codigo_Hist":
                  TECLA=TECLA+"F1=Tabelas  "
                  SelectControl "V_CCusto"
             Case Campo="V_Descri_Hist":
                  SelectControl "V_Codigo_Hist"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="V_Conta":
                  VSD_V_Conta=AlinhM(ControlValue("V_Conta"),4)
                  TECLA=TECLA+"F1=Tabelas  "
                  If Not IsBlank(VSD_V_Conta)
                     Then Moveto [Codigo da Conta]
                          Ativa_Lookup()                                                
                          Moveto [Codigo da Conta]
                          Locate VSD_V_Conta
                          If RetVal
                             Then VSD_V_Conta          =[Codigo da Conta   ]
                                  VSD_V_Descricao_Conta=[Descricao da Conta]
                                  VSD_V_Tipo_Conta     =[Tipo da Conta     ]
                                  KeyPress "ESC"
                                  Moveto "ProgfCV"
                                  [Codigo da Conta]=VSD_V_Conta
                                  Monta_Opcoes("Tipo de Opera‡„o",VSD_V_Conta)
                                  SelectControl "V_Tpoper"
                             Else Mensagem("Conta n„o Cadastrada !")
                                  VSD_V_Conta          =""
                                  VSD_V_Descricao_Conta=""
                                  VSD_V_Tipo_Conta     =""
                                  KeyPress "ESC"
                          EndIf
                          Echo Off                
                  EndIf
             Case Campo="V_Tpoper"             : 
                  VSD_V_Tpoper=AlinhM(ControlValue("V_Tpoper"),2)
                  If Checa_Opcoes("Tipo de Opera‡„o",VSD_V_Tpoper)
                     Then VSD_V_Tpoper          =Registro_F1["Tipo de Operacao"]
                          VSD_I_Descricao_Tpoper=Registro_F1["Descricao Operacao"]
                          [Tipo de Operacao    ]=VSD_V_Tpoper
                          Monta_Opcoes("Tipo do Lan‡amento",VSD_V_Tpoper)
                          SelectControl "V_TpLancto"
                     Else Mensagem("Tipo Opera‡„o n„o cadastrada !")
                          VSD_V_Tpoper=""
                          VSD_I_Descricao_Tpoper=""
                  EndIf
             Case Campo="V_TpLancto":
                  VSD_V_TpLancto=ControlValue("V_TpLancto")
                  If Checa_Opcoes("Tipo do Lan‡amento",VSD_V_TpLancto)
                     Then VSD_V_TpLancto          =Registro_F1["Tipo do Lancamento"]
                          VSD_V_Descricao_TpLancto=Registro_F1["Descricao do Lancamento"]
                          [Tipo do Lancamento]    =VSD_V_TpLancto
                          Monta_Opcoes("Codigo do Documento","")
                          SelectControl "V_CdDocto"
                     Else Mensagem("Tipo Lan‡amento n„o cadastrado !")
                          VSD_V_TpLancto=""
                          VSD_V_Descricao_TpLancto=""
                  EndIf             
             Case Campo="V_CdDocto":
                  VSD_V_CdDocto=ControlValue("V_CdDocto")
                  If Checa_Opcoes("Codigo do Documento",VSD_V_CdDocto)
                     Then VSD_V_CdDocto          =[Codigo do Documento]
                          VSD_V_TpDocto          =[Tipo do Documento  ]
                          VSD_V_SrDocto          =[Serie do Documento ]
                          [Codigo do Documento]  =VSD_V_CdDocto
                          SelectControl "V_NoDocto"
                     Else Mensagem("Codigo Documento n„o Cadastrado !")
                          VSD_V_CdDocto          =""
                          VSD_V_TpDocto          =""
                          VSD_V_SrDocto          =""

                  EndIf
             Case Campo="V_NoDocto":
                  VSD_V_NoDoctoAVista = ControlValue("V_NoDocto")
                  VSD_V_Descri_Hist   = "PG "+[Tipo do Documento]+"/"+VSD_V_NoDoctoAVista
                  DOCTO_AVISTA        = VSD_V_NoDoctoAVista
                  SelectControl "V_Vr_Lancto"
             Case Campo="V_Vr_Lancto":
                  VSD_V_Vr_Lancto=ControlValue("V_Vr_Lancto")
                  SelectControl "V_Vr_Juros"
             Case Campo="V_Vr_Juros":
                  VSD_V_Vr_Juros=ControlValue("V_Vr_Juros")
                  SelectControl "V_Vr_Descto"
             Case Campo="V_Vr_Descto":
                  VSD_V_Vr_Descto=ControlValue("V_Vr_Descto")
                  TECLA=TECLA+"F1=Tabelas  "
                  If VSD_V_Tipo_Conta<>"C"
                     Then VSD_V_NoCheque=""
                          VSD_V_DtDescto=BlankDate()
                          VSD_I_ChPreDat=""
                          VSD_I_DtCPrDat=BlankDate()
                          SelectControl "V_PlContas"  
                     Else SelectControl "V_NoCheque"
                  EndIf  
             Case Campo="V_NoCheque":
                  VSD_V_NoCheque=ControlValue("V_NoCheque")
                  If Not IsBlank(VSD_V_NoCheque)
                     Then VSD_V_DtDescto=[ProgfC->Data_Producao]
                          VSD_I_ChPreDat=""
                          VSD_I_DtCPrDat=BlankDate()               
                          SelectControl "V_PlContas"
                  EndIf
             Case Campo="I_ChPreDat":
                  VSD_I_ChPreDat=ControlValue("I_ChPreDat")
                  Switch
                    Case IsBlank(VSD_I_ChPreDat) Or 
                         VSD_I_ChPreDat="N"      : VSD_I_ChPreDat="N"
                                                   VSD_I_DtCPrDat=BlankDate()
                                                   SelectControl "V_DtDescto"
                    Otherwise                    : SelectControl "I_DtCPrDat"
                  EndSwitch    
             Case Campo="I_DtCPrDat"             :
                  VSD_I_DtCPrDat=ControlValue("I_DtCPrDat")
                  If IsBlank(VSD_I_DtCPrDat) And VSD_I_ChPreDat="S" 
                     Then SelectControl "I_DtCPrDat"
                     Else SelectControl "V_DtDescto"  
                  EndIf     
             Case Campo="V_DtDescto":
                  VSD_V_DtDescto=ControlValue("V_DtDescto")
                  SelectControl "V_PlContas"

             Case Campo="V_PlContas"           :
                  VSD_V_PlContas=ControlValue("V_PlContas")
                  If Not IsBlank(VSD_V_PlContas)
                     Then If PlContas(VSD_V_PlContas,"S")
                             Then VSD_V_PlContas           = REG_PLCONTAS["Codigo Plano_Conta"]
                                  VSD_V_Descricao_PlContas = LTrim(REG_PLCONTAS["Descricao Plano_Conta"])
                                  VSD_V_Codigo_Hist        = REG_PLCONTAS["Codigo do Historico"]
                                  Moveto "ProgfCV"
                                  [Codigo Plano_Conta]     = VSD_V_PlContas
                                  SelectControl "V_CCusto"
                             Else VSD_V_PlContas           = ""
                                  VSD_V_Descricao_PlContas = ""
                          EndIf   
                     Else VSD_V_Descricao_PlContas=""
                          SelectControl "V_CCusto"
                  EndIf
             Case Campo="V_CCusto"             :
                  VSD_V_CCusto=ControlValue("V_CCusto")
                  If Not IsBlank(VSD_V_CCusto)
                     Then Moveto [Codigo CCusto]
                          Ativa_Lookup()
                          Moveto [Codigo CCusto]
                          Locate VSD_V_CCusto
                          If RetVal
                             Then If [Tipo de Conta] <> "A"
                                     Then Msg = "Tipo de Conta deve ser Analitica ! // //"
                                          Msg = Msg + "Uma Conta pode ser Analitica ou Sintetica.//"
                                          Msg = Msg + "    Um lancamento pode ser efetuado somente em uma conta //"
                                          Msg = Msg + "Analitica. Verifique no Cadastro Centros de Custos a classificacao //"
                                          Msg = Msg + "do Tipo de Conta."
                                          Mensagem(Msg)
                                          VSD_V_CCusto          =""
                                          VSD_V_Descricao_CCusto=""
                                          KeyPress "ESC"
                                     Else
                                          VSD_V_CCusto          =[Codigo CCusto]
                                          VSD_V_Descricao_CCusto=LTrim([Descricao CCusto])
                                          KeyPress "ESC"
                                          Moveto "ProgfCV"
                                          [Codigo CCusto]=VSD_V_CCusto
                                          SelectControl "V_Codigo_Hist"
                                  Endif
                             Else Mensagem("Centro de Custo n„o Cadastrado !")
                                  VSD_V_CCusto          =""
                                  VSD_V_Descricao_CCusto=""
                                  TECLA=TECLA+"F1=Tabelas  "
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                     Else VSD_V_Descricao_CCusto=""
                          SelectControl "V_Codigo_Hist"
                  EndIf

             Case Campo="V_Codigo_Hist"        : SelectControl "V_Descri_Hist"
                  VSD_V_Codigo_Hist=ControlValue("V_Codigo_Hist")
                  If Not IsBlank(VSD_V_Codigo_Hist)
                     Then VSD_V_Codigo_Hist=AlinhM(VSD_V_Codigo_Hist,4)
                          Moveto [Codigo do Historico]
                          Ativa_Lookup()
													Moveto [Codigo do Historico]
                          Locate VSD_V_Codigo_Hist
                          If RetVal
                             Then If HIOLD<>VSD_V_Codigo_Hist
                                     Then VSD_V_Descri_Hist  =[Descricao do Historico]
                                  EndIf
                                  KeyPress "ESC"
                                  If HIOLD<>VSD_V_Codigo_Hist
                                     Then HISTORICO()
                                  EndIf
                                  HIOLD =VSD_V_Codigo_Hist
														 Else Mensagem("Historico n„o Cadastrado !")
                                  VSD_V_Codigo_Hist=""
                                  VSD_V_Descri_Hist=""
                                  KeyPress "ESC"
                                  SelectControl "V_Codigo_Hist"
                          EndIf
                          Echo Off
                     Else HIOLD =VSD_V_Codigo_Hist
                  EndIf
             Case Campo="V_Descri_Hist"     :
                  VSD_V_Descri_Hist=ControlValue("V_Descri_Hist")
                  CancelDialog
           EndSwitch
           RefreshDialog
           Registro_AVista("Gravar")
           Temp=False
   EndSwitch
EndIf

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

@ 23,0 ?? ">"+Format("W79,AL",MSGCAMPO)
PaintCanvas Attribute 30 23,0,23,79
          
@ 24,0 ?? TECLA+Spaces(80-Len(TECLA))
PaintCanvas Attribute 31 24,0,24,79

Mouse Hide
Return TEMP
EndProc  ; (AVista_Dialog)

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Vista                                  *
;*******************************************************************************
Proc Registro_AVista(Funcao_Registro)
Private Funcao_Registro

Switch
  Case Funcao_Registro="Gravar":
       [Numero do Lancamento CxBc]=VSD_V_Lancamento
       [Codigo da Conta          ]=VSD_V_Conta
       [Codigo da Empresa        ]=[ProgfC->Codigo da Empresa]
       [Tipo da Conta            ]=VSD_V_Tipo_Conta
       [Descricao da Conta       ]=VSD_V_Descricao_Conta
       [Valor                    ]=VSD_V_Vr_Lancto
       [Valor do Desconto        ]=VSD_V_Vr_Descto
       [Valor do Juros           ]=VSD_V_Vr_Juros
       [Numero do Cheque         ]=VSD_V_NoCheque
       [Cheque Pre-Datado        ]=VSD_I_ChPreDat
       [Data Cheque Pre-Datado   ]=VSD_I_DtCPrDat       
       [Codigo do Documento      ]=VSD_V_CdDocto
       [Tipo do Documento        ]=VSD_V_TpDocto
       [Serie do Documento       ]=VSD_V_SrDocto
       [Numero do Documento      ]=VSD_V_NoDoctoAVista
       [Tipo do Lancamento       ]=VSD_V_TpLancto
       [Descricao do Lancamento  ]=VSD_V_Descricao_TpLancto
       [Data Cheque Descontado   ]=VSD_V_DtDescto
       [Codigo Plano_Conta       ]=VSD_V_PlContas
       [Descricao Plano_Conta    ]=VSD_V_Descricao_PlContas
       [Tipo de Operacao         ]=VSD_V_Tpoper
       [Descricao Operacao       ]=VSD_I_Descricao_Tpoper
       [Codigo CCusto            ]=VSD_V_CCusto
       [Descricao CCusto         ]=VSD_V_Descricao_CCusto
       [Codigo do Historico      ]=VSD_V_Codigo_Hist
       [Descricao do Historico   ]=VSD_V_Descri_Hist
  Case Funcao_Registro="Ler":
       VSD_V_Lancamento           =[Numero do Lancamento CxBc]
       VSD_V_Conta                =[Codigo da Conta          ]
       VSD_V_Tipo_Conta           =[Tipo da Conta            ]
       VSD_V_Descricao_Conta      =[Descricao da Conta       ]
       VSD_V_Vr_Lancto            =[Valor                    ]
       VSD_V_Vr_Descto            =[Valor do Desconto        ]
       VSD_V_Vr_Juros             =[Valor do Juros           ]
       VSD_V_NoCheque             =[Numero do Cheque         ]
       VSD_I_ChPreDat             =[Cheque Pre-Datado        ]
       VSD_I_DtCPrDat             =[Data Cheque Pre-Datado   ]
       VSD_V_CdDocto              =[Codigo do Documento      ]
       VSD_V_TpDocto              =[Tipo do Documento        ]
       VSD_V_SrDocto              =[Serie do Documento       ]
       VSD_V_NoDoctoAVista        =[Numero do Documento      ]
       VSD_V_TpLancto             =[Tipo do Lancamento       ]  
       VSD_V_Descricao_TpLancto   =[Descricao do Lancamento  ]
       VSD_V_Tpoper               =[Tipo de Operacao         ]
       VSD_I_Descricao_Tpoper     =[Descricao Operacao       ]
       VSD_V_DtDescto             =[Data Cheque Descontado   ]
       VSD_V_PlContas             =[Codigo Plano_Conta       ]
       VSD_V_Descricao_PlContas   =[Descricao Plano_Conta    ]
       VSD_V_CCusto               =[Codigo CCusto            ]
       VSD_V_Descricao_CCusto     =[Descricao CCusto         ]
       VSD_V_Codigo_Hist          =[Codigo do Historico      ]
       VSD_V_Descri_Hist          =[Descricao do Historico   ]
       HIOLD                      =[Codigo do Historico      ]
       VSD_V_Flag                 =""                          
EndSwitch

EndProc ;Registro_AVista()

;*******************************************************************************
;* Rotina para Gravacao/Leitura Pagto a Prazo                                  *
;*******************************************************************************
Proc Registro_Item_APrazo(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Numero Lancamento Titulos]=VSD_V_Lancamento
       [Codigo do Documento      ]=VSD_V_CdDocto
       [Tipo do Documento        ]=VSD_V_TpDocto
       [Serie do Documento       ]=VSD_V_SrDocto
       [Numero do Documento      ]=VSD_V_NoDocto
       [Tipo do Lancamento       ]=VSD_V_TpLancto
       [Descricao do Lancamento  ]=VSD_V_Descricao_TpLancto
       [Tipo de Operacao         ]=VSD_V_Tpoper
       [Descricao Operacao       ]=VSD_I_Descricao_Tpoper
       [Data de Vencimento       ]=VSD_V_DtVencto
       [Data a Pagar             ]=VSD_V_DtaPagar
       [Data Competencia         ]=VSD_V_DtCompet
       [Valor do Documento       ]=VSD_V_Vr_Lancto
       [Valor do Desconto        ]=VSD_V_Vr_Descto
       [Data Limite Desconto     ]=VSD_V_DtDescto
       [Taxa de Juros            ]=VSD_V_TxJuros
       [Tipo Taxa de Juros       ]=VSD_V_TpTxJuros
       [NDias Taxa de Juros      ]=VSD_V_NDTxJuros
       [Tipo do Pagamento        ]=VSD_V_TpPagto
       [Descricao Tipo Pagamento ]=VSD_V_Descricao_TpPagto
       [Codigo da Conta          ]=VSD_V_Conta
       [Codigo da Empresa        ]=[ProgfC->Codigo da Empresa]
       [Descricao da Conta       ]=VSD_V_Descricao_Conta
       [Observacoes              ]=VSD_V_Observacoes
       [Multa                    ]=VSD_V_Multa
       [Codigo CCusto            ]=VSD_V_CCusto
       [Descricao CCusto         ]=VSD_V_Descricao_CCusto
       [Codigo Plano_Conta       ]=VSD_V_PlContas
       [Descricao Plano_Conta    ]=VSD_V_Descricao_PlContas
       UnLockRecord
  Case Funcao_Registro="Ler":  
       VSD_I_Seq                  =[Sequencia do Lancamento  ]
       VSD_V_Lancamento           =[Numero Lancamento Titulos]
       VSD_V_CdDocto              =[Codigo do Documento      ]
       VSD_V_TpDocto              =[Tipo do Documento        ]
       VSD_V_SrDocto              =[Serie do Documento       ]
       VSD_V_NoDocto              =[Numero do Documento      ]
       VSD_V_TpLancto             =[Tipo do Lancamento       ]  
       VSD_V_Descricao_TpLancto   =[Descricao do Lancamento  ]
       VSD_V_Tpoper               =[Tipo de Operacao         ]
       VSD_I_Descricao_Tpoper     =[Descricao Operacao       ]
       VSD_V_DtVencto             =[Data de Vencimento       ]
       VSD_V_DtaPagar             =[Data a Pagar             ]       
       VSD_V_DtCompet             =[Data Competencia         ]
       VSD_V_Vr_Lancto            =[Valor do Documento       ]
       VSD_V_Vr_Descto            =[Valor do Desconto        ]
       VSD_V_DtDescto             =[Data Limite Desconto     ]
       VSD_V_TxJuros              =[Taxa de Juros            ]
       VSD_V_TpTxJuros            =[Tipo Taxa de Juros       ]
       VSD_V_NDTxJuros            =[NDias Taxa de Juros      ]
       VSD_V_TpPagto              =[Tipo do Pagamento        ]
       VSD_V_Descricao_TpPagto    =[Descricao Tipo Pagamento ]
       VSD_V_Conta                =[Codigo da Conta          ]
       VSD_V_Descricao_Conta      =[Descricao da Conta       ]
       If IsBlank(VSD_V_CONTA)
          Then VSD_V_CONTA          =PARAM_CONTA_CAIXA
               VSD_V_DESCRICAO_CONTA=PARAM_DESC_CONTA_CAIXA
       EndIf
       VSD_V_Observacoes          =[Observacoes              ]
       VSD_V_Multa                =[Multa                    ]
       VSD_V_CCusto               =[Codigo CCusto            ]
       VSD_V_Descricao_CCusto     =[Descricao CCusto         ]
       VSD_V_PlContas             =[Codigo Plano_Conta       ]
       VSD_V_Descricao_PlContas   =[Descricao Plano_Conta    ]
EndSwitch

EndProc ;Registro_APrazo()

;*******************************************************************************
;* Rotina para Digitacao Dados Gerais                                          *
;*******************************************************************************
Proc DIGITACP()

Moveto "ProgfC"    
SetaCorRegistro("Editar")                   

If PROGFUND_ROTINA="PRODUCAO" And [Tipo_Programacao]<>"REMESSA"
   Then Moveto [Tipo de Pagamento]
        TPPAGTO=[Tipo de Pagamento]
   Else Moveto [Flag4]
EndIf   

While True      
      MSGCAMPO=Field()
      TECLA = ""

      If Field()=""
         Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
      EndIf

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA
      AguardaTeclasPadraoIt2()
        
      Switch      
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-115 Or RetVal=-116 :
           Tecla_Funcao=RetVal
           Return
           
      Case RetVal="F1" :
           If Field()="Tipo de Pagamento" Then CONSULTAF1() EndIf
    
      Case Retval="ESC": 
           Switch
             Case Field()="Tipo de Pagamento" : CHAVEAP=9
                                                Tecla_Funcao=BlankNum()
                                                campocorrente="Flag1"
                                                Return 
             Case Field()="Flag4"             : Tecla_Funcao=BlankNum()
                                                campocorrente="Flag1"
                                                Return
           EndSwitch
      Case Retval="PGDN":
           If VALIDA_CAMPO()
              Then FINALIZADO=True
                   CHAVE=9
                   OPCAO=""
                   QuitLoop
              Else Loop     
           EndIf        
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="DOWN" And CHAVE=0:
           Tecla_Funcao=-36
           Return
      Case Retval="ENTER": 
           Switch
              Case Field()="Tipo de Pagamento" : 
                   If IsBlank([]) Then Loop EndIf
                    If Not CHECA_TPPAGTO() Then Loop EndIf
                    If []="V" Then Digita_AVista() EndIf
                    If []="P"
                       Then SetaCorRegistro("Padrao")
                            Moveto "ProgfCP"
                            While True
                              CHAVEAP()
                              If CHAVEAP=9 Or                   
                                 CHAVEAP=7 
                                 Then SetaCorRegistro("Padrao") 
                                      QuitLoop 
                              EndIf
                              Controla_EdicaoAP()
                            EndWhile
                            Moveto "ProgfC"
                            SetaCorRegistro("Editar")
                            Moveto [Tipo de Pagamento]
                            If CHAVEAP=7
                               Then QuitLoop
                            EndIf   
                    EndIf         
              Case Field()="Flag4"                 : Avanco_Tela()
                                                     Return                    
              OtherWise: Right
           EndSwitch
      EndSwitch
EndWhile

EndProc ;DIGITACP()      

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

Moveto "Progfri"
While True
  SomaItens()
  Moveto [Sequencia do Lancamento]
  End
  ITEM = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
        Moveto "Progfri"   
        Moveto [Sequencia do Lancamento]

        TECLA=" Altt+F=Fun‡„o  PgDn=Finalizar  F9=Editar"
            
        MSGCAMPO=Field()
        Switch
          Case Field()="" : MSGCAMPO=""
        endswitch
    
        If Field()="" Or
           Field()=""
           Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
        EndIf

        Prompt TECLA
        Wait Field
          Until "ESC","ENTER","HOME","UP","PGUP","PGDN","DEL","FIELDVIEW","DOWN",
                -94,-33,-115,-116,-133,-134,-145,-24,-30,-34,"F1",
                "F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F35"
        
        
        If RetVal=-33
           Then If Not Seleciona_Funcao()
                   Then Loop
                   Else Del
                        CHAVEI=9
                        Return
                EndIf
        EndIf

        Switch
        Case RetVal=-24  Or RetVal=-25  Or RetVal=-19 Or RetVal=-49  Or
             RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or RetVal=-115 Or 
             RetVal=-116 Or RetVal="F6" Or RetVal="F5" :
             Tecla_Funcao=RetVal
             Del
             CHAVEI=9
             Return

        Case RetVal="F3":
             Del
             Moveto [Sequencia do Lancamento]
             If RecordStatus("New")
                Then MENSAGEM("Sem Item p/ ver !")
                     QuitLoop
             EndIf
             Opcao_Ver=True
             CHAVEI=0
             Home
             ITEM=[Sequencia do Lancamento]
             Inicia_Registro()
             DIGITAI_Ficha()
             QuitLoop
        Case Retval="F9": 
             Del
             EDITAR("Progfri")
             QuitLoop                        
        Case RetVal="PGDN":
             If VALIDA_CAMPO()
                Then Del
                     Moveto [Sequencia do Lancamento]
                     CHAVEI=9
                     FINALIZADO=True
                     Tecla_Funcao=""
                     Return
                Else Loop     
             EndIF        
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             del
             While True
               Moveto "Progfri"
               Moveto [Sequencia do Lancamento]

               PAGINA("Progfri","MR")
               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then CHAVEI=0
                       Controla_EdicaoI()                     
                  Else If EXCLUIR="S"
                          Then If PROGFUND_ROTINA="PRODUCAO"  
                                  Then FastMsg("N„o ‚ poss¡vel excluir este registros!")
                                       UnLockRecord
                                  Else If QuerEXcluir("")
                                          Then If [Quantidade Produzida]>0
                                                  Then If Checa_Supervisor()
                                                          Then EXCLUSAO("Item")
                                                          Else UnLockRecord
                                                       EndIf
                                                  Else EXCLUSAO("Item")
                                               EndIf
                                               Moveto "Progfri"
                                          Else UnLockRecord
                                       EndIf       
                               EndIf        
                          Else QuitLoop
                       EndIf
               EndIf
               SomaItens()
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             Del
             CHAVEI=9
             Tecla_Funcao=""
             campocorrente="Flag1"
             Return
        Case Retval="ENTER":
             If PROGFUND_ROTINA="PRODUCAO" Or [Progfc->Tipo_Programacao]="ENTRADA" 
                Then Mensagem("N„o ‚ poss¡vel a inclus„o de itens!")
                     UnLockRecord
                Else If Not Seta_Sequencia(ITEM,True)
                        Then Del
                             QuitLoop
                     EndIf
                     ITEM=[]
                     Del
                     Locate LANCTO,ITEM
                     If Retval
                        Then CHAVEI=0
                        Else CHAVEI=1
                             End Down
                             [Numero_ProgramacaoDisco           ] = LANCTO
                             [Sequencia do Lancamento] = ITEM
                             Locate LANCTO,ITEM
                     EndIf
                     Return
             EndIf   
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_Dialog(Disparo,Campo,Evento,Elemento)
Private JANELA, WinArray5
TECLA="Esc=Retornar  "
MSG_CAMPO=""
Temp=True
If INICIO_DIALOG
   Then If CHAVEI=0
           Then If PROGFUND_ROTINA="PRODUCAO" 
                   Then Campo="I_Quantidade2"
                   Else Campo="I_Quantidade"
                EndIf   
           Else Campo="I_Codigo_Item"
        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 ITEM=[Sequencia do Lancamento]
                       Inicia_Registro()
               EndIf
           EndSwitch
       Case Evento["KeyCode"] = 9 Or
            Evento["KeyCode"] = -15:
            Temp=False
       Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
            If CHAVEI=0
               Then If QuerExcluir("")
                       Then CHAVEI=8
                            CopyFromArray RegItem
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item"
               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

                    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_Tipo_Item      =[Tipo do Item      ]
                            VSD_I_UN_Item        =[Unidade Fiscal    ]
                            Campo="I_Codigo_Item"
                    EndIf

                    Moveto "Progfri"
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch   
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then Del
                          CancelDialog
                  EndIf
             Case Campo="I_Quantidade"   Or 
                  Campo="I_Quantidade2"    : 
                  If CHAVEI=0
                     Then If QuerDesfazer("")
                             Then CopyFromArray RegItem
                                  CancelDialog
                          EndIf
                  EndIf
                  If Campo="I_Quantidade"
                     Then Campo="I_Codigo_Item"
                  EndIf  
             Case Campo="I_Quantidade2"    : Campo="I_Quantidade"                  
             Case Campo="I_Flag"           : 
                  If PROGFUND_ROTINA="PRODUCAO"
                     Then Campo="I_Quantidade2"
                     Else Campo="I_Quantidade"
                  EndIf   
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Codigo_Item":
                  VSD_I_Codigo_Item=AlinhM(ControlValue("I_Codigo_Item"),10)
                  If Not IsBlank(VSD_I_Codigo_Item)
                     Then Moveto [Codigo do Item]
                          Ativa_Lookup()
                          Moveto [Codigo do Item]
                          Locate VSD_I_Codigo_Item
                          If RetVal
                             Then If [Inativo]="S"
                                     Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo!")
                                          KeyPress "ESC"
                                     Else KeyPress "ESC"
                                          [Codigo do Item       ]=VSD_I_Codigo_Item
        
                                          Registro_Item("Ler")
                                          RefreshDialog
        
                                          Moveto "Progfri"
                                          Campo="I_Quantidade"
                                  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     =""
                                  VSD_I_Peso          =BlankNum()
                                  VSD_I_PesoT         =BlankNum()
                                  KeyPress "ESC"
                          EndIf
                          Echo Off
                  EndIf
             Case Campo="I_Quantidade"  : Campo="I_Flag"
                  VSD_I_Quantidade=ControlValue("I_Quantidade")
                  VSD_I_PesoT     =VSD_I_Quantidade*[Peso Liquido]
             Case Campo="I_Quantidade2"  : 
                  VSD_I_Quantidade2=ControlValue("I_Quantidade2")
                  If VSD_I_Quantidade2>VSD_I_Quantidade                            
                     Then Mensagem("A quantidade produzida informada ‚ maior que a quantidade programada!")
                     Else Campo="I_Flag"     
                  EndIf   
             Case Campo="I_Flag"        : AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Quantidade"  :
       MSGCAMPO="Quantidade Programada"
  Case Campo="I_Quantidade2" :
       MSGCAMPO="Quantidade Produzida"
  Case Campo="I_Seq"         :
       MSGCAMPO="Sequencia"
  Case Campo="I_Flag":
       MSGCAMPO="[pausa]"
  OtherWise:
       MSGCAMPO=""
EndSwitch

If CHAVEI=0 And PROGFUND_ROTINA<>"PRODUCAO"
    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
Mouse Hide
RefreshDialog
Return TEMP
EndProc  ; (Item_Dialog)

;*******************************************************************************
;* Rotina para Localizar Item                                                  *
;*******************************************************************************
Proc CHAVEIC()
Moveto "Progfrm" 
While True
  SomaItens()
  Moveto [Sequencia]
  End
  NITEM = [Sequencia]
  Down
  Moveto [Sequencia]

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

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While True 
    Moveto "Progfrm"
    Moveto [Sequencia]
    
		TECLA=" Altt+F=Fun‡„o  PgDn=Finalizar  F9=Editar"

    Prompt TECLA
    Wait Field
      Until "ESC","ENTER","HOME","UP","PGUP","PGDN","DEL","FIELDVIEW","DOWN",
             -94,-33,-115,-116,-133,-134,-145,-24,-30,-34,"F1",
             "F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F35"

    If RetVal=-33
			Then If Not Seleciona_Funcao()
							Then Loop
							Else Del
									 CHAVEIC=9
									 Return
					 EndIf
		EndIf

    Switch
    Case RetVal=-24  Or RetVal=-25  Or RetVal=-19 Or RetVal=-49  Or
         RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or RetVal=-115 Or 
         RetVal=-116 Or RetVal="F6" Or RetVal="F5" :
         Tecla_Funcao=RetVal
         Del
         CHAVEIC=9
         Return
    Case RetVal="F3":
         Del
         Moveto [Sequencia]
         If RecordStatus("New")
            Then MENSAGEM("Sem Item p/ ver !")
                 QuitLoop
         EndIf
         Opcao_Ver=True
         CHAVEIC=0
         Home
         SEQIT=[Sequencia]
         Inicia_RegistroIC()
         DigitaIC_Ficha()
         QuitLoop
    Case Retval="F9": 
         Del
         EDITAR("Progfrm")
         QuitLoop         
    Case RetVal="PGDN":
         If VALIDA_CAMPO()
            Then Del
                 Moveto [Sequencia]
                 CHAVEIC=9
                 FINALIZADO=True
                 Tecla_Funcao=""
                 Return
            Else Loop     
         EndIf            
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto "Progfrm"
           Moveto [Sequencia]

           PAGINA("Progfrm","MR")
           SEQIT= [Sequencia]
           If EDITAR="S"
              Then CHAVEIC=0
                   Controla_EdicaoIC()
              Else If EXCLUIR="S"
                      Then If PROGFUND_ROTINA="PRODUCAO"  
                              Then FastMsg("N„o ‚ poss¡vel excluir este registros!")
                                   UnLockRecord
                              Else If QuerEXcluir("")
                                      Then EXCLUSAO("ItemIC")
                                           Moveto "Progfrm"
                                      Else UnLockRecord
                                   EndIf
                           EndIf        
                      Else QuitLoop
                   EndIf
           EndIf      
           SomaItens()
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="ESC":
         Del
         CHAVEIC=9
         Tecla_Funcao=BlankNum()
         campocorrente="Flag1"
         Return  
    Case Retval="ENTER":
        If PROGFUND_ROTINA="PRODUCAO" 
           Then Mensagem("N„o ‚ poss¡vel a inclus„o de itens!")
                UnLockRecord
           Else If Not Seta_Sequencia(NITEM,True)
                   Then Del
                        QuitLoop
                EndIf
                SEQIT=[]
                Del
                Locate LANCTO,SEQIT
                If Retval
                   Then CHAVEIC=0
                        SEQIT=[]
                   Else CHAVEIC=1
                        End
                        Down
                        [Numero_ProgramacaoDisco ] = LANCTO
                        [Sequencia               ] = SEQIT
                        Locate LANCTO,SEQIT
                        UnLockRecord
                        Locate LANCTO,SEQIT
                EndIf
                Return
         EndIf
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (CHAVEIC)

;*******************************************************************************
;* Rotina de Digitacao Dados do Item                                           *
;*******************************************************************************
Proc Item_DialogIC(Disparo,Campo,Evento,Elemento)
TECLA="Esc=Retornar  "
MSG_CAMPO=""
Temp=True

If INICIO_DIALOG
   Then If CHAVEIC=0
           Then If PROGFUND_ROTINA="PRODUCAO" 
                   Then Campo="I_QuantidadeRec"
                   Else Campo="I_Quantidade"
                EndIf   
           Else Campo="I_Codigo_Item"
        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=[Sequencia]
                      Inicia_RegistroIC()
              EndIf
          EndSwitch
     Case Evento["KeyCode"] = 9:
          Temp=False
     Case (Evento["KeyCode"] = -6 Or Evento["KeyCode"] = -147):
          If CHAVEIC=0
             Then If QuerExcluir("")
                     Then CopyFromArray RegItem
                          CHAVEIC=8
                          CancelDialog
                  EndIf
          EndIf
     Case Evento["KeyCode"] = -59 :
          If Campo="I_Codigo_Item" Or
             Campo="I_UN_Item"     Or
             Campo="I_Tipo_Item"
             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 [Lookup_Material]      EndIf
                  If Campo="I_Tipo_Item"         Then Moveto [Tipo do Item]         EndIf
                  If Campo="I_UN_Item"           Then Moveto [Unidade Interna]      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   =[Lookup_Material  ]
                          VSD_I_Descricao_Item=[Descricao do Item]
                          VSD_I_UN_Item       =[Unidade Interna  ]
                          VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Codigo_Item"
                  EndIf
                  If Campo="I_UN_Item"
                     Then VSD_I_UN_Item     =[Unidade Interna]
                          Campo="I_UN_Item"
                  EndIf
                  If Campo="I_Tipo_Item"
                     Then VSD_I_Tipo_Item     =[Tipo do Item     ]
                          Campo="I_Tipo_Item"
                  EndIf
                  Moveto "Progfrm"
          EndIf
         Temp=False
     Case Evento["KeyCode"] = 27:
          Switch
            Case Campo="I_Codigo_Item"                Or
                 (Campo="I_Quantidade" And CHAVEIC=0) Or
                 Campo="I_QuantidadeRec"               :
                 If QuerDesfazer("")
                    Then If CHAVEIC=1
                            Then Del
                            Else CopyFromArray RegItem
                         EndIf
                         CHAVEIC=9
                         CancelDialog
                 EndIf
            Case Campo="I_Descricao_Item"    : Campo="I_Codigo_Item"
            Case Campo="I_Tipo_Item"         : Campo="I_Descricao_Item"
            Case Campo="I_Quantidade"        :
                 If IsBlank(VSD_I_Codigo_Item)
                    Then Campo="I_Tipo_Item"
                    Else Campo="I_Codigo_Item"
                 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_PORC_PR"           : Campo="I_Preco_Unitario"
            Case Campo="I_Flag"              : If PROGFUND_ROTINA="PRODUCAO" 
                                                  Then Campo="I_QuantidadeRec"
                                                  Else Campo="I_Preco_Unitario"
                                               EndIf                                
                                               
          EndSwitch
          Temp=False
     Case Evento["KeyCode"] = 13:
          Switch
            Case Campo="I_Codigo_Item":
                 VSD_I_Codigo_Item=ControlValue("I_Codigo_Item")
                 If Not IsBlank(VSD_I_Codigo_Item)
                    Then If IsBlank(VSD_I_Codigo_Item)
                            Then ;FastMsg("Informe o Item de Consumo!")
                                 Campo="I_Descricao_Item"
                            Else VSD_I_Codigo_Item = ALINHM(AlinhM(ControlValue("I_Codigo_Item"),10),10)
                                 GetRecord "\\Sistemas\\Estoque\\Itens" VSD_I_Codigo_Item To REG_ITEM
                                 If RetVal
                                    Then VSD_I_Descricao_Item = REG_ITEM["Descricao do Item"]
                                         VSD_I_PORC_PR        = BlankNum()
                                         GetRecord "\\Sistemas\\Estoque\\Iten_Com" VSD_I_Codigo_Item To REG_ITEMCOMP
                                         If RetVal
                                            Then If REG_ITEMCOMP["Codigo Concentrador"]<>"" And Type(NumVal(REG_ITEMCOMP["Codigo Concentrador"]))="N"
                                                    Then VSD_I_PORC_PR = NumVal(REG_ITEMCOMP["Codigo Concentrador"])
                                                 EndIf
                                         EndIf
                                         [Codigo do Material]=VSD_I_Codigo_Item
                                         [Lookup_Material   ]=VSD_I_Codigo_Item
                                         [Porc_Perda        ]=VSD_I_PORC_PR    
                                         Registro_ItemIC("Ler")
                                         ESTOQUE("CUSTO","",[Progfc->Data_Producao],[Progfc->Codigo Empresa Documento],[Codigo do Material],0,0,"")
                                         VSD_I_Preco_Unitario = CUSTOMEDIO                                        
                                         
                                         Campo="I_Quantidade"   
                                    Else Mensagem("Item n„o Cadastrado!")
                                         VSD_I_Codigo_Item   =""
                                         VSD_I_Descricao_Item=""
                                         VSD_I_UN_Item       =""
                                         VSD_I_Tipo_Item     =""
                                         KeyPress "ESC"
                                 EndIf
                         EndIf
                 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 GetRecord "\\Sistemas\\Estoque\\TpItem" VSD_I_Tipo_Item To REG_TPITEM
                         If RetVal
                            Then Campo="I_Quantidade"
                            Else Mensagem("Tipo do Item n„o Cadastrado!")
                                 VSD_I_Tipo_Item="" 
                         EndIf
                 EndIf
            Case Campo="I_Quantidade":
                 VSD_I_Quantidade=ControlValue("I_Quantidade")
                 If Not IsBlank(VSD_I_Quantidade) 
                    Then If IsBlank(VSD_I_Codigo_Item)
                            Then Campo="I_UN_Item"
                            Else Campo="I_Preco_Unitario"
                         EndIf   
                 EndIf
            Case Campo="I_QuantidadeRec" :
                 VSD_I_QuantidadeRec=ControlValue("I_QuantidadeRec")
                 If VSD_I_QuantidadeRec > VSD_I_Quantidade                            
                     Then Mensagem("A quantidade recebida informada ‚ maior que a quantidade enviada!")
                     Else Campo="I_Flag"
                          If VSD_I_QuantidadeRec>0 
                             Then VSD_I_QuantidadeLiq = VSD_I_QuantidadeRec - (VSD_I_QuantidadeRec * VSD_I_PORC_PR / 100)
                             Else VSD_I_QuantidadeLiq = BlankNum()
                          EndIf    
                  EndIf   
            Case Campo="I_UN_Item":
                  VSD_I_UN_Item=ControlValue("I_UN_Item")
                  If Not IsBlank(VSD_I_UN_Item)
                     Then GetRecord "\\Sistemas\\Estoque\\Unidades" VSD_I_UN_Item To REG_UNIDADE
                          If Not RetVal
                            Then Mensagem("Unidade n„o Cadastrada !")
                                 VSD_I_UN_Item=""
                            Else Campo="I_Preco_Unitario"     
                          EndIf
                  EndIf
            Case Campo="I_Preco_Unitario":
                 VSD_I_Preco_Unitario=ControlValue("I_Preco_Unitario")
                 If VSD_I_Quantidade>0 
                    Then VSD_I_Preco_Total=VSD_I_Quantidade*VSD_I_Preco_Unitario
                    Else If VSD_I_Preco_Unitario<>0
                            Then VSD_I_Preco_Total=VSD_I_Preco_Unitario
                         EndIf
                 EndIf
                 If VSD_I_Preco_Unitario<>0
                    Then If VSD_I_Codigo_Item=""
                            Then Campo="I_PORC_PR"
                            Else Campo="I_Flag"
                         EndIf
                 EndIf
            Case Campo="I_PORC_PR" :
                 VSD_I_PORC_PR = ControlValue("I_PORC_PR")
                 Campo="I_Flag"    
            Case Campo="I_Flag" :
                 AcceptDialog
          EndSwitch
          Temp=False
   EndSwitch
EndIf

SelectControl Campo
TECLA="Esc=Retornar  Enter=Avan‡ar  "
If Campo="I_Codigo_Item" Or
   Campo="I_Tipo_Item" Or
   Campo="I_UN_Item"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf

Switch
  Case Campo="I_Codigo_Item"   : MSGCAMPO="C¢digo do Item"
  Case Campo="I_Descricao_Item": MSGCAMPO="Descri‡„o do Item"
  Case Campo="I_Tipo_Item"     : MSGCAMPO="Tipo do Item"
  Case Campo="I_Quantidade"    : MSGCAMPO="Quantidade"
  Case Campo="I_UN_Item"       : MSGCAMPO="Unidade Interna"
  Case Campo="I_Preco_Unitario": MSGCAMPO="Valor Unit rio"
  Case Campo="I_Flag"          : MSGCAMPO="[pausa]"
  Case Campo="I_PORC_PR"       : MSGCAMPO="% de Perda"
 ;Case Campo="I_Baixa_Automatica" : MSGCAMPO="Baixa autom tica no estoque para este item ? <Sim/N„o)"
 ;Case Campo="I_Quantidade_PR" :
 ;     Switch
 ;       Case VSD_I_Tipo_PR="P" : MSGCAMPO="Quantidade Perda"
 ;       Case VSD_I_Tipo_PR="R" : MSGCAMPO="Quantidade Retorno"
 ;     EndSwitch
 ;OtherWise                    : MSGCAMPO=""
EndSwitch

If CHAVEIC=0 And PROGFUND_ROTINA<>"PRODUCAO"
    Then TECLA=TECLA+"Ctrl+Del=Excluir  "
EndIf

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

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

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_Registro()
INICIO_DIALOG=True
Moveto [Sequencia do Lancamento]
Locate [Progfc->Numero_ProgramacaoDisco],ITEM
CopyToArray RegItem

Echo Normal
Echo Off

Registro_Item("Ler")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Itens a Produzir                                      *
;*******************************************************************************
Proc DIGITAI_Ficha()

Showdialog "Dados do Item [     ]" Proc "Item_Dialog"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 10,01 height 06 width 78

   Accept @ -01,42 Width 5 "A2" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,00 "C¢digo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,14 "Descricao Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 33 "A30" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,48 "TI" For "I_Tipo_Item"
   Accept @ 01,49 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item

   Label  @ 02,00 "QtdProgramada" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

   Label  @ 02,14 "Qtd Produzida" For "I_Quantidade2"
   Accept @ 03,15 Width 13 "N" picture "#*#.[###]" Tag "I_Quantidade2" to VSD_I_Quantidade2

   Label  @ 02,28 "UN" For "I_UN_Item"
   Accept @ 03,29 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
              
   Label  @ 02,34 "Peso" For "I_Peso"
   Accept @ 03,35 Width 13 "N" picture "#*#.[###]" Tag "I_Peso" to VSD_I_Peso

   Label  @ 02,48 "Total" For "I_PesoT"
   Accept @ 03,49 Width 13 "N" picture "#*#.[###]" Tag "I_PesoT" to VSD_I_PesoT

   Accept @ 03,63 Width 1 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

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

;*******************************************************************************
;* Rotina para                                                                 *
;*******************************************************************************
Proc Seleciona_Funcao()

Tecla_Funcao=""
Echo Normal
Echo Off

If PROGFUND_ROTINA="PRODUCAO"  
   Then ShowPopup " Fun‡”es " CENTERED
        "~I~mprimir             [F6]   ": " Imprimir programa‡„o da fundi‡„o" :"F6",
        "~O~bserva‡”es          [Alt+O]": " Observa‡”es                     " :"-24",
        SEPARATOR,
        "~C~ancelar                   ": " Cancelar a Opera‡„o              " : "CANCELAR"
       EndMenu
       To MenuVar         
  Else ShowPopup " Fun‡”es " CENTERED
         "~I~mprimir             [F6]   ": " Imprimir programa‡„o da fundi‡„o" :"F6",
         "~S~ele‡„o de Pedidos   [F5]   ": " Sele‡„o de Pedidos              " :"F5",
         "~O~bserva‡”es          [Alt+O]": " Observa‡”es                     " :"-24",
         SEPARATOR,
         "C~a~rrega Itens        [Alt+A]": " Carregar Itens dos Pedidos      " :"-30",
         "Carre~g~a Consumo      [Alt+G]": " Carregar Itens a Consumir       " :"-34",
          SEPARATOR,
         "~C~ancelar                   ": " Cancelar a Opera‡„o              " : "CANCELAR"
        EndMenu
        To MenuVar
EndIf   
   
Echo Off

If MenuVar="CANCELAR" or MenuVar="Esc"
    Then Return False
EndIf

If MenuVar<>"F5" And MenuVar<>"F6"
   Then Tecla_Funcao=NumVal(MenuVar)
   Else Tecla_Funcao=MenuVar
EndIf

Return True

EndProc

;*******************************************************************************
;* Rotina para Adicionar o Consumo                                             *
;*******************************************************************************
Proc Verifica_Pedido(PARAM)                             
Private PARAM,Tentativa,Cont_Seq_Ped,Conta_Erro,TAB_ANT,PED          

;Verifica a Sele‡Æo de Pedidos ou Apenas um pedido passado como parƒmetro

TAB_ANT = Table()

If PARAM=""
   Then If Not IsAssigned(Num_Pedido) Or (IsAssigned(Num_Pedido) And Not IsAssigned(Num_Pedido[1]))
           Then ;Caso o Array de Pedido nÆo for setado
                Mensagem("Foi detectado um erro interno.//Entre em contato com o Suporte T‚cnico da Vise Inform tica !")
                Return True
        EndIf
        Cont_Pedido = 0
   Else Cont_Pedido = 1
        DynArray Num_Pedido[]
        Num_Pedido[1] = PARAM
EndIf        

Cont_Seq_Ped = 0
DynArray Seq_Ped[]

If PARAM=""
   Then Moveto "ProgfP"  
        Home
        Scan
          Cont_Pedido = Cont_Pedido + 1
          Num_Pedido[Cont_Pedido] = [Numero do Pedido]
        EndScan
EndIf

UnLockRecord
{TableAdd} TypeIn "\\Sistemas\\Vendas\\PedidoI" Enter
Moveto [Numero do Pedido]
For i From 1 To DynArraySize(Num_Pedido)
  Home
  Locate Num_Pedido[i]
  If RetVal
     Then ACHOU_DISCO = True
          While [Numero do Pedido]= Num_Pedido[i]
            Cont_Seq_Ped = Cont_Seq_Ped + 1
            Seq_Ped[Cont_Seq_Ped] = Completa([Numero do Pedido],6," ")+Completa(StrVal([Item do Pedido]),3," ")
            GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM 
            If Retval
               Then If REG_ITEM["Codigo do Grupo"]<>GRUPO
                       Then ACHOU_DISCO = False                       
                    EndIf
            EndIf
            Skip
            If Eot() Then QuitLoop EndIf
          EndWhile
          
          If Not ACHOU_DISCO
             Then Num_Pedido[i] = Completa(Num_Pedido[i],6," ")+"X"
          EndIf
     Else Num_Pedido[i] = Completa(Num_Pedido[i],6," ")+"X"
  EndIf
EndFor
UnLockRecord
Do_it!
ClearImage
CoeditKey
              
Moveto "ProgfC"
FormKey
Tentativa = 0
While True
  Tentativa = Tentativa + 1
  If Not IsLockRecord()
     Then QuitLoop
     Else Mensagem("Sem acesso ao registro: "+Strval(Tentativa)+" Tentativa ") 
  EndIf
EndWhile
Release Vars Tentativa,Cont_Seq_Ped      

Moveto TAB_ANT

Conta_Erro = 0
For i From 1 To DynArraySize(Num_Pedido)
  PED = SubStr(Num_Pedido[i],1,6)
  If SubStr(Num_Pedido[i],7,1)="X"
     Then Conta_Erro = Conta_Erro + 1
          Moveto [Numero do Pedido]
          Locate PED
          If ReTval
             Then Del
          EndIf   
  EndIf   
Endfor

If Conta_Erro = DynArraySize(Num_Pedido)
   Then Return False
   Else Return True
EndIf                                      

EndProc ;Verifica_Pedido()

;*******************************************************************************
;* Rotina para Adicionar o Consumo                                             *
;*******************************************************************************
Proc Adiciona_Consumo(PARAM)                             
Private i,PARAM,Tentativa,Cont_Seq,REG_ITEM

UnLockRecord
Switch
  Case PARAM = "Adiciona Itens"  :
       If Not IsAssigned(Sequencia_Consumo) Or (IsAssigned(Sequencia_Consumo) And DynArraySize(Sequencia_Consumo)=0)
          Then Mensagem("N„o existe(m) itens a processar !")
               Return
       EndIf   
       DOCTO = [ProgfC->Codigo do Documento]+" "+[ProgfC->Serie do Documento]+" "+[ProgfC->Numero do Documento]
       ConfGeral("Deseja carregar os itens referente ao documento "+DOCTO+" ?")
       Release Vars DOCTO
       
       ;Switch  
       ;  Case [ProgfC->Origem_Vinculada] = "P" : 
       ;       DOCTO = [ProgfC->Codigo do Documento]+" "+[ProgfC->Serie do Documento]+" "+[ProgfC->Numero do Documento]
       ;       ConfGeral("Deseja carregar os itens referente ao documento "+DOCTO+" ?")
       ;       Release Vars DOCTO
       ;  Case [ProgfC->Origem_Vinculada] = "T" : 
       ;       ConfGeral("Deseja carregar os itens referente a nota de entrada "+[ProgfC->Numero do Lancamento]+" ?")
       ;  OtherWise                             : Return
       ;EndSwitch
       
       If OK<>"S"
          Then Return
       EndIf
       Aguarde("Processando Pedidos")
       Moveto "Progfrm"
       While RecordStatus("New")=False
         Del
       EndWhile
       
       QtdPed   = 0
       QtdPedPS = 0 
       Seq      = 0
       
       For i From 1 To DynArraySize(Sequencia_Consumo)         
         GetRecord "\\Sistemas\\Vendas\\NotaI" REG_NOTAC["Codigo da Empresa"],
                                               REG_NOTAC["Numero do Documento"],
                                               REG_NOTAC["Serie do Documento"],
                                               NumVal(Sequencia_Consumo[i]) To REG_ITEM
         If RetVal
            Then QtdProg = REG_ITEM["Quantidade"]
                 PrProg  = REG_ITEM["Preco Unitario"]
                 Adicona_Item("Consumo",REG_ITEM["Codigo do Item"]) 
         EndIf               
       EndFor     
  Case PARAM = "Nota de Saida" : 
              Cont_Seq = 0
              DynArray Sequencia_Consumo[]
              {TableAdd} TypeIn "\\Sistemas\\Vendas\\NotaI" Enter
              
              Moveto [Codigo da Empresa]
              Locate REG_NOTAC["Codigo da Empresa"],REG_NOTAC["Numero do Documento"],REG_NOTAC["Serie do Documento"]
              If RetVal
                Then While [Codigo da Empresa]  = REG_NOTAC["Codigo da Empresa"]   And 
                           [Numero do Documento] = REG_NOTAC["Numero do Documento"] And  
                           [Serie do Documento]  = REG_NOTAC["Serie do Documento"]
                       Cont_Seq = Cont_Seq + 1
                       Sequencia_Consumo[Cont_Seq] = [Item do Documento]
                       Skip
                       If Eot() Then QuitLoop EndIf
                     EndWhile
              EndIf  
              UnLockRecord
              Do_it!
              ClearImage
              CoeditKey
              
              Moveto "ProgfC"
              FormKey
              Tentativa = 0
              While True
               Tentativa = Tentativa + 1
               If Not IsLockRecord()
                  Then QuitLoop
                  Else Mensagem("Sem acesso ao registro: "+Strval(Tentativa)+" Tentativa ") 
               EndIf
              EndWhile
              Release Vars Tentativa,Cont_Seq
EndSwitch    

EndProc ;Adiciona_Consumo()

;*******************************************************************************
;* Rotina para Adicionar o Item                                                *
;*******************************************************************************
Proc Adicona_Item(PROCESSO,PARAM)
Private REG_ITEM
                     
ItemNovo = False
     
If PROCESSO = "Consumo"
   Then Moveto [Codigo do Material]
   Else Moveto [Codigo do Item]
EndIf   
Locate PARAM
If Not RetVal
 Then GetRecord "\\Sistemas\\Estoque\\Itens" PARAM To REG_ITEM
      If RetVal
         Then If REG_ITEM["Inativo"]="S"
                 Then Mensagem("Item "+REG_NOTAI["Codigo do Item"]+" est  inativo!")
                 Else ItemNovo=True
              EndIf
      EndIf
EndIf         
     
Switch
  Case PROCESSO = "Consumo" : 
       If ItemNovo
          Then Seq = Seq + 1
               End Down
               [Sequencia               ] = Seq
               [Codigo do Material      ] = REG_ITEM["Codigo do Item"]    
               [Descricao do Item       ] = REG_ITEM["Descricao do Item"]   
               [Tipo do Item            ] = REG_ITEM["Tipo do Item"]   
               [Descricao Tipo do Item  ] = REG_ITEM["Descricao Tipo do Item"]   
               [Unidade Interna         ] = REG_ITEM["Unidade Interna"]
               [Lookup_Material         ] = REG_ITEM["Codigo do Item"]
               [Observacoes             ] = REG_ITEM["Observacao"]
               [Item_Baixa_Automatica   ] = "" 
               [Tipo Perda_Retorno      ] = ""
               
               
               
               GetRecord "\\Sistemas\\Estoque\\Iten_Com" REG_ITEM["Codigo do Item"] To REG_ITEMCOMP
               If RetVal
                  Then If REG_ITEMCOMP["Codigo Concentrador"]<>"" And Type(NumVal(REG_ITEMCOMP["Codigo Concentrador"]))="N"
                          Then [Porc_Perda] = NumVal(REG_ITEMCOMP["Codigo Concentrador"])
                       EndIf
               EndIf               
       EndIf
       ;ESTOQUE("CUSTO","",[Progfc->Data_Producao],[Progfc->Codigo Empresa Documento],[Codigo do Material],[Quantidade Enviada],0,"")
       [Quantidade Enviada      ] = [Quantidade Enviada] + QtdProg
       [Quantidade Recebida     ] = BlankNum()
       [Quantidade Liquida      ] = BlankNum()  
       [Custo Unitario          ] = PrProg                                      ;CUSTOMEDIO
       [Quantidade_Destinatario ] = BlankNum()
       [Quantidade Perda_Retorno] = BlankNum()
       [Custo Total             ] = NDecimal([Quantidade Enviada]*[Custo Unitario],2)
       UnLockRecord
       
  Case PROCESSO = "Programado" :
       If ItemNovo
          Then Seq = Seq + 1
               End Down
               [Sequencia do Lancamento ] = Seq
               [Codigo do Item          ] = REG_ITEM["Codigo do Item"]
               [Tipo do Item            ] = REG_ITEM["Tipo do Item"]
               [Referencia              ] = REG_ITEM["Referencia"]
               [Descricao do Item       ] = REG_ITEM["Descricao do Item"]
               [Codigo da Cor_Tecido    ] = REG_ITEM["Codigo da Cor_Tecido"]
               [Descricao da Cor_Tecido ] = REG_ITEM["Descricao da Cor_Tecido"]
               [Tamanho                 ] = REG_ITEM["DTamanho"]
               [Unidade Fiscal          ] = REG_ITEM["Unidade Fiscal"]
               [Peso Liquido            ] = REG_ITEM["Peso Liquido"] 
       EndIf
       QtdPed   = QtdPed + QtdProg
       QtdPedPS = QtdPedPS + (QtdProg * [Peso Liquido])
       
       [Quantidade Programada] = [Quantidade Programada] + QtdProg
       [Quantidade Produzida ] = BlankNum()
       [Peso_Programado      ] = [Quantidade Programada]
       UnLockRecord     
EndSwitch

EndProc ;Adicona_Item()

;*******************************************************************************
;* Rotina para Localizar Pedidos                                               *
;*******************************************************************************
Proc PEDIDOS()

Moveto "ProgfP"
End Down

While True
  SomaItens()
  Moveto "ProgfP"
  Moveto [Numero do Pedido]
  End Down

  SetaCorRegistro("Editar")
  While True

    TECLA=" Altt+F=Fun‡„o  PgDn=Finalizar  F4=Limpar  "

    MSGCAMPO=Field()
    switch
      case field()="" : MSGCAMPO=""
    endswitch

    If Field()="Numero do Pedido" Or
       Field()=""
       Then MSGCAMPO=MSGCAMPO+", [F1]Consultar tabela"
    EndIf

    Prompt TECLA
    Wait Field
      Until "ESC","ENTER","HOME","UP","PGUP","PGDN","DEL","FIELDVIEW","DOWN",
            -94,-33,-115,-116,-133,-134,-145,-24,-30,-34,
            "F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F35"

    If RetVal=-33
      Then If Not Seleciona_Funcao()
              Then Loop
              Else Del
                   Return
           EndIf
    EndIf

    Switch
    Case RetVal=-24  Or RetVal=-25  Or RetVal=-19 Or RetVal=-49  Or
         RetVal=-30  Or RetVal=-34  Or RetVal=-32 Or RetVal=-115 Or 
         RetVal=-116 Or RetVal="F6" Or RetVal="F5" :
         Del
         Tecla_Funcao=RetVal
         Return
    Case RetVal="F1":
         If Field()="Numero do Pedido"
            Then Moveto [Lookup_PedidoC]
                 If CONSULTAF1()
                    Then [Numero do Pedido]=[Lookup_PedidoC]
                         [Lookup_PedidoC  ]=""
                 EndIf
                 Moveto [Numero do Pedido]
         EndIf
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
         Del
         While True
           Moveto "ProgfP"

           PAGINA("ProgfP","MR")
           If EXCLUIR="S"
              Then If QuerExcluir("")
                      Then NPED=[Numero do Pedido]
                           Del
                      Else UnLockRecord
                   EndIf
              Else If EDITAR="S"
                      Then UnLockRecord
                      Else QuitLoop
                   EndIf
           EndIf
           SomaItens()
           SetaPosForm()
         EndWhile
         QuitLoop
    Case Retval="F4":
         ACHOU_QTD_PRODUZIDA=False
         Moveto "Progfri"
         Scan
           If [Quantidade Produzida]<>BlankNum() And [Quantidade Produzida]<>"0"
              Then ACHOU_QTD_PRODUZIDA=True
                   QuitLoop
           EndIf
         EndScan
         Moveto "Progfp" 
         If ACHOU_QTD_PRODUZIDA
            Then Mensagem("H  itens produzidos na aba [Itens Programados] impossibilitando a exclus„o dos registros!")
            Else While RecordStatus("New")=False
                   Del
                 EndWhile
         EndIf   
         Release Vars ACHOU_QTD_PRODUZIDA    
         QuitLoop
    Case Retval="ESC":
         Del
         Tecla_Funcao=BlankNum()
         campocorrente="Flag1"
         SetaCorRegistro("Padrao")
         Return
    Case Retval="PGDN":
         If VALIDA_CAMPO()
            Then Del
                 Tecla_Funcao=BlankNum()
                 FINALIZADO  =True
                 Return
            Else Loop     
         EndIf        
    Case Retval="ENTER":
       Switch
       Case Field() = "Numero do Pedido":
            If IsBlank([])
               Then Loop
            EndIf

            NPED=AlinhM([],6)
            Del
            Locate NPED
            If Retval
               Then Mensagem("Pedido j  existe na rela‡„o!")
               Else End Down
                    Release Vars COR_MENSAGEM
                    MSG = ""
                    GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDIDO
                    If RetVal
                       Then If REG_PEDIDO["Situacao do Pedido"]="FATURADO"
                               Then MSG = "Pedido "+NPED+" se encontra FATURADO!"
                            EndIf   
                            If Verifica_Pedido(NPED)
                               Then [Lookup_PedidoC  ]=NPED
                                    [Numero do Pedido]=NPED
                                    Atualiza_Itens("Entrada")
                                    If [Quantidade Programada]=0
                                       Then COR_MENSAGEM="ALERTA"
                                            MSG = "Pedido "+NPED+" est  com todos os itens faturados!"   
                                            Del 
                                    EndIf   
                               Else MSG = "Pedido "+NPED+" n„o possui itens de DISCO"
                                    Del 
                            EndIf   
                            If MSG <> ""
                               Then Mensagem(MSG)
                            EndIf        
                       Else Mensagem("Pedido n„o encontrado!")
                            Del
                    EndIf
            EndIf
            QuitLoop
       EndSwitch

    EndSwitch
  EndWhile
EndWhile
EndProc

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

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_Item(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Codigo do Item       ]=VSD_I_Codigo_Item
       [Descricao do Item    ]=VSD_I_Descricao_Item
       [Tipo do Item         ]=VSD_I_Tipo_Item

       [Quantidade Programada]=VSD_I_Quantidade
       [Quantidade Produzida ]=VSD_I_Quantidade2
       [Unidade Fiscal       ]=VSD_I_UN_Item
       [Peso Liquido         ]=VSD_I_Peso

  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia do Lancamento   ]

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

       VSD_I_Quantidade             =[Quantidade Programada     ]
       VSD_I_Quantidade2            =[Quantidade Produzida]
       
       VSD_I_UN_Item                =[Unidade Fiscal            ]
       VSD_I_Peso                   =[Peso Liquido]
       VSD_I_PesoT                  =[Quantidade Programada     ]*[Peso Liquido]

EndSwitch

EndProc  ; (Registro_Item)

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc EXCLUSAO(TIPO)
Private TIPO

Switch
Case TIPO="Cabeca" : 
     Moveto "Progfc"
     If Not IsBlank([Progfc->Lancamento RqCabeca_P])
        Then If [Tipo_Programacao]="REMESSA"
                Then Requisicao_Remessa("Exclusao")
                Else Requisicao("Exclusao","P")
             EndIf   
     EndIf
     
     ;If Not IsBlank([Progfc->Lancamento_RqCabeca_C])
     ;   Then Requisicao("Exclusao","C")
     ;EndIf
     Exclusao_Cabeca=True   
     
     Moveto "Progfp"
     While RecordStatus("New")=False
       Del
     EndWhile

     Moveto "Progfri"
     While RecordStatus("New")=False
       Del
     EndWhile

     Moveto "Progfrm"
     While RecordStatus("New")=False
       Del
     EndWhile
     
     Moveto "ProgfCP"
     While RecordStatus("New")=False
       CHAVEAP=8
       CopyToArray RegItem
       TITULOS()
     EndWhile
     Moveto "ProgfCV"
     While RecordStatus("New")=False
       CHAVEAV=8
       CONTA()
     EndWhile
     
     Moveto "Progfc"
     Del
Case TIPO="Item":
     Moveto "Progfri"
     Del
Case TIPO="ItemIC":
     Moveto "Progfrm"
     Del
EndSwitch
EndProc  ; (Exclusao)

;*******************************************************************************
;* Rotina Atualiza Itens                                                       *
;*******************************************************************************
Proc Atualiza_Itens(tipo)
private pedok, qtdped, qtdprog

pedok =true
qtdped  =0
qtdpedps=0

Moveto "ProgfC"
                                              
Moveto "\\Sistemas\\Vendas\\PedidoI"
Moveto [Numero do Pedido]
Locate NPED
If Not Retval
   Then Mensagem("Item(s) do pedido n„o localizado(s) !")
        pedok=false
EndIf

TOT_ITEM_FATURADO = 0
DynArray ITEM_FATURADO[]

While [Numero do Pedido]=NPED And pedok
  CopyToArray REGISTRO_F1
  
  ACHOU_DISCO = True
  GetRecord "\\Sistemas\\Estoque\\Itens" REGISTRO_F1["Codigo do Item"] To REG_ITEM 
  If Retval
     Then If REG_ITEM["Codigo do Grupo"]<>GRUPO
             Then ACHOU_DISCO = False                       
          EndIf
  EndIf

  Itemok=True
  If ACHOU_DISCO
     Then Moveto "\\Sistemas\\Vendas\\PedidoI"
          qtdprog=REGISTRO_F1["Quantidade"]-REGISTRO_F1["Quantidade Faturada"]
          If tipo="Entrada"
             Then If qtdprog<=0
                     Then TOT_ITEM_FATURADO = TOT_ITEM_FATURADO + 1   
                          ITEM_FATURADO[TOT_ITEM_FATURADO] = Format("W70","- "+Format("W3,AR",StrVal([Item do Pedido]))+" "+
                                                                           Format("W10",[Codigo do Item])+" "+
                                                                           Format("W30",[Descricao do Item]))
                          itemok=false
                  EndIf
          Endif
          If itemok
             then qtdped  =qtdped+qtdprog
                  qtdpedps=qtdpedps+(qtdprog*REGISTRO_F1["Peso Liquido"])
          EndIf
        
          Moveto "\\Sistemas\\Vendas\\PedidoI"
  EndIf
  Skip
  If EOT() Then QuitLoop EndIf
EndWhile

;---- Exibe Status do Item, se Faturado ----------------------------------------
;If DynArraySize(ITEM_FATURADO) > 0
;   Then If DynArraySize(ITEM_FATURADO)>1
;           Then AUX_ITEM_FATURADO = Format("W70","Itens do Pedido "+NPED+" Faturados")
;           Else AUX_ITEM_FATURADO = Format("W70","Item do Pedido "+NPED+" Faturado")
;        EndIf
;        MSG = ""
;        For i From 1 To DynArraySize(ITEM_FATURADO)
;          If i=1
;             Then MSG = MSG + AUX_ITEM_FATURADO + "////"
;          EndIf   
;          MSG = MSG + Format("W70",ITEM_FATURADO[i])+"//"
;        Endfor
;        Mensagem(MSG)
;EndIf           

Moveto "ProgfP"
Moveto [Numero do Pedido]
Locate NPED
If Tipo="Entrada"
   Then [Quantidade Programada]=qtdped
        [Peso_Programado      ]=qtdped      ;qtdpedps    
        UnLockRecord
   Else Del
EndIf

EndProc

;*******************************************************************************
;* Rotina Atualiza Itens Pedidos                                               *
;*******************************************************************************
Proc Carrega_ItensPedidos()
private qtdped,qtdprog,coditem,itemnovo,indice,seq

Moveto "ProgfP"
If RecordStatus("New")=True
   Then Moveto "Progfri"
				Mensagem("N„o existe(m) Pedidos relacionados !")
        Return
EndIf

DynArray Num_Pedido[]
Cont_Pedido = 0
Moveto "ProgfP"  
Home
Scan
  Cont_Pedido = Cont_Pedido + 1
  Num_Pedido[Cont_Pedido] = [Numero do Pedido]
EndScan

Aguarde("Processando Pedidos")
Moveto "Progfri"
While RecordStatus("New")=False
  Del
EndWhile
     
Verifica_Pedido("")
   
If DynArraySize(Seq_Ped)=0
   Then Mensagem("N„o existe(m) itens a processar !")
        Return
EndIf

TOT_PEDIDO_FATURADO = 0
DynArray PEDIDO_FATURADO[]

QtdPed  =0
QtdPedPS=0
Seq     =0

For out From 1 To DynArraySize(Num_Pedido) 
  Barra(DynArraySize(Num_Pedido),out)
  Aguarde("Aguarde, processando pedidos "+BARRA_STRING)
  
  NPED = SubStr(Num_Pedido[out],1,6)
  
  GetRecord "\\Sistemas\\Vendas\\PedidoC" NPED To REG_PEDC
  If RetVal
     Then If REG_PEDC["Situacao do Pedido"]="FATURADO"
             Then TOT_PEDIDO_FATURADO = TOT_PEDIDO_FATURADO + 1
                  PEDIDO_FATURADO[TOT_PEDIDO_FATURADO]=Format("W6",NPED)+Spaces(1)+REG_PEDC["Codigo"]+Spaces(1)+REG_PEDC["Nome Fantasia EmitDest"]
          EndIf
  EndIf    
  
  TOT_ITEM_FATURADO = 0
  DynArray ITEM_FATURADO[]
   
  For i From 1 To DynArraySize(Seq_Ped)
    AUX_NPED = SubStr(Seq_Ped[i],1,6)
    If AUX_NPED = NPED
       Then ACHOU_DISCO = False
            ITEM_PED    = NumVal(SubStr(Seq_Ped[i],7,3))
            GetRecord "\\Sistemas\\Vendas\\PedidoI" AUX_NPED,ITEM_PED To REG_PEDIDOI
            If RetVal
               Then GetRecord "\\Sistemas\\Estoque\\Itens" REG_PEDIDOI["Codigo do Item"] To REG_ITEM 
                    If Retval
                        Then If REG_ITEM["Codigo do Grupo"]=GRUPO
                                Then ACHOU_DISCO = True
                             EndIf                          
                    EndIf
            EndIf
            If ACHOU_DISCO
               Then Verifica_Item = True
                    QtdProg  =REG_PEDIDOI["Quantidade"]-REG_PEDIDOI["Quantidade Faturada"]
                    If QtdProg<=0
              				 Then Verifica_Item = False
                            TOT_ITEM_FATURADO = TOT_ITEM_FATURADO + 1   
              				      ITEM_FATURADO[TOT_ITEM_FATURADO] = "- "+Format("W3,AR",StrVal(REG_PEDIDOI["Item do Pedido"]))+" "+
                                                                    Format("W10",REG_PEDIDOI["Codigo do Item"])+" "+
                                                                    Format("W30",REG_PEDIDOI["Descricao do Item"])
              			EndIf 
              			
              			If Verifica_Item
              			   Then QtdPed = QtdPed + QtdProg
              			   
                            ItemNovo = True
                            Moveto "ProgfRI"
                            Moveto [Codigo do Item]
                            Locate REG_PEDIDOI["Codigo do Item"]
                            If RetVal
                               Then ItemNovo = False
                            EndIf
                            If ItemNovo
                               Then Seq=Seq+1
                                    End Down
                                    [Sequencia do Lancamento ] = Seq
                                    [Codigo do Item          ] = REG_PEDIDOI["Codigo do Item"]
                            EndIf
                            [Quantidade Programada]=[Quantidade Programada]+QtdProg
                            [Peso_Programado      ]=[Quantidade Programada]
                            QtdPedPS               = QtdPedPS + [Quantidade Programada]
                            UnLockRecord 
              			EndIf
            EndIf 
    EndIf
	EndFor
	
	;---- Exibe Status do Item, se Faturado --------------------------------------
  ;If DynArraySize(ITEM_FATURADO) > 0                               
  ;   Then If DynArraySize(ITEM_FATURADO)>1
  ;           Then AUX_ITEM_FATURADO = Format("W70","Itens do Pedido "+NPED+" Faturados")
  ;           Else AUX_ITEM_FATURADO = Format("W70","Item do Pedido "+NPED+" Faturado")
  ;        EndIf
  ;        MSG = ""
  ;        For i From 1 To DynArraySize(ITEM_FATURADO)
  ;          If i=1
  ;             Then MSG = MSG + AUX_ITEM_FATURADO + "////"
  ;          EndIf   
  ;          MSG = MSG + Format("W70",ITEM_FATURADO[i])+"//"
  ;          ;If i<>DynArraySize(ITEM_FATURADO)
  ;          ;   Then MSG = MSG + "//" 
  ;          ;EndIf
  ;        Endfor
  ;        Mensagem(MSG)
  ;EndIf
Endfor       

EndProc

;*******************************************************************************
;* Rotina Observacoes                                                          *
;*******************************************************************************
Proc  Observacao()
Private Tabela
Tabela=Table() 
Moveto "ProgfC"

Edita_Memo("Observacoes",08,07,12,65,"Observa‡”es")

Moveto Tabela   
EndProc  ; (Observacao)

;*******************************************************************************
;* Rotina de Impressao                                                         *
;*******************************************************************************
Proc IMPRIME()
Private OPCAOC,OPCAON,PROCESSO

Switch
 Case Table()="Progfc"   : MSG_PROG = "Imprime a Rela‡Æo de Pedidos, Itens Programados e Consumidos"
                           PROCESSO = "ProgfC"
 Case Table()="Progfp"   : MSG_PROG = "Imprime a Rela‡Æo de Pedidos a Atender"
                           PROCESSO = "Progfp"
 Case Table()="Progfri"  : MSG_PROG = "Imprime a Rela‡Æo de Itens Programados"
                           PROCESSO = "Progfri"
 Case Table()="Progfrm"  : MSG_PROG = "Imprime a Rela‡Æo de Itens Consumidos"
                           PROCESSO = "Progfrm"
 OtherWise               : Return False
EndSwitch 

Echo Normal
Echo Off
ShowPopup " Relatorio " CENTERED
   MSG_PROG : MSG_PROG : "Program01",
   Separator,
   "~C~ancelar"  : " Cancelar " :"CANCELAR"
EndMenu
To Opcaoc


Echo off

If Opcaoc="Esc" Or Opcaoc="CANCELAR"
   Then Return False
EndIf

If PROCESSO="Progfp"
   Then ShowPopup " Modo de Impress„o " CENTERED
          "Anal¡tico":  " Anal¡tico          " :"MODO_A",
          "Sint‚tico":  " Sint‚tico          " :"MODO_S",
          Separator,
          "~C~ancelar": " Cancelar a Opera‡„o" : "CANCELAR"
        EndMenu
        To Opcao_Modo
        Echo Off
        
        If Opcao_Modo="CANCELAR" or Opcao_Modo="Esc"
           Then Return False
           Else If Opcao_Modo="MODO_S"
                   Then Release Vars Num_Pedido
                        Cont_Pedido = 0
                        DynArray Num_Pedido[]
                          
                        Moveto "ProgfP"  
                        Home
                        Scan
                          Cont_Pedido = Cont_Pedido + 1
                          Num_Pedido[Cont_Pedido] = [Numero do Pedido]
                        EndScan
                        Verifica_Pedido("")
                   Else Release Vars Seq_Ped     
                EndIf
        EndIf
EndIf

NPROG = [ProgfC->Numero_ProgramacaoDisco]
UnLockRecord
Do_It!

Dispositivo()
If OK=""
   Then CoEditKey
        Return False
EndIf

LoopdoDispositivo=False
If PROCESSO = "ProgfC"
   Then Imprime_Todas_Relacoes()
   ELse Imprime_Relacao(PROCESSO,"")
EndIf   
Release Vars MSG_PROG  

ImpriArq(ARQIMP)

Do_It!
ClearAll

AbreTabelas()
PickForm "1"
Moveto [Numero_ProgramacaoDisco]
Locate LANCTO
Return True
EndProc

;*******************************************************************************
;* Rotina p/ Imprimir Cabecalho de Pedido Sintetiazado                         *
;*******************************************************************************
Proc Cabecalho_PedSintetico()

NLINHA = NLINHA+1
Print File ARQIMP Spaces(2)+CI_INEG+"PEDIDO: "+Format("W6",[Numero do Pedido])+
                  Spaces(4)+"EMISSAO: "+Format("D13",[Data de Emissao])+
                  Spaces(4)+"PESSOA: "+Format("W5",[Codigo])+Format("W20",[Nome Fantasia EmitDest])+
                  Spaces(4)+"QTD PROGRAMADA:"+Format("W10.3,AR",[Quantidade Programada])+
                  Spaces(4)+"SITUACAO:"+AUX_SITPED+CI_FNEG+"\n"     

EndProc ;Cabecalho_PedSintetico()

;*******************************************************************************
;* Cabe‡alho                                                                   *
;*******************************************************************************
Proc Cabecalho(PARAM,ETAPA)
Private TAB_ANT

If ETAPA=""
   Then Moveto "ProgfC"
        Print File ARQIMP CI_15CPP
        Print File ARQIMP "\n\n"
        Print File ARQIMP Spaces(2)+Fill("-",135) + "\n"
        Print File ARQIMP Spaces(2)+Format("W135,AC",Upper(SubStr(MSG_PROG,11,Len(MSG_PROG))))+ "\n"
        Print File ARQIMP Spaces(2)+Fill("-",135)+ "\n"
        Print File ARQIMP "\n"

        ;     EMPRESA: 1234 123456789012345678901234567890
        ; PROGRAMACAO: 123456                                   SITUACAO: 123456789012
        ;        TIPO: 123456789012345                              DATA: XX/XX/XXXX  - XX:XX                         
        ;DESTINATARIO: 1234 12345678901234567890
        ;
        ;  QUANTIDADE PROGRAMADA: 123456789012        QUANTIDADE PEDIDOS: 123456789012 
        ;        PESO PROGRAMADO: 123456789012              PESO PEDIDOS: 123456789012    
        ;    CUSTO TOTAL CONSUMO:        
        ;    
        ;  REQUISICAO: 123456     
           
        DOCTO = "" 
        If [Codigo Empresa Documento]<>"" Then DOCTO=DOCTO+[Codigo Empresa Documento]+" " EndIf 
        If [Codigo do Documento     ]<>"" Then DOCTO=DOCTO+[Codigo do Documento     ]+" " EndIf            
        If [Tipo do Documento       ]<>"" Then DOCTO=DOCTO+[Tipo do Documento       ]+" " EndIf
        If [Serie do Documento      ]<>"" Then DOCTO=DOCTO+[Serie do Documento      ]+" " EndIf
        If [Numero do Documento     ]<>"" Then DOCTO=DOCTO+[Numero do Documento     ]     EndIf                  
        DOCTO = Ltrim(Rtrim(DOCTO))
                   
        Print File ARQIMP "       EMPRESA: "+Format("W4",[Codigo da Empresa])+Spaces(1)+Format("W30",[Nome Fantasia Empresa])+"\n"
        Print File ARQIMP "   PROGRAMACAO: "+Format("W6",[Numero_ProgramacaoDisco])+Spaces(35)+"SITUACAO: "+Format("W12",[Situacao_Programacao])
        Print File ARQIMP Spaces(25)+"REQUISICAO: "+Format("W6",[Lancamento RqCabeca_P])+"\n"  
        Print File ARQIMP "          TIPO: "+Format("W15",[Tipo_Programacao])+Spaces(30)+"DATA: "+Format("D13",[Data_Producao])+"-"+Format("W5",[Hora_Programacao])+"\n"                                                             
        Print File ARQIMP "  DESTINATARIO: "+Format("W4",[Codigo])+Spaces(1)+Format("W20",[Nome Fantasia EmitDest])+Spaces(19)+"DOCTO: "+DOCTO+"\n\n"
        Print File ARQIMP "    QUANTIDADE PROGRAMADA: "+Format("W12.3,AR",[Quantidade_Programada])+Spaces(8)+"QUANTIDADE PEDIDOS: "+Format("W12.3,AR",[Quantidade_Pedidos])+"\n"
        Print File ARQIMP "          PESO PROGRAMADO: "+Format("W12.3,AR",[Quantidade_Programada])+Spaces(14)+"PESO PEDIDOS: "+Format("W12.3,AR",[Peso_Pedidos])+"\n"
        Print File ARQIMP "      CUSTO TOTAL CONSUMO: "+Format("W12,EIC",[Custo Total Consumo])+"\n"
  Else  Print File ARQIMP "\n\n"     
EndIf

Switch
 Case PARAM = "Progfp"   :      
      If IsAssigned(Seq_Ped)
         Then Print File ARQIMP CI_15CPP
              Print File ARQIMP "  Seq  Item                                                Qtd          QtdF    PrUnitario       PrTotal  Peso Liquido"+"\n"
              Print File ARQIMP "  ---  -----------------------------------------  ------------  ------------	  ------------  ------------  ------------"+"\n"
         Else Print File ARQIMP "                                                             _______ Programado _______                 "+"\n"
              Print File ARQIMP "  Pedido  Dt Emissao  Pessoa                     Dt Entrega    Quantidade          Peso  Situacao       "+"\n"
              Print File ARQIMP "  ------  ----------  -------------------------  ----------  ------------  ------------  ---------------"+"\n"
              If ETAPA<>"" Or IsAssigned(TODOS_RELACAO)
                 Then Print File ARQIMP CI_INEG+"  PEDIDOS A ANTENDER"+CI_FNEG+"\n"
              EndIf    
      EndIf
 Case PARAM = "Progfri"  :
      Print File ARQIMP "                                                                                        _____________ Quantidade _____________       Peso"+"\n"
      Print File ARQIMP "  Seq Item                                      Referencia Cor                       UN   Programado    Produzido    Diferenca Programado"+"\n"
      Print File ARQIMP "  --- ----------------------------------------- ---------- ------------------------- -- ------------ ------------ ------------ ----------"+"\n"
      If ETAPA<>""
         Then Print File ARQIMP CI_INEG+"  ITENS PROGRAMADOS"+CI_FNEG+"\n"
      EndIf   
 Case PARAM = "Progfrm"  : 
      Print File ARQIMP "                                                     ___________________ Quantidade ___________________ ________ Custo ________"+"\n" 
      Print File ARQIMP "  Seq Material                                  T UI    Enviada   Recebida %Perda    Liquida  Diferenca   Unitario        Total"+"\n"
      Print File ARQIMP "  --- ----------------------------------------- - -- ---------- ---------- ------ ---------- ---------- ---------- ------------"+"\n"
      If ETAPA<>""
         Then Print File ARQIMP CI_INEG+"  ITENS CONSUMIDOS"+CI_FNEG+"\n"
      EndIf
EndSwitch

If ETAPA=""
   Then NLINHA = 19
EndIf
   
Moveto PARAM

EndProc ;Cabecalho()

;*******************************************************************************
;* Rotina p/ Imprimir Rela‡Æo                                                  *
;*******************************************************************************
Proc Imprime_Todas_Relacoes()

ARQIMP=PrivDir()+"PROGFC.Txt"
If IsFile(ARQIMP)
  Then Deleta_Arquivo(ARQIMP)
EndIf

MOSTRA_ZERADOS = True
AUX_NPED       = "***"
TODOS_RELACAO = True
NLINHA        = 19

Cabecalho("Progfp","")
For k From 1 To 3
  TOT_ITE  = 0
  TOT_QTD  = 0 
  TOT_QTDP = 0 
  TOT_PESO = 0
  Switch
    Case k = 1 : Imprime_Relacao("Progfp","R") 
    Case k = 2 : Moveto "Progfri"
                 Imprime_Relacao("Progfri","R")
    Case k = 3 : Moveto "Progfrm"
                 Imprime_Relacao("Progfrm","R") 
  EndSWitch
EndFor
      
EndProc ;Imprime_Todas_Relacoes()

;*******************************************************************************
;* Rotina p/ Imprimir Rela‡Æo                                                  *
;*******************************************************************************
Proc Imprime_Relacao(PARAM,ETAPA)

If ETAPA=""
   Then ARQIMP=PrivDir()+Upper(PARAM)+".Txt"
        If IsFile(ARQIMP)
          Then Deleta_Arquivo(ARQIMP)
        EndIf

        MOSTRA_ZERADOS = True
        AUX_NPED = "***"
        
        TOT_ITE  = 0
        TOT_QTD  = 0 
        TOT_QTDP = 0 
        TOT_PESO = 0
        
        Cabecalho(PARAM,"")              
EndIf

Switch
 Case PARAM = "Progfp"   :      
      TOT_PED  = 0
      Scan    
        If AUX_NPED<>[Numero do Pedido] Or Not IsAssigned(AUX_SITPED)
           Then AUX_NPED=[Numero do Pedido]
                GetRecord "\\Sistemas\\Vendas\\PedidoC" AUX_NPED To REG_PEDIDO
                If RetVal
                   Then AUX_SITPED = REG_PEDIDO["Situacao do Pedido"]
                   Else AUX_SITPED = ""
                EndIf
        EndIf   
        
        NLINHA = NLINHA + 1
        TOT_PED  = TOT_PED + 1 
        TOT_QTD  = TOT_QTD + [Quantidade Programada]
        TOT_PESO = TOT_PESO + [Quantidade Programada]
        If Not IsAssigned(Seq_Ped)
           Then Print File ARQIMP Spaces(2)+Format("W6",[Numero do Pedido])+
                                  Spaces(2)+Format("D13",[Data de Emissao])+
                                  Spaces(2)+Format("W5",[Codigo])+Format("W20",[Nome Fantasia EmitDest])+
                                  Spaces(2)+Format("D13",[Data de Entrega])+
                                  Spaces(2)+Format("W10.3,AR",[Quantidade Programada])+
                                  Spaces(2)+Format("W14.5,AR",[Quantidade Programada])+
                                  Spaces(2)+AUX_SITPED+"\n"
           Else NLINHA = NLINHA - 1
                Cabecalho_PedSintetico()
        EndIf        
        If IsAssigned(Seq_Ped)
           Then NPED=[Numero do Pedido]              	
                AUX_QTD  = 0
                AUX_QTDF = 0
                AUX_ITEM = 0
                
                For i From 1 To DynArraySize(Seq_Ped)
                  AUX_NPED = SubStr(Seq_Ped[i],1,6)
                  If AUX_NPED = NPED
                     Then ACHOU_DISCO = False
                          ITEM_PED    = NumVal(SubStr(Seq_Ped[i],7,3))
                          GetRecord "\\Sistemas\\Vendas\\PedidoI" AUX_NPED,ITEM_PED To REG_PEDIDOI
                          If RetVal
                             Then GetRecord "\\Sistemas\\Estoque\\Itens" REG_PEDIDOI["Codigo do Item"] To REG_ITEM 
                                  If Retval
                                      Then If REG_ITEM["Codigo do Grupo"]=GRUPO
                                              Then ACHOU_DISCO = True
                                           EndIf                          
                                  EndIf
                          EndIf
                          If ACHOU_DISCO
                             Then Verifica_Item = True
                                  QtdProg  =REG_PEDIDOI["Quantidade"]-REG_PEDIDOI["Quantidade Faturada"]
                                  If QtdProg<=0
                            				 Then If Not MOSTRA_ZERADOS
                            				         Then Verifica_Item = False
                            				      EndIf
                            			EndIf 
                            			If Verifica_Item
                            			   Then ITEM = Spaces(2)+Format("W3,AR",REG_PEDIDOI["Item do Pedido"])+
                                                 Spaces(2)+Format("W10",REG_PEDIDOI["Codigo do Item"])+Spaces(1)+Format("W30",REG_PEDIDOI["Descricao do Item"])+
                                    			       Spaces(2)+Format("W12.3",REG_PEDIDOI["Quantidade"])+
                                    			       Spaces(2)+Format("W12.3",REG_PEDIDOI["Quantidade Faturada"])+
                                    			       Spaces(2)+Format("W12.2,EIC",REG_PEDIDOI["Preco Unitario"])+
                                    			       Spaces(2)+Format("W12.2,EIC",REG_PEDIDOI["Preco Total"])+
                                    			       Spaces(2)+Format("W12.5",REG_PEDIDOI["Quantidade"])  ;Peso Liquido
                                    			
                                          AUX_QTD  = AUX_QTD  + REG_PEDIDOI["Quantidade"]
                                          AUX_QTDF = AUX_QTDF + REG_PEDIDOI["Quantidade Faturada"]
                                          AUX_ITEM = AUX_ITEM + 1
                                          
                                          NLINHA  = NLINHA + 1
                                          Print File ARQIMP ITEM+"\n"
                                    			If NLINHA>=63
                                             Then Print File ARQIMP "\f"
                                                  Cabecalho(PARAM,"")
                                                  Cabecalho_PedSintetico()
                                          EndIf              
                            			EndIf
                          EndIf
                  EndIf
              	EndFor              	
              	If AUX_ITEM>1
              	   Then NLINHA=NLINHA + 2
              	        Print File ARQIMP Format("W50,AC",StrVal(AUX_ITEM)+" Itens de DISCO")+
                                          Format("W12.3,AR",AUX_QTD)+Spaces(2)+
                                          Format("W12.3,AR",AUX_QTDF)+"\n\n"
              	   Else NLINHA=NLINHA + 1
              	        Print File ARQIMP "\n" 
              	EndIf
        EndIf
        If NLINHA>=63
           Then Print File ARQIMP "\f"
                If ETAPA<>"" 
                   Then NLINHA = 9
                        Cabecalho(PARAM,"R")
                   Else Cabecalho(PARAM,"") 
                EndIf
                Cabecalho_PedSintetico()
        EndIf              
      EndScan
      If Not IsAssigned(Seq_Ped)
         Then If ETAPA<>"" 
                 Then Totalizador(PARAM,ETAPA)
                 Else Totalizador(PARAM,"")
              EndIf    
      EndIf   
 Case PARAM = "Progfri"  :
      TOT_PESO_LIQ = 0
      TOT_QTD_DIF  = 0
      
      If ETAPA<>"" 
         Then NLINHA = NLINHA + 5 
              Cabecalho(PARAM,"R") 
      EndIf
      Scan
        TOT_DIF = [Quantidade Programada]-[Quantidade Produzida]
        If TOT_DIF=0
           Then TOT_DIF=BlankNum()
           Else If [Quantidade Produzida]=BlankNum() Or [Quantidade Produzida]=0
                   Then TOT_DIF=BlankNum()
                EndIf   
        EndIf
                                               
        NLINHA = NLINHA + 1
        Print File ARQIMP Spaces(2)+Format("W3,AL",Rtrim([Sequencia do Lancamento]))+
                          Spaces(1)+Format("W10",[Codigo do Item])+
                          Spaces(1)+Format("W30",[Descricao do Item])+
                          Spaces(1)+Format("W10",[Referencia])+
                          Spaces(1)+Format("W5",[Codigo da Cor_Tecido])+Format("W20",[Descricao da Cor_Tecido])+
                          Spaces(1)+Format("W2",[Unidade Fiscal])+
                          Spaces(1)+Format("W12.3,AR",[Quantidade Programada])+
                          Spaces(1)+Format("W12.3,AR",[Quantidade Produzida])+
                          Spaces(1)+Format("W12.3,AR",TOT_DIF)+
                          Spaces(1)+Format("W10.3,AR",[Quantidade Programada])+"\n" ;Peso_Programado                         
        TOT_QTD_DIF = TOT_QTD_DIF + TOT_DIF
        TOT_ITE  = TOT_ITE + 1 
        TOT_PESO_LIQ = TOT_PESO_LIQ + [Peso Liquido]  
        TOT_QTD  = TOT_QTD + [Quantidade Programada]
        TOT_QTDP = TOT_QTDP + [Quantidade Produzida]   
        TOT_PESO = TOT_PESO + [Quantidade Programada]         ;Peso_Programado                
        If NLINHA>=63
           Then Print File ARQIMP "\f"
                If ETAPA<>"" 
                   Then NLINHA = 9
                        Cabecalho(PARAM,"R")
                   Else Cabecalho(PARAM,"") 
                EndIf
        EndIf              
      EndScan
      If ETAPA<>"" 
         Then Totalizador(PARAM,ETAPA)
         Else Totalizador(PARAM,"")
      EndIf
 Case PARAM = "Progfrm"  :
      TOT_TOTAL            = 0
      TOT_QTD_REC          = 0
      TOT_QTD_LIQ          = 0
      TOT_QTD_Perda        = 0
      TOT_QTD_DIF          = 0
      
      If ETAPA<>"" 
         Then NLINHA = NLINHA + 5 
              Cabecalho(PARAM,"R") 
      EndIf
      Scan
        TOT_DIF = [Quantidade Enviada]-[Quantidade Recebida]
        If TOT_DIF=0
           Then TOT_DIF=BlankNum()
           Else If [Quantidade Recebida]=BlankNum() Or [Quantidade Recebida]=0
                   Then TOT_DIF=BlankNum()
                EndIf   
        EndIf
        If [Porc_Perda]>0
           Then PORC_PERDA = Format("W6.3,AR",[Porc_Perda])
           Else PORC_PERDA = Spaces(6)
        EndIf
        QTD_LIQ = [Quantidade Recebida]-([Quantidade Recebida]*[Porc_Perda]/100)
        If QTD_LIQ>0
           Then QTD_LIQ = Format("W10.3,AR",QTD_LIQ)
           Else QTD_LIQ = Spaces(10)
        EndIf   
      
        NLINHA = NLINHA + 1
        Print File ARQIMP Spaces(2)+Format("W3,AL",Rtrim([Sequencia]))+
                          Spaces(1)+Format("W10",[Codigo do Material])+
                          Spaces(1)+Format("W30",[Descricao do Item])+
                          Spaces(1)+Format("W1",[Tipo do Item])+
                          Spaces(1)+Format("W2",[Unidade Interna])+
                          Spaces(1)+Format("W10.3,AR",[Quantidade Enviada])+
                          Spaces(1)+Format("W10.3,AR",[Quantidade Recebida])+
                          Spaces(1)+PORC_PERDA+
                          Spaces(1)+QTD_LIQ+
                          Spaces(1)+Format("W10.3,AR",TOT_DIF)+
                          Spaces(1)+Format("W10.2,EIC",[Custo Unitario])+
                          Spaces(1)+Format("W12.2,EIC",[Custo Total])+"\n"        
        
        If Rtrim([Observacoes])<>""
           Then NLINHA = NLINHA + 1
                Print File ARQIMP Spaces(2)+"OBS: "+Format("W130",Rtrim([Observacoes]))+"\n"
        EndIf
        TOT_QTD_DIF          = TOT_QTD_DIF + TOT_DIF
        TOT_ITE              = TOT_ITE + 1
        TOT_QTD              = TOT_QTD + [Quantidade Enviada]
        TOT_QTD_REC          = TOT_QTD_REC + [Quantidade Recebida]
        TOT_QTD_LIQ          = TOT_QTD_LIQ + ([Quantidade Recebida]-([Quantidade Recebida]*[Porc_Perda]/100))
        TOT_QTD_Perda        = TOT_QTD_Perda + [Porc_Perda]
        TOT_TOTAL            = TOT_TOTAL + [Custo Total]
        
        If NLINHA>=63
           Then Print File ARQIMP "\f"
                If ETAPA<>"" 
                   Then NLINHA = 9
                        Cabecalho(PARAM,"R")
                   Else Cabecalho(PARAM,"") 
                EndIf
        EndIf              
      EndScan
      If ETAPA<>"" 
         Then Totalizador(PARAM,ETAPA)
         Else Totalizador(PARAM,"")
      EndIf
 OtherWise               : Return 
EndSwitch

EndProc ;Imprime_Relacao()

;*******************************************************************************
;* Rotina Totalizador                                                          *
;*******************************************************************************
Proc Totalizador(PARAM,ETAPA)

NLINHA = NLINHA + 2
If NLINHA>=63
   Then Print File ARQIMP "\f"
        Cabecalho(PARAM,"")
EndIf
Print File ARQIMP "\n"

Switch
 Case PARAM = "Progfp"   :
      If TOT_PED > 1 
         Then If ETAPA<>""
                 Then Print File ARQIMP CI_INEG
              EndIf   
              Print File ARQIMP Spaces(2)+Format("W6,AR",TOT_PED)+"  Pedidos"+Spaces(44)
              If TOT_QTD <> 0 
                 Then Print File ARQIMP Format("W10.3,AR",TOT_QTD)
                 Else Print File ARQIMP Spaces(10)
              EndIf
              If TOT_PESO <> 0
                 Then Print File ARQIMP Spaces(2)+Format("W14.5,AR",TOT_PESO)+"\n"
                 Else Print File ARQIMP "\n"
              EndIf
              If ETAPA<>""
                 Then Print File ARQIMP CI_FNEG
              EndIf
      EndIf
      
 Case PARAM = "Progfri"  :  
      If TOT_ITE > 1
         Then If ETAPA<>""
                 Then Print File ARQIMP CI_INEG
              EndIf
              Print File ARQIMP Spaces(2)+Format("W6,AR",TOT_ITE)+"  Itens"
              Print File ARQIMP Spaces(72)
              ;If TOT_PESO_LIQ <> 0
              ;   Then Print File ARQIMP Format("W12.3,AR",TOT_PESO_LIQ)
              ;   Else Print File ARQIMP Spaces(12)
              ;EndIF   
              If TOT_QTD<>0
                 Then Print File ARQIMP Format("W13.3,AR",TOT_QTD)
                 Else Print File ARQIMP Spaces(13)
              EndIf    
              If TOT_QTDP <> 0 
                 Then Print File ARQIMP Format("W13.3,AR",TOT_QTDP)
                 Else Print File ARQIMP Spaces(13)
              EndIf
              If TOT_QTD_DIF <> 0 
                 Then Print File ARQIMP Format("W13.3,AR",TOT_QTD_DIF)
                 Else Print File ARQIMP Spaces(13)
              EndIf
              If TOT_PESO <> 0
                 Then Print File ARQIMP Spaces(1)+Format("W10.3,AR",TOT_PESO)+"\n"
                 Else Print File ARQIMP "\n"
              EndIf
              If ETAPA<>""
                 Then Print File ARQIMP CI_FNEG
              EndIf
      EndIf
      
 Case PARAM = "Progfrm"  : 
       If TOT_ITE > 1 
         Then If ETAPA<>""
                 Then Print File ARQIMP CI_INEG
              EndIf
              Print File ARQIMP Spaces(2)+Format("W6,AR",TOT_ITE)+" Materiais"+Spaces(35)           
              If TOT_QTD <> 0 
                 Then Print File ARQIMP Format("W10.3,AR",TOT_QTD)+Spaces(1)
                 Else Print File ARQIMP Spaces(11)
              EndIf
              If TOT_QTD_REC <> 0 
                 Then Print File ARQIMP Format("W10.3,AR",TOT_QTD_REC)+Spaces(1)
                 Else Print File ARQIMP Spaces(11)
              EndIf
              Print File ARQIMP Spaces(7)                                       ;%Perda      **TOT_QTD_Perda
              If TOT_QTD_LIQ <> 0 
                 Then Print File ARQIMP Format("W10.3,AR",TOT_QTD_LIQ)+Spaces(1)
                 Else Print File ARQIMP Spaces(11)
              EndIf
              If TOT_QTD_DIF <> 0 
                 Then Print File ARQIMP Format("W10.3,AR",TOT_QTD_DIF)+Spaces(1)
                 Else Print File ARQIMP Spaces(11)
              EndIf
              Print File ARQIMP Spaces(11)                                      ;Custo Unit rio
              If TOT_TOTAL <> 0 
                 Then Print File ARQIMP Format("W12.2,EIC",TOT_TOTAL)+"\n"
                 Else Print File ARQIMP "\n"
              EndIf
              If ETAPA<>""
                 Then Print File ARQIMP CI_FNEG
              EndIf
      EndIf
 OtherWise               : Return 
EndSwitch

EndProc ;Totalizador()

;*******************************************************************************
;* 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: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_REPRESEN"      : Campo="TG_EMPRESA"
            Case Campo="TG_CIDADE"        : Campo="TG_REPRESEN"
            Case Campo="TG_ESTADO"        : Campo="TG_CIDADE"
            Case Campo="TG_NCONTROLE"     : Campo="TG_ESTADO"
            Case Campo="TG_NCARREG"       : Campo="TG_NCONTROLE"
            Case Campo="TG_TPDATA"        : Campo="TG_NCARREG"
            Case Campo="TG_DTINI"         : Campo="TG_TPDATA"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            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_REPRESEN"
                    Case Campo="TG_REPRESEN"  :Campo="TG_CIDADE"
                    Case Campo="TG_CIDADE"    :Campo="TG_ESTADO"
                    Case Campo="TG_ESTADO"    :Campo="TG_NCONTROLE"
                    Case Campo="TG_NCONTROLE" :Campo="TG_NCARREG"
                    Case Campo="TG_NCARREG"   :
                         If Not IsBlank(VSDGNCARREG)
                            Then Campo="YES"
                            Else Campo="TG_TPDATA"
                         EndIf   
                    Case Campo="TG_TPDATA"          :
                         VSDGTPDATA=ControlValue("TG_TPDATA")
                         If IsBlank(VSDGTPDATA)
                              Then VSDGTPDATA="1"
                         EndIf
                         Switch
                           Case VSDGTPDATA="1": VSDGNOMTPDATA="EMISSAO"
                           Case VSDGTPDATA="2": VSDGNOMTPDATA="ENTREGA"
                           Case VSDGTPDATA="3": VSDGNOMTPDATA="INCLUSAO"
                         EndSwitch
                         Campo="TG_DTINI"
                    Case Campo="TG_DTINI"   :Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"   :Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_TPDATA":
       MSG_CAMPO="1 = EMISSAO  2 = ENTREGA  3 = INCLUSAO"
  Case Campo="TG_DTFIM":
     MSG_CAMPO="Informe a Data Final"
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;*******************************************************************************
;* Rotina Filtrar Registros                                                    *
;*******************************************************************************
Proc Selecao()
LimpAguarde()
Do_It!
ClearAll

Echo Normal
Echo Off

While True

  ShowDialog "Sele‡„o de Pedidos" 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 19 Width 72

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

    Label  @ 02,00 "Representante"  For "TG_REPRESEN"
    Accept @ 03,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_REPRESEN" To VSDGREPRESEN
    Accept @ 03,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMREPR"  To VSDGNOMREPR

    Label  @ 04,00 "Cidade"  For "TG_CIDADE"
    Accept @ 05,01 Width 27 "A20"  Picture "!*!" Tag "TG_CIDADE"  To VSDGCIDADE
                                   
    Label  @ 04,27 "Estado"  For "TG_ESTADO"
    Accept @ 05,28 Width 06 "A2"  Picture "!*!" Tag "TG_ESTADO" To VSDGESTADO

    Label  @ 06,00 "Controle Dia" For "TG_NCONTROLE"
    Accept @ 07,01 Width 9  "A6"  Picture "#*#" Tag "TG_NCONTROLE"    To VSDGNCONTROLE
    Accept @ 07,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMNCONTROLE" To VSDGNOMNCONTROLE

    Label  @ 08,00 "N§ Carregamento" For "TG_NCARREG"
    Accept @ 09,01 Width 9  "A6"  Picture "[&,#][#*#]" Tag "TG_NCARREG"    To VSDGNCARREG
    Accept @ 09,11 Width 23 "A20" Picture "!*!" Tag "TG_NOMNCARREG" To VSDGNOMNCARREG

    Label  @ 10,00 "Op‡äes de Datas" For "TG_TPDATA"
    Accept @ 11,04 Width 04 "A1"  Picture "1,2,3"  Tag "TG_TPDATA"     To VSDGTPDATA
    Accept @ 11,09 Width 25 "A18" Picture "!*!"  Tag "TG_NOMTPDATA" To VSDGNOMTPDATA

    Label  @ 12,00 "Per¡odo Referente de" For "TG_DTINI"
    Accept @ 13,03 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 13,16 "at‚" For "TG_DTFIM"
    Accept @ 13,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM
    
    Pushbutton @ 15,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 15,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog     

  SelecaoOK=False
  If Not RetVal
     Then QuitLoop
     Else TOT_PEDIDO_FATURADO = 0
          DynArray PEDIDO_FATURADO[]

          {Ask} {Progfri} 
          Moveto [Numero_ProgramacaoDisco] Check TypeIn "~LANCTO"
          Do_it!
          ClearAll
          
          If Not IsEmpty("Answer")
             Then COR_MENSAGEM="ALERTA"
                  ConfGeral(Completa("H  itens programados na rela‡„o, se continuar com este processo",63," ")+"//"+
                            Completa("ser  necess rio o recarregamento dos itens referente aos pedidos",63," ")+"//"+
                            Completa("a serem incluidos.",63," ")+"//"+
                            Completa("Deseja continuar com este processo?",63," "))
                  If Ok<>"S"
                     Then QuitLoop
                  EndIf
          EndIf
     
          LimpaRodape(0)
          Aguarde("Aguarde, Selecionando registros")
          ClearAll
          
          ;---- Bloqueia o re-carregamento se h  itens produzidos -------------- 
          {Ask} {Progfri} 
          Moveto [Numero_ProgramacaoDisco] Check TypeIn "~LANCTO"
          Moveto [Quantidade Produzida   ] Check TypeIn ">0"
          Do_it!
          ClearAll    
          
          If Not IsEmpty("Answer")
             Then Mensagem("H  itens produzidos na rela‡„o impossibilitando o recarregamento de pedidos!")
                  QuitLoop
          EndIf   
          
          {Ask} {Progfri} TypeIn "Delete" Enter
          Moveto [Numero_ProgramacaoDisco] TypeIn "~LANCTO"
          Do_it!
          ClearAll    
          
          {Ask} {ProgfP} TypeIn "Delete" Enter
          Moveto [Numero_ProgramacaoDisco] TypeIn "~LANCTO"
          Do_it!
          ClearAll    
  
          {Ask} {\\Sistemas\\Vendas\\PedidoC} Check
          If Not IsBlank(VSDGNCONTROLE)
             Then Moveto [Numero_Controle_Dia    ] TypeIn "~VSDGNCONTROLE.."
             Else Moveto [Codigo da Empresa      ] TypeIn "~VSDGEMPRESA.."
                  If Upper(VSDGCIDADE)<>"TODAS"
                     Then Moveto [Cidade         ] TypeIn "~VSDGCIDADE"
                  EndIf
                  Moveto [UF                     ] TypeIn "~VSDGESTADO.."
                  Switch
                    Case VSDGTPDATA="1": Moveto [Data de Emissao ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                    Case VSDGTPDATA="2": Moveto [Data de Entrega ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                    Case VSDGTPDATA="3": Moveto [Data_Inclusao   ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
                  EndSwitch
                  Moveto [Codigo do Representante] TypeIn "~VSDGREPRESEN.."
                  Moveto [Numero_Carregamento    ] TypeIn "~VSDGNCARREG.."
          EndIf
          Do_It!
          ClearAll
          If IsEmpty("Answer")
             Then Mensagem("N„o exitem registros conforme sele‡„o!")
                  Loop
             Else Cont_Pedido = 0
                  DynArray Num_Pedido[]
                  
                  View "ProgfP"
                  Coedit "Answer"
                  Scan
                    If [Situacao do Pedido]="FATURADO"
                       Then TOT_PEDIDO_FATURADO = TOT_PEDIDO_FATURADO + 1
                            PEDIDO_FATURADO[TOT_PEDIDO_FATURADO]=Format("W6",[Numero do Pedido])+Spaces(1)+[Codigo]+Spaces(1)+[Nome Fantasia EmitDest]
                    EndIf
                    Moveto "ProgfP"
                    Moveto [Numero_ProgramacaoDisco]
                    Locate LANCTO,[Answer->Numero do Pedido]
                    If Not RetVal
                       Then Cont_Pedido = Cont_Pedido + 1
                            Num_Pedido[Cont_Pedido] = [Numero do Pedido]
                            End Down
                            [Numero_ProgramacaoDisco     ]=LANCTO
                            [LooKup_PedidoC   ]=[Answer->Numero do Pedido ]
                            [Numero do Pedido ]=[Answer->Numero do Pedido ]
                            [LooKup_PedidoC   ]=""

                            SelecaoOK=True
                    EndIf
                    Moveto "Answer"
                  EndScan
                  Do_It!
                  ClearAll
          EndIf
          If IsAssigned(PEDIDO_FATURADO) And DynArraySize(PEDIDO_FATURADO)>0
             Then ARQIMP=PrivDir()+"PED_FAT.TXT"
                  If IsFile(ARQIMP) Then Deleta_Arquivo(ARQIMP) EndIf
                  Folha = 0
                  Imprime_Cabecalho=True
                  For i From 1 To DynArraySize(PEDIDO_FATURADO) 
                    If Imprime_Cabecalho
                       Then Folha = Folha + 1
                            Imprime_Cabecalho = False
                            Print File ARQIMP "\15"
                            Print File ARQIMP "\n\n"
                            Print File ARQIMP Spaces(2)+Fill("-",132) + "\n"
                            Print File ARQIMP Spaces(54)+"RELACAO DE PEDIDOS FATURADOS"+Spaces(15)+ 
                            "EMISSAO: "+Format("D13",Today())+"-"+StrVal(Time())+" Pag: "+Format("W3,AR",StrVal(Folha))+"\n"
                            Print File ARQIMP Spaces(2)+Fill("-",132) + "\n\n"
                            Print File ARQIMP Spaces(2)+"Pedido Cliente                       "+"\n"
                            Print File ARQIMP Spaces(2)+"------ ------------------------------"+"\n"
                            LINHA = 8
                    EndIf   
                    LINHA = LINHA + 1
                    Print File ARQIMP Spaces(2)+PEDIDO_FATURADO[i]+"\n" 
                    
                    If LINHA>=66
                       Then Imprime_Cabecalho = True
                            Print File ARQIMP "\f"
                    EndIf
                  EndFor          
                  Mensagem("Ser  exibido uma listagem informando o(s) pedido(s) FATURADO(S)")
                  PDFZEBRA=False
                  DISPOSITIVO_OPCAO="V"
                  ImpriArq(ARQIMP)
          EndIf          
          ClearAll
          QuitLoop
  EndIf
EndWhile
ClearAll
If IsTable("Answer")
   Then Delete "Answer"
EndIf

AbreTabelas()              
PickForm "1"                                                 
Moveto [Numero_ProgramacaoDisco]
Locate LANCTO
If Not RetVal
   Then FINALIZADO=True
        Tecla_Funcao=""
   Else Avanco_Tela()        
        Moveto "ProgfP"
        If SelecaoOk
           Then Scan For IsBlank([Quantidade Programada])
                  NPED=[Numero do Pedido]
                  Atualiza_Itens("Entrada")

                  Moveto "ProgfP"
                EndScan
                ;Removendo os Pedidos com Quantidade = 0
                Scan For [Quantidade Programada]=0
                  Del    
                EndScan
                ;H  um tratamento por TableAdd que foi aproveitado de outro meacanismo, por isso foi realizado no final esta verifica‡Æo!
                Verifica_Pedido("") 
        EndIf
EndIf   

EndProc

;*******************************************************************************
;* Rotina para Gravacao/Leitura do Item                                        *
;*******************************************************************************
Proc Registro_ItemIC(Funcao_Registro)
Private Funcao_Registro
Switch
  Case Funcao_Registro="Gravar":
       [Tipo do Item              ]=VSD_I_Tipo_Item
       [Codigo do Material        ]=VSD_I_Codigo_Item
       [Descricao do Item         ]=VSD_I_Descricao_Item

       [Quantidade Enviada        ]=VSD_I_Quantidade
       [Quantidade Recebida       ]=VSD_I_QuantidadeRec
       [Quantidade Liquida        ]=VSD_I_QuantidadeLiq
       [Unidade Interna           ]=VSD_I_UN_Item
       [Custo Unitario            ]=VSD_I_Preco_Unitario
       [Custo Total               ]=VSD_I_Preco_Total
       [Porc_Perda                ]=VSD_I_PORC_PR
       ;[Item_Baixa_Automatica     ]=VSD_I_Baixa_Automatica
       ;[Tipo Perda_Retorno        ]=VSD_I_Tipo_PR
       ;[Quantidade Perda_Retorno  ]=VSD_I_Quantidade_PR
       UnLockRecord
  Case Funcao_Registro="Ler":
       VSD_I_Seq                    =[Sequencia                 ]
       VSD_I_Tipo_Item              =[Tipo do Item              ]
       VSD_I_Codigo_Item            =[Codigo do Material        ]
       VSD_I_Descricao_Item         =[Descricao do Item         ]
       VSD_I_Quantidade             =[Quantidade Enviada        ]
       VSD_I_QuantidadeRec          =[Quantidade Recebida       ]
       VSD_I_QuantidadeLiq          =[Quantidade Liquida        ]
       VSD_I_UN_Item                =[Unidade Interna           ]
       VSD_I_Preco_Unitario         =[Custo Unitario            ]
       VSD_I_Preco_Total            =[Custo Total               ]
       VSD_I_PORC_PR                =[Porc_Perda                ]
              
       ;VSD_I_Baixa_Automatica       =[Item_Baixa_Automatica     ]
       ;VSD_I_Tipo_PR                =[Tipo Perda_Retorno        ]
       ;VSD_I_Quantidade_PR          =[Quantidade Perda_Retorno  ]
EndSwitch
EndProc   ; (Registro_ItemIC)

;*******************************************************************************
;* Rotina para Digitacao Itens Consumidos                                      *
;*******************************************************************************
Proc DigitaI()  

Moveto "Progfri"    
SetaCorRegistro("Editar")                   

Moveto [Quantidade Produzida]

While True      
      MSGCAMPO=Field()
      Switch
        Case Field()="Quantidade Produzida" : MSGCAMPO="Informe a Quantidade Produzida"
      Endswitch

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA
      AguardaTeclasPadraoIt2()
  
      Switch           
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-115 Or RetVal=-116 :
           Tecla_Funcao=RetVal
           Return
           
      Case RetVal="F1":
           If Field()="" Then CONSULTAF1() EndIf
           
      Case Retval="ESC": 
           Switch
             Case Field()="Quantidade Produzida" : QuitLoop         
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="DOWN" And CHAVE=0:
           Tecla_Funcao=-36
           Return
      Case Retval="ENTER": 
           Switch
              Case Field()="Quantidade Produzida"  : QuitLoop
           EndSwitch
      EndSwitch
EndWhile    

EndProc ;DigitaI()

;*******************************************************************************
;* Rotina para Iniciar Registro                                                *
;*******************************************************************************
Proc Inicia_RegistroIC()
INICIO_DIALOG=True
Moveto [Sequencia]
Locate LANCTO,SEQIT
CopyToArray RegItem
Registro_ItemIC("Ler")
EndProc ; (Inicia_RegistroIC)    

;*******************************************************************************
;* Rotina para Digitacao Itens Consumidos                                      *
;*******************************************************************************
Proc DigitaIC()  

Moveto "Progfrm"    
SetaCorRegistro("Editar")                   

Moveto [Quantidade Recebida]

While True      
      MSGCAMPO=Field()
      Switch
        Case Field()="Quantidade Recebida" : MSGCAMPO="Informe a Quantidade Recebida"
        Case Field()=""                    : MSGCAMPO=""
      Endswitch

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA
      AguardaTeclasPadraoIt2()
  
      Switch           
      Case RetVal=-33 : SemFuncoes()
      Case RetVal=-115 Or RetVal=-116 :
           Tecla_Funcao=RetVal
           Return
           
      Case RetVal="F1":
           If Field()="" Then CONSULTAF1() EndIf
           
      Case Retval="ESC": 
           Switch
             Case Field()="Quantidade Recebida" : QuitLoop         
           EndSwitch
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case RetVal="DOWN" And CHAVE=0:
           Tecla_Funcao=-36
           Return
      Case Retval="ENTER": 
           Switch
              Case Field()="Quantidade Recebida"  : AUX_PORC = BlankNum()
                                                    GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Material] To REG_PORC
                                                    If RetVal
                                                       Then If REG_PORC["Codigo Concentrador"]<>"" And Type(NumVal(REG_PORC["Codigo Concentrador"]))="N"
                                                               Then AUX_PORC = NumVal(REG_PORC["Codigo Concentrador"])
                                                            EndIf
                                                    EndIf
                                                    [Quantidade Liquida] = [Quantidade Recebida] - ([Quantidade Recebida] * AUX_PORC / 100)
                                                    QuitLoop
           EndSwitch
      EndSwitch
EndWhile    

EndProc ;DigitaIC()

;*******************************************************************************
;* Rotina para Visualiza‡Æo dos Itens Consumidos                               *
;*******************************************************************************
Proc DigitaIC_Ficha()

Showdialog "Dados do Item [     ]" Proc "Item_DialogIC"
   Trigger "OPEN","ARRIVE"
    Key "F1","TAB","ReverseTab","ENTER","ESC","F4","ClearArea","HOME","END","PGDN","PGUP"
     @ 11,00 height 06 width 80

   Accept @ -01,41 Width 5 "S" Tag "I_Seq" To VSD_I_SEQ

   Label  @ 00,01 "C¢digo Item" For "I_Codigo_Item"
   Accept @ 01,01 Width 13 "A10" picture "!*!" Tag "I_Codigo_Item" to VSD_I_Codigo_Item
   Label  @ 00,15 "Descri‡„o Item" For "I_Descricao_Item"
   Accept @ 01,15 Width 42 "A100" picture "!*!" Tag "I_Descricao_Item" to VSD_I_Descricao_Item
   Label  @ 00,58 "TI" For "I_Tipo_Item"
   Accept @ 01,58 Width 04 "A1" picture "&" Tag "I_Tipo_Item" to VSD_I_Tipo_Item
   Label  @ 00,63 "UN" For "I_UN_Item"
   Accept @ 01,63 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
   Label  @ 00,69 "%Perda" For "I_PORC_PR"
   Accept @ 01,69 Width 08 "N" picture "#*#.[##]" Tag "I_PORC_PR" to VSD_I_PORC_PR

   Label  @ 02,01 "Qtd Enviada" For "I_Quantidade"
   Accept @ 03,01 Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade" to VSD_I_Quantidade
   Label  @ 02,15 "Qtd Recebida" For "I_QuantidadeRec"
   Accept @ 03,15 Width 13 "N" picture "#*#.[######]" Tag "I_QuantidadeRec" to VSD_I_QuantidadeRec
   Label  @ 02,29 "Qtd Liquida" For "I_QuantidadeLiq"
   Accept @ 03,29 Width 13 "N" picture "#*#.[######]" Tag "I_QuantidadeLiq" to VSD_I_QuantidadeLiq
   Label  @ 02,43 "Vr.Unit rio" For "I_Preco_Unitario"
   Accept @ 03,43 Width 12 "N" picture "#*#.[#####]" Tag "I_Preco_Unitario" to VSD_I_Preco_Unitario
   Label  @ 02,56 "Vr.Total" For "I_Preco_Total"
   Accept @ 03,56 Width 12 "$" picture "#*#.[##]" Tag "I_Preco_Total" to VSD_I_Preco_Total

   ;Label  @ 02,46 "P/R" For "I_Tipo_PR"
   ;Accept @ 03,47 Width 04 "A1" picture "P,R" Tag "I_Tipo_PR" to VSD_I_Tipo_PR

   ;Label  @ 02,51 "Perda/Retorno" For "I_Quantidade_PR"
   ;Accept @ 03,52 Width 13 "N" picture "#*#.[######]" Tag "I_Quantidade_PR" to VSD_I_Quantidade_PR

   ;Label  @ 02,65 "BAE" For "I_Baixa_Automatica"
   ;Accept @ 03,66 Width 04 "A1" picture "S,N" Tag "I_Baixa_Automatica" to VSD_I_Baixa_Automatica

   Accept @ 03,74 Width 3 "A1" picture "!*!" Tag "I_Flag" to VSD_I_Flag

EndDialog
If RetVal
   Then Finaliza_RegistroIC(True)
   Else Finaliza_RegistroIC(False)
EndIf
EndProc   ; (DigitaIC)


;*******************************************************************************
;* Rotina para Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_RegistroIC(ok)
Private ok
If Ok
   Then Registro_ItemIC("Gravar")
   Else If CHAVEIC=8
           Then CopyFromArray RegItem
                Del
        EndIf
EndIf
;CUSTO()
EndProc   ; (Finaliza_RegistroIC)

;*******************************************************************************
;* Rotina para Avan‡o de Tela conforme tipo de programa‡Æo                     *
;*******************************************************************************
Proc Avanco_Tela()

Switch
  Case [Progfc->Tipo_Programacao]="REMESSA" : Tecla_Funcao=-49                  ;Itens de Consumo 
                                              SetaCorRegistro("Invisivel")
  OtherWise                                 : Tecla_Funcao=-25                  ;Itens Programados e Itens de Consumo
                                              SetaCorRegistro("Padrao")
EndSwitch

EndProc ;Avanco_Tela()

;*******************************************************************************
;* Exclusao de Itens                                                           *
;*******************************************************************************
Proc Requisicao_Remessa(Tipo)
Private TAB_ANT,Tipo,Processo,AUX_QTD,NAO_FAZ_RQ,TIPO_PROGRAMACAO

LANCTO_RQCABECA = [Lancamento RQCabeca_P]
TAB_ANT         = Table()
CAMP_ANT        = Field()
AUX_VALOR       = [Custo Total Consumo]
AUX_DAT         = [Data_Producao]
AUX_EMP         = [Codigo da Empresa] 
TIPO_PROGRAMACAO= [Tipo_Programacao]

If Tipo="Exclusao" And IsBlank(LANCTO_RQCABECA)
   Then Return True
EndIf

If Not IsBlank(LANCTO_RQCABECA)
   Then NAO_FAZ_RQ=False
        GetRecord "\\Sistemas\\Estoque\\RqCabeca" LANCTO_RQCABECA To REG_RQCABECA
        If Not RetVal
           Then NAO_FAZ_RQ=True
           Else If REG_RQCABECA["Codigo da Empresa"]<>AUX_EMP
                  Then NAO_FAZ_RQ=True
               EndIf   
        EndIf 
        If NAO_FAZ_RQ
           Then MSG="Requisi‡„o de Estoque N. "+LANCTO_RQCABECA+" n„o localizada !// //"
                MSG=MSG+"Este lan‡amento n„o ser  corrigido no Estoque !// //"
                MSG=MSG+"Motivos: - Fechamento Mensal do Estoque efetuado;          //"
                MSG=MSG+"         - Empresa da requisi‡„o n„o corresponde;          //"
                MSG=MSG+"         - Algum erro ocorrido no momento deste Lan‡amento.//"
                Mensagem(MSG)
                Moveto TAB_ANT
                Moveto Field CAMP_ANT
                Return False     
         EndIf
         Release Vars NAO_FAZ_RQ
EndIf

If AUX_VALOR<=0                                                             
   Then Mensagem(Completa("A Requisi‡„o n„o foi gerada, pois n„o foi encontrado",60," ")+"//"+
                 Completa("valor a ser atualizado nos itens de disco",60," "))
        Moveto TAB_ANT
        Moveto Field CAMP_ANT
        Return False 
EndIf
Aguarde("Gerando requisi‡„o no estoque")

UnLockRecord
{TableAdd} TypeIn "\\Sistemas\\Estoque\\RqItem"   Enter
{TableAdd} TypeIn "\\Sistemas\\Estoque\\RqCabeca" Enter
Moveto [Numero do Lancamento]
Locate LANCTO_RQCABECA
If RetVal
   Then Moveto "\\Sistemas\\Estoque\\RqItem"
        Moveto [Numero do Lancamento]
        Locate LANCTO_RQCABECA
        If RetVal
           Then While [Numero do Lancamento]=LANCTO_RQCABECA                     
                  CODIGO_ITEM=[Codigo do Item]
                  QTD_ITEM   =[Quantidade    ]                                                    
                  CTO_ITEM   =[Custo Total   ]                    
                  ESTOQUE("ESTORNAR","S",AUX_DAT, AUX_EMP, CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")               
                  Moveto "\\Sistemas\\Estoque\\RqItem"
                  Del
                EndWhile
        EndIf
        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        Moveto [Numero do Lancamento]
        Locate LANCTO_RQCABECA
        Del   
EndIf

If Tipo="Exclusao"
   Then Moveto "\\Sistemas\\Estoque\\RqItem" UnLockRecord
        Moveto "\\Sistemas\\Estoque\\RqCabeca" UnLockRecord
        Do_it!
        Moveto "\\Sistemas\\Estoque\\RqItem" ClearImage
        Moveto "\\Sistemas\\Estoque\\RqCabeca" ClearImage
        CoeditKey
              
        Moveto "ProgfC"
        FormKey
        Tentativa = 0
        While True
          Tentativa = Tentativa + 1
          If Not IsLockRecord()
             Then QuitLoop
             Else Mensagem("Sem acesso ao registro: "+Strval(Tentativa)+" Tentativa ") 
          EndIf
        EndWhile
        Release Vars Tentativa,Cont_Seq_Ped        
        Return True
EndIf   

Do_it!
ClearAll

{Ask} {\\Sistemas\\Estoque\\Itens} 
Moveto [Codigo do Item   ] Check
Moveto [Codigo do Grupo  ] TypeIn "001"
Moveto [Tipo do Item     ] Check
Moveto [Descricao do Item] Check
Moveto [Unidade Interna  ] Check
Do_it!
ClearAll

If IsEmpty("Answer")
   Then Mensagem(Completa("A Requisi‡„o n„o foi gerada, pois n„o foi encontrado",60," ")+"//"+
                 Completa("itens de disco no cadastro de itens!",60," "))
        AbreTabelas()
        PickForm "2"
        Return False
EndIf
        
;---- Gerando a Requisi‡Æo -----------------------------------------------------
CONT_ITENS = NRecords("Answer")
CUSTOMEDIO = NDecimal(AUX_VALOR/CONT_ITENS,2)
WS_DREQ    = ""
WS_CREQ    = ""

View "\\Sistemas\\Estoque\\Requisit" 
Moveto [Descricao Requisitante]
Locate TIPO_PROGRAMACAO
If RetVal
   Then WS_CREQ = [Codigo do Requisitante]
        WS_DREQ = [Descricao Requisitante]
EndIf
ClearImage

View "Answer"  
View "ProgfC"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\EstqPrm"
View "\\Sistemas\\Estoque\\RqItem"
CoEdit "\\Sistemas\\Estoque\\RqCabeca" 
  
SEQ=0
While True
  Moveto "\\Sistemas\\Estoque\\RqCabeca"
  End
  If Not IsBlank(LANCTO_RQCABECA) And SEQ=0
     Then NUMEROL=LANCTO_RQCABECA
     Else If [Numero do Lancamento]=""
             Then NUMEROL="000001"
             Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
          EndIf
  EndIf
  SEQ=SEQ+1
  Down
  [Numero do Lancamento  ]=NUMEROL
  If IsLockRecord()
     Then Del
          Loop
  EndIf
  QuitLoop
EndWhile
[Codigo da Empresa     ]=AUX_EMP
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"
[Tipo de Operacao      ]="O"
[Descricao da Operacao ]="OUTROS"
[Codigo do Documento   ]="PROD"
[Numero do Documento   ]=LANCTO
[Data de Ocorrencia    ]=AUX_DAT
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
[Sistema Gerador       ]="DC"
[Lancamento Gerador    ]=LANCTO
Controle_Dia()
UnLockrecord

QTDTOT=0
VRTOT =0   
SEQ   =0

Moveto "Answer"
Home
Scan
  Barra(CONT_ITENS, RecNo())
  Aguarde("Aguarde, Atualizando o Item: "+[Codigo do Item]+BARRA_STRING)
  
  CODIGO_ITEM = [Codigo do Item]
  WS_TITEM    = [Tipo do Item]
  WS_DITEM    = [Descricao do Item]
  WS_UNI      = [Unidade Interna]
  
  Moveto "\\Sistemas\\Estoque\\RqItem"
  End Down
  SEQ=SEQ+1
  [Numero do Lancamento       ]=NUMEROL
  [Sequencia do Lancamento    ]=SEQ
  [Codigo da Empresa          ]=AUX_EMP
  [Tipo do Item               ]=WS_TITEM
  [Codigo do Item             ]=CODIGO_ITEM
  [Descricao do Item          ]=WS_DITEM
  [Unidade Interna            ]=WS_UNI
  [Quantidade                 ]=BlankNum()
  ESTOQUE("ATUALIZAR","E",AUX_DAT,AUX_EMP,CODIGO_ITEM,BlankNum(),0,"REMESSA")
  [Custo Unitario             ]=CUSTOMEDIO
  [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)

  QTDTOT=QTDTOT+[Quantidade ]
  VRTOT =VRTOT +[Custo Total]
  UnLockrecord
  
  Moveto "Answer"
EndScan

Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal
   Then [Quantidade Total         ]=BlankNum()
        [Valor Total              ]=VRTOT
        UnLockRecord
EndIf

Moveto "ProgfC"
Moveto [Numero_ProgramacaoDisco]
Locate LANCTO
[Lancamento RQCabeca_P] = NUMEROL
UnLockRecord
Do_it!
ClearAll

AbreTabelas()
PickForm "2"
Return True

EndProc ;Requisicao_Remessa()

;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(Tipo,Processo)
Private TAB_ANT,Tipo,Processo,AUX_QTD,TIPO_PROGRAMACAO

TIPO_PROGRAMACAO = [Tipo_Programacao]

If Processo="P"
   Then LANCTO_RQCABECA = [Lancamento RQCabeca_P]
   Else LANCTO_RQCABECA = [Lancamento RQCabeca_C]
EndIf

TAB_ANT  = Table()
CAMP_ANT = Field() 
;---- Verifica se h  registros a serem processados na requisi‡Æo ---------------
If Processo="P"
   Then AUX_QTD = 0
        Moveto"Progfri"
        Scan
          If [Quantidade Produzida]>0
             Then AUX_QTD=1
                  QuitLoop
          EndIf        
        EndScan
        If AUX_QTD=0
           Then Mensagem(Completa("A Requisi‡„o n„o foi gerada, pois n„o foi encontrada",60," ")+"//"+
                         Completa("produ‡„o nesta programa‡„o "+LANCTO+"!",60," "))
                Moveto TAB_ANT
                Moveto Field CAMP_ANT
                Return
        EndIf 
EndIf
Aguarde("Gerando requisi‡„o no estoque")

UnLockRecord
{TableAdd} TypeIn "\\Sistemas\\Estoque\\Requisit" Enter
{TableAdd} TypeIn "\\Sistemas\\Estoque\\RqItem"   Enter
{TableAdd} TypeIn "\\Sistemas\\Estoque\\RqCabeca" Enter
If IsBlank(LANCTO_RQCABECA)
   Then RQ_ENCONTRADA=False
   Else Moveto [Numero do Lancamento]
        Locate LANCTO_RQCABECA
        If RetVal
           Then If [Codigo da Empresa]=[Progfc->Codigo da Empresa]
                   Then RQ_ENCONTRADA=True
                   Else RQ_ENCONTRADA=False
                EndIf
           Else RQ_ENCONTRADA=False
        EndIf
EndIf

While True
  If Not RQ_ENCONTRADA
     Then If Not IsBlank(LANCTO_RQCABECA)
             Then LimpAguarde()
                  MSG="Requisi‡„o de Estoque N. "+LANCTO_RQCABECA+" n„o localizada !// //"
                  MSG=MSG+"Este lan‡amento n„o ser  corrigido no Estoque !// //"
                  MSG=MSG+"Motivos: - Fechamento Mensal do Estoque efetuado;          //"
                  MSG=MSG+"         - Empresa da requisi‡„o n„o corresponde;          //"
                  MSG=MSG+"         - Algum erro ocorrido no momento deste Lan‡amento.//"
                  Mensagem(MSG)
                  QuitLoop
          EndIf
  	 Else NUMEROL = [Numero do Lancamento]
  	      AUX_EMP = [Codigo da Empresa]
  	      AUX_DAT = [Data de Ocorrencia]
          Moveto "\\Sistemas\\Estoque\\RqItem"
          Moveto [Numero do Lancamento]
          Locate NUMEROL
          If RetVal
             Then While [Numero do Lancamento]=NUMEROL                     
                    CODIGO_ITEM=[Codigo do Item]
                    QTD_ITEM   =[Quantidade    ]                                                    
                    CTO_ITEM   =[Custo Total   ]                    
                    If Processo="P"
                       Then ESTOQUE("ESTORNAR","S",AUX_DAT, AUX_EMP, CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")
                       Else;ESTOQUE("ESTORNAR","E",AUX_DAT,AUX_EMP, CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")
                    EndIf               
                    Moveto "\\Sistemas\\Estoque\\RqItem"
                    Del
                  EndWhile
          EndIf
          Moveto "\\Sistemas\\Estoque\\RqCabeca"
          Moveto [Numero do Lancamento]
          Locate NUMEROL
          Del
  EndIf
  
  If Tipo="Exclusao"
     Then QuitLoop
  EndIf
  
  WS_DREQ = ""
  WS_CREQ = ""
  Moveto "\\Sistemas\\Estoque\\Requisit" 
  Moveto [Descricao Requisitante]
  Locate TIPO_PROGRAMACAO
  If RetVal
     Then WS_CREQ = [Codigo do Requisitante]
          WS_DREQ = [Descricao Requisitante]
  EndIf        
    
  SEQ=0
  While True
   Moveto "\\Sistemas\\Estoque\\RqCabeca"
   End
   If Not IsBlank(LANCTO_RQCABECA) And SEQ=0
      Then NUMEROL=LANCTO_RQCABECA
      Else If [Numero do Lancamento]=""
              Then NUMEROL="000001"
              Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
           EndIf
   EndIf
   SEQ=SEQ+1
   Down
   [Numero do Lancamento  ]=NUMEROL
   If IsLockRecord()
      Then Del
           Loop
   EndIf
   QuitLoop
  EndWhile
  AUX_DAT=[Progfc->Data_Producao]
  AUX_EMP=[Progfc->Codigo da Empresa]
  
  [Codigo da Empresa     ]=[Progfc->Codigo da Empresa]
  If Processo="P"
     Then [Tipo de Movimento     ]="E"
          [Descricao do Movimento]="ENTRADA"
          [Tipo de Operacao      ]="P"
          [Descricao da Operacao ]="PRODUCAO"
          [Codigo do Documento   ]="PROD"
     Else ;[Tipo de Movimento     ]="S"
          ;[Descricao do Movimento]="SAIDA"
          ;[Tipo de Operacao      ]="C"
          ;[Descricao da Operacao ]="CONSUMO"
          ;[Codigo do Documento   ]="PROD"
  EndIf
  [Numero do Documento   ]=AlinhM(StrVal([Progfc->Numero_ProgramacaoDisco]),6)
  [Data de Ocorrencia    ]=[Progfc->Data_Producao]
  [Requisitante          ]=WS_CREQ
  [Descricao Requisitante]=WS_DREQ
  [Sistema Gerador       ]="DC"
  [Lancamento Gerador    ]=[Progfc->Numero_ProgramacaoDisco]
  Controle_Dia()
  UnLockrecord
  
  QTDTOT=0
  VRTOT =0
  SEQ   =0
  If Processo="P"
     Then Moveto "Progfri"
          Moveto [Numero_ProgramacaoDisco]
          Locate [Progfc->Numero_ProgramacaoDisco]
          If RetVal
             Then While [Numero_ProgramacaoDisco]=[Progfc->Numero_ProgramacaoDisco]
                    CODIGO_ITEM=[Codigo do Item       ]
                    QTD_ITEM   =[Quantidade Produzida ]
          
                    If QTD_ITEM >0
                       Then GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM
                            If RetVal
                               Then WS_TITEM=REG_ITEM["Tipo do Item"     ]
                                    WS_DITEM=REG_ITEM["Descricao do Item"]
                                    WS_UNI  =REG_ITEM["Unidade Interna"  ]
                               Else WS_TITEM=""
                                    WS_DITEM=""
                                    WS_UNI  =""
                            EndIf
          
                            Moveto "\\Sistemas\\Estoque\\RqItem"
                            End Down
                            SEQ=SEQ+1
                            [Numero do Lancamento       ]=NUMEROL
                            [Sequencia do Lancamento    ]=SEQ
                            [Codigo da Empresa          ]=[Progfc->Codigo da Empresa]
                            [Tipo do Item               ]=WS_TITEM
                            [Codigo do Item             ]=CODIGO_ITEM
                            [Descricao do Item          ]=WS_DITEM
                            [Quantidade                 ]=QTD_ITEM     
                                                        
                            ESTOQUE("ATUALIZAR","E",AUX_DAT,AUX_EMP,CODIGO_ITEM,QTD_ITEM,0,"")
                            [Unidade Interna            ]=WS_UNI
                            [Custo Unitario             ]=CUSTOMEDIO
                            [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)
                            
                            QTDTOT=QTDTOT+[Quantidade ]
                            VRTOT =VRTOT +[Custo Total]
                            UnLockrecord
          
                            Moveto "Progfri"
                    EndIf
                    Skip
                    If EOT() Then QuitLoop EndIf
                  EndWhile
          EndIf
     Else Moveto "Progfrm"
          Moveto [Numero_ProgramacaoDisco]
          Locate [Progfc->Numero_ProgramacaoDisco]
          If RetVal
             Then While [Numero_ProgramacaoDisco]=[Progfc->Numero_ProgramacaoDisco]
                    ;CODIGO_ITEM=[Codigo do Item       ]
                    ;QTD_ITEM   =[Quantidade Liquida   ] 
          
                    If QTD_ITEM >0
                       Then GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM
                            If RetVal
                               Then WS_TITEM=REG_ITEM["Tipo do Item"     ]
                                    WS_DITEM=REG_ITEM["Descricao do Item"]
                                    WS_UNI  =REG_ITEM["Unidade Interna"  ]
                               Else WS_TITEM=""
                                    WS_DITEM=""
                                    WS_UNI  =""
                            EndIf     
                    EndIf
                    ;...
                  EndWhile  
          EndIf
  EndIf
          
  Moveto "\\Sistemas\\Estoque\\RqCabeca"
  Moveto [Numero do Lancamento]
  Locate NUMEROL
  If RetVal
     Then [Quantidade Total         ]=QTDTOT
          [Valor Total              ]=VRTOT
          UnLockRecord
  EndIf
  
  Moveto "PROGFC"
  If Processo="P"
     Then [Lancamento RQCabeca_P] = NUMEROL
     Else [Lancamento RQCabeca_C] = NUMEROL
  EndIf
  QuitLoop
EndWhile

Moveto "\\Sistemas\\Estoque\\RqItem" UnLockRecord
Moveto "\\Sistemas\\Estoque\\RqCabeca" UnLockRecord
Moveto "\\Sistemas\\Estoque\\Requisit" UnLockRecord
Do_it!
Moveto "\\Sistemas\\Estoque\\RqItem" ClearImage
Moveto "\\Sistemas\\Estoque\\RqCabeca" ClearImage
Moveto "\\Sistemas\\Estoque\\Requisit" ClearImage
CoeditKey
              
Moveto "ProgfC"
FormKey
Tentativa = 0
While True
  Tentativa = Tentativa + 1
  If Not IsLockRecord()
     Then QuitLoop
     Else Mensagem("Sem acesso ao registro: "+Strval(Tentativa)+" Tentativa ") 
  EndIf
EndWhile
Release Vars Tentativa,Cont_Seq_Ped      

Moveto TAB_ANT

EndProc

;*******************************************************************************
;* Rotina p/ Somar os Itens                                                    *
;*******************************************************************************
Proc SomaItens()
Private TAB_ANT,SEQ_ANT,PED_ANT,siTOTPROGQ,siTOTPROGP

TAB_ANT = Table()

Aguarde("Somando os Itens")
                       
TOTPROGQ = BlankNum()      
TOTPROGP = BlankNum()
TOTPROGR = BlankNum()
CTTOT    = BlankNum()
QTD_TOT  = BlankNum()
QTD_REC  = BlankNum()
QTD_LIQ  = BlankNum() 

Switch
  Case Table()="Progfp" : PED_ANT = [Numero do Pedido]
                          Scan
                            TOTPROGQ = TOTPROGQ + [Quantidade Programada]
                            TOTPROGP = TOTPROGP + [Quantidade Programada]
                          EndScan
                          If TOTPROGQ = 0 Then TOTPROGQ = BlankNum() EndIf
                          If TOTPROGP = 0 Then TOTPROGP = BlankNum() EndIf
                          Moveto "ProgfC"
                          Moveto [Numero_ProgramacaoDisco]
                          [Quantidade_Pedidos   ]=TOTPROGQ
                          [Peso_Pedidos         ]=TOTPROGP
                          UnLockRecord
                          Moveto TAB_ANT
                          Moveto [Numero do Pedido]
                          Locate PED_ANT
  Case Table()="Progfri": SEQ_ANT = [Sequencia do Lancamento]
                          Scan
                            TOTPROGQ = TOTPROGQ + [Quantidade Programada]
                            TOTPROGR = TOTPROGR + [Quantidade Produzida] 
                            TOTPROGP = TOTPROGP + [Quantidade Programada]
                          EndScan
                          If TOTPROGQ = 0 Then TOTPROGQ = BlankNum() EndIf
                          If TOTPROGP = 0 Then TOTPROGP = BlankNum() EndIf
                          If TOTPROGR = 0 Then TOTPROGR = BlankNum() EndIf
                          Moveto "ProgfC"
                          [Quantidade_Programada]=TOTPROGQ
                          [Quantidade_Produzida ]=TOTPROGR
                          [Peso_Programado      ]=TOTPROGP
                          UnLockRecord
                          Moveto TAB_ANT
                          Moveto [Sequencia do Lancamento]
                          Locate SEQ_ANT
  Case Table()="Progfrm": SEQ_ANT = [Sequencia]
                          Scan
                            CTTOT   = CTTOT   + [Custo Total        ]
                            QTD_TOT = QTD_TOT + [Quantidade Enviada ]
                            QTD_REC = QTD_REC + [Quantidade Recebida]
                            QTD_LIQ = QTD_LIQ + [Quantidade Liquida ]
                          EndScan
                          If CTTOT = 0   Then CTTOT = BlankNum()   EndIf
                          If QTD_TOT = 0 Then QTD_TOT = BlankNum() EndIf
                          Moveto "ProgfC"
                          [Quantidade_Consumo    ]=QTD_TOT
                          [Quantidade_Consumo_Rec]=QTD_REC
                          [Quantidade_Consumo_Liq]=QTD_LIQ
                          [Custo Total Consumo   ]=CTTOT
                          UnLockRecord
                          Moveto TAB_ANT
                          Moveto [Sequencia]
                          Locate SEQ_ANT
EndSwitch

LimpAguarde()
EndProc ;SomaItens()

;*******************************************************************************
;* Rotina para Digitacao dos Precos                                            *
;*******************************************************************************
Proc Editar(PARAM)
Private PARAM 
Home

Switch
  Case PARAM="Progfri" : Moveto [Quantidade Produzida]
  Case PARAM="Progfrm" : Moveto [Quantidade Recebida]
  OtherWise            : Return
EndSwitch  

While True

      TECLA=" Esc=Retornar  (Use as Teclas p/ mover)"
      MSGCAMPO=Field()
      
      Prompt TECLA
      
      Wait Field
        Message MSGCAMPO
        Until "ESC","ENTER","HOME","UP","PGUP","PGDN","DEL","FIELDVIEW","DOWN",
              -94,-33,-115,-116,-133,-134,-145,-24,-30,-34,"F1",
              "F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","F35"

      Switch
      Case Retval="ESC":
           CHAVEI=9
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      OtherWise:                  
           TECLAPRESS=RetVal
           If (TECLAPRESS="ENTER" Or TECLAPRESS="DOWN") And PARAM="Progfrm"
              Then If Not IsBlank([Quantidade Recebida])
                      Then AUX_PORC = BlankNum()
                           GetRecord "\\Sistemas\\Estoque\\Iten_Com" [Codigo do Material] To REG_PORC
                           If RetVal
                              Then If REG_PORC["Codigo Concentrador"]<>"" And Type(NumVal(REG_PORC["Codigo Concentrador"]))="N"
                                      Then AUX_PORC = NumVal(REG_PORC["Codigo Concentrador"])
                                   EndIf
                           EndIf
                           [Quantidade Liquida] = [Quantidade Recebida] - ([Quantidade Recebida] * AUX_PORC / 100)
                      Else [Quantidade Liquida] = BlankNum()
                   EndIf
           EndIf
      
           If TECLAPRESS="ENTER" or  TECLAPRESS="RIGHT" 
              Then Down
                   Switch
                     Case PARAM="Progfri" : Moveto [Quantidade Produzida]
                     Case PARAM="Progfrm" : Moveto [Quantidade Recebida]
                   EndSwitch  
              Else If TECLAPRESS="DEL"
                      Then FastMsg("N„o ‚ poss¡vel excluir este registros!")
                      Else KeyPress TECLAPRESS
                   EnDIf   
            EndIf
            If RecordStatus("New")
               Then QuitLoop
            EndIf
      EndSwitch
EndWhile

EndProc ; (Editar)

;*******************************************************************************
;* Rotina Baixa Materia Prima                                                  *
;*******************************************************************************
Proc ESTOQUE(OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, QTDE, CTTOT,TIPO)
Private OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, ANO, MES, QTDE, CTTOT,TIPO, Tabela

Tabela=Table()

If TIPO="REMESSA" 
   Then QTDE=BlankNum()
EndIf   

MES=ALINHM(StrVal(Month(DTREF)),2)
ANO=ALINHM(StrVal(Year(DTREF)),4)

If OPERACAO="CUSTO"
   Then ;Verifica apenas o custo do item
        If TIPO="REMESSA"
           Then If [ProgfC->Valor_Mao_Obra]>0
                   Then If [ProgfC->Ajustes_Unidade]>0
                           Then CUSTOMEDIO = NDecimal(([ProgfC->Custo Total Consumo]/[ProgfC->Quantidade_Consumo_Liq]+
                                                      ([ProgfC->Valor_Mao_Obra]+[ProgfC->Ajustes_Unidade])),3)
                           Else CUSTOMEDIO = NDecimal(([ProgfC->Custo Total Consumo]/[ProgfC->Quantidade_Consumo_Liq]+[ProgfC->Valor_Mao_Obra]),3)
                        EndIf             
                   Else CUSTOMEDIO=BlankNum()
                EndIf   
           Else GetRecord "\\Sistemas\\Estoque\\SdEstq" COD_EMPRESA, COD_ITEM, ANO, MES To REG_SDESTQ
                If RetVal
                   Then CUSTOMEDIO=NDecimal(REG_SDESTQ["Custo Total Atual"]/REG_SDESTQ["Saldo Atual"],5)
                        If CUSTOMEDIO=0 Or CUSTOMEDIO=BlankNum()
                           Then CUSTOMEDIO=REG_SDESTQ["Ultimo Custo Atual"]
                        EndIf
                   Else CUSTOMEDIO=BlankNum()
                EndIf   
        EndIf      
        Return
   Else Moveto "\\Sistemas\\Estoque\\SdEstq"
        Moveto [Codigo da Empresa]
        Locate COD_EMPRESA, COD_ITEM, ANO, MES
        If Not RetVal
           Then Cria_Ficha(COD_EMPRESA,COD_ITEM,ANO,MES,False)
        EndIf
EndIf
        
While True
  If IsLockRecord()
     Then Loop
  EndIf

  If OPERACAO="ATUALIZAR"
     Then If TIPO<>"REMESSA"
             Then If [ProgfC->Valor_Mao_Obra]>0
                   Then If [ProgfC->Ajustes_Unidade]>0
                           Then CUSTOMEDIO = NDecimal(([ProgfC->Custo Total Consumo]/[ProgfC->Quantidade_Consumo_Liq]+
                                                      ([ProgfC->Valor_Mao_Obra]+[ProgfC->Ajustes_Unidade])),3)
                           Else CUSTOMEDIO = NDecimal(([Progfc->Custo Total Consumo]/[Progfc->Quantidade_Consumo_Liq]+[Progfc->Valor_Mao_Obra]),3)
                        EndIf             
                   Else CUSTOMEDIO=BlankNum()
                EndIf                  
          EndIf   
          If CUSTOMEDIO=0 Or CUSTOMEDIO=BlankNum() 
             Then CUSTOMEDIO=[Ultimo Custo Atual]
          EndIf
          CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
  EndIf

  Switch
    Case TPMOV="S":
         [Saldo Atual      ]=NDecimal([Saldo Atual      ]-QTDE,3)
         [Custo Total Atual]=NDecimal([Custo Total Atual]-CTTOT,2)
    Case TPMOV="E":
         [Saldo Atual      ]=NDecimal([Saldo Atual      ]+QTDE,3)
         [Custo Total Atual]=NDecimal([Custo Total Atual]+CTTOT,2)
  EndSwitch

  If OPERACAO="ATUALIZAR" Or
     OPERACAO="ESTORNAR" 
     Then If ([Custo Total Atual]/[Saldo Atual])>0
              Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          EndIf
          UnLockRecord
  EndIf
  QuitLoop
EndWhile

If OPERACAO="ATUALIZAR" And TPMOV="S"
   Then While True
          Moveto "\\Sistemas\\Estoque\\EstqPrm"
          Moveto [Codigo da Empresa]
          Locate COD_EMPRESA, COD_ITEM
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=COD_EMPRESA
                  [Codigo do Item      ]=COD_ITEM
                  UnLockRecord
                  Loop
          EndIf
          If IsLockRecord()
             Then Loop
          EndIf
          If DTREF>[Data da Ultima Saida]
             Then [Data da Ultima Saida]=DTREF
          EndIf
          UnLockRecord

          QuitLoop
        EndWhile
EndIf
Moveto Tabela
EndProc  ;  (Estoque)

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

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"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

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

If IsEmpty("\\Sistemas\\Estoque\\P_Requis")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o!")
        Result=False
   Else GetRecord "\\Sistemas\\Estoque\\P_Requis" [Progfc->Codigo da Empresa] To P_REQ
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else PARAM_EMPRESA          = P_REQ["Codigo_Empresa"           ]
                PARAM_BLOQUEIA_NEG     = P_REQ["Bloqueia_Estoque_Negativo"]
                PARAM_EXPLODE_MATPRIMA = P_REQ["Explosao_Materia_Prima"   ]
                PARAM_COR_TECIDO       = P_REQ["Cor_Tecido"               ]
                
                Result=True
        EndIf
EndIf

Return Result
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoAP()
Digita_APrazo()
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
INICIA_REGISTRO()
If PROGFUND_ROTINA="PRODUCAO"
   Then DIGITAI()
   Else DIGITAI_Ficha()
EndIf
Moveto "Progfri"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoIC()
Inicia_RegistroIC()
If PROGFUND_ROTINA="PRODUCAO"
   Then DIGITAIC()
   Else DigitaIC_Ficha()
EndIf   
Moveto "Progfrm"
If RecordStatus("Locked") Then UnLockRecord EndIf
EndProc

;*******************************************************************************
;* Rotina para controle de sele‡Æo do registro                                 *
;*******************************************************************************
Proc Seta_Cor()
Private ANT_TAB,ANT_CAMP,CAMPO 
 
ANT_TAB  = Table()
ANT_CAMP = Field()

SetaCorRegistro("Padrao")

Switch
  Case Tecla_Funcao="Aba_Outros" : CAMPO = "Flag5"   
  Case Table()="Progfp"          : CAMPO = "Flag1"
  Case Table()="Progfri"         : CAMPO = "Flag6"                                 
  Case Table()="Progfrm"         : CAMPO = "Flag3"
  OtherWise                      : CAMPO = "Flag1"
EndSwitch

Moveto "Progfc"
Moveto Field CAMPO
If PROGFUND_ROTINA<>"PRODUCAO" And ((Tecla_Funcao=-115 And CAMPO = "Flag6") Or (Tecla_Funcao=-25 And Table()="Progfc"))  
   Then SetaCorRegistro("Padrao")
   Else SetaCorRegistro("Invisivel")
EndIf   
                            
Moveto ANT_TAB
Moveto Field ANT_CAMP

Release Vars ANT_TAB,ANT_CAMP,CAMPO    

EndProc ;Seta_Cor()  

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()                
If Not IsAssigned(TELA_OUTROS) Then TELA_OUTROS = False EndIf
FINALIZADO=False
While Not FINALIZADO
  SetaCorRegistro("Padrao")
  Tecla_Funcao=BlankNum()
  DIGITA()
  If CHAVE=9 Then QuitLoop EndIf
  Moveto [Flag1]
  
  While Not IsBlank(Tecla_Funcao)
    Switch
      Case Tecla_Funcao=-116 :  
           Switch
             Case Table()="Progfc"           : Switch
                                                Case Field()="Flag5"                     Or 
                                                     Field()="Valor_Mao_Obra"             : Tecla_Funcao="Vencimentos"
                                                Case [Progfc->Tipo_Programacao]="REMESSA" : Tecla_Funcao=-49        
                                                OtherWise                                 : Tecla_Funcao=-25
                                              EndSwitch
                                              Seta_Cor()
             Case Tecla_Funcao="Aba_Outros" : Switch
                                                Case [Progfc->Tipo_Programacao]="REMESSA" : Tecla_Funcao=-49        
                                                OtherWise                                 : Tecla_Funcao="Vencimentos"
                                              EndSwitch
                                              Seta_Cor()
						 Case Table()="Progfc"          : Avanco_Tela()   
						                                  Seta_Cor()
             Case Table()="Progfp"          : Switch
                                                Case [Progfc->Tipo_Programacao]="REMESSA" : Tecla_Funcao="Aba_Outros" 
                                                OtherWise                                 : Tecla_Funcao=-19
                                              EndSwitch
                                              Seta_Cor()
             Case Table()="Progfri"         : Switch
                                                Case [Progfc->Tipo_Programacao]="REMESSA" : If PROGFUND_ROTINA="PRODUCAO"
                                                                                               Then Tecla_Funcao=-49
                                                                                               Else Tecla_Funcao="Aba_Outros"
                                                                                            EndIf    
                                                Case [Progfc->Tipo_Programacao]="ENTRADA" : Tecla_Funcao="Aba_Outros" 
                                                OtherWise                                 : Tecla_Funcao=-49                                               
                                              EndSwitch
                                              Seta_Cor()
             Case Table()="Progfrm"         : Tecla_Funcao="Aba_Outros"   
                                              Seta_Cor()
             OtherWise                      : Tecla_Funcao=""
           EndSwitch

			Case Tecla_Funcao=-115:  
           Switch
             Case Table()="Progfc"          : Switch
                                                Case Field()="Flag4"                     Or 
                                                     Field()="Tipo de Pagamento"          : Tecla_Funcao="Aba_Outros"
                                                Case Field()="Flag5"                     Or 
                                                     Field()="Valor_Mao_Obra"             : Switch  
                                                                                             Case [Progfc->Tipo_Programacao]="REMESSA" : 
                                                                                                   Tecla_Funcao=-49
                                                                                             Case [Progfc->Tipo_Programacao]="ENTRADA" : 
                                                                                                   Tecla_Funcao=-19      
                                                                                             OtherWise                                 :
                                                                                                   Tecla_Funcao=-49
                                                                                            EndSwitch
                                                OtherWise                                 : Tecla_Funcao=-49
                                              EndSwitch
                                              Seta_Cor()
             Case Table()="Progfp"          : Tecla_Funcao="Vencimentos"
						 Case Table()="Progfri"         : Seta_Cor()
                                              Switch
                                                Case [Progfc->Tipo_Programacao]="REMESSA"  : Tecla_Funcao="Vencimentos"
                                                Case [Progfc->Tipo_Programacao]="ENTRADA" Or 
                                                     [Progfc->Tipo_Programacao]="PRODUCAO" : If PROGFUND_ROTINA="PRODUCAO"
                                                                                                Then Tecla_Funcao="Vencimentos"
                                                                                                Else Tecla_Funcao=-25
                                                                                             EndIf   
                                                OtherWise                                  : Tecla_Funcao=-25
                                              EndSwitch
						 Case Table()="Progfrm"         : Switch
                                                Case [Progfc->Tipo_Programacao]="REMESSA" : Tecla_Funcao="Vencimentos" 
                                                Case [Progfc->Tipo_Programacao]="ENTRADA" : Tecla_Funcao="Vencimentos" 
                                                OtherWise                                 : Tecla_Funcao=-19
                                              EndSwitch        
                                              Seta_Cor()
             OtherWise                      : Tecla_Funcao=""
           EndSwitch      
      Case Tecla_Funcao=-80 Or Tecla_Funcao=-145 :
           If Table()="Progfc"
              Then Avanco_Tela()   
						       Seta_Cor()
					 EndIf	       
      Case Tecla_Funcao="F6" :
           ;If Table()="Progfc" And PROGFUND_ROTINA="PRODUCAO" 
           ;   Then Moveto "Progfri"
           ;EndIf   
           If Imprime()
               Then FINALIZADO=True
                    Tecla_Funcao=""
           EndIf
           Switch
             Case Table()="Progfc"  : Tecla_Funcao=""
             Case Table()="Progfp"  : Tecla_Funcao=-25
             Case Table()="Progfri" : Tecla_Funcao=-19
             Case Table()="Progfrm" : Tecla_Funcao=-49
           EndSwitch
      Case Tecla_Funcao="F5":
           If PROGFUND_ROTINA="PRODUCAO"  
              Then Tecla_Funcao=""
              Else Switch
                   Case Table()="Progfc" Or
                        Table()="Progfp"   :
                        Tecla_Funcao=-25
                        Selecao()
                   OtherWise:
                      Switch
                        Case Table()="Progfri"  : Tecla_Funcao=-19
                        Case Table()="Progfrm"  : Tecla_Funcao=-49
                        OtherWise               : Tecla_Funcao=""
                      EndSwitch
                      Mensagem("Fun‡Æo ativa na aba [Pedidos a Atender]")
                 EndSwitch 
           EndIf   
      Case Tecla_Funcao=-24:
           Observacao()
           Switch
             Case Table()="Progfc"   : Tecla_Funcao=""
             Case Table()="Progfp"   : Tecla_Funcao=-25
             Case Table()="Progfri"  : Tecla_Funcao=-19
             Case Table()="Progfrm"  : Tecla_Funcao=-49
           EndSwitch

      Case Tecla_Funcao=-34:
           If PROGFUND_ROTINA="PRODUCAO"  
              Then Tecla_Funcao=""
              Else Switch
                     Case Table()="Progfrm"   : Tecla_Funcao=-49
                          If RecordStatus("New")=False
                             Then ConfGeral(Completa("H  itens de consumo lan‡ados nesta rela‡„o. ",63," ")+"//"+
                                            Completa("Deseja continuar com o re-carregamento dos itens de consumo?",63," "))
                                  If Ok="S"
                                     Then Adiciona_Consumo("Adiciona Itens")
                                  EndIf
                             Else Adiciona_Consumo("Adiciona Itens")     
                          EndIf
                     OtherWise                :
                        Switch
                          Case Table()="Progfp"   : Tecla_Funcao=-25
                          Case Table()="Progfri"  : Tecla_Funcao=-19
                          OtherWise               : Tecla_Funcao=""
                        EndSwitch
                        Mensagem("Fun‡Æo ativa na aba [Itens Consumidos]")
                   EndSwitch 
           EndIf
      Case Tecla_Funcao=-30:
           If PROGFUND_ROTINA="PRODUCAO"  
              Then Tecla_Funcao=""
              Else Switch
                     Case Table()="Progfri" : Tecla_Funcao=-19
                          If RecordStatus("New")=False
                             Then ConfGeral(Completa("H  itens programados lan‡ados nesta rela‡„o.",63," ")+"//"+
                                            Completa("Deseja continuar com o re-carregamento dos itens programados?",63," "))                    
                                  If Ok="S"
                                     Then Qtd_Prod = False
                                          Home
                                          Scan
                                            If [Quantidade Produzida]>0
                                               Then Qtd_Prod = True
                                                    QuitLoop
                                            EndIf   
                                          EndScan
                                          End Down
                                          
                                          If Qtd_Prod
                                             Then COR_MENSAGEM="ALERTA"
                                                  ConfGeral(Completa("H  itens PRODUZIDOS nesta rela‡„o.",63," ")+"//"+
                                                            Completa("Deseja continuar assim mesmo com o re-carregamento dos itens?",63," "))
                                                  If Ok="S"
                                                     Then Carrega_ItensPedidos()
                                                  EndIf   
                                             Else Carrega_ItensPedidos()
                                          EndIf
                                  EndIf
                             Else ConfGeral("Deseja carregar os itens dos Pedidos ?")
                                  If OK="S"
                                     Then Carrega_ItensPedidos()
                                  Endif
                          EndIf
                     OtherWise:
                       Switch
                         Case Table()="Progfp"   : Tecla_Funcao=-25
                         Case Table()="Progfrm"  : Tecla_Funcao=-49
                         OtherWise               : Tecla_Funcao=""
                       EndSwitch
                       Mensagem("Fun‡Æo ativa na aba [Itens Programados]")
                   EndSwitch
           EndIf
      Case Tecla_Funcao=-25: 
           If PROGFUND_ROTINA="PRODUCAO"
              Then Switch
                     Case [Progfc->Tipo_Programacao]="REMESSA" : Tecla_Funcao=-49
                     OtherWise                                 : Tecla_Funcao=-19
                   EndSwitch  
              Else Pedidos()
           EndIf      
           
      Case Tecla_Funcao="Aba_Outros" :
           DIGITAT()
           
      Case Tecla_Funcao="Vencimentos" :
           DIGITACP()
                      
      Case Tecla_Funcao=-19:
           If PROGFUND_ROTINA="PRODUCAO" And ([Progfc->Tipo_Programacao]="REMESSA") 
              Then Tecla_Funcao=""
              Else While True
                     CHAVEI()
                     If CHAVEI=9 Then QuitLoop EndIf
                     Controla_EdicaoI()
                   EndWhile
           EndIf   
      Case Tecla_Funcao=-49:  
           While True
             CHAVEIC()
             If CHAVEIC=9 Then QuitLoop EndIf
             Controla_EdicaoIC()
           EndWhile            
                   
      OtherWise            : QuitLoop
    EndSwitch
  EndWhile
  Moveto "ProgfC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F" Or OPCAO_FORM="2"
   Then PickForm OPCAO_FORM
EndIf
EndProc

;*******************************************************************************
;* Rotina para Abrir Tabelas                                                   *
;*******************************************************************************
Proc AbreTabelas()

View NoWindow "\\Sistemas\\Estoque\\P_Requis"
View NoWindow "\\Sistemas\\Estoque\\Itens"
View NoWindow "\\Sistemas\\Estoque\\Requisit"
View NoWindow "\\Sistemas\\Estoque\\RqCabeca"
View NoWindow "\\Sistemas\\Estoque\\RqItem"
View NoWindow "\\Sistemas\\Estoque\\Sdestq"
View NoWindow "\\Sistemas\\Estoque\\EstqPrm"
View NOWINDOW "\\Sistemas\\CtaCor\\MovCont"
View NOWINDOW "\\Sistemas\\CtaCor\\SaldCont"
View NOWINDOW "\\Sistemas\\CtaPag\\Titulos"

View NoWindow  "ProgfCV"
View NoWindow  "ProgfCP"
View NoWindow  "ProgfP"
View NoWindow  "ProgfRI"
View NoWindow  "ProgfRM"
CoEdit "ProgfC"

;---- Ocultar tabelas linkadas -------------------------------------------------
PickForm "1"
Moveto "ProgfC"

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""         EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""          EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA  =""          EndIf
If Not IsAssigned(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO ="S"         EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO  ="S"         EndIf
If Not IsAssigned(SYS_NCONEXAO)        Then SYS_NCONEXAO      =""          EndIf
If Not IsAssigned(SYS_ESTACAO)         Then SYS_ESTACAO       =""          EndIf
If Not IsAssigned(SYS_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO     = "9999" EndIf
If Not IsAssigned(PROGFUND_ROTINA)     Then PROGFUND_ROTINA = ""           EndIf

VSDGEMPRESA  =""
VSDGREPRESEN =""
VSDGCIDADE   =""
VSDGESTADO   =""
VSDGNCONTROLE=""
VSDGNCARREG  =""
VSDGTPDATA   =""
VSDGDTINI    =BlankDate()            
VSDGDTFIM    =BlankDate()       

PARAM_ATUA_CXBC   = "S"
PARAM_ATUA_CAPG   = "S"
PARAM_CONTA_CAIXA = "0001"
GetRecord "\\Sistemas\\Ctacor\\Conta" PARAM_CONTA_CAIXA To REG_CONTA
If RetVal
   Then PARAM_DESC_CONTA_CAIXA=REG_CONTA["Descricao da Conta"]
   Else PARAM_DESC_CONTA_CAIXA=""
EndIf

If PROGFUND_ROTINA="PRODUCAO"
   Then TIT_FUND = "  Produ‡„o/Fundi‡„o "
   Else TIT_FUND = "Programa‡„o/Fundi‡„o"
EndIf   

;---- Particularidade ----------------------------------------------------------
;Apenas p/ Empresa 0377
;Informar o GRUPO para a verifica‡Æo do item no ato da inser‡Æo do pedido.
;Exemplo: GRUPO 001 que pertence ao grupo DISCO, logo, apenas estes itens serÆo incluidos na aba dos itens programados.

ROTINA_LIBERADA = False       
Switch
  Case SYS_CODIGO_CLIENTE="0377" Or 
       SYS_CHAPA_USUARIO ="9999"  : GRUPO           = "001"
                                    ROTINA_LIBERADA = True
EndSwitch

If Not ROTINA_LIBERADA
   Then Mensagem("Rotina indispon¡vel !//Verificar com o Suporte VISE !")
        Return
EndIf    
            
KeyEnable -24 ; usando tecla alt+o que pode ir ao prompt do DOS

AbreTabelas()
If PROGFUND_ROTINA="PRODUCAO"
   Then OPCAO_FORM="2"
   Else OPCAO_FORM="F"
EndIf   
PickForm OPCAO_FORM

While True
  CHAVE()
  If CHAVE=9 Then QuitLoop EndIf
  ;If CHAVE=1 Then Controle_Dia() EndIf
  If CHAVE=5
     Then If OPCAO_FORM="F" Or OPCAO_FORM="2"
             Then PickForm OPCAO_FORM
             Else PickForm "1"
          EndIf
          Loop
  EndIf
  Controla_EdicaoC()
EndWhile
Do_It!
ClearAll

KeyDisable -24 ; usando tecla alt+o que pode ir ao prompt do DOS

Release Vars All
Release Procs All
