;** AC_PRODC *******************************************************************
;*  Producao/Retorno Corte                                                     *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/09/2014 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 "PCFACC"
  Moveto [Numero_Producao_Corte]
  NPROD=[Numero_Producao_Corte]
  
  If [Data_Producao] >= VSDGDTINI And [Data_Producao] <= 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_pcfacri=False  
If IsBlank(campocorrente)
   Then If [Situacao_Producao]="FINALIZADA" And INICIO     ;;testar
           Then Mensagem("Ordem "+[Numero_Producao_Corte]+" 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 "Pcfacc"
Moveto [Numero_Producao_Corte]  SetaCorRegistro("Padrao")
Moveto "PCFACrig"   
While True
  Moveto [Sequencia do Lancamento]
  End
  ITEM = [Sequencia do Lancamento]
  Down
  Moveto [Sequencia do Lancamento]
  Seta_Sequencia(ITEM,False)
  If IsLockRecord()
     Then Del
          Loop
  EndIf

  Opcao_Ver=False
  SetaCorRegistro("Editar")
  While true
    Moveto "PCFACrig"
    Moveto [Quantidade Produzida ]
    TOTQTD= ImageCSum()

    Moveto [Preco Total          ]
    TOTVR = ImageCSum()

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

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

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

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

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

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

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

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

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

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

            Moveto "PCFACri"
            UnlockRecord
    EndIf
  EndFor

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

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

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

Moveto "PCFACC"
UnLockRecord
FormKey

Oktit=True
Moveto "\\sistemas\\ctapag\\Titulos"
Moveto [Numero do Lancamento]
If IsBlank([PCFACC->Numero Lancamento Titulos])
    Then If (Tipo="Incluir" or Tipo="Alterar")
            Then Tipo="Incluir"
                 While True
                   End
                   If Numero_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 [PCFACC->Numero Lancamento Titulos]
         If Not RetVal
            Then MSG="O lan‡amento "+[PCFACC->Numero Lancamento Titulos]+" no Contas a Pagar n„o foi encontrado !//"
                 MSG=MSG+"Verificar fechamento mensal no Contas a Pagar Ok !//"
                 MSG=MSG+"Neste caso o estorno ou alter‡„o no Contas a Pagar n„o ser  efefuado !"
                 Mensagem(MSG)
                 oktit=False
            Else
                 Switch
                   Case DESTINO="EXTERNO" And [Sistema Gerador]<>"PC": oktit=False
                   Case [Lancamento Gerador    ]<>[PCFACC->Numero_Producao_Corte]: oktit=False
                   Case [Documento Referente   ]<>(SubStr(DESTINO,1,6)+"/"+[PCFACC->Numero_Producao_Corte]): oktit=False
                 EndSwitch

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

If OkTit And (Tipo="Excluir" or Tipo="Alterar")
   Then If [Saldo do Documento]<>[Valor do Documento]
           Then Oktit=False
                MSG="O estorno ou atualiza‡„o do lan‡amento no Contas a Pagar,//"
                MSG=MSG+"referente a este documento: "+
                    [PCFACC->Codigo da Empresa]+" / "+
                    SubStr(DESTINO,1,6)+" / "+
                    [PCFACC->Numero_Producao_Corte]+"//"
                MSG=MSG+"n„o ser  efetuado, pois o T¡tulo j  teve baixa ! // //"
                MSG=MSG+"Verificar !"
                Mensagem(MSG)
           Else If Tipo="Excluir"
                   Then Del
                EndIf
        EndIf
EndIf

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

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

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

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

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

Moveto "PCFACC"
UnLockRecord
FormKey

EndProc  ; (Titulos)

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

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

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

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

If Not RQ_ENCONTRADA
   Then If Not IsBlank([PCFACC->Lancamento RQCabeca_PCFAC])
           Then
                LimpAguarde()
                MSG="Requisi‡„o de Estoque N. "+[PCFACC->Lancamento RQCabeca_PCFAC]+" 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 "PCFACC"
                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 "PCFACC"
        FormKey
        LimpAguarde()
        Return
EndIf

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

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

SEQ=0
While True
 Moveto "\\Sistemas\\Estoque\\RqCabeca"
 End
 If Not IsBlank([PCFACC->Lancamento RQCabeca_PCFAC]) And SEQ=0
    Then NUMEROL=[PCFACC->Lancamento RqCabeca_PCFAC]
    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     ]=[PCFACC->Codigo da Empresa]
[Tipo de Movimento     ]="E"
[Descricao do Movimento]="ENTRADA"
[Tipo de Operacao      ]="P"
[Descricao da Operacao ]="PRODUCAO"
[Codigo do Documento   ]="PROD"
[Numero do Documento   ]=AlinhM(StrVal([PCFACC->Numero_Producao_Corte    ]),6)
[Data de Ocorrencia    ]=[PCFACC->Data_Producao   ]
[Requisitante          ]=WS_CREQ
[Descricao Requisitante]=WS_DREQ
[Numero do Corte       ]=[PCFACC->Numero_Programacao_Corte]
Controle_Dia()
UnLockrecord

QTDTOT=0
VRTOT =0
SEQ   =0
Moveto "PCFACRI"
Moveto [Numero_Producao_Corte]
Locate [PCFACC->Numero_Producao_Corte    ]
If RetVal
   Then While [Numero_Producao_Corte]=[PCFACC->Numero_Producao_Corte    ]

          CODIGO_ITEM=[Codigo do Item       ]
          CODIGO_ITEM=MudaCodigoPara(CODIGO_ITEM,"S")  
          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          ]=[PCFACC->Codigo da Empresa ]
                  [Tipo do Item               ]=WS_TITEM
                  [Codigo do Item             ]=CODIGO_ITEM
                  [Descricao do Item          ]=WS_DITEM
                  [Quantidade                 ]=QTD_ITEM
                  ESTOQUE("ATUALIZAR", "E", [\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]
                  UnLockrecord
                  
                  ;27.03.2014 Ajustado por Bruno Carvalho
                  Moveto [Numero do Lancamento]
                  Locate NUMEROL, SEQ

                  If PARAM_EXPLODE_MP_PCORT="S"
                     Then Formula()
                  EndIf
                  
                  Moveto "PCFACRI"
          EndIf
          Skip
          If EOT() Then QuitLoop EndIf
        EndWhile
EndIf

Moveto "PCFACRIG"
Moveto [Numero_Producao_Corte]
Locate [PCFACC->Numero_Producao_Corte    ]
If RetVal
   Then While [Numero_Producao_Corte]=[PCFACC->Numero_Producao_Corte    ]
          CODIGO_ITEM=[Codigo do Item       ]

          Moveto "\\Sistemas\\Estoque\\RqItemg"
          End
          Down
          [Numero do Lancamento       ]=NUMEROL
          [Sequencia do Lancamento    ]=[PCFACRIG->Sequencia do Lancamento    ]
          [Codigo da Empresa          ]=[PCFACC->Codigo da Empresa            ]
          [Codigo do Item             ]=[PCFACRIG->Codigo do Item             ]
          [Tipo do Item               ]=[PCFACRIG->Tipo do Item               ]
          [Referencia                 ]=[PCFACRIG->Referencia                 ]
          [Descricao do Item          ]=[PCFACRIG->Descricao do Item          ]
          [Codigo da Cor_Tecido       ]=[PCFACRIG->Codigo da Cor_Tecido       ]
          [Descricao da Cor_Tecido    ]=[PCFACRIG->Descricao da Cor_Tecido    ]
          [Qtd1                       ]=[PCFACRIG->Qtd1                       ]
          [Qtd2                       ]=[PCFACRIG->Qtd2                       ]
          [Qtd3                       ]=[PCFACRIG->Qtd3                       ]
          [Qtd4                       ]=[PCFACRIG->Qtd4                       ]
          [Qtd5                       ]=[PCFACRIG->Qtd5                       ]
          [Qtd6                       ]=[PCFACRIG->Qtd6                       ]
          [Qtd7                       ]=[PCFACRIG->Qtd7                       ]
          [Qtd8                       ]=[PCFACRIG->Qtd8                       ]
          [Qtd9                       ]=[PCFACRIG->Qtd9                       ]
          [Qtd10                      ]=[PCFACRIG->Qtd10                      ]
          [Qtd11                      ]=[PCFACRIG->Qtd11                      ]
          [Qtd12                      ]=[PCFACRIG->Qtd12                      ]
          [Quantidade                 ]=[PCFACRIG->Quantidade Produzida       ]
          [Unidade Interna            ]=[PCFACRIG->Unidade Interna            ]
          [Codigo da Grade            ]=[PCFACRIG->Codigo da Grade            ]
          ESTOQUE("CUSTO", "", [\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
                  
          ;27.03.2014 Ajustado por Bruno Carvalho
          Moveto [Numero do Lancamento]
          Locate NUMEROL, [PCFACRIG->Sequencia do Lancamento]
          
          Moveto "PCFACRIG"
          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 "PCFACC"
[Lancamento RQCabeca_PCFAC]=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)

;*******************************************************************************
;* 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 "PCFACc"
        KeyPress "F7"
        Return False   
EndIf

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

                Result=True
        EndIf
EndIf           
           
Moveto "PCFACc"
KeyPress "F7"

Return Result
EndProc
;*******************************************************************************
;* Rotina p/ arir tabelas                                                      *
;*******************************************************************************
Proc AbreTabelas()

View "P_FAC"
View "\\Sistemas\\Estoque\\RqCabeca"
View "\\Sistemas\\Estoque\\RqItem"
View "\\Sistemas\\Estoque\\RqItemG"
View "\\Sistemas\\Estoque\\RqMatPri"
View "\\Sistemas\\Estoque\\EstqPrm"
View "\\Sistemas\\Estoque\\SdEstq"
View "\\Sistemas\\Estoque\\Itens"
View "\\Sistemas\\Estoque\\Requisit"
View "\\Sistemas\\Producao\\FormulaC"
View "\\Sistemas\\Producao\\FormulaI"
View "\\Sistemas\\CtaPag\\Titulos"
View "PCFACRI"
View "PCFACRIG"
CoEdit "PCFACC"

EndProc ;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_pcfacri            
             Then Gera_PCFACRI()  
                  Switch
                    Case CHAVE=1: Titulos("Incluir")
                    Case CHAVE=0: Titulos("Alterar")
                  EndSwitch        
                  Requisicao("Inclusao")
          EndIf
  EndIf
  Moveto "PCFACC"
EndWhile
If RecordStatus("Locked") Then UnLockRecord EndIf
If OPCAO_FORM="F"
   Then PickForm "F"
EndIf
EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
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 Requisi‡Æo de Produ‡Æo de Corte" 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 "F"
  OPCAO_FORM="F"
  Scan
    NR=NRecords("PCFACC")
    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
