;** PCFacG**********************************************************************
;*  Producao/Retorno Corte                                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 14/04/2008 por Anivel Augusto Rodrigues
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 03/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Imprimir
;Ultima Alteracao: 27/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Descricao
;Ultima Alteracao: 27/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Monta_Array_Grade()
;Ultima Alteracao: 24/12/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Sequencia
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 15/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem consulta cores             
;Ultima Alteracao: 08/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Não Carregar itens programacao automaticamente
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_PCFACri()    
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha() sem msg nova ficha      
;Ultima Alteracao: 15/09/2010 por Karina Andrade
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo
;Ultima Alteracao: 14/10/2010 por Bruno Carvalho
;Motivo Alteracao: Ajustes Edita_Memo
;Ultima Alteracao: 24/11/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mesnagem formula nÆo encontrada
;Ultima Alteracao: 03/01/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes Novo Layout de Teclas     
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo Monta_Array_Grade
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 23/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem Alfabetica               
;Ultima Alteracao: 07/06/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem sequencia lupus         
;Ultima Alteracao: 17/06/2011 por Karina Andrade
;Motivo Alteracao: Ajustes TECLAS
;Ultima Alteracao: 26/09/2012 por Anivel Augusto Rodrigues                           
;Motivo Alteracao: Ajustes bloqueio de registro durante carrega_parametros()        
;Ultima Alteracao: 01/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes descricao do movimento/operacao                   
;Ultima Alteracao: 23/05/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Seleciona_Opcoes() quando ocorrer maior que 10 cores  
;Ultima Alteracao: 12/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado SetaCorRegistro("Invisivel") e SetaCorRegistro("Padrao")
;Ultima Alteracao: 17/12/2013 por Bruno Carvalho
;Motivo Alteracao: Ajuste CHAVEI()
;Ultima Alteracao: 27/03/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Requisicao() antes de executar Formula()
;Ultima Alteracao: 12/05/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes quando atualiza contas a pagar 
;Ultima Alteracao: 03/06/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Requisicao() onde foi adicionado o [Numero do Corte]
;Ultima Alteracao: 17/07/2014 por Andrey Fillipe
;Motivo Alteracao: Ajustes bloquear quando quantidade < 0
;Ultima Alteracao: 18/07/2014 por Bruno Carvalho
;Motivo Alteracao: ChaveI() UnLockRecord e IsLockRecord, alterado para SaveTable
;Ultima Alteracao: 21/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes CHAVEI, registro em uso pelo usu rio
;Ultima Alteracao: 06/04/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Array_Grade() -> Array_Monta_Grade() e adicionado-o na Bibliot
;Ultima Alteracao: 05/10/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes na Requisi‡Æo p/ diferenciar quando for Entrada de Produ‡Æo/Industrializa‡Æo
;Ultima Alteracao: 06/10/2015 por Bruno Carvalho
;Motivo Alteracao: Comentado/Cancelado na Requisi‡Æo p/ quando diferenciar Entrada de Produ‡Æo/Industrializa‡Æo
;Ultima Alteracao: 29/03/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc REQUISICAO() p/ maior seguran‡a na montagem da cabe‡a e a inser‡ao dos itens #ProximaOrdem() adicionada
;Ultima Alteracao: 07/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Pega_Preco() getrecord
;Ultima Alteracao: 11/04/2016 por Bruno Carvalho
;Motivo Alteracao: Removido da tabela de itens grade [Lookup_TabPreco_Item] e [Lookup_TabPreco_Cliente] e ajustado o campo [Referencia] e [Descricao da Cor_Tecido]  
;Ultima Alteracao: 13/09/2016 por Bruno Carvalho 
;Motivo Alteracao: Removido o novo processo para gera‡Æo/verifica‡Æo do [Numero do Lancamento] #Sol. 25558#
;                  Utiliza o mesmo numero do corte e o numero da produ‡Æo do corte  
;Ultima Alteracao: 25/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desativar tecla alt+O (-24) ir ao prompt do DOS
;Ultima Alteracao: 16/01/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes Bloqueio -> Verifica_Corte()
;Ultima Alteracao: 23/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes SetaCorRegistro()
;Ultima Alteracao: 06/02/2018 por Bruno Carvalho
;Motivo Alteracao: Alterado o valor da vari vel VSD_I_Custo_Unitario -> De [Preco Unitario] p/ [Custo Unitario]
;Ultima Alteracao: 06/04/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustes REQUISICAO() ao gravar e travar o numero do lancamento -> PostRecord
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() p/ gravar log de erros ao excluir registros
;Ultima Alteracao: 28/06/2018 por Bruno Carvalho
;Motivo Alteracao: Ajustado proc EXCLUSAO p/ nÆo gerar log de itens excluidos quando for excluir a cabe‡a do registro
;Ultima Alteracao: 25/07/2018 por Bruno Carvalho
;Motivo Alteracao: Add PARAM_PRODUCAO_CORTE_LIBERADA p/ permitir produ‡Æo maior que informado no corte #0391#
;Ultima Alteracao: 09/09/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes cor_tecido #0232
;Ultima Alteracao: 08/10/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes no [Valor Total] ao receber a vari vel "TOTVR" -> SaveTables e UnLockRecord 
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Movido o Controle_Dia() p/ o Controla_EdicaoC() 
;Ultima Alteracao: 31/10/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado IntervaloData()
;Ultima Alteracao: 11/12/2019 por Bruno Carvalho
;Motivo Alteracao: Ajustes [Numero do Lancamento] p/ utiliza‡Æo do modo padrÆo, add AjustaDadosCabeca() onde ajusta pre‡o e quantidade na cabe‡a do processo
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 23/09/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando [Data_Producao] for em branco
;Ultima Alteracao: 05/10/2020 por Bruno Carvalho
;Motivo Alteracao: Adicionado vari vel de controle VERIFICA_GRADE_GETRECORD p/ Array_Monta_Grade()
;Ultima Alteracao: 09/10/2020 por Bruno Carvalho                       
;Motivo Alteracao: Ajustes para avisar a execu‡Æo do FechaMes
;Ultima Alteracao: 11/11/2020 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ exibir mensagem com informativo de desempenho somente quando quantidade de registros for maior que zero
;Ultima Alteracao: 05/01/2021 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ESTOQUE() customedio
;Ultima Alteracao: 15/01/2021 por Bruno Carvalho
;Motivo Alteracao: Adicionado op‡Æo de filtro

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

TOTQTD = BlankNum()
TOTVR  = BlankNum()

While True                                       
  Moveto TabelaControle
  End
  Moveto [Numero_Producao_Corte]
  NPROD=[Numero_Producao_Corte]
  
  If OPCAO_FORM="F"
     Then Down
     Else PgDn PgDn                 
  EndIf
  Moveto [Numero_Producao_Corte]

  SetaCorRegistro("Editar")
  While True

  TECLA=""
  AguardaTeclasPadraoCF()
  
  If RetVal="F5" 
     Then RetVal = MenuFiltrar()
          Release Vars MfOpcao
  EndIf       

  Switch
    ;---- FILTRO ---------------------------------------------------------------
    Case RetVal="MENUFILTRAR" :
         CHAVEC=99
         Del
         Return
    Case RetVal="MENUFILTROTODOS" :
         MODOFILTRAR=False
         CHAVEC=98
         Del
         Return
    ;---------------------------------------------------------------------------     
    Case RetVal=-33  : SemFuncoes()
    Case RetVal=-94  : MsgTeclasPadrao()
    Case RetVal="F3" :
         If OPCAO_FORM="F"
            Then OPCAO_FORM="1"
            Else OPCAO_FORM="F"
         EndIf
         Del
         CHAVEC=5
         Return
    Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME" :
         MODOPAGINA = True
         Del
         While True
           INICIO=True
           campocorrente=""
           TOTQTD = BlankNum()
           TOTVR  = BlankNum()
           If OPCAO_FORM="F"
              Then PAGINA(TabelaControle,"MR")
              Else PAGINA(TabelaControle,"MT")
           EndIf
           CHAVEC=0
           NPROD   =[Numero_Producao_Corte]
           If EDITAR="S"
              Then If PegaRegistroControle("Numero_Producao_Corte",NPROD)
                      Then If OPCAO_FORM="F"
                              Then PickForm "2"
                                   TableAnt=Table()
                                   Moveto "\\Sistemas\\Estoque\\SdEstq"  SetaCorRegistro("Invisivel")
                                   Moveto "Cfacrig"                      SetaCorRegistro("Invisivel") 
                                   Moveto "Pcfacri"                      SetaCorRegistro("Invisivel")
                                   Moveto TableAnt
                           EndIf
                           If Not Verifica_Duplicidade()
                               Then Moveto [Numero_Programacao_Corte]
                                    AtualizaRegistroControle("Numero_Producao_Corte",NPROD,MODOPAGINA)       
                                    QuitLoop
                           EndIf  
                           If Checa_Controle([Numero_Controle_Dia])
                              Then Controla_EdicaoC()
                              Else UnLockRecord
                                   AtualizaRegistroControle("Numero_Producao_Corte",NPROD,MODOPAGINA)       
                           EndIf
                   EndIf
              Else If EXCLUIR="S"
                      Then If MODOFILTRAR 
                              Then FastMsg("Modo [FILTRO] exclusÆo nÆo permitida !")
                                   UnLockRecord 
                              Else If PegaRegistroControle("Numero_Producao_Corte",NPROD)
                                      Then If QuerExcluir("") And Checa_Supervisor()
                                              Then If Carrega_Parametros()
                                                      Then If OPCAO_FORM="F"
                                                              Then PickForm "2"
                                                           EndIf
                                                           GRAVA_LOG=True
                                                           EXCLUSAO("Cabeca")
                                                           If OPCAO_FORM="F"
                                                              Then PickForm "F"
                                                           EndIf
                                                      Else UnLockRecord
                                                   EndIf
                                              Else UnLockRecord
                                           EndIf
                                           AtualizaRegistroControle("Numero_Producao_Corte",NPROD,MODOPAGINA)
                                   EndIf        
                           EndIf
                      Else QuitLoop
                   EndIf
           EndIf
           If OPCAO_FORM="F"
              Then PickForm "F"
           EndIf
           SetaPosForm()
        EndWhile
        QuitLoop
    Case Retval="ESC": 
         CHAVEC=9
         Del
         Return
    Case Retval="ENTER":
         ;---- Modo Filtrar ------------------------------------------------
         If MODOFILTRAR  
            Then If TabelaControle<>TabelaPrincipal
                    Then NPROD=[Numero_Producao_Corte]
                         FormKey Moveto TabelaPrincipal End Down FormKey
                         [Numero_Producao_Corte] = NPROD 
                         SetaCorRegistro("Editar")
                 EndIf
         EndIf
         MODOPAGINA = False        
         If Numero_Lancamento("","F")
            Then NPROD = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC   
            Else QuitLoop
         EndIf
         PickForm "2"
         Moveto [Numero_Producao_Corte]
         If PROXIMO_LANCTO_REG_ACHOU
            Then CHAVEC=0
                 Echo Normal
                 Echo Off
                 If Checa_Controle([Numero_Controle_Dia])
                    Then Return
                 EndIf                
            Else CHAVEC=1
                 If Checa_Controle(SYS_CONTROLE_DIA)
                    Then Return  
                    Else OPCAO_FORM="F"
                 EndIf
         EndIf     
         If TabelaControle<>TabelaPrincipal
            Then FormKey
                 Moveto TabelaControle
         EndIf
         QuitLoop
    EndSwitch
  EndWhile
EndWhile
EndProc   ; (Chave)

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

gerou_pcfacri=False
If IsBlank(campocorrente)
   Then If [Situacao_Producao]="FINALIZADA" And INICIO
           Then Mensagem("Ordem Finalizada !")
                If Not Checa_Supervisor()
                   Then CHAVEC=9
                        Return
                EndIf
        EndIf

        If Not IsBlank([Codigo da Empresa])
           Then If Not Carrega_Parametros()
                   Then If CHAVEC=1
                           Then Del
                        EndIf
                        CHAVEC=9
                        Return
                EndIf
        EndIf

        If CHAVEC=1
           Then Moveto [Numero_Programacao_Corte]
                [Destino_Producao]="INTERNO"
           Else INICIO=False
                If [Destino_Producao]<>"INTERNO"
                   Then Moveto [Data de Vencimento]
                   Else Tecla_Funcao=-19
                        Return
                EndIf
        EndIf
   Else Moveto Field campocorrente
EndIf

While True

      TECLA=" Esc=Retornar  "
      If Field()="Numero_Programacao_Corte"
         Then TECLA=TECLA+"F1=Tabelas  "
      EndIf
      If CHAVEC=0
         Then TECLA=TECLA+"Del=Exclui  "
      EndIf
      If Field()="Data de Vencimento"
         Then TECLA=TECLA+"F4=CalcVencto  "
      EndIf
      TECLA=TECLA+"Alt+F=Fun‡”es  PgDn=Finalizar  "

      MSGCAMPO=Field()

      campocorrente=Field()
      Tecla_Funcao =""

      Prompt TECLA

      Wait Field
           Message MSGCAMPO
           Until "F1","ESC","ENTER","DEL","FIELDVIEW","F35",
                 "PGDN",-33,-34,-24,-19,"F4",-25,-18

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

      Switch

      Case RetVal=-24  Or RetVal=-19 Or RetVal=-25:
           Tecla_Funcao=RetVal
           Return

      Case RetVal="F1":
           If Field()="Numero_Programacao_Corte"
              Then CONSULTAF1()
           EndIf
      Case RetVal="F4" And Field()="Data de Vencimento":
           [Data de Vencimento]=Ultimo_Dia_Data([Data_Producao])+10
      Case Retval="ESC":
           Switch
           Case Field()="Numero_Programacao_Corte":
                If QuerDesfazer("")
                   Then If CHAVEC=1
                           Then EXCLUSAO("Cabeca")
                                CHAVEC=9
                           Else Undo
                                FINALIZADO=True
                                Tecla_Funcao=""
                                OPCAO=""
                        EndIf
                        QuitLoop
                Endif
           Case Field()="Data_Producao":
                Moveto [Numero_Programacao_Corte]
           Case Field()="Data de Vencimento":
                If CHAVEC=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVEC=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data_Producao]
                EndIf
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGDN" and CHAVEC=0:
           If [Destino_Producao]="EXTERNO" And
              (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
              Then Mensagem("Data de Vencimento Inv lida !")
                   Loop
           EndIf

           FINALIZADO=True
           CHAVEC=9
           OPCAO=""
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVEC=0
              Then If MODOFILTRAR 
                      Then FastMsg("Modo [FILTRO] fun‡Æo nÆo permitida !")
                           Loop
                      Else If QuerExcluir("") And Checa_Supervisor()
                              Then CHAVEC=9
                                   GRAVA_LOG=True
                                   EXCLUSAO("Cabeca")
                                   QuitLoop
                           EndIf
                   EndIF
           EndIf
      Case Retval="ENTER":
        Switch
          Case Field()="Numero_Programacao_Corte"  :
               If IsBlank([])
                  Then Loop
               EndIf
               If Not BUSCA_LOOKUP("Numero_Corte",[],"Programa‡„o n„o encontrada !")
                  Then Loop
               EndIf
               If REG_BUSCA_LOOKUP["Situacao_Programacao"]="SUSPENSA" or
                  REG_BUSCA_LOOKUP["Situacao_Programacao"]="FINALIZADA"
                  Then Mensagem("Programa‡Æo n„o permitida !// //Situa‡„o: "+REG_BUSCA_LOOKUP["Situacao_Programacao"])
                       Loop
               EndIf
               If Not Carrega_Parametros()
                  Then Loop
               EndIf
               
               If Not Verifica_Duplicidade()
                  Then Moveto [Numero_Programacao_Corte]
                       Loop
               EndIf  

               Moveto [Data_Producao]
          Case Field()="Data_Producao"  :
               If IsBlank([])
                  Then []=Today()
               EndIf
               
               If Not IntervaloData([Data_Producao])
                  Then Loop
               EndIf

               If [Destino_Producao]="EXTERNO"
                  Then Moveto [Data de Vencimento]
                  Else [Data de Vencimento]=BlankDate()
                       Tecla_Funcao=-19
                     ;;If INICIO
                     ;;   Then PegaItens_Programacao()
                     ;;EndIf  
                       Return
               EndIf
          Case Field()="Data de Vencimento"  :
               If [Destino_Producao]="EXTERNO" And
                  (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
                  Then Mensagem("Data de Vencimento Inv lida !")
                       Loop
               EndIf

               Tecla_Funcao=-19
               Return
          OtherWise: Right
        EndSwitch
      EndSwitch
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Verificar Duplicidade de Producoes                              *
;*******************************************************************************
Proc Verifica_Duplicidade()

DynArray DUPLICIDADE_PROG[]
CONT_DUPLICIDADE_PROG = 0
                
Verifica_Rotina = True 
Producao = ""

EMPR     = [PcFacc->Codigo da Empresa       ]
DEST     = [PcFacc->Destino_Producao        ]
PROD     = [PcFacc->Numero_Producao_Corte   ]
PROG     = [PcFacc->Numero_Programacao_Corte]
DATA     = [PcFacc->Data_Producao           ]

UnLockRecord
FormKey

Conta_Duplicidade(PROG)

Moveto "PcFacc"
Moveto [Numero_Producao_Corte]
Locate PROD 
UnLockRecord
FormKey
If Not Verifica_Rotina
  Then MSG=Completa("O Corte "+PROG+" j  foi lan‡adado na(s) produ‡(”es): ",60," ")+Producao
       Moveto "PcFacrig"
       If RecordStatus("New")=True
          Then Moveto "PcFacc"
               MSG=MSG+"//Deseja continuar o processo ?"
               ConfGeral(MSG)
               If Ok<>"S"
                  Then Release Vars Verifica_Rotina,Producao
                       Return False
               EndIf        
          Else Moveto "PcFacc"        
       EndIf  
EndIf 

Return True

EndProc ;Verifica_Duplicidade()

;*******************************************************************************
;* Rotina para Contar Produ‡äes do Corte                                     *
;*******************************************************************************
Proc Conta_Duplicidade(PARAM_VALOR)
Private PARAM_VALOR,CONT_LIMITE,RETORNO,PARAM_FIELD,PARAM_VALOR,MSG

CONT_LIMITE = 0
RETORNO = False

Moveto "PcFacc"
Moveto [Numero_Programacao_Corte]
Locate PARAM_VALOR
If RetVal
   Then While PARAM_VALOR = [] 
           If PROD <> [Numero_Producao_Corte]
              Then If EMPR = [Codigo da Empresa] And DEST = [Destino_Producao] 
                      Then If Not RETORNO Then RETORNO = True EndIf
                           CONT_DUPLICIDADE_PROG = CONT_DUPLICIDADE_PROG + 1
                           DUPLICIDADE_PROG[CONT_DUPLICIDADE_PROG] = Format("W6",[Numero_Producao_Corte])+Format("D13",[Data_Producao])
                           Verifica_Rotina = False
                           Producao = Producao+"//"+Format("W61"," - "+[Numero_Producao_Corte])
                           
                           ;---- Limite de caracteres p/ exibi‡Æo da MSG -------
                           CONT_LIMITE = CONT_LIMITE + 1
                           If CONT_LIMITE = 95 Then QuitLoop EndIF
                   EndIf                            
           EnDIf
           Skip
           If EOT() Then Quitloop EndIf
           Locate Next PARAM_VALOR
           If Not RetVal
              Then QuitLoop
           EndIf       
        EndWhile
        MSG_PROG = Completa("A Programa‡„o do corte "+[PcFacc->Numero_Programacao_Corte]+" j  foi lan‡adada na produ‡„o: ",60," ")+Producao+"//"        
EndIf
Return RETORNO

EndProc ;Conta_Duplicidade()

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

Tecla_Funcao=""
Echo Normal
Echo Off

ShowPopup " Fun‡”es " CENTERED
 "~O~bs                ": " Alt+O = Observa‡”es                              " : "-24",
 "~P~rograma‡„o        ": " Alt+P = Carregar Itens da Programa‡„o            " : "-25",
 "~R~ela‡ao Itens      ": " Alt+R = Rela‡„o Itens                            " : "-19",
 "~E~ditar             ": " Alt+E = Editar quantidades                       " : "-18",
 "Re-~G~era Requisi‡„o ": " Alt+G = Re-Gera a Requis‡„o                      " : "-34",
 "~I~mprimir           ": " [F6]  = Imprimir Entrada Produ‡„o, Retorno Corte " : "F6",
 "~C~ancelar           ": " Cancelar a Opera‡„o                              " : "CANCELAR"
EndMenu
 To MenuVar


Echo Off

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

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

Return True

EndProc

;*******************************************************************************
;* Rotina para Tabela de Preco                                                 *
;*******************************************************************************
Proc Pega_Preco(OpcaoP)
Private TABPR, CodClie, CodItem, Registro_TabPreco_Item, PesqOk

If [PCFACC->Destino_Producao]="INTERNO"
   Then Return
EndIf

[Codigo da Tabela]=[PCFACC->Codigo da Tabela]

TABPR  =[PCFACC->Codigo da Tabela]
CodClie=[PCFACC->Codigo          ]
CodItem=[Codigo do Item          ]
CodItem=PegaCodigoRaiz(CodItem)

PesqOk     =False

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

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

If PesqOK
   Then [Custo Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
   Else [Custo Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()
EndIf

Return True
EndProc ;(Pega_Preco)

;*******************************************************************************
;* Rotina para Custo do Item                                                   *
;*******************************************************************************
Proc Pega_Custo(OpcaoP)

MES=ALINHM(StrVal(Month([PCFACC->Data_Producao])),2)
ANO=ALINHM(StrVal(Year([PCFACC->Data_Producao])),4)
Moveto "SdEstq"
Moveto [Codigo da Empresa]
Locate [PFACC->Codigo da Empresa],
       [PFACRIG->Codigo do Item], ANO, MES
If Not RetVal
   Then If Not Cria_Ficha([PCFACC->Codigo da Empresa],[PCFACRIG->Codigo do Item],False)
           Then Moveto "RqItemg"
                Temp=False
                Return TEMP
        EndIf
EndIf

CUSTOMEDIO=[Preco de Custo]

Moveto "PFACRIG"
[Custo Unitario]    =NDecimal(CUSTOMEDIO,5)
VSD_I_Preco_Unitario=NDecimal(CUSTOMEDIO,5)

EndProc

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

Moveto "Pcfacc"
Moveto [Numero_Producao_Corte]  SetaCorRegistro("Padrao")
Moveto "PCFACrig"
While True
  SomatoriaDosItens()
  
  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 "PCFACrig"
        
        TECLA=" Esc=Retornar  Alt+F=Fun‡”es  F3=Ver Ficha  PgDn=Finalizar  F7=Paginar  "
        Prompt TECLA

        Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN",
                 "F3",-33,-34,-24,"F6",-25,-18

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

        Switch
        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()
             QuitLoop
        Case RetVal="PGDN":
             Del
             Moveto [Sequencia do Lancamento]
             Switch
               Case RecordStatus("New")=True : 
                    MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                    QuitLoop
               Case IsBlank([Pcfacc->Data_Producao]) :
                    MENSAGEM("Data da produ‡Æo nÆo foi informada!")
                    QuitLoop
             EndSwitch  
             CHAVEI=9
             FINALIZADO=True
             Tecla_Funcao=""
             AjustaDadosCabeca()
             Return
        Case RetVal=-24 Or RetVal="F6" or RetVal=-25 or RetVal=-18:
             Tecla_Funcao=RetVal
             Del
             CHAVEI=9
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             del
             While True
               Moveto "PCFACrig"
               
               ITEM = [Sequencia do Lancamento]
               SomatoriaDosItens()

               Moveto [Sequencia do Lancamento]
               Locate ITEM
               
               PAGINA("PCFACrig","MR")
               If EDITAR="S"
                  Then CHAVEI=0
                       Controla_EdicaoI()
                  Else If EXCLUIR="S"
                          Then If QuerEXcluir("")
                                  Then EXCLUSAO("Item")
                                       Moveto "PCFACrig"
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SomatoriaDosItens()               
               SetaPosForm()
             EndWhile
             QuitLoop
        Case Retval="ESC":
             Del
             CHAVEI=9
             Tecla_Funcao=""
             Return
        Case Retval="ENTER":
             If Not Seta_Sequencia(ITEM,True)
                Then Del
                     QuitLoop
             EndIf
             ITEM=[]
             Del
             Locate NPROD,ITEM
             If Retval
                Then CHAVEI=0
                Else CHAVEI=1
                     End Down
                     [Numero_Producao_Corte      ] = NPROD
                     [Sequencia do Lancamento] = ITEM
                     Locate NPROD,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Somatoria de valores dos itens para variaveis do FORM Fatura                *
;*******************************************************************************
Proc SomatoriaDosItens()

TOTQTD = 0
TOTVR  = 0

scan
  TOTQTD = TOTQTD + [Quantidade Produzida]
  TOTVR  = TOTVR  + [Preco Total         ]
endscan

EndProc ;SomatoriaDosItens()

;*******************************************************************************
;* 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 Campo=AvancaCampo("I_Qtd0")
           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 Confirma()
                    If OK="S"
                       Then CHAVEI=8
                            CancelDialog
                    EndIf
            EndIf
       Case Evento["KeyCode"] = -59:
            If Campo="I_Codigo_Item" Or
               Campo="I_Codigo_Cor_Tecido"
               Then
                    If Campo="I_Codigo_Cor_Tecido"  
                       Then Monta_Opcoes("Codigo da Cor_Tecido","")
                            Seleciona_Opcoes("Codigo da Cor_Tecido","")
                            Moveto [Codigo da Cor_Tecido ]
                       Else
                            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
        
                    EndIf
                    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 Interna   ]
                            Campo="I_Codigo_Item"
                    EndIf

                    If Campo="I_Codigo_Cor_Tecido"
                       Then VSD_I_Codigo_Cor_Tecido   =[Codigo da Cor_Tecido   ]
                            VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]
                    EndIf

                    Moveto "PCFACrig"
                    RefreshDialog
           EndIf
           Temp=False
      Case Evento["KeyCode"] = 27:
           Switch
             Case Campo="I_Codigo_Item":
                  If QuerDesfazer("")
                     Then CHAVEI=9
                          Del
                          CancelDialog
                  EndIf
             Case Campo="I_Codigo_Cor_Tecido"   :
                  Campo="I_Codigo_Item"
                  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_Modelo_Item   =""
             Case SubStr(Campo,1,5)="I_Qtd": Campo=VoltaCampo(Campo)

             Case Campo="I_Custo_Unitario" : Campo=VoltaCampo("I_Qtd13")

             Case Campo="I_Flag":
                  Campo="I_Custo_Unitario"
           EndSwitch
           Temp=False
      Case Evento["KeyCode"] = 13:
           Switch
             Case Campo="I_Codigo_Item":
                  VSD_I_REFERENCIA  =ControlValue("I_Codigo_Item")
                  Moveto [Codigo do Item]
                  Ativa_Lookup()

                  If PARAM_COR_TECIDO="S" 
                     Then tpitemref="D"
                     Else tpitemref="S"
                  EndIf   
                  
                  Moveto [Referencia]
                  Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref
                  If RetVal
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          KeyPress "ESC"
                          [Codigo do Item       ]=VSD_I_Codigo_Item
                          [Referencia           ]=VSD_I_REFERENCIA

                          If Array_Monta_Grade("Valida")
                             Then Pega_Preco("Novo")
                                  Registro_Item("Ler")
                                  Monta_Opcoes("Codigo da Cor_Tecido","")
                                  RefreshDialog
        
                                  Moveto "PCFACrig"
        
                                  If PARAM_COR_TECIDO="S"
                                    Then Campo="I_Codigo_Cor_Tecido"
                                    Else Campo=Avancacampo("I_Qtd0")
                                  EndIf   
                             Else Campo="I_Codigo_Item"
                                  VSD_I_Codigo_Item   =""
                                  VSD_I_Descricao_Item=""
                                  VSD_I_UN_Item       =""
                                  VSD_I_CF_Item       =""
                                  VSD_I_CST_Item      =""
                                  VSD_I_Tipo_Item     =""
                          EndIf
                     Else KeyPress "ESC"
                          Mensagem("Referlncia n„o Cadastrada !")
                          VSD_I_Codigo_Item   =""
                          VSD_I_Descricao_Item=""
                          VSD_I_UN_Item       =""
                          VSD_I_CF_Item       =""
                          VSD_I_CST_Item      =""
                          VSD_I_Tipo_Item     =""
                  EndIf
                  Echo Off
            Case Campo="I_Codigo_Cor_Tecido":
                 VSD_I_Codigo_Cor_Tecido=AlinhM(ControlValue("I_Codigo_Cor_Tecido"),4)
                 If Not IsBlank(VSD_I_Codigo_Cor_Tecido)
                    Then If Checa_Opcoes("Codigo da Cor_Tecido",VSD_I_Codigo_Cor_Tecido)
                            Then Moveto "PCFACrig"
                                 [Codigo da Cor_Tecido]=VSD_I_Codigo_Cor_Tecido
                                 VSD_I_Descricao_Cor_Tecido=[Descricao da Cor_Tecido]

                                 Moveto [Codigo do Item]
                                 Ativa_Lookup()

                                 tpitemref="S"
                                 Moveto [Referencia]
                                 Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref, VSD_I_Codigo_Cor_Tecido
                                 If Not RetVal
                                    Then Mensagem("Referlncia n„o Cadastrada !")
                                         KeyPress "ESC" 
                                    Else VSD_I_Codigo_Item   =[Codigo do Item   ]
                                         KeyPress "ESC"
                                         [Codigo do Item       ]=VSD_I_Codigo_Item
                                         [Referencia           ]=VSD_I_REFERENCIA
                                         
                                         VERIFICA_GRADE_GETRECORD = True
                                         If Array_Monta_Grade("Valida")
                                            Then Registro_Item("Ler")
                                                 RefreshDialog
        
                                                 Moveto "PCFACrig"
                                                 Campo=Avancacampo("I_Qtd0")
                                            Else Campo="I_Codigo_Item"
                                                 VSD_I_Codigo_Cor_Tecido=""
                                                 VSD_I_Descricao_Cor_Tecido=""
                                                 VSD_I_Codigo_Item   =""
                                                 VSD_I_Descricao_Item=""
                                                 VSD_I_UN_Item       =""
                                                 VSD_I_CF_Item       =""
                                                 VSD_I_CST_Item      =""
                                                 VSD_I_Tipo_Item     =""   
                                         EndIf
                                 EndIf
                            Else Mensagem("Cor/Tecido n„o cadastrado para esta referencia !")
                                 VSD_I_Codigo_Cor_Tecido   =""
                                 VSD_I_Descricao_Cor_Tecido=""
                                 KeyPress "ESC"
                         EndIf
                 EndIf
                 Echo Off
            Case SubStr(Campo,1,5)="I_Qtd" : 
                 If Verifica_Corte(ControlValue(Campo))
                    Then Campo=AvancaCampo(Campo)
                 EndIf                  
             Case Campo="I_Custo_Unitario":
                  VSD_I_Custo_Unitario=ControlValue("I_Custo_Unitario")
                  If IsBlank(VSD_I_Custo_Unitario) Then VSD_I_Custo_Unitario = 0 EndIf
                  If VSD_I_Quantidade>0 
                     Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
                          Campo="I_Flag"
                     Else Mensagem("Quantidade tem que ser maior que 0")
                          Campo=VoltaCampo("I_Qtd13")
                  EndIf
             Case Campo="I_Flag"  : AcceptDialog
           EndSwitch
           Temp=False
   EndSwitch
EndIf
SelectControl Campo
TECLA=" Esc=Retornar  "
If Campo="I_Codigo_Item" Or
   Campo="I_Codigo_Cor_Tecido"
   Then TECLA=TECLA+"F1=Tabelas  "
EndIf
Switch
  Case Campo="I_Seq":
       MSGCAMPO="Sequencia"
  Case Campo="I_Codigo_Item":
       MSGCAMPO="Referlncia"
  Case SubStr(Campo,1,5)="I_Qtd" :
       MSGCAMPO="Quantidade ["+SubStr(Array_TM[NumVal( RTrim( SubStr(Campo,6,2) ) )],2,2)+"] "
  Case Campo="I_Custo_Unitario":
       MSGCAMPO="Custo Unitario"
  Case Campo="I_Custo_Total":
       MSGCAMPO="Custo Total"
  Case Campo="I_Codigo_Cor_Tecido":
       MSGCAMPO="Codigo da Cor"
  Case Campo="I_Flag":
       MSGCAMPO="[pausa]"
  OtherWise:
       MSGCAMPO=""
EndSwitch

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

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

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

;*******************************************************************************
;* Rotina para Verificar Corte                                                 *
;*******************************************************************************
Proc Verifica_Corte(PARAM)
Private PARAM,ACHOU_CORTE,MSG_CORTE,REG_GRADE,REG_ITEM,CORTE_REF,CORTE_SEQ

If Not PARAM_PROGRAMACAO_CORTE
   Then Return True
EndIf
                 
If PARAM>0
   Then CORTE_COR   = [Codigo da Cor_Tecido   ]
        CORTE_REF   = [Referencia             ] 
        CORTE_SEQ   = [Sequencia do Lancamento]
        ACHOU_CORTE = False
        MSG_CORTE   = "Item n„o localizado no corte "+[PCfacc->Numero_Programacao_Corte]
        GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM
        If RetVal
           Then GetRecord "\\Sistemas\\Estoque\\TpGrade" REG_ITEM["Codigo da Grade"] To REG_GRADE
                If RetVal 
                   Then MSG_CORTE = Completa("PROGRAMACAO DO CORTE: "+[PcFacc->Numero_Programacao_Corte]+Spaces(13)+"DATA: "+
                                             FormaT("D13",[PcFacc->Data_Producao]),57," ")+"////"+                  
                                    Completa("QUANTIDADE PROGRAMDA: ",57," ")+ "//" +  
                                    Completa("QUANTIDADE PRODUZIDA: "+Format("W10,AR",PARAM),57," ") + "// //" +
                                    Completa("N„o h  programa‡„o de corte para este item/tamanho.",57," ")
                   
                        TM       = ""
                        AUX_ITEM = ""
                        POS      = NumVal(SubStr(Campo,6,Len(Campo))) 
                        Switch
                          Case POS = 1  : TM = REG_GRADE["Codigo Item1"]
                          Case POS = 2  : TM = REG_GRADE["Codigo Item2"]
                          Case POS = 3  : TM = REG_GRADE["Codigo Item3"]
                          Case POS = 4  : TM = REG_GRADE["Codigo Item4"]
                          Case POS = 5  : TM = REG_GRADE["Codigo Item5"]
                          Case POS = 6  : TM = REG_GRADE["Codigo Item6"]
                          Case POS = 7  : TM = REG_GRADE["Codigo Item7"]
                          Case POS = 8  : TM = REG_GRADE["Codigo Item8"]
                          Case POS = 9  : TM = REG_GRADE["Codigo Item9"]
                          Case POS = 10 : TM = REG_GRADE["Codigo Item10"]
                          Case POS = 11 : TM = REG_GRADE["Codigo Item11"]
                          Case POS = 12 : TM = REG_GRADE["Codigo Item12"] 
                        EndSwitch
                        If TM <> ""
                           Then Switch
                                  Case Len(TM) = 1 : AUX_ITEM = SubStr([Codigo do Item],1,9) + StrVal(TM)
                                  Case Len(TM) = 2 : AUX_ITEM = SubStr([Codigo do Item],1,8) + StrVal(TM)
                                EndSwitch
                        EndIf
                        
                        If AUX_ITEM <> "" 
                           Then AUX_PROD = "" 
                                AUX_QTD  = 0
                                
                                ;Verifica se h  referˆncias lan‡adas em outras sequˆncias desta produ‡Æo
                                Home
                                Scan
                                  If CORTE_SEQ<>[Sequencia do Lancamento] And 
                                     CORTE_REF=[Referencia]               And
                                     CORTE_COR=[Codigo da Cor_Tecido]
                                     Then Moveto Field "Qtd"+StrVal(POS)
                                          If []>0
                                             Then AUX_QTD = AUX_QTD + []
                                                  AUX_PROD = [Numero_Producao_Corte]
                                          EndIf
                                  EndIf
                                EndScan
                                
                                Moveto [Sequencia do Lancamento]
                                Locate CORTE_SEQ                                
                                
                                For i From 1 To DynArraySize(DUPLICIDADE_PROG)
                                  PROD = SubStr(DUPLICIDADE_PROG[i],1,6)
                                  GetRecord "\\Sistemas\\Faccao\\PcFacri" PROD,AUX_ITEM To REG_PRODCORTE
                                  If RetVal
                                     Then GetRecord "\\Sistemas\\Faccao\\PcFacc" PROD To REG_CORTE
                                          If RetVal
                                             Then If REG_CORTE["Numero_Programacao_Corte"]=[PCfacc->Numero_Programacao_Corte]
                                                     Then AUX_QTD = AUX_QTD + REG_PRODCORTE["Quantidade Produzida"]
                                                          If AUX_PROD <> ""
                                                             Then AUX_PROD = AUX_PROD + ", " + PROD
                                                             Else AUX_PROD = PROD
                                                          EndIf     
                                                  EndIf
                                          EndIf
                                  EndIf   
                                  Release Vars REG_CORTE,REG_PRODCORTE,PROD
                                Endfor
                                      
                                GetRecord "\\Sistemas\\Faccao\\Cfacri" [PCfacc->Numero_Programacao_Corte],AUX_ITEM To REG_CORTE
                                If RetVal
                                   Then If ((AUX_QTD + PARAM) > REG_CORTE["Quantidade Programada"]) 
                                           Then MSG_CORTE =
          Completa("PROGRAMACAO DO CORTE: "+[PcFacc->Numero_Programacao_Corte]+Spaces(13)+"DATA: "+FormaT("D13",[PcFacc->Data_Producao]),57," ")+"////" +
          Completa("(=) "+Format("W6,AR",REG_CORTE["Quantidade Programada"])+" Programado",57," ")+ "//" +  
          Completa("(-) "+Format("W6,AR",NumVal(AUX_QTD))+" J  Produzido",57," ") + "//" +
          Completa("(=) "+Format("W6,AR",REG_CORTE["Quantidade Programada"]-NumVal(AUX_QTD))+" Dispon¡vel a Produzir",57," ") + "////" +
          Completa("Quantidade  informada ‚ maior que a quantidade dispon¡vel",57," ") + "//" +
          Completa("a produzir.",57," ")           
                                                If Not PARAM_PRODUCAO_CORTE_LIBERADA
                                                   Then MSG_CORTE = MSG_CORTE + "//" + 
                                                                    Completa("Verificar a quantidade da programa‡„o/produ‡”es do corte!",57," ")
                                                EndIf
                                                AUX_LEN = Int(Len(AUX_PROD) / 55) + 1
                                                Switch
                                                  Case AUX_QTD=0   : 
                                                  Case AUX_LEN > 1 : MSG_CORTE = MSG_CORTE + "// //" + 
                                                                     Completa("Produ‡”es do corte: ",57," ") + "//" 
                                                                     For i From 1 To AUX_LEN
                                                                       CONT = (55 * (i-1)) + 1
                                                                       MSG_CORTE = MSG_CORTE + Completa(SubStr(AUX_LEN,CONT,55),57," ")
                                                                       If i <> AUX_LEN
                                                                          Then MSG_CORTE = MSG_CORTE + "//"
                                                                       EndIF   
                                                                     EndFor 
                                                  Case AUX_LEN = 1 : MSG_CORTE = MSG_CORTE + "// //" +
                                                                     Completa("Produ‡„o do corte: ",57," ") + "//" +
                                                                     Completa(AUX_PROD,57," ")   
                                                EndSwitch
                                                
                                                If PARAM_PRODUCAO_CORTE_LIBERADA
                                                   Then MSG_CORTE = MSG_CORTE + "//"
                                                        MSG_CORTE = MSG_CORTE + Completa("Deseja continuar assim mesmo?",57," ")
                                                        ConfGeral(MSG_CORTE)
                                                        If OK="S"
                                                           Then ACHOU_CORTE = True
                                                           Else MSG_CORTE   = ""
                                                        EndIf
                                                EndIF   
                                           Else ACHOU_CORTE = True
                                        EndIf
                                EndIf
                        EndIf              
                EndIf
        EndIF
        If Not ACHOU_CORTE
           Then If MSG_CORTE<>"" Then Mensagem(MSG_CORTE) EndIf
                Return False          
           Else Return True
        EndIf
   Else Return True      
EndIf  
      
EndProc

;*******************************************************************************
;* Rotina para AvancaCampo                                                      *
;*******************************************************************************
Proc AvancaCampo(Campo)
VSD_I_Qtd1 =ControlValue("I_Qtd1")
VSD_I_Qtd2 =ControlValue("I_Qtd2")
VSD_I_Qtd3 =ControlValue("I_Qtd3")
VSD_I_Qtd4 =ControlValue("I_Qtd4")
VSD_I_Qtd5 =ControlValue("I_Qtd5")
VSD_I_Qtd6 =ControlValue("I_Qtd6")
VSD_I_Qtd7 =ControlValue("I_Qtd7")
VSD_I_Qtd8 =ControlValue("I_Qtd8")
VSD_I_Qtd9 =ControlValue("I_Qtd9")
VSD_I_Qtd10=ControlValue("I_Qtd10")
VSD_I_Qtd11=ControlValue("I_Qtd11")
VSD_I_Qtd12=ControlValue("I_Qtd12")

VSD_I_Quantidade=VSD_I_QTD1+VSD_I_QTD2+VSD_I_QTD3+VSD_I_QTD4+
                 VSD_I_QTD5+VSD_I_QTD6+VSD_I_QTD7+VSD_I_QTD8+
                 VSD_I_QTD9+VSD_I_QTD10+VSD_I_QTD11+VSD_I_QTD12
[Quantidade Produzida ]=VSD_I_Quantidade
If VSD_I_Quantidade>0 and VSD_I_Custo_Unitario>0
   Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
EndIf
indice=NumVal(RTrim(SubStr(Campo,6,2)))
For i From indice To 12
  If (i+1)=13
     Then Campo="I_Custo_Unitario"
          QuitLoop
     Else If (i+1) > NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i+1],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i+1)
                  QuitLoop
          EndIf

  EndIf
EndFor

Return Campo
EndProc

;*******************************************************************************
;* Rotina para VoltaCampo                                                      *
;*******************************************************************************
Proc VoltaCampo(Campo)
For i From 12 to 0 Step -1
  If i=0
     Then If CHAVEI=1
             Then Campo="I_Codigo_Item"
                  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_Modelo_Item   =""
                  VSD_I_Codigo_Cor_Tecido   =""
                  VSD_I_Descricao_Cor_Tecido=""
             Else CHAVEI=9
                  CopyFromArray RegItem
                  CancelDialog
          EndIf
          QuitLoop
     Else If i < NumVal(SubStr(Campo,6,2)) And
             SubStr(Array_TM[i],1,1)="T"
             Then Campo=SubStr(Campo,1,5)+StrVal(i)
                  QuitLoop
          EndIf
  EndIf
EndFor

If Campo="I_Qtd13" Then Campo="I_Custo_Unitario" EndIf

Return Campo
EndProc

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

Echo Normal
Echo Off

Registro_Item("Ler")
Array_Monta_Grade("Valida")

EndProc ; (Inicia_Registro)

;*******************************************************************************
;* Rotina para Digitacao Item                                                  *
;*******************************************************************************
Proc DIGITAI()
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 10 width 78

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

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

   Label  @ 02,02 "Cor/Tecido" For "I_Codigo_Cor_Tecido"
   Accept @ 03,07 Width 07 "A4" picture "!*!" Tag "I_Codigo_Cor_Tecido" to VSD_I_Codigo_Cor_Tecido
   Label  @ 02,15 "Descricao Cor/Tecido" For "I_Descricao_Cor_Tecido"
   Accept @ 03,15 Width 22 "A20" picture "!*!" Tag "I_Descricao_Cor_Tecido" to VSD_I_Descricao_Cor_Tecido

   @ 04,01 ?? "Prog"
   @ 04,06 ?? SubStr(Array_TM[1],2,2)
   @ 04,11 ?? SubStr(Array_TM[2],2,2)
   @ 04,16 ?? SubStr(Array_TM[3],2,2)
   @ 04,21 ?? SubStr(Array_TM[4],2,2)
   @ 04,26 ?? SubStr(Array_TM[5],2,2)
   @ 04,31 ?? SubStr(Array_TM[6],2,2)
   @ 04,36 ?? SubStr(Array_TM[7],2,2)
   @ 04,41 ?? SubStr(Array_TM[8],2,2)
   @ 04,46 ?? SubStr(Array_TM[9],2,2)
   @ 04,51 ?? SubStr(Array_TM[10],2,2)
   @ 04,56 ?? SubStr(Array_TM[11],2,2)
   @ 04,61 ?? SubStr(Array_TM[12],2,2)

   Accept @ 05,05 Width 05 "S" Tag "I_Qtd1"  to VSD_I_Qtd1
   Accept @ 05,10 Width 05 "S" Tag "I_Qtd2"  to VSD_I_Qtd2
   Accept @ 05,15 Width 05 "S" Tag "I_Qtd3"  to VSD_I_Qtd3
   Accept @ 05,20 Width 05 "S" Tag "I_Qtd4"  to VSD_I_Qtd4
   Accept @ 05,25 Width 05 "S" Tag "I_Qtd5"  to VSD_I_Qtd5
   Accept @ 05,30 Width 05 "S" Tag "I_Qtd6"  to VSD_I_Qtd6
   Accept @ 05,35 Width 05 "S" Tag "I_Qtd7"  to VSD_I_Qtd7
   Accept @ 05,40 Width 05 "S" Tag "I_Qtd8"  to VSD_I_Qtd8
   Accept @ 05,45 Width 05 "S" Tag "I_Qtd9"  to VSD_I_Qtd9
   Accept @ 05,50 Width 05 "S" Tag "I_Qtd10" to VSD_I_Qtd10
   Accept @ 05,55 Width 05 "S" Tag "I_Qtd11" to VSD_I_Qtd11
   Accept @ 05,60 Width 05 "S" Tag "I_Qtd12" to VSD_I_Qtd12


   Label  @ 04,69 "Total" For "I_Quantidade"
   Accept @ 05,66 Width 09 "N" picture "#*#.[###]" Tag "I_Quantidade" to VSD_I_Quantidade

   Label  @ 06,00 "UN" For "I_UN_Item"
   Accept @ 07,01 Width 05 "A2" picture "!*!" Tag "I_UN_Item" to VSD_I_UN_Item
              
   Label  @ 06,07 "Ct.Unitario" For "I_Custo_Unitario"
   Accept @ 07,07 Width 12 "N" picture "#*#.[#####]" Tag "I_Custo_Unitario" to VSD_I_Custo_Unitario
   Label  @ 06,20 "Ct.Total" For "I_Custo_Total"
   Accept @ 07,20 Width 12 "$" picture "#*#.[##]" Tag "I_Custo_Total" to VSD_I_Custo_Total

   Accept @ 07,43 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 Finalizar o Registro                                            *
;*******************************************************************************
Proc Finaliza_Registro(ok)
Private ok
If Ok
   Then Registro_Item("Gravar")
   Else If CHAVEI=8
           Then CopyFromArray RegItem
                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

       [Qtd1                      ]=VSD_I_Qtd1
       [Qtd2                      ]=VSD_I_Qtd2
       [Qtd3                      ]=VSD_I_Qtd3
       [Qtd4                      ]=VSD_I_Qtd4
       [Qtd5                      ]=VSD_I_Qtd5
       [Qtd6                      ]=VSD_I_Qtd6
       [Qtd7                      ]=VSD_I_Qtd7
       [Qtd8                      ]=VSD_I_Qtd8
       [Qtd9                      ]=VSD_I_Qtd9
       [Qtd10                     ]=VSD_I_Qtd10
       [Qtd11                     ]=VSD_I_Qtd11
       [Qtd12                     ]=VSD_I_Qtd12

       [Quantidade Produzida ]=VSD_I_Quantidade
       [Unidade Interna      ]=VSD_I_UN_Item
       [Custo Unitario       ]=VSD_I_Custo_Unitario
       [Preco Total          ]=Round(VSD_I_Custo_Total,2)

       [Referencia                ]=VSD_I_Referencia

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

  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]
       If CHAVEI=1
          Then VSD_I_Descricao_Item=TiraTamanhoDescricaoItem(VSD_I_Descricao_Item)
       EndIf
       VSD_I_Qtd1                   =[Qtd1                      ]
       VSD_I_Qtd2                   =[Qtd2                      ]
       VSD_I_Qtd3                   =[Qtd3                      ]
       VSD_I_Qtd4                   =[Qtd4                      ]
       VSD_I_Qtd5                   =[Qtd5                      ]
       VSD_I_Qtd6                   =[Qtd6                      ]
       VSD_I_Qtd7                   =[Qtd7                      ]
       VSD_I_Qtd8                   =[Qtd8                      ]
       VSD_I_Qtd9                   =[Qtd9                      ]
       VSD_I_Qtd10                  =[Qtd10                     ]
       VSD_I_Qtd11                  =[Qtd11                     ]
       VSD_I_Qtd12                  =[Qtd12                     ]

       VSD_I_Quantidade             =[Quantidade Produzida      ]
       VSD_I_UN_Item                =[Unidade Interna           ]
       VSD_I_Custo_Unitario         =[Custo Unitario            ]
       VSD_I_Custo_Total            =Round([Preco Total               ],2)

       VSD_I_Referencia             =[Referencia                ]

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

EndSwitch

EndProc  ; (Registro_Item)

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

If Not Isassigned(GRAVA_LOG) Then GRAVA_LOG=False EndIf

Switch
Case TIPO="Cabeca":
     Moveto "PCFACri"
     Moveto [Numero_Producao_Corte]
     Locate [PCFACc->Numero_Producao_Corte]
     If RetVal
        Then While [Numero_Producao_Corte]=[PCFACc->Numero_Producao_Corte]
               Del
             EndWhile
     EndIf

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

     Moveto "PCFACC"
     If Not IsBlank([PCFACC->Codigo da Empresa])
        Then Titulos("Excluir")
             Requisicao("Exclusao","")
     EndIf
     If GRAVA_LOG Then Grava_LogEx("PCfac") EndIf
     Del
Case TIPO="Item":
     Moveto "PCFACrig"
     Del
EndSwitch
EndProc  ; (Exclusao)

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

ntab=table()

Moveto "PCFACRIG"
If RecordStatus("New")
   Then MENSAGEM("Sem Itens p/ imprimir !")
        Moveto ntab
        Return False
EndIf
Moveto ntab

Echo Normal
Echo Off
ShowPopup " Imprimir " CENTERED
   "~P~osi‡„o  " : " Imprimir Posi‡„o da Programa‡„o p/ Conferencia       "   :"Program02",
   "~D~ocumento" : " Imprimir Documento de Entrada Produ‡„o, Retorno Corte"   :"Program01",
   "~C~ancelar"  : " Cancelar                  "   :"CANCELAR"
EndMenu
To Opcaoc

Echo off

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

Gera_PCFACri()
Switch
  Case CHAVEC=1: Titulos("Incluir")
  Case CHAVEC=0: Titulos("Alterar")
EndSwitch
Requisicao("Inclusao","")

NPROD  =[PCFACC->Numero_Producao_Corte   ]
DESTINO=[PCFACC->Destino_Producao  ]
NPROG  =[PCFACC->Numero_Programacao_Corte]
UnLockRecord
Do_It!

Dispositivo()
If OK=""
   Then CoEditKey
        Moveto [Numero_Producao_Corte]
        Locate NPROD
        Return False
EndIf

gerou_pcfacri=True
LoopdoDispositivo=False

Switch
  Case Opcaoc="Program01": PLAY PARAM_RELATORIO
  Case Opcaoc="Program02": PLAY PARAM_RELATSALDO
EndSwitch

Carrega_Tabelas("2")
Moveto [Numero_Producao_Corte]
Locate NPROD

Return True

EndProc

;*******************************************************************************
;* Rotina Pega Itens da Programacao                                            *
;*******************************************************************************
Proc PegaItens_Programacao()
If IsBlank([PCFACC->Numero_Programacao_Corte]) Or CHAVEC=0
   Then Mensagem("Fun‡„o n„o permitida !")
        Return
EndIf

NPROG=[PCFACC->Numero_Programacao_Corte]
TabAnt = Table()
Cont = 0

;Faz uma verifica‡Æo da cor_tecido dos itens antes de realizar a adi‡Æo destes itens
DynArray ITEM_ERRO[]
CONT_ITEM_ERRO = 0
 
Moveto "CFACRIG"
Moveto [Numero_Corte]
Locate NPROG
If Not RetVal
   Then Mensagem("Itens da Programa‡„o n„o localizado !")
        Moveto TabAnt
        Return False
   Else While [Numero_Corte]=NPROG
          
          GetRecord "\\Sistemas\\Estoque\\Itens" [Codigo do Item] To REG_ITEM 
          If Not RetVal
             Then CONT_ITEM_ERRO = CONT_ITEM_ERRO + 1
                  ITEM_ERRO[CONT_ITEM_ERRO] = REG_ITEM["Codigo do Item"] + " " + "ITEM NAO LOCALIZADO NO CADASTRO DE ITEM"  
          EndIf
          
          If REG_ITEM["Codigo da Cor_Tecido"]<>[Codigo da Cor_Tecido] 
             Then CONT_ITEM_ERRO = CONT_ITEM_ERRO + 1
                  ITEM_ERRO[CONT_ITEM_ERRO] = REG_ITEM["Codigo do Item"] + " " + 
"Codigo da cor tecido "+[Codigo da Cor_Tecido]+" deste item difere da cor do tecido "+REG_ITEM["Codigo da Cor_Tecido"]+" localizado no cadastro de itens."
                                                 
          EndIf
          
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile     
EndIf

If DynArraySize(ITEM_ERRO) > 0
   Then CONT_LINHA = 0  
        For i From 1 To DynArraySize(ITEM_ERRO) 
          If i = 1
             Then ARQIMP=PrivDir()+"TEMP_ARQ.Txt"
                  If IsFile(ARQIMP)
                     Then Deleta_Arquivo(ARQIMP)                                                 
                  EndIf
          EndIf
          If CONT_LINHA = 0
             Then Print File ARQIMP Chr(27)+Chr(120)+Chr(48)+Chr(15)
                  Print File ARQIMP "\n\n"
                  Print File ARQIMP Spaces(2)+Fill("-",132) + "\n"
                  Print File ARQIMP Spaces(2)+Format("W132,AC","ITEM(NS) COM INCONSISTÒNCIA DE DADOS") + "\n"
                  Print File ARQIMP Spaces(2)+Fill("-",132) + "\n\n"
Print File ARQIMP Spaces(2)+"Item       Inconsistencia"+"\n"
Print File ARQIMP Spaces(2)+"---------- -------------------------------------------------------------------------------------------------------------------------"+"\n"
                  CONT_LINHA = CONT_LINHA + 8
          EndIf
          CONT_LINHA = CONT_LINHA + 1
          Print File ARQIMP Spaces(2)+ITEM_ERRO[i] + "\n"
          If CONT_LINHA >=60
             Then CONT_LINHA = 0
          EndIf    
        EnDFor 
        PDFZEBRA=False
        DISPOSITIVO_OPCAO="V"
        Mensagem("Ser  exibido um relat¢rio com inconsistˆncia nos itens.")
        ImpriArq(ARQIMP)
        
        ConfGeral("Deseja continuar o processo?")
        If Ok<>"S"
           Then Moveto "PCFACRIG"
                Return False 
        EndIF
EndIf         

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

Moveto "CFACRIG"
Moveto [Numero_Corte]
Locate NPROG
If RetVal
   Then While [Numero_Corte]=NPROG
          CopyToArray REGISTRO_F1

          REGISTRO_F1["Numero_Corte"         ]=NPROD

          Moveto "PCFACRIG"
          End
          Down
          CopyFromArray REGISTRO_F1
          UnLockRecord

          Moveto "CFACRIG"
          Skip
          If EOT() Then QuitLoop EndIf

        EndWhile     
EndIf

If Not Verifica_Duplicidade()
   Then Mensagem("Ocorreu erro no processo de atualiza‡Æo do corte!//Verificar com o Suporte Vise!")
        Return False
EndIf
        
TAB_ANT = Table()
        
CONT_PRODUZIDO = 0
DynArray ARRAY_PRODUZIDO[]
Moveto "PcFacrig" Home
Scan
  If [Quantidade Produzida] > 0
     Then CONT_PRODUZIDO = CONT_PRODUZIDO + 1
          ARRAY_PRODUZIDO[CONT_PRODUZIDO] = Format("W10",[Codigo do Item])+Format("W12",[Quantidade Produzida])
  EndIf
EndScan

FAZ_ROTINA_PARCIAL=True
While FAZ_ROTINA_PARCIAL
  GetRecord "\\Sistemas\\Faccao\\PcFacc" PROD To REG_PRODUCAO
  If RetVal
     Then CONT_DUPLICIDADE  = 0
          For i From 1 To DynArraySize(DUPLICIDADE_PROG)
            PROD = SubStr(DUPLICIDADE_PROG[i],1,6) 
            CONT_DUPLICIDADE = CONT_DUPLICIDADE + 1     
          Endfor
                     
          If CONT_DUPLICIDADE = 0 And DynArraySize(DUPLICIDADE_PROG)>0
             Then Mensagem("As programa‡”es do corte j  foram inclu¡das //neste processo anteriormente !")
                  FAZ_ROTINA_PARCIAL = False
                  QuitLoop
          EndIf   
     Else FAZ_ROTINA_PARCIAL = False
          QuitLoop                
  EndIf

  IF DynArraySize(DUPLICIDADE_PROG)>0
     Then ConfGeral(MSG_PROG+"//Deseja atualizar o saldo desta programa‡„o/corte ?")
          If Ok<>"S"
             Then Moveto "Pcfacrig"    
                  While RecordStatus("New")=False
                    Del
                  EndWhile
                  Return False
          EndIf
  EndIf
        
  For ai From 1 To DynArraySize(DUPLICIDADE_PROG)
    PROD = SubStr(DUPLICIDADE_PROG[ai],1,6)
    DATA = DateVal(SubStr(DUPLICIDADE_PROG[ai],7,2)+"."+SubStr(DUPLICIDADE_PROG[ai],10,2)+"."+SubStr(DUPLICIDADE_PROG[ai],13,4))
     
    GetRecord "\\Sistemas\\Faccao\\PcFacc" PROD To REG_PRODUCAO
    If Not RetVal
       Then UnLockRecord
            Moveto "PcFacc"
            Loop  
    EndIf  
    
    CONT_ITEM = 0
    DynArray ITEM[]
    
    FormKey
    CONT_AUX = "0"
    Moveto "PcFacri"
    Moveto [Numero_Producao_Corte]
    Locate PROD
    If RetVal
       Then CONT_AUX = "1"
    EndIf
    
    If CONT_AUX = "0"
      Then Moveto "PcFacc"
           FormKey
           Mensagem("N„o foi localizado os itens da producao "+PROD+" !")
           Loop
    EndIf
    
    While PROD = [Numero_Producao_Corte]
      If [Quantidade Produzida] > 0
         Then CONT_ITEM = CONT_ITEM + 1
              ITEM[CONT_ITEM] = Format("W6",[Numero_Producao_Corte])+Format("W10",[Codigo do Item])+Format("W8",[Referencia])+Format("W12",[Quantidade Produzida])
      EndIf
      Skip
      If Eot() Then QuitLoop EndIf  
    EndWhile
    
    Moveto "PcFacc"
    FormKey
    Moveto "Pcfacrig"
    
    For aii From 1 To DynArraySize(ITEM)      
      ITEM_PRD = SubStr(ITEM[aii],1,6)
      ITEM_COD = SubStr(ITEM[aii],7,10)
      ITEM_REF = Rtrim(SubStr(ITEM[aii],17,8))
      ITEM_QTD = Rtrim(Ltrim(SubStr(ITEM[aii],25,12)))
      
      If Type(NumVal(ITEM_QTD)) <> "N" Or ITEM_QTD = "" Or NumVal(ITEM_QTD) <= 0 Or NumVal(ITEM_QTD)=BlankNum()
         Then Loop
      EndIf   
      
      GetRecord "\\Sistemas\\Estoque\\Itens" ITEM_COD To REG_ITEM 
      If Not RetVal
         Then Mensagem("ITEM: "+ITEM_COD+" n„o localizado no cadastro de itens !")
              Loop
      EndIf
      
      GetRecord "\\Sistemas\\Estoque\\Tpgrade" REG_ITEM["Codigo da Grade"] To REG_GRADE
      If Not RetVal
         Then Mensagem("ITEM: "+ITEM_COD+" n„o foi localizado no cadastro de grade !")
              Loop     
      EndIf
      
      Moveto "Pcfacrig" Home
      Scan
        If REG_ITEM["Referencia"] <> [Referencia] Or
           REG_ITEM["Codigo da Cor_Tecido"] <> [Codigo da Cor_Tecido] 
           Then Loop 
        EndIf
        TM = Rtrim(SubStr(REG_ITEM["Descricao do Item"],29,2))
        If TM = "" 
           Then Mensagem("ITEM: "+ITEM_COD+" sem tamanho definido em sua descri‡„o !")
                Loop
        EndIf
            
        ACHOU_GRADE = False   
        For Grade From 1 To 12
          If (Grade = 1  And REG_GRADE["Titulo Grade1"]  = TM) Or  
             (Grade = 2  And REG_GRADE["Titulo Grade2"]  = TM) Or             
             (Grade = 3  And REG_GRADE["Titulo Grade3"]  = TM) Or             
             (Grade = 4  And REG_GRADE["Titulo Grade4"]  = TM) Or  
             (Grade = 5  And REG_GRADE["Titulo Grade5"]  = TM) Or  
             (Grade = 6  And REG_GRADE["Titulo Grade6"]  = TM) Or  
             (Grade = 7  And REG_GRADE["Titulo Grade7"]  = TM) Or  
             (Grade = 8  And REG_GRADE["Titulo Grade8"]  = TM) Or  
             (Grade = 9  And REG_GRADE["Titulo Grade9"]  = TM) Or  
             (Grade = 10 And REG_GRADE["Titulo Grade10"] = TM) Or  
             (Grade = 11 And REG_GRADE["Titulo Grade11"] = TM) Or  
             (Grade = 12 And REG_GRADE["Titulo Grade12"] = TM) 
             Then ACHOU_GRADE = True         
          EndIf
          If ACHOU_GRADE
             Then Moveto Field "Qtd"+StrVal(Grade)
                  [] = [] - NumVal(ITEM_QTD)
                  
                  [Quantidade Produzida] = [Quantidade Produzida]-NumVal(ITEM_QTD)
                  [Preco Total         ] = [Quantidade Produzida]*[Custo Unitario]
                  
                  If [] = 0 Then [] = BlankNum() EndIf
                  UnLockRecord
                  QuitLoop
          EndIf
        EndFor
        
        CopyToArray REG_VERIFICA
        If (REG_VERIFICA["Qtd1"]  = 0 Or REG_VERIFICA["Qtd1"]  = BlankNum()) And
           (REG_VERIFICA["Qtd2"]  = 0 Or REG_VERIFICA["Qtd2"]  = BlankNum()) And
           (REG_VERIFICA["Qtd3"]  = 0 Or REG_VERIFICA["Qtd3"]  = BlankNum()) And
           (REG_VERIFICA["Qtd4"]  = 0 Or REG_VERIFICA["Qtd4"]  = BlankNum()) And
           (REG_VERIFICA["Qtd5"]  = 0 Or REG_VERIFICA["Qtd5"]  = BlankNum()) And
           (REG_VERIFICA["Qtd6"]  = 0 Or REG_VERIFICA["Qtd6"]  = BlankNum()) And
           (REG_VERIFICA["Qtd7"]  = 0 Or REG_VERIFICA["Qtd7"]  = BlankNum()) And
           (REG_VERIFICA["Qtd8"]  = 0 Or REG_VERIFICA["Qtd8"]  = BlankNum()) And 
           (REG_VERIFICA["Qtd9"]  = 0 Or REG_VERIFICA["Qtd9"]  = BlankNum()) And 
           (REG_VERIFICA["Qtd10"] = 0 Or REG_VERIFICA["Qtd11"] = BlankNum()) And 
           (REG_VERIFICA["Qtd11"] = 0 Or REG_VERIFICA["Qtd10"] = BlankNum()) And 
           (REG_VERIFICA["Qtd12"] = 0 Or REG_VERIFICA["Qtd12"] = BlankNum()) 
           Then Del
                UnLockRecord
        EndIf
        QuitLoop
      EndScan
    EndFor
  Endfor
  Moveto "Pcfacrig"
  If [Codigo do Item]=""
     Then Del
  EndIf   
  QuitLoop
EndWhile   

If RecordStatus("New")
   Then MSG =     Completa("PROGRAMACAO DO CORTE: "+[Pcfacc->Numero_Programacao_Corte]+"   DATA: "+FormaT("D13",[Pcfacc->Data_Producao]),61," ")+"////"
        MSG = MSG+Completa("J  teve o seu saldo finalizado em lan‡amento(s) anterior(es)!",61," ")
        Mensagem(MSG)
        Return False    
   Else ;If CONT_PRODUZIDO > 0
        ;   Then Moveto "PcFacrig"
        ;        For ot From 1 To CONT_PRODUZIDO
        ;          COD_ITEM = Substr(ARRAY_PRODUZIDO[ot],1,10)
        ;          QTD_PROD = NumVal(Substr(ARRAY_PRODUZIDO[ot],11,12))
        ;          Moveto [Codigo do Item] 
        ;          Locate Pattern ".."+SubStr(COD_ITEM,3,8)
        ;          If Retval
        ;             Then [Quantidade Produzida ] = QTD_PROD
        ;                  UnLockRecord
        ;          EndIf        
        ;          Home
        ;        EndFor
        ;EndIf   
        ;Moveto TAB_ANT     
EndIf   
             
Return True     
Moveto "PCFACRIG"

EndProc

;*******************************************************************************
;* Rotina para Digitacao das Quantidades                                       *
;*******************************************************************************
Proc Editar(Opcao)
Private Opcao

Moveto [Qtd1]

While True

   Prompt " Esc=Retornar  Ctrl+Z=Pesquisar  Alt+Z=Pr¢ximo"

   Switch
     Case SubStr(Field(),1,3)="Qtd"     : ImageRights
   ;;Case Field()="Preco Unitario"      : ImageRights
     OtherWise                          : ImageRights ReadOnly
   EndSwitch

   Wait Field
     Until "F35","ESC","ENTER","DOWN","UP","FIELDVIEW","ZOOM","ZOOMNEXT","LEFT","RIGHT","HOME","END"

      Switch
      Case RetVal="ZOOM":
           PESQUISA()
      Case RetVal="ZOOMNEXT":
           PESQUISACON()
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If QuerExcluir("")
              Then ImageRights
                   Del
                   ImageRights ReadOnly
           EndIf
      OtherWise:
           Tecla_Press=RetVal
           If Retval="ESC"
              Then If RecordStatus("Modified")
                      Then Atualiza()
                   EndIf
                   QuitLoop
              Else If RecordStatus("Modified")
                      Then Atualiza()
                   EndIf
           EndIf
           If SubStr(Field(),1,3)="Qtd" and Tecla_Press="ENTER"
              Then Retval="RIGHT"
           EndIf

           Switch
             Case RetVal="LEFT"  And Field()="Qtd1"  : Moveto [Qtd12]
             Case RetVal="RIGHT" And Field()="Qtd12" : Moveto [Qtd1]
             OtherWise : KeyPress Tecla_Press
           EndSwitch

           If RecordStatus("New")
              Then Del
           EndIf
      EndSwitch
EndWhile

ImageRights
EndProc

;*******************************************************************************
;* Atualiza Dados na Programacao                                               *
;*******************************************************************************
Proc Atualiza()
Private ITEM 

ITEM = [Sequencia do Lancamento]

[Quantidade Produzida] = [Qtd1 ]+[Qtd2 ]+[Qtd3 ]+[Qtd4 ]+[Qtd5 ]+[Qtd6 ]+
                         [Qtd7 ]+[Qtd8 ]+[Qtd9 ]+[Qtd10]+[Qtd11]+[Qtd12]
[Preco Total         ] = NDecimal([Quantidade Produzida ]*[Custo Unitario],2)
UnLockRecord

SomatoriaDosItens()
               
Moveto [Sequencia do Lancamento]
Locate ITEM

EndProc

;*******************************************************************************
;* Rotina Gera Tabela PCFACrig                                                  *
;*******************************************************************************
Proc Gera_PCFACri()
Private codite

Aguarde("Convertendo produ‡„o modo padr„o")
Moveto "PCFACri"
Moveto [Numero_Producao_Corte]
Locate [PCFACc->Numero_Producao_Corte]
If RetVal
   Then While [Numero_Producao_Corte]=[PCFACc->Numero_Producao_Corte]
          Del
        EndWhile
EndIf

refant="****"

Seq=0
Moveto "PCFACrig"
NR = NIMAGERECORDS()
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo produ‡„o modo padr„o "+BARRA_STRING)

  CopyToArray RegRq
	If RegRq["Referencia"]<>refant
	   Then Array_Monta_Grade("")
	        refant=[Referencia]
	EndIf        

  For ic From 1 to 12
    Qtd=0
    TM=RTrim(SubStr(Array_TM[ic],4,2))
    Switch
      Case ic=1:  Qtd=RegRq["Qtd1"]  
      Case ic=2:  Qtd=RegRq["Qtd2"]  
      Case ic=3:  Qtd=RegRq["Qtd3"]  
      Case ic=4:  Qtd=RegRq["Qtd4"]  
      Case ic=5:  Qtd=RegRq["Qtd5"]  
      Case ic=6:  Qtd=RegRq["Qtd6"]  
      Case ic=7:  Qtd=RegRq["Qtd7"]  
      Case ic=8:  Qtd=RegRq["Qtd8"]  
      Case ic=9:  Qtd=RegRq["Qtd9"]  
      Case ic=10: Qtd=RegRq["Qtd10"] 
      Case ic=11: Qtd=RegRq["Qtd11"] 
      Case ic=12: Qtd=RegRq["Qtd12"] 
    EndSwitch

    If Qtd>0
       Then If Len(TM)=1
               Then codite=SubStr(RegRq["Codigo do Item"],1,9)+TM
               Else codite=SubStr(RegRq["Codigo do Item"],1,8)+TM
            EndIf

            Moveto "PCFACri"
            Moveto [Numero_Producao_Corte]
            Locate RegRq["Numero_Producao_Corte"],codite
            If Not RetVal
               Then End Down
                    Seq=Seq+1
                    [Numero_Producao_Corte          ]=RegRq["Numero_Producao_Corte"]
                    [Codigo do Item           ]=codite
                    [Lookup_Itens             ]=[Codigo do Item]
            EndIf
            [Quantidade Produzida     ]=[Quantidade Produzida     ]+Qtd
            [Custo Unitario           ]=RegRq["Custo Unitario"]
            [Preco Unitario Tabela    ]=RegRq["Preco Unitario Tabela"]
            [Codigo da Tabela         ]=RegRq["Codigo da Tabela"]

            If [Quantidade Produzida ]>0
               Then [Preco Total]=[Quantidade Produzida ]*[Custo Unitario]
            EndIf

            Moveto "PCFACri"
            UnlockRecord
    EndIf
  EndFor

  Moveto "PCFACrig"
EndScan
CHAVEF=8
LimpAguarde()
EndProc

;*******************************************************************************
;** Inclusao, Alteracao de Titulos Contas a Pagar                             **
;*******************************************************************************
Proc TITULOS(Tipo)
Private SEQ,Tipo,DESTINO

DESTINO=[PCFACC->Destino_Producao      ]
If PARAM_ATUA_CAPG<>"S" Or DESTINO="INTERNO" Or [PcFacc->Codigo]="0001"
   Then Return
EndIf

Moveto "PCFACC"
UnLockRecord
FormKey

Oktit=True
Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([PCFACC->Numero Lancamento Titulos])
    Then If (Tipo="Incluir" or Tipo="Alterar")
            Then Tipo="Incluir"
                 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 Oktit=False
         EndIf
    Else
         Locate [PCFACC->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[PCFACC->Numero Lancamento Titulos]+" no Contas a Pagar 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  efefuado !"
                 Mensagem(MSG)
                 oktit=False
            Else
                 Switch
                   Case DESTINO="EXTERNO" And [Sistema Gerador]<>"PC": oktit=False
                   Case [Lancamento Gerador    ]<>[PCFACC->Numero_Producao_Corte]: oktit=False
                   Case [Documento Referente   ]<>(SubStr(DESTINO,1,6)+"/"+[PCFACC->Numero_Producao_Corte]): oktit=False
                 EndSwitch

                 If Not OkTit
                    Then MSG="O lan‡amento "+[PCFACC->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                         MSG=MSG+"n„o corresponde a esta Produ‡„o ["+StrVal([PCFACC->Numero_Producao_Corte])+"] !// //"
                         MSG=MSG+"Verifique no Contas a Pagar o lan‡amento corresponente e//"
                         MSG=MSG+"se talvez o mes n„o foi fechado !// //"
                         MSG=MSG+"Neste caso o estorno ou altera‡„o no Contas a Pagar n„o ser  efefuado !//"
                         MSG=MSG+"Talvez algum outro erro gerou este problema !"
                         Mensagem(MSG)
                 EndIf
         EndIf
EndIf

If OkTit And (Tipo="Excluir" or Tipo="Alterar")
   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: "+
                    [PCFACC->Codigo da Empresa]+" / "+
                    SubStr(DESTINO,1,6)+" / "+
                    [PCFACC->Numero_Producao_Corte]+"//"
                MSG=MSG+"n„o ser  efetuado, pois o T¡tulo j  teve baixa ! // //"
                MSG=MSG+"Verificar !"
                Mensagem(MSG)
           Else If Tipo="Excluir"
                   Then Del
                EndIf
        EndIf
EndIf

If OkTit And (Tipo="Incluir" or Tipo="Alterar")
   Then
        Switch
          Case Tipo="Incluir":
               [Codigo do Documento ]="REC"
               [Numero do Documento ]=[PCFACC->Numero_Producao_Corte]
               [Codigo do Emitente  ]=[PCFACC->Codigo              ]
               [Tipo do Lancamento  ]="C"
               [Data de Entrada     ]=[PCFACC->Data_Producao       ]
               [Data de Emissao     ]=[PCFACC->Data_Producao       ]
               [Data de Vencimento  ]=[PCFACC->Data de Vencimento  ]
               [Data a Pagar        ]=[PCFACC->Data de Vencimento  ]
               [Valor do Documento  ]=[PCFACC->Valor Total         ]
               [Saldo do Documento  ]=[PCFACC->Valor Total         ]
              ;[Taxa de Juros       ]=""
              ;[Tipo Taxa de Juros  ]=""
              ;[NDias Taxa de Juros ]=""
               [Tipo do Pagamento   ]="DN"
              ;[Observacoes         ]=""
               Controle_Dia()

               Switch
                 Case SYS_CODIGO_CLIENTE="0171":
                      cfg_codcont="0001"
                      cfg_ctcusto=""
                      cfg_plctfac=""
                      cfg_plctest=""
                      cfg_plctbor=""
                 Case SYS_CODIGO_CLIENTE="0185" Or
                      SYS_CODIGO_CLIENTE="0195" Or
                      SYS_CODIGO_CLIENTE="0196":
                      cfg_codcont="0001"
                      cfg_ctcusto=""
                      cfg_plctfac=""
                      cfg_plctest=""
                      cfg_plctbor=""
                 OtherWise:
                      cfg_codcont="0001"
                      cfg_ctcusto=""
                      cfg_plctfac=""
                      cfg_plctest=""
                      cfg_plctbor=""
               EndSwitch

               [Codigo da Conta     ]=cfg_codcont
               [Codigo da Empresa   ]=[PCFACC->Codigo da Empresa   ]
               Switch
                 Case DESTINO="EXTERNO":
                      [Sistema Gerador     ]="PC"
                      [Codigo Plano_Conta  ]=cfg_plctfac
                 OtherWise:
                      [Sistema Gerador     ]="PC"
               EndSwitch
               [Lancamento Gerador  ]=[PCFACC->Numero_Producao_Corte   ]
               [Documento Referente ]=SubStr(DESTINO,1,6)+"/"+[PCFACC->Numero_Producao_Corte]
               UnLockRecord

               Moveto "PCFACC"
               [Numero Lancamento Titulos]=SEQ
               UnLockRecord

          Case Tipo="Alterar":
               [Codigo do Emitente  ]=[PCFACC->Codigo              ]
               [Data de Entrada     ]=[PCFACC->Data_Producao       ]
               [Data de Emissao     ]=[PCFACC->Data_Producao       ]
               [Data de Vencimento  ]=[PCFACC->Data de Vencimento  ]
               [Data a Pagar        ]=[PCFACC->Data de Vencimento  ]
               [Valor do Documento  ]=[PCFACC->Valor Total         ]
               [Saldo do Documento  ]=[PCFACC->Valor Total         ]
               UnLockRecord
        EndSwitch
EndIf

Moveto "PCFACC"
UnLockRecord
FormKey
EndProc  ; (Titulos)

;*******************************************************************************
;* Rotina para gerar proximo lancamento                                        *
;*******************************************************************************
Proc ProximaOrdem()
Private i

For i From 1 to 10
  Moveto [Numero do Lancamento]
  End
  If IsBlank([])
     Then NUMEROL="1"
     Else NUMEROL=StrVal(NumVal([])+1)
  EndIf
  NUMEROL=AlinhM(NUMEROL,6)
  Down
  [Numero do Lancamento]=NUMEROL
  PostRecord KeyViol LeaveLocked
  If RetVal     
     Then Return True
     Else Del
  EndIf    
EndFor

Return False

EndProc ;ProximaOrdem()

;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(Tipo,NLancto)
Private NUMEROL, RQ_ENCONTRADA, SEQ, Tipo, i,
        CODIGO_ITEM, QTD_ITEM, CTO_ITEM, DESTINO, NOMDEST, CODREQ,
        QTDTOT, VRTOT, NLancto

If IsBlank([Pcfacc->Data_Producao])
   Then Mensagem("Data da produ‡Æo nÆo foi informada!")
        Return
EndIf           
        
Aguarde("Gerando requisi‡„o no estoque")

DESTINO=[PCFACC->Destino_Producao      ]
NOMDEST=[PCFACC->Nome Fantasia EmitDest]

Moveto "PCFACRIG"
Moveto [Sequencia do Lancamento]
TOT_ITEMG = ImageCCount()          

Moveto "PCFACC"
UnLockRecord
FormKey

If NLancto <> "NOVO"
   Then MSG_REQUISICAO = ""
        RQ_ENCONTRADA  = False
        If Not IsBlank([PCFACC->Lancamento RQCabeca_PCFAC])
           Then Moveto "\\Sistemas\\Estoque\\RQCabeca"
                Moveto [Numero do Lancamento]
                Locate [PCFACC->Lancamento RQCabeca_PCFAC]
                If RetVal
                   then If [Codigo da Empresa]=[PCFACC->Codigo da Empresa]
                           Then If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And 
                                   (NumVal(Month([Pcfacc->Data_Producao])) > 3 And NumVal(Year([Pcfacc->Data_Producao])) >= 2016)
                                   Then If [Sistema Gerador]="PC" And [Lancamento Gerador]=[PCFACC->Numero_Producao_Corte]
                                           Then RQ_ENCONTRADA=True
                                           Else MSG_REQUISICAO="Requisi‡„o de Estoque N. "+[PCFACC->Lancamento RQCabeca_PCFAC]+" n„o pertence a essa produ‡ao do corte !////"
                                                Switch
                                                  Case [Sistema Gerador]="PC" : SISTEMA_GERADOR = "PROD CORTE"
                                                  Case [Sistema Gerador]="PF" : SISTEMA_GERADOR = "PROG INT_EXT" 
                                                  Case [Sistema Gerador]="RF" : SISTEMA_GERADOR = "PROD INT_EXT"
                                                  OtherWise                   : SISTEMA_GERADOR = [Sistema Gerador]
                                                EndSwitch   
                                                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" |   SISTEMA GERADOR: "+SISTEMA_GERADOR,71," ")+"//"
                                                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" |LANCAMENTO GERADOR: "+[Lancamento Gerador],71," ")+"//"
                                        EndIf
                                   Else ;---- At‚ 03.2016 ----------------------
                                        RQ_ENCONTRADA=True        
                                EndIf              
                        EndIf
                EndIf
        EndIf
   Else RQ_ENCONTRADA  = True        
EndIf

If Not RQ_ENCONTRADA
   Then If Not IsBlank([PCFACC->Lancamento RQCabeca_PCFAC])
           Then LimpAguarde()
                If MSG_REQUISICAO=""
                   Then MSG_REQUISICAO=Completa("Requisi‡„o de Estoque N. "+[PCFACC->Lancamento RQCabeca_PCFAC]+" n„o localizada !",58," ")+"////"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa("Este lan‡amento n„o ser  corrigido no Estoque !",58," ")+"////"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa("Motivos:",58," ")+"//"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Fechamento Mensal do Estoque efetuado;",58," ")+"//"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Empresa da requisi‡„o n„o corresponde;",58," ")+"//"
                        MSG_REQUISICAO=MSG_REQUISICAO+Completa(" - Algum erro ocorrido no momento deste Lan‡amento.",58," ")
                        If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And
                           (NumVal(Month([Pcfacc->Data_Producao])) > 3 And NumVal(Year([Pcfacc->Data_Producao])) >= 2016)
                           Then MSG_REQUISICAO=MSG_REQUISICAO+"////"
                                MSG_REQUISICAO=MSG_REQUISICAO+Completa("Se houve ocorrencia de erros, o usu rio poder ",58," ")+"//"
                                MSG_REQUISICAO=MSG_REQUISICAO+Completa("re-gerar essa requisi‡„o nas fun‡äes (ALT+F) desta rotina!",58," ")+"//"
                        EndIf
                EndIf        
                Mensagem(MSG_REQUISICAO)

                Moveto "PCFACC"
                FormKey
                Return
        EndIf
	 Else If NLancto <> "NOVO"
           Then If NLancto=""
                   Then NUMEROL = [\Sistemas\Estoque\RQCabeca->Numero do Lancamento]
                   Else NUMEROL = NLancto     
                EndIf   
                For i From 1 To 3
        
                  Switch
                    Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
                    Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
                    Case i=3: Moveto "\\Sistemas\\Estoque\\RqItemg"
                  EndSwitch
        
                  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   ]
        
                            Switch
                              Case i=1: ESTOQUE("ESTORNAR", "S", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                                                [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")
                              Case i=2: ESTOQUE("ESTORNAR", "E", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                                                [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, CTO_ITEM,"")
                            EndSwitch
                            Switch
                              Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
                              Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
                              Case i=3: Moveto "\\Sistemas\\Estoque\\RqItemg"
                            EndSwitch
                            Del
                          EndWhile
                  EndIf
                EndFor
        
                If NLancto=""
                   Then Moveto "\\Sistemas\\Estoque\\RqCabeca"
                        Del
                EndIf 
          Else Moveto "PCFACC"
               [Lancamento RQCabeca_PCFAC]=""     
        EndIf
EndIf

If Tipo="Exclusao"
   Then Moveto "PCFACC"
        FormKey
        LimpAguarde()
        Return
EndIf

CODREQ ="000001"
WS_CREQ=""
WS_DREQ=DESTINO+" "+NOMDEST

Moveto "\\Sistemas\\Estoque\\Requisit"
Moveto [Codigo do Requisitante]
Locate CODREQ
If RetVal
   Then WS_CREQ=[Codigo do Requisitante]
        WS_DREQ=[Descricao Requisitante]+"/"+WS_DREQ
EndIf

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 If Not IsBlank([PCFACC->Lancamento RQCabeca_PCFAC]) And SEQ=0
    Then NUMEROL=[PCFACC->Lancamento RqCabeca_PCFAC]
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         ;If Not RetVal
         ;   Then End Down
         ;        [Numero do Lancamento] = NUMEROL
         ;        PostRecord KeyViol LeaveLocked
         ;EndIf
         If Not RetVal
            Then For i From 1 to 10
                   ;A primeira tentativa ser  do n§ da requisi‡Æo j  gravado
                   End 
                   If i<>1
                      Then If IsBlank([])
                              Then NUMEROL="1"
                              Else NUMEROL=StrVal(NumVal([])+1)
                           EndIf
                           NUMEROL=AlinhM(NUMEROL,6)
                   EndIf
                   Down
                   [Numero do Lancamento]=NUMEROL  
                   PostRecord KeyViol LeaveLocked
                   If RetVal     
                      Then QuitLoop 
                      Else Mensagem("N„o foi possivel gerar a requisi‡„o!")
                           Return
                   EndIf     
                 EndFor  
            Else PostRecord KeyViol LeaveLocked     
         EndIf 
    Else If Not ProximaOrdem()
            Then Mensagem("N„o foi possivel gerar a requisi‡„o!")
                 Return
         EndIf   
 EndIf
 SEQ=SEQ+1
 QuitLoop
EndWhile

;---- Cabe‡a -------------------------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
TIPO_REQUISICAO = "PROD"
AUX_COD         = ""
AUX_DES         = ""
If [PCFACC->Codigo]<>"" And TIPO_REQUISICAO="IND"
   Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [PCFACC->Codigo] To REG_CLIENTE
        If RetVal
           Then AUX_COD = REG_CLIENTE["Codigo"]
                AUX_DES = REG_CLIENTE["Nome Fantasia EmitDest"]
                ;If REG_CLIENTE["Tipo"]<>"E"
                ;   Then TIPO_REQUISICAO = "IND"
                ;EndIf
           Else Mensagem("Verificar a Requi‡Æo "+StrVal(NUMEROL)+"//"+
                         [PCFACC->Codigo]+" "+[PCFACC->Nome Fantasia EmitDest]+" n„o localizado no cadastro de clientes!")
        EndIf
EndIf  
[Codigo da Empresa     ]=[PCFACC->Codigo da Empresa]
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"

If TIPO_REQUISICAO="IND"
   Then [Tipo de Operacao      ]="I"
        [Descricao da Operacao ]="INDUSTRIALIZADO"
        [Codigo                ]=AUX_COD
        [Nome Fantasia EmitDest]=AUX_DES
   Else [Tipo de Operacao      ]="P"
        [Descricao da Operacao ]="PRODUCAO"
EndIf        
[Codigo do Documento   ]="PROD"
[Numero do Documento   ]=AlinhM(StrVal([PCFACC->Numero_Producao_Corte]),6)
[Data de Ocorrencia    ]=[PCFACC->Data_Producao]
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
[Numero do Corte       ]=[PCFACC->Numero_Programacao_Corte]
[Sistema Gerador       ]="PC"
[Lancamento Gerador    ]=[PCFACC->Numero_Producao_Corte]
Controle_Dia()
SaveTables

;---- Itens --------------------------------------------------------------------
TOT_ITEM = 0
QTDTOT   = 0
VRTOT    = 0
SEQ      = 0
CONT_SEQ = 0

Moveto "PCFACRI"
Moveto [Numero_Producao_Corte]
Locate [PCFACC->Numero_Producao_Corte]
If RetVal
   Then ;---- Contagem p/ Barra de Progresso ----------------------------------- 
        While [Numero_Producao_Corte]=[PCFACC->Numero_Producao_Corte]
          TOT_ITEM = TOT_ITEM + 1
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "PCFACRI"
Moveto [Numero_Producao_Corte]
Locate [PCFACC->Numero_Producao_Corte]
If RetVal
   Then ITEM_RQITEM = "***"
        COR_RQITEM  = ""
        
        While [Numero_Producao_Corte]=[PCFACC->Numero_Producao_Corte]
          CONT_SEQ = CONT_SEQ + 1   
          Barra(TOT_ITEM, CONT_SEQ)
          Aguarde("Aguarde, inserindo itens na requisi‡ao "+BARRA_STRING)   
   
          CODIGO_ITEM = [Codigo do Item       ]
          CODIGO_ITEM = MudaCodigoPara(CODIGO_ITEM,"S")  
          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"]
                          WS_COR   = REG_ITEM["Codigo da Cor_Tecido"]
                     Else WS_TITEM = ""
                          WS_DITEM = ""
                          WS_UNI   = ""
                          WS_COR   = ""
                  EndIf    
                                
                  If ITEM_RQITEM<>PegaCodigoRaiz([Codigo do Item]) Or COR_RQITEM<>WS_COR 
                     Then ITEM_RQITEM = PegaCodigoRaiz([Codigo do Item])
                          COR_RQITEM  = WS_COR 
                          EXIBE_MSG   = "S"
                     Else EXIBE_MSG   = "" 
                  EndIf    
                  
                  Moveto "\\Sistemas\\Estoque\\RqItem"
                  End Down
                  SEQ=SEQ+1
                  [Numero do Lancamento       ]=NUMEROL
                  [Sequencia do Lancamento    ]=SEQ
                  [Codigo da Empresa          ]=[PCFACC->Codigo da Empresa]
                  [Tipo do Item               ]=WS_TITEM
                  [Codigo do Item             ]=CODIGO_ITEM
                  [Descricao do Item          ]=WS_DITEM
                  [Quantidade                 ]=QTD_ITEM
                  [Custo Unitario             ]=[PCFACRI->Custo Unitario]       
                  ESTOQUE("ATUALIZAR","E",[PCFACC->Data_Producao],[PCFACC->Codigo da Empresa],CODIGO_ITEM,QTD_ITEM,0,EXIBE_MSG)
                  [Unidade Interna            ]=WS_UNI
                  [Custo Unitario             ]=CUSTOMEDIO
                  [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)

                  QTDTOT=QTDTOT+[Quantidade ]
                  VRTOT =VRTOT +[Custo Total]
                  UnLockrecord
                  
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL, SEQ

                  If PARAM_EXPLODE_MP_PCORT="S"
                     Then Formula()
                  EndIf
                  Moveto "PCFACRI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
        Release Vars ITEM_RQITEM,EXIBE_MSG
EndIf

;---- Itens da Grade -----------------------------------------------------------
CONT_SEQ = 0
Moveto "PCFACRIG"
Moveto [Numero_Producao_Corte]
Locate [PCFACC->Numero_Producao_Corte]
If RetVal
   Then While [Numero_Producao_Corte]=[PCFACC->Numero_Producao_Corte]
          CONT_SEQ = CONT_SEQ + 1   
          Barra(TOT_ITEMG, CONT_SEQ)
          Aguarde("Aguarde, inserindo itens na requisi‡ao de grade "+BARRA_STRING)
          
          CODIGO_ITEM=[Codigo do Item]

          Moveto "\\Sistemas\\Estoque\\RqItemg"
          End Down
          [Numero do Lancamento       ]=NUMEROL
          [Sequencia do Lancamento    ]=[PCFACRIG->Sequencia do Lancamento    ]
          [Codigo da Empresa          ]=[PCFACC->Codigo da Empresa            ]
          [Codigo do Item             ]=[PCFACRIG->Codigo do Item             ]
          [Tipo do Item               ]=[PCFACRIG->Tipo do Item               ]
          [Referencia                 ]=[PCFACRIG->Referencia                 ]
          [Descricao do Item          ]=[PCFACRIG->Descricao do Item          ]
          [Codigo da Cor_Tecido       ]=[PCFACRIG->Codigo da Cor_Tecido       ]
          [Descricao da Cor_Tecido    ]=[PCFACRIG->Descricao da Cor_Tecido    ]
          [Qtd1                       ]=[PCFACRIG->Qtd1                       ]
          [Qtd2                       ]=[PCFACRIG->Qtd2                       ]
          [Qtd3                       ]=[PCFACRIG->Qtd3                       ]
          [Qtd4                       ]=[PCFACRIG->Qtd4                       ]
          [Qtd5                       ]=[PCFACRIG->Qtd5                       ]
          [Qtd6                       ]=[PCFACRIG->Qtd6                       ]
          [Qtd7                       ]=[PCFACRIG->Qtd7                       ]
          [Qtd8                       ]=[PCFACRIG->Qtd8                       ]
          [Qtd9                       ]=[PCFACRIG->Qtd9                       ]
          [Qtd10                      ]=[PCFACRIG->Qtd10                      ]
          [Qtd11                      ]=[PCFACRIG->Qtd11                      ]
          [Qtd12                      ]=[PCFACRIG->Qtd12                      ]
          [Quantidade                 ]=[PCFACRIG->Quantidade Produzida       ]
          [Unidade Interna            ]=[PCFACRIG->Unidade Interna            ]
          [Codigo da Grade            ]=[PCFACRIG->Codigo da Grade            ]
          [Custo Unitario             ]=[PCFACRIG->Custo Unitario             ]
          ;O Custo Unitario est  como o custo da produ‡Æo do corte de grade
          ;ESTOQUE("CUSTO","",[PCFACC->Data_Producao],[PCFACC->Codigo da Empresa],CODIGO_ITEM,0,0,"")
          ;[Custo Unitario             ]=CUSTOMEDIO
          [Custo Total                ]=NDecimal([Custo Unitario]*[Quantidade],2)
          UnLockrecord
                  
          Moveto [Numero do Lancamento]
          Locate NUMEROL, [PCFACRIG->Sequencia do Lancamento]
          
          Moveto "PCFACRIG"
          Skip
          If EOT() Then QuitLoop EndIf
          
      EndWhile
EndIf          

;---- Complementos da Cabe‡a ---------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal 
   Then [Quantidade Total      ]=QTDTOT
        [Valor Total           ]=VRTOT
        SaveTables
        UnLockRecord
EndIf        

Release Vars REG_CLIENTE, REG_ITEM

Moveto "PCFACC"
[Lancamento RQCabeca_PCFAC]=NUMEROL
UnLockRecord
FormKey

LimpAguarde()

EndProc ;REQUISICAO()

;*******************************************************************************
;* Verifica Formula de Materia Prima                                           *
;*******************************************************************************
Proc FORMULA()
Private UNIDADE
Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If Not RetVal
  Then MSG=    "NÆo existe f¢rmula cadastrada para o item:// //"
       MSG=MSG+[\Sistemas\Estoque\RqItem->Codigo do Item]+" - "
       MSG=MSG+[\Sistemas\Estoque\RqItem->Descricao do Item]+"// //"
       MSG=MSG+"Consumo para este item nÆo foi realizada,//"
       MSG=MSG+"e o estoque n„o ser  atualizado devidamente !// //"
       MSG=MSG+"Verificar a f¢rmula e depois,//confirmar novamente esta entrada de produ‡Æo !"
       Mensagem(MSG)
       Moveto "\\Sistemas\\Estoque\\RqItem"
       Return
EndIf

If [Baixa_Automatica]="N"
   Then Moveto "\\Sistemas\\Estoque\\RqItem"
        Return
EndIf

Moveto "\\Sistemas\\Producao\\FormulaI"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If RetVal
   Then While [Codigo do Produto]=[\Sistemas\Estoque\RqItem->Codigo do Item]
          If Not IsBlank([Codigo do Material]) And [Item_Baixa_Automatica]="S" And
             [Tipo do Item]<>"S"  
             Then Moveto "\\Sistemas\\Estoque\\RqMatPri"
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL,SEQ,[\Sistemas\Producao\FormulaI->Sequencia]
                  If Not RetVal
                     Then End Down
                          [Numero do Lancamento   ]=NUMEROL
                          [Sequencia do Item      ]=SEQ
                          [Sequencia Materia Prima]=[\Sistemas\Producao\FormulaI->Sequencia]
                  Endif
                  [Codigo da Empresa  ]=[\Sistemas\Estoque\RqCabeca->Codigo da Empresa]
                  [Codigo do Item     ]=[\Sistemas\Producao\FormulaI->Codigo do Material]
                  UNIDADE=([\Sistemas\Estoque\RqItem->Quantidade]/[\Sistemas\Producao\Formulac->Quantidade Produzida])
                  [Quantidade         ]=NDecimal(UNIDADE*[\Sistemas\Producao\FormulaI->Quantidade],3)
                  ESTOQUE("ATUALIZAR_FORMULA", "S", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                          [Codigo da Empresa], [Codigo do Item], UNIDADE, 0,"")
                  [Custo Unitario     ]=CUSTOMEDIO
                  [Custo Total        ]=Round([Quantidade]*[Custo Unitario],2)
                  [Codigo CCusto      ]=[\Sistemas\Estoque\RqItem->Codigo CCusto]
                  UnLockRecord
                  Moveto "\\Sistemas\\Producao\\FormulaI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
  Else MSG=    "NÆo existem itens a consumir na f¢rmula do item://"
       MSG=MSG+[\Sistemas\Estoque\RqItem->Codigo do Item]+" - "
       MSG=MSG+[\Sistemas\Estoque\RqItem->Descricao do Item]+"// //"
       MSG=MSG+"Consumo para este item nÆo foi realizada,//"
       MSG=MSG+"e o estoque n„o ser  atualizado devidamente !// //"
       MSG=MSG+"Verificar a f¢rmula e depois,//confirmar novamente esta entrada de produ‡Æo !"
       Mensagem(MSG)
EndIf
Moveto "\\Sistemas\\Estoque\\RqItem"
EndProc  ;  (Formula)

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

Tabela=Table()

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

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
While True
  If IsLockRecord()
     Then Loop
  EndIf
  
  If OPERACAO="ATUALIZAR_FORMULA" Or
     OPERACAO="ATUALIZAR"         Or
     OPERACAO="CUSTO"
     Then 
         if TPMOV="S"
            then 
                 CUSTOMEDIO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                 If CUSTOMEDIO=0
                    Then CUSTOMEDIO=[Ultimo Custo Atual]
                 EndIf
          EndIf

          if TPMOV="E"
            then CUSTOMEDIO=[Preco de Custo] 
          EndIf
          CTTOT     =NDecimal(QTDE*CUSTOMEDIO,2)
          
          If UTILIZA_CUSTO_UNITARIO And OPERACAO="ATUALIZAR"                            And
            ;[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]>=[Data do Preco de Custo] And
             [\Sistemas\Estoque\RqCabeca->Tipo de Movimento]="E"                        And
             [\Sistemas\Estoque\RqCabeca->Tipo de Operacao ]="P"                        
            ;[\Sistemas\Estoque\RqItem->Custo Unitario]>0                               And
            ;[\Sistemas\Estoque\RqItem->Quantidade]>0 
             Then GetRecord "\\Sistemas\\Estoque\\Itens" [\Sistemas\Estoque\RqItem->Codigo do Item] To REG_ITEM
                  If Not ReTval
                     Then Mensagem("Item "+REG_ITEM["Codigo do Item"]+" n„o localizado no cadastro de itens!")
                     Else If [\Sistemas\Estoque\RqItem->Custo Unitario]<>[Preco de Custo]
                             Then MSG = "O Custo Unit rio informado neste Item, // "+
                                        "difere da Ficha de Estoque !// //"+
                                        "Custo Informado = "+Format("W12.5,EIC",[\Sistemas\Estoque\RqItem->Custo Unitario])+"//"+
                                        "Custo da Ficha  = "+Format("W12.5,EIC",[Preco de Custo        ])+"// //"+
                                        "Deseja Atualizar o Custo da Ficha a partir deste Lan‡amento ?"
                                   If EXIBE_MSG<>""
                                      Then ConfGeral(MSG)
                                      Else OK="S"
                                   EndIf    
                                   If OK="S"
                                      Then CUSTOMEDIO=NDecimal([\Sistemas\Estoque\RqItem->Custo Unitario],5)
                                           If CUSTOMEDIO=0 
                                              Then CUSTOMEDIO=[Ultimo Custo Atual]
                                           EndIf
                                           CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
                                           [Preco de Custo        ]=CUSTOMEDIO
                                           [Data do Preco de Custo]=[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]
                                  EndIf
                            Else CUSTOMEDIO=NDecimal([\Sistemas\Estoque\RqItem->Custo Unitario],5)
                                 If CUSTOMEDIO=0 
                                     Then CUSTOMEDIO=[Ultimo Custo Atual]
                                 EndIf
                                 CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
                                 [Data do Preco de Custo]=[\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]     
                         EndIf        
                 EndIf
          EndIf
  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_FORMULA" Or
     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" Or OPERACAO="ATUALIZAR_FORMULA") 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 p/ Montar Opcoes p/ Grade                                            *
;*******************************************************************************
Proc Monta_Opcoes(OPCAODIVERSAS, ITEMDESEJADO)
Private OPCAODIVERSAS, ITEMDESEJADO, wcg, icg, icgt, tnovo, nomecampo,opconta
nomecampo=Field()
If IsAssigned(Opcoes)
   Then Release Vars Opcoes
EndIf
DynArray Opcoes[]
Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido":
       Moveto [Lookup_Itens_Cor]
EndSwitch
Ativa_Lookup()
Moveto [Codigo do item]
Locate VSD_I_Codigo_Item 

wcg=0
While [Codigo do Item]=VSD_I_Codigo_Item   
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And
         ( SYS_CODIGO_CLIENTE="0222" Or
           SYS_CODIGO_CLIENTE="0232" ):
         wcg=wcg+1
         Opcoes[wcg]=AlinhM(StrVal([Sequencia da Cor_Tecido]),4)+"  "+[Codigo da Cor_Tecido]+"-"+Completa([Descricao da Cor_Tecido],30," ")

    Case OPCAODIVERSAS="Codigo da Cor_Tecido":
         wcg=wcg+1
         Opcoes[wcg]=Completa([Descricao da Cor_Tecido],30," ")+" "+[Codigo da Cor_Tecido]+" - "+Format("W2,AR",[Sequencia da Cor_Tecido])
  EndSwitch
  Skip
  IF EOT() Then QuitLoop EndIf
EndWhile
KeyPress "ESC"
Moveto Field nomecampo
EndProc    ; (Monta_Opcoes)

;*******************************************************************************
;* Rotina p/ Checagem Opcoes p/ Grade                                          *
;*******************************************************************************
Proc Checa_Opcoes(OPCAODIVERSAS, VALORDESEJADO)
Private OPCAODIVERSAS, VALORDESEJADO, icg, resultado

If DynArraySize(Opcoes)=0
   Then Return False
EndIf

resultado=false
For icg From 1 To DynArraySize(Opcoes)
  Switch
    Case OPCAODIVERSAS="Codigo da Cor_Tecido" And
         ( SYS_CODIGO_CLIENTE="0222" Or
           SYS_CODIGO_CLIENTE="0232" ):
         If RTrim(SubStr(Opcoes[icg],07,4))=VALORDESEJADO
            Then resultado=true
         EndIf

    Case OPCAODIVERSAS="Codigo da Cor_Tecido":
         If RTrim(SubStr(Opcoes[icg],32,4))=VALORDESEJADO
            Then resultado=true
         EndIf
  EndSwitch
  If resultado
     then MontaRegistro_F1(OPCAODIVERSAS,icg)
          QuitLoop
  EndIf
EndFor
return resultado
EndProc         ;  (Checa_Opcoes)

;*******************************************************************************
;* Rotina Montar Registro_F1 p/ Grade                                          *
;*******************************************************************************
Proc MontaRegistro_F1(OPCAODIVERSAS, indice)
private OPCAODIVERSAS, indice

If IsAssigned(Registro_F1)
   Then Release Vars Registro_F1
EndIf
DynArray Registro_F1[]
Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido" And
       ( SYS_CODIGO_CLIENTE="0222" Or
         SYS_CODIGO_CLIENTE="0232" ):
       Registro_F1["Codigo da Cor_Tecido"]         =RTrim(SubStr(Opcoes[indice],07,4))
       Registro_F1["Descricao da Cor_Tecido"]      =RTrim(SubStr(Opcoes[indice],12,30))
       If IsAssigned(VSDGCORTECIDO)
          Then VSD_I_Codigo_Cor_Tecido   =Registro_F1["Codigo da Cor_Tecido"]
               VSD_I_Descricao_Cor_Tecido=Registro_F1["Descricao da Cor_Tecido"]
       EndIf

  Case OPCAODIVERSAS="Codigo da Cor_Tecido"  :
       Registro_F1["Codigo da Cor_Tecido"]         =RTrim(SubStr(Opcoes[indice],32,4))
       Registro_F1["Descricao da Cor_Tecido"]      =RTrim(SubStr(Opcoes[indice],01,30))
       If IsAssigned(VSDGCORTECIDO)
          Then VSD_I_Codigo_Cor_Tecido   =Registro_F1["Codigo da Cor_Tecido"]
               VSD_I_Descricao_Cor_Tecido=Registro_F1["Descricao da Cor_Tecido"]
       EndIf
EndSwitch
EndProc    ;  (Monta_RegistroF1)

;*******************************************************************************
;* Rotina de Selecionar Grade                                                  *
;*******************************************************************************
Proc Seleciona_Opcoes(OPCAODIVERSAS,SEMRETORNO)
Private OPCAODIVERSAS, LJ, AJ, nc, SEMRETORNO

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

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

Switch
  Case OPCAODIVERSAS="Codigo da Cor_Tecido"   : LJ=43 nc=1
EndSwitch

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

   PickDynArray @0,01 Height AJ width LJ
   Columns nc
   Opcoes
   Tag "TG_OPCAO"
   To ArrayElement
EndDialog
Mouse Show
If RetVal
   Then If SEMRETORNO<>"SR"
           Then Switch
                  Case OPCAODIVERSAS="Codigo da Cor_Tecido":
                  [Codigo da Cor_Tecido   ]=Registro_F1["Codigo da Cor_Tecido"]
                  [Descricao da Cor_Tecido]=Registro_F1["Descricao da Cor_Tecido"]
                EndSwitch
                Return True
        EndIf
   Else Return False
EndIf
EndProc   ; (Seleciona_Opcoes)

;*******************************************************************************
;* Rotina para Re-Gerar as Requisicoes                                         *
;*******************************************************************************
Proc Gera_Requicicao()
Private AUX_REQ

AUX_REQ =[PCFACC->Lancamento RQCabeca_PCFAC]
GetRecord "\\Sistemas\\Estoque\\RqCabeca" AUX_REQ To REG_RQCABECA
If Not RetVal
   Then If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And 
           (NumVal(Month([Pcfacc->Data_Producao])) > 3 And NumVal(Year([Pcfacc->Data_Producao])) >= 2016)
           Then ConfGeral("Deseja realmente re-gerar a requisi‡„o p/ um novo numero de lan‡amento ?")
                If Ok="S"
                   Then Requisicao("Inclusao","NOVO")
                EndIf
           Else Mensagem("A requisi‡„o "+AUX_REQ+" NAO existe no lan‡amento da REQUISICAO!")     
        EndIf           
   Else If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And 
           (NumVal(Month(REG_RQCABECA["Data_Inclusao"])) > 3 And NumVal(Year(REG_RQCABECA["Data_Inclusao"])) >= 2016)
           Then If REG_RQCABECA["Sistema Gerador"]="PC" And REG_RQCABECA["Lancamento Gerador"]=[PCFACC->Numero_Producao_Corte]
                   Then ConfGeral_N("A requisi‡ao "+AUX_REQ+" existe no sistema!//Deseja Re-Gerar esta requisi‡ao?")
                        If Ok="S"
                           Then Requisicao("Inclusao",AUX_REQ)
                        EndIf
                   Else MSG="Requisi‡„o de Estoque N. "+[PCFACC->Lancamento RQCabeca_PCFAC]+" n„o pertence a essa produ‡ao do corte !////"
                        Switch
                          Case REG_RQCABECA["Sistema Gerador"]="PC" : SISTEMA_GERADOR = "PROD CORTE"
                          Case REG_RQCABECA["Sistema Gerador"]="PF" : SISTEMA_GERADOR = "PROG INT_EXT" 
                          Case REG_RQCABECA["Sistema Gerador"]="RF" : SISTEMA_GERADOR = "PROD INT_EXT"
                          OtherWise                   : SISTEMA_GERADOR = REG_RQCABECA["Sistema Gerador"]
                        EndSwitch   
                        MSG=MSG+Completa(" |   SISTEMA GERADOR: "+SISTEMA_GERADOR,71," ")+"//"
                        MSG=MSG+Completa(" |LANCAMENTO GERADOR: "+REG_RQCABECA["Lancamento Gerador"],71," ")+"//"
                        MSG=MSG+Completa("Deseja re-gerar a requisi‡ao deste lan‡amento p/ uma nova requisi‡„o?",71," ")
                        ConfGeral_N(MSG) 
                        If Ok="S"
                           Then Requisicao("Inclusao","NOVO")
                        EndIf
                EndIf
           Else Mensagem(Completa("A requisi‡„o "+AUX_REQ+" existe no sistema, impossibilitando",55," ")+"//"+
                         Completa("re-gerar esse lan‡amento nas requisi‡äes!                   ",55," ")+"////"+
                         Completa("Verificar na rotina de REQUISICAO o lan‡amento "+AUX_REQ+"!",55," "))
        EndIf
EndIf

EndProc ;Gera_Requicicao()

;*******************************************************************************
;* Selecionar Registros                                                       *
;*******************************************************************************
Proc SelecionaFiltroPcfacc()
ClearAll

If Not IsAssigned(SDFILTRO_ATIVO) Then SDFILTRO_ATIVO = False EndIf

If SDFILTRO_ATIVO
   Then If VSDGREFERENCIA<>"" Or VSDGFAMI<>"" Or VSDGMARCA<>"" Or VSDGGRP<>""
           Then {Ask} {\\Sistemas\\Estoque\\Itens}
                Moveto [Codigo do Item        ] TypeIn "_citem"
                Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
                Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
                Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
                Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
        EndIf                                   
        {Ask} {Pcfacc} Check
        Moveto [Codigo da Empresa       ] TypeIn "~VSDGEMPRESA.."
        Moveto [Numero_Programacao_Corte] TypeIn "~VSDGCORTE.."
        Moveto [Data_Producao           ] TypeIn ">=~VSDGDTINI,<=~VSDGDTFIM"
        If VSDGREFERENCIA<>"" Or 
           VSDGFAMI<>""       Or
           VSDGMARCA<>""      Or  
           VSDGGRP<>""        Or 
           VSDGITEM<>""
           Then Moveto [Numero_Producao_Corte] TypeIn "_num"
                {Ask} {PCfacRI}
                Moveto [Numero_Producao_Corte] TypeIn "_num"
                If VSDGREFERENCIA<>"" Or VSDGFAMI<>"" Or VSDGMARCA<>"" Or VSDGGRP<>""
                   Then Moveto [Codigo do Item] TypeIn "_citem, ~VSDGITEM.."
                   Else Moveto [Codigo do Item] TypeIn "~VSDGITEM.."          
                EndIf
        EndIf
        Do_It!
        ClearAll
EndIf  

Release Vars REG_USUARIO
CriaTabelaControle()                     

Return True

EndPRoc ;SelecionaFiltroPcfacc()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_DialogCfacg(Disparo,Campo,Evento,Elemento)
Temp = True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"    : Campo="NO"
            Case Campo="TG_CORTE"      : Campo="TG_EMPRESA"
            Case Campo="TG_MARCA"      : Campo="TG_CORTE"
            Case Campo="TG_FAMI"       : Campo="TG_MARCA"
            Case Campo="TG_GRP"        : Campo="TG_FAMI"
            Case Campo="TG_ITEM"       : Campo="TG_GRP"
            Case Campo="TG_REFERENCIA" : Campo="TG_ITEM"
            Case Campo="TG_DTINI"      : Campo="TG_REFERENCIA"
            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_CORTE"
                    Case Campo="TG_CORTE"      : Campo="TG_MARCA" 
                    Case Campo="TG_MARCA"      : Campo="TG_FAMI"
                    Case Campo="TG_FAMI"       : Campo="TG_GRP"
                    Case Campo="TG_GRP"        : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"       : Campo="TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA" : Campo="TG_DTINI"
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_DialogCfacg

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc FiltrarPcfacc()
Private Result
LimpAguarde()                 
Do_It!                            
ClearAll                                                                  

Echo Normal
Echo Off

CONSULTAF1     =  False
SDFILTRO_ATIVO = True
While True
  Result=False
  
  ShowDialog "Crit‚rio para filtro ?" Proc "SD_DialogCfacg"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 22 Width 80

    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 "Corte"  For "TG_CORTE"
    Accept @ 03,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_CORTE" To VSDGCORTE
    Accept @ 03,09 Width 25 "A25" Picture "!*!"        Tag "TG_NOMCORTE" To VSDGNOMCORTE                            
                                                                                        
    Label  @ 04,00 "Marca"  For "TG_MARCA"                                                                                     
    Accept @ 05,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 05,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA
    
    Label  @ 06,00 "Familia"  For "TG_FAMI"
    Accept @ 07,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI"    To VSDGFAMI
    Accept @ 07,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 08,00 "Grupo"  For "TG_GRP"
    Accept @ 09,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP"    To VSDGGRP
    Accept @ 09,09 Width 25 "A30" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 10,00 "Item"  For "TG_ITEM"                                                                 
    Accept @ 11,01 Width 13 "A10" Picture "#*#" Tag "TG_ITEM"     To VSDGITEM
    Accept @ 11,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM

    Label  @ 10,13 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 11,13 Width 21 "A20" Picture "!*!" Tag "TG_REFERENCIA"     To VSDGREFERENCIA

    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 @ 18,24 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 18,38 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
    
    @ 19,52 ?? "[NÆo filtra mˆs fechado!]"

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  If VSDGEMPRESA="0000"
     Then VSDGEMPRESA2=""
     Else VSDGEMPRESA2=VSDGEMPRESA
  EndIf
  
  AGUARDE("Filtrando dados")
  If Not SelecionaFiltroPcfacc() Then Loop EndIf    
  Result=True
                             
  QuitLoop
EndWhile

SDFILTRO_ATIVO=False

Return Result

EndProc ;FiltrarPcfacc

;*******************************************************************************
;* Rotina Limpa Variaveis do Filtro                                            *
;*******************************************************************************
Proc LimpaFiltroPcfacc()                                                                        
                                                                                       
VSDGEMPRESA      = ""         
VSDGNOMEMP       = ""
VSDGCORTE        = ""
VSDGNOMCORTE     = ""
VSDGMARCA        = ""
VSDGNOMMARCA     = ""
VSDGFAMI         = ""
VSDGNOMFAMI      = ""
VSDGGRP          = ""
VSDGNOMGRP       = ""
VSDGITEM         = ""
VSDGNOMITEM      = ""
VSDGREFERENCIA   = ""   
VSDGREFERENCIA   = ""
VSDGDTINI        = BlankDate()
VSDGDTFIM        = BlankDate()
REGRAFILTRO      = ""

EndProc ;LimpaFiltroPcfacc()     

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

If IsEmpty("P_Desti")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Moveto "PCFACc"
        KeyPress "F7"
        Return False   
EndIf

If IsEmpty("P_Fac")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Result=False
   Else UnLockRecord
        KeyPress "F7"
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile
        
        Moveto "P_Fac"
        Moveto [Codigo_Empresa]
        Locate [PCFACc->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else PARAM_EMPRESA         = [Codigo_Empresa           ]
                PARAM_EXPLODE_MP_PCORT= [Explosao_MatPrim_ProdCort]
                PARAM_COR_TECIDO      = [Cor_Tecido               ]
                PARAM_RELATORIO       = [Script_Impressao_ProdCort]
                PARAM_RELATSALDO      = [Script_Impressao_SaldCort]
                PARAM_ATUA_CAPG       = [Atualiza_Contas_Pagar    ]

                Result=True
        EndIf
EndIf

Moveto "PCFACc"
KeyPress "F7"

Return Result
EndProc

;*******************************************************************************
;* Rotina para carregar tabelas                                                *
;*******************************************************************************
Proc Carrega_Tabelas(VALOR_PICKFORM)
 
View "P_FAC"
View "\\Sistemas\\Estoque\\RqCabeca"
View "\\Sistemas\\Estoque\\RqItem"
View "\\Sistemas\\Estoque\\RqItemG"
View "\\Sistemas\\Estoque\\RqMatPri"
View "\\Sistemas\\Estoque\\EstqPrm"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Requisit"
View "\\Sistemas\\Producao\\FormulaC"
View "\\Sistemas\\Producao\\FormulaI"
View "\\Sistemas\\CtaPag\\Titulos"
View "PCFACRI"
View "PCFACRIG"

If Not MODOFILTRAR
   Then CoEdit "PCFACC"
   Else If Not CoEditaTabelaControle() 
           Then Return False
        EndIf
EndIf                 

Switch
  Case VALOR_PICKFORM="1" : 
       Moveto TabelaControle
       PickForm FORM_RELACAO
  Case VALOR_PICKFORM="2" :  
       PickForm VALOR_PICKFORM     
EndSwitch

Return True

EndProc

;*******************************************************************************
;* Rotina para ajustar dados na cabe‡a                                         *
;*******************************************************************************
Proc AjustaDadosCabeca()
Private TAB_ANT
 
TAB_ANT  = Table()

Moveto "PCFACC"
If IsAssigned(TOTQTD) Then [Quantidade_Produzida]=TOTQTD EndIf
If IsAssigned(TOTVR)  Then [Valor Total         ]=TOTVR  EndIf
UnLockRecord

Moveto TAB_ANT 

EndProc ;AjustaDadosCabeca()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
ITEM=[Sequencia do Lancamento]
INICIA_REGISTRO()
DIGITAI()
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
FINALIZADO=False
While Not FINALIZADO

  Tecla_Funcao=BlankNum()
  DIGITA()
  SetaCorRegistro("Padrao")

  If CHAVEC=9 Then QuitLoop EndIf
  INICIO=False
  
  If CHAVEC=1
     Then Controle_Dia()
  EndIf  

  While Not IsBlank(Tecla_Funcao)

    Switch
      Case Tecla_Funcao="F6":
           If Imprime()
               Then FINALIZADO=True
                    Tecla_Funcao=""
           EndIf
           Switch
             Case Table()="Pcfacc"   : Tecla_Funcao=""
             Case Table()="Pcfacrig" : Tecla_Funcao=-19
           EndSwitch

      Case Tecla_Funcao=-24:
           Tabela=Table()
           Moveto "PCFACC"
           Edita_Memo("Observacoes",08,07,12,65,"Observa‡”es")
           Moveto Tabela
           Switch
             Case Table()="Pcfacc"   : Tecla_Funcao=""
             Case Table()="Pcfacrig" : Tecla_Funcao=-19
           EndSwitch

      Case Tecla_Funcao=-25:
           Switch
             Case Table()="Pcfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Pcfacrig" : Tecla_Funcao=-19
                                      PegaItens_Programacao()
           EndSwitch

      Case Tecla_Funcao=-18:
           Switch
             Case Table()="Pcfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Pcfacrig" : Tecla_Funcao=-19
                                      Editar("")
           EndSwitch
      Case Tecla_Funcao=-34:
           Switch
             Case Table()="Pcfacc"   : Tecla_Funcao=""
                                       Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")  
             Case Table()="Pcfacrig" : Tecla_Funcao=""
                                       If CHAVEC=0
                                          Then Gera_Requicicao()
                                       EndIf   
           EndSwitch
      Case Tecla_Funcao=-19:
           While True
             CHAVEI()
             If CHAVEI=9 Then QuitLoop EndIf
             Controla_EdicaoI()
           EndWhile
           SetaCorRegistro("Padrao")
      OtherWise            : QuitLoop
    EndSwitch

  EndWhile

  If Finalizado
     Then If Not gerou_pcfacri
             Then Gera_PCFACRI()
                  Switch
                    Case CHAVEC=1: Titulos("Incluir")
                    Case CHAVEC=0: Titulos("Alterar")
                  EndSwitch
                  Requisicao("Inclusao","")
          EndIf
  EndIf

  Moveto "PCFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf

AtualizaRegistroControle("Numero_Producao_Corte",NPROD,MODOPAGINA)         
If OPCAO_FORM=FORM_RELACAO Then PickForm FORM_RELACAO EndIf

EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bib_Proc"
SYS_VALOR()
LimpaFiltroPcfacc()

MSG=""
COR_MENSAGEM="PRETO"

{Ask}{PCFACC}
Moveto [Numero_Producao_Corte] Typein "Calc Count as Qtde"
Moveto [Data_Producao        ] Typein "<(today-547)"
do_it!
if not IsEmpty("Answer")
   then if [Qtde]>0
           Then MSG=MSG+"  Existe(m) "+strval([Qtde])+" Produ‡Æo(äes) lan‡ada(s) !   // //"
                MSG=MSG+"Para melhor seguran‡a e desempenho do Sistema,//"
                MSG=MSG+"recomendamos que fa‡a o fechamento mensal  das//"
                MSG=MSG+"mais antigas. Recomendamos manter apenas 1 ano//"
                MSG=MSG+"em aberto!                                    // //"
                MSG=MSG+"Verificar com o supervisor fechamento mensal !"
        EndIf
endif   
ClearAll
if MSG<>"" then Mensagem(MSG) endif
Release Vars COR_MENSAGEM,MSG 

If Not IsAssigned(SYS_EMPRESA_DEFAULT) Then SYS_EMPRESA_DEFAULT=""   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(SYS_NIVEL_USUARIO)   Then SYS_NIVEL_USUARIO="S"    EndIf
If Not IsAssigned(SYS_CONTROLE_DIA)    Then SYS_CONTROLE_DIA=""      EndIf
If Not IsAssigned(SYS_NOME_USUARIO)    Then SYS_NOME_USUARIO=""      EndIf
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""    EndIf

If SYS_CODIGO_CLIENTE="0391"
   Then PARAM_PRODUCAO_CORTE_LIBERADA = True
   Else PARAM_PRODUCAO_CORTE_LIBERADA = False
EndIf

UTILIZA_CUSTO_UNITARIO  = True
PARAM_PROGRAMACAO_CORTE = True

OPCAO_FORM   = "F"    
FORM_RELACAO = OPCAO_FORM

TabelaTemp           = ""
TabelaPrincipal      = "Pcfacc"
TabelaControle       = TabelaPrincipal
MODOFILTRAR          = False
MODOFILTRARATIVO     = False
MODOFILTRAR_EMPRESA  = ""

If IsAssigned(MODOFILTRAR) And MODOFILTRAR
   Then SelecionaFiltroPcfacc()
   Else TabelaControle    = TabelaPrincipal
        MODOFILTRARATIVO  = True
        MODOFILTRARINCLUI = False
        MODOFILTRATODOS   = True
EndIf

Array Array_TM[12]
grdant="***"

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

If Carrega_Tabelas("1")
   Then While True
          CHAVE()
          ;--- FILTRO ----------------------------------------------------------
          If CHAVEC=99 
             Then If FiltrarPcfacc()
                     Then MODOFILTRAR=True
                  EndIf
                  Carrega_Tabelas("1")
                  Loop
          EndIf                 
          If CHAVEC=98 
             Then AGUARDE("Visualizando todos registros")
                  MODOFILTRAR=False
                  Do_It!
                  
                  TabelaControle=TabelaPrincipal
                  Carrega_Tabelas("1")
                  Loop
          EndIf   
          ;--------------------------------------------------------------------  
          If CHAVEC=9 Then QuitLoop EndIf
          If CHAVEC=5
             Then If OPCAO_FORM="F"
                     Then PickForm "F"
                     Else PickForm "2"
                  EndIf
                  Loop
          EndIf
          Controla_EdicaoC()
        EndWhile
EndIf
Do_It!
ClearAll

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

Release Vars All
Release Procs All