;** AC_PFACG *******************************************************************
;*  Acerto Programcao Faccao/Producao                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 25/02/2015 por Kamila Gomes
;Ultima Alteracao: 30/05/2016 por Bruno Carvalho 
;Motivo Alteracao: Adaptado processo para gera‡Æo do [Numero do Lancamento] "Interno"
;Ultima Alteracao: 06/05/2020 por Bruno Carvalho
;Motivo Alteracao: Alterado Monta_Array_Grade() p/ Array_Monta_Grade() *Bib_Proc

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

While True
  Moveto "PFACC"
  Moveto [Numero_Programacao]
  NPROG=[Numero_Programacao]
  
  If [Data_Programacao] >= VSDGDTINI And [Data_Programacao] <= VSDGDTFIM
     Then CHAVE=0    
     Else CHAVE=9 
          Return
  EndIf
  
  While True
    TECLA=""
  
     If OPCAO_FORM="F"
        Then PickForm "2"
     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_pfacri=False  
If IsBlank(campocorrente)
   Then If [Situacao_Programacao]="FINALIZADA" And INICIO     ;;testar
           Then ;Mensagem("Ordem "+[Numero_Programacao]+" 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
   Else Moveto Field campocorrente
EndIf

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

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

Moveto "Pfacc"
Moveto [Numero_Producao_Corte]  SetaCorRegistro("Padrao")
Moveto "PFACrig"   
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 "PFACrig"
    Moveto [Quantidade Programada]
    TOTQTD= ImageCSum()

    Moveto [Preco Total          ]
    TOTVR = ImageCSum()

    Moveto "PFACC"
    [Quantidade_Programada]=TOTQTD
    [Valor Total          ]=TOTVR
    UnLockRecord

    Moveto "PFACrig"
    Moveto [Sequencia do Lancamento]
    Del
    CHAVEI=9
    FINALIZADO=True
    Tecla_Funcao=""
    Return
  EndWhile
EndWhile
EndProc    ; ChaveI()

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

Aguarde("Convertendo programa‡„o modo padr„o")
Moveto "PFACri"
Moveto [Numero_Programacao]
Locate [PFACc->Numero_Programacao]
If RetVal
   Then While [Numero_Programacao]=[PFACc->Numero_Programacao]
          Del
        EndWhile
EndIf

refant="****"
Seq=0
Moveto "PFACrig"
NR = NIMAGERECORDS()
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Convertendo programa‡„o modo padr„o "+BARRA_STRING)

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

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

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

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

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

            Moveto "PFACri"
            UnlockRecord
    EndIf
  EndFor

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

;*******************************************************************************
;* Atualizacao Requisicao                                                      *
;*******************************************************************************
Proc REQUISICAO(Tipo)
Private NUMEROL, RQ_ENCONTRADA, MES_EST, ANO_EST, CUSTO,
        SEQ, Tipo, CODIGO_ITEM, i, QTD_ITEM,DESTINO,NOMDEST,QTDTOT,VRTOT,TABELA,
        SAIR

        
REQ_DESTINO = ""
SAIR        = False
For Cont_Dest From 1 To DynArraySize(Param_Destino) 
  If Rtrim(SubStr(Param_Destino[Cont_Dest],2,12))=[PFACC->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     

If SAIR
   Then Return
EndIf   

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

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

If IsBlank([PFACC->Lancamento RqCabeca_PFACC])
   Then RQ_ENCONTRADA=False
   Else Moveto "\\Sistemas\\Estoque\\RQCabeca"
        Moveto [Numero do Lancamento]
        Locate [PFACC->Lancamento RqCabeca_PFACC]
        If RetVal
           then If [Codigo da Empresa]=[PFACC->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([PFACC->Lancamento RqCabeca_PFACC])
           Then
                LimpAguarde()
                MSG="Requisi‡„o de Estoque N. "+[PFACC->Lancamento RqCabeca_PFACC]+" 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 "PFACC"
                FormKey
                Return
        EndIf

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

        Moveto "\\Sistemas\\Estoque\\RqItem"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While [Numero do Lancamento]=NUMEROL
                  MES_EST = AlinhM(StrVal(Month([\Sistemas\Estoque\RqCabeca->Data de Ocorrencia])),2)
                  ANO_EST = StrVal(Year([\Sistemas\Estoque\RqCabeca->Data de Ocorrencia]))

                  Moveto "\\Sistemas\\Estoque\\SdEstq"
                  Moveto [Codigo da Empresa]
                  Locate [\Sistemas\Estoque\RqItem->Codigo da Empresa],
                         [\Sistemas\Estoque\RqItem->Codigo do Item], ANO_EST, MES_EST
                  If RetVal
                     Then While True
                            If Not IsLockRecord()
                               Then QuitLoop
                            EndIf
                          EndWhile
                          [Saldo Atual      ]=NDecimal([Saldo Atual      ]+[\Sistemas\Estoque\RqItem->Quantidade ],3)
                          [Custo Total Atual]=NDecimal([Custo Total Atual]+[\Sistemas\Estoque\RqItem->Custo Total],2)
                          If ([Custo Total Atual]/[Saldo Atual])>0
                             Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                          EndIf
                          UnLockRecord
                  EndIf

                  Moveto "\\Sistemas\\Estoque\\RqItem"
                  Del
                EndWhile
        EndIf
        
        Moveto "\\Sistemas\\Estoque\\RqItemg"
        Moveto [Numero do Lancamento]
        Locate NUMEROL
        If RetVal
           Then While [Numero do Lancamento]=NUMEROL
                  Del
                EndWhile
        EndIf
        
        Moveto "\\Sistemas\\Estoque\\RqCabeca"
        Del
EndIf

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

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

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

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 End
 If Not IsBlank([PFACC->Lancamento RqCabeca_PFACC]) And SEQ=0
    Then NUMEROL=[PFACC->Lancamento RqCabeca_PFACC]
    Else Moveto [Numero do Lancamento]
         If Numero_Lancamento("Interno","")
            Then NUMEROL = PROXLANCTO_NLANC
                 Release Vars PROXLANCTO_NLANC
         EndIf
 EndIf
 SEQ=SEQ+1
 Down 
 [Numero do Lancamento  ]=NUMEROL
 If IsLockRecord()
    Then Del
         Loop
 EndIf

 QuitLoop
EndWhile
[Codigo da Empresa     ]=[PFACC->Codigo da Empresa]
[Tipo de Movimento     ]="S"
[Descricao do Movimento]="SAIDA"
[Tipo de Operacao      ]="C"
[Descricao da Operacao ]="CONSUMO"
[Codigo do Documento   ]="PROG"
[Numero do Documento   ]=AlinhM(StrVal([PFACC->Numero_Programacao ]),6)
[Data de Ocorrencia    ]=[PFACC->Data_Programacao]
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
[Numero do Corte       ]=[PFACC->Numero_Corte]
Controle_Dia()
UnLockrecord

QTDTOT=0
VRTOT =0
SEQ   =0
For i From 1 to 2
  If i=1
     Then Moveto "PFACRI"
     Else Moveto "PFACRIG"
  EndIf
  If Recno()=0 Then Loop EndIf

  Moveto [Numero_Programacao]
  Locate [PFACC->Numero_Programacao]
  While [Numero_Programacao]=[PFACC->Numero_Programacao]
    If i=1
       Then CODIGO_ITEM=[Codigo do Item]
            CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")
            QTD_ITEM=[Quantidade Programada]

           MES_EST = AlinhM(StrVal(Month([PFACC->Data_Programacao])),2)
           ANO_EST = StrVal(Year([PFACC->Data_Programacao]))

           While True
             Moveto "\\Sistemas\\Estoque\\SdEstq"
             Moveto [Codigo da Empresa]
             Locate [PFACC->Codigo da Empresa ],
                    CODIGO_ITEM, ANO_EST, MES_EST
             If Not RetVal
                Then Cria_Ficha([PFACC->Codigo da Empresa ],CODIGO_ITEM,False)
                     Loop
             EndIf
             If IsLockRecord()
                Then Loop
             EndIf

             CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
             If CUSTO<=0
                Then CUSTO=[Ultimo Custo Atual]
             EndIf
             [Saldo Atual      ]=NDecimal([Saldo Atual]-QTD_ITEM,3)
             [Custo Total Atual]=NDecimal([Custo Total Atual]-(QTD_ITEM*CUSTO),2)
             If ([Custo Total Atual]/[Saldo Atual])>0
                Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
             EndIf
             UnLockRecord

             QuitLoop
           EndWhile

           While True
             Moveto "\\Sistemas\\Estoque\\EstqPrm"
             Moveto [Codigo da Empresa]
             Locate [PFACC->Codigo da Empresa], CODIGO_ITEM
             If Not RetVal
                Then End Down
                     [Codigo da Empresa   ]=[PFACC->Codigo da Empresa ]
                     [Codigo do Item      ]=CODIGO_ITEM
                     UnLockRecord
                     Loop
             EndIf
             If IsLockRecord()
                Then Loop
             EndIf
             If [PFACC->Data_Programacao]>[Data da Ultima Saida]
                Then [Data da Ultima Saida]=[PFACC->Data_Programacao]
             EndIf

             UnLockRecord
             QuitLoop
           EndWhile

           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          ]=[PFACC->Codigo da Empresa ]
           [Tipo do Item               ]=WS_TITEM
           [Codigo do Item             ]=CODIGO_ITEM
           [Descricao do Item          ]=WS_DITEM
           [Quantidade                 ]=QTD_ITEM
           [Unidade Interna            ]=WS_UNI
           [Custo Unitario             ]=CUSTO
           [Custo Total                ]=NDecimal(CUSTO*[Quantidade],2)

           QTDTOT=QTDTOT+[Quantidade ]
           VRTOT =VRTOT +[Custo Total]  
           UnLockrecord
           
           ;27.03.2014 Ajustado por Bruno Carvalho
           Moveto [Numero do Lancamento]
           Locate NUMEROL, SEQ
      Else

           MES_EST = AlinhM(StrVal(Month([PFACC->Data_Programacao])),2)
           ANO_EST = StrVal(Year([PFACC->Data_Programacao]))

           While True
             Moveto "\\Sistemas\\Estoque\\SdEstq"
             Moveto [Codigo da Empresa]
             Locate [PFACC->Codigo da Empresa ],
                    [PFACRIG->Codigo do Item  ], ANO_EST, MES_EST
             If Not RetVal
                Then Cria_Ficha([PFACC->Codigo da Empresa ],[PFACRIG->Codigo do Item  ], ANO_EST, MES_EST,False)
                     Loop
             EndIf
             If IsLockRecord()
                Then Loop
             EndIf

             CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
             If CUSTO<=0
                Then CUSTO=[Ultimo Custo Atual]
             EndIf
             QuitLoop
           EndWhile

           Moveto "\\Sistemas\\Estoque\\RqItemg"
           End
           Down
           [Numero do Lancamento       ]=NUMEROL
           [Sequencia do Lancamento    ]=[PFACRIG->Sequencia do Lancamento    ]   
           [Codigo da Empresa          ]=[PFACC->Codigo da Empresa            ]
           [Codigo do Item             ]=[PFACRIG->Codigo do Item             ]
           [Tipo do Item               ]=[PFACRIG->Tipo do Item               ]
           [Referencia                 ]=[PFACRIG->Referencia                 ]
           [Descricao do Item          ]=[PFACRIG->Descricao do Item          ]
           [Codigo da Cor_Tecido       ]=[PFACRIG->Codigo da Cor_Tecido       ]
           [Descricao da Cor_Tecido    ]=[PFACRIG->Descricao da Cor_Tecido    ]
           [Qtd1                       ]=[PFACRIG->Qtd1                       ]
           [Qtd2                       ]=[PFACRIG->Qtd2                       ]
           [Qtd3                       ]=[PFACRIG->Qtd3                       ]
           [Qtd4                       ]=[PFACRIG->Qtd4                       ]
           [Qtd5                       ]=[PFACRIG->Qtd5                       ]
           [Qtd6                       ]=[PFACRIG->Qtd6                       ]
           [Qtd7                       ]=[PFACRIG->Qtd7                       ]
           [Qtd8                       ]=[PFACRIG->Qtd8                       ]
           [Qtd9                       ]=[PFACRIG->Qtd9                       ]
           [Qtd10                      ]=[PFACRIG->Qtd10                      ]
           [Qtd11                      ]=[PFACRIG->Qtd11                      ]
           [Qtd12                      ]=[PFACRIG->Qtd12                      ]
           [Quantidade                 ]=[PFACRIG->Quantidade Programada      ]
           [Unidade Interna            ]=[PFACRIG->Unidade Interna            ]
           [Codigo da Grade            ]=[PFACRIG->Codigo da Grade            ]
    
           [Custo Unitario             ]=CUSTO
           [Custo Total                ]=NDecimal(CUSTO*[Quantidade],2)
           UnLockrecord
           
           ;27.03.2014 Ajustado por Bruno Carvalho
           Moveto [Numero do Lancamento]
           Locate NUMEROL, [PFACRIG->Sequencia do Lancamento]             
    EndIf

    If i=1
       Then Moveto "PFACRI"
       Else Moveto "PFACRIG"
    EndIf
    Skip
    If EOT() Then QuitLoop EndIf
  EndWhile
EndFor

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

Moveto "PFACC"
[Lancamento RQCabeca_PFACC]=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 [Baixa_Automatica]="N"
   Then Moveto "\\Sistemas\\Estoque\\RqItem"
        Return
EndIf

Moveto "\\Sistemas\\Producao\\FormulaI"
Moveto [Codigo do Produto]
Locate [\Sistemas\Estoque\RqItem->Codigo do Item],"",""
If RetVal
   Then While [Codigo do Produto]=[\Sistemas\Estoque\RqItem->Codigo do Item]
          If Not IsBlank([Codigo do Material]) And [Item_Baixa_Automatica]="S" And
             [Tipo do Item]<>"S"  
             Then Moveto "\\Sistemas\\Estoque\\RqMatPri"
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL,SEQ,[\Sistemas\Producao\FormulaI->Sequencia]
                  If Not RetVal
                     Then End Down
                          [Numero do Lancamento   ]=NUMEROL
                          [Sequencia do Item      ]=SEQ
                          [Sequencia Materia Prima]=[\Sistemas\Producao\FormulaI->Sequencia]
                  Endif
                  [Codigo da Empresa  ]=[\Sistemas\Estoque\RqCabeca->Codigo da Empresa]
                  [Codigo do Item     ]=[\Sistemas\Producao\FormulaI->Codigo do Material]
                  UNIDADE=([\Sistemas\Estoque\RqItem->Quantidade]/[\Sistemas\Producao\Formulac->Quantidade Produzida])
                  [Quantidade         ]=NDecimal(UNIDADE*[\Sistemas\Producao\FormulaI->Quantidade],3)
                  ESTOQUE("ATUALIZAR", "S", [\Sistemas\Estoque\RqCabeca->Data de Ocorrencia],
                          [Codigo da Empresa], [Codigo do Item], UNIDADE, 0)
                  [Custo Unitario     ]=CUSTOMEDIO
                  [Custo Total        ]=Round([Quantidade]*[Custo Unitario],2)
                  [Codigo CCusto      ]=[\Sistemas\Estoque\RqItem->Codigo CCusto]
                  UnLockRecord
                  Moveto "\\Sistemas\\Producao\\FormulaI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf
Moveto "\\Sistemas\\Estoque\\RqItem"
EndProc  ;  (Formula)

;*******************************************************************************
;* Entrada e Saida de Estoque                                                  *
;*******************************************************************************
Proc ESTOQUE(OPER,TPMOV,CODITEM,QTD,VR)
Private OPER,COD_EMPRESA,TPMOV,CODITEM,QTD,VR

COD_EMPRESA=[RqCabeca->Codigo da Empresa]

MES=ALINHM(StrVal(Month([RqCabeca->Data de Ocorrencia])),2)
ANO=ALINHM(StrVal(Year([RqCabeca->Data de Ocorrencia])),4)

Moveto "SdEstq"
Moveto [Codigo da Empresa]
Locate COD_EMPRESA, CODITEM, ANO, MES
If Not RetVal
   Then Cria_Ficha(COD_EMPRESA,CODITEM,False)
EndIf
While True
  If IsLockRecord()
     Then Loop
  EndIf

  If TPMOV="E"
     Then [Saldo Atual      ]=NDecimal([Saldo Atual]+QTD,3)
          [Custo Total Atual]=NDecimal([Custo Total Atual]+VR,2)
     Else [Saldo Atual      ]=NDecimal([Saldo Atual]-QTD,3)
          [Custo Total Atual]=NDecimal([Custo Total Atual]-VR,2)
  EndIf
  If ([Custo Total Atual]/[Saldo Atual])>0
     Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
  EndIf

  If OPER="IncAlt" And TPMOV="E"
     Then CUSTO=[Preco de Custo        ]
  EndIf

  UnLockRecord

  QuitLoop
EndWhile

If OPER="IncAlt" And TPMOV="S"
   Then While True
          Moveto "EstqPrm"
          Moveto [Codigo da Empresa]
          Locate COD_EMPRESA, [RqItem->Codigo do Item]
          If Not RetVal
             Then End Down
                  [Codigo da Empresa   ]=COD_EMPRESA
                  [Codigo do Item      ]=[RqItem->Codigo do Item]
                  UnLockRecord
                  Loop
          EndIf
          If IsLockRecord()
             Then Loop
          EndIf
          If [RqCabeca->Data de Ocorrencia]>[Data da Ultima Saida]
             Then [Data da Ultima Saida]=[RqCabeca->Data de Ocorrencia]
          EndIf
          UnLockRecord

          QuitLoop
        EndWhile
EndIf
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_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 [Pfacc->Codigo da Empresa]
        If Not RetVal
           Then Mensagem("Parametros n„o Cadastrado para esta Empresa !")
                Result=False
           Else PARAM_EMPRESA         = [Codigo_Empresa           ]
                PARAM_COR_TECIDO      = [Cor_Tecido               ]
                PARAM_RELATORIO       = [Script_Impressao_ProgFac ]
                Result=True
        EndIf
EndIf             
            
Moveto "P_DESTI"
Moveto [Codigo da Empresa]

If [PFACC->Numero_Corte]<>""
   Then Locate [PFACC->Codigo da Empresa],[PFACC->Destino_Producao]
   Else Locate [PFACC->Codigo da Empresa]
EndIf
   
If RetVal
   Then Cont_Dest = 0
        DynArray Param_Destino[]
        While [Codigo da Empresa]=[PFACC->Codigo da Empresa] And [Destino]=[PFACC->Destino_Producao] 
          Cont_Dest = Cont_Dest + 1
          Param_Destino[Cont_Dest]=Format("W1,AL",[Baixa Estoque])+Format("W12",[Destino])+Format("W12",[Codigo do Requisitante])
          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   

Moveto "Pfacc"
KeyPress "F7"

Return Result

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

View NoWindow "P_FAC"
View NoWindow "\\Sistemas\\Cadastro\\Destinat" ImageRights ReadOnly
View NoWindow "\\Sistemas\\Estoque\\RqCabeca"
View NoWindow "\\Sistemas\\Estoque\\RqItem"
View NoWindow "\\Sistemas\\Estoque\\RqItemg"
View NoWindow "\\Sistemas\\Estoque\\RqMatpri"
View NoWindow "\\Sistemas\\Estoque\\EstqPrm"
View NoWindow "\\Sistemas\\Estoque\\SdEstq"
View NoWindow "\\Sistemas\\Estoque\\Itens"
View NoWindow "\\Sistemas\\Estoque\\Requisit"
View NoWindow "\\Sistemas\\Producao\\FormulaC"
View NoWindow "\\Sistemas\\Producao\\FormulaI"
View NoWindow "P_DESTI"
View NoWindow "PFACRI"
View NoWindow "PFACRIG"
CoEdit "PFACC"

EndProc ;AbreTabelas()

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

  If Finalizado
     Then If Not gerou_pfacri            
             Then Gera_PFACRI()  
                  Requisicao("Inclusao")
          EndIf
  EndIf
  Moveto "PFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* 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_CHAPA_USUARIO)   Then SYS_CHAPA_USUARIO="9999" 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
                                  
VCITENS   =BlankNum()
VSQTDE    =BlankNum()
VSVRMERC  =BlankNum()
VSDGDTINI =BlankDate()
VSDGDTFIM =BlankDate()


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

While True
  ShowDialog "Acerto de Programa‡Æo de Fac‡Æ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 09 Width 56

    Label  @ 01,04 "Per¡odo Referente" For "TG_DTINI"
    Label  @ 02,04 "de" For "TG_DTINI"
    Accept @ 02,08 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTINI" To VSDGDTINI
    Label  @ 02,21 "at‚" For "TG_DTFIM"
    Accept @ 02,26 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTFIM" To VSDGDTFIM

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

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  AbreTabelas() 
  PickForm "2"
  ;---- Ocultar Campos Linkados no Form --------------------
  Moveto "Cfacrig"   SetHighLight Current Record 51 Field 51
  Moveto "Pcfacrig"  SetHighLight Current Record 51 Field 51
  Moveto "Pfacri"    SetHighLight Current Record 51 Field 51
  Moveto "Pfacc"
  
  PickForm "F"
  OPCAO_FORM="F"
  Scan
    NR=NRecords("PFACC")
    Barra(NR, RecNo())
    Aguarde("Aguarde, Corrigindo "+Completa(StrVal(Recno())+"/"+StrVal(NR),9," ")+BARRA_STRING)
    CHAVE()
    If CHAVE=0 Then Controla_EdicaoC() EndIf    
  EndScan
  Do_It!
  ClearAll
  MENSAGEM("Opera‡Æo Finalizada !")
EndWhile
Release Vars All
Release Procs All 
