;** RM_3000 ********************************************************************
;*  Posicao Estoque/Pedidos/Compras/Explosao                                   *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 30/07/2014 por Bruno Carvalho
;Ultima Alteracao: 01/10/2015 por Bruno Carvalho  
;Motivo Alteracao: Incluido "I" no [Tipo de Operacao] para fornecer registros quando for requisi‡äes de 
;Ultima Alteracao: 28/10/2015 por Bruno Carvalho
;Motivo Alteracao: Adicionado Identifica_MesAno_Periodo() e adicionado parte do processo Seleciona_Estoque() na proc Seleciona_NotaC()
;Ultima Alteracao: 01/02/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado Monta_Dir_Trab() quando ‚ feito o Verifica_Mov(), p/ resgatar o primeiro dia do mˆs anterior e o ultimo dia do mˆs posterior
;Ultima Alteracao: 29/04/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes fator conversao Itens compra
;Ultima Alteracao: 17/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ExplosÆo Op‡„o Itens da Formula      
;Ultima Alteracao: 19/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" p/ os campos [Vendagem] e [Situacao] 
;Ultima Alteracao: 27/05/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ExplosÆo Op‡„o Itens da Formula      
;Ultima Alteracao: 21/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog.                  
;Ultima Alteracao: 13/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Æo para Impostos 
;Ultima Alteracao: 22/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_CODMODELO, TG_CODMODELO_COMCASASDECIMAIS
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado SetaVisualizarCasasDecimais(),ConfigOpcoes()
;Ultima Alteracao: 29/05/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado ValidarModelosRelatorios()
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc

;*******************************************************************************
;* Rotina p/ Verificar se existe movimentacao no mes em aberto/fechado         *
;*******************************************************************************
Proc Verifica_Mov()
ClearAll

;*** Notas de Saida/Faturamento ***
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
   Then {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Numero do Documento      ] Check
        Moveto [Serie do Documento       ] Check
        Moveto [Data de Saida            ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Do_It!
        ClearAll
        If Not IsEmpty("Answer")
           Then MSG_MODULO=MSG_MODULO+" - "+Dir_Trab+"//"
                PROCESSAR_DADOS=False
        EndIf
EndIf

;*** Notas de Entrada/Estoque ***
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
        Moveto [Numero do Lancamento     ] Check
        Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
        Moveto [Data de Entrada          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Do_It!
        ClearAll
        If Not IsEmpty("Answer")
           Then MSG_MODULO=MSG_MODULO+" - "+Dir_Trab+"//"
                PROCESSAR_DADOS=False
        EndIf
EndIf

;*** Requisicoes/Estoque ***
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Check
        Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
        Moveto [Data de Ocorrencia       ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Do_It!
        ClearAll
        If Not IsEmpty("Answer")
           Then MSG_MODULO=MSG_MODULO+" - "+Dir_Trab+"//"
                PROCESSAR_DADOS=False
        EndIf
EndIf

EndProc    ; (Verifica_Mov)

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc FiltraPedidos()

TabelaRP=Cria_Temp(PrivDir())
AGUARDE("Aguarde, Filtrando pedidos")
{Ask} {RPedidos}
Moveto [Numero do Pedido] Check
Do_It!

Rename "Answer" TabelaRP
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Seleciona_NotaC()

ClearAll
AGUARDE("Aguarde, selecionando saidas")

;*** Faturamento ***
For ii From 1 To CONT_REGRA
  For I From 1 To 2
    If Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") Or
       Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
       Then Loop
    EndIf
    {Ask} {\\Sistemas\\Estoque\\Iten_Com}
    Moveto [Codigo do Item         ] Example "cite"
    Moveto [Situacao               ] TypeIn VSDGSITITEM
    {Ask} {\\Sistemas\\Estoque\\Itens}
    Moveto [Codigo do Item         ] Example "cite"
    Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
    Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
    Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
    Moveto [Tipo do Item           ]
    Switch
       Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
       Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
       Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
            If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
       OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
    EndSwitch
  
    {Ask} {\\Sistemas\\Vendas\\Destin}
    Moveto [Codigo da Destinacao     ] Example "destin"
    Moveto [Atualiza Estoque         ] TypeIn "S"
    {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
    Moveto [Codigo da Empresa        ] Check Example "emp" TypeIn ", ~VSDGEMPRESA.."
    Moveto [Numero do Documento      ] Example "doc"
    Moveto [Serie do Documento       ] Example "ser"
    Moveto [Codigo da Destinacao     ] Example "destin"
    Switch
      Case i=1: Moveto [Tipo Movimento Estoque   ] TypeIn "S"
      Case i=2: Moveto [Tipo Movimento Estoque   ] TypeIn "E"
    EndSwitch
    Switch
      Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
      Case REGRA_DATA_ESTOQUE = "Transicao" : If ii=1
                                                Then Moveto [Data de Emissao] TypeIn "<~AUX_DTINI" 
                                                     Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                Else Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                              EndIf
      Case REGRA_DATA_ESTOQUE = "Nova"      : Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
    EndSwitch
    Moveto [Situacao                 ] TypeIn "Not C"
    {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
    Moveto [Codigo da Empresa        ] Example "emp"
    Moveto [Numero do Documento      ] Example "doc"
    Moveto [Serie do Documento       ] Example "ser"
    Moveto [Codigo do Item           ] Check Example "cite"
    Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
    Moveto [Situacao_Item            ] TypeIn "Not C"
    Do_It!
    ClearAll
  
    Switch
      Case i=1: Adiciona_Dados("SAIDAS")
      Case i=2: Adiciona_Dados("ENTRADAS")
    EndSwitch
  EndFor
EndFor

EndProc ;Seleciona_NotaC()

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Seleciona_Estoque()

ClearAll
AGUARDE("Aguarde, selecionando entradas/saidas")

If VSDGOPOF="S"  And Dir_Trab="" And IsTable("\\Sistemas\\Vendas\\FaturaC")
   Then For I From 1 To 2
          {Ask} {\\Sistemas\\Estoque\\Iten_Com}
          Moveto [Codigo do Item         ] Example "cite"
          Moveto [Situacao               ] TypeIn VSDGSITITEM
          {Ask} {\\Sistemas\\Estoque\\Itens}
          Moveto [Codigo do Item         ] Example "cite"
          Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
          Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
          Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
          Moveto [Tipo do Item           ]
          Switch
             Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
             Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
             Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                  If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
             OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
          EndSwitch

          ;*** Ordem de Faturamento ***
          {Ask} {\\Sistemas\\Vendas\\Destin}
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Atualiza Estoque         ] TypeIn "S"
          {Ask} {\\Sistemas\\Vendas\\FaturaC}
          Moveto [Numero da OF             ] Example "doc"
          Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          If i=1
             Then Moveto [Tipo Movimento Estoque   ] TypeIn "S"
             Else Moveto [Tipo Movimento Estoque   ] TypeIn "E"
          EndIf
          Moveto [Numero Nota Gerada       ] TypeIn "Blank"
          {Ask} {\\Sistemas\\Vendas\\FaturaI}
          Moveto [Numero da OF             ] Example "doc"
          Moveto [Codigo do Item           ] Check Example "cite" 
          Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
          Do_It!
          ClearAll

          If i=1
             Then Adiciona_Dados("SAIDAS")
             Else Adiciona_Dados("ENTRADAS")
          EndIf
        EndFor
        
        ;*** Ordem de Faturamento de Entrada/Troca ***
        {Ask} {\\Sistemas\\Estoque\\Iten_Com}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Situacao               ] TypeIn VSDGSITITEM
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
        Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
        Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
        Moveto [Tipo do Item           ]
        Switch
           Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
           Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        EndSwitch
        {Ask} {\\Sistemas\\Vendas\\Destin}
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Atualiza Estoque         ] TypeIn "S"
        {Ask} {\\Sistemas\\Vendas\\FaturaC}
        Moveto [Numero da OF             ] Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Descricao da Destinacao  ] TypeIn "..TROCA.."
        Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo Movimento Estoque   ] TypeIn "S"
        Moveto [Numero Nota Gerada       ] TypeIn "Blank"
        {Ask} {\\Sistemas\\Vendas\\FaturaID}
        Moveto [Numero da OF             ] Example "doc"
        Moveto [Codigo do Item           ] Check Example "cite" 
        Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("ENTRADAS")
EndIf

;*** Notas de Entrada/Estoque ***
  If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") And
     IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
     Then {Ask} {\\Sistemas\\Estoque\\Iten_Com}
          Moveto [Codigo do Item         ] Example "cite"
          Moveto [Situacao               ] TypeIn VSDGSITITEM
          {Ask} {\\Sistemas\\Estoque\\Itens}
          Moveto [Codigo do Item         ] Example "cite"
          Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
          Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
          Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
          Moveto [Tipo do Item           ]
          Switch
             Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
             Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
             Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                  If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
             OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
          EndSwitch

          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
          Moveto [Numero do Lancamento     ] Example "doc"
          Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
          Moveto [Data de Entrada          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          Moveto [Tipo de Operacao         ] TypeIn "Not A, Not I"
          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
          Moveto [Numero do Lancamento     ] Check Example "doc"
          Moveto [Sequencia do Lancamento  ] Check
          Moveto [Codigo do Item           ] Check Example "cite" 
          Moveto [Quantidade Convertida    ] Check TypeIn "As Quantidade"
          Do_It!
          ClearAll

          {Ask} {Answer}
          Moveto [Codigo da Empresa        ] Check
          Moveto [Codigo do Item           ] Check
          Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
          Do_It!
          ClearAll

          Adiciona_Dados("ENTRADAS")
EndIf

;*** Requisicoes/Estoque ***
For I From 1 To 2
  If Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") Or
     Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem")
     Then Loop
  EndIf

  {Ask} {\\Sistemas\\Estoque\\Iten_Com}
  Moveto [Codigo do Item         ] Example "cite"
  Moveto [Situacao               ] TypeIn VSDGSITITEM
  {Ask} {\\Sistemas\\Estoque\\Itens}
  Moveto [Codigo do Item         ] Example "cite"
  Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
  Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
  Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
  Moveto [Tipo do Item           ]
  Switch
     Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
     Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
     Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
          If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
     OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
  EndSwitch

  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
  Moveto [Numero do Lancamento    ] Example "doc"
  Moveto [Codigo da Empresa       ] Check TypeIn "~VSDGEMPRESA.."
  Moveto [Data de Ocorrencia      ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  If i=1
     Then Moveto [Tipo de Movimento] TypeIn "S"
     Else Moveto [Tipo de Movimento] TypeIn "E"
  EndIf
  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem" Enter
  Moveto [Numero do Lancamento    ] Example "doc"
  Moveto [Codigo do Item          ] Check Example "cite" 
  Moveto [Quantidade              ] TypeIn "Calc Sum As Quantidade"
  Do_It!
  ClearAll

  If i=1
     Then Adiciona_Dados("SAIDAS")
     Else Adiciona_Dados("ENTRADAS")
  EndIf
EndFor

If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") And
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri")
   Then {Ask} {\\Sistemas\\Estoque\\Iten_Com}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Situacao               ] TypeIn VSDGSITITEM
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item        ] Example "cite"
        Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
        Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
        Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
        Moveto [Tipo do Item          ]
        Switch
           Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
           Case VSDGTIPOEST = "2"       : TypeIn "T or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        EndSwitch

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Data de Ocorrencia       ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo de Movimento        ] TypeIn "E"
        Moveto [Tipo de Operacao         ] TypeIn "P Or I"
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo do Item           ] Check Example "cite"
        Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("SAIDAS")
EndIf

EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Seleciona_Vendas()
ClearAll
AGUARDE("Aguarde, selecionando vendas")

;*** Faturamento ***
If Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") Or
   Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
   Then Return
EndIf

{Ask} {\\Sistemas\\Estoque\\Iten_Com}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Situacao               ] TypeIn VSDGSITITEM
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
Moveto [Tipo do Item             ]
Switch
   Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
   Case VSDGTIPOEST = "2"       : TypeIn "T or P"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
        If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
   OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
EndSwitch

{Ask} {\\Sistemas\\Vendas\\Destin}
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Atualiza Estoque         ] TypeIn "S"
{Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC" Enter
Moveto [Codigo da Empresa        ] Check Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Numero do Documento      ] Example "doc"
Moveto [Serie do Documento       ] Example "ser"
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Tipo Movimento Estoque   ] TypeIn "S"
Moveto [Descricao da Destinacao  ] TypeIn "..VEND.. OR ..SERV.. OR ..SAIDA.."
Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINIV, <=~VSDGDTFIMV"
Moveto [Situacao                 ] TypeIn "Not C"
{Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI" Enter
Moveto [Codigo da Empresa        ] Example "emp"
Moveto [Numero do Documento      ] Example "doc"
Moveto [Serie do Documento       ] Example "ser"
Moveto [Codigo do Item           ] Check Example "cite" 
Moveto [Quantidade               ] TypeIn "Calc Sum as Quantidade"
Moveto [Situacao_Item            ] TypeIn "Not C"
Do_It!
ClearAll

Adiciona_Dados("TOTAL_SAIDAS")
EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Seleciona_Consumos()
ClearAll
AGUARDE("Aguarde, selecionando consumos")

;*** Requisicoes/Estoque ***
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") Or
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem")
   Then {Ask} {\\Sistemas\\Estoque\\Iten_Com}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Situacao               ] TypeIn VSDGSITITEM
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
        Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
        Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
        Moveto [Tipo do Item           ]
        Switch
           Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
           Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        EndSwitch

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Data de Ocorrencia       ] TypeIn ">=~VSDGDTINIV, <=~VSDGDTFIMV"
        Moveto [Tipo de Movimento        ] TypeIn "S"
        Moveto [Tipo de Operacao         ] TypeIn "C"
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo do Item           ] Check Example "cite" 
        Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("TOTAL_SAIDAS")
EndIf

If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") And
   IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri")
   Then {Ask} {\\Sistemas\\Estoque\\Iten_Com}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Situacao               ] TypeIn VSDGSITITEM
        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item         ] Example "cite"
        Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
        Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
        Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
        Moveto [Tipo do Item           ]
        Switch
           Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
           Case VSDGTIPOEST = "2"       : TypeIn "T or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        EndSwitch

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA.."
        Moveto [Data de Ocorrencia       ] TypeIn ">=~VSDGDTINIV, <=~VSDGDTFIMV"
        Moveto [Tipo de Movimento        ] TypeIn "E"
        Moveto [Tipo de Operacao         ] TypeIn "P Or I"
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo do Item           ] Check Example "cite"
        Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("TOTAL_SAIDAS")
EndIf

EndProc

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SELECIONA_PEDIDOS()
Private CONT_PED,PEDIDOS
AGUARDE("Aguarde, selecionando pedidos de venda")
ClearAll

If VSDGOPPE="R" 
   Then CONT_PED = 0
        DynArray PEDIDOS[]   
        
        {Ask} {RPedidos}
        Moveto [Numero do Pedido] Check
        Do_It!
        ClearAll        
        
        View "Answer"
        Scan
          CONT_PED = CONT_PED + 1
          PEDIDOS[CONT_PED] = [Numero do Pedido]
        EndScan
        Do_It!
        ClearAll
   Else CONT_PED = 1
EndIf   

For i From 1 To CONT_PED
  If VSDGOPPE="R"
     Then VSDGPEDIDO = PEDIDOS[i]
  EndIf   
  {Ask} {\\Sistemas\\Estoque\\Iten_Com}
  Moveto [Codigo do Item         ] Example "cite"
  Moveto [Situacao               ] TypeIn VSDGSITITEM 
  {Ask} {\\Sistemas\\Estoque\\Itens}
  Moveto [Codigo do Item         ] Example "cite"
  Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
  Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
  Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
  Moveto [Tipo do Item           ]

;;-- qualquer tipo de item do pedido  
;;  Switch
;;     Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
;;     Case VSDGTIPOEST = "2"       : TypeIn "T or P"
;;     Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
;;          If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
;;     OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
;;  EndSwitch
  
  {Ask} {\\Sistemas\\Vendas\\PedidoC}
  Moveto [Numero do Pedido       ] Example "Pedido" TypeIn ", ~VSDGPEDIDO.."
  Moveto [Codigo da Empresa      ] Check TypeIn "~VSDGEMPRESA.."
  Moveto [Situacao do Pedido     ] TypeIn "ABERTO"
  
  {Ask} {\\Sistemas\\Vendas\\PedidoI}
  Moveto [Numero do Pedido       ] Check Example "Pedido"
  Moveto [Item do Pedido         ] Check
  Moveto [Codigo do Item         ] Check Example "cite" 
  Moveto [Quantidade             ] Check TypeIn ">" Example "qf"
  Moveto [Quantidade Faturada    ] Check Example "qf"            
  Do_It!
  ClearAll
  
  If IsEmpty("Answer")
     Then Loop
  EndIf
  
  {Ask} {Answer} Check
  Moveto [Quantidade             ] Example "q"
  Moveto [Quantidade Faturada    ] Example "qf" TypeIn ", Calc _q-_qf as Saldo"
  Do_It!
  ClearAll
  
  {Ask} {Answer}
  Moveto [Codigo da Empresa      ] Check
  Moveto [Codigo do Item         ] Check
  Moveto [Saldo                  ] TypeIn "Calc Sum as Quantidade"
  Do_It!
  ClearAll
  
  Adiciona_Dados("PEDIDOS")
EndFor

If VSDGOPPE="R" 
   Then VSDGPEDIDO    = ""
        VSDGNOMPEDIDO = "TODOS"    
EndIf

EndProc ;SELECIONA_PEDIDOS()

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SELECIONA_COMPRAS()
AGUARDE("Aguarde, selecionando pedidos de compra")
ClearAll

{Ask} {\\Sistemas\\Estoque\\Iten_Com}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Situacao               ] TypeIn VSDGSITITEM
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
Moveto [Tipo do Item           ]
Switch
   Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
   Case VSDGTIPOEST = "2"       : TypeIn "T or P"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
   OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
EndSwitch

{Ask} {\\Sistemas\\Compras\\OCC}
Moveto [Numero da OC           ] Example "Pedido"
Moveto [Codigo da Empresa      ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Situacao da OC         ] TypeIn "ABERTO"
{Ask} {\\Sistemas\\Compras\\OCI}
Moveto [Numero da OC           ] Check Example "Pedido"
Moveto [Item da OC             ] Check
Moveto [Codigo do Item         ] Check Example "cite"
Moveto [Quantidade             ] Check TypeIn ">" Example "qf"
Moveto [Quantidade Entregue    ] Check Example "qf"
Moveto [Fator de Conversao     ] Check
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

{Ask} {Answer}
Moveto [Fator de Conversao     ] Example "f"
Moveto [Quantidade             ] Example "q"  TypeIn ", changeto _q*_f"
Moveto [Quantidade Entregue    ] Example "qf" TypeIn ", changeto _qf*_f"
Do_It!
ClearAll

{Ask} {Answer} Check
Moveto [Quantidade             ] Example "q"
Moveto [Quantidade Entregue    ] Example "qf" TypeIn ", Calc _q-_qf as Saldo"
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo da Empresa      ] Check
Moveto [Codigo do Item         ] Check
Moveto [Saldo                  ] TypeIn "Calc Sum as Quantidade"
Do_It!
ClearAll

Adiciona_Dados("COMPRAS")
EndProc


;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc SELECIONA_EXPLOSAO()
ClearAll

If VSDGOPPE="R" 
   Then CONT_PED = 0
        DynArray PEDIDOS[]   
        
        {Ask} {RPedidos}
        Moveto [Numero do Pedido] Check
        Do_It!
        ClearAll        
        
        View "Answer"
        Scan
          CONT_PED = CONT_PED + 1
          PEDIDOS[CONT_PED] = [Numero do Pedido]
        EndScan
        Do_It!
        ClearAll
   Else CONT_PED = 1
EndIf  

Tabelatmp=Cria_Temp(PrivDir())

For i From 1 To CONT_PED
  If VSDGOPPE="R"                       
     Then VSDGPEDIDO = PEDIDOS[i]
  EndIf   
  {Ask} {\\Sistemas\\Estoque\\Iten_Com}
  Moveto [Codigo do Item         ] Example "cite"
  Moveto [Situacao               ] TypeIn VSDGSITITEM    
  {Ask} {\\Sistemas\\Estoque\\Itens}
  Moveto [Codigo do Item         ] Example "cite"
  Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
  Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
  Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
  {Ask} {\\Sistemas\\Producao\\FormulaC}
  Moveto [Codigo do Produto     ] Example "cite"
  Moveto [Quantidade Produzida  ] Example "qprod"
  {Ask} {\\Sistemas\\Producao\\FormulaI}
  Moveto [Codigo do Produto     ] Check Example "cite"
  Moveto [Sequencia             ] Check
  Moveto [Codigo do Material    ] Check TypeIn "as Codigo do Item" 
  Moveto [Quantidade            ] Example "qfor" TypeIn ", Calc (" Example "qfor" "* (" Example "qp" "-" Example "qf" "))/ " Example "qprod" " as Quantidade"
  
  {Ask} {\\Sistemas\\Vendas\\PedidoC}
  Moveto [Numero do Pedido      ] Example "Pedido" TypeIn ", ~VSDGPEDIDO.."
  Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
  Moveto [Situacao do Pedido    ] TypeIn "ABERTO"
  
  {Ask} {\\Sistemas\\Vendas\\Pedidoi}
  Moveto [Numero do Pedido      ] Check Example "Pedido"
  Moveto [Item do Pedido        ] Check
  Moveto [Codigo do Item        ] Example "cite" 
  Moveto [Tipo do Item          ] TypeIn "T or P"  ; no pedido s¢ tem este tipo de item
  Moveto [Quantidade            ] Example "qp" TypeIn ", >" Example "qf"
  Moveto [Quantidade Faturada   ] Example "qf"
  Do_It!
  ClearAll
  
  If IsEmpty("Answer")
     Then Loop
  EndIf

  Copy "Answer" Tabelatmp
  
  {Ask} {Answer}
  Moveto [Codigo da Empresa      ] Check
  Moveto [Codigo do Item         ] Check
  Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
  Do_It!
  ClearAll
  
  Adiciona_Dados("EXPLOSAO")
  
  ;**** Semi Acabados ****
  {Ask} {\\Sistemas\\Estoque\\Itens}
  Moveto [Codigo do Item        ] Example "cite"
  Moveto [Tipo do Item          ] TypeIn "S"
  
  {Ask} {\\Sistemas\\Producao\\FormulaC}
  Moveto [Codigo do Produto     ] Example "cite"
  Moveto [Quantidade Produzida  ] Example "qprod"
  
  {Ask} {\\Sistemas\\Producao\\FormulaI}
  Moveto [Codigo do Produto     ] Example "cite"
  Moveto [Sequencia             ] Check
  Moveto [Codigo do Material    ] Check TypeIn "as Codigo do Item"
  Moveto [Quantidade            ] Example "qfor" TypeIn ", Calc (" Example "qfor" "*" Example "qtd" ")/ " Example "qprod" " as Quantidade"
  
  {Ask} TypeIn Tabelatmp Enter
  Moveto [Codigo da Empresa     ] Check
  Moveto [Numero do Pedido      ] Check
  Moveto [Item do Pedido        ] Check
  Moveto [Codigo do Item        ] Example "cite"
  Moveto [Quantidade            ] Example "qtd"
  Do_It!
  ClearAll
                             
  {Ask} {Answer}
  Moveto [Codigo da Empresa      ] Check
  Moveto [Codigo do Item         ] Check
  Moveto [Quantidade             ] TypeIn "Calc Sum as Quantidade"
  Do_It!
  ClearAll
                             
  Adiciona_Dados("EXPLOSAO")
Endfor

If IsTable(Tabelatmp)
   Then Delete Tabelatmp
EndIf   

If VSDGOPPE="R" 
   Then VSDGPEDIDO    = ""
        VSDGNOMPEDIDO = "TODOS"
EndIf    

EndProc

;*******************************************************************************
;* Adiciona Dados                                                              *
;*******************************************************************************
Proc Adiciona_Dados(Tipo)
ClearAll
If IsEmpty("Answer")
   Then Return
EndIf

CoEdit TabelaP,"Answer"
Scan

  Moveto TabelaP
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item]
  If Not RetVal
     Then End Down
          [Codigo da Empresa]=[Answer->Codigo da Empresa]
          [Codigo do Item   ]=[Answer->Codigo do Item]
  EndIf
  Switch
    Case Tipo="SAIDAS"       : [Saidas              ]=[Saidas              ]+[Answer->Quantidade]
    Case Tipo="ENTRADAS"     : [Entradas            ]=[Entradas            ]+[Answer->Quantidade]
    Case Tipo="PEDIDOS"      : [Pedidos             ]=[Pedidos             ]+[Answer->Quantidade]
    Case Tipo="COMPRAS"      : [Compras_SemiAcabados]=[Compras_SemiAcabados]+[Answer->Quantidade]
    Case Tipo="TOTAL_SAIDAS" : [Total_Saidas        ]=[Total_Saidas        ]+[Answer->Quantidade]
    Case Tipo="SALDOINICIAL" : [Saldo Inicial       ]=[Saldo Inicial       ]+[Answer->Quantidade]
    Case Tipo="EXPLOSAO"     : [Pedidos             ]=[Pedidos             ]+[Answer->Quantidade]
  EndSwitch
  UnLockRecord
  
  Moveto "Answer"
EndScan
Do_It!
ClearAll

EndProc

;*******************************************************************************
;* Ajusta Dados                                                                *
;*******************************************************************************
Proc Ajusta_Dados()
ClearAll
AGUARDE("Aguarde, processando dados")

;******** Saldo Inicial *******
{Ask} {\\Sistemas\\Estoque\\Iten_Com}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Situacao               ] TypeIn VSDGSITITEM
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item         ] Example "cite"
Moveto [Codigo da Familia      ] TypeIn "~VSDGFAMI.."
Moveto [Codigo do Grupo        ] TypeIn "~VSDGGRP.."
Moveto [Codigo da Marca        ] TypeIn "~VSDGMARCA.."
Moveto [Tipo do Item           ]
Switch
   Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
   Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
        If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
   OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
EndSwitch
{Ask} {\\Sistemas\\Estoque\\SdEstq}
Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] Check Example "cite" 
Moveto [Mes Referencia        ] TypeIn "~VSDGMES"
Moveto [Ano Referencia        ] TypeIn "~VSDGANO"
Moveto [Saldo Inicial         ] Check TypeIn "as Quantidade"
Do_It!
ClearAll

Adiciona_Dados("SALDOINICIAL")

;******* Ajusta dados do cadastro de Empresas ******
{Ask} {\\Sistemas\\Cadastro\\Empresas}
Moveto [Codigo da Empresa     ] example "empr"
Moveto [Nome Fantasia Empresa ] example "nome"
{Ask} TypeIn TabelaP Enter TypeIn "Fast"
Moveto [Codigo da Empresa     ] example "empr"
Moveto [Nome Fantasia Empresa ] TypeIn "Changeto " example "nome"
Do_It!
ClearAll

;******* Ajusta dados do cadastro de Itens ******
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item         ] Example "item"
Moveto [Descricao do Item      ] Example "desc"  
Moveto [Unidade Interna        ] Example "un"
Moveto [Tipo do Item           ] Example "tp"
Moveto [Descricao Tipo do Item ] Example "dtp"
Moveto [Codigo da Familia      ] Example "cfam"
Moveto [Descricao da Familia   ] Example "dfam"
Moveto [Codigo do Grupo        ] Example "cgru"
Moveto [Descricao do Grupo     ] Example "dgru"
Moveto [Codigo da Marca        ] Example "cmar"
Moveto [Descricao da Marca     ] Example "dmar"
{Ask} TypeIn TabelaP Enter TypeIn "Fast"
Moveto [Codigo do Item        ] example "item"
Moveto [Descricao do Item     ] TypeIn "Changeto " Example "desc"
Moveto [Unidade Interna       ] TypeIn "Changeto " Example "un"
Moveto [Tipo do Item          ] TypeIn "Changeto " Example "tp"
Moveto [Descricao Tipo do Item] TypeIn "Changeto " Example "dtp"
Moveto [Codigo da Familia     ] TypeIn "Changeto " Example "cfam"
Moveto [Descricao da Familia  ] TypeIn "Changeto " Example "dfam"
Moveto [Codigo do Grupo       ] TypeIn "Changeto " Example "cgru"
Moveto [Descricao do Grupo    ] TypeIn "Changeto " Example "dgru"
Moveto [Codigo da Marca       ] TypeIn "Changeto " Example "cmar"
Moveto [Descricao da Marca    ] TypeIn "Changeto " Example "dmar"
Do_It!
ClearAll

;******* Ajusta dados do complemento dos Itens ******
{Ask} {\\Sistemas\\Estoque\\Iten_com}
Moveto [Codigo do Item         ] Example "item"
Moveto [Situacao               ] Example "sit"
Moveto [Vendagem               ] Example "ved"
{Ask} TypeIn TabelaP Enter TypeIn "Fast"
Moveto [Codigo do Item         ] example "item"
Moveto [Situacao               ] TypeIn "Changeto " Example "sit"
Moveto [Vendagem               ] TypeIn "Changeto " Example "ved"
Do_It!
ClearAll

;***** Calculos **********
Edit TabelaP
Scan
   [Saldo Atual            ]=([Saldo Inicial]+[Entradas])-[Saidas ]
   [Disponivel             ]=([Saldo Atual  ]-[Pedidos ])+[Compras_SemiAcabados]

   [Meses_Media            ]=NumVal(NVSDGMESES)
   [Medias_Saidas          ]=Round([Total_Saidas]/NumVal(NVSDGMESES),1)

   [Ideal                  ]=Round([Medias_Saidas]*(1+(VSDGTXAD/100)),0)
   [Sugestao               ]=Round([Ideal        ]-[Disponivel],0)
   If [Disponivel]>0
      Then [Disponivel_NDias]=Round([Disponivel]/[Ideal],0)*30
   EndIf
EndScan
Do_It!
ClearAll

If SYS_CLIENTE_CONFEC<>"" And
   (VSDGTIPOEST="P" Or VSDGTIPOEST = "2")      ; TypeIn "P or T"
   Then
        ;******** Tipo de Itens e Tipo de Estoque *******
        {Ask} TypeIn TabelaP Enter
        Moveto [Codigo da Empresa] Check
        Moveto [Codigo do Item   ] Check
        Moveto [Tipo do Item     ] TypeIn "S"
        Moveto [Saldo Atual      ] Check
        Do_It!
        ClearAll

        View "Answer"
        CoEdit TabelaP
        Scan For [Tipo do Item]="P"

          COD2_EMPR=[Codigo da Empresa]
          COD2_ITEM=[Codigo do Item   ]
          COD2_ITEM=MudaCodigoPara(COD2_ITEM,"S")
          If COD2_ITEM=[Codigo do Item]
             Then Loop
          EndIf
          
          Moveto "Answer"
          Moveto [Codigo da Empresa]
          Locate COD2_EMPR, COD2_ITEM
          If Not Retval
             Then Moveto TabelaP
             Else Moveto TabelaP
                  [Compras_SemiAcabados]=[Answer->Saldo Atual]
                  [Disponivel          ]=([Saldo Atual  ]-[Pedidos ])+[Compras_SemiAcabados]
                  [Ideal               ]=Round([Medias_Saidas]*(1+(VSDGTXAD/100)),0)
                  [Sugestao            ]=Round([Ideal        ]-[Disponivel],0)
                  If [Disponivel]>0
                     Then [Disponivel_NDias]=Round([Disponivel]/[Ideal],0)*30
                  EndIf
                  UnLockRecord
          EndIf

        EndScan
        Do_It!
        ClearAll
EndIf

;******** Disponibilidade de Estoque ate ? dias *******
If VSDGDIAS < 99999
  Then
    {Ask} TypeIn TabelaP Enter TypeIn "Fast Delete"
    Moveto [Disponivel_NDias ] TypeIn ">~VSDGDIAS"
    Do_It!
    ClearAll
EndIf


;******** Somente Tipo de itens *******
{Ask} TypeIn TabelaP Enter Check
Switch
 Case VSDGOPFORMULA="3": 
     Moveto [Tipo do Item      ] TypeIn "Not C"
     
 Case VSDGOPFORMULA="2": 
     Moveto [Tipo do Item      ] TypeIn "C"
EndSwitch  

;;Moveto [Tipo do Item         ]
;;Switch
;;   Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
;;   Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
;;   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
;;   OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
;;EndSwitch
Do_It!
ClearAll

;** Elimina os Inativos **********************
{Ask} {\\Sistemas\\Estoque\\EstqPrm}
Moveto [Codigo da Empresa     ] example "empr"
Moveto [Codigo do Item        ] example "item"
Moveto [Data de Inatividade   ] TypeIn "<~VSDGDTFIM"
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item        ] example "item"
Moveto [Inativo               ] TypeIn "S"
{Ask} {Answer} TypeIn "Fast Delete"
Moveto [Codigo da Empresa     ] example "empr"
Moveto [Codigo do Item        ] example "item"
Moveto [Saldo Atual           ] TypeIn "0 or Blank"
Moveto [Pedidos               ] TypeIn "0 or Blank"
Moveto [Compras_SemiAcabados  ] TypeIn "0 or Blank"
Do_It!
ClearAll

EndProc    ; (Seleciona)
                             
;*******************************************************************************
;* Rotina para escolher itens filtrados                                        *
;*******************************************************************************
Proc Somente_Escolha(PARAM)
Private PARAM

If PARAM = "TODOS" 
   Then Return
EndIf

Copy "Answer" TabelaP

Switch
  Case PARAM = "SELECAO" :
       {Ask} {RPedidos}
       Moveto [Numero do Pedido] Check
       Do_It!
       ClearAll
       
       Release Vars Tabela_Temp
       CONT_PED = 0
       DynArray PEDIDOS[]
        
       View "Answer"
       Scan
         CONT_PED = CONT_PED + 1
         PEDIDOS[CONT_PED] = [Numero do Pedido]
       EndScan
       Do_It!
       ClearAll
       
       For i From 1 To DynArraySize(PEDIDOS)
         NUMPED = PEDIDOS[i]
       
         {Ask} {\\Sistemas\\Vendas\\PedidoI}
         Moveto [Numero do Pedido  ] TypeIn "~NUMPED"
         Moveto [Codigo do Item    ] Check
         Do_It!
         ClearAll
         
         If Not IsAssigned(Tabela_Temp)
            Then Tabela_Temp = Cria_Temp(PrivDir())
                 Copy "Answer" Tabela_Temp
            Else Add "Answer" Tabela_Temp
         EndIf 
       EndFor  
       Copy Tabela_Temp "Answer"
       Empty Tabela_Temp

  Case PARAM = "PEDIDO"  :  
       Tabela_Temp = Cria_Temp(PrivDir())
       
       {Ask} {\\Sistemas\\Vendas\\PedidoI}
       Moveto [Numero do Pedido  ] TypeIn "~VSDGPEDIDO.."
       Moveto [Codigo do Item    ] Check
       Do_It!
       ClearAll
                                      
       Copy "Answer" Tabela_Temp
       Empty Tabela_Temp
          
EndSwitch
  
;--- Para verificar Item de Formula dentro de outra Formula --------------------   
Tabela_FormulaI = Cria_Temp(PrivDir())
Copy "\\Sistemas\\Producao\\FormulaI" Tabela_FormulaI
     
NR=NRecords("Answer")     
          
View Tabela_FormulaI
View Tabela_Temp   
View "\\Sistemas\\Producao\\FormulaI"
Coedit "Answer"
Scan    
  Barra(NR, RecNo())
  Aguarde("Aguarde, Ajustando Ajustando Dados "+BARRA_STRING) 
           
  ITEM = [Codigo do Item]

  Moveto "\\Sistemas\\Producao\\FormulaI"
  Moveto [Codigo do Produto]
  Locate ITEM
  If RetVal
     Then While [Codigo do Produto] = ITEM 
            Moveto Tabela_FormulaI  
            Moveto [Codigo do Produto]
            Locate [\Sistemas\Producao\FormulaI->Codigo do Material]                        
            If RetVal
               Then While [\Sistemas\Producao\FormulaI->Codigo do Material] = [Codigo do Produto] 
                      ITEM_MATERIAL = [Codigo do Material]
                      
                      Moveto Tabela_Temp
                      End Down
                      [Codigo do Item] = ITEM_MATERIAL 
                      UnLockRecord
                      
                      Moveto Tabela_FormulaI
                      Skip
                      If Eot() Then QuitLoop EndIf
                    EndWhile
               Else Moveto Tabela_Temp
                    End Down
                    [Codigo do Item] = [\Sistemas\Producao\FormulaI->Codigo do Material] 
                    UnLockRecord
            EndIf  
            Moveto "\\Sistemas\\Producao\\FormulaI"
            Skip
            If Eot() Then QuitLoop EndIf
          EndWhile
     Else Moveto Tabela_Temp
          End Down
          [Codigo do Item] = ITEM
          UnLockRecord     
  EndIf
  Moveto "Answer"
EndScan
Do_It!
ClearAll  

{Ask} TypeIn Tabela_Temp Enter
Moveto [Codigo do Item] Example "CodI"
{Ask} TypeIn TabelaP Enter TypeIn "Delete" 
Moveto [Codigo do Item] Example "CodI"
Do_It!
ClearAll    

Rename "Deleted" "Answer"     

{Ask} {Answer} Check
Moveto [Entradas      ] Check TypeIn "Calc Sum ,as Entradas"
Do_It!
ClearAll

;---- Ajsutando pre‡o nos itens conforme escolha do usu rio --------------------
Switch
  Case VSDGOPCUSTO="U" or VSDGOPCUSTO="M" :
       If IsTable("\\FechAno\\"+VSDGANO+"\\Estoque\\Sdestq") 
          Then TAB_TEMP = "\\FechAno\\"+VSDGANO+"\\Estoque\\Sdestq"
          Else TAB_TEMP = "\\Sistemas\\Estoque\\SdEstq"
       EndIf 
       View TAB_TEMP
  Case VSDGOPCUSTO="F" :
       TAB_TEMP = "\\Sistemas\\Producao\\FormulaI"
EndSwitch

NR = NRecords("Answer")

View TAB_TEMP 
Coedit "Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Ajustando Pre‡o... "+BARRA_STRING)

  Custo_Unitario_Atual = 0
  Custo_Total_Atual    = 0
  Saldo                = NDecimal([Pedidos],3)
  Switch
    Case VSDGOPCUSTO="U" Or VSDGOPCUSTO="M" :
         Custo_Total_Atual   =BlankNum()
         Custo_Unitario_Atual=BlankNum()
         
         Moveto TAB_TEMP
         Moveto [Codigo da Empresa]
         Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item],VSDGANO,VSDGMES
         If RetVal
            Then Switch
                   Case VSDGOPCUSTO="U" :
                        Custo_Total_Atual   =NDecimal(Saldo*[Preco de Custo],2)
                        Custo_Unitario_Atual=[Preco de Custo]
                   Case VSDGOPCUSTO="M" : 
                        Custo_Unitario_Atual=NDecimal([Custo Total Atual]/[Saldo Atual],2)
                        Custo_Total_Atual = NDecimal(Saldo*Custo_Unitario_Atual,2)
                 EndSwitch        
         EndIf
    Case VSDGOPCUSTO="F" :
         Moveto TAB_TEMP
         Moveto [Codigo do Material]
         Locate [Answer->Codigo do Item]
         If RetVal
            Then Custo_Total_Atual   =NDecimal(Saldo*[Valor Unitario],2)
                 Custo_Unitario_Atual=[Valor Unitario]
            Else Custo_Total_Atual   =BlankNum()
                 Custo_Unitario_Atual=BlankNum()
         EndIf
  EndSwitch         
  Moveto "Answer"
  [Preco1] = Custo_Unitario_Atual                                   
  [Preco2] = Custo_Total_Atual
  UnLockRecord
EndScan
Do_It!
ClearAll
                                                     
EndProc ;Somente_Escolha() 

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  
   Then AoCriarShowDialog()
        TiraSombraShowDialog()
EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_MESANO"         : Campo="TG_EMPRESA"
            Case Campo="TG_DTREF"          : Campo="TG_MESANO"
            Case Campo="TG_PEDIDO"         : Campo="TG_DTREF"
            Case Campo="TG_OPPE"           : Campo="TG_PEDIDO"
            Case Campo="TG_FAMI"           : Campo="TG_OPPE"
            Case Campo="TG_GRP"            : Campo="TG_FAMI"
            Case Campo="TG_MARCA"          : Campo="TG_GRP"
            
            Case Campo="TG_OPCUSTO"        : Campo="TG_MARCA"
            Case Campo="TG_OPRELCODALF"    : Campo="TG_OPCUSTO"
            Case Campo="TG_OPFORMULA"      : Campo="TG_OPRELCODALF"
            Case Campo="TG_CODMODELO"      : Campo="TG_OPFORMULA"                   
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
          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_EMPRESA" : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :
                         VSDGMES=SubStr(VSDGMESANO,1,2)
                         VSDGANO=SubStr(VSDGMESANO,4,4)
                         If NumVal(VSDGMES) > 12 Or NumVal(VSDGMES) = 0
                            Then MENSAGEM("mes Inv lido!")
                            Else VSDGDTINI = DateVal("01."+VSDGMES+"."+VSDGANO)
                                 VSDGDTREF=Ultimo_Dia(VSDGMES+VSDGANO)
                                 If Month(VSDGDTREF)=Month(Today())
                                    Then VSDGDTREF=Today()
                                 EndIf
                                 Campo = "TG_DTREF"
                         EndIf
                    Case Campo="TG_DTREF"       :
                         VSDGDTREF = ControlValue("TG_DTREF")
                         If IsBlank(VSDGDTREF) Or (VSDGDTREF<VSDGDTINI)
                            Then Mensagem("Data Final Inv lida !")
                            Else If Year(VSDGDTREF)<>NumVal(SubStr(VSDGMESANO,4,4)) Or
                                    Month(VSDGDTREF)<>NumVal(SubStr(VSDGMESANO,1,2))
                                    Then Mensagem("Data Final difere do mes/ano da Ficha de Estoque !")
                                    Else VSDGDTFIM = VSDGDTREF
                                         Campo = "TG_PEDIDO"
                                 EndIf
                         EndIf
                    Case Campo="TG_PEDIDO"      : Campo="TG_OPPE"
                    Case Campo="TG_OPPE"        : Campo="TG_FAMI"
                         VSDGOPPE=ControlValue("TG_OPPE")
                         Switch
                           Case VSDGOPPE="T"    : VSDGNOMOPPE="TODOS"
                           Case VSDGOPPE="R"    : VSDGNOMOPPE="RELACAO DOS PEDIDOS"
                           OtherWise:
                                VSDGOPPE="T"      VSDGNOMOPPE="TODOS"
                         EndSwitch
                    Case Campo="TG_FAMI"        : Campo="TG_GRP"
                    Case Campo="TG_GRP"         : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo="TG_OPCUSTO"

                    Case Campo="TG_OPCUSTO"     : Campo="TG_OPRELCODALF"
                         VSDGOPCUSTO=ControlValue("TG_OPCUSTO")
                         Switch
                           Case VSDGOPCUSTO="U": VSDGNOMOPCUSTO="ULTIMO CUSTO"
                           Case VSDGOPCUSTO="F": VSDGNOMOPCUSTO="FORMULA"
                           OtherWise           : VSDGOPCUSTO="M"
                                                 VSDGNOMOPCUSTO="CUSTO MEDIO"
                         EndSwitch
                    Case Campo="TG_OPRELCODALF" : Campo="TG_OPFORMULA"    
                    
                    Case Campo="TG_OPFORMULA"      :
                         VSDGOPFORMULA=ControlValue("TG_OPFORMULA")
                         Switch
                           Case VSDGOPFORMULA="2": VSDGNOMOPFORMULA="SO SERVICOS"
                           Case VSDGOPFORMULA="3": VSDGNOMOPFORMULA="SEM SERVICOS"
                           OtherWise             : VSDGNOMOPFORMULA="TODOS"
                                                   VSDGOPFORMULA="1"
                         EndSwitch
                         Campo="TG_CODMODELO"
                                   
                    Case Campo="TG_CODMODELO"      : Campo="YES"                   
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="TG_OPCUSTO":
       MSG_CAMPO="M=Custo Medio  U=Ultimo Custo  F=Formula"
  Case Campo="TG_OPPE":
       MSG_CAMPO="Op‡Æo: T=Todos os Pedidos  R=Conforme a Rela‡Æo dos Pedidos"
  Case Campo="TG_DTREF":
       MSG_CAMPO="Informe a Data Final (para estoque)"
  Case Campo="TG_OPCOES" :
       MSG_CAMPO="Utiliza Data de Entrega"
  Case Campo="TG_OPFORMULA":
       MSG_CAMPO="1=Todos  2=So Servi‡os  3=Sem Servi‡os"
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

;************************************
;* ROTINA PARA Ler/Gravacao Opcao   *
;************************************
Proc ModeloRelatoriosCarregaLista()

TG_CODMODELO_COMCASASDECIMAIS=true

VSDGCODMODELO     = ""
VSDGMODELO        = ""

ConfigOpcoes("ModeloRelatorio/CasasDecimais","Ler","PO_3000")  

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Relat¢rio de Posi‡„o do Estoque")
ModeloRelatoriosAdd("Fim")

EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot,\\Sistemas\\Cadastro\\Bib_Proc"
If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf
LimpAguarde()
SYS_VALOR()

ClearAll

VSDGEMPRESA     = ""
VSDGTIPOEST     = ""
VSDGDESCTIPOEST = ""
VSDGMESANO      = ""
VSDGDTREF       = BlankDate()
VSDGDTINI       = BlankDate()
VSDGDTFIM       = BlankDate()
VSDGFAMI        = ""
VSDGMARCA       = ""
VSDGGRP         = ""
VSDGITEM        = ""
VSDGMESANO      = AlinhM(StrVal(Month(Today())),2)+"."+AlinhM(StrVal(Year(Today())),4)
VSDGOPOF        = ""
VSDGNOMOPOF     = ""
VSDGNOMOPPE     = ""                                                            
VSDGPEDIDO      = ""
VSDGNOMPEDIDO   = ""
VSDGOPCUSTO     = ""
VSDGNOMOPCUSTO  = ""
VSDGOPFORMULA    = ""

;---- Vari veis nÆo utilizadas (ESTOQUE > RM_3000) -----------------------------------
VSDGOPRELCODALF = ""                       
VSDGDESTINAT    = ""                       
VSDGTXAD        = 0
VSDGDIAS        = 99999  
VSDGOPSP        = "1"   
VSDGOPOF        = "S"  
VSDGSITITEM     = "L Or Blank"
NVSDGMESES      = 0

ModeloRelatoriosCarregaLista()

While True
  ShowDialog "Posi‡„o do Estoque/Pedidos/Compras/ExplosÆo" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
    @ 01,07 Height 22 Width 80

    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A23" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP             

    Label  @ 02,00 "Mˆs/Ano Estoque"  For "TG_MESANO"
    Accept @ 03,01  Width 10 "A07"  Picture "##.####" Tag "TG_MESANO" To VSDGMESANO

    Label  @ 02,20 "Data Final" For "TG_DTREF"
    Accept @ 03,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF
    
    Label  @ 04,00 "Pedido" For "TG_PEDIDO"
    Accept @ 05,01 Width 09 "A6"  Picture "[&,#][#*#]" Tag "TG_PEDIDO" To VSDGPEDIDO
    Accept @ 05,09 Width 25 "A20" Picture "!*!" Tag "TG_PEDIDO" To VSDGNOMPEDIDO
    
    Label  @ 06,00 "Op‡äes de Pedido"  For "TG_OPPE"
    Accept @ 07,04 Width 04 "A1" Picture "T,R" Tag "TG_OPPE" To VSDGOPPE
    Accept @ 07,09 Width 25 "A25" Picture "!*!" Tag "TG_OPPE" To VSDGNOMOPPE    

    Label  @ 08,00 "Familia"  For "TG_FAMI"
    Accept @ 09,02 Width 06 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 09,09 Width 25 "A22" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 10,00 "Grupo"  For "TG_GRP"
    Accept @ 11,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 11,09 Width 25 "A22" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP
    
    Label  @ 12,00 "Marca"  For "TG_MARCA"
    Accept @ 13,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 13,09 Width 25 "A22" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 00,35 "Op‡„o de Pre‡o" For "TG_OPCUSTO"
    Accept @ 01,39 Width 04 "A1"  Picture "M,U,V,F" Tag "TG_OPCUSTO" To VSDGOPCUSTO
    Accept @ 01,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPCUSTO" To VSDGNOMOPCUSTO

    Label  @ 02,35 "Op‡Æo de Ordem" For "TG_OPRELCODALF"
    Accept @ 03,39 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELCODALF" To VSDGOPRELCODALF
    Accept @ 03,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSDGNOMOPRELCODALF

    Label  @ 04,35 "Op‡„o Itens da Formula" For "TG_OPFORMULA"
    Accept @ 05,39 Width 04 "A1"  Picture "1,2,3" Tag "TG_OPFORMULA" To VSDGOPFORMULA
    Accept @ 05,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPFORMULA" To VSDGNOMOPFORMULA

    Label  @ 17,00  "Modelo de ~R~elat¢rio"  For "TG_CODMODELO"
    Accept @ 18,01  Width 06 "A3"  Picture "!*!" Tag "TG_CODMODELO" To VSDGCODMODELO
    Accept @ 18,06  Width 47 "A60"  Picture "!*!" Tag "TG_MODELO" To VSDGMODELO        

    Pushbutton @ 18,54 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 18,66 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf
  if not ValidarModelosRelatorios() then loop endif         
  
  If IsBlank(VSDGDTREF) Or (VSDGDTFIM < VSDGDTINI)
     Then Mensagem("Informe a Data !")
          Loop
  EndIf
  
  If Year(VSDGDTREF)<>NumVal(SubStr(VSDGMESANO,4,4)) Or Month(VSDGDTREF)<>NumVal(SubStr(VSDGMESANO,1,2))
     Then Mensagem("Data Final difere do mes/ano da Ficha de Estoque !")
          Loop
  EndIf         
  
  If VSDGOPPE = "R" And IsEmpty("\\Sistemas\\Estoque\\RPedidos")
     Then Mensagem("Sem pedidos na rela‡„o !")
          Loop 
  EndIf   
  
  DISPOSITIVO()
  If OK="" Then Loop EndIf

  SetDir "\\Sistemas\\Estoque"
  ;------------------------------------------------------------------------------
  AGUARDE("Aguarde, Checando Dados")
  PROCESSAR_DADOS=True
  MSG_MODULO=""

  Monta_Dir_Trab(PrimeiroDia_MesAnterior(VSDGDTINI),UltimoDia_MesPosterior(VSDGDTFIM))
  While Novo_Dir_Trab()
    If Not IsBlank(Dir_Trab)
       Then Verifica_Mov()
    EndIf
  EndWhile

  If Not PROCESSAR_DADOS
     Then MSG="Existem movimenta‡”es Fechadas://"
          MSG=MSG+MSG_MODULO+" //"
          MSG=MSG+"Usar esta rotina apenas para Mes em Aberto.// //"
          MSG=MSG+"Verificar !"
          Mensagem(MSG)
          Loop
  EndIf
  ;------------------------------------------------------------------------------
                                   
  AGUARDE("Aguarde, processando dados")
  TabelaP=Cria_Temp(PrivDir())
  Copy "PosEstq" TabelaP
  Empty TabelaP
  
  ;---- Processo adptado no NotaC o qual foi alterado para outra proc p/ utiliza‡Æo de REGRA
  Identifica_MesAno_Periodo(VSDGDTINI,VSDGDTFIM)
  For out from 1 to ArraySize(MESANO_DTINI)
    AUX_DTINI = MESANO_DTINI[out]
    AUX_DTFIM = MESANO_DTFIM[out]
 
    If Not Verifica_Emissao_Saida(AUX_DTFIM)
       Then Return
    EndIf    
    
    Monta_Dir_Trab(AUX_DTINI,AUX_DTFIM)
    While Novo_Dir_Trab()
      Seleciona_NotaC()   
    EndWhile
  EndFor  

  Monta_Dir_Trab(VSDGDTINI,VSDGDTFIM)
  While Novo_Dir_Trab()
    Seleciona_Estoque()
  EndWhile

  If VSDGOPPE = "R" 
     Then FiltraPedidos()
  EndIf   
  
  Seleciona_Pedidos()
  Seleciona_Compras()
  Seleciona_Explosao()
  Ajusta_Dados()

  Switch
    Case VSDGPEDIDO <> "" : PARAM = "PEDIDO"
    Case VSDGOPPE <> "T"  : PARAM = "SELECAO"
    OtherWise             : PARAM = "TODOS"                  
  EndSwitch  
  Somente_Escolha(PARAM) 

  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Registros a Processar")
          Loop
  EndIf
          
  If VSDGOPRELCODALF="1"
     Then CopyReport "\\Base\\Sistemas\\Estoque\\RM_Pestq" "R" "Answer" "R"
     Else CopyReport "\\Base\\Sistemas\\Estoque\\RM_Pestq" "1" "Answer" "R"
  EndIf

  SetaVisualizarCasasDecimais("12")

  IMPRIREL("Answer","R")

  Delete "Answer"
  If VSDGOPPE = "R"
     Then Delete TabelaRP
  EndIf
  SetDir "\\Sistemas\\Producao"

  ConfigOpcoes("ModeloRelatorio/CasasDecimais","Gravar","PO_3000")  
EndWhile
ClearAll
Release Vars All
Release Procs All
