;** RFacG***********************************************************************
;*  Producao/Retorno Faccao/Estamparia                                         *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 26/03/2007 por Anivel Augusto Rodrigues
;Ultima Alteracao: 24/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CODIGO CONTA 0185
;Ultima Alteracao: 29/01/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Requisicao()
;Ultima Alteracao: 24/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes BORDADO
;Ultima Alteracao: 26/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 27/03/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 03/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_RFacRI
;Ultima Alteracao: 15/04/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes gera_rfari
;Ultima Alteracao: 23/05/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Controla_Edicao
;Ultima Alteracao: 18/06/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Retorno TN
;Ultima Alteracao: 07/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Requisicao Estamp/Bordaria 0185
;Ultima Alteracao: 31/07/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Clientes 0003,0200
;Ultima Alteracao: 15/08/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulos
;Ultima Alteracao: 02/10/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PegaItens_Programacao()
;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: 06/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulos
;Ultima Alteracao: 25/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Titulos/Plano de Conta
;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: 24/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Retorno Faccao P ou S
;Ultima Alteracao: 25/03/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes PARAM_ATUA_CAPG
;Ultima Alteracao: 05/04/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Conta<>Empresa
;Ultima Alteracao: 11/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao Lavanderia/Outros
;Ultima Alteracao: 25/09/2009 por Bruno Carvalho
;Motivo Alteracao: C¢digo Conta Caixa Adiconado no Parƒmetro
;Ultima Alteracao: 22/12/2009 por Cleber Alves
;Motivo Alteracao: Ajustes campo Data Competencia
;Ultima Alteracao: 15/01/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ordem consulta cores             
;Ultima Alteracao: 22/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data Competencia Titulos         
;Ultima Alteracao: 14/06/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Gera_Rfacri()     
;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: 25/04/2011 por Karina Andrade
;Motivo Alteracao: Adicionado C¢digo de Barras
;Ultima Alteracao: 27/04/2011 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo Monta_Array_Grade e Ajustes Codigo de Barras
;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 chamada fun‡äes nos itens  
;Ultima Alteracao: 23/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exibir cores em ordem Alfabetica 
;Ultima Alteracao: 23/05/2011 por Bruno Carvalho
;Motivo Alteracao: Ajustes C¢digo de Barras              
;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: 07/07/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Situa‡ao Finalizada ou Suspensa.
;Ultima Alteracao: 16/03/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Requisicao() para DESTINO="OUTROS"
;Ultima Alteracao: 31/07/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes requisi‡Æo retorno lavandeira como semi-acabado         
;Ultima Alteracao: 10/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CDBarras() nÆo usar imagecsum()
;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                   

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

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

  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("RFACC","MR")
                  Else PAGINA("RFACC","MT")
               EndIf
               CHAVE=0
               NPROD   =[Numero_Producao]
               If EDITAR="S"
                  Then If OPCAO_FORM="F"
                          Then PickForm "2"
                       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]
             Locate NPROD
             If Retval
                Then CHAVE=0
                Else CHAVE=1
                     End
                     PgDn PgDn
                     Moveto [Numero_Producao]
                     [Numero_Producao]=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_rfacri=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]
           Else INICIO=False
                If [Destino_Producao]<>"INTERNO" And
                   PARAM_ATUA_CAPG="S"
                   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"
         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,-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"
              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":
                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]
           Case Field()="Data de Vencimento":
                If CHAVE=0
                   Then Undo
                        CHAVE=9
                        QuitLoop
                   Else Moveto [Data_Producao]
                EndIf
           OtherWise:
                Left
           EndSwitch
      Case Retval="PGDN" and CHAVE=0:
           If PARAM_ATUA_CAPG="S"
              Then If ([Destino_Producao]="FACCAO" Or
                       [Destino_Producao]="BORDARIA" Or
                       [Destino_Producao]="ESTAMPARIA" Or
                       [Destino_Producao]="LAVANDERIA" Or
                       [Destino_Producao]="OUTROS") And
                      (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
                      Then Mensagem("Data de Vencimento Inv lida !")
                           Loop
                   EndIf
           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"  :
               If IsBlank([])
                  Then Loop
               EndIf
               If Not BUSCA_LOOKUP("Numero_Programacao",[],"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"])
                       Del
                       CHAVE=9
                       Return
               EndIf
               If Not Carrega_Parametros()
                  Then Loop
               EndIf
               Moveto [Data_Producao]
          Case Field()="Data_Producao"  :  
               If IsBlank([])
                  Then []=Today()
               EndIf

               If ([Destino_Producao]="FACCAO" Or
                   [Destino_Producao]="BORDARIA" Or
                   [Destino_Producao]="ESTAMPARIA" Or
                   [Destino_Producao]="OUTROS") And
                  PARAM_ATUA_CAPG="S"
                  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 PARAM_ATUA_CAPG="S"
                  Then If ([Destino_Producao]="FACCAO" Or
                           [Destino_Producao]="BORDARIA" Or
                           [Destino_Producao]="ESTAMPARIA" Or
                           [Destino_Producao]="LAVANDERIA" Or
                           [Destino_Producao]="OUTROS") And
                          (IsBlank([]) Or [Data de Vencimento]<[Data_Producao])
                          Then Mensagem("Data de Vencimento Inv lida !")
                               Loop
                       EndIf
               EndIf

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

;*******************************************************************************
;* 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",
 "~I~mprimir     ": " [F6]  = Imprimir Entrada Produ‡„o Interna/Externa " :"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 OpcaoP, TABPR, CPGTO, Registro_Tab_Preco,
        Registro_TabPreco_CondPagto, PesqOk

[Codigo da Tabela]=[RFACC->Codigo da Tabela]
CODIT=[Codigo do Item]
TABPR=[RFACC->Codigo da Tabela]
PesqOk     =False

CODIT=PegaCodigoRaiz(CODIT)

Moveto [Lookup_TabPreco_Cliente]
Ativa_Lookup()
Moveto [Codigo da Tabela]
Locate TABPR,[RFACC->Codigo],CODIT
If RetVal
   Then PesqOk=True
   Else KeyPress "ESC"
EndIf

If Not PesqOk
   Then Moveto [Lookup_TabPreco_Item]
        Ativa_Lookup()
        Moveto [Codigo da Tabela]
        Locate TABPR,CODIT
        If RetVal
           Then PesqOk=True
        EndIf
EndIf

If PesqOK
   Then CopyToArray Registro_TabPreco_Item
        KeyPress "ESC"

        [Preco Unitario       ]=Registro_TabPreco_Item["Preco Unitario"]
        [Preco Unitario Tabela]=Registro_TabPreco_Item["Preco Unitario"]
   Else KeyPress "ESC"
        [Preco Unitario       ]=BlankNum()
        [Preco Unitario Tabela]=BlankNum()
EndIf
Return True
EndProc ;(Pega_Preco)

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

Moveto "Rfacrig"
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 "Rfacrig"
        Moveto [Quantidade Produzida ]
        TOTQTD= ImageCSum()

        Moveto [Preco Total          ]
        TOTVR = ImageCSum()

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

        Moveto "Rfacrig"
        Moveto [Sequencia do Lancamento]

        TECLA= "Esc=Retornar  Alt+F=Fun‡”es  PgDn=Finalizar  "
        Prompt TECLA

        Wait Field
           Until "ESC","ENTER","F7","HOME","UP","PGUP","PGDN",
                 "F3",-33,-24,"F6",-25,-18,"F9"
            
        If RetVal=-33
           Then 
                Tecla_Funcao=""
                Echo Normal
                Echo Off
                
                ShowPopup " Fun‡”es " CENTERED
                 "F3  ~V~er Ficha           " : " Ver itens modo Ficha             " : "F3",
                 "F9  ~A~tiva CDBarras      " : " Ativa Leitura Codigo de Barras   " : "F9",
                 Separator,
                 "~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",
                 "~I~mprimir     ": " [F6]  = Imprimir Entrada Produ‡„o Interna/Externa " :"F6",
                 "~C~ancelar     ": " Cancelar a Opera‡„o                  " : "CANCELAR"
                EndMenu
                 To MenuVar
                
                Echo Off
                
                If MenuVar="CANCELAR" or MenuVar="Esc"
                    Then Loop
                EndIf
                
                If MenuVar<>"F3" And MenuVar<>"F9" And MenuVar<>"F6" 
                   Then Tecla_Funcao=NumVal(MenuVar)
                   Else Tecla_Funcao=MenuVar
                EndIf
                RetVal=Tecla_Funcao
        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="F9":
             Del
             OPCHAVEI="CDB"
             CHAVEI=7
             Return     
        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 "Rfacrig"
               Moveto [Quantidade Produzida ]
               TOTQTD= ImageCSum()

               Moveto [Preco Total          ]
               TOTVR = ImageCSum()

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

               Moveto "Rfacrig"
               Moveto [Sequencia do Lancamento]

               PAGINA("Rfacrig","MR")
               ITEM = [Sequencia do Lancamento]
               If EDITAR="S"
                  Then CHAVEI=0
                       Controla_EdicaoI()
                  Else If EXCLUIR="S"
                          Then If QuerExcluir("")
                                  Then EXCLUSAO("Item")
                                       Moveto "Rfacrig"
                                  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      ] = NPROD
                     [Sequencia do Lancamento] = ITEM
                     Locate NPROD,ITEM
             EndIf
             Return
        EndSwitch
  EndWhile
EndWhile
EndProc    ; (ChaveI)

;*******************************************************************************
;* Rotina para Entrada Rapida por Codigo de Barras                             *
;*******************************************************************************
Proc ChaveCdBar()

Moveto [Preco Total          ]   VSVRMERC=ImageCSum()
Moveto [Quantidade Produzida ]   VSQTDE  =ImageCSum()

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

  Opcao_Ver = False  
  SetaCorRegistro("Editar")
  While True
    Item_Ins_Consulta=False

    If Not Ler_CDBarras(22,00) 
       Then Del
            OPCHAVEI="CDC"
            CHAVEI=7
            Return
       Else If Dados_QTD<=0
               Then Mensagem("Quantidade tem que ser > ou = 1 !")
                    Loop
               Else CDBarras()
                    QuitLoop
            EndIf
    EndIf    
  EndWhile  
EndWhile    

EndProc ;ChaveCdBar()

;*******************************************************************************
;* Rotina Monta Aray Grade                                                     *
;*******************************************************************************
Proc Monta_Array_Grade(Tipo)
Private i,tm,ItemPesq,Itok,ContIt,Tipo

If IsBlank([Codigo do Item])
   Then grdant="***"
        For i From 1 to 12
          Array_TM[i]="F"
        EndFor
        Return True
EndIf

ItemPesq=[Codigo do Item]

If [Codigo da Grade]<>grdant
   Then grdant=[Codigo da Grade]
        Moveto [Codigo da Grade]
        If Not Busca_Lookup("Codigo da Grade",[Codigo da Grade],"Item "+ItemPesq+" com defini‡„o de grade incorreta !//Verificar !")
           Then Return False
        EndIf
        
        Array_TM[1] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade1"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item1"]))
        Array_TM[2] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade2"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item2"]))
        Array_TM[3] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade3"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item3"]))
        Array_TM[4] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade4"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item4"]))
        Array_TM[5] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade5"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item5"]))
        Array_TM[6] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade6"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item6"]))
        Array_TM[7] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade7"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item7"]))
        Array_TM[8] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade8"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item8"]))
        Array_TM[9] ="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade9"] ,2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item9"]))
        Array_TM[10]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade10"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item10"]))
        Array_TM[11]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade11"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item11"]))
        Array_TM[12]="F"+Completa(REG_BUSCA_LOOKUP["Titulo Grade12"],2," ") +LTrim(RTrim(REG_BUSCA_LOOKUP["Codigo Item12"]))
Endif

If PARAM_COR_TECIDO="S" And [Tipo do Item]="D"
   Then	Return True
EndIf       

If Tipo<>"Valida"
   Then	Return True
EndIf       

For i From 1 to 12
  Tm=LTrim(RTrim(SuBstr(Array_TM[i],4,2)))
  Switch
    Case Len(Tm)=1 : ItemPesq=SubStr([Codigo do Item],1,9) QuitLoop
    Case Len(Tm)=2 : ItemPesq=SubStr([Codigo do Item],1,8) QuitLoop
  EndSwitch
EndFor
If Len(Tm)=0
   Then Return False
Endif

ItOk=True
Moveto [Codigo do Item]
Ativa_Lookup()
Moveto [Codigo do Item]
Locate Pattern ItemPesq+".."
If Not RetVal
   Then ItOk=False
        Mensagem("Itens "+ItemPesq+".. sem cadastrado !//Verificar !")
   Else ContIt=0
        While True
          Switch
            Case Len(Tm)=1 : vr=SubStr([Codigo do Item],10,1)
            Case Len(Tm)=2 : vr=SubStr([Codigo do Item],09,2)
          EndSwitch
          If vr<>"0" And vr<>"00"
             Then If [Inativo]<>"S"
                     Then For i From 1 to 12
                            If LTrim(RTrim(SuBstr(Array_TM[i],4,2)))=vr
                               Then Array_TM[i]="T"+RTrim(SubStr(Array_TM[i],2,4))
                                    ContIt=ContIt+1
                                    QuitLoop
                            EndIf
                          EndFor
                  EndIf
          EndIf
          Skip
          If EOT()
             Then QuitLoop
          EndIf
          Locate Next Pattern ItemPesq+".."
          If Not Retval
             Then QuitLoop
          EndIf
        EndWhile
        If ContIt=0
           Then Mensagem("Itens "+ItemPesq+".. Inativos//Verificar !")
        EndIf
EndIf
KeyPress "ESC"
Return ItOk
EndProc

;*******************************************************************************
;* Rotina para Leitura do Codigo de Barras                                     *
;*******************************************************************************
Proc CDBarras()
Private Item, ItemNovo, Refer, Cor, Coluna

ITOK=True
[Quantidade Produzida]=Dados_QTD             
CODIGO_BARRA=Dados_Item   

Moveto [Codigo do Item]
Ativa_Lookup()                      
Moveto [Codigo de Barras]
Locate IndexOrder by "cod_barras" CODIGO_BARRA
If RetVal
  Then CopyToArray REG_BUSCA_LOOKUP
       Desc_Item =REG_BUSCA_LOOKUP["Descricao do Item"]
       If [Inativo]="S"                       
          Then KeyPress "ESC"
               Mensagem("Este item: //"+CODIGO_BARRA+"//"+Desc_Item+"// // esta inativo !")
               ITOK=False        
       EndIf
  Else KeyPress "ESC"
       Mensagem("Item n„o cadastrado !")
       ITOK=False
EndIf

KeyPress "ESC"

If Not ITOK
  Then Del
       Return
EndIf
        Item =REG_BUSCA_LOOKUP["Codigo do Item"]
        Refer=REG_BUSCA_LOOKUP["Referencia"]
        Cor  =REG_BUSCA_LOOKUP["Codigo da Cor_Tecido"]

[Codigo do Item]=REG_BUSCA_LOOKUP["Codigo do Item"]
If Not Monta_Array_Grade("")
  Then Del
       Return
EndIf
Del
ItemNovo=True

Scan
 If [Referencia          ]=Refer   And
    [Codigo da Cor_Tecido]=Cor
    Then ItemNovo=False
         QuitLoop
 EndIf        
EndScan

If Not ItemNovo
   Then CHAVEI=0
        VSVRMERC=VSVRMERC-[Preco Total   ]
        VSQTDE  =VSQTDE  -[Quantidade Produzida  ]
   Else While True
         End
         NITEM =[Sequencia do Lancamento]
         Down
         Moveto [Sequencia do Lancamento]
       
         Seta_Sequencia(NITEM,False)
         If IsLockRecord()
            Then Del
                 Loop
         EndIf
         SEQIT=[]
         QuitLoop             
       EndWhile
                  
       CHAVEI=1

       [Codigo do Item  ]=Item
       VSD_I_Codigo_Item =[Codigo do Item]
   
       If Not IsBlank([RFACC->Codigo da Tabela])
        Then Pega_Preco("Novo")
             If [Preco Unitario]<=0
                Then Mensagem("Item sem tabela de pre‡o !")
                     Del
                     Return
             EndIf
       EndIf
     
EndIf        
         
Coluna=0
For i from 1 to 12
 If Len(RTrim(SubStr(Array_TM[i],4,2)))=1
    Then If SubStr(Item,10,1)=SubStr(Array_TM[i],4,1)
            Then Coluna=i
                 QuitLoop
         EndIf
    Else If SubStr(Item,9,2)=SubStr(Array_TM[i],4,2)
            Then Coluna=i
                 QuitLoop
         EndIf
 EndIf
EndFor
    
Switch
 Case Coluna=0 : [Qtd1  ]=[Qtd1  ]+Dados_QTD
 Case Coluna=1 : [Qtd1  ]=[Qtd1  ]+Dados_QTD
 Case Coluna=2 : [Qtd2  ]=[Qtd2  ]+Dados_QTD
 Case Coluna=3 : [Qtd3  ]=[Qtd3  ]+Dados_QTD
 Case Coluna=4 : [Qtd4  ]=[Qtd4  ]+Dados_QTD
 Case Coluna=5 : [Qtd5  ]=[Qtd5  ]+Dados_QTD
 Case Coluna=6 : [Qtd6  ]=[Qtd6  ]+Dados_QTD
 Case Coluna=7 : [Qtd7  ]=[Qtd7  ]+Dados_QTD
 Case Coluna=8 : [Qtd8  ]=[Qtd8  ]+Dados_QTD
 Case Coluna=9 : [Qtd9  ]=[Qtd9  ]+Dados_QTD
 Case Coluna=10: [Qtd10 ]=[Qtd10 ]+Dados_QTD
 Case Coluna=11: [Qtd11 ]=[Qtd11 ]+Dados_QTD
 Case Coluna=12: [Qtd12 ]=[Qtd12 ]+Dados_QTD
EndSwitch
[Quantidade Produzida]=[Quantidade Produzida]+Dados_QTD

Registro_Item("Ler")

;If Not IsBlank([RFACC->Codigo da Tabela])
;  Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
;EndIf   

Registro_Item("Gravar")

VSVRMERC=VSVRMERC+[Preco Total   ]
VSQTDE  =VSQTDE  +[Quantidade Produzida  ]

Sound 400 400

EndProc

;*******************************************************************************
;* 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 For i From 1 To 12
                  Array_TM[i]="F"+SubStr(Array_TM[i],2,5)
                EndFor

                Moveto [Codigo do Item]
                Ativa_Lookup()
                Moveto [Codigo do Item]
                Locate VSD_I_Codigo_Item
                If RetVal
                   Then CODANTERIOR=[Codigo do Item]
                        While SubStr([Codigo do Item],1,8)=
                              SubStr(CODANTERIOR,1,8)
                          For i from 1 to 12
                              If Len(LTrim(RTrim(SubStr(Array_TM[i],4,2))))=2
                                 Then If LTrim(RTrim(SubStr(Array_TM[i],4,2))) = SubStr([Codigo do Item],9,2)
                                         Then Array_TM[i]="T"+SubStr(Array_TM[i],2,5)
                                              QuitLoop
                                      EndIf
                                 Else If LTrim(RTrim(SubStr(Array_TM[i],4,2))) =SubStr([Codigo do Item],10,1)
                                         Then Array_TM[i]="T"+SubStr(Array_TM[i],2,5)
                                              QuitLoop
                                      EndIf
                              EndIf
                          EndFor
                          Skip
                          If EOT() Then QuitLoop EndIf
                        EndWhile
                EndIf
                KeyPress "ESC"

                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 If QuerExcluir("")
                       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
                            If Campo="I_Codigo_Cor_Tecido"  Then Moveto [Codigo da Cor_Tecido ] 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 "Rfacrig"
                    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="P"
                  EndIf   

                  Moveto [Referencia]
                  Locate IndexOrder by "refcor_01" VSD_I_REFERENCIA, tpitemref
                  If RetVal
                     Then VSD_I_Codigo_Item   =[Codigo do Item   ]
                          If [Inativo]="S"
                             Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                                  KeyPress "ESC"
                             Else KeyPress "ESC"
                                  [Codigo do Item       ]=VSD_I_Codigo_Item
                                  [Referencia           ]=VSD_I_REFERENCIA

                                  If Not Monta_Array_Grade("Valida")
                                     Then Campo="I_Codigo_Item"
                                          return
                                  EndIf

                                  Pega_Preco("Novo")
                                  Registro_Item("Ler")
                                  Monta_Opcoes("Codigo da Cor_Tecido","")
                                  RefreshDialog

                                  Moveto "Rfacrig"

                                  If PARAM_COR_TECIDO="S"
                                    Then Campo="I_Codigo_Cor_Tecido"
                                    Else Campo=Avancacampo("I_Qtd0")
                                  EndIf  
                          EndIf
                     Else Mensagem("Referˆncia 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     =""
                          KeyPress "ESC"
                  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 "Rfacrig"
                                 [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="P"
                                 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   ]

                                         If [Inativo]="S"
                                            Then Mensagem("Este item: //"+[Codigo do Item]+"//"+[Descricao do Item]+"// // esta inativo !")
                                                 KeyPress "ESC"
                                            Else KeyPress "ESC"
                                                 [Codigo do Item       ]=VSD_I_Codigo_Item
                                                 [Referencia           ]=VSD_I_REFERENCIA

                                                 If Not Monta_Array_Grade("Valida")
                                                    Then Campo="I_Codigo_Item"
                                                         return
                                                 EndIf

                                                 Pega_Preco("Novo")
                                                 Registro_Item("Ler")
                                                 RefreshDialog

                                                 Moveto "Rfacrig"

                                                 Campo=Avancacampo("I_Qtd0")
                                         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" : Campo=AvancaCampo(Campo)

             Case Campo="I_Custo_Unitario":
                  VSD_I_Custo_Unitario=ControlValue("I_Custo_Unitario")
                  If VSD_I_Quantidade>0 and VSD_I_Custo_Unitario>0
                     Then VSD_I_Custo_Total=VSD_I_Quantidade*VSD_I_Custo_Unitario
                     Else If VSD_I_Custo_Unitario>0
                             Then VSD_I_Custo_Total=VSD_I_Custo_Unitario
                          EndIf
                  EndIf
                  Campo="I_Flag"
             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 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

Return Campo
EndProc

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

Echo Normal
Echo Off

Registro_Item("Ler")
Monta_Array_Grade("")

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 "Rfacri"
     Moveto [Numero_Producao]
     Locate [Rfacc->Numero_Producao]
     If RetVal
        Then While [Numero_Producao]=[Rfacc->Numero_Producao]
               Del
             EndWhile
     EndIf

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

     Moveto "Rfacc"
     If Not IsBlank([RFacc->Codigo da Empresa])
        Then Titulos("Excluir")
             Requisicao("Exclusao")
     EndIf
     Del
Case TIPO="Item":
     Moveto "Rfacrig"
     Del
EndSwitch
EndProc  ; (Exclusao)

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

ntab=table()

Moveto "RFACRIG"
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 Interna/Externa "   :"Program01",
   "~C~ancelar"  : " Cancelar                  "   :"CANCELAR"
EndMenu
To Opcaoc

Echo off

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

Gera_Rfacri()
Switch
  Case CHAVE=1: Titulos("Incluir")
  Case CHAVE=0: Titulos("Alterar")
EndSwitch
Requisicao("Inclusao")
CHAVE=0

NPROD  =[RFACC->Numero_Producao   ]
DESTINO=[RFACC->Destino_Producao  ]
NPROG  =[RFACC->Numero_Programacao]
UnLockRecord
Do_It!

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

gerou_rfacri=True
LoopdoDispositivo=False

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

AbreTabelas()
PickForm "2"
Moveto [Numero_Producao]
Locate NPROD
Return True
EndProc

;*******************************************************************************
;* Rotina Pega Itens da Programacao                                            *
;*******************************************************************************
Proc PegaItens_Programacao()

If IsBlank([RFACC->Numero_Programacao]) Or CHAVE=0
   Then Mensagem("Fun‡„o n„o permitida !")
        Return
EndIf

ShowPopup " Quantidades " CENTERED
     "~1~ com as quantidades": " Carregar com as quantidades da programa‡„o" : "COMQTD",
     "~2~ sem as quantidades": " Carregar sem as quantidades da programa‡„o" : "SEMQTD",
     "~C~ancelar            ": " Cancelar a Opera‡„o                       " : "CANCELAR"
EndMenu
 To MenuVar

If MenuVar="Esc" Or MenuVar="CANCELAR"
   Then Return
EndIf

NPROG=[RFACC->Numero_Programacao]

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

Moveto "PFACRIG"
Moveto [Numero_Programacao]
Locate NPROG
If Retval
   Then While [Numero_Programacao]=NPROG
          CopyToArray REGISTRO_F1

          REGISTRO_F1["Numero_Programacao"   ]=NPROD
          Switch
            Case MenuVar="SEMQTD":
              REGISTRO_F1["Qtd1"                 ]=BlankNum()
              REGISTRO_F1["Qtd2"                 ]=BlankNum()
              REGISTRO_F1["Qtd3"                 ]=BlankNum()
              REGISTRO_F1["Qtd4"                 ]=BlankNum()
              REGISTRO_F1["Qtd5"                 ]=BlankNum()
              REGISTRO_F1["Qtd6"                 ]=BlankNum()
              REGISTRO_F1["Qtd7"                 ]=BlankNum()
              REGISTRO_F1["Qtd8"                 ]=BlankNum()
              REGISTRO_F1["Qtd9"                 ]=BlankNum()
              REGISTRO_F1["Qtd10"                ]=BlankNum()
              REGISTRO_F1["Qtd11"                ]=BlankNum()
              REGISTRO_F1["Qtd12"                ]=BlankNum()
              REGISTRO_F1["Quantidade Programada"]=BlankNum()
              REGISTRO_F1["Preco Total"          ]=BlankNum()
          EndSwitch

          Moveto "RFACRIG"
          End
          Down
          CopyFromArray REGISTRO_F1
          UnLockRecord

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

        EndWhile
   Else Mensagem("Item(s) da programa‡„o n„o localizado(s) !")
EndIf

Moveto "RFACRIG"
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 "RFACC"
[Quantidade_Produzida ]=TOTQTD
[Valor Total          ]=TOTVR
UnLockRecord

Moveto "RFACRIG"
Moveto Field CampoAnterior

EndProc

;*******************************************************************************
;* Rotina Gera Tabela Rfacrig                                                  *
;*******************************************************************************
Proc Gera_Rfacri()
Private codite

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

refant="****"

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

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

  For ic From 1 to 12
    Aguarde("Convertendo produ‡„o modo padr„o")
    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 "Rfacri"
            Moveto [Numero_Producao]
            Locate RegRq["Numero_Producao"],codite
            If Not RetVal
               Then End Down
                    Seq=Seq+1
                    [Numero_Producao          ]=RegRq["Numero_Producao"]
                    [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 "Rfacri"
            UnlockRecord
    EndIf
  EndFor

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

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

DESTINO=[RFACC->Destino_Producao      ]
If PARAM_ATUA_CAPG<>"S" Or
   DESTINO="INTERNO"
   Then Return
EndIf

Moveto "RFACC"
UnLockRecord
FormKey

Oktit=True
Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([RFACC->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 [RFACC->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[RFACC->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="FACCAO"     And [Sistema Gerador]<>"RF": oktit=False
                   Case DESTINO="BORDARIA"   And [Sistema Gerador]<>"RB": oktit=False
                   Case DESTINO="ESTAMPARIA" And [Sistema Gerador]<>"RE": oktit=False
                   Case DESTINO="LAVANDERIA" And [Sistema Gerador]<>"RL": oktit=False
                   Case DESTINO="OUTROS"     And [Sistema Gerador]<>"RO": oktit=False
                   Case [Lancamento Gerador    ]<>[RFACC->Numero_Producao]: oktit=False
                   Case [Documento Referente   ]<>(SubStr(DESTINO,1,6)+"/"+[RFACC->Numero_Producao]): oktit=False
                 EndSwitch

                 If Not OkTit
                    Then MSG="O lan‡amento "+[RFACC->Numero Lancamento Titulos]+" no Contas a Pagar,//"
                         MSG=MSG+"n„o corresponde a esta Produ‡„o ["+StrVal([RFACC->Numero_Producao])+"] !// //"
                         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: "+
                    [RFACC->Codigo da Empresa]+" / "+
                    SubStr(DESTINO,1,6)+" / "+
                    [RFACC->Numero_Producao]+"//"
                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 ]=[RFACC->Numero_Producao     ]
               [Codigo do Emitente  ]=[RFACC->Codigo              ]
               [Tipo do Lancamento  ]="C"
               [Data Competencia    ]=[RFACC->Data_Producao       ]
               [Data de Emissao     ]=[RFACC->Data_Producao       ]
               [Data de Vencimento  ]=[RFACC->Data de Vencimento  ]
               [Data a Pagar        ]=[RFACC->Data de Vencimento  ]
               [Valor do Documento  ]=[RFACC->Valor Total         ]
               [Saldo do Documento  ]=[RFACC->Valor Total         ]
              ;[Taxa de Juros       ]=""
              ;[Tipo Taxa de Juros  ]=""
              ;[NDias Taxa de Juros ]=""
               [Tipo do Pagamento   ]="DN"
              ;[Observacoes         ]=""
               [Codigo da Conta     ]=PARAM_CONTA_CAIXA  
               [Codigo da Empresa   ]=[RFACC->Codigo da Empresa   ]
               Switch
                 Case DESTINO="FACCAO"    : [Sistema Gerador     ]="RF"
                 Case DESTINO="BORDARIA"  : [Sistema Gerador     ]="RB"
                 Case DESTINO="ESTAMPARIA": [Sistema Gerador     ]="RE"
                 Case DESTINO="LAVANDERIA": [Sistema Gerador     ]="RL"
                 Case DESTINO="OUTRTOS"   : [Sistema Gerador     ]="RO"
                 OtherWise                : [Sistema Gerador     ]="RP"
               EndSwitch
               [Lancamento Gerador  ]=[RFACC->Numero_Producao   ]
               [Documento Referente ]=SubStr(DESTINO,1,6)+"/"+[RFACC->Numero_Producao]
               Controle_Dia()
               UnLockRecord

               Moveto "RFACC"
               If IsBlank([Numero Lancamento Titulos])
                  Then [Numero Lancamento Titulos]=SEQ
               EndIF
               UnLockRecord

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

Moveto "RFACC"
UnLockRecord
FormKey
EndProc  ; (Titulos)

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

If [RFACC->Destino_Producao]="ESTAMPARIA" And PARAM_BAIXESTQ_ESTAMP<>"S"
   Then Return
EndIf
If [RFACC->Destino_Producao]="BORDARIA"   And PARAM_BAIXESTQ_BORDAR<>"S"
   Then Return
EndIf
If [RFACC->Destino_Producao]="INTERNO"    And PARAM_BAIXESTQ_PROINT<>"S"
   Then Return
EndIf
If [RFACC->Destino_Producao]="LAVANDERIA" And PARAM_BAIXESTQ_LAVAND<>"S"
   Then Return
EndIf
If [RFACC->Destino_Producao]="OUTROS"     And PARAM_BAIXESTQ_OUTROS<>"S"
   Then Return
EndIf
If PARAM_TPITEM_RETFAC="S"
   Then If [RFACC->Destino_Producao]="FACCAO"     And PARAM_BAIXESTQ_FACCAO<>"S"
           Then Return
        EndIf
EndIf

Aguarde("Gerando requisi‡„o no estoque")

DESTINO=[RFACC->Destino_Producao      ]
NOMDEST=[RFACC->Nome Fantasia EmitDest]
Moveto "RFACC"
UnLockRecord
FormKey

If IsBlank([RFACC->Lancamento RQCabeca_RFACC])
   Then RQ_ENCONTRADA=False
   Else Moveto "\\Sistemas\\Estoque\\RQCabeca"
        Moveto [Numero do Lancamento]
        Locate [RFACC->Lancamento RQCabeca_RFACC]
        If RetVal
           then If [Codigo da Empresa]=[RFACC->Codigo da Empresa]
                   Then RQ_ENCONTRADA=True
                   Else RQ_ENCONTRADA=False
                EndIf
           Else RQ_ENCONTRADA=False
        EndIf
EndIf

If Not RQ_ENCONTRADA
   Then If Not IsBlank([RFACC->Lancamento RQCabeca_RFACC])
           Then
                LimpAguarde()
                MSG="Requisi‡„o de Estoque N. "+[RFACC->Lancamento RQCabeca_RFACC]+" n„o localizada !// //"
                MSG=MSG+"Este lan‡amento n„o ser  corrigido no Estoque !// //"
                MSG=MSG+"Motivos: - Fechamento Mensal do Estoque efetuado;          //"
                MSG=MSG+"         - Empresa da requisi‡„o n„o corresponde;          //"
                MSG=MSG+"         - Algum erro ocorrido no momento deste Lan‡amento.//"
                Mensagem(MSG)

                Moveto "RFACC"
                FormKey
                Return
        EndIf

	 Else NUMEROL=[\Sistemas\Estoque\RQCabeca->Numero do Lancamento]

        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

        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        Del
EndIf

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

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

Switch
  Case DESTINO="INTERNO"    : CODREQ="000002"
  Case DESTINO="FACCAO"     : CODREQ="000003"
  Case DESTINO="ESTAMPARIA" : CODREQ="000004"
  Case DESTINO="BORDARIA"   : CODREQ="000005"
  Case DESTINO="LAVANDERIA" : CODREQ="000006"
  Case DESTINO="OUTROS"     : CODREQ="000007"
EndSwitch

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

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 End
 If Not IsBlank([RFACC->Lancamento RQCabeca_RFACC]) And SEQ=0
    Then NUMEROL=[RFACC->Lancamento RqCabeca_RFACC]
    Else If [Numero do Lancamento]=""
            Then NUMEROL="000001"
            Else NUMEROL=AlinhM(StrVAl(NumVal([Numero do Lancamento])+1),6)
         EndIf
 EndIf
 SEQ=SEQ+1
 Down
 [Numero do Lancamento  ]=NUMEROL
 If IsLockRecord()
    Then Del
         Loop
 EndIf

 QuitLoop
EndWhile
[Codigo da Empresa     ]=[RFACC->Codigo da Empresa]
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"
Switch
  Case DESTINO="FACCAO"  And PARAM_TPITEM_RETFAC="S": [Tipo de Operacao]="D"  [Descricao da Operacao ]="DEVOLUCAO"
  Case DESTINO="FACCAO"  And PARAM_TPITEM_RETFAC="P": [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
  Case DESTINO="INTERNO"                            : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
  OtherWise                                         : [Tipo de Operacao]="D"  [Descricao da Operacao ]="DEVOLUCAO"
EndSwitch

[Codigo do Documento   ]="PROD"
[Numero do Documento   ]=AlinhM(StrVal([RFACC->Numero_Producao    ]),6)
[Data de Ocorrencia    ]=[RFACC->Data_Producao   ]
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
Controle_Dia()
UnLockrecord

QTDTOT=0
VRTOT =0
SEQ   =0
Moveto "RFACRI"
Moveto [Numero_Producao]
Locate [RFACC->Numero_Producao    ]
If RetVal
   Then While [Numero_Producao]=[RFACC->Numero_Producao    ] 
          CODIGO_ITEM=[Codigo do Item]
          Switch
            Case (DESTINO="FACCAO" And PARAM_TPITEM_RETFAC="P") Or
                 (DESTINO="INTERNO"):
                 CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P")

            Case (DESTINO="FACCAO" And PARAM_TPITEM_RETFAC="S") Or
                 (DESTINO="ESTAMPARIA" Or DESTINO="BORDARIA" Or
                  DESTINO="LAVANDERIA" Or DESTINO="OUTROS"):
                 CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")

          EndSwitch

          QTD_ITEM   =[Quantidade Produzida ]

          If QTD_ITEM >0
             Then Moveto "\\Sistemas\\Estoque\\Itens"
                  Moveto [Codigo do Item]
                  Locate CODIGO_ITEM
                  If RetVal
                     Then WS_TITEM=[Tipo do Item     ]
                          WS_DITEM=[Descricao do Item]
                          WS_UNI  =[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          ]=[RFACC->Codigo da Empresa ]
                  [Tipo do Item               ]=WS_TITEM
                  [Codigo do Item             ]=CODIGO_ITEM
                  [Descricao do Item          ]=WS_DITEM
                  [Quantidade                 ]=QTD_ITEM
                  ESTOQUE("ATUALIZAR", "E", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia], [\Sistemas\Estoque\RqCabeca->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]

                  If PARAM_EXPLODE_MP_PFAC="S"
                     Then Formula()
                  EndIf
                  UnLockrecord

                  Moveto "RFACRI"

          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "RFACRIG"
Moveto [Numero_Producao]
Locate [RFACC->Numero_Producao    ]
If RetVal
   Then While [Numero_Producao]=[RFACC->Numero_Producao    ]
          CODIGO_ITEM=[Codigo do Item       ]

          Moveto "\\Sistemas\\Estoque\\RqItemg"
          End
          Down
          [Numero do Lancamento       ]=NUMEROL
          [Sequencia do Lancamento    ]=[RFACRIG->Sequencia do Lancamento    ]   
          [Codigo da Empresa          ]=[RFACC->Codigo da Empresa            ]
          [Codigo do Item             ]=[RFACRIG->Codigo do Item             ]
          [Tipo do Item               ]=[RFACRIG->Tipo do Item               ]
          [Referencia                 ]=[RFACRIG->Referencia                 ]
          [Descricao do Item          ]=[RFACRIG->Descricao do Item          ]
          [Codigo da Cor_Tecido       ]=[RFACRIG->Codigo da Cor_Tecido       ]
          [Descricao da Cor_Tecido    ]=[RFACRIG->Descricao da Cor_Tecido    ]
          [Qtd1                       ]=[RFACRIG->Qtd1                       ]
          [Qtd2                       ]=[RFACRIG->Qtd2                       ]
          [Qtd3                       ]=[RFACRIG->Qtd3                       ]
          [Qtd4                       ]=[RFACRIG->Qtd4                       ]
          [Qtd5                       ]=[RFACRIG->Qtd5                       ]
          [Qtd6                       ]=[RFACRIG->Qtd6                       ]
          [Qtd7                       ]=[RFACRIG->Qtd7                       ]
          [Qtd8                       ]=[RFACRIG->Qtd8                       ]
          [Qtd9                       ]=[RFACRIG->Qtd9                       ]
          [Qtd10                      ]=[RFACRIG->Qtd10                      ]
          [Qtd11                      ]=[RFACRIG->Qtd11                      ]
          [Qtd12                      ]=[RFACRIG->Qtd12                      ]
          [Quantidade                 ]=[RFACRIG->Quantidade Produzida       ]
          [Unidade Interna            ]=[RFACRIG->Unidade Interna            ]
          [Codigo da Grade            ]=[RFACRIG->Codigo da Grade            ]
          ESTOQUE("CUSTO", "", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia], [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, 0, 0)
          [Custo Unitario             ]=CUSTOMEDIO
          [Custo Total                ]=NDecimal(CUSTOMEDIO*[Quantidade],2)
          UnLockrecord
          
          Moveto "RFACRIG"
          Skip
          If EOT() Then QuitLoop EndIf
          
      EndWhile
EndIf          

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

Moveto "RFACC"
[Lancamento RQCabeca_RFACC]=NUMEROL
UnLockRecord
FormKey
LimpAguarde()
EndProc

;*******************************************************************************
;* 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" And [Tipo do Item]<>"D" And [Tipo do Item]<>"C"
             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>15
   Then AJ=15
   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 Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()
Private Result

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 [Rfacc->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_PFAC = [Explosao_MatPrim_ProdFac ]
                PARAM_COR_TECIDO      = [Cor_Tecido               ]
                PARAM_RELATORIO       = [Script_Impressao_ProdFac ]
                PARAM_RELATSALDO      = [Script_Impressao_SaldFac ]
                PARAM_BAIXESTQ_ESTAMP = [Baixar_SemiAcab_Estamp   ]
                PARAM_BAIXESTQ_BORDAR = [Baixar_SemiAcab_Bordar   ]
                PARAM_BAIXESTQ_FACCAO = [Baixar_SemiAcab_Faccao   ]
                PARAM_BAIXESTQ_PROINT = [Baixar_SemiAcab_ProdInt  ]
                PARAM_BAIXESTQ_LAVAND = [Baixar_SemiAcab_Lavand   ]
                PARAM_BAIXESTQ_OUTROS = [Baixar_SemiAcab_Outros   ]
                PARAM_ATUA_CAPG       = [Atualiza_Contas_Pagar    ]
                PARAM_TPITEM_RETFAC   = [Retorno_TpItem_Faccao    ]
                PARAM_CONTA_CAIXA     = [Codigo_Conta_Caixa       ]

                Result=True
        EndIf
EndIf

Moveto "Rfacc"
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 "RFACRI"
View "RFACRIG"
CoEdit "RFACC"
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
OPCHAVEI=""

While Not FINALIZADO
  Tecla_Funcao=BlankNum()
  DIGITA()
  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()="Rfacc"   : Tecla_Funcao=""
             Case Table()="Rfacrig" : Tecla_Funcao=-19
           EndSwitch

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

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

      Case Tecla_Funcao=-18:
           Switch
             Case Table()="Rfacc"   : Tecla_Funcao=""
                                      Mensagem("Fun‡Æo ativa em Rela‡„o de Itens")
             Case Table()="Rfacrig" : Tecla_Funcao=-19
                                      Editar("")
           EndSwitch

      Case Tecla_Funcao=-19:
           While True
            If OPCHAVEI="CDB"
               Then CHAVECDBAR()
                    If CHAVEI=9 Then Quitloop EndIf
                    If CHAVEI=7 Then     Loop EndIf
               Else CHAVEI()
                    If CHAVEI=9 Then QuitLoop EndIf
                    If CHAVEI=7 Then     Loop EndIf
                    Controla_EdicaoI()
            EndIf
           EndWhile
      OtherWise            : QuitLoop
    EndSwitch

  EndWhile

  If Finalizado
     Then If not gerou_rfacri
             Then Gera_Rfacri()
                  Switch
                    Case CHAVE=1: Titulos("Incluir")
                    Case CHAVE=0: Titulos("Alterar")
                  EndSwitch
                  Requisicao("Inclusao")
          EndIf
  EndIf

  Moveto "RFACC"
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"

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

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

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

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
Release Vars All
Release Procs All
