;** AC_RFACG *******************************************************************
;*  Acerto Produ‡Ćo de Confec‡Ćo                                               *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 16/10/2017 por Bruno Carvalho
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc

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

While True
  Moveto "RFACC"
  Moveto [Numero_Producao]
  NPROD=[Numero_Producao]

  CHAVE=0
  While True
    TECLA=""
  
    If OPCAO_FORM="F"
       Then If PRODUCAO2
               Then PickForm "3" 
               Else PickForm "2"
            EndIf   
    EndIf
         
     If IsLockRecord()
        Then If OPCAO_FORM="F"
                Then PickForm "F"
             EndIf
             QuitLoop
    EndIf                
    Return
  EndWhile
EndWhile
EndProc  ;CHAVE()

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

MSGCAMPO=""
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]
                ANT_PROG = [Numero_Programacao]
                ANT_PROC = [Numero_Corte]
           Else INICIO=False
                If [Destino_Producao]<>"INTERNO" And [Codigo]<>"0001" And PARAM_ATUA_CAPG="S" 
                   Then CapoAnt = Field()
                        Moveto [Data de Vencimento]
                        If [Numero_Corte]<>"" And PRODUCAO2
                           Then Moveto Field CapoAnt
                        EndIf
                EndIf
        EndIf        
   Else Moveto Field campocorrente
EndIf

While True
  FINALIZADO=True
  OPCAO=""
  QuitLoop
EndWhile
EndProc

;*******************************************************************************
;* Rotina para Verificar a Situa‡Ćo da Programa‡Ćo                             *
;*******************************************************************************
Proc Verifica_Situacao_Programacao()
Private PROG,AUX_TAB,MSG,SITUACAO,NPROD

If [Rfacc->Numero_Programacao]=""
   Then Return
EndIf

MSG   = ""
PROG  = [Rfacc->Numero_Programacao]
NPROD = [Rfacc->Numero_Producao]
UnLockRecord
Do_It!
ClearAll
  
{Ask} {Rfacc}                        
Moveto [Numero_Producao      ] Example "NProd"
Moveto [Numero_Programacao   ] TypeIn "~PROG"

{Ask} {Rfacri}
Moveto [Numero_Producao      ] Example "NProd"
Moveto [Codigo do Item       ] Check
Moveto [Quantidade Produzida ] TypeIn "Calc Sum as Quantidade Produzida"
Moveto [Quantidade Programada] TypeIn "Calc Sum as Quantidade Programada"
Do_it!
ClearAll

If Not IsEmpty("Answer")
   Then AUX_TAB = Cria_Temp(PrivDir())
        Copy "Answer" AUX_TAB
        
        {Ask} TypeIn AUX_TAB Enter  
        Moveto [Quantidade Programada] TypeIn "Changeto Blank"
        Do_It!
        ClearAll
        
        ;---- Programa‡Ćo da Confec‡Ćo ----------------------------------------- 
        {Ask} {Pfacri}
        Moveto [Numero_Programacao   ] TypeIn "~PROG"
        Moveto [Codigo do Item       ] Check
        Moveto [Quantidade Programada] TypeIn "Calc Sum as Quantidade Programada"
        Do_it!
        Clearall

        {Ask} {Answer}
        Moveto [Codigo do Item       ] Example "CodItem"
        Moveto [Quantidade Programada] Example "QtdProg"
        {Ask} TypeIn AUX_TAB Enter TypeIn "Fast Insert" Enter
        Moveto [Codigo do Item       ] Example "CodItem"
        Moveto [Quantidade Programada] Example "QtdProg"
        Do_it!
        Clearall

        {Ask} TypeIn AUX_TAB Enter
        Moveto [Codigo do Item       ] Check
        Moveto [Quantidade Produzida ] TypeIn "Calc Sum as Quantidade Produzida"
        Moveto [Quantidade Programada] TypeIn "Calc Sum as Quantidade Programada"
        Do_it!
        Clearall

        Delete AUX_TAB
        ;----- Verifica se a programa‡Ćo foi completamente finalizada -----
        Edit "Answer" 
        Scan
          If [Quantidade Programada]-[Quantidade Produzida]=0 
             Then [Quantidade Programada]=BlankNum()
          EndIf
        EndScan
        Do_it!
        Clearall

        {Ask} {Answer} TypeIn "Fast Delete"
        Moveto [Quantidade Programada] TypeIn "Blank"
        Do_it!
        ClearAll
        
        If IsEmpty("Answer")
           Then SITUACAO = "FINALIZADA" 
           Else SITUACAO = "PROGRAMADA"
        EndIf
        
        CoEdit "Pfacc"
        Moveto [Numero_Programacao]
        Locate PROG
        If RetVal
           Then [Situacao_Programacao] = SITUACAO           
           Else MSG = "Programa‡„o "+PROG+" n„o localizada!" 
        EndIf 
        Do_it!
        ClearAll
        
EndIf

;---- Finaliza‡Ćo da Verifica‡Ćo ----------------------------------   
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()

If Not PRODUCAO2
   Then Array Array_TM[12]
        grdant="***"
EndIf

AbreTabelas()
Moveto "RFACC"
Moveto [Numero_Producao]
Locate NPROD
PickForm "F"   

If MSG<>""
   Then Mensagem(MSG)
EndIf

EndProc ;Verifica_Situacao_Programacao()

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

If PRODUCAO2
   Then Moveto "Rfacrir"
        Calc_Itens()   
   Else Moveto "Rfacrig"
EndIf
   
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
    Calc_Itens()
    
    Moveto "RFACC"
    [Quantidade_Produzida ]=TOTQTD
    [Valor Total          ]=TOTVR
    UnLockRecord

    If PRODUCAO2
       Then Moveto "Rfacrir"
       Else Moveto "Rfacrig" 
    EndIf  
    Moveto [Sequencia do Lancamento]
    Del
    CHAVEI=9
    FINALIZADO=True
    Tecla_Funcao=""
    Return
  EndWhile
EndWhile
EndProc    ; ChaveI()

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

Aguarde("Convertendo produ‡„o "+[Rfacc->Numero_Producao]+" modo padr„o")

refant="****"
Seq=0

Switch                                 
  Case PARAM="" :
       Moveto "Rfacri"
       Moveto [Numero_Producao]
       Locate [Rfacc->Numero_Producao]
       If RetVal
          Then While [Numero_Producao]=[Rfacc->Numero_Producao] 
                  Del
               EndWhile
       EndIf       
       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 Array_Monta_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
  Case PARAM="Producao_Corte" :
       Moveto "Rfacri"
       Moveto [Numero_Producao]
       Locate [Rfacc->Numero_Producao]
       If RetVal
          Then While [Numero_Producao]=[Rfacc->Numero_Producao] 
                  Del
               EndWhile
       EndIf
       
       Moveto "Rfacrir"                        
       NR = NIMAGERECORDS()
       Scan
         Barra(NR, RecNo())
         Aguarde("Aguarde, Convertendo produ‡„o modo padr„o "+BARRA_STRING)
       
         CopyToArray RegRq
         Qtd    = RegRq["Quantidade Produzida"]
         codite = MudaCodigoPara(RegRq["Codigo do Item"],"P")
           
         If Qtd>0
            Then Moveto "Rfacri"
                 End Down
                 Seq=Seq+1
                 [Numero_Producao          ] = RegRq["Numero_Producao"]
                 [Codigo do Item           ] = codite
                 [Lookup_Itens             ] = [Codigo do Item]
                 [Quantidade Produzida     ] = RegRq["Quantidade Produzida"]
                 [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        
         EndIf
         UnlockRecord
         Moveto "Rfacrir"
       EndScan
EndSwitch  

CHAVEF=8

EndProc ;Gera_Rfacri(()

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

If PRODUCAO2
   Then DESTINO="PRODUCAO"
   Else DESTINO=[RFACC->Destino_Producao]
EndIf

If Not IsAssigned(PARAM_ATUA_CAPG)
   Then GetRecord "\\Sistemas\\Faccao\\P_Fac" [Rfacc->Codigo da Empresa] To EMPRESA
        If RetVal
           Then PARAM_ATUA_CAPG = EMPRESA["Atualiza_Contas_Pagar"]
           Else Return
        EndIf
EndIf           
   
If PARAM_ATUA_CAPG<>"S" Or DESTINO="INTERNO" Or [Rfacc->Codigo]="0001"
   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_Lancamento("Interno","")
                      Then SEQ = PROXLANCTO_NLANC
                           Release Vars PROXLANCTO_NLANC
                   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 For wi From 1 To DynArraySize(Param_Destino)+2        
                   Switch
                     Case wi-1 = DynArraySize(Param_Destino)-1 :        
                       If [Lancamento Gerador]<>[RFACC->Numero_Producao]
                          Then oktit=False
                               QuitLoop
                       EndIf        
                     Case wi   = DynArraySize(Param_Destino)   :         
                       If [Documento Referente]<>(SubStr(DESTINO,1,6)+"/"+[RFACC->Numero_Producao])
                          Then oktit=False
                               QuitLoop
                       EndIf
                     Case Not IsAssigned(Param_Destino[wi])    : QuitLoop        
                     OtherWise                                 :
                      If SubStr(Param_Destino[wi],2,12)=DESTINO And DESTINO<>"INTERNO"
                         Then [Sistema Gerador]=Rtrim(SubStr(Param_Destino[wi],26,2))
                              oktit=False
                              QuitLoop
                      EndIf   
                   EndSwitch   
                 EndFor
                 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         ]
               [Tipo do Pagamento   ]="DN"
               [Codigo da Conta     ]=PARAM_CONTA_CAIXA  
               [Codigo da Empresa   ]=[RFACC->Codigo da Empresa   ]
               
               For wi From 1 To DynArraySize(Param_Destino)        
                 If SubStr(Param_Destino[wi],2,12)=DESTINO And DESTINO<>"INTERNO"
                    Then [Sistema Gerador]=Rtrim(SubStr(Param_Destino[wi],26,2))
                         QuitLoop
                 EndIf      
               EndFor
               
               [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,NLancto)
Private NUMEROL, RQ_ENCONTRADA, SEQ, Tipo, i,
        CODIGO_ITEM, QTD_ITEM, CTO_ITEM, DESTINO, NOMDEST, CODREQ,
        QTDTOT, VRTOT, SAIR, TIPO_BE, TabAnt,NLancto

SAIR        = False
TIPO_BE     = ""

If Not PRODUCAO2
   Then For Cont_Dest From 1 To DynArraySize(Param_Destino) 
        If Rtrim(SubStr(Param_Destino[Cont_Dest],2,12))=[RFACC->Destino_Producao] 
           Then REQ_DESTINO = Rtrim(SubStr(Param_Destino[Cont_Dest],13,12))
                If Rtrim(SubStr(Param_Destino[Cont_Dest],1,1))<>"S" 
                   Then SAIR=True
                        QuitLoop  
                EndIf
        EndIf
      EndFor
EndIf           

If SAIR 
   Then Return 
EndIf

If PRODUCAO2 And Tipo<>"Exclusao"
    Then TabAnt = Table()
         Calc_Itens()
         Moveto TabAnt
         If VSQTDE=0 Or VSQTDE=BlankNum()
            Then Return 
         EndIf 
EndIf

Aguarde("Gerando requisi‡„o no estoque")
If Not PRODUCAO2
   Then DESTINO=[RFACC->Destino_Producao      ]
        NOMDEST=" "+[RFACC->Nome Fantasia EmitDest]
   Else DESTINO = "PRODUCAO"
        NOMDEST = ""     
EndIf

If Not PRODUCAO2
   Then Moveto "RFACRIG"
        Moveto [Sequencia do Lancamento]
        TOT_ITEMG = ImageCCount()
EndIf           

Moveto "RFACC"
UnLockRecord
FormKey

If NLancto <> "NOVO"
   Then MSG_REQUISICAO = ""
        RQ_ENCONTRADA  = False
        If Not IsBlank([RFACC->Lancamento RQCabeca_RFACC])
           Then 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 If (NumVal(Month(Today())) > 3 And NumVal(Year(Today())) >= 2016) And 
                                   (NumVal(Month([Rfacc->Data_Producao])) > 3 And NumVal(Year([Rfacc->Data_Producao])) >= 2016)
                                   Then If (([Sistema Gerador]="RF" Or [Sistema Gerador]="RR") And [Lancamento Gerador]=[RFACC->Numero_Producao]) Or
                                           ([Lancamento Gerador]="" And [Sistema Gerador]="MG") Or
                                           ([Lancamento Gerador]="" And [Sistema Gerador]="MA")
                                           Then RQ_ENCONTRADA=True
                                           Else MSG_REQUISICAO="Requisi‡„o de Estoque N. "+[RFACC->Lancamento RQCabeca_RFACC]+" n„o pertence a essa produ‡ao do corte !////"
                                                Switch
                                                  Case [Sistema Gerador]="PC" : SISTEMA_GERADOR = "PROD CORTE"
                                                  Case [Sistema Gerador]="PF" : SISTEMA_GERADOR = "PROG INT_EXT" 
                                                  Case [Sistema Gerador]="RF" : SISTEMA_GERADOR = "PROD INT_EXT"
                                                  Case [Sistema Gerador]="RR" : SISTEMA_GERADOR = "PROD INT_EXT"
                                                  OtherWise                   : SISTEMA_GERADOR = [Sistema Gerador]
                                                EndSwitch   
                                                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" |   SISTEMA GERADOR: "+SISTEMA_GERADOR,71," ")+"//"
                                                MSG_REQUISICAO=MSG_REQUISICAO+Completa(" |LANCAMENTO GERADOR: "+[Lancamento Gerador],71," ")+"//"
                                        EndIf
                                   Else ;---- At‚ 03.2016 ----------------------
                                        RQ_ENCONTRADA=True        
                                EndIf              
                        EndIf
                EndIf
        EndIf
   Else RQ_ENCONTRADA  = True        
EndIf

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

                Moveto "RFACC"
                FormKey
                Return
        EndIf
	 Else If NLancto <> "NOVO"
           Then If NLancto=""
                   Then NUMEROL = [\Sistemas\Estoque\RQCabeca->Numero do Lancamento]
                   Else NUMEROL = NLancto     
                EndIf           
                For i From 1 To 3
                  Switch
                    Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
                    Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
                    Case i=3: Moveto "\\Sistemas\\Estoque\\RqItemg"
                  EndSwitch
        
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL
                  If RetVal
                     Then While [Numero do Lancamento]=NUMEROL
                            CODIGO_ITEM=[Codigo do Item]
                            QTD_ITEM   =[Quantidade    ]
                            CTO_ITEM   =[Custo Total   ]
                            
                            Switch
                              Case i=1: ESTOQUE("ESTORNAR", "S", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                                                [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, CTO_ITEM)
                              Case i=2: ESTOQUE("ESTORNAR", "E", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                                                [\Sistemas\Estoque\RqCabeca->Codigo da Empresa], CODIGO_ITEM, QTD_ITEM, CTO_ITEM)
                            EndSwitch
                            Switch
                              Case i=1: Moveto "\\Sistemas\\Estoque\\RqItem"
                              Case i=2: Moveto "\\Sistemas\\Estoque\\RqMatPri"
                              Case i=3: Moveto "\\Sistemas\\Estoque\\RqItemg"
                            EndSwitch
                            Del
                          EndWhile
                  EndIf
                EndFor
        
                If NLancto=""
                   Then Moveto "\\Sistemas\\Estoque\\RqCabeca"
                        Del   
                EndIf 
          Else Moveto "RFACC"
               [Lancamento RQCabeca_RFACC]=""
        EndIf
EndIf

If Tipo="Exclusao"
   Then Moveto "RFACC"
        FormKey
        Return
EndIf

WS_CREQ = ""
WS_DREQ = DESTINO+NOMDEST

If Not PRODUCAO2
   Then CODREQ  = REQ_DESTINO 
EndIf   

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

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 If Not IsBlank([RFACC->Lancamento RQCabeca_RFACC]) And SEQ=0
    Then NUMEROL=[RFACC->Lancamento RqCabeca_RFACC]
         Moveto [Numero do Lancamento]
         Locate NUMEROL
         If Not RetVal
            Then End Down
                 [Numero do Lancamento] = NUMEROL  
                 PostRecord KeyViol LeaveLocked
         EndIf   
    Else If Not ProximaOrdem()
            Then Mensagem("N„o foi possivel gerar a requisi‡„o!")
                 Return
         EndIf 
 EndIf
 SEQ=SEQ+1
 QuitLoop                        
EndWhile
;---- Cabe‡a -------------------------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
TIPO_REQUISICAO = "PROD"
AUX_COD         = ""
AUX_DES         = ""
If [RFACC->Codigo]<>"" And TIPO_REQUISICAO="IND"
   Then GetRecord "\\Sistemas\\Cadastro\\Destinat" [RFACC->Codigo] To REG_CLIENTE
        If RetVal
           Then ;If REG_CLIENTE["Tipo"]<>"E"
                ;   Then TIPO_REQUISICAO = "IND"
                ;EndIf
                AUX_COD = REG_CLIENTE["Codigo"]
                AUX_DES = REG_CLIENTE["Nome Fantasia EmitDest"]
           Else Mensagem("Verificar a Requi‡Ćo "+StrVal(NUMEROL)+"//"+
                         [RFACC->Codigo]+" "+[RFACC->Nome Fantasia EmitDest]+" n„o localizado no cadastro de clientes!")     
        EndIf
EndIf
[Codigo da Empresa     ]=[RFACC->Codigo da Empresa]
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"

If TIPO_REQUISICAO="IND"
   Then [Tipo de Operacao      ]="I"
        [Descricao da Operacao ]="INDUSTRIALIZADO"
        [Codigo                ]=AUX_COD
        [Nome Fantasia EmitDest]=AUX_DES
   Else Switch 
          Case DESTINO="FACCAO"      : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
          Case DESTINO="INTERNO"     : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
          Case DESTINO="PRODUCAO"    : [Tipo de Operacao]="P"  [Descricao da Operacao ]="PRODUCAO"
          OtherWise                  : [Tipo de Operacao]="D"  [Descricao da Operacao ]="DEVOLUCAO"
        EndSwitch
EndIf
[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
[Numero do Corte        ]=[RFACC->Numero_Corte]
If PRODUCAO2
   Then [Sistema Gerador]="RR"
   Else [Sistema Gerador]="RF"
EndIf   
[Lancamento Gerador     ]=[RFACC->Numero_Producao]
Controle_Dia()
SaveTables

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

If PRODUCAO2
   Then Moveto "Rfacrir"
   Else Moveto "Rfacri"
EndIf

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

If PRODUCAO2
   Then TOT_ITEMG = TOT_ITEM 
EndIf   
              
Moveto [Numero_Producao]
Locate [RFACC->Numero_Producao]
If RetVal
   Then While [Numero_Producao]=[RFACC->Numero_Producao] 
          CONT_SEQ = CONT_SEQ + 1   
          Barra(TOT_ITEM, CONT_SEQ)
          Aguarde("Aguarde, inserindo itens na requisi‡ao "+NUMEROL+" "+BARRA_STRING)
          CODIGO_ITEM=[Codigo do Item]
          
          If PRODUCAO2
             Then CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P")
             Else Switch
                    Case DESTINO="FACCAO" Or DESTINO="INTERNO" :
                         CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"P")
                    Case DESTINO<>"FACCAO" And DESTINO<>"INTERNO" :
                         CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")
                  EndSwitch
          EndIf    
          QTD_ITEM   =[Quantidade Produzida]

          If QTD_ITEM >0
             Then GetRecord "\\Sistemas\\Estoque\\Itens" CODIGO_ITEM To REG_ITEM 
                  If RetVal
                     Then WS_TITEM = REG_ITEM["Tipo do Item"]
                          WS_DITEM = REG_ITEM["Descricao do Item"]
                          WS_UNI   = REG_ITEM["Unidade Interna"]
                     Else WS_TITEM = ""
                          WS_DITEM = ""
                          WS_UNI   = ""
                  EndIf

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

                  QTDTOT=QTDTOT+[Quantidade ]
                  VRTOT =VRTOT +[Custo Total]
                  UnLockrecord
                  
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL, SEQ
                  
                  If PARAM_EXPLODE_MP_PFAC="S" 
                     Then Formula()
                  EndIf
                  
                  If Not PRODUCAO2
                     Then Moveto "RFACRI"
                     Else Moveto "Rfacrir"
                  EndIf    

          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

;---- Itens de Grade -----------------------------------------------------------
If Not PRODUCAO2
   Then CONT_SEQ = 0
        Moveto "RFACRIG"
        Moveto [Numero_Producao]
        Locate [RFACC->Numero_Producao    ]
        If RetVal
           Then While [Numero_Producao]=[RFACC->Numero_Producao    ]
                  CONT_SEQ = CONT_SEQ + 1   
                  Barra(TOT_ITEMG, CONT_SEQ)
                  Aguarde("Aguarde, inserindo itens na requisi‡ao "+NUMEROL+" "+BARRA_STRING)      
                  
                  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", "", [RFACC->Data_Producao],[RFACC->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          
EndIf

;---- Complementos da Cabe‡a ---------------------------------------------------
Moveto "\\Sistemas\\Estoque\\RqCabeca"
Moveto [Numero do Lancamento]
Locate NUMEROL
If RetVal
   Then [Quantidade Total         ]=QTDTOT
        [Valor Total              ]=VRTOT
        UnLockRecord
EndIf
        
Release Vars REG_CLIENTE,REG_ITEM
Moveto "RFACC"
[Lancamento RQCabeca_RFACC]=NUMEROL
UnLockRecord

FormKey

EndProc

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Calc_Itens()

If PRODUCAO2
   Then Moveto "Rfacrir"                                                     
        Moveto [Quantidade Programada] VSQTDP =ImageCSum()
        Moveto [Quantidade Produzida ] VSQTDE =ImageCSum()
        Moveto [Preco Total          ] TOTVR  =ImageCSum()
        
        If VSQTDP = 0 Then VSQTDP = BlankNum() EndIf
        If VSQTDE = 0 Then VSQTDE = BlankNum() EndIf
        If TOTVR  = 0 Then TOTVR  = BlankNum()  EndIf
                         
        VSQTDD = VSQTDE-VSQTDP
        TOTQTD = VSQTDE 

   Else Moveto "Rfacrig"
        Moveto [Quantidade Produzida   ] TOTQTD = ImageCSum()
        Moveto [Preco Total            ] TOTVR  = ImageCSum()
                     
        If TOTQTD = 0 Then TOTQTD = BlankNum() EndIf
        If TOTVR  = 0 Then TOTVR  = BlankNum() EndIf
EndIf
        
EndProc   ;Calc_Itens()

;*******************************************************************************
;* Rotina para Calculos                                                        *
;*******************************************************************************
Proc Acerta_Item()

If PRODUCAO2
   Then [Diferenca  ]=[Quantidade Produzida]-[Quantidade Programada]
        [Preco Total]=BlankNum()
        
        If [Diferenca]=0
           Then [Diferenca]=BlankNum()
        EndIf
        
        If [Quantidade Produzida]=0
           Then [Quantidade Produzida]=BlankNum()
        EndIf
        
        If [Quantidade Produzida]>0
           Then [Preco Total] = [Quantidade Produzida]*[Preco Unitario]
        EndIf
   Else [Quantidade_Diferenca]=([Quantidade_Expedida]-[Quantidade_Pedido])+[Quantidade_Substituida]
   
        If [Quantidade_Diferenca]=0
           Then [Quantidade_Diferenca]=BlankNum()
        EndIf
        If [Quantidade_Diferenca]>0
           Then [Quantidade_Fora_Pedido]=[Quantidade_Diferenca]
           Else [Quantidade_Fora_Pedido]=BlankNum()
        EndIf
   
        If [Quantidade_Expedida]=0
           Then [Quantidade_Expedida]=BlankNum()
        EndIf 
        
       If [Quantidade_Substituida]=0
          Then [Quantidade_Substituida]=BlankNum()
       EndIf

       If IsBlank([ExpedC->Numero do Pedido])
          Then [Quantidade_Diferenca  ]=BlankNum()
               [Quantidade_Fora_Pedido]=BlankNum()
               [Quantidade_Substituida]=BlankNum()
       Endif 
EndIf

UnLockRecord

EndProc ;Acerta_Item()

;*******************************************************************************
;* ImpressĆo de erros localizados                                              *
;*******************************************************************************
Proc Imprime_Erros()

If Not IsAssigned(CONT_LINHA) Or CONT_LINHA >= 65
   Then if IsAssigned(CONT_LINHA) And CONT_LINHA>=65
           Then Print File ARQIMP "\f"
        EndIf   
        Print File ARQIMP Chr(27)+Chr(120)+Chr(48)+Chr(15)
        Print File ARQIMP "\n\n"
        Print File ARQIMP Spaces(2)+Fill("-",132) + "\n"
        Print File ARQIMP Spaces(2)+Format("W132,AC","SEM FORMULA CADASTRADA") + "\n"
        Print File ARQIMP Spaces(2)+Fill("-",132) + "\n\n"
        Print File ARQIMP Spaces(2)+"                                          "+"\n"
        Print File ARQIMP Spaces(2)+"Producao Item                                      "+"\n"
        Print File ARQIMP Spaces(2)+"-------- ---------- ------------------------------ "+"\n"
        CONT_LINHA = 9
EndIf        

Print File ARQIMP Spaces(2)+Format("W9",NPROD)+
                            Format("W11",[\Sistemas\Estoque\RqItem->Codigo do Item])+
                            Format("W30",[\Sistemas\Estoque\RqItem->Descricao do Item])+"\n"
CONT_LINHA = CONT_LINHA + 1   

EndProc ;Imprime_Erros()

;*******************************************************************************
;* Verifica Formula de Materia Prima                                           *
;*******************************************************************************
Proc FORMULA()
Private UNIDADE,TIPO_ITEM,FAZ_ROTINA

Moveto "\\Sistemas\\Producao\\FormulaC"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If Not RetVal
  Then Imprime_Erros()
       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]
          FAZ_ROTINA = False
          If Not IsBlank([Codigo do Material]) And [Item_Baixa_Automatica]="S"
             Then If [Tipo do Item]<>"D" And [Tipo do Item]<>"C" 
                     Then FAZ_ROTINA = True
                  EndIf
          EndIf    
          
          If FAZ_ROTINA
             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 Imprime_Erros()
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 para Carregar Parametros                                             *
;*******************************************************************************
Proc Carrega_Parametros()
Private Result

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

If IsEmpty("P_Fac")
   Then Mensagem("N„o esta Configurado os Parametros para Digita‡„o !")
        Result=False
   Else UnLockRecord
        KeyPress "F7"
        While True
          If Not IsLockRecord()
             Then QuitLoop
          EndIf
        EndWhile
        
        Moveto "P_Fac"
        Moveto [Codigo_Empresa]
        Locate [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_ATUA_CAPG       = [Atualiza_Contas_Pagar    ]
                PARAM_CONTA_CAIXA     = [Codigo_Conta_Caixa       ]

                Result=True
        EndIf
EndIf           
           
If Not PRODUCAO2
   Then Moveto "P_DESTI"
        Moveto [Codigo da Empresa]
        Locate [Rfacc->Codigo da Empresa],[Rfacc->Destino_Producao]
        If RetVal
           Then Cont_Dest = 0
                DynArray Param_Destino[]
                While [Codigo da Empresa]=[Rfacc->Codigo da Empresa] And [Destino]=[Rfacc->Destino_Producao] 
                  Cont_Dest = Cont_Dest + 1
                  Moveto "P_FacD"
                  Moveto [Destino]
                  Locate [Rfacc->Destino_Producao] 
                  If RetVal 
                     Then SG = [Sistema Gerador]
                     Else SG = "" 
                  EndIf  
                  Moveto "P_DESTI" 
                  Param_Destino[Cont_Dest]=Format("W1,AL",[Baixa Estoque])+Format("W12",[Destino])+Format("W12",[Codigo do Requisitante])+Format("W2",SG)
                  Skip
                  If Eot() Then QuitLoop EndIf
                EndWhile 
           Else Release Vars Param_Destino
                Mensagem("Parametros de Destinos n„o Cadastrado para esta Empresa !")
                Result=False
        EndIf   
EndIf

Moveto "Rfacc"
KeyPress "F7"

Return Result
EndProc

;*******************************************************************************
;* Rotina p/ abrir tabelas                                                     *
;*******************************************************************************
Proc AbreTabelas()

RFACRIG = Cria_Temp(PrivDir())
Copy "Rfacrig" RFACRIG 

View "P_FAC"
View "P_Destc"
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 NoWindow "P_FacD"
View NoWindow "P_DESTI"

View "CFACRI"
View "PCFACRI"
View "PFACRI"
View "RFACRI"
View "Rfacrir"

View "PFACRIG"
View "Rfacrig"
View RFACRIG

View "PCFACC"
CoEdit "RFACC"

If PRODUCAO2     
   Then Moveto "CFACRI"   SetaCorRegistro("Invisivel")
        Moveto "PFACRI"   SetaCorRegistro("Invisivel")
        Moveto "RFACRI"   SetaCorRegistro("Invisivel")
        Moveto "PCFACRI"  SetaCorRegistro("Invisivel")
        Moveto "RFACRIG"  SetaCorRegistro("Invisivel")
        Moveto "PCFACC"   SetaCorRegistro("Invisivel")    
   Else Moveto "RFACRI"   SetaCorRegistro("Invisivel")
        Moveto "PFACRIG"  SetaCorRegistro("Invisivel")
        Moveto "RFACRIR"  SetaCorRegistro("Invisivel") 
EndIf  

EndProc ;AbreTabelas()

;*******************************************************************************
;* Rotina para controlar Edicao do registro                                    *
;*******************************************************************************
Proc Controla_EdicaoC()
FINALIZADO=False
OPCHAVEI=""

While Not FINALIZADO
  Tecla_Funcao=BlankNum()
  DIGITA()
  INICIO=False

  If Finalizado
     Then If Not gerou_rfacri
             Then If PRODUCAO2 
                     Then Gera_Rfacri("Producao_Corte")
                     Else Gera_Rfacri("")
                  EndIf   
                  Verifica_Rotina = True
                  If PRODUCAO2
                     Then Verifica_Rotina = False
                  EndIF
                  If Verifica_Rotina
                     Then Switch
                            Case CHAVE=1: Titulos("Incluir")
                            Case CHAVE=0: Titulos("Alterar")
                          EndSwitch
                  EndIf        
                  Requisicao("Inclusao","")
                  Verifica_Situacao_Programacao()
          EndIf
  EndIf
  Moveto "RFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* Gera Backup das tabelas envolvidas                                          *
;*******************************************************************************
Proc Backup()  

ConfGeral("Deseja realizar BACKUP das produ‡äes de confec‡„o e requisi‡”es?")
If Ok="S"
   Then Aguarde("Gerando backup da tabela RFACC")
        Copy "\\Sistemas\\Faccao\\Rfacc"     "\\Sistemas\\Faccao\\Bk_Rfacc"
        Aguarde("Gerando backup da tabela RFACRIG")
        Copy "\\Sistemas\\Faccao\\Rfacrig"   "\\Sistemas\\Faccao\\Bk_Rfacg"
        Aguarde("Gerando backup da tabela RFACRIR")
        Copy "\\Sistemas\\Faccao\\Rfacrir"   "\\Sistemas\\Faccao\\Bk_Rfacr"
        Aguarde("Gerando backup da tabela RQCABECA")
        Copy "\\Sistemas\\Estoque\\RqCabeca" "\\Sistemas\\Estoque\\Bk_RqC"
        Aguarde("Gerando backup da tabela RQITEM")
        Copy "\\Sistemas\\Estoque\\Rqitem"  "\\Sistemas\\Estoque\\Bk_RqI"
        Aguarde("Gerando backup da tabela RQITEMG")
        Copy "\\Sistemas\\Estoque\\RqitemG"  "\\Sistemas\\Estoque\\Bk_RqIg"
EndIf
  
EndProc ;Backup()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp = True
TECLA    =""
MSG_CAMPO=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = -59: Dialog_F1()
          If Campo="TG_OPDEST"
             Then Seleciona_Opcoes("Op‡”es de Desinat rio","7,9")
          EndIf
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_DTINI"         : Campo="NO"
            Case Campo="TG_DTFIM"         : Campo="TG_DTINI"
            Case Campo="YES" Or Campo="NO": Campo="TG_DTINI"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or 
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
           SYS_TECLA_ACIONADA=Evento["KeyCode"]
           Seta_Tecla_Acionada()
           CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_DTINI"      : Campo="TG_DTFIM"
                    Case Campo="TG_DTFIM"      : Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
MSG_CAMPO=""
TECLA=""
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

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

DUPLICIDADE_PROG_CORTE = True
PERMITIR_ITENS_MAIOR_PROGR = True
                       
VCITENS =BlankNum()
VSQTDE  =BlankNum()
VSVRMERC=BlankNum()                                  

VSDGDTINI =BlankDate()
VSDGDTFIM =BlankDate()

If Not PRODUCAO2
   Then Array Array_TM[12]
        grdant="***"
EndIf

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

While True
  ShowDialog "Acerto de Produ‡Ćo da Confec‡Ćo" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
   @ 05,12   Height 07 Width 56

    Label  @ 00,01 "Perˇodo Referente" For "TG_DTINI"
    Label  @ 01,01 "de" For "TG_DTINI"
    Accept @ 01,05 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 01,18 "at‚" For "TG_DTFIM"
    Accept @ 01,23 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  
  Backup()

  ARQIMP=PrivDir()+"AC_RFACG.Txt"
  If IsFile(ARQIMP)
     Then Deleta_Arquivo(ARQIMP)                                                 
  EndIf
  
  AbreTabelas()
  Moveto "RFACC"
    
  PickForm "F"
  OPCAO_FORM="F"
  Scan for [Data_Producao] >= VSDGDTINI And [Data_Producao] <= VSDGDTFIM
    Barra(NRecords("RfaCC"), RecNo())
    Aguarde("Aguarde, corrigindo produ‡„o "+[Numero_Producao]+" "+BARRA_STRING)
    
    FormKey
    PRODUCAO2 = False 
    Moveto "Rfacrir"
    Moveto [Numero_Producao]
    Locate [Rfacc->Numero_Producao]
    If RetVal
       Then PRODUCAO2 = True
    EndIf   
    Moveto "RFACC"
  
    CHAVE()
    If CHAVE=0 Then Controla_EdicaoC() EndIf
  EndScan
  Do_It!
  ClearAll
  
  If IsFile(ARQIMP)
     Then PDFZEBRA=False
          DISPOSITIVO_OPCAO="V"
          MENSAGEM("Opera‡Ćo Finalizada!//Ser  impresso uma rela‡„o com itens de f˘rmula n„o cadastrados!")
          ImpriArq(ARQIMP)
          
          Deleta_Arquivo(ARQIMP)
     Else MENSAGEM("Opera‡Ćo Finalizada !")     
  EndIf
EndWhile

LimpAguarde()
Release Vars All
Release Procs All 
