;** RM_3005 ********************************************************************
;*  Posicao Estoque/Expedi‡Æo                                                  *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 02/10/2019 por Anivel Augusto Rodrigues
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;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]
;Ultima Alteracao: 30/07/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ask tipo do item nova fun‡Æo

;*******************************************************************************
;* Ajusta Dados quando for TOTAL DE EMPRESAS                                   *  
;*******************************************************************************
Proc Todas_Empresas()

If IsEmpty(TabelaP)
   Then Return 
EndIf    

{Ask} TypeIn TabelaP Enter 
Moveto [Codigo do Item         ] Check
Moveto [Saldo Inicial          ] TypeIn "Calc Sum as Saldo Inicial"
Moveto [Entradas               ] TypeIn "Calc Sum as Entradas"
Moveto [Saidas                 ] TypeIn "Calc Sum as Saidas"
Moveto [Expedidos              ] TypeIn "Calc Sum as Expedidos"
Do_It!
ClearAll

Empty(TabelaP)

{Ask} {Answer}
Moveto [Codigo do Item         ] Example "CodI"
Moveto [Saldo Inicial          ] Example "Sald"
Moveto [Entradas               ] Example "Entr"
Moveto [Saidas                 ] Example "Said"
Moveto [Expedidos              ] Example "Ped"
{Ask} TypeIn TabelaP Enter Typein "Fast Insert" 
Moveto [Codigo da Empresa      ] TypeIn "0000"
Moveto [Nome Fantasia Empresa  ] TypeIn "TOTALIZA EMPRESAS"
Moveto [Codigo do Item         ] TypeIn "_CodI"
Moveto [Saldo Inicial          ] TypeIn "_Sald"
Moveto [Entradas               ] TypeIn "_Entr"
Moveto [Saidas                 ] TypeIn "_Said"
Moveto [Expedidos              ] TypeIn "_Ped"
Do_It!
ClearAll

EndProc ;Todas_Empresas()    

;*******************************************************************************
;* 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 "~VSDGEMPRESA2.."
        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 "~VSDGEMPRESA2.."
        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 "~VSDGEMPRESA2.."
        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 entradas/saidas")

;*** Faturamento ***
  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\\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"       : Ask_EstoqueTpItem("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_EstoqueTpItem("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 ", ~VSDGEMPRESA2.."
    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
    Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
    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

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\\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"       : Ask_EstoqueTpItem("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_EstoqueTpItem("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 "~VSDGEMPRESA2.."
          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
        
        If Not IsEmpty("\\Sistemas\\Vendas\\FaturaID")
           Then ;*** Ordem de Faturamento de Entrada/Troca ***
                {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"       : Ask_EstoqueTpItem("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_EstoqueTpItem("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 "~VSDGEMPRESA2.."
                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
EndIf

;*** Notas de Entrada/Estoque ***
  If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") And
     IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
     Then
          {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"       : Ask_EstoqueTpItem("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_EstoqueTpItem("NaoControlaEstoque")
          EndSwitch

          {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
          Moveto [Numero do Lancamento     ] Example "doc"
          Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
          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\\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"       : Ask_EstoqueTpItem("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_EstoqueTpItem("NaoControlaEstoque")
  EndSwitch

  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
  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\\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"       : Ask_EstoqueTpItem("ItensAlmoxarifado")
           Case VSDGTIPOEST = "2"       : TypeIn "T or S"
           Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
                If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
           OtherWise                    : Ask_EstoqueTpItem("NaoControlaEstoque")
        EndSwitch

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
        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_EXPEDICOES()
AGUARDE("Aguarde, selecionando expedi‡äes")
ClearAll

{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"       : Ask_EstoqueTpItem("ItensAlmoxarifado")
   Case VSDGTIPOEST = "2"       : TypeIn "T or P"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
        If VSDGTIPOEST="P" Then TypeIn " Or S" EndIf
   OtherWise                    : Ask_EstoqueTpItem("NaoControlaEstoque")
EndSwitch

{Ask} {\\Sistemas\\Vendas\\ExpedC}
Moveto [Numero da OE       ]       Example "Exped" 
Moveto [Codigo da Empresa  ] Check TypeIn "~VSDGEMPRESA.."
Moveto [Situacao da OE     ]       TypeIn "EM ABERTO or LIBERADO"

{Ask} {\\Sistemas\\Vendas\\ExpedI}
Moveto [Numero da OE           ]       Example "Exped" 
Moveto [Codigo do Item         ] Check Example "cite" TypeIn ", ~VSDGITEM.."
Moveto [Quantidade_Pedido      ]       TypeIn "Calc Sum as QuantidadeP"
Moveto [Quantidade_Expedida    ]       TypeIn "Calc Sum as Quantidade"
Do_It!
ClearAll
Adiciona_Dados("EXPEDIDOS")

If CheckTG_ITENSEXPEDIDOS[1]
   Then 
        {Ask} {Answer}
        Moveto [Codigo do Item         ] Check
        Do_It!
        ClearAll
        
        TabelaPItens=Adiciona_Indice_Temp("Codigo do Item")  ; Tabela rela‡Æo de Itens das Expedicoes
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="EXPEDIDOS"    : [Expedidos           ]=[Expedidos           ]+[Answer->Quantidade]
                               If [Answer->QuantidadeP]>[Answer->Quantidade]
                                  then [AExpedir            ]=[AExpedir            ]+([Answer->QuantidadeP]-[Answer->Quantidade])
                               endif   
    Case Tipo="SALDOINICIAL" : [Saldo Inicial       ]=[Saldo Inicial       ]+[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\\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"       : Ask_EstoqueTpItem("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_EstoqueTpItem("NaoControlaEstoque")
EndSwitch
{Ask} {\\Sistemas\\Estoque\\SdEstq}
Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA2.."
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")

;-- Itens dos Expedidos ----------------------------------------------------------
If CheckTG_ITENSEXPEDIDOS[1]
   Then 
        {Ask} TypeIn TabelaPItens Enter
        Moveto [Codigo do Item        ] Example "CodI"
        {Ask} TypeIn TabelaP Enter Check
        Moveto [Codigo do Item        ] Example "CodI"
        Do_It!
        ClearAll

        Delete TabelaPItens

        Empty(TabelaP)
        Add "Answer" TabelaP
        ClearAll
EndIf

If VSDGEMPRESA="0000" 
   Then 
        Todas_Empresas()
   else 
        ;******* 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
EndIf

;******* 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

;** Elimina os Inativos **********************
{Ask} {\\Sistemas\\Estoque\\Itens}
Moveto [Codigo do Item        ] example "item"
Moveto [Inativo               ] TypeIn "S"
{Ask} TypeIn TabelaP Enter TypeIn "Fast Delete"
Moveto [Codigo do Item        ] example "item"
Moveto [Saldo Atual           ] TypeIn "0 or Blank"
Moveto [Expedidos             ] TypeIn "0 or Blank"
Moveto [AExpedir              ] TypeIn "0 or Blank"
Do_It!
ClearAll    

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

   [Disponivel             ]= [Saldo Atual  ]-[Expedidos] 

   [Disponivel2            ]= [Saldo Atual  ]-([Expedidos]+[AExpedir]) 
   
EndScan
Do_It!
ClearAll

{Ask} TypeIn TabelaP Enter TypeIn "Fast Delete"
Moveto [Saldo Atual      ] TypeIn "blank or 0"
Moveto [Expedidos        ] TypeIn "blank or 0"
Moveto [AExpedir         ] TypeIn "blank or 0"
Do_It!
ClearAll

;-- Itens Indisponiveis --------------------------------------------------------
If CheckTG_ITENSINDISP[1]
   Then 
       {Ask} TypeIn TabelaP Enter TypeIn "Fast Delete"
       Moveto [Disponivel       ] TypeIn ">=0"
       Do_It!
       ClearAll
EndIf

;-- Somente Tipo de itens ------------------------------------------------------
{Ask} TypeIn TabelaP Enter Check
Moveto [Tipo do Item         ]
Switch
   Case VSDGTIPOEST = "1"       : Ask_EstoqueTpItem("ItensAlmoxarifado")
   Case VSDGTIPOEST = "2"       : TypeIn "T or P or S"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
   OtherWise                    : Ask_EstoqueTpItem("NaoControlaEstoque")
EndSwitch
Do_It!
ClearAll

EndProc    ; (Seleciona)

;*******************************************************************************
;* 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"] = -68  :
            Temp=False
            Relatorios()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESATE"        : Campo="NO"
            Case Campo="TG_TIPOEST"        : Campo="TG_EMPRESATE"
            Case Campo="TG_MESANO"         : Campo="TG_TIPOEST"
            Case Campo="TG_DTREF"          : Campo="TG_MESANO"
            Case Campo="TG_FAMI"           : Campo="TG_DTREF"
            Case Campo="TG_GRP"            : Campo="TG_FAMI"
            Case Campo="TG_MARCA"          : Campo="TG_GRP"
            Case Campo="TG_ITEM"           : Campo="TG_MARCA"
            Case Campo="TG_OPRELCODALF"    : Campo="TG_ITEM"
            Case Campo="TG_OPOF"           : Campo="TG_OPRELCODALF"
            Case Campo="TG_ITENSEXPEDIDOS" : Campo="TG_OPOF"                   
            Case Campo="TG_ITENSINDISP"    : Campo="TG_ITENSEXPEDIDOS"                   
            Case Campo="TG_CODMODELO"      : Campo="TG_ITENSINDISP"                   
            Case Campo="YES" Or Campo="NO" : Campo="TG_EMPRESATE"
          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_EMPRESATE" : Campo="TG_TIPOEST"
                    Case Campo="TG_TIPOEST" : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :
                         VSDGMES=SubStr(VSDGMESANO,1,2)
                         VSDGANO=SubStr(VSDGMESANO,4,4)
                      ;  If NumVal(VSDGANO) < 2000
                      ;     Then VSDGANO=SubStr(VSDGANO,3,2)
                      ;     Else VSDGANO=VSDGANO
                      ;  EndIf
                         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_FAMI"
                                 EndIf
                         EndIf
                    Case Campo="TG_FAMI"        : Campo="TG_GRP"
                    Case Campo="TG_GRP"         : Campo="TG_MARCA"
                    Case Campo="TG_MARCA"       : Campo="TG_ITEM"
                    Case Campo="TG_ITEM"        : Campo="TG_OPRELCODALF"
                    Case Campo="TG_OPRELCODALF" : Campo = "TG_OPOF"
                    Case Campo="TG_OPOF"        : Campo="TG_ITENSEXPEDIDOS"
                    Case Campo="TG_ITENSEXPEDIDOS" : Campo="TG_ITENSINDISP"                   
                    Case Campo="TG_ITENSINDISP"    : Campo="TG_CODMODELO"                   
                    Case Campo="TG_CODMODELO"      : Campo="YES"                   
                  EndSwitch
          EndIf
   EndSwitch
EndIf
Switch
  Case Campo="TG_DTREF":
       MSG_CAMPO="Informe a Data Final (para estoque e programa‡”es)"
  Case Campo="TG_ITENSEXPEDIDOS" Or Campo="TG_ITENSINDISP":
     MensagemCheckBoxes()
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_3005")

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01  Por Tipo do Item/Marca/Familia/Grupo + Referencia")
ModeloRelatoriosAdd("02  Por Tipo do Item")
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     = "2"
VSDGDESCTIPOEST = "VENDAS"
VSDGMESANO      = ""
VSDGDTREF       = BlankDate()
VSDGDTINI       = BlankDate()
VSDGDTFIM       = BlankDate()
VSDGFAMI        = ""
VSDGMARCA       = ""
VSDGGRP         = ""
VSDGITEM        = ""
VSDGOPRELCODALF = ""
VSDGMESANO   = AlinhM(StrVal(Month(Today())),2)+"."+AlinhM(StrVal(Year(Today())),4)

Array CheckTG_ITENSEXPEDIDOS[1]  CheckTG_ITENSEXPEDIDOS[1] =False
Array CheckTG_ITENSINDISP[1]     CheckTG_ITENSINDISP[1]    =False

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

ModeloRelatoriosCarregaLista()      

While True

  ShowDialog "Posi‡„o do Estoque/Expedi‡Æ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_EMPRESATE"
    Accept @ 01,01 Width 07 "A4"  Picture "[&,#][#*#]" Tag "TG_EMPRESATE"    To VSDGEMPRESA
    Accept @ 01,09 Width 25 "A20" Picture "!*!" Tag "TG_NOMEMPRESA" To VSDGNOMEMP

    Label  @ 02,00 "Tipo do Estoque"  For "TG_TIPOEST"
    Accept @ 03,04 Width 04 "A1"  Picture "!" Tag "TG_TIPOEST" To VSDGTIPOEST
    Accept @ 03,09 Width 25 "A30"  Picture "!*!" Tag "TG_DESCTIPOEST" To VSDGDESCTIPOEST

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

    Label  @ 04,20 "Data Final" For "TG_DTREF"
    Accept @ 05,21 Width 13 "D"  Picture "#[#];.##;.##[##]" Tag "TG_DTREF" To VSDGDTREF

    Label  @ 07,00 "Familia"  For "TG_FAMI"
    Accept @ 07,09 Width 07 "A3"  Picture "#*#" Tag "TG_FAMI" To VSDGFAMI
    Accept @ 07,15 Width 19 "A25" Picture "!*!" Tag "TG_NOMFAMI" To VSDGNOMFAMI

    Label  @ 08,00 "Grupo"  For "TG_GRP"
    Accept @ 08,09 Width 07 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 08,15 Width 19 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP
    
    Label  @ 09,00 "Marca"  For "TG_MARCA"
    Accept @ 09,09 Width 07 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 09,15 Width 19 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 10,00 "Item"  For "TG_ITEM"
    Accept @ 11,01 Width 33 "A10" Picture "#*#" Tag "TG_ITEM"     To VSDGITEM
    Accept @ 12,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM
  
    Label  @ 00,35 "Op‡Æo de Ordem" For "TG_OPRELCODALF"
    Accept @ 01,39 Width 04 "A1"  Picture "1,2" Tag "TG_OPRELCODALF" To VSDGOPRELCODALF
    Accept @ 01,44 Width 25 "A25"  Picture "!*!" Tag "TG_NOMOPRELCODALF" To VSDGNOMOPRELCODALF

    CheckBoxes @ 02,35 Height 1 Width 33 Tag "TG_OPOF"  "Ignorar OFïs nÆo emitidas"  to CheckTG_OPOF[1]
    CheckBoxes @ 03,35 Height 1 Width 43 Tag "TG_ITENSEXPEDIDOS"  "Ver s¢ Itens das Expedi‡äes"            to CheckTG_ITENSEXPEDIDOS[1]
    CheckBoxes @ 04,35 Height 1 Width 43 Tag "TG_ITENSINDISP"     "Ver s¢ Itens com indisponibilidade"     to CheckTG_ITENSINDISP[1]

    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 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 VSDGEMPRESA="0000"
     Then VSDGEMPRESA2=""
     Else VSDGEMPRESA2=VSDGEMPRESA
  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\\Rm_3005" 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_Expedicoes()
  
  Ajusta_Dados()  
  
  If IsEmpty("Answer")
     Then MENSAGEM("N„o Existem Registros a Processar")
          Delete TabelaP
          Loop
  EndIf
     
  Switch
    Case VSDGCODMODELO="01" :  CopyReport "\\Base\\Sistemas\\Estoque\\Rm_3005" "R" "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

    Case VSDGCODMODELO="02" :  CopyReport "\\Base\\Sistemas\\Estoque\\Rm_3005" "4"  "Answer" "R"
                               switch
                                 case VSDGOPRELCODALF="1"  : Seta_Ordem_Report("Answer","R","Codigo do Item","Referencia"       ,"")
                                 case VSDGOPRELCODALF="2"  : Seta_Ordem_Report("Answer","R","Codigo do Item","Descricao do Item","")
                               endswitch

  EndSwitch 
     
  SetaVisualizarCasasDecimais("12")

  IMPRIREL("Answer","R")

  Delete "Answer"
  Delete TabelaP

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