;** Rm_0011C *******************************************************************
;*  Registro de Inventario para Exportacao Opaf                                *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 08/08/2013 por Bruno Carvalho
;Ultima Alteracao: 08/08/2013 por Bruno Carvalho    
;Motivo Alteracao: Script alterado para melhor agilidade no seu processo    
;Ultima Alteracao: 07/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao buscar o custo na Ficha de Estoque
;Ultima Alteracao: 15/01/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes Seleciona_Estoque() (Erro na ask quando mandava inventario)
;Ultima Alteracao: 30/09/2015 por Bruno Carvalho
;Motivo Alteracao: Alterado "Codigo da Empresa Destino" - > "Codigo"
;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() na proc Seleciona_NotaC()
;Ultima Alteracao: 01/02/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado o periodo inicial (VSDGDTINI) conforme o periodo referente VSDGDTREF 
;Ultima Alteracao: 01/02/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado PrimeiroDia_MesAnterior e UltimoDia_MesPosterior p/ resgatar o primeiro dia do mˆs anterior e o ultimo dia do mˆs posterior
;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: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Æo para Impostos 
;Ultima Alteracao: 13/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Entrada de MOSTRUARIO - custo medio 
;Ultima Alteracao: 22/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_MOV, layout e valor

;*******************************************************************************
;* Rotina p/ Verificar se existe movimentacao no mes em aberto/fechado         *
;*******************************************************************************
Proc Verifica_Mov()
AGUARDE("Aguarde, checando dados de saida ")

;*** 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+"Faturamento [Data Saida]    "
                Switch
                  Case VSDGMOV="ABERTO" : MSG_MODULO=MSG_MODULO+" - "+Dir_Trab+"//"
                  Case VSDGMOV="FECHADO": MSG_MODULO=MSG_MODULO+" - Em aberto//"
                EndSwitch
                PROCESSAR_DADOS=False
        EndIf
EndIf

AGUARDE("Aguarde, checando dados de entrada ")
;*** 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+"Notas de Entradas no Estoque"
                Switch
                  Case VSDGMOV="ABERTO" : MSG_MODULO=MSG_MODULO+" - "+Dir_Trab+"//"
                  Case VSDGMOV="FECHADO": MSG_MODULO=MSG_MODULO+" - Em aberto//"
                EndSwitch
                PROCESSAR_DADOS=False
        EndIf
EndIf

AGUARDE("Aguarde, checando dados de requisicao ")
;*** 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+"Requisi‡”es no Estoque      "
                Switch
                  Case VSDGMOV="ABERTO" : MSG_MODULO=MSG_MODULO+" - "+Dir_Trab+"//"
                  Case VSDGMOV="FECHADO": MSG_MODULO=MSG_MODULO+" - Em aberto//"
                EndSwitch
                PROCESSAR_DADOS=False
        EndIf
EndIf

AGUARDE("Aguarde, checando dados de fatura ")
If VSDGOPOF="S" And VSDGMOV="FECHADO"
   Then ;*** Ordem de Fatura de Saida/Entrada - Faturamento ***
        {Ask} {\\Sistemas\\Vendas\\Destin}
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Atualiza Estoque         ] TypeIn "S"
        {Ask} {\\Sistemas\\Vendas\\FaturaC}
        Moveto [Numero da OF             ] Check
        Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Data de Emissao          ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo Movimento Estoque   ] TypeIn "E Or S"
        Moveto [Numero Nota Gerada       ] TypeIn "Blank"
        Do_It!
        ClearAll
        If Not IsEmpty("Answer")
           Then MSG_MODULO=MSG_MODULO+"Ordem Fatura [Data Emiss„o] "+" - Em aberto//"
                PROCESSAR_DADOS=False
        EndIf
EndIf

EndProc    ; Verifica_Mov()

;*******************************************************************************
;* Adiciona Dados                                                              *
;*******************************************************************************
Proc Adiciona_Dados(Tabela,Opcao)
Private Tabela,Opcao
AGUARDE("Aguarde, adicionando dados ")
                                                
Switch                                                                                 
  Case Tabela="NOTAI" :
  {Ask} {Answer}
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Data de Saida            ] Example "dtref"
  Moveto [Item do Documento        ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Quantidade               ] Example "qtd"
  If Opcao="2"
     Then   Moveto [Preco Total              ] Example "vrtot"
            Moveto [Valor do ICMS            ] Example "vricms"
            Moveto [Valor do IPI             ] Example "vripi"
            Moveto [Valor Desconto Total     ] Example "vrdes" 
  EndIf
  {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
  Moveto [Tabela                   ] TypeIn "NOTAI"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Data do Movimento        ] Example "dtref"
  Moveto [Quantidade               ] Example "qtd"
  Switch
    Case Opcao="1" : Moveto [Tipo do Movimento        ] TypeIn "S"
    Case Opcao="2" : Moveto [Tipo do Movimento        ] TypeIn "E"
                     Moveto [Valor Unitario           ] TypeIn "((_vrtot - (_vrdes + _vricms )) + _vripi)/_qtd"
                     Moveto [Valor Total              ] TypeIn "(_vrtot - (_vrdes + _vricms ))+ _vripi"
    Case Opcao="3" : Moveto [Tipo do Movimento        ] TypeIn "E"
                     Moveto [Tipo de Operacao         ] TypeIn "D"
  EndSwitch
  Do_It!
  ClearAll

  Case Tabela="FATURAI" : 
  {Ask} {Answer}
  Moveto [Numero da OF             ] Example "doc"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Data de Emissao          ] Example "dtref"
  Moveto [Item da OF               ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Quantidade               ] Example "qtd"
  If Opcao="3" 
     Then Moveto [Preco Total         ] Example "vrtot"
          Moveto [Valor do ICMS       ] Example "vricms"
          Moveto [Valor do IPI        ] Example "vripi"
          Moveto [Valor Desconto Total] Example "vrdes"
  EndIF        

  {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
  Moveto [Tabela                   ] TypeIn "FATURAI"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Data do Movimento        ] Example "dtref"
  Moveto [Quantidade               ] Example "qtd"
  Switch
    Case Opcao="1" : Moveto [Tipo do Movimento        ] TypeIn "S"
    Case Opcao="3" : Moveto [Tipo do Movimento        ] TypeIn "E"
                     Moveto [Valor Unitario           ] TypeIn "((_vrtot - (_vrdes + _vricms))+ _vripi)/_qtd"
                     Moveto [Valor Total              ] TypeIn "(_vrtot - (_vrdes + _vricms))+ _vripi"
    Case Opcao="4" : Moveto [Tipo do Movimento        ] TypeIn "E"
                     Moveto [Tipo de Operacao         ] TypeIn "D"                                                           
  EndSwitch
  Do_It!
  ClearAll

  Case Tabela="FATURAID" : 
  If Not IsEmpty("\\Sistemas\\Vendas\\FATURAID")
     Then {Ask} {Answer}
          Moveto [Numero da OF             ] Example "doc"
          Moveto [Codigo da Empresa        ] Example "emp"
          Moveto [Data de Emissao          ] Example "dtref"
          Moveto [Item da OF               ] Example "seq"
          Moveto [Codigo do Item           ] Example "ite"
          Moveto [Quantidade               ] Example "qtd"
          {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
          Moveto [Tabela                   ] TypeIn "FATURAID"
          Moveto [Codigo da Empresa        ] Example "emp"
          Moveto [Numero do Lancamento     ] Example "doc"
          Moveto [Sequencia do Lancamento  ] Example "seq"
          Moveto [Codigo do Item           ] Example "ite"
          Moveto [Data do Movimento        ] Example "dtref"
          Moveto [Tipo do Movimento        ] TypeIn "E"
          Moveto [Quantidade               ] Example "qtd"
          Do_It!
          ClearAll
  EndIf
  
  Case Tabela="NOTAEI" :
  {Ask} {Answer}
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Data de Entrada          ] Example "dtref"
  Moveto [Tipo de Operacao         ] Example "oper"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Quantidade               ] Example "qtd"
  Moveto [Quantidade Convertida    ] Example "qtdcv"
  Moveto [Custo Medio Unitario     ] Example "ctuni"
  {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
  Moveto [Tabela                   ] TypeIn "NOTAEI"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Data do Movimento        ] Example "dtref"
  Moveto [Tipo do Movimento        ] TypeIn "E"
  Moveto [Tipo de Operacao         ] Example "oper"
  Moveto [Quantidade               ] Example "qtdcv"
  Moveto [Valor Unitario           ] TypeIn "(_ctuni*_qtd)/_qtdcv"
  Moveto [Valor Total              ] Example "ctuni" TypeIn "*" Example "qtd"
  Do_It!
  ClearAll
  
  Case Tabela="RQMATPRI" :  
  {Ask} {Answer}
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Data de Ocorrencia       ] Example "dtref"
  Moveto [Sequencia do Item        ] Example "seq"
  Moveto [Sequencia Materia Prima  ] Example "seqm"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Quantidade               ] Example "qtd"
  Moveto [Custo Unitario           ] Example "ctuni"
  Moveto [Custo Total              ] Example "cttot"
  {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
  Moveto [Tabela                   ] TypeIn "RQMATPRI"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Sequencia Materia Prima  ] Example "seqm"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Data do Movimento        ] Example "dtref"
  Moveto [Tipo do Movimento        ] TypeIn "S"
  Moveto [Tipo de Operacao         ] TypeIn  "C"
  Moveto [Quantidade               ] Example "qtd"
  Moveto [Valor Unitario           ] Example "ctuni"
  Moveto [Valor Total              ] Example "cttot"
  Do_It!
  ClearAll  

  Case Tabela="RQITEM" : 
  {Ask} {Answer}
  Moveto [Numero do Lancamento     ] Example "doc"
  If Opcao="1"
     Then Moveto [Codigo da Empresa] Example "emp"
     Else Moveto [Codigo           ] Example "emp"
  EndIf   
  Moveto [Data de Ocorrencia       ] Example "dtref"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Quantidade               ] Example "qtd"
  Moveto [Custo Unitario           ] Example "ctuni"
  Moveto [Custo Total              ] Example "cttot"
  {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
  Moveto [Tabela                   ] TypeIn "RQITEM"
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Sequencia do Lancamento  ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite"
  Moveto [Data do Movimento        ] Example "dtref"
  Moveto [Tipo do Movimento        ] TypeIn "E"
  Moveto [Tipo de Operacao         ] TypeIn  "T"
  Moveto [Quantidade               ] Example "qtd"
  Moveto [Valor Unitario           ] Example "ctuni"
  Moveto [Valor Total              ] Example "cttot"
  Do_It!
  ClearAll

  Case Tabela="SALDO" : 
  {Ask} {Answer}
  Moveto [Codigo da Empresa     ] Example "EMPRESA"
  Moveto [Codigo do Item        ] Example "ITEM"
  Moveto [Saldo Inicial         ] Example "QUANT"
  Moveto [Custo Total Inicial   ] Example "CUSTO"
  {Ask} TypeIn TabelaR Enter TypeIn "Fast Insert"
  Moveto [Codigo da Empresa     ] Example "EMPRESA"
  Moveto [Codigo do Item        ] Example "ITEM"
  Moveto [Quantidade            ] Example "QUANT"
  Moveto [Valor Unitario        ] Example "CUSTO" TypeIn "/" Example "QUANT"
  Moveto [Valor Total           ] Example "CUSTO"
  Moveto [Tipo do Movimento     ] TypeIn "E"
  Do_It!
  ClearAll

EndSwitch                                     
                                     
EndProc ;Adiciona_Dados()

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

;*** Notas de Saida/Faturamento ************************************************
For ii From 1 To CONT_REGRA 
  For i From 1 To 3
    AGUARDE("Aguarde, selecionando registro de saida - etapa "+StrVal(i)+"/3 ")
    If Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC") Or
       Not IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaI")
       Then Loop
    EndIf
  
    {Ask} TypeIn TabelaREF Enter
    Moveto [Codigo do Item           ] Example "cite"
  
    {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 TypeIn "_emp, ~VSDGEMPRESA.."
    Moveto [Numero do Documento      ] Check Example "doc"
    Moveto [Serie do Documento       ] Check Example "ser"
    Moveto [Codigo da Destinacao     ] Example "destin"
    Switch
      Case i=1: Moveto [Tipo Movimento Estoque ] TypeIn "S"
      Case i=2: Moveto [Descricao da Destinacao] TypeIn "Not ..DEVOL.., Not ..MANIF..,  Not ..CONSIG..,  Not ..REQUIS.., Not ..MOSTRUA.."
                Moveto [Tipo Movimento Estoque ] TypeIn "E"
      Case i=3: Moveto [Descricao da Destinacao] TypeIn "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.. Or ..MOSTRUA.."
                Moveto [Tipo Movimento Estoque ] TypeIn "E"
    EndSwitch
    Switch
      Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida  ] Check 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  ] Check TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
                                                Else Moveto [Data de Emissao] Check TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM ,as Data de Saida"
                                              EndIf
      Case REGRA_DATA_ESTOQUE = "Nova"      : Moveto [Data de Emissao] Check TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM ,as Data de Saida"
    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 [Item do Documento        ] Check
    Moveto [Codigo do Item           ] Check Example "cite"
    Moveto [Quantidade               ] Check
    If i=2                              
       Then Moveto [Preco Total         ] Check
            Moveto [Valor do ICMS       ] Check
            Moveto [Valor do IPI        ] Check
            Moveto [Valor Desconto Total] Check        
    EndIf
    Moveto [Situacao_Item            ] TypeIn "Not C"
    
    Do_It!
    ClearAll
  
    Switch                       
      Case i=1 : Adiciona_Dados("NOTAI","1")
      Case i=2 : Adiciona_Dados("NOTAI","2")
      Case i=3 : Adiciona_Dados("NOTAI","3")
    EndSwitch
  EndFor
EndFor

EndProc ;Seleciona_NotaC()

;*******************************************************************************
;* Rotina p/ Selecionar e Order Registros                                      *
;*******************************************************************************
Proc Seleciona_Estoque()
                                
If VSDGOPOF="S" And Dir_Trab="" And IsTable("\\Sistemas\\Vendas\\FaturaC")
   Then For i From 1 To 4               
          AGUARDE("Aguarde, selecionando registro de faturamento - etapa "+StrVal(i)+"/4 ")
          ;If i=2 And IsEmpty("\\Sistemas\\Vendas\\FaturaID") Then Loop EndIf
          
          {Ask} TypeIn TabelaREF Enter
          Moveto [Codigo do Item           ] Example "cite"
          
          {Ask} {\\Sistemas\\Vendas\\Destin}
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Atualiza Estoque         ] TypeIn "S"
          
          {Ask} TypeIn "\\Sistemas\\Vendas\\FaturaC" Enter
          Moveto [Numero da OF             ] Check Example "doc"
          Moveto [Codigo da Empresa        ] Check TypeIn "_emp, ~VSDGEMPRESA.."
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Data de Emissao          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
          Switch
            Case i=1 : Moveto [Tipo Movimento Estoque ] TypeIn "S"              ;*** Ordem de Faturamento de Saida/Faturamento ********************                                              
            Case i=2 : Moveto [Descricao da Destinacao] TypeIn "..TROCA.."                                                                                                                                                             
                       Moveto [Tipo Movimento Estoque ] TypeIn "S"              ;*** Ordem de Faturamento de Entrada/Troca ************************                                              
            Case i=3 : Moveto [Descricao da Destinacao] TypeIn "Not ..DEVOL.., Not ..MANIF..,  Not ..CONSIG..,  Not ..REQUIS.., Not ..MOSTRUA.."                                                 
                       Moveto [Tipo Movimento Estoque ] TypeIn "E"              ;*** Ordem de Fatura de Entrada/Faturamento ***********************                                                                                                                                                                  
            Case i=4 :  Moveto [Descricao da Destinacao] TypeIn "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.. Or ..MOSTRUA.."                                                             
                       Moveto [Tipo Movimento Estoque ] TypeIn "E"              ;*** Ordem de Fatura de Entrada/Faturamento DEVOLUCAO/MANIFESTO ***                                                 
          EndSwitch
          Moveto [Numero Nota Gerada       ] TypeIn "Blank"
          
          {Ask} TypeIn "\\Sistemas\\Vendas\\FaturaI" Enter
          ;If i=2
          ;   Then {Ask} TypeIn "\\Sistemas\\Vendas\\FaturaID" Enter
          ;   Else {Ask} TypeIn "\\Sistemas\\Vendas\\FaturaI" Enter
          ;EndIf   
          Moveto [Numero da OF             ] Example "doc"
          Moveto [Item da OF               ] Check
          Moveto [Codigo do Item           ] Check Example "cite"
          Moveto [Quantidade               ] Check
          If i=3
             Then Moveto [Preco Total         ] Check
                  Moveto [Valor do ICMS       ] Check
                  Moveto [Valor do IPI        ] Check
                  Moveto [Valor Desconto Total] Check
          EndIf   
          Do_It!
          ClearAll

          Switch                       
            Case i=1 : Adiciona_Dados("FATURAI","1")
            Case i=2 : Adiciona_Dados("FATURAI","2")   ;FATURAID ???
            Case i=3 : Adiciona_Dados("FATURAI","3")
            Case i=4 : Adiciona_Dados("FATURAI","4")
          EndSwitch
        EndFor
EndIf        

;*** Notas de Entrada/Estoque **************************************************
For i From 1 To 3
  AGUARDE("Aguarde, selecionando registro de entrada - etapa "+StrVal(i)+"/3 ")
  If Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC") Or
     Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI")
     Then Loop
  EndIf
  {Ask} TypeIn TabelaREF Enter
  Moveto [Codigo do Item           ] Example "cite"  
  
  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEC" Enter
  Moveto [Numero do Lancamento     ] Check Example "doc"
  Moveto [Codigo da Empresa        ] Check TypeIn "_emp, ~VSDGEMPRESA.."
  Moveto [Data de Entrada          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  Moveto [Tipo de Operacao         ] Check TypeIn "Not A, Not I"
  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Sequencia do Lancamento  ] Check
  Moveto [Codigo do Item           ] Check Example "cite"  
  Moveto [Quantidade               ] Check
  Moveto [Quantidade Convertida    ] Check
  Moveto [Custo Medio Unitario     ] Check
  Do_It!
  ClearAll

  Adiciona_Dados("NOTAEI","1")

EndFor        

;*** Requisicoes/Estoque *******************************************************
For i From 1 To 3
  AGUARDE("Aguarde, selecionando registro de requisicao - etapa "+StrVal(i)+"/3 ")
  If Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca") Or
     Not IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem")
     Then Loop
  EndIf 
  {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
  Moveto [Numero do Lancamento     ] Check Example "doc"
  If i=3  
     Then Moveto [Codigo           ] Check Example "Emp"
     Else Moveto [Codigo da Empresa] Check Example "Emp"
  EndIf
  Moveto [Data de Ocorrencia       ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
  Switch
    Case i=1 : Moveto [Tipo de Movimento] Check
    Case i=2 : Moveto [Tipo de Movimento] Check TypeIn "E"
               Moveto [Tipo de Operacao ] Check TypeIn "P Or I"
    Case i=3 : Moveto [Tipo de Movimento] Check TypeIn "S"
               Moveto [Tipo de Operacao ] Check TypeIn "T"
  EndSwitch
  Moveto [Tipo de Operacao         ] Check

  If i=2
     Then {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri" Enter
          Moveto [Sequencia do Item        ] Check
          Moveto [Sequencia Materia Prima  ] Check
     Else {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem" Enter
          Moveto [Sequencia do Lancamento  ] Check
  EndIf 
  Moveto [Numero do Lancamento     ] Example "doc"
  Moveto [Codigo do Item           ] Check Example "cite"  
  Moveto [Quantidade               ] Check
  Moveto [Custo Unitario           ] Check
  Moveto [Custo Total              ] Check
  Do_It!
  ClearAll
              
  Switch                       
    Case i=1 : Adiciona_Dados("RQITEM","1")
    Case i=2 : Adiciona_Dados("RQMATPRI","2")
    Case i=3 : Adiciona_Dados("RQITEM","3")
  EndSwitch
EndFor

EndProc ;Seleciona_Estoque() 

;*******************************************************************************
;* Rotina p/ Processar Dados                                                   *
;*******************************************************************************             
Proc Processa()
ClearAll
AGUARDE("Aguarde, processando registros ")

If IsTable("\\FechAno\\"+VSDGANO+"\\Estoque\\Sdestq") 
   Then TAB_TEMP = "\\FechAno\\"+VSDGANO+"\\Estoque\\Sdestq"
   Else TAB_TEMP = "\\Sistemas\\Estoque\\SdEstq"
EndIf 

;**** Saldo Inicial ************************************************************
{Ask} TypeIn TabelaREF Enter
Moveto [Codigo da Empresa     ] Example "Emp"
Moveto [Codigo do Item        ] Example "cite"
{Ask} TypeIn TAB_TEMP Enter
Moveto [Codigo da Empresa     ] Check Example "Emp"
Moveto [Codigo do Item        ] Check Example "cite"
Moveto [Saldo Inicial         ] Check
Moveto [Custo Total Inicial   ] Check
Moveto [Mes Referencia        ] TypeIn "~VSDGMES"
Moveto [Ano Referencia        ] TypeIn "~VSDGANO"
Do_It!
ClearAll

Adiciona_Dados("SALDO","")

If IsEmpty(TabelaR)
   Then Return
EndIf

Sort TabelaR  On "Codigo da Empresa","Codigo do Item",
                 "Data do Movimento","Tipo do Movimento","Sequencia do Lancamento"

NR = NRecords(TabelaR)

View TAB_TEMP
CoEdit "\\Sistemas\\Producao\\FormulaC","\\Sistemas\\Vendas\\Tbprite",TabelaREF,TabelaR

CUSTO                = 0
CUSTO_OM             = 0
SALDO                = 0
VRUNIT               = 0
ITEM                 = [Codigo do Item   ]
EMPRESA2             = [Codigo da Empresa]
Custo_Total_ATual    = 0
Custo_Unitario_Atual = 0
Saldo_Atual          = 0
DATANEG              = BlankDate()

Ler_CustoInicial()
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, processando dados "+BARRA_STRING)

   If [Codigo do Item] <> ITEM Or [Codigo da Empresa] <> EMPRESA2
      Then Grava_Invent()
           DATANEG = BlankDate()
           Ler_CustoInicial()
   EndIf

   If IsBlank([Data do Movimento])
      Then CUSTO_OM = VRUNIT
   Endif

   CUSTO = 0

   Switch
     Case [Tipo do Movimento]="E":
          If [Tipo de Operacao]="D"
             Then CUSTO = NDecimal(Custo_Total_Atual/Saldo_Atual,5)
                  If CUSTO = 0
                     Then CUSTO = CUSTO_OM
                  EndIf
                  Saldo_Atual       = NDecimal(Saldo_Atual + [Quantidade],3)
                  Custo_Total_Atual = NDecimal(Custo_Total_Atual +(CUSTO*[Quantidade]),2)
             Else Saldo_Atual       = NDecimal(Saldo_Atual      +[Quantidade],3)
                  Custo_Total_Atual = NDecimal(Custo_Total_Atual+[Valor Total],2)
          EndIf
     Case [Tipo do Movimento]="S":
          CUSTO = NDecimal(Custo_Total_Atual/Saldo_Atual,5)
          If CUSTO = 0
             Then CUSTO = CUSTO_OM
          EndIf

          If [Tabela] = "RQITEM" And [Tipo de Operacao] = "O"
             Then Saldo_Atual       = NDecimal(Saldo_Atual - [Quantidade],3)
                  Custo_Total_Atual = NDecimal(Custo_Total_Atual-[Valor Total],2)
             Else Saldo_Atual       = NDecimal(Saldo_Atual - [Quantidade],3)
                  Custo_Total_Atual = NDecimal(Custo_Total_Atual-([Quantidade]*CUSTO),2)
          EndIf
   EndSwitch

   If Saldo_Atual = 0 And (Custo_Total_Atual >= -0.03 And Custo_Total_Atual <= 0.03)
      Then Custo_Total_Atual = 0
   EndIf

   If (Custo_Total_Atual/Saldo_Atual) > 0
      Then CUSTO_OM = NDecimal(Custo_Total_Atual/Saldo_Atual,5)
   EndIf

   Moveto TabelaR
EndScan
Grava_Invent()
Do_It!
ClearAll

EndProc ;Processa()

;*******************************************************************************
;* Rotina Ler Custo                                                            *
;*******************************************************************************
Proc Ler_CustoInicial()

Moveto TAB_TEMP
Moveto [Codigo da Empresa]                                                                   
Locate EMPRESA2,ITEM,VSDGANO,VSDGMES
If RetVal
   Then VRUNIT=NDecimal([Ultimo Custo Inicial],5)
   Else VRUNIT=0
EndIf
Moveto TabelaR

EndProc ;Ler_CustoInicial()

;*******************************************************************************
;* Rotina Grava Inventario                                                     *
;*******************************************************************************
Proc Grava_Invent()
Private CodItem
AGUARDE("Aguarde, gravando invent rio ")
                                
Switch                                                                          
  Case VSDGOPCUSTO="V":
			 CodItem    = ITEM
           If Not IsAssigned(VSDGTABELA)
          Then VSDGTABELA = "00001"                                             ; Informar a Tabela de Pre‡o
       EndIf   

   		 Moveto TabelaREF
			 Moveto [Codigo do Item]
			 Locate CodItem
			 If RetVal
			    Then If Not IsBlank([Codigo da Grade])
				          Then CodItem=PegaCodigoRaiz(CodItem)
				       EndIf
       EndIf

       Moveto "\\Sistemas\\Vendas\\TbprIte"
       Moveto [Codigo da Tabela]
       Locate VSDGTABELA,coditem
       If RetVal
          Then Custo_Total_Atual    = NDecimal(Saldo_Atual*[Preco Unitario],2)
               Custo_Unitario_Atual = [Preco Unitario]
          Else Custo_Total_Atual    = BlankNum()
               Custo_Unitario_Atual = BlankNum()
       EndIf
       
  Case VSDGOPCUSTO="U":
       Moveto TAB_TEMP
       Moveto [Codigo da Empresa]
       Locate EMPRESA2,ITEM,VSDGANO,VSDGMES
       If RetVal
          Then Custo_Total_Atual    = NDecimal(Saldo_Atual*[Preco de Custo],2)
               Custo_Unitario_Atual = [Preco de Custo]
          Else Custo_Total_Atual    = BlankNum()
               Custo_Unitario_Atual = BlankNum()
       EndIf
       
  Case VSDGOPCUSTO="F":
       Moveto "\\Sistemas\\Producao\\FormulaC"
       Moveto [Codigo do Produto]
       Locate ITEM
       If RetVal
          Then Custo_Total_Atual    = NDecimal(Saldo_Atual*[Custo Unitario],2)
               Custo_Unitario_Atual = [Custo Unitario]
          Else Custo_Total_Atual    = BlankNum()
               Custo_Unitario_Atual = BlankNum()
       EndIf     
                                                                
  Case VSDGOPCUSTO="M":
       Custo_Unitario_Atual         = Custo_Total_Atual/Saldo_Atual
       
EndSwitch        

Moveto TabelaREF
Moveto [Codigo do Item]
Locate ITEM
If ReTval
   Then While ITEM = [Codigo do Item]
          If [Codigo da Empresa] = EMPRESA2 
             Then [Custo Total Atual]=Custo_Total_Atual
                  [Saldo Atual      ]=Saldo_ATual
                  [Valor Unitario   ]=Custo_Unitario_Atual   
          EndIf
          Skip
          If Eot() Then QuitLoop EndIf
          Locate Next ITEM
          If Not RetVal
             Then QuitLoop 
          EndIf   
        EndWhile
EndIf        

Moveto TabelaR
ITEM                 = [Codigo do Item   ]
EMPRESA2             = [Codigo da Empresa]
Custo_Total_Atual    = 0
Custo_Unitario_Atual = 0
Saldo_ATual          = 0
CUSTO_OM             = 0

EndProc ;Grava_Invent()

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
VSDGDIA = AlinhM(StrVal(Day(Today())),2)
VSDGMES = AlinhM(StrVal(Month(Today())),2)
VSDGANO = AlinhM(StrVal( Year(Today())),4)

VSDGDTREF = Today()-1
VSDGDTINI = DateVal("01."+AlinhM(StrVal(Month(VSDGDTREF)),2)+"."+StrVal(Year(VSDGDTREF)))
VSDGDTFIM = VSDGDTREF

VERIFICA_MOV   = False
NAO_FAZ        = False     
VSDGOPOF       = ""
VSDGMOV        = ""
VSDGOPCUSTO    = ""

;**** Ordem de Faturamento n„o Emitida *****************************************
VSDGOPOF="S"

;**** Mˆs Fechado **************************************************************
VSDGMOV="ABERTO"

;**** Op‡„o de Pre‡o ***********************************************************
VSDGOPCUSTO="M" ;Custo Médio

;**** Verifica Mˆs Fechado *****************************************************
If VERIFICA_MOV
   Then AGUARDE("Aguarde, checando dados")
        PROCESSAR_DADOS=True
        MSG_MODULO=""
        Switch
          Case VSDGMOV="ABERTO":
        	   	 Monta_Dir_Trab(PrimeiroDia_MesAnterior(VSDGDTINI),UltimoDia_MesPosterior(VSDGDTFIM))
        			 While Novo_Dir_Trab()
                  If Not IsBlank(Dir_Trab)
                     Then Verifica_Mov()
        				 EndIf
        			 EndWhile
      		Case VSDGMOV="FECHADO":
        			 Dir_Trab=""
               Verifica_Mov()
       EndSwitch
       If Not PROCESSAR_DADOS
          Then Switch
                 Case VSDGMOV="ABERTO":
                      MSG="Existem movimenta‡”es fechadas://"
                      MSG=MSG+MSG_MODULO+" //"
                      MSG=MSG+"Vocˆ selecionou op‡„o mˆs em aberto.// //"
                 Case VSDGMOV="FECHADO":
                      MSG="Existem movimenta‡”es em aberto://"
                      MSG=MSG+MSG_MODULO+" //"
                      MSG=MSG+"Voce selecionou op‡„o mˆs fechado.// //"
               EndSwitch
               MSG=MSG+"Verificar !"
               Mensagem(MSG)
               NAO_FAZ=True
       EndIf                  
EndIf  

If NAO_FAZ
   Then Mensagem("Opera‡„o Cancelada !")
   Else AGUARDE("Aguarde, processando o inventario ")
        
        TabelaR=Cria_Temp(Privdir())
        Empty "\\Sistemas\\Estoque\\Reproces"
        Copy "\\Sistemas\\Estoque\\Reproces" TabelaR

        Switch
          Case VSDGMOV="FECHADO":
               ;---- Processo adptado no NotaC o qual foi alterado para outra proc p/ utiliza‡Æo de REGRA -------
               Identifica_MesAno_Periodo(PrimeiroDia_MesAnterior(VSDGDTINI),UltimoDia_MesPosterior(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()
                   If Not IsBlank(Dir_Trab)
                      Then Seleciona_NotaC()
                   EndIf   
                 EndWhile
               EndFor
                    
      				 Monta_Dir_Trab(PrimeiroDia_MesAnterior(VSDGDTINI),UltimoDia_MesPosterior(VSDGDTFIM))
      				 While Novo_Dir_Trab()
                 If Not IsBlank(Dir_Trab)
                    Then Seleciona_Estoque()
      					 EndIf
      				 EndWhile
          Case VSDGMOV="ABERTO":
      				 Dir_Trab=""
      		 	   ;---- 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    
                
                 Seleciona_NotaC()
               EndFor
               ;-------------------------------------------------------------------------------------------------		 
               Seleciona_Estoque()
        EndSwitch  
        Processa()
 
        Delete "Answer"
        Delete TabelaR
        ClearAll
EndIf

Release Procs Verifica_Mov, Adiciona_Dados, Seleciona_Estoque, Processa, Ler_CustoInicial, Grava_Invent
