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

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

While True                                       
  Moveto "PCFACC"
  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=""
  AguardaTeclasPadrao()

    Switch
        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
             CHAVE=5
             Return
        Case RetVal="F7" Or RetVal="UP" Or RetVal="PGUP" Or RetVal="HOME":
             Del
             While True
               INICIO=True
               campocorrente=""

               If OPCAO_FORM="F"
                  Then PAGINA("PCFACC","MR")
                  Else PAGINA("PCFACC","MT")
               EndIf
               CHAVE=0
               NPROD   =[Numero_Producao_Corte]
               If EDITAR="S"
                  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]
                                QuitLoop
                       EndIf  
                       If Checa_Controle([Numero_Controle_Dia])
                          Then Controla_EdicaoC()
                          Else UnLockRecord
                       EndIf
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("") And Checa_Supervisor()
                                  Then If Carrega_Parametros()
                                          Then If OPCAO_FORM="F"
                                                  Then PickForm "2"
                                               EndIf
                                               EXCLUSAO("Cabeca")
                                               If OPCAO_FORM="F"
                                                  Then PickForm "F"
                                               EndIf
                                          Else UnLockRecord
                                       EndIf
                                  Else UnLockRecord
                               EndIf
                          Else QuitLoop
                       EndIf
               EndIf
               SetaPosForm()
            EndWhile
            QuitLoop
        Case Retval="ESC":
             CHAVE=9
             Del
             Return
        Case Retval="ENTER":
             If IsBlank([])
                Then If IsBlank(NPROD)
                        Then NPROD="1"
                        Else NPROD=StrVal(NumVal(NPROD)+1)
                     EndIf
                Else NPROD=[]
             EndIf
             NPROD=AlinhM(NPROD,6)
             If RecordStatus("New")=False
                Then QuitLoop
                Else Del
             EndIf

             If OPCAO_FORM="F"
                Then PickForm "2"
             EndIf
             Moveto [Numero_Producao_Corte]
             Locate NPROD
             If Retval
                Then CHAVE=0
                Else CHAVE=1
                     End
                     PgDn PgDn
                     Moveto [Numero_Producao_Corte]
                     [Numero_Producao_Corte]=NPROD
             EndIf

             If Not IsLockRecord()
                Then Echo Normal
                     Echo Off
                     If (CHAVE=1 And Checa_Controle(SYS_CONTROLE_DIA)) Or
                        (CHAVE=0 And Checa_Controle([Numero_Controle_Dia]))
                        Then Return
                     EndIf
             EndIf

             If IsLockRecord()
                Then If OPCAO_FORM="F"
                        Then PickForm "F"
                     EndIf
                     If CHAVE=1
                        Then Del
                     EndIf
                     QuitLoop
             EndIf
             Return
        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 CHAVE=9
                        Return
                EndIf
        EndIf

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

        If CHAVE=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 CHAVE=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 CHAVE=1
                           Then EXCLUSAO("Cabeca")
                                CHAVE=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 CHAVE=0
                   Then If QuerDesfazer("")
                           Then Undo
                                CHAVE=9
                                QuitLoop
                        EndIf
                   Else Moveto [Data_Producao]
                EndIf
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGDN" and CHAVE=0:
           If [Destino_Producao]="EXTERNO" And
              (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
              Then Mensagem("Data de Vencimento Inv lida !")
                   Loop
           EndIf

           FINALIZADO=True
           CHAVE=9
           OPCAO=""
           QuitLoop
      Case Retval="FIELDVIEW" or Retval="F35":
           EDITFIELD()
      Case Retval="DEL":
           If CHAVE=0
              Then If QuerExcluir("") And Checa_Supervisor()
                      Then CHAVE=9
                           EXCLUSAO("Cabeca")
                           QuitLoop
                   EndIf
           EndIf
      Case Retval="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 [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 [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
   Else [Preco 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"
[Preco 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
  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"
        Moveto [Quantidade Produzida ]
        TOTQTD= ImageCSum()

        Moveto [Preco Total          ]
        TOTVR = ImageCSum()

        Moveto "PCFACC"
        [Quantidade_Produzida ]=TOTQTD
        [Valor Total          ]=TOTVR
        UnLockRecord

        Moveto "PCFACrig"
        Moveto [Sequencia do Lancamento]

        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]
             If RecordStatus("New")=True
                Then MENSAGEM("O Lancamento deve ter pelo menos 1(um) Item Ok !")
                     QuitLoop
             EndIf
             CHAVEI=9
             FINALIZADO=True
             Tecla_Funcao=""
             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"
               Moveto [Quantidade Produzida ]
               TOTQTD= ImageCSum()

               Moveto [Preco Total          ]
               TOTVR = ImageCSum()

               Moveto "PCFACC"
               [Quantidade_Produzida ]=TOTQTD
               [Valor Total          ]=TOTVR
               SaveTables
               UnlockRecord

               Moveto "PCFACrig"
               Moveto [Sequencia do Lancamento]

               PAGINA("PCFACrig","MR")
               ITEM = [Sequencia do Lancamento]
               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
               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)

;*******************************************************************************
;* 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 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")
                                                 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
                                    Else Mensagem("Referlncia n„o Cadastrada !")
                                         KeyPress "ESC"
                                 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," ") + "//" +
          Completa("Verificar a quantidade da programa‡„o/produ‡”es do corte!",57," ")
                                                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   
                                           Else ACHOU_CORTE = True
                                        EndIf
                                EndIf
                        EndIf              
                EndIf
        EndIF
        If Not ACHOU_CORTE
           Then Mensagem(MSG_CORTE)
                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
       [Preco 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         =[Preco 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
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
     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 CHAVE=1: Titulos("Incluir")
  Case CHAVE=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

AbreTabelas()
PickForm "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 CHAVE=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]*[Preco 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",[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()

CampoAnterior=Field()

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

Moveto [Quantidade Produzida]
TOTQTD= ImageCSum()

Moveto [Preco Total          ]
TOTVR = ImageCSum()

Moveto "PCFACC"
[Quantidade_Produzida ]=TOTQTD
[Valor Total          ]=TOTVR
UnLockRecord

Moveto "PCFACRIG"
Moveto Field CampoAnterior

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
            [Preco Unitario           ]=RegRq["Preco Unitario"]
            [Preco Unitario Tabela    ]=RegRq["Preco Unitario Tabela"]
            [Codigo da Tabela         ]=RegRq["Codigo da Tabela"]

            If [Quantidade Produzida ]>0
               Then [Preco Total]=[Quantidade Produzida ]*[Preco 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

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
    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 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"]
                     Else WS_TITEM = ""
                          WS_DITEM = ""
                          WS_UNI   = ""
                  EndIf
                  Moveto "\\Sistemas\\Estoque\\RqItem"
                  End Down
                  SEQ=SEQ+1
                  [Numero do Lancamento       ]=NUMEROL
                  [Sequencia do Lancamento    ]=SEQ
                  [Codigo da Empresa          ]=[PCFACC->Codigo da Empresa]
                  [Tipo do Item               ]=WS_TITEM
                  [Codigo do Item             ]=CODIGO_ITEM
                  [Descricao do Item          ]=WS_DITEM
                  [Quantidade                 ]=QTD_ITEM    
                  ESTOQUE("ATUALIZAR","E",[PCFACC->Data_Producao],[PCFACC->Codigo da Empresa],CODIGO_ITEM,QTD_ITEM,0)
                  [Unidade Interna            ]=WS_UNI
                  [Custo Unitario             ]=CUSTOMEDIO
                  [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)

                  QTDTOT=QTDTOT+[Quantidade ]
                  VRTOT =VRTOT +[Custo Total]
                  UnLockrecord
                  
                  Moveto [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
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            ]
          ESTOQUE("CUSTO","",[PCFACC->Data_Producao],[PCFACC->Codigo da Empresa],CODIGO_ITEM,0,0)
          [Custo Unitario             ]=CUSTOMEDIO
          [Custo Total                ]=NDecimal(CUSTOMEDIO*[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
        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", "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)
Private OPERACAO, TPMOV, DTREF, COD_EMPRESA, COD_ITEM, ANO, MES, QTDE, CTTOT, 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" Or
     OPERACAO="CUSTO"
     Then CUSTOMEDIO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          If CUSTOMEDIO=0
             Then CUSTOMEDIO=[Ultimo Custo Atual]
          EndIf
          CTTOT=NDecimal(QTDE*CUSTOMEDIO,2)
  EndIf

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

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

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

          QuitLoop
        EndWhile
EndIf
Moveto Tabela
EndProc  ;  (Estoque)

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

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

Moveto "\\Sistemas\\Estoque\\SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
;* Rotina 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":
         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":
         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":
       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()

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

Proc AbreTabelas() 
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"
CoEdit "PCFACC"
EndProc

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoI()
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 CHAVE=9 Then QuitLoop EndIf
  INICIO=False

  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 CHAVE=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 CHAVE=1: Titulos("Incluir")
                    Case CHAVE=0: Titulos("Alterar")
                  EndSwitch
                  Requisicao("Inclusao","")
          EndIf
  EndIf

  Moveto "PCFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf  
EndProc

;*******************************************************************************
;* Rotina Principal                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Show"
SYS_VALOR()
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_VERSAO_SO)       Then SYS_VERSAO_SO="Windows"  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

PARAM_PROGRAMACAO_CORTE = True

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

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

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

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

Release Vars All
Release Procs All
