;** RM_3004 ********************************************************************
;*  Posicao Estoque/Explosao/Compras IV  Com explosÆo do estoque do semi-acabado 
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 09/10/2013 por Bruno Carvalho
;Ultima Alteracao: 31/10/2013 por Bruno Carvalho
;Motivo Alteracao: Add novo filtro para optar por ser exibido itens semi-acabados
;Ultima Alteracao: 02/10/2015 por Bruno Carvalho  
;Motivo Alteracao: Incluido "I" no [Tipo de Operacao] para fornecer registros quando for requisi‡äes de Industrializa‡Æo
;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: 19/05/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes GetRecord "Iten_Com" p/ os campos [Vendagem] e [Situacao] 
;Ultima Alteracao: 18/09/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: 05/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Ordem_Report()                
;Ultima Alteracao: 29/06/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Ordem_Report()                
;Ultima Alteracao: 24/03/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog   
;Ultima Alteracao: 30/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 13/05/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes CheckTG_OPOF[1]

;*******************************************************************************
;* 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 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 [Tipo do Item             ]
    Switch
       Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
       Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
       Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
            If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
       OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
    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"    : Switch
                                                Case i=1: If Not CheckTG_APOSDTFIM[1]
                                                             Then Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                             Else Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI"
                                                          EndIf   
                                                Case i=2: Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                              EndSwitch
      Case REGRA_DATA_ESTOQUE = "Transicao" : If ii=1
                                                Then Moveto [Data de Emissao] TypeIn "<~AUX_DTINI" 
                                                     Switch
                                                        Case i=1: If Not CheckTG_APOSDTFIM[1]
                                                                     Then Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                                     Else Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI"
                                                                  EndIf   
                                                        Case i=2: Moveto [Data de Saida  ] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                      EndSwitch
                                                Else Switch
                                                        Case i=1: If Not CheckTG_APOSDTFIM[1]
                                                                     Then Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                                     Else Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI"
                                                                  EndIf   
                                                        Case i=2: Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                      EndSwitch
                                              EndIf
      Case REGRA_DATA_ESTOQUE = "Nova"      : Switch
                                                Case i=1: If Not CheckTG_APOSDTFIM[1]
                                                             Then Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                             Else Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI"
                                                          EndIf   
                                                Case i=2: Moveto [Data de Emissao] TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                              EndSwitch
    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" TypeIn ", ~VSDGITEM.."
    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 CheckTG_OPOF[1]=False 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 [Tipo do Item             ]
          Switch
             Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
             Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
             Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                  If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
             OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
          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" TypeIn ", ~VSDGITEM.."
          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 [Tipo do Item             ]
        Switch
           Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
           Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
        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" TypeIn ", ~VSDGITEM.."
        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 [Tipo do Item             ]
          Switch
             Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
             Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
             Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                  If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
             OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
          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" TypeIn ", ~VSDGITEM.."
          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 [Tipo do Item             ]
  Switch
     Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
     Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
     Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
          If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
     OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
  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" TypeIn ", ~VSDGITEM.."
  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 [Tipo do Item             ]
        Switch
           Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
           Case VSDGTIPOEST = "2"       : TypeIn "T or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
        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" TypeIn ", ~VSDGITEM.."
        Moveto [Quantidade               ] TypeIn "Calc Sum As Quantidade"
        Do_It!
        ClearAll

        Adiciona_Dados("SAIDAS")
EndIf

EndProc

;*******************************************************************************
;* 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 [Tipo do Item           ]
Switch
   Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
   Case VSDGTIPOEST = "2"       : TypeIn "T or P"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
   OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
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" TypeIn ", ~VSDGITEM.."
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

;**** 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 [Tipo do Item           ]
Switch
   Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
   Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
        If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
   OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
EndSwitch
{Ask} {\\Sistemas\\Estoque\\SdEstq}
Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] Check Example "cite" TypeIn ", ~VSDGITEM.."
Moveto [Mes Referencia        ] TypeIn "~VSDGMES"
Moveto [Ano Referencia        ] TypeIn "~VSDGANO"
Moveto [Saldo Inicial         ] Check TypeIn "as Quantidade"
Do_It!
ClearAll

Adiciona_Dados("SALDOINICIAL")

;**** Semi-Acabados **************************************************
{Ask} TypeIn TabelaP Enter Check
Moveto [Tipo do Item           ] TypeIn "S"
Do_It!
ClearAll

TabelaS=Cria_Temp(PrivDir())
Copy "Answer" TabelaS

{Ask} TypeIn TabelaS Enter TypeIn "Fast"
Moveto [Saldo Inicial          ] Typein "_Sdi"
Moveto [Entradas               ] Typein "_qe"
Moveto [Total_Saidas           ] Typein "_qs"
Moveto [Saldo Atual            ] Typein "Changeto ((_Sdi+_qe)-_qs)"  
Do_It!
ClearAll
;*********************************************************************

{Ask} TypeIn TabelaS Enter
Moveto [Codigo da Empresa     ] Check
Moveto [Codigo do Item        ] TypeIn "_Cod"
Moveto [Saldo Atual           ] Check TypeIn ">0"
{Ask} {\\Sistemas\\Producao\\FormulaI}
Moveto [Codigo do Produto     ] Check 
Moveto [Codigo do Material    ] TypeIn "_Cod"
Do_It!
ClearAll

{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            ] TypeIn "_qfor, Calc(_qfor * _qp)/_qprod as Quantidade"
Moveto [Tipo do Item          ] TypeIn "Not S, Not D"    
{Ask} {Answer}
Moveto [Codigo da Empresa     ] Check
Moveto [Codigo do Produto     ] Example "cite"
Moveto [Saldo Atual           ] Example "qp" 
Do_It!
ClearAll

If IsEmpty("Answer")
   Then Return
EndIf

{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-Acabado *************************************************************
{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            ] TypeIn "_qfor, Calc(_qfor * _qp)/_qprod as Quantidade"
Moveto [Tipo do Item          ] TypeIn "Not D"
{Ask} TypeIn TabelaS Enter 
Moveto [Codigo da Empresa     ] Check
Moveto [Codigo do Item        ] Example "cite"
Moveto [Saldo Atual           ] TypeIn "_qp , >0"    
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")

EndProc ;Seleciona_Explosao()

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

NR=NRecords("Answer")         
                            
CoEdit TabelaP,"Answer"
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, Processando "+Tipo+BARRA_STRING)
 
  Moveto TabelaP
  Moveto [Codigo da Empresa]
  Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item]
  If Not RetVal
     Then ;If Tipo="EXPLOSAO" 
          ;   Then Moveto [Codigo do Item]
          ;        If Not Busca_Lookup("Codigo do Item",[Answer->Codigo do Item],"SM")
          ;           Then Moveto "Answer"
          ;                Loop
          ;        EndIf        
          ;EndIf        
          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="COMPRAS"      : [Compras_SemiAcabados]=[Compras_SemiAcabados]+[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")

;******* 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"
If CheckTG_USADESCRCOMPL[1]
   Then Moveto [Descricao Complementar ] Example "desc"
   Else Moveto [Descricao do Item      ] Example "desc"
EndIf   
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

NR=NRecords(TabelaP)
       
;***** Calculos **********
Edit TabelaP
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, Processando Dados"+BARRA_STRING)

   [Saldo Atual            ]=([Saldo Inicial]+[Entradas])-[Saidas ]
   [Disponivel             ]=([Saldo Atual  ]-[Pedidos ])+[Compras_SemiAcabados]
EndScan
Do_It!
ClearAll

;******** Somente Tipo de itens *******
{Ask} TypeIn TabelaP Enter Check
Moveto [Tipo do Item         ]
Switch
   Case VSDGTIPOEST = "1"       : Ask_Estoque("Tipo do Item","ItensAlmoxarifado")
   Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
   OtherWise                    : Ask_Estoque("Tipo do Item","NaoControlaEstoque")
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                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp      = True
MSG_CAMPO = ""
TECLA     = ""

If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9    : Temp=False
     Case Evento["KeyCode"] = -59  : 
          If Campo<>"TG_TIPOEST"
             Then Dialog_F1()
          EndIf   
     Case Evento["KeyCode"] = -68  :
            Temp=False
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESA"
            Case Campo="TG_EMPRESA"        : Campo="NO"
            Case Campo="TG_OPRELCODALF"    : Campo="TG_EMPRESA"
            Case Campo="TG_TIPOREL"        : Campo="TG_OPRELCODALF"
          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"        : 
                         If IsBlank(VSDGEMPRESA)
                            Then VSDGNOMEMP=""
                                 Mensagem("Informe a empresa para prosseguir !")
                            Else Campo="TG_OPRELCODALF"
                         EndIf
                    Case Campo="TG_OPRELCODALF"    : Campo="TG_TIPOREL"     
                    Case Campo="TG_TIPOREL"        : Campo="YES"
                         VSDGTIPOREL=ControlValue("TG_TIPOREL")
                         Switch
                           Case VSDGTIPOREL="2" : VSDGNOMTIPOREL="MOSTRAR SEMI-ACABADOS"  
                           OtherWise            : VSDGTIPOREL="1"
                                                  VSDGNOMTIPOREL="NAO MOSTRAR SEMI-ACABADOS"
                         EndSwitch
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="TG_TIPOREL" :
       MSG_CAMPO="1=Nao Mostrar Semi-Acabados  2=Mostrar Semi-Acabados"      
EndSwitch       
  
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc ;SD_Dialog()

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

ClearAll
                   
Array TG_OPEXPLOSAO[1]
Array TG_USADESCRCOMPL[1]
Array TG_APOSDTFIM[1]

Array CheckTG_OPEXPLOSAO[ArraySize(TG_OPEXPLOSAO)]
Array CheckTG_USADESCRCOMPL[ArraySize(TG_USADESCRCOMPL)]
Array CheckTG_APOSDTFIM[ArraySize(TG_APOSDTFIM)]

CheckTG_OPEXPLOSAO[1]    = False
CheckTG_USADESCRCOMPL[1] = False
CheckTG_APOSDTFIM[1]     = False
               
VSDGEMPRESA              = ""
VSDGNOMEMP               = ""
VSDGTIPOEST              = "1"
VSDGDESCTIPOEST          = "ALMOXARIFADO"
VSDGSITITEM              = ""
VSDGITEM                 = ""
VSDGOPRELCODALF          = ""
NVSDGMESES               = 0
VSDGMESANO               = AlinhM(StrVal(Month(Today())),2)+"."+AlinhM(StrVal(Year(Today())),4)
VSDGMES                  = SubStr(VSDGMESANO,1,2)
VSDGANO                  = SubStr(VSDGMESANO,4,4)
VSDGDTREF                = BlankDate()
VSDGDTINI                = BlankDate()
VSDGDTFIM                = BlankDate()
VSDGDIAS                 = 99999
VSDGOPSP                 = "1"  
VSDGTIPOREL              = ""
VSDGNOMOPSP              = "EM LINHA"
VSDGSITITEM              = "L Or Blank"
VTIPO                    = "W14.3,EIC"
VSDGTXAD                 = BlankNum()

Array CheckTG_OPOF[1]        CheckTG_OPOF[1]       =False ; False=+OF, True=-OF
 
While True

  ShowDialog "Posi‡„o do Estoque/Explosao/Compras IV" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140,-68
    @ 01,07 Height 13 Width 72
               
    Label  @ 00,00 "Empresa"  For "TG_EMPRESA"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESA"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

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

    Label  @ 04,00 "Op‡Æo de Relatorio"  For "TG_TIPOREL"
    Accept @ 05,04 Width 04 "A1"  Picture "1,2" Tag "TG_TIPOREL" To VSDGTIPOREL
    Accept @ 05,09 Width 25 "A30"  Picture "!*!" Tag "TG_NOMTIPOREL" To VSDGNOMTIPOREL

    @ 07,01 ?? "** Tipo Estoque = ALMOXARIFADO **"           
    
    Pushbutton @ 09,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
  
  EndDialog
  If Not RetVal Then QuitLoop EndIf
  If Not Valida_ShowDialog("") Then Loop EndIf
  
  For i From 1 To 3              
    
    Switch
      Case i=1 : If NumVal(VSDGMES) > 12 Or NumVal(VSDGMES) = 0
                    Then MENSAGEM("Mˆs Inv lido!")
                         SdK = False
                         QuitLoop
                    Else VSDGDTINI = DateVal("01."+VSDGMES+"."+VSDGANO)
                         VSDGDTREF=Ultimo_Dia(VSDGMES+VSDGANO)
                         If Month(VSDGDTREF)=Month(Today())
                            Then VSDGDTREF=Today()
                         EndIf
                         
                         If IsBlank(VSDGDTREF) Or (VSDGDTREF<VSDGDTINI)
                            Then Mensagem("Data Final Inv lida !")
                                 SdK = False
                                 QuitLoop     
                            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 !")
                                         SdK = False
                                         QuitLoop
                                    Else VSDGDTFIM = VSDGDTREF
                                         SdK = True 
                                 EndIf        
                         EndIf
                 EndIf
      Case i=2 And (IsBlank(VSDGDTREF) Or (VSDGDTFIM<VSDGDTINI)) :
               SdK = False
               QuitLoop
      Case i=3 And (Year(VSDGDTREF)<>NumVal(SubStr(VSDGMESANO,4,4)) Or Month(VSDGDTREF)<>NumVal(SubStr(VSDGMESANO,1,2))) : 
               SdK = False
               Mensagem("Data Final difere do mes/ano da Ficha de Estoque !")
               QuitLoop
    EndSwitch
  Endfor      
  If Not SdK Then Loop EndIf
                            
  DISPOSITIVO()
  If OK="" Then Loop EndIf

  ;-----------------------------------------------------------------------------
  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 "\\Base\\Sistemas\\Estoque\\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

  Seleciona_Compras()
  Seleciona_Explosao()
  Ajusta_Dados()

  If VSDGTIPOREL="1"
     Then {Ask} {Answer} TypeIn "Fast Delete" Enter
          Moveto [Tipo do Item] TypeIn "S"
          Do_It!
          ClearAll 
  EndIf  
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Registros a Processar")
          Delete TabelaP
          Loop
  EndIf
  
  CopyReport "\\Base\\Sistemas\\Estoque\\PosEstq" "13" "Answer" "R"   
  switch
    case VSDGOPRELCODALF="1"  : Seta_Ordem_Report("Answer","R","Codigo do Item","Codigo do Item"   ,"")
    case VSDGOPRELCODALF="2"  : Seta_Ordem_Report("Answer","R","Codigo do Item","Descricao do Item","")
  endswitch
  
  IMPRIREL("Answer","R")

  Delete "Answer"
  If IsTable(TabelaP) Then Delete TabelaP EndIf
EndWhile
ClearAll
Release Vars All
Release Procs All
