;** Rm_0011 ********************************************************************
;*  Registro de Inventario de Estoque                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 28/08/2006 por Anivel Augusto Rodrigues
;Motivo Alteracao: Tratamento de Inativos com saldo zerado
;Ultima Alteracao: 27/12/2006 por Nikolas
;Motivo Alteracao: Inclusao novo modelo com cod barras
;Ultima Alteracao: 23/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Custo Total centavos
;Ultima Alteracao: 03/07/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes DTREF
;Ultima Alteracao: 14/08/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Deleta_Arquivo
;Ultima Alteracao: 19/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Repreoces Sequencia do Lancamento
;Ultima Alteracao: 10/05/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Grava_Invent() Pega Preco Venda Item tipo D c/ grade
;Ultima Alteracao: 23/07/2010 por Bruno Carvalho
;Motivo Alteracao: Adicionado Novo Relat¢rio (15.Referˆncia)
;Ultima Alteracao: 30/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Novas op‡äes de consistˆncia de erros
;Ultima Alteracao: 07/02/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Itens Zerados
;Ultima Alteracao: 08/02/2011 por Bruno Carvalho
;Motivo Alteracao: Novos Ajustes "Op‡Æo 15"
;Ultima Alteracao: 12/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Inclusao TG_REFERENCIA/BIB_SHOW
;Ultima Alteracao: 26/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes codigo cliente confec‡Æo       
;Ultima Alteracao: 30/04/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Isabela Garcia Nova Codifica‡Æo
;Ultima Alteracao: 12/05/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes novas fun‡äes para confec‡äes  
;Ultima Alteracao: 30/08/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Entradas Faturamento para custo medio DEVOL/MANIF/CONSIG/REQUIS
;Ultima Alteracao: 01/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes OF em aberto situa‡Æo TROCA
;Ultima Alteracao: 08/11/2011 por Karina Andrade
;Motivo Alteracao: Ajustes Aliquota de ICMS para op‡Æo "10 - Invent rio/Tipo Tributa‡„o"
;Ultima Alteracao: 06/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Localiza‡Æo TabelaI
;Ultima Alteracao: 23/01/2012 por Karina Andrade
;Motivo Alteracao: Ajustes TG_CONSIST
;Ultima Alteracao: 08/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Report - op‡Æo 15 
;Ultima Alteracao: 11/05/2012 por Karina Andrade
;Motivo Alteracao: Ajustes Report - op‡Æo 15 
;Ultima Alteracao: 25/05/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado Op‡Æo 16 (Cor/Referencia)
;Ultima Alteracao: 05/06/2012 por Karina Andrade
;Motivo Alteracao: Adicionado novos campos na tabela INVENT
;Ultima Alteracao: 07/07/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado Op‡Æo 17 (Referencia/Cor)
;Ultima Alteracao: 10/07/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado filtro na ask do NotaI "Situacao_Item"
;Ultima Alteracao: 12/07/2012 por Bruno Carvalho
;Motivo Alteracao: Adicionado Op‡Æo 18 (Marca/CodFornecedor)
;Ultima Alteracao: 20/08/2012 por Bruno Carvalho
;Motivo Alteracao: Rotina para ordenar por Codigo Fornecedor independente de filtro por cod/alf "0296"
;Ultima Alteracao: 28/08/2012 por Kamila Gomes
;Motivo Alteracao: Adicionado Modelo 19 (Marca/Grupo para contagem)
;Ultima Alteracao: 19/09/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Substitui‡Æo Editor novo arquivo por FileWrite
;Ultima Alteracao: 11/02/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Itens propriedade de terceiros                 
;Ultima Alteracao: 13/02/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Modelo 20 (Dt Primeira Entrada / Dt Ultima Saida)
;Ultima Alteracao: 27/02/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Proc Processa() p/ agilizar o processo de consulta
;Ultima Alteracao: 15/03/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Proc Processa()
;Ultima Alteracao: 18/03/2013 por Bruno Carvalho
;Motivo Alteracao: Ajustes Processa() onde tabelait ter  a mesma struct de Itens
;Ultima Alteracao: 09/07/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes adicionando campo NCM                          
;Ultima Alteracao: 06/08/2013 por Karina Andrade
;Motivo Alteracao: Ajustes op‡Æo 15.Referencia para qualquer cliente
;Ultima Alteracao: 24/12/2013 por Bruno Carvalho
;Motivo Alteracao: Adicionado Modelo 21 e 22 (Modelo de Grade)
;Ultima Alteracao: 14/01/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes, nÆo estavam copiando os reports REL p/ a TabelaRel 
;Ultima Alteracao: 07/02/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes Modelo 21 e 22 
;Ultima Alteracao: 07/07/2014 por Bruno Carvalho
;Motivo Alteracao: Ajustes ao buscar o custo na Ficha de Estoque
;Ultima Alteracao: 14/08/2014 por Bruno Carvalho
;Motivo Alteracao: Adicionado novo Modelo "23" (Curva ABC) 
;Ultima Alteracao: 03/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Aguarde/LimpAguarde, indice na tabela invent
;Ultima Alteracao: 19/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado novo Modelo "24" (Localiza‡Æo/Contagem)
;Ultima Alteracao: 26/06/2015 por Kamila Gomes
;Motivo Alteracao: Adicionado novo filtro Localiza‡Æo
;Ultima Alteracao: 18/09/2015 por Andrey Fillipe
;Motivo Alteracao: Adicionado verificacao de Mes/Ano fechado "Existe_Mes_Ano_Fechado()"
;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: 06/01/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado modelo de relat¢rio 25 por referˆncia, pre‡o de venda e ultimo custo 
;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: 08/03/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Layout ShowDialog 
;Ultima Alteracao: 23/03/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Modelo 26 - Comparativo de Invent rio #0102#
;Ultima Alteracao: 28/03/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Modelo 27 "Gera Invent rio - Bloco H - SPED Fiscal"
;Ultima Alteracao: 02/06/2016 por Bruno Carvalho 
;Motivo Alteracao: Ajustes "Iten_Com" -> [Situacao]    
;Ultima Alteracao: 14/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_LOCAL       
;Ultima Alteracao: 25/06/2016 por Bruno Carvalho
;Motivo Alteracao: Removido Link nos Report "RM_0011A" e utilizado fun‡Æo Ajusta_Answer() e Adiciona_Dados_Tabela()                    
;Ultima Alteracao: 07/07/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado Ajusta_Dados() -> Mostra o Invent rio totalizando TODAS AS EMPREAS  
;Ultima Alteracao: 11/08/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data Referencia, comparativo inventario txt
;Ultima Alteracao: 02/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Filtro Departamento
;Ultima Alteracao: 10/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 29/09/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0388# -> PegaCodigoRaiz()
;Ultima Alteracao: 18/11/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_LOCAL
;Ultima Alteracao: 03/12/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0390# -> PegaCodigoRaiz()
;Ultima Alteracao: 17/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_EMPRESATE                 
;Ultima Alteracao: 28/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 27/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 03/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Nota Entrada Opera‡Æo para Impostos 
;Ultima Alteracao: 13/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Entrada de MOSTRUARIO - custo medio 
;Ultima Alteracao: 27/01/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes TG_REFERENCIA
;Ultima Alteracao: 27/01/2017 por Anivel Augusto Rodrigues 
;Motivo Alteracao: Ajustes gravar parametros
;Ultima Alteracao: 07/04/2017 por Bruno Carvalho
;Motivo Alteracao: Ajustes #0396# -> PegaCodigoRaiz()
;Ultima Alteracao: 05/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Seta_Ordem_Report()                
;Ultima Alteracao: 27/02/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes curva abc    
;Ultima Alteracao: 22/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes TG_MOV, layout e valor
;Ultima Alteracao: 22/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado TG_CODMODELO, TG_CODMODELO_COMCASASDECIMAIS
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Adicionado SetaVisualizarCasasDecimais(),ConfigOpcoes()
;Ultima Alteracao: 26/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes variavel casas decimais

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

If Not IsAssigned(TabelaI) Or IsEmpty(TabelaI)
   Then Return 
EndIf    

 {Ask} TypeIn TabelaI Enter 
Moveto [Codigo do Item         ] Check
Moveto [Custo Total Atual      ] TypeIn "Calc Sum as Custo Total"
Moveto [Saldo Atual            ] TypeIn "Calc Sum as Saldo Atual"
Do_It!
ClearAll

{Ask} TypeIn TabelaI Enter TypeIn "Fast"
Moveto [Codigo da Empresa      ] TypeIn "Changeto 0000"
Moveto [Nome Fantasia Empresa  ] TypeIn "Changeto TOTALIZA EMPRESAS"
Do_It!
ClearAll

{Ask} {Answer}
Moveto [Codigo do Item   ] Example "CodI"
Moveto [Custo Total      ] Example "CusT"
Moveto [Saldo Atual      ] Example "Sald"
{Ask} TypeIn TabelaI Enter 
Moveto [Codigo do Item   ] Example "CodI"
Moveto [Custo Total Atual] TypeIn "Changeto _CusT"
Moveto [Saldo Atual      ] TypeIn "Changeto _Sald"
Moveto [Valor Unitario   ] TypeIn "Changeto _Sald/_CusT" 
Do_It!
ClearAll

EndProc ;Ajusta_Dados()    

;*******************************************************************************
;* Ajusta Dados na Answer                                                      *  
;*******************************************************************************
Proc Ajusta_Answer(PARAM)
Private PARAM

If IsAssigned(AUX_TAB) And IsTable(AUX_TAB) Then Delete AUX_TAB EndIf
AUX_TAB = Cria_Temp(PrivDir())

Switch 
  Case PARAM = "RM_0011A" : Copy Tabela_Invent "Answer"
                            Copy "\\Base\\Sistemas\\Estoque\\RM_0011A" AUX_TAB             
EndSwitch

Switch 
  Case PARAM = "RM_0011A" :
      {Ask} {Answer} 
      Moveto [Codigo da Empresa   ] Example "_Emp"
      Moveto [Razao Social Empresa] TypeIn "Changeto _raz"
      Moveto [CGC Empresa         ] TypeIn "Changeto _cgc"
      Moveto [IE Empresa          ] TypeIn "Changeto _ie"                                     
      Moveto [Endereco Empresa    ] TypeIn "Changeto _end"
      Moveto [Bairro Empresa      ] TypeIn "Changeto _bai"
      Moveto [CEP Empresa         ] TypeIn "Changeto _cep"
      Moveto [Cidade Empresa      ] TypeIn "Changeto _cid"
      Moveto [UF Empresa          ] TypeIn "Changeto _uf"
      {Ask} {\\Sistemas\\Cadastro\\Empresas}
      Moveto [Codigo da Empresa   ] Example "_Emp"
      Moveto [Razao Social Empresa] TypeIn "_raz"
      Moveto [CGC Empresa         ] TypeIn "_cgc"
      Moveto [IE Empresa          ] TypeIn "_ie"                                     
      Moveto [Endereco Empresa    ] TypeIn "_end"
      Moveto [Bairro Empresa      ] TypeIn "_bai"
      Moveto [CEP Empresa         ] TypeIn "_cep"
      Moveto [Cidade Empresa      ] TypeIn "_cid"
      Moveto [UF Empresa          ] TypeIn "_uf"
      Do_It!
      ClearAll
EndSwitch
                  
Adiciona_Dados_Tabela(AUX_TAB) 

Switch 
  Case PARAM = "RM_0011A" : Rename AUX_TAB Tabela_Invent             
EndSwitch   
                               
EndProc ;Ajusta_Answer()

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

AGUARDE("Aguarde, verifcando se existe lan‡amentos j  fechados/abertos")

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

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

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

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 "~VSDGEMPRESA2.."
        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)

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

AGUARDE("Aguarde, carregando movimentos de "+AlinhM(StrVal(Month(AUX_DTINI)),2)+"."+StrVal(Year(AUX_DTINI)))

;*** Notas de Saida/Faturamento ***
If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"NotaC")
   Then For i From 1 To CONT_REGRA
          {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      ] Check Example "doc"
          Moveto [Serie do Documento       ] Check Example "ser"
          Moveto [Tipo do Documento        ] Check
          Moveto [Codigo da Destinacao     ] Example "destin"
          Switch
            Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida  ] Check TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
            Case REGRA_DATA_ESTOQUE = "Transicao" : If i=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 [Tipo Movimento Estoque   ] TypeIn "S"
          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
          Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
          Moveto [Quantidade               ] Check
          Moveto [Situacao_Item            ] TypeIn "Not C"
          Do_It!
          ClearAll
          
          {Ask} {Answer}
          Moveto [Codigo da Empresa        ] Example "emp"
          Moveto [Numero do Documento      ] Example "doc"
          Moveto [Serie do Documento       ] Example "ser"
          Moveto [Tipo do Documento        ] Example "tpdoc"
          Moveto [Data de Saida            ] Example "dtref"
          Moveto [Item do Documento        ] Example "seq"
          Moveto [Codigo do Item           ] Example "ite"
          Moveto [Quantidade               ] Example "qtd"
          {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 [Tipo do Movimento        ] TypeIn "S"
          Moveto [Quantidade               ] Example "qtd"
          Moveto [Numero do Documento      ] Example "doc"
          Moveto [Tipo do Documento        ] Example "tpdoc"
          Do_It!
          ClearAll
  
          ;*** Notas de Entrada/Faturamento ***
          {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      ] Check Example "doc"
          Moveto [Serie do Documento       ] Check Example "ser"
          Moveto [Tipo do Documento        ] Check
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Descricao da Destinacao  ] TypeIn "Not ..DEVOL.., Not ..MANIF..,  Not ..CONSIG..,  Not ..REQUIS.., Not ..MOSTRUA.."
          Switch
            Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida  ] Check TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
            Case REGRA_DATA_ESTOQUE = "Transicao" : If i=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 [Tipo Movimento Estoque   ] TypeIn "E"
          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
          Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
          Moveto [Quantidade               ] Check
          Moveto [Preco Total              ] Check
          Moveto [Valor do ICMS            ] Check
          Moveto [Valor do IPI             ] Check
          Moveto [Valor Desconto Total     ] Check
          Moveto [Situacao_Item            ] TypeIn "Not C"
          Do_It!
          ClearAll
  
          {Ask} {Answer}
          Moveto [Codigo da Empresa        ] Example "emp"
          Moveto [Numero do Documento      ] Example "doc"
          Moveto [Serie do Documento       ] Example "ser"
          Moveto [Tipo do Documento        ] Example "tpdoc"
          Moveto [Data de Saida            ] Example "dtref"
          Moveto [Item do Documento        ] Example "seq"
          Moveto [Codigo do Item           ] Example "ite"
          Moveto [Quantidade               ] Example "qtd"
          Moveto [Preco Total              ] Example "vrtot"
          Moveto [Valor do ICMS            ] Example "vricms"
          Moveto [Valor do IPI             ] Example "vripi"
          Moveto [Valor Desconto Total     ] Example "vrdes"
          {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 [Tipo do Movimento        ] TypeIn "E"
          Moveto [Quantidade               ] Example "qtd"
          Moveto [Tipo do Documento        ] Example "tpdoc"   
          Moveto [Numero do Documento      ] Example "doc"          
          Moveto [Valor Unitario           ] TypeIn "((" Example "vrtot" TypeIn "-(" Example "vrdes" TypeIn "+" Example "vricms" TypeIn "))+"
                                             Example "vripi" TypeIn ")/" Example "qtd"
          Moveto [Valor Total              ] TypeIn "(" Example "vrtot" TypeIn "-(" Example "vrdes" TypeIn "+" Example "vricms" TypeIn "))+"
                                             Example "vripi"
          Do_It!
          ClearAll
  
          ;*** Notas de Entrada/Faturamento DEVOLUCAO/MANIFESTO ***
          {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      ] Check Example "doc"
          Moveto [Serie do Documento       ] Check Example "ser"
          Moveto [Tipo do Documento        ] Check
          Moveto [Codigo da Destinacao     ] Example "destin"
          Moveto [Descricao da Destinacao  ] TypeIn "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.. Or ..MOSTRUA.."
          Switch
            Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida  ] Check TypeIn ">=~AUX_DTINI, <=~AUX_DTFIM"
            Case REGRA_DATA_ESTOQUE = "Transicao" : If i=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 [Tipo Movimento Estoque   ] TypeIn "E"
          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
          Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
          Moveto [Quantidade               ] Check
          Moveto [Situacao_Item            ] TypeIn "Not C"
          Do_It!
          ClearAll
  
          {Ask} {Answer}
          Moveto [Codigo da Empresa        ] Example "emp"
          Moveto [Numero do Documento      ] Example "doc"
          Moveto [Serie do Documento       ] Example "ser"
          Moveto [Tipo do Documento        ] Example "tpdoc"
          Moveto [Data de Saida            ] Example "dtref"
          Moveto [Item do Documento        ] Example "seq"
          Moveto [Codigo do Item           ] Example "ite"
          Moveto [Quantidade               ] Example "qtd"
          {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 [Tipo do Movimento        ] TypeIn "E"
          Moveto [Tipo de Operacao         ] TypeIn "D"
          Moveto [Quantidade               ] Example "qtd"
          Moveto [Tipo do Documento        ] Example "tpdoc"
          Moveto [Numero do Documento      ] Example "doc"
          Do_It!
          ClearAll
        EndFor
EndIf

EndProc ;Seleciona_NotaC()

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

AGUARDE("Aguarde, carregando movimentos")

If VSDGOPOF="S"
   Then ;*** Ordem de Faturamento de Saida/Faturamento ***
        If IsTable("\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaC")
           Then 
                {Ask} {\\Sistemas\\Vendas\\Destin}
                Moveto [Codigo da Destinacao     ] Example "destin"
                Moveto [Atualiza Estoque         ] TypeIn "S"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaC" Enter
                Moveto [Numero da OF             ] Check Example "doc"
                Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
                Moveto [Codigo da Destinacao     ] Example "destin"
                Moveto [Data de Emissao          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
                Moveto [Tipo Movimento Estoque   ] TypeIn "S"
                Moveto [Numero Nota Gerada       ] TypeIn "Blank"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaI" Enter
                Moveto [Numero da OF             ] Example "doc"
                Moveto [Item da OF               ] Check
                Moveto [Codigo do Item           ] Check
                Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
                Moveto [Quantidade               ] Check
                Do_It!
                ClearAll

                {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 "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 [Tipo do Movimento        ] TypeIn "S"
                Moveto [Quantidade               ] Example "qtd"  
                Moveto [Tipo do Documento        ] TypeIn "OF"
                Moveto [Serie do Documento       ] TypeIn "OF"
                Moveto [Numero do Documento      ] Example "doc"
                Do_It!
                ClearAll

                If Not IsEmpty("\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaID")
                   Then ;*** Ordem de Faturamento de Entrada/Troca ***
                        {Ask} {\\Sistemas\\Vendas\\Destin}
                        Moveto [Codigo da Destinacao     ] Example "destin"
                        Moveto [Atualiza Estoque         ] TypeIn "S"
                        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaC" Enter
                        Moveto [Numero da OF             ] Check 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          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
                        Moveto [Tipo Movimento Estoque   ] TypeIn "S"
                        Moveto [Numero Nota Gerada       ] TypeIn "Blank"
                        {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaID" Enter
                        Moveto [Numero da OF             ] Example "doc"
                        Moveto [Item da OF               ] Check
                        Moveto [Codigo do Item           ] Check
                        Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
                        Moveto [Quantidade               ] Check
                        Do_It!
                        ClearAll
        
                        {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"
                        Moveto [Tipo do Documento        ] TypeIn "OF"
                        Moveto [Serie do Documento       ] TypeIn "OF"
                        Moveto [Numero do Documento      ] Example "doc"
                        Do_It!
                        ClearAll
                EndIf

                ;*** Ordem de Fatura de Entrada/Faturamento ***
                {Ask} {\\Sistemas\\Vendas\\Destin}
                Moveto [Codigo da Destinacao     ] Example "destin"
                Moveto [Atualiza Estoque         ] TypeIn "S"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaC" Enter
                Moveto [Numero da OF             ] Check Example "doc"
                Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
                Moveto [Codigo da Destinacao     ] Example "destin"
                Moveto [Descricao da Destinacao  ] TypeIn "Not ..DEVOL.., Not ..MANIF..,  Not ..CONSIG..,  Not ..REQUIS.., Not ..MOSTRUA.."
                Moveto [Data de Emissao          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
                Moveto [Tipo Movimento Estoque   ] TypeIn "E"
                Moveto [Numero Nota Gerada       ] TypeIn "Blank"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaI" Enter
                Moveto [Numero da OF             ] Example "doc"
                Moveto [Item da OF               ] Check
                Moveto [Codigo do Item           ] Check
                Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
                Moveto [Quantidade               ] Check
                Moveto [Preco Total              ] Check
                Moveto [Valor do ICMS            ] Check
                Moveto [Valor do IPI             ] Check
                Moveto [Valor Desconto Total     ] Check
                Do_It!
                ClearAll

                {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"
                Moveto [Preco Total              ] Example "vrtot"
                Moveto [Valor do ICMS            ] Example "vricms"
                Moveto [Valor do IPI             ] Example "vripi"
                Moveto [Valor Desconto Total     ] Example "vrdes"
                {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 [Tipo do Movimento        ] TypeIn "E"
                Moveto [Quantidade               ] Example "qtd"
                Moveto [Tipo do Documento        ] TypeIn "OF"
                Moveto [Serie do Documento       ] TypeIn "OF"
                Moveto [Numero do Documento      ] Example "doc"
                Moveto [Valor Unitario           ] TypeIn "((" Example "vrtot" TypeIn "-(" Example "vrdes" TypeIn "+" Example "vricms" TypeIn "))+"
                                                   Example "vripi" TypeIn ")/" Example "qtd"
                Moveto [Valor Total              ] TypeIn "(" Example "vrtot" TypeIn "-(" Example "vrdes" TypeIn "+" Example "vricms" TypeIn "))+"
                                                   Example "vripi"
                Do_It!
                ClearAll

                ;*** Ordem de Fatura de Entrada/Faturamento DEVOLUCAO/MANIFESTO ***
                {Ask} {\\Sistemas\\Vendas\\Destin}
                Moveto [Codigo da Destinacao     ] Example "destin"
                Moveto [Atualiza Estoque         ] TypeIn "S"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaC" Enter
                Moveto [Numero da OF             ] Check Example "doc"
                Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
                Moveto [Codigo da Destinacao     ] Example "destin"
                Moveto [Descricao da Destinacao  ] TypeIn "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.. Or ..MOSTRUA.."
                Moveto [Data de Emissao          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
                Moveto [Tipo Movimento Estoque   ] TypeIn "E"
                Moveto [Numero Nota Gerada       ] TypeIn "Blank"
                {Ask} TypeIn "\\Sistemas\\Vendas\\"+Dir_Trab+"FaturaI" Enter
                Moveto [Numero da OF             ] Example "doc"
                Moveto [Item da OF               ] Check
                Moveto [Codigo do Item           ] Check
                Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
                Moveto [Quantidade               ] Check
                Do_It!
                ClearAll

                {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 "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 [Tipo do Movimento        ] TypeIn "E"
                Moveto [Tipo de Operacao         ] TypeIn "D"
                Moveto [Quantidade               ] Example "qtd"
                Moveto [Tipo do Documento        ] TypeIn "OF"
                Moveto [Serie do Documento       ] TypeIn "OF"
                Moveto [Numero do Documento      ] Example "doc"
                Do_It!
                ClearAll
        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 Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
        Moveto [Data de Entrada          ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo de Operacao         ] Check TypeIn "Not A, Not I"
        Moveto [Tipo do Documento        ] Check
        Moveto [Numero do Documento      ] Check
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"NotaEI" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Sequencia do Lancamento  ] Check
        Moveto [Codigo do Item           ] Check
        Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        Moveto [Quantidade               ] Check
        Moveto [Quantidade Convertida    ] Check
        Moveto [Custo Medio Unitario     ] Check
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Example "emp"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        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 [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        Moveto [Valor Unitario           ] TypeIn "(_ctuni*_qtd)/_qtdcv"
        Moveto [Valor Total              ] Example "ctuni" TypeIn "*" Example "qtd"
        Do_It!
        ClearAll                                            
EndIf

;*** Ajuste em 05/04/2002 ***
;*** Requisicoes/Estoque ***
If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca")
   Then {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Check Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
        Moveto [Data de Ocorrencia       ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo do Documento        ] Check
        Moveto [Numero do Documento      ] Check
        Moveto [Tipo de Movimento        ] Check
        Moveto [Tipo de Operacao         ] Check
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Sequencia do Lancamento  ] Check
        Moveto [Codigo do Item           ] Check
        Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        Moveto [Quantidade               ] Check
        Moveto [Custo Unitario           ] Check
        Moveto [Custo Total              ] Check
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Example "emp"
        Moveto [Data de Ocorrencia       ] Example "dtref"
        Moveto [Tipo de Movimento        ] Example "mov"
        Moveto [Tipo de Operacao         ] Example "oper"
        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"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        {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        ] Example "mov"
        Moveto [Tipo de Operacao         ] Example "oper"
        Moveto [Quantidade               ] Example "qtd"
        Moveto [Valor Unitario           ] Example "ctuni"
        Moveto [Valor Total              ] Example "cttot"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        Do_It!
        ClearAll

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Check Example "doc"
        Moveto [Codigo da Empresa        ] Check TypeIn "~VSDGEMPRESA2.."
        Moveto [Data de Ocorrencia       ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo de Movimento        ] Check TypeIn "E"
        Moveto [Tipo de Operacao         ] Check TypeIn "P Or I"
        Moveto [Tipo do Documento        ] Check
        Moveto [Numero do Documento      ] Check
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqMatPri" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Sequencia do Item        ] Check
        Moveto [Sequencia Materia Prima  ] Check
        Moveto [Codigo do Item           ] Check
        Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        Moveto [Quantidade               ] Check
        Moveto [Custo Unitario           ] Check
        Moveto [Custo Total              ] Check
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo da Empresa        ] Example "emp"
        Moveto [Data de Ocorrencia       ] Example "dtref"
        Moveto [Tipo de Movimento        ] Example "mov"
        Moveto [Tipo de Operacao         ] Example "oper"
        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"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        {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"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        Do_It!
        ClearAll

        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqCabeca" Enter
        Moveto [Numero do Lancamento     ] Check Example "doc"
        Moveto [Codigo                   ] Check TypeIn "~VSDGEMPRESA2.."
        Moveto [Data de Ocorrencia       ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo de Movimento        ] Check TypeIn "S"
        Moveto [Tipo de Operacao         ] Check TypeIn "T"
        Moveto [Tipo do Documento        ] Check
        Moveto [Numero do Documento      ] Check
        {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"RqItem" Enter
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Sequencia do Lancamento  ] Check
        Moveto [Codigo do Item           ] Check
        Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
        Moveto [Quantidade               ] Check
        Moveto [Custo Unitario           ] Check
        Moveto [Custo Total              ] Check
        Do_It!
        ClearAll

        {Ask} {Answer}
        Moveto [Numero do Lancamento     ] Example "doc"
        Moveto [Codigo                   ] Example "emp"
        Moveto [Data de Ocorrencia       ] Example "dtref"
        Moveto [Tipo de Movimento        ] Example "mov"
        Moveto [Tipo de Operacao         ] Example "oper"
        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"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        {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"
        Moveto [Tipo do Documento        ] Example "tpdoc"
        Moveto [Numero do Documento      ] Example "ndoc"
        Do_It!
        ClearAll
EndIf

EndProc       ;(Seleciona)

;*******************************************************************************
;* Rotina p/ Processar Dados                                                   *
;*******************************************************************************
Proc Processa()
ClearAll
                          
If IsTable("\\FechAno\\"+VSDGANO+"\\Estoque\\Sdestq") 
   Then TAB_TEMP = "\\FechAno\\"+VSDGANO+"\\Estoque\\Sdestq"
   Else TAB_TEMP = "\\Sistemas\\Estoque\\SdEstq"
EndIf 
                          
; *** Processo para agilizar as consultas usando apenas a estrutura de Itens ***
{Ask} {\\Sistemas\\Estoque\\Itens} Check
Do_It!
ClearAll              
   
TabelaIt=Cria_Temp(PrivDir())
Create TabelaIt Like "\\Base\\Sistemas\\Estoque\\Itens"
Add "Answer" TabelaIt

;******** Saldo Inicial *******
AGUARDE("Aguarde, carregando estoque inicial de "+VSDGMES+"/"+VSDGANO)

{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item        ] Example "ITEM"
Moveto [Tipo do Item          ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
{Ask} TypeIn TAB_TEMP Enter
Moveto [Codigo da Empresa     ] Check TypeIn "~VSDGEMPRESA2.."
Moveto [Codigo do Item        ] Check Example "ITEM"
Moveto [Saldo Inicial         ] Check
Moveto [Custo Total Inicial   ] Check
Moveto [Mes Referencia        ] TypeIn "~VSDGMES"
Moveto [Ano Referencia        ] TypeIn "~VSDGANO"
Do_It!
ClearAll

{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

Coedit TabelaR
Scan
 CUSTO=[Valor Total]
 QUANT=[Quantidade] 
 [Valor Unitario] = NDecimal(CUSTO/QUANT,5)
EndScan
Do_It!
ClearAll

;******** Tipo de Itens e Tipo de Estoque *******
{Ask} {\\Sistemas\\Estoque\\Iten_Com}
Moveto [Codigo do Item   ] Example "cod"
Moveto [Situacao         ] 
Switch
   Case VSDGSITITEM = "F" : TypeIn "F"
   Case VSDGSITITEM = "L" : TypeIn "L"
EndSwitch
{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item   ] Example "cod"
Moveto [Tipo do Item     ]
Switch
   Case VSDGTIPOEST = "1"       : TypeIn "E or M or O or A or S"
   Case VSDGTIPOEST = "2"       : TypeIn "P or T"
   Case Not IsBlank(VSDGTIPOEST): TypeIn "~VSDGTIPOEST"
   OtherWise                    : TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
EndSwitch
{Ask} TypeIn TabelaR Enter Check
Moveto [Codigo do Item   ] Example "cod"
Do_It!
ClearAll

{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item        ] Example "COD"
Moveto [Codigo da Familia     ] TypeIn "~VSDGFAMI.."
Moveto [Codigo do Grupo       ] TypeIn "~VSDGGRP.."
Moveto [Codigo da Marca       ] TypeIn "~VSDGMARCA.."
Moveto [Referencia            ] TypeIn "~VSDGREFERENCIA.."
if search("..",VSDGLOCAL)>0
   then Moveto [Localizacao         ] TypeIn VSDGLOCAL
   else Moveto [Codigo_Localizacao  ] TypeIn "~VSDGLOCAL.."
endif   
Moveto [Codigo do Departamento] TypeIn "~VSDGDEPART.."

{Ask} {Answer} Check
Moveto [Codigo do Item   ] Example "COD"
Do_It!
ClearAll

Empty(TabelaR)
Add "Answer" TabelaR
ClearAll

If IsEmpty(TabelaR)
   Then Return
EndIf

;-- Ajusta ordem balanco -------------------------------------------------------
{Ask} TypeIn TabelaR Enter TypeIn "Fast"
Moveto [Tabela                   ] TypeIn "RQITEM"
Moveto [Numero do Lancamento     ] TypeIn "ZERAMENTO"
Moveto [Ordem Balanco            ] TypeIn "Changeto 1"
Do_It!
ClearAll

{Ask} TypeIn TabelaR Enter TypeIn "Fast"
Moveto [Tabela                   ] TypeIn "RQITEM"
Moveto [Numero do Documento      ] TypeIn "BALANCO"
Moveto [Ordem Balanco            ] TypeIn "Changeto 2"
Do_It!
ClearAll

AGUARDE("Aguarde, calculando estoque")

;--- Em 12.11.2015 -> Foi ajustado conforme o SORT no RM_MOVTO p/ ordena‡Æo mais precisa dos registros ----------
Sort TabelaR On "Codigo da Empresa","Codigo do Item",
                "Data do Movimento", "Ordem Balanco","Tipo do Movimento","Tipo do Documento",
                "Numero do Documento","Sequencia do Lancamento"

If VSDGOPCUSTO="V" Then View "\\Sistemas\\Vendas\\Tbprite"    EndIf
If VSDGOPCUSTO="F" Then View "\\Sistemas\\Producao\\FormulaC" EndIf
View TAB_TEMP
CoEdit TabelaIt,TabelaI,TabelaR

NR = NRecords(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, calculando estoque "+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+(NDecimal([Quantidade]*CUSTO,2)),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 Or IsBlank(CUSTO)
             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)
                  If Saldo_Atual=0
                     Then Custo_Total_Atual = 0
                     Else Custo_Total_Atual=NDecimal(Custo_Total_Atual-(NDecimal([Quantidade]*CUSTO,2)),2)
                  EndIf   
          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

   ;;*** Consiste irregularidades no inventario ***
   INCONSISTENTE=False
   If Saldo_Atual < 0 Or Custo_Total_Atual < 0
      Then INCONSISTENTE=True
   EndIf
   If Saldo_Atual > 0 And Custo_Total_Atual <= 0
      Then INCONSISTENTE=True
   EndIf
   If Custo_Total_Atual > 0 And Saldo_Atual <= 0
      Then INCONSISTENTE=True
   EndIf
   If INCONSISTENTE
      Then ENCONTRADO_INCONSISTENCIA=True
           Switch
             Case VSDGCONSIST="1":
               If IsBlank([Data do Movimento])
                  Then DATANEG=VSDGDTINI
                  Else DATANEG=[Data do Movimento]
               EndIf
             Case VSDGCONSIST="2":
               If [Data do Movimento]=VSDGDTREF
                  Then DATANEG=[Data do Movimento]
               EndIf
             Case VSDGCONSIST="3":
               If [Data do Movimento]=VSDGDTREF And Saldo_Atual<0            
                  Then DATANEG=[Data do Movimento]
               EndIf
           EndSwitch
   EndIf
   ;;**********************************************


   Moveto TabelaR

EndScan
Grava_Invent()
Do_It!
ClearAll

AGUARDE("Aguarde, ajustando dados")

;-- 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} TypeIn TabelaIt Enter 
Moveto [Codigo do Item        ] example "item"
Moveto [Inativo               ] TypeIn "S"
{Ask} TypeIn TabelaI Enter TypeIn "Fast Delete"
Moveto [Codigo da Empresa     ] example "empr"
Moveto [Codigo do Item        ] example "item"
Moveto [Saldo Atual           ] TypeIn "0 or Blank"
Moveto [Custo Total Atual     ] TypeIn "0 or Blank"
Do_It!
ClearAll

If VSDGEMPRESA="0000"
   Then Ajusta_Dados()
EndIf   

;-- Ajusta campos blank = 0 ----------------------------------------------------
{Ask} TypeIn TabelaI Enter TypeIn "Fast"
Moveto [Custo Total Atual] TypeIn "Blank,Changeto 0" Down
Moveto [Saldo Atual      ] TypeIn "Blank,Changeto 0"
Do_It!
ClearAll            

;-- Ajusta dados do cadastro de Itens ------------------------------------------
{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item          ] example "item"
Moveto [Tipo do Item            ] example "tp"
Moveto [Descricao do Item       ] example "desc"
Moveto [Unidade Interna         ] example "un"
Moveto [Codigo_Localizacao      ] example "cloc"
Moveto [Localizacao             ] example "loc"
Moveto [Referencia              ] example "ref"
Moveto [Descricao Complementar  ] example "dcomp"
Moveto [Descricao Tipo do Item  ] example "dtp"
Moveto [Codigo da Familia       ] example "cf"
Moveto [Descricao da Familia    ] example "df" 
Moveto [Codigo do Grupo         ] example "cg"
Moveto [Descricao do Grupo      ] example "dg"
Moveto [Codigo da Marca         ] example "cm"
Moveto [Descricao da Marca      ] example "dm"
Moveto [Codigo da Cor_Tecido    ] example "cct"
Moveto [Descricao da Cor_Tecido ] example "dct"
Moveto [Tipo Codigo_Barras      ] example "tcb"
Moveto [Codigo de Barras        ] example "cb"
Moveto [Codigo Fornecedor       ] example "cfr"
Moveto [NCM                     ] example "ncm"

{Ask} TypeIn TabelaI Enter TypeIn "Fast"
Moveto [Codigo do Item          ] example "item"
Moveto [Tipo do Item            ] TypeIn "Changeto " example "tp"
Moveto [Descricao do Item       ] TypeIn "Changeto " example "desc"
Moveto [Unidade Interna         ] TypeIn "Changeto " example "un"
Moveto [Codigo_Localizacao      ] TypeIn "Changeto " example "cloc"
Moveto [Localizacao             ] TypeIn "Changeto " example "loc"
Moveto [Referencia              ] TypeIn "Changeto " example "ref"
Moveto [Descricao Complementar  ] TypeIn "Changeto " example "dcomp"
Moveto [Descricao Tipo do Item  ] TypeIn "Changeto " example "dtp"
Moveto [Codigo da Familia       ] TypeIn "Changeto " example "cf"
Moveto [Descricao da Familia    ] TypeIn "Changeto " example "df" 
Moveto [Codigo do Grupo         ] TypeIn "Changeto " example "cg"
Moveto [Descricao do Grupo      ] TypeIn "Changeto " example "dg"
Moveto [Codigo da Marca         ] TypeIn "Changeto " example "cm"
Moveto [Descricao da Marca      ] TypeIn "Changeto " example "dm"
Moveto [Codigo da Cor_Tecido    ] TypeIn "Changeto " example "cct"
Moveto [Descricao da Cor_Tecido ] TypeIn "Changeto " example "dct"
Moveto [Tipo Codigo_Barras      ] TypeIn "Changeto " example "tcb"
Moveto [Codigo de Barras        ] TypeIn "Changeto " example "cb"
Moveto [Codigo Fornecedor       ] TypeIn "Changeto " example "cfr"
Moveto [NCM                     ] TypeIn "Changeto " example "ncm"
Do_It!
ClearAll

;-- Elimina zerados ------------------------------------------------------------
If VSDGZERADO="N"
   Then {Ask} TypeIn TabelaI Enter TypeIn "Fast Delete"
        Moveto [Saldo Atual      ] TypeIn "=0"
        Moveto [Custo Total Atual] TypeIn "=0"
        Do_It!
        ClearAll
EndIf

;-- Pega a aliquota de icms ----------------------------------------------------
{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item    ] Example "Codigo"
Moveto [Tributacao de ICMS] TypeIn "D"
Moveto [Codigo Fornecedor ] Example "Fornec"

{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo           ] Example "Fornec"
Moveto [Uf               ] Example  "Uf"

{Ask} {\\Sistemas\\Vendas\\Estados}
Moveto [Uf               ] Example "Uf"
Moveto [Aliquota de ICMS ] Example "Al"

{Ask} TypeIn TabelaI Enter
Moveto [Codigo do Item  ] Example "Codigo"
Moveto [Aliquota de ICMS] TypeIn "Changeto " Example "Al"
Moveto [Pagina          ] TypeIn "Changeto " Example "Uf"
Do_It!
ClearAll

{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item  ] Example "Codigo"
Moveto [Tributacao de ICMS] TypeIn "D"
Moveto [Aliquota de ICMS] Example "Al"
{Ask} TypeIn TabelaI Enter
Moveto [Codigo do Item  ] Example "Codigo"
Moveto [Aliquota de Icms] TypeIn "Blank Or 0, Changeto " Example "Al"
Do_It!
ClearAll
 
;-- Itens de propriedade de terceiros ------------------------------------------
AGUARDE("Aguarde, verificando itens de propriedade de terceiros")

{Ask} {\\Sistemas\\Cadastro\\Destinat}
Moveto [Codigo                 ] Example "cforn"
Moveto [Razao Social           ] Example  "rz"
Moveto [CGC                    ] Example  "cgc"
{Ask} {\\Sistemas\\Estoque\\Marcas}
Moveto [Codigo da Marca        ] example "cmar"
Moveto [Codigo_Fornecedor_Marca] example "cforn"
{Ask} TypeIn TabelaIt Enter 
Moveto [Codigo do Item         ] example "item"
Moveto [Propriedade_Terceiro   ] TypeIn "S"
Moveto [Codigo da Marca        ] example "cmar"
{Ask} TypeIn TabelaI Enter TypeIn "Fast"
Moveto [Codigo do Item        ] example "item"
Moveto [Posse_Estoque         ] TypeIn "Changeto DT"
Moveto [Codigo_Terceiro       ] TypeIn "Changeto _cforn"
Moveto [Razao Social          ] TypeIn "Changeto _rz"
Moveto [CGC                   ] TypeIn "Changeto _cgc"
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

;*******************************************************************************
;* Rotina Grava Inventario                                                     *
;*******************************************************************************
Proc Grava_Invent()
Private coditem
VERIFICA_CODPAI = True

Switch
  Case VSDGOPCUSTO="V":
			 coditem=ITEM

			 Moveto TabelaIt
			 Moveto [Codigo do Item]
			 Locate coditem
			 If RetVal
			    Then If Not IsBlank([Codigo da Grade])
				          Then CodItem=PegaCodigoRaiz(CodItem)
				       EndIf
               If SYS_CODIGO_CLIENTE="0239" Or
                  SYS_CODIGO_CLIENTE="0388" Or
                  SYS_CODIGO_CLIENTE="0390" Or
                  SYS_CODIGO_CLIENTE="0396" Or
                  SYS_CODIGO_CLIENTE="0345"
                  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                                        

If VSDGCODMODELO="15"
   Then ITEM=PegaCodigoRaiz(ITEM) 
        Moveto TabelaI
 		    Moveto [Codigo do Item]             
	 	    Locate ITEM
		    If RetVal
           Then VERIFICA_CODPAI = False
                If VSDGCONSIST<>"0"
                   Then If Not IsBlank(DATANEG)
                           Then Registro()
                        EndIF
                   Else Registro()
                EndIF   
        EndIf  
EndIf

If VERIFICA_CODPAI
   Then If VSDGCONSIST<>"0"
           Then If Not IsBlank(DATANEG)
                   Then Registro()
                EndIf
           Else Registro()
        EndIf
EndIf

If VSDGCODMODELO="25" And VSDGOPCUSTO="V" 
   Then Moveto TAB_TEMP
        Moveto [Codigo da Empresa]
        Locate EMPRESA2,ITEM,VSDGANO,VSDGMES
        If RetVal
           Then Ultimo_Custo = [Preco de Custo]
           Else Ultimo_Custo = BlankNum()               
        EndIf
        Moveto TabelaI
        [Custo_Balanco       ] = Ultimo_Custo
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)

;*******************************************************************************
;* Grava Registro                                                              *
;*******************************************************************************
Proc Registro()

If Not VERIFICA_CODPAI
   Then [Custo Total Atual]=NDecimal([Custo Total Atual]+Custo_Total_Atual,2)
        [Saldo Atual      ]=NDecimal([Saldo Atual      ]+Saldo_ATual,3)
        [Valor Unitario   ]=NDecimal([Custo Total Atual]/[Saldo Atual ],5)
   Else Moveto TabelaI
        End
        If Not IsBlank([Codigo da Empresa])
           Then Down
        EndIf
        [Codigo do Item       ]=ITEM
        [Codigo da Empresa    ]=EMPRESA2
        [Custo Total Atual    ]=Custo_Total_Atual
        [Saldo Atual          ]=Saldo_ATual
        [Valor Unitario       ]=Custo_Unitario_Atual        
EndIf

EndProc ;Registro()

;*******************************************************************************
;* Informa a data da primeira entrada / data da ultima saida                   *
;*******************************************************************************
Proc Informa_Data()

{Ask} TypeIn TabelaI Enter
Moveto [Codigo da Empresa      ] Example "CodE"
Moveto [Posse_Estoque          ] Example "PosE"
Moveto [Codigo_Terceiro        ] Example "CodT"
Moveto [Razao Social           ] Example "RazS"
Moveto [CGC                    ] Example "CGC"
Moveto [Codigo do Item         ] Example "CodI"
Moveto [Nome Fantasia Empresa  ] Example "NomF"
Moveto [Descricao do Item      ] Example "DesI"
Moveto [Unidade Interna        ] Example "UN"                  
Moveto [Saldo Atual            ] Example "Sald"
Moveto [Pagina                 ] Example "Pag"
Moveto [Tipo do Item           ] Example "TpIt"
Moveto [Descricao Complementar ] Example "DesC"
Moveto [Descricao Tipo do Item ] Example "DesT"
Moveto [Custo Total Atual      ] Example "CusT"

{Ask} TypeIn TabelaRel Enter TypeIn "Fast Insert"
Moveto [Codigo da Empresa      ] Example "CodE"
Moveto [Posse_Estoque          ] Example "PosE"
Moveto [Codigo_Terceiro        ] Example "CodT"
Moveto [Razao Social           ] Example "RazS"
Moveto [CGC                    ] Example "CGC"
Moveto [Codigo do Item         ] Example "CodI"
Moveto [Nome Fantasia Empresa  ] Example "NomF"
Moveto [Descricao do Item      ] Example "DesI"
Moveto [Unidade Interna        ] Example "UN"
Moveto [Saldo Atual            ] Example "Sald"
Moveto [Pagina                 ] Example "Pag"
Moveto [Tipo do Item           ] Example "TpIt"
Moveto [Descricao Complementar ] Example "DesC"
Moveto [Descricao Tipo do Item ] Example "DesT"
Moveto [Custo Total Atual      ] Example "CusT"
Do_It!
ClearAll

Copy TabelaRel TabelaI

{Ask} {Estqprm}
Moveto [Codigo do Item      ] Example "CodE"
Moveto [Data da Ultima Saida] Example "DtU"
{Ask} TypeIn TabelaI Enter
Moveto [Codigo do Item      ] Example "CodE"
Moveto [Data_Ultima_Saida   ] TypeIn "Changeto _DtU"                   
Do_It!
ClearAll

{Ask}  TypeIn TabelaI Enter
Moveto [Codigo do Item      ] Example "CodI"
{Ask} {NotaEI}
Moveto [Numero do Lancamento] Example "NLanc"
Moveto [Codigo do Item      ] CheckPlus Example "CodI"
{Ask} {NotaEC}
Moveto [Numero do Lancamento] Example "NLanc"
Moveto [Data de Entrada     ] CheckPlus
Moveto [Tipo de Operacao    ] TypeIn "Not A, Not I"
Do_It!
ClearAll      

TabelaZ=Cria_Temp(Privdir())
Copy "Answer" TabelaZ         

{Ask} TypeIn TabelaI Enter
Moveto [Codigo do Item      ] Example "CodI"
{Ask} {RqItem}
Moveto [Numero do Lancamento] Example "NLanc"
Moveto [Codigo do Item      ] CheckPlus Example "CodI"
{Ask} {RqCabeca}
Moveto [Numero do Lancamento] Example "NLanc"
Moveto [Data de Ocorrencia  ] CheckPlus
Moveto [Tipo de Movimento   ] TypeIn "E"
Do_It!
ClearAll

View TabelaZ
Edit "Answer"
Scan
  Moveto TabelaZ
  Moveto [Codigo do Item]
  Locate [Answer->Codigo do Item]
  If RetVal
     Then If [Data de Entrada] > [Answer->Data de Ocorrencia]
             Then Moveto [Data de Entrada]
                  CtrlBackSpace
                  [Data de Entrada]=[Answer->Data de Ocorrencia]
          EndIf
  EndIf

  Moveto "Answer" 
EndScan
Do_It!
ClearAll

Add "Answer" TabelaZ
ClearAll

{Ask} TypeIn TabelaZ Enter 
Moveto [Codigo do Item ] Check
Moveto [Data de Entrada] TypeIn "Calc Min as Data de Entrada"
Do_It!
ClearAll

Rename "Answer" TabelaZ

{Ask} TypeIn TabelaZ Enter 
Moveto [Codigo do Item       ] Example "CodI"
Moveto [Data de Entrada      ] Example "DtE"
{Ask} TypeIn TabelaI Enter
Moveto [Codigo do Item       ] Example "CodI"
Moveto [Data_Primeira_Entrada] TypeIn "Changeto _DtE"
Do_It!
ClearAll  

Delete TabelaZ    

EndProc ;Informa_Data()

;*******************************************************************************
;* Rotina do ShowDialog p/ controle do processo CURVA ABC                      *
;*******************************************************************************
Proc SD_CurvaABC(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  : Dialog_F1()
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_CURVAABCA"     : Campo="NO"
            Case Campo="TG_CURVAABCB"     : Campo="TG_CURVAABCA"
            Case Campo="TG_CURVAABCC"     : Campo="TG_CURVAABCB"
            Case Campo="TG_OPANALISE11"   : Campo="TG_CURVAABCC"
            Case Campo="TG_COMVALOR"      : Campo="TG_OPANALISE11"
            Case Campo="YES" Or Campo="NO" : Campo="TG_CURVAABCA"
          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_CURVAABCA"   :Campo="TG_CURVAABCB"
                    Case Campo="TG_CURVAABCB"   :Campo="TG_CURVAABCC"
                    Case Campo="TG_CURVAABCC"   :Campo="TG_OPANALISE11"
                    Case Campo="TG_OPANALISE11" :Campo="TG_COMVALOR"
                    Case Campo="TG_COMVALOR"    :Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf

Switch
  Case Campo="" :
     MSG_CAMPO=""
Endswitch

Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp

EndProc

;*******************************************************************************
;* Rotina pra gerar relat¢rio Curva ABC                                        *
;*******************************************************************************
Proc Curva_ABC(PARAM)
Private PARAM, QTD, COD_ITEM, DT_ENTRADA, NR,
        empant, posant, cdtant, VrAcumulada

Switch
  Case PARAM= "Tela" :
  
       VSDGCURVAABCA =20
       VSDGCURVAABCB =30
       VSDGCURVAABCC =50  
       VSDGOPANALISE3=""
       VSDGCOMVALOR  =""
  
       While True
          OP_SHOW="S"
          ShowDialog "Op‡äes do Relat¢rio Curva ABC" Proc "SD_CurvaABC"
          Trigger "OPEN","ARRIVE"
          Key "F1","ENTER","ESC","TAB","F1",-68,-104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
            @ 01,07 Height 13 Width 49
        
                   @ 00,01 ?? "Informe % por Classe"    
            Label  @ 01,00 "Classe [A]%"                    For "TG_CURVAABCA"
            Accept @ 01,13 Width 06 "S" Tag "TG_CURVAABCA"  To  VSDGCURVAABCA
        
            Label  @ 02,00 "Classe [B]%"                    For "TG_CURVAABCB"
            Accept @ 02,13 Width 06 "S" Tag "TG_CURVAABCB"  To  VSDGCURVAABCB
        
            Label  @ 03,00 "Classe [C]%"                    For "TG_CURVAABCC"
            Accept @ 03,13 Width 06 "S" Tag "TG_CURVAABCC"  To  VSDGCURVAABCC
                   
            Label  @ 04,00 "Op‡„o p/ An lise" For "TG_OPANALISE11"
            Accept @ 05,04 Width 04 "A1"  Picture "#" Tag "TG_OPANALISE11" To VSDGOPANALISE
            Accept @ 05,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMOPANALISE" To VSDGNOMOPANALISE
        
            Label  @ 06,00 "Op‡„o de Valor" For "TG_COMVALOR"
            Accept @ 07,04 Width 04 "A1"  Picture "1,2" Tag "TG_COMVALOR" To VSDGCOMVALOR
            Accept @ 07,09 Width 25 "A10"  Picture "!*!" Tag "TG_NOMCOMVALOR" To VSDGNOMCOMVALOR
        
            Pushbutton @ 09,11 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
            Pushbutton @ 09,24 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue
        
          EndDialog
          If Not RetVal Then QuitLoop EndIf
          QuitLoop 
        EndWhile
        Return  
        
  OtherWise         :
        Copy "\\Base\\Sistemas\\Estoque\\RM_0900" TabelaRel
        Empty TabelaRel
        
        ;---- Otimizando registros em uma nova tabela pr‚-definida -------------
        {Ask} TypeIn TabelaI Enter
        Moveto [Codigo da Empresa     ] TypeIn "_CodE"
        Moveto [Posse_Estoque         ] TypeIn "_PosE"
        Moveto [Codigo_Terceiro       ] TypeIn "_CodT"
        Moveto [Razao Social          ] TypeIn "_rz"
        Moveto [CGC                   ] TypeIn "_cgc"
        Moveto [Codigo do Item        ] TypeIn "_CodI"
        Moveto [Descricao do Item     ] TypeIn "_Desc"
        Moveto [Unidade Interna       ] TypeIn "_UnI"
        Moveto [Tipo do Item          ] TypeIn "_TipI" 
        Moveto [Codigo da Marca       ] TypeIn "_CodM" 
        Moveto [Descricao da Marca    ] TypeIn "_DesM" 
        Moveto [Referencia            ] TypeIn "_ref" 
        Moveto [Saldo Atual           ] TypeIn "_Sald"
        Moveto [Valor Unitario        ] TypeIn "_VrU"     
        Moveto [Custo Total Atual     ] TypeIn "_CusT" 
        {Ask} TypeIn TabelaRel Enter TypeIn "Fast Insert"
        Moveto [Codigo da Empresa     ] TypeIn "_CodE" 
        Moveto [Posse_Estoque         ] TypeIn "_PosE" 
        Moveto [Codigo_Terceiro       ] TypeIn "_CodT" 
        Moveto [Razao Social          ] TypeIn "_rz"
        Moveto [CGC                   ] TypeIn "_cgc"
        Moveto [Codigo do Item        ] TypeIn "_CodI"             
        Moveto [Descricao do Item     ] TypeIn "_Desc" 
        Moveto [Unidade Interna       ] TypeIn "_UnI" 
        Moveto [Tipo do Item          ] TypeIn "_TipI" 
        Moveto [Codigo da Marca       ] TypeIn "_CodM" 
        Moveto [Descricao da Marca    ] TypeIn "_DesM" 
        Moveto [Referencia            ] TypeIn "_ref" 
        Moveto [Saldo Atual           ] TypeIn "_Sald"             
        Moveto [Valor Unitario        ] TypeIn "_VrU" 
        Moveto [Custo Total Atual     ] TypeIn "_CusT" 
        Do_It!
        ClearAll

        {Ask} {\\Sistemas\\Cadastro\\Empresas}
        Moveto [Codigo da Empresa     ] TypeIn "_CodE" 
        Moveto [Nome Fantasia Empresa ] TypeIn "_NomF"
        {Ask} TypeIn TabelaRel Enter TypeIn "Fast"
        Moveto [Codigo da Empresa     ] TypeIn "_CodE" 
        Moveto [Nome Fantasia Empresa ] TypeIn "changeto _NomF"
        Do_It!
        ClearAll
        
        ;---- Pegando Data de Entrada ------------------------------------------
        {Ask} {\\Sistemas\\Estoque\\SdEstq}
        Moveto [Codigo da Empresa     ] TypeIn "_CodE"
        Moveto [Codigo do Item        ] TypeIn "_CodI"
        Moveto [Mes Referencia        ] TypeIn "~VSDGMES"
        Moveto [Ano Referencia        ] TypeIn "~VSDGANO"     
        Moveto [Data do Preco de Custo] TypeIn "_DtPrC"
        {Ask} TypeIn TabelaRel Enter  typein "Fast"
        Moveto [Codigo da Empresa     ] TypeIn "_CodE"
        Moveto [Codigo do Item        ] TypeIn "_CodI"
        Moveto [DtEntrada             ] TypeIn "Changeto _DtPrC"
        Do_It!
        ClearAll 
                
        ;---- Pegando Data da Ultima Saida -------------------------------------
        {Ask} {\\Sistemas\\Estoque\\EstqPrm}
        Moveto [Codigo da Empresa     ] TypeIn "_CodE"
        Moveto [Codigo do Item        ] TypeIn "_CodI"
        Moveto [Data da Ultima Saida  ] TypeIn "_DtU"
        {Ask} TypeIn TabelaRel Enter  typein "Fast"
        Moveto [Codigo da Empresa     ] TypeIn "_CodE"
        Moveto [Codigo do Item        ] TypeIn "_CodI"
        Moveto [DtSaida               ] TypeIn "Changeto _DtU"        
        Do_It!
        ClearAll      
        
        ;---- Compras Realizadas ----------------------------------------------- 
        NR = NRecords(TabelaRel)
        
        View "\\Sistemas\\Estoque\\Cotacao"
        Coedit TabelaRel
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, Verificando Compras "+BARRA_STRING)          
          
          QTD        = BlankNum()
          COD_ITEM   = [Codigo do Item]
          DT_ENTRADA = blankdate()

          Moveto "\\Sistemas\\Estoque\\Cotacao"
          Moveto [Codigo do Item]
          Locate COD_ITEM
          If RetVal
             Then While [Codigo do Item]=COD_ITEM
                    If [Data de Compra]>= DT_ENTRADA and [Data de Compra]<=VSDGDTFIM 
                       Then DT_ENTRADA=[Data de Compra]
                            QTD = [Quantidade] * [Fator de Conversao]
                    EndIf
                    Skip
                    If Eot() Then QuitLoop EndIf

                    Locate Next COD_ITEM
                    If Not RetVal
                       Then QuitLoop
                    EndIf    
                  EndWhile
          EndIf
          
          Moveto TabelaRel
          [Comprou] = QTD

        EndScan
        Do_It!
        ClearAll  
        
        ;*** Totaliza Empresa *****
        Aguarde("Aguarde, totalizando dados 2/2")
        {Ask} TypeIn TabelaRel Enter
        Moveto [Codigo da Empresa     ] Check
        Moveto [Posse_Estoque         ] Check
        Moveto [Codigo_Terceiro       ] Check
        Switch
          case VSDGOPANALISE="1" : Moveto [Custo Total Atual      ] TypeIn "Calc Sum as Vrref"
          case VSDGOPANALISE="2" : Moveto [Saldo Atual            ] TypeIn "Calc Sum as Vrref"
          case VSDGOPANALISE="3" : Moveto [Valor Unitario         ] TypeIn "Calc Sum as Vrref"
        endSwitch
        Do_It!
        ClearAll
        
        {Ask} {Answer}
        Moveto [Codigo da Empresa     ] Example "cemp"
        Moveto [Posse_Estoque         ] TypeIn "_PosE"
        Moveto [Codigo_Terceiro       ] TypeIn "_CodT"
        Moveto [Vrref                 ] Example "vp"
        {Ask} TypeIn TabelaRel Enter TypeIn "Fast"
        Moveto [Codigo da Empresa     ] Example "cemp"
        Moveto [Posse_Estoque         ] TypeIn "_PosE"
        Moveto [Codigo_Terceiro       ] TypeIn "_CodT"
        Moveto [TotalEmpresa          ] TypeIn "changeto _vp"
        Do_It!
        ClearAll
        
        ;---- Calculando a Porcentagem diante do total dos itens ---------------
        Aguarde("Aguarde, organizando a curva")
        Switch
          case VSDGOPANALISE="1" : Sort TabelaRel On "Codigo da Empresa", "Posse_Estoque", "Codigo_Terceiro", "Custo Total Atual" D
          case VSDGOPANALISE="2" : Sort TabelaRel On "Codigo da Empresa", "Posse_Estoque", "Codigo_Terceiro", "Saldo Atual" D
          case VSDGOPANALISE="3" : Sort TabelaRel On "Codigo da Empresa", "Posse_Estoque", "Codigo_Terceiro", "Valor Unitario" D
        endSwitch
        ClearAll
        
        empant     ="***"
        posant     ="***"
        cdtant     ="***"
        VrAcumulada=0
        
        NR = NRecords(TabelaRel)
        CoEdit TabelaRel
        Scan
          Barra(NR, RecNo())
          Aguarde("Aguarde, calculando a curva "+BARRA_STRING)
          
          if [Codigo da Empresa]<>empant
             then empant     =[Codigo da Empresa]
                  VrAcumulada=0
          endif          
          if [Posse_Estoque    ]<>posant
             then posant     =[Posse_Estoque]
                  VrAcumulada=0
          endif          
          if [Codigo_Terceiro  ]<>cdtant
             then cdtant     =[Codigo_Terceiro]
                  VrAcumulada=0
          endif          
        
          Switch
            case VSDGOPANALISE="1" : [ClassePorcentagem]=([Custo Total Atual ]/[TotalEmpresa])*100 
                                     VrAcumulada        =VrAcumulada+[Custo Total Atual]   
        
            case VSDGOPANALISE="2" : [ClassePorcentagem]=([Saldo Atual       ]/[TotalEmpresa])*100
                                     VrAcumulada        =VrAcumulada+[Saldo Atual ]   
            
            case VSDGOPANALISE="3" : [ClassePorcentagem]=([Valor Unitario    ]/[TotalEmpresa])*100
                                     VrAcumulada        =VrAcumulada+[Valor Unitario ]   
            
          endSwitch
          [ClasseAcumulada]=((VrAcumulada*100)/[TotalEmpresa])
          
          Switch
            Case [ClasseAcumulada]<VSDGCURVAABCA                 : [Classe]="A" [ClasseParametro]=VSDGCURVAABCA
            Case [ClasseAcumulada]<(VSDGCURVAABCA+VSDGCURVAABCB) : [Classe]="B" [ClasseParametro]=VSDGCURVAABCB
            otherwise                                            : [Classe]="C" [ClasseParametro]=VSDGCURVAABCC
          EndSwitch
        
        
          if VSDGCOMVALOR="2" ;sem valor
             then
                  [TotalEmpresa      ]=blankNum()
                  [Custo Total Atual ]=blankNum()
          endif  
          
        EndScan
        Do_It!             
        ClearAll       
        
        Copy TabelaRel TabelaI
EndSwitch
          
EndProc ;Curva_ABC()

;********************************************************************************
;* CONVERTE VALOR PARA STRING                                                  *
;********************************************************************************
Proc Valor_Str(Valor,Dec)
Private VrTit,Valor,Dec,Part1,Part2

If IsBlank(Valor)
  Then Valor=0
EndIf  
Switch
 Case dec=0 : VrTit=Format("W13,EI,AL",Valor)
 Case dec=1 : VrTit=Format("W13.1,EI,AL",Valor)
 Case dec=2 : VrTit=Format("W13.2,EI,AL",Valor)
 Case dec=3 : VrTit=Format("W13.3,EI,AL",Valor)
 Case dec=4 : VrTit=Format("W13.4,EI,AL",Valor)
 Case dec=5 : VrTit=Format("W13.5,EI,AL",Valor)
 Case dec=6 : VrTit=Format("W13.6,EI,AL",Valor)
EndSwitch
VrTit=RTrim(LTrim(VrTit))

Return VrTit
EndProc  ; (Valor_Str)

;********************************************************************************
;* CONVERTE DATA PARA STRING                                                    *
;********************************************************************************
Proc Data_Str(Data)
Private DtTit,Data 

If IsBlank(Data)
  Then DtTit=""
  Else DtTit=AlinhM(StrVal(  Day(Data)),2)+
             AlinhM(StrVal(Month(Data)),2)+
             AlinhM(StrVal( Year(Data)),4)
EndIf  

Return DtTit
EndProc  ; (Data_Str)

;*******************************************************************************
;* Rotina Converte caracter especial '|' e passa para blank                    *
;*******************************************************************************                     
Proc Tira_Char(String)
private String, Tam, Pos

Tam=Len(String)
Pos=SearchFrom("|",String,1)
While Pos<>0 
  If Pos>0
     Then String=SubStr(String,1,Pos-1)+" "+SubStr(String,Pos+1,Tam)
          Pos=SearchFrom("|",String,1)
  EndIf
EndWhile

Return String

EndProc ;(Tira_Char)

;*******************************************************************************
;* Rotina pega valor contador do bloco                
;*******************************************************************************
Proc Contador_REGISTRO(Reg)
Private Reg,I,C

c=0
For I From 1 To 10 
  If IsBlank(TOT_BLC[I])
     Then QuitLoop
  EndIf   
  If SubStr(TOT_BLC[I],1,4)=Reg
     Then C=Numval(SubStr(TOT_BLC[I],6,7)) 
          QuitLoop
  EndIf   
EndFor

Return C+1

EndProc ;(Contador_REGISTRO)

;*******************************************************************************
;* Rotina para contagem de bloco H                                             *
;*******************************************************************************
Proc Conta_REGISTRO(Reg,Bloc)
Private Reg,bloc,I

;---- Copia da PROC do SPEDEFD -------------------------------------------------
For I From 1 To 100
  If SubStr(REG_BLC[I],1,4)=Reg 
     Then C=Numval(SubStr(REG_BLC[I],6,7))
          QuitLoop
  EndIf   
  If IsBlank(REG_BLC[I])
     Then c=0
          QuitLoop
  EndIf   
EndFor
C=C+1   
REG_BLC[I]=Reg+"|"+StrVal(C)

For I From 1 To 20 
  If SubStr(TOT_BLC[I],1,4)=Bloc 
     Then C=Numval(SubStr(TOT_BLC[I],6,7))
          QuitLoop
  EndIf   
  If IsBlank(TOT_BLC[I])
     Then c=0
          QuitLoop
  EndIf   
EndFor
C=C+1   
TOT_BLC[I]=Bloc+"|"+StrVal(C)

EndProc ;Conta_REGISTRO()

;*******************************************************************************
;* Rotina para montagem do Bloco H                    
;*******************************************************************************
Proc Monta_BlocoH()
Private VL_INV, DT_INV, REGTB

VL_INV=0
DT_INV=VSDGDTFIM 

If IsAssigned(REGTB)
   Then Release vars REGTB
EndIf
DynArray REGTB[]

NR = NRecords(TabelaI)

Tabela_ERRO_ITEM = Cria_Temp(PrivDir())
Copy "\\Base\\Sistemas\\Estoque\\RM_REPRO" Tabela_ERRO_ITEM
Empty Tabela_ERRO_ITEM

View "\\Sistemas\\Cadastro\\Destinat" 
View "\\Sistemas\\Estoque\\Itens"      
View "\\Sistemas\\Estoque\\TpItem"     
View "\\Sistemas\\Estoque\\Familia"    
View "\\Sistemas\\Estoque\\Marcas"    
View "\\Sistemas\\ICMS_IPI\\SPEDH010"
View "\\Sistemas\\ICMS_IPI\\SPEDH005"
View Tabela_ERRO_ITEM
CoEdit TabelaI
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, gerando bloco H "+BARRA_STRING)

   ;---- Registro dos Itens ----------------------------------------------------
   COD_ITEM = [Codigo do Item]
   GetRecord "\\Sistemas\\Estoque\\Itens" COD_ITEM To REG_ITEM
   If Not RetVal
      Then Loop
   EndIf
  
   ;-- Consiste irregularidades no inventario -----------------------------------
   INCONSISTENTE=False
   If Not IsBlank([Saldo Atual]) Or
      Not IsBlank([Custo Total Atual])
      Then If [Saldo Atual] < 0 Or [Custo Total Atual] < 0
              Then Loop
           EndIf
           If [Saldo Atual] > 0 And [Custo Total Atual] <= 0
              Then Loop
           EndIf
           If [Custo Total Atual] > 0 And [Saldo Atual] <= 0
              Then Loop
           EndIf
   EndIf

  ;-- Verifica Posse -----------------------------------------------------------
  posse     = "0"
  posse_cd  = ""
  posse_cgc = ""
  posee_ie  = ""
  posee_uf  = ""
  
  If REG_ITEM["Propriedade_Terceiro"]="S"
     Then Aguarde("Aguarde, verificando propriedade de terceiro "+BARRA_STRING)
          GetRecord "\\Sistemas\\Estoque\\Marcas" REG_ITEM["Codigo da Marca"] To REG_MARCAS 
          If Not RetVal
             Then Moveto Tabela_ERRO_ITEM
                  End Down
                  [Codigo do Item] = COD_ITEM
                  [MSG_Erro      ] = "MARCA SEM CADASTRO/TERCEIRO"
        
                  Moveto TabelaI
                  Loop 
          EndIf             
     
          GetRecord "\\Sistemas\\Cadastro\\Destinat" REG_MARCAS["Codigo_Fornecedor_Marca"] To REG_CLIENTE
          If Not RetVal
             Then Moveto Tabela_ERRO_ITEM
                  End Down
                  [Codigo do Item       ] = COD_ITEM
                  [MSG_Erro             ] = "TERCEIRO SEM CADASTRO/MARCA"
        
                  Moveto TabelaI
                  Loop 
          EndIf             

          posse     = "2"
          posse_cd  = REG_MARCAS["Codigo_Fornecedor_Marca"]
          posse_cgc = REG_CLIENTE["CGC"] 
          posse_ie  = REG_CLIENTE["IE"] 
          posse_uf  = REG_CLIENTE["UF"]
  EndIf   

   ;---- Pega_PlanoContaItem ---------------------------------------------------
   COD_CTA="?"
  
   Aguarde("Aguarde, verificando plano de conta "+BARRA_STRING)
   Moveto "\\Sistemas\\Estoque\\Familia"
   Moveto [Codigo da Familia]
   Locate REG_ITEM["Codigo da Familia"]
   If Retval
      Then COD_CTA=[Conta Contabil]
   EndIf  
  
   Moveto "\\Sistemas\\Estoque\\TpItem"
   Moveto [Tipo do Item]
   Locate REG_ITEM["Tipo do Item"]
   If Retval
      Then COD_CTA=[Conta Contabil]
   EndIf  
   
   ;---- Gera o BlocoH ---------------------------------------------------------
   Moveto TabelaI
   CopyToArray REGTB
   
   Aguarde("Aguarde, montando o bloco H "+BARRA_STRING)
   Moveto "\\Sistemas\\ICMS_IPI\\SPEDH010"
   End Down
   [COD_ITEM         ]=REGTB["Codigo do Item"]
   [UNID             ]=REGTB["Unidade Interna"]
   [QTD              ]=REGTB["Saldo Atual"]
   [VL_ITEM          ]=NDecimal(REGTB["Custo Total Atual"],2)
   [VL_UNIT          ]=NDecimal(REGTB["Custo Total Atual"]/REGTB["Saldo Atual"],5)  
   [IND_PROP         ]=posse
   [COD_PART         ]=posse_cd
   [TXT_COMPL        ]=REG_ITEM["Descricao Complementar"]
    Switch
      Case SYS_CODIGO_CLIENTE="0000": [COD_CTA]=""
      OtherWise                     : [COD_CTA]=COD_CTA   
    EndSwitch
   [VL_ITEM_IR       ]=NDecimal(REGTB["Custo Total Atual"],2)                   ;Recebe mesmo vlr do [VL_ITEM]
   UnLockRecord

   VL_INV=VL_INV+NDecimal(REGTB["Custo Total Atual"],2)
   
   Moveto TabelaI
EndScan

Moveto "\\Sistemas\\ICMS_IPI\\SPEDH005"
End Down
[DT_INV  ]=DT_INV
[VL_INV  ]=VL_INV
[MOT_INV ]=VSDGMOTINV
UnLockRecord

Do_It!
ClearAll

If Not IsEmpty(Tabela_ERRO_ITEM) 
   Then Aguarde("Aguarde, relat¢rio de inconsistˆncia no invent rio 3/3")

        {Ask} {\\Sistemas\\Estoque\\Itens}
        Moveto [Codigo do Item   ] Example "cite"
        Moveto [Descricao do Item] Example "dite"
        {Ask} TypeIn Tabela_ERRO_ITEM Enter TypeIn "Fast"
        Moveto [Codigo do Item   ] Example "cite"
        Moveto [Descricao do Item] TypeIn "Changeto _dite"
        Do_It!
        ClearAll

        MSG=""
				MSG=MSG+"O Sistema detectou inconsistlncia de dados,//"
        MSG=MSG+"referente ao Estoque de "+MES_BLOCOH+"."+StrVal(ANO_BLOCOH)+".//"
				MSG=MSG+"Ser  exibido um Relat¢rio dos mesmos !// //"
        MSG=MSG+"Arquivo do sintegra n„o ser  gerado !//"
				MSG=MSG+"Execute o Invent rio com CONSISTIR ERROS = SIM !"
        
        Mensagem(MSG)
        DISPOSITIVO()
        If OK<>""
           Then IMPRIREL(Tabela_ERRO_ITEM,"R")
        EndIf
EndIf

Endproc ;Monta_BlocoH()

;*******************************************************************************
;* ROTINA INFORMAR ARQUIVO A GRAVAR DO BLOCO H                                 *
;*******************************************************************************
Proc BlocoH()

Aguarde(Completa("Aguarde, gerando arquivo SPED bloco H",45," "))

VSDGMOTINV = "01"                                                               ;FINAL DO PERIODO 
MES_BLOCOH = AlinhM(StrVal(Month(VSDGDTFIM)),2)
ANO_BLOCOH = Year(VSDGDTFIM)

Empty "\\Sistemas\\ICMS_IPI\\SPEDH010"
Empty "\\Sistemas\\ICMS_IPI\\SPEDH005"

Monta_BlocoH()

;---- Cria/Zera Totalizadores -------------------------------------------------- 
Array REG_BLC[100]
Array TOT_BLC[020]
For I From 1 To 100
  REG_BLC[I]=""
EndFor
For I From 1 To 20 
  TOT_BLC[I]   =""
EndFor

;---- Diret¢rio de Trabalho ----------------------------------------------------
DIREPORT  = "\\Sistemas\\Exporta\\Dados\\"
VSDGDRIVE = SubStr(Directory(),1,2)
VSDGPASTA = VSDGDRIVE+DIREPORT
ARQ       = VSDGPASTA+"SPED_BH.TXT"

If IsFile(ARQ)
   Then Deleta_Arquivo(ARQ)
EndIf         

If IsEmpty("\\Sistemas\\ICMS_IPI\\SPEDH010")
   Then IND_MOV="1"
   Else IND_MOV="0"
EndIf
Print File ARQ "|H001"+"|"
Print File ARQ IND_MOV+"|"+"\n"
CONTA_REGISTRO("H001","H990")

If Not IsEmpty("\\Sistemas\\ICMS_IPI\\SPEDH010")
   Then 
        ;--- Registro H005: Totais do Invent rio -------------------------------
        View "\\Sistemas\\ICMS_IPI\\SPEDH005"
        Scan
          Print File ARQ "|H005"+"|"
          Print File ARQ Data_Str([DT_INV])+"|"
          Print File ARQ Valor_Str([VL_INV],2)+"|"
          Print File ARQ ""+[MOT_INV]+"|"+"\n"
          CONTA_REGISTRO("H005","H990")
        EndScan
        ClearAll

        ;--- Registro H010: Invent rio -------------------------------
        View "\\Sistemas\\ICMS_IPI\\SPEDH010"
        Scan
          ;[]=Tira_Char([])
          Print File ARQ "|H010"+"|"
          Print File ARQ ""+[COD_ITEM]+"|"
          Print File ARQ ""+[UNID    ]+"|"
          Print File ARQ Valor_Str([QTD],3)+"|"
          Print File ARQ Valor_Str([VL_UNIT],6)+"|"
          Print File ARQ Valor_Str([VL_ITEM],2)+"|"
          Print File ARQ ""+[IND_PROP]+"|"
          Print File ARQ ""+[COD_PART]+"|"
          Print File ARQ ""+Tira_Char([TXT_COMPL])+"|"           
          Print File ARQ ""+[COD_CTA]+"|"
          Print File ARQ Valor_Str([VL_ITEM],2)+"|"+"\n"
          CONTA_REGISTRO("H010","H990")
        EndScan
        ClearAll
EndIf

;--- Registro H990: Encerramento do Bloco H ------------------------------------
Print File ARQ "|H990"+"|"+StrVal(Contador_REGISTRO("H990"))+"|"+"\n"

Mensagem("Arquivo gerado em "+ARQ)

Release Vars DT_INV, DIREPORT, VSDGDRIVE, VSDGDRIVE, ARQ, 
             VL_INV,DT_INV, MES_BLOCOH, REGTB, 
             NR, REG_ITEM, COD_CTA, VSDGMOTINV, REG_BLC, TOT_BLC, IND_MOV

EndProc ;BlocoH()      

;*******************************************************************************
;* Rotina ShowDialog para Imprimir em arquivo                                  *
;*******************************************************************************
Proc SD_Arqtemp(Disparo_Arq,Campo_Arq,Evento_Arq,Elemento_Arq)
Temp=True
TECLA    =""
MSG_CAMPO=""

If Disparo_Arq="OPEN"
   Then AoCriarShowDialog()
        If GERA_INVENT = "SALVAR"
           Then Campo_Arq="ARQ_YES" 
           Else Campo_Arq="TG_ARQUIVOS"
        EndIf   
EndIf

If Disparo_Arq="SELECT"
   Then Switch
          Case Campo_Arq="TG_DRIVES"      : Campo_Arq="TG_ARQUIVOS"
               VSDGDRIVE=ControlValue("TG_DRIVES")
               VSDGPASTA=VSDGDRIVE+"\\"
          Case Campo_Arq="TG_ARQUIVOS"    :
               If SearchFrom("..\\",ControlValue("TG_ARQUIVOS"),1)>0
                  Then pospasta=3
                       For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
                         If SubStr(VSDGPASTA,ipasta,1)="\\"
                            Then pospasta=ipasta
                                 QuitLoop
                         EndIf
                       EndFor
                       VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
                  Else If SearchFrom("\\",ControlValue("TG_ARQUIVOS"),1)>0
                          Then VSDGPASTA=VSDGPASTA+ControlValue("TG_ARQUIVOS")
                          Else ARQUIVO=ControlValue("TG_ARQUIVOS")
                       EndIf
               EndIf
        EndSwitch
EndIf
If Disparo_Arq="EVENT" And Evento_Arq["Type"]="KEY" Then
   Temp=False
   Switch
     Case Evento_Arq["KeyCode"] =  -31: Campo_Arq="TG_PASTA"
     Case Evento_Arq["KeyCode"] =  -32: Campo_Arq="TG_DRIVES"
     Case Evento_Arq["KeyCode"] =  -25: Campo_Arq="TG_ARQUIVOS"

     Case Evento_Arq["KeyCode"] =  27:
          Switch
            Case Campo_Arq="TG_PASTA"       : Campo_Arq="ARQ_NO"
            Case Campo_Arq="TG_DRIVES"      : Campo_Arq="TG_PASTA"
            Case Campo_Arq="TG_ARQUIVOS"    : Campo_Arq="TG_DRIVES"
            Case Campo_Arq="ARQ_YES" Or
                 Campo_Arq="ARQ_NO"         : Campo_Arq="TG_DRIVES"
          EndSwitch
     Case Evento_Arq["KeyCode"] = -152 And Campo_Arq="TG_ARQUIVOS":
          pospasta=3
          For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
            If SubStr(VSDGPASTA,ipasta,1)="\\"
               Then pospasta=ipasta
                    QuitLoop
            EndIf
          EndFor
          VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
     Case Evento_Arq["KeyCode"] = 13:
          Switch
            Case Campo_Arq="TG_PASTA"       : Campo_Arq="ARQ_YES"
                 VSDGPASTA=ControlValue("TG_PASTA")
            Case Campo_Arq="TG_VOLTA"       :
                 pospasta=3
                 For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
                   If SubStr(VSDGPASTA,ipasta,1)="\\"
                      Then pospasta=ipasta
                           QuitLoop
                   EndIf
                 EndFor
                 VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
            Case Campo_Arq="TG_DRIVES"      : Campo_Arq="TG_ARQUIVOS"
                 VSDGDRIVE=ControlValue("TG_DRIVES")
                 VSDGPASTA=VSDGDRIVE+"\\"
            Case Campo_Arq="TG_ARQUIVOS"    :
                 If SearchFrom("..\\",ControlValue("TG_ARQUIVOS"),1)>0
                    Then pospasta=3
                         For ipasta From (Len(VSDGPASTA)-1) to 1 Step -1
                           If SubStr(VSDGPASTA,ipasta,1)="\\"
                              Then pospasta=ipasta
                                   QuitLoop
                           EndIf
                         EndFor
                         VSDGPASTA=SubStr(VSDGPASTA,1,SearchFrom("\\",VSDGPASTA,pospasta))
                    Else If SearchFrom("\\",ControlValue("TG_ARQUIVOS"),1)>0
                            Then VSDGPASTA=VSDGPASTA+ControlValue("TG_ARQUIVOS")
                            Else ARQUIVO=ControlValue("TG_ARQUIVOS")
                                 Campo_Arq="ARQ_YES"
                         EndIf
                 EndIf
            Case Campo_Arq="ARQ_NO"         :
                 MSG_CAMPO="."
                 CancelDialog
            Case Campo_Arq="ARQ_YES"        :
                 MSG_CAMPO="."
                 ;ARQUIVO=ControlValue("NArquivo")
                 AcceptDialog
          EndSwitch

   EndSwitch
EndIf
RefreshDialog

If SubStr(ControlValue("TG_PASTA"),Len(ControlValue("TG_PASTA")),1)<>"\\"
   Then VSDGPASTA=ControlValue("TG_PASTA")+"\\"
   Else VSDGPASTA=ControlValue("TG_PASTA")
EndIf

If SubStr(VSDGPASTA,2,1)=":"
   Then VSDGDRIVE=SubStr(VSDGPASTA,1,2)
   Else VSDGPASTA=VSDGDRIVE+VSDGPASTA
EndIf

SelectControl Campo_Arq
If IsBlank(MSG_CAMPO)
   Then Switch
          Case Campo_Arq="TG_PASTA":
               MSG_CAMPO="Informe o caminho desejado !"
          Case Campo_Arq="TG_VOLTA":
               MSG_CAMPO="Volta um n¡vel acima na pasta !"
          Case Campo_Arq="TG_DRIVES":
               MSG_CAMPO="Selecione o drive desejado !"
               TECLA=Chr(27)+""+Chr(26)+"=Selecionar  "
          Case Campo_Arq="TG_ARQUIVOS":
               MSG_CAMPO="Selecione a pasta ou o arquivo se desejar !"
               TECLA=Chr(27)+""+Chr(26)+"=Selecionar  Alt+=Um n¡vel acima  "
          Case Campo_Arq="ARQ_YES":
               MSG_CAMPO="Confirmar Dados/Executar !"
          Case Campo_Arq="ARQ_NO":
               MSG_CAMPO="Cancelar/Voltar !"
        EndSwitch
EndIf

ExibeRodapeSD(MSG_CAMPO)
ExibeRodape(2,"Esc=Retornar  Enter=Avan‡ar  "+TECLA)
RefreshDialog

Return Temp
EndProc

;*******************************************************************************
;* ROTINA INFORMAR ARQUIVO A GRAVAR                                            *
;*******************************************************************************
Proc Exporta_Invent()
Private OP

Switch
  Case GERA_INVENT = "SALVAR" : OP = "Salvar"
  Case GERA_INVENT = "ABRIR"  : OP = "Abrir"
  OtherWise                   : ARQUIVO = ""
                                Return
EndSwitch  

DIREPORT   ="\\Sistemas\\Estoque\\"
VSDGDRIVE  = SubStr(Directory(),1,2)

If GERA_INVENT = "ABRIR"
   Then Switch
          Case Upper(VSDGDRIVE)="X:" : If DirExists("V:") <> 0
                                          Then VSDGDRIVE = "V:"
                                       EnDIf   
          Case Upper(VSDGDRIVE)="V:" : If DirExists("X:") <> 0
                                          Then VSDGDRIVE = "X:"
                                       EnDIf   
        EndSwitch
EndIf
VSDGPASTA  =VSDGDRIVE+DIREPORT
ARQUIVO    =""

DynArray Array_Drives[]
SysInfo Drives To Array_Drives

While True
 ShowDialog OP+" Arquivo de Invent rio" Proc "SD_Arqtemp"
   Trigger "OPEN","ARRIVE","SELECT"
    Key "ENTER","ESC",-152,-31,-32,-25,-20,-49
     @ 02,12   Height 12 Width 58

    Label  @ 00,00 "~S~alvar em:"  For "TG_PASTA"
    Accept @ 01,01 Width 53 "A60"  Picture "!*!" Tag "TG_PASTA" To VSDGPASTA

    Label  @ 02,00 "~D~rives: " For "TG_DRIVES"
    PickDynArrayIndex @ 03,01 Height 4 width 04
     Columns 1
      Array_Drives
       Tag "TG_DRIVES"
        To VSDGDRIVE

    Label  @ 02,07"~P~asta/Arquivos"  For "TG_ARQUIVOS"
    PickFile @ 03,08 Height 4 Width 46
     Columns 3
      VSDGPASTA+Tipo_Ext SHOWDIRS NOEXT
       Tag "TG_ARQUIVOS"
        To VSDGARQUIVOS

    Pushbutton @ 08,15 width 11 "~O~k"      OK     Default Value "Ok" Tag "ARQ_YES" To BottonValue
    Pushbutton @ 08,31 width 11 "~C~ancela" CANCEL                    Tag "ARQ_NO"  To BottonValue

 EndDialog
 If Not Retval
    Then ARQUIVO = ""
         QuitLoop
    Else ARQUIVO = VSDGPASTA + "INVENT.TXT"
 EndIf
 
 Switch
   Case DirExists(Substr(VSDGPASTA,1,3))=0 : 
        Mensagem("Diret¢rio "+Upper(Substr(VSDGPASTA,1,3))+" n„o localizado!")
        Loop     
   Case DirExists(VSDGPASTA)=0 :
        Mensagem("Diret¢rio "+Upper(VSDGPASTA)+" n„o localizado!")
        Loop     
 EndSwitch 
 
 Switch
   Case GERA_INVENT = "SALVAR" : If IsFile(ARQUIVO)
                                    Then Deleta_Arquivo(ARQUIVO)
                                 EndIf 
   Case GERA_INVENT = "ABRIR"  : If Not IsFile(ARQUIVO)
                                    Then Mensagem("Arquivo "+ARQUIVO+" nÆo localizado!")
                                         ARQUIVO = ""
                                    Else {Tools} {Info} {Inventory} {Files} Typein ARQUIVO Enter
                                         ConfGeral("Confirmar analisar o arquivo do invent rio gerado em "+StrVal([Date])+" ?")
                                         If Ok <> "S"
                                            Then ARQUIVO = ""
                                         EndIf
                                 EndIf   
 EndSwitch
 QuitLoop
EndWhile

EndProc ;Exporta_Invent()        

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Importa_Invent()

;Foi arquivado em duas linhas, pois apenas em uma linha o editor nÆo conseguia
;identificar e quebrava automaticamente deixando as informacoes incorretas
View TabelaI
Scan
  Print File ARQUIVO Format("W4",[Codigo da Empresa])+
                     Format("W10",[Codigo do Item])+
                     Format("W30",[Descricao do Item])+
                     Format(VTIPO,[Saldo Atual])+"\n"+
                     Format(VTIPO,[Custo Total Atual])+
                     Format(VTIPO,[Valor Unitario])+
                     Format("W20",[Referencia])+
                     Format("W2",SubStr(Directory(),1,2))+"\n"
EndScan
ClearImage

Mensagem("Arquivo gerado em "+ARQUIVO)

EndProc ;Importa_Invent()

;*******************************************************************************
;* Rotina p/ Converter em Numero                                               *
;*******************************************************************************
Proc Converte_Numero(PARAM)
Private PARAM,PARAM_AUX

If PARAM <> ""
   Then PosI = Search(".",PARAM)
        While PosI >0
          PARAM = SubStr(PARAM,1,PosI-1)+"+"+SubStr(PARAM,PosI+1,Len(PARAM))
          PosI = Search(".",PARAM)
        EndWhile
        
        PosI = Search(",",PARAM)
        While PosI >0
          PARAM = SubStr(PARAM,1,PosI-1)+"."+SubStr(PARAM,PosI+1,Len(PARAM))
          PosI = Search(",",PARAM)
        EndWhile
        
        PosI = Search("+",PARAM)
        While PosI >0
          PARAM = SubStr(PARAM,1,PosI-1)+","+SubStr(PARAM,PosI+1,Len(PARAM))
          PosI = Search("+",PARAM)
        EndWhile
        PARAM = NumVal(PARAM)
   Else PARAM = 0     
EndIf

Return PARAM

EndProc ;Converte_Numero()

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc Relaciona_Invent()
Private oi, COD_ITE, DES_ITE, SAL_ITE, CUS_ITE, VR_ITE, REF_ITE,wc,Array_Lista_Arquivos

Release Vars Array_Lista_Arquivos
DynArray Array_Lista_Arquivos[]

Aguarde("Aguarde, carregando INVENT.TXT")

wc=0
Editor Open VSDGPASTA+"Invent.txt"
While True
  Extrair_Linha()
  If IsBlank(Elinha)
     Then QuitLoop
  EndIf
  wc=wc+1
  Array_Lista_Arquivos[wc]=SubStr(Elinha,1,Len(Elinha)-1)
EndWhile
Do_iT!
ClearImage

Tabela_Invent=Cria_Temp(Privdir())
Copy "\\Base\\Sistemas\\Estoque\\RM_0011a" Tabela_Invent

Coedit Tabela_Invent
For oi From 1 To DynArraySize(Array_Lista_Arquivos)
  If MOD(oi,2) <> 0
     Then If oi = 1
             Then End
             Else End Down
          EndIf
          [Codigo da Empresa] = SubStr(Array_Lista_Arquivos[oi],1,4)   
          [Codigo do Item   ] = SubStr(Array_Lista_Arquivos[oi],5,10)
          [Descricao do Item] = Rtrim(SubStr(Array_Lista_Arquivos[oi],15,30)) 
          SALDO = Converte_Numero(Rtrim(SubStr(Array_Lista_Arquivos[oi],45,15)))
          If SALDO <> "" And SALDO <> "*"
             Then [Saldo Atual      ] = SALDO
          EndIf   
     Else CUSTO = Converte_Numero(Ltrim(Rtrim(SubStr(Array_Lista_Arquivos[oi],1,15))))
          VALOR = Converte_Numero(Ltrim(Rtrim((SubStr(Array_Lista_Arquivos[oi],16,15)))))
          If CUSTO <> "" And CUSTO <> "*"
             Then [Custo Total Atual] = CUSTO
          EndIf
          If VALOR <> "" And VALOR <> "*"
             Then [Valor Unitario   ] = VALOR
          EndIf
          [Referencia       ] = Rtrim(SubStr(Array_Lista_Arquivos[oi],31,20))
          [Diretorio        ] = Rtrim(SubStr(Array_Lista_Arquivos[oi],51,2))
          UnLockRecord
          Release Vars CUSTO,VALOR
  EndIf 
EndFor
Do_It!
ClearImage

switch
  case sys_Codigo_cliente="0294":
  
    If VSDGEMPRESA="0000"
       then {ask} typein Tabela_Invent enter TypeIn "Fast"
            moveto [Codigo da Empresa] Typein "Changeto ~VSDGEMPRESA"
            Do_It!
            ClearAll
    endif

endswitch

NR = NRecords(TabelaI)

View Tabela_Invent 
Coedit TabelaI
Scan
  Barra(NR, RecNo())
  Aguarde("Aguarde, comparando inventario "+BARRA_STRING)

  COD_EMP = [Codigo da Empresa]
  COD_ITE = [Codigo do Item   ] 
  DES_ITE = [Descricao do Item]  
  SAL_ITE = [Saldo Atual      ]  
  CUS_ITE = [Custo Total Atual] 
  VR_ITE  = [Valor Unitario   ] 
  REF_ITE = [Referencia       ]
  
  ACHOU_ITEM = False
  Moveto Tabela_Invent
  Moveto [Codigo do Item]
  Locate COD_ITE
  If RetVal
    Then While True
           If [Referencia] = REF_ITE And [Codigo da Empresa] = COD_EMP 
              Then ACHOU_ITEM = True
                   QuitLoop 
           EndIf      
           Skip
           If Eot() Then QuitLoop EndIF
           Locate Next COD_ITE
           If Not RetVal Then QuitLoop EndIf
         EndWhile
  EndIf 
  If Not ACHOU_ITEM
     Then End Down
          [Codigo da Empresa] = COD_EMP
          [Codigo do Item   ] = COD_ITE
          [Descricao do Item] = DES_ITE
  EndIf       
  [Saldo Atual 2        ] = SAL_ITE
  [Custo Total Atual 2  ] = CUS_ITE
  [Valor Unitario Atual ] = VR_ITE 
  [Referencia Atual     ] = REF_ITE 
  [Diretorio Atual      ] = SubStr(Directory(),1,2)
  
  [Diferenca Saldo      ] =[Saldo Atual 2        ]-[Saldo Atual          ]
  If [Diferenca Saldo] = 0 Or [Diferenca Saldo] = -0
     Then [Diferenca Saldo] = BlankNum()
  EndIf
  [Diferenca Custo Total] = [Custo Total Atual 2] - [Custo Total Atual]
  UnLockRecord
  
  Moveto TabelaI
EndScan
Do_It!
ClearImage
ClearImage

If not RelacionaInventTodos
   then {ask} typein Tabela_Invent enter TypeIn "Fast Delete"
        moveto [Diferenca Saldo] Typein "0 or Blank"
        Do_It!
        ClearImage 
endif

Release Vars COD_ITE, DES_ITE, SAL_ITE, CUS_ITE, VR_ITE, REF_ITE

Ajusta_Answer("RM_0011A")
Impressao_Orientacao="Paisagem"
If VSDGOPRELCODALF="1"
   Then IMPRIREL(Tabela_Invent,"R")
   Else Seta_Ordem_Report(Tabela_Invent,"R","Codigo do Item","Descricao do Item","")
EndIf   
  
EndProc ;Relaciona_Invent()
        
;*******************************************************************************
;* 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  : 
          Switch
            Case Campo="TG_CONSIST":
              ShowPopup " Op‡äes de consistˆncia " CENTERED
               "~0~  NÆo consistir             " : " NÆo consistir erros                             " : "0",
                 Separator,
               "~1~  Consistir todos           " : " Consistir todos os erros                        " : "1",
               "~2~  Consistir erros do dia    " : " Consistir apenas erro da 'Data Final'           " : "2",
               "~3~  Consistir saldo do dia    " : " Consistir apenas saldo negativos da 'Data Final'" : "3",
                 Separator,
               "~C~ancelar                     " : " Cancelar a Opera‡„o                             " : "CANCELAR"
              EndMenu
               To VSDGCONSIST
              If Not RetVal
                 Then VSDGCONSIST=""
              EndIf
              RefreshDialog
            OtherWise               : Dialog_F1()
          EndSwitch
     Case Evento["KeyCode"] =  27  :
          Temp=False
          Switch
            Case Campo="TG_EMPRESATE"       : Campo="NO"
            Case Campo="TG_TIPOEST"       : Campo="TG_EMPRESATE"
            Case Campo="TG_MOV"           : Campo="TG_TIPOEST"
            Case Campo="TG_MESANO"        : Campo="TG_MOV"
            Case Campo="TG_DTREF"         : Campo="TG_MESANO"
            Case Campo="TG_FAMI"          :
                 If VSDGMOV="ABERTO"
                    Then Campo="TG_DTREF"
                    Else Campo="TG_MESANO"
                 EndIf
            Case Campo="TG_GRP"           : Campo="TG_FAMI"
            Case Campo="TG_MARCA"         : Campo="TG_GRP"
            Case Campo="TG_DEPART"        : Campo="TG_MARCA"
            Case Campo="TG_LOCAL"         : Campo="TG_DEPART"
            Case Campo="TG_REFERENCIA"    : Campo="TG_LOCAL"
            Case Campo="TG_CONSIST"       : Campo="TG_REFERENCIA"
            Case Campo="TG_ZERADO"        : Campo="TG_CONSIST"
            Case Campo="TG_COMPLEMENTO"   : Campo="TG_ZERADO"
            Case Campo="TG_OPRELCODALF"   : Campo="TG_COMPLEMENTO"
            Case Campo="TG_OPCUSTO"       : Campo="TG_SITITEM"
            Case Campo="TG_SITITEM"       : Campo="TG_OPRELCODALF"
            Case Campo="TG_TABELA"        : Campo="TG_OPCUSTO"
            Case Campo="TG_OPOF"          :
                 If VSDGOPCUSTO<>"V"
                    Then Campo="TG_OPCUSTO"
                    Else Campo="TG_TABELA"
                 EndIf
            Case Campo="TG_CODMODELO"      : Campo="TG_OPCUSTO"
            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_MOV"
                    Case Campo="TG_MOV"     : Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :
                         VSDGMES=SubStr(VSDGMESANO,1,2)
                         VSDGANO=SubStr(VSDGMESANO,4,4)
                         If NumVal(VSDGMES) > 12 Or NumVal(VSDGMES) = 0
                            Then MENSAGEM("Mˆs Inv lido!")
                            Else VSDGDTINI = DateVal("01."+VSDGMES+"."+VSDGANO)
                            
                                 if isblank(VSDGDTREF)
                                    then VSDGDTREF=Ultimo_Dia(VSDGMES+VSDGANO)
                                    
                                         If Month(VSDGDTREF)=Month(Today()) And
                                            Year(VSDGDTREF)=Year(Today())
                                            Then VSDGDTREF=Today()
                                         EndIf
                                 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_DEPART"
                    Case Campo="TG_DEPART"      : Campo = "TG_LOCAL"
                    Case Campo="TG_LOCAL"       : Campo = "TG_REFERENCIA"
                    Case Campo="TG_REFERENCIA"  : Campo = "TG_CONSIST"
                    Case Campo="TG_CONSIST"     :
                         VSDGCONSIST=ControlValue("TG_CONSIST")
                         Switch
                          Case VSDGCONSIST ="1":
                               VSDGDESCCONS="Consistir todos"
                               MENSAGEM    ="Todos os erros"
                               VSDGZERADO=""
                               VSDGDESCZERADO=""
                               Campo="TG_COMPLEMENTO"
                          Case VSDGCONSIST ="2":
                               VSDGDESCCONS="Consistir Data Final"
                               MENSAGEM    ="Consistˆncia Apenas erro da 'Data Final'"
                               VSDGZERADO=""
                               VSDGDESCZERADO=""
                               Campo="TG_COMPLEMENTO"
                          Case VSDGCONSIST ="3":
                               VSDGDESCCONS="Apenas negativos Data Final"
                               MENSAGEM    ="Consistˆncia apenas itens negativos na 'Data Final'"
                               VSDGZERADO=""
                               VSDGDESCZERADO=""
                               Campo="TG_COMPLEMENTO"
                          OtherWise:
                               VSDGCONSIST ="0"
                               VSDGDESCCONS="NÆo consistir erros"
                               MENSAGEM    = ""
                               Campo="TG_ZERADO"
                         EndSwitch     
                    Case Campo="TG_ZERADO"      :
                         VSDGZERADO=ControlValue("TG_ZERADO")
                         Switch
                          Case VSDGZERADO="S":
                               VSDGDESCZERADO="EMITE ZERADO"
                          OtherWise:
                               VSDGZERADO="N"
                               VSDGDESCZERADO="NAO EMITE ZERADO"
                         EndSwitch
                         Campo="TG_COMPLEMENTO"
                    Case Campo="TG_COMPLEMENTO" :
                         VSDGCOMPLEMENTO=ControlValue("TG_COMPLEMENTO")
                         Switch
                           Case VSDGCOMPLEMENTO="C": VSDGDESCCOMP="COM COMPLEMENTO"
                           OtherWise:
                                VSDGCOMPLEMENTO="S"
                                VSDGDESCCOMP="SEM COMPLEMENTO"
                         EndSwitch
                         Campo="TG_OPRELCODALF"  
                    Case Campo="TG_OPRELCODALF" :  Campo="TG_SITITEM"
                    Case Campo="TG_SITITEM"     : 
                         VSDGSITITEM=ControlValue("TG_SITITEM")
                          Switch
                           Case VSDGSITITEM="L": VSDGDSITITEM="EM LINHA"
                           Case VSDGSITITEM="F": VSDGDSITITEM="FORA DE LINHA"
                           Case VSDGSITITEM="A": VSDGDSITITEM="AMBOS"
                           OtherWise           : VSDGSITITEM="A"
                                                 VSDGDSITITEM="AMBOS" 
                          EndSwitch  
                          Campo = "TG_OPCUSTO"
                    Case Campo="TG_OPCUSTO" :
                         VSDGOPCUSTO=ControlValue("TG_OPCUSTO")
                         Switch
                           Case VSDGOPCUSTO="U": VSDGNOMOPCUSTO="ULTIMO CUSTO"
                           Case VSDGOPCUSTO="F": VSDGNOMOPCUSTO="FORMULA"
                           Case VSDGOPCUSTO="V": VSDGNOMOPCUSTO="VENDA"
                           OtherWise           : VSDGOPCUSTO="M"
                                                 VSDGNOMOPCUSTO="CUSTO MEDIO"
                         EndSwitch
                         If VSDGOPCUSTO<>"V"
                            Then VSDGTABELA=""
                                 VSDGNOMTAB=""
                                 Campo="TG_OPOF"
                            Else Campo="TG_TABELA"
                         EndIf
                    Case Campo="TG_TABELA"      :
                         If IsBlank(VSDGTABELA)
                            Then Campo="TG_TABELA"
                                 VSDGNOMTAB=""
                            Else Campo = "TG_OPOF"
                         EndIf
                    Case Campo="TG_OPOF"        : Campo = "TG_CODMODELO"
                         VSDGOPOF=ControlValue("TG_OPOF")
                         Switch
                           Case VSDGOPOF="N": VSDGNOMOPOF="NAO"
                           OtherWise:
                                VSDGOPOF="S"  VSDGNOMOPOF="SIM"
                         EndSwitch
                    Case Campo="TG_CODMODELO"   : Campo = "YES"
                  EndSwitch
          EndIf
   EndSwitch
EndIf

Switch
  Case Campo="TG_ZERADO":
       MSG_CAMPO="S=Emite Estoque Zerado, N=Nao Emite Estoque Zerado"
  Case Campo="TG_CONSIST":
       MSG_CAMPO="Informe a op‡Æo, [F1]Consulta tabela"
  Case Campo="TG_COMPLEMENTO":
       MSG_CAMPO="C=Com Complemento, S=Sem Complemento"
  Case Campo="TG_OPCUSTO":
       MSG_CAMPO="M=Custo Medio, U=Ultimo Custo, V=Venda , F=Formula"
  Case Campo="TG_DTREF":
       MSG_CAMPO="Informe a Data Final"
  Case Campo="TG_OPOF":
       MSG_CAMPO="Incluir Ordem de Faturamento n„o emitida (Sim/N„o)"
  Case Campo="TG_TABELA":
       MSG_CAMPO="Informe uma Tabela de Pre‡o"
  Case Campo="TG_SITITEM":
       MSG_CAMPO="L=Em Linha, F=Fora de Linha,  A=Ambos"
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","OR_0011")  

;ModeloRelatoriosAdd("XXX XX maximo 70 XX")

ModeloRelatoriosAdd("Criar") ; linha obrigatoria inicial
ModeloRelatoriosAdd("01 - Invent rio")
ModeloRelatoriosAdd("02 - Invent rio/Familia")
ModeloRelatoriosAdd("03 - Invent rio/Familia/Marca/Grupo")
ModeloRelatoriosAdd("04 - Invent rio/Familia/Grupo")
ModeloRelatoriosAdd("05 - Invent rio/Marca")
ModeloRelatoriosAdd("06 - Invent rio/ICMS")
ModeloRelatoriosAdd("07 - Invent rio/Marca c/ embalagem")
ModeloRelatoriosAdd("08 - Invent rio/Fornecedor")
ModeloRelatoriosAdd("09 - Invent rio/ICMS II")
ModeloRelatoriosAdd("10 - Invent rio/Tipo Tributa‡„o")
ModeloRelatoriosAdd("11 - Invent rio/Marca p/ contagem")
ModeloRelatoriosAdd("12 - Invent rio/Localiza‡„o")
ModeloRelatoriosAdd("24 - Invent rio/Localiza‡„o p/ contagem")
ModeloRelatoriosAdd("13 - Invent rio/Cod.For/Local./Min/Max/Pt.Rep")
ModeloRelatoriosAdd("14 - Invent rio/Codigo de Barras")
ModeloRelatoriosAdd("15 - Invent rio/Referˆncia")
ModeloRelatoriosAdd("25 - Invent rio/Referˆncia/PrVenda/UltCusto/Saldo/NCM")
ModeloRelatoriosAdd("16 - Invent rio/Cor/Referˆncia")
ModeloRelatoriosAdd("17 - Invent rio/Referˆncia/Cor")
ModeloRelatoriosAdd("18 - Invent rio/Marca/CodFornecedor")
ModeloRelatoriosAdd("19 - Invent rio/Marca p/ contagem II")
ModeloRelatoriosAdd("20 - Invent rio/DtEntrada/DtSaida") 
ModeloRelatoriosAdd("21 - Invent rio/Grade/Referˆncia")
ModeloRelatoriosAdd("22 - Invent rio/Grade/Referˆncia+Cor")
ModeloRelatoriosAdd("23 - Invent rio/Curva ABC")
ModeloRelatoriosAdd("26 - Invent rio/Comparativo Invent rio Externo")
ModeloRelatoriosAdd("27 - Gera Invent rio - Bloco H - SPED Fiscal")
ModeloRelatoriosAdd("Fim")
                           
EndProc ;ModeloRelatoriosCarregaLista

;*******************************************************************************
;* ROTINA PRINCIPAL                                                            *
;*******************************************************************************
AutoLib="\\Sistemas\\Cadastro\\Bib_Show,\\Sistemas\\Cadastro\\Bibliot"
LimpAguarde()
SYS_VALOR()

If Not IsAssigned(SYS_CODIGO_CLIENTE)  Then SYS_CODIGO_CLIENTE=""  EndIf

ClearAll

VSDGEMPRESA     = ""
VSDGEMPRESA2    = ""
VSDGTIPOEST     = ""
VSDGDESCTIPOEST = ""
VSDGMOV         = ""
VSDGDESCMOV     = ""
VSDGMESANO      = ""
VSDGDTREF       = BlankDate()
VSDGDTINI       = BlankDate()
VSDGDTFIM       = BlankDate()
VSDGFAMI        = ""
VSDGMARCA       = ""
VSDGGRP         = ""
VSDGDEPART      = ""
VSDGCONSIST     = "0"
VSDGDESCCONS    = ""
VSDGZERADO      = ""
VSDGDESCZERADO  = ""
VSDGOPRELCODALF = ""
VSDGCOMPELENTO  = ""
VSDGDESCCOMP    = ""
VSDGOPCUSTO     = ""
VSDGNOMOPCUSTO  = ""
VSDGMESANO   = AlinhM(StrVal(Month(Today())),2)+"."+AlinhM(StrVal(Year(Today())),4)
VSDGOPOF        = ""
VSDGNOMOPOF     = ""
VSDGNOMTAB      = ""
VSDGSITITEM     = ""
VSDGREFERENCIA  = ""
VSDGLOCAL       = ""

ModeloRelatoriosCarregaLista()

While True
  OP_SHOW="S"
  ShowDialog "Invent rio do Estoque" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140  
    @ 01,00 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 "Movimento"  For "TG_MOV"
    Accept @ 05,01 Width 11 "A7"  Picture "ABERTO,FECHADO" Tag "TG_MOV" To VSDGMOV

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

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

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

    Label  @ 08,00 "Grupo"  For "TG_GRP"
    Accept @ 09,02 Width 06 "A3"  Picture "#*#" Tag "TG_GRP" To VSDGGRP
    Accept @ 09,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMGRP" To VSDGNOMGRP

    Label  @ 10,00 "Marca"  For "TG_MARCA"
    Accept @ 11,02 Width 06 "A3"  Picture "#*#" Tag "TG_MARCA"    To VSDGMARCA
    Accept @ 11,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMMARCA" To VSDGNOMMARCA

    Label  @ 12,00 "Departamento"  For "TG_DEPART"
    Accept @ 13,02 Width 06 "A3"  Picture "#*#" Tag "TG_DEPART"    To VSDGDEPART
    Accept @ 13,09 Width 25 "A25" Picture "!*!" Tag "TG_NOMDEPART" To VSDGNOMDEPART

    Label  @ 14,00 "Localiza‡Æo"  For "TG_LOCAL"
    Accept @ 15,01 Width 33 "A12" Picture "!*!" Tag "TG_LOCAL" To VSDGLOCAL
    Accept @ 16,01 Width 33 "A12" Picture "!*!" Tag "TG_NOMLOCAL" To VSDGNOMLOCAL

    Label  @ 00,35 "Referˆncia"  For "TG_REFERENCIA"
    Accept @ 01,36 Width 33 "A20" Picture "!*!" Tag "TG_REFERENCIA" To VSDGREFERENCIA

    Label  @ 02,35 "Consistir Erros"  For "TG_CONSIST"
    Accept @ 03,39 Width 04 "A1"  Picture "0,1,2,3" Tag "TG_CONSIST" To VSDGCONSIST         
    Accept @ 03,44 Width 25 "A25"  Tag "TG_DESCCONS" To VSDGDESCCONS

    Label  @ 04,35 "Op‡„o do Estoque" For "TG_ZERADO"
    Accept @ 05,39 Width 04 "A1"  Picture "S,N" Tag "TG_ZERADO" To VSDGZERADO
    Accept @ 05,44 Width 25 "A25"  Picture "!*!" Tag "TG_DESCZERADO" To VSDGDESCZERADO  

    Label  @ 06,35 "Op‡„o de Complemento" For "TG_COMPLEMENTO"
    Accept @ 07,39 Width 04 "A1"  Picture "S,C" Tag "TG_COMPLEMENTO" To VSDGCOMPLEMENTO
    Accept @ 07,44 Width 25 "A25"  Picture "!*!" Tag "TG_DESCCOMP" To VSDGDESCCOMP

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

    Label  @ 10,35 "Op‡„o do Item"  For "TG_SITITEM"
    Accept @ 11,39 Width 04 "A1"  Picture "L,F,A" Tag "TG_SITITEM" To VSDGSITITEM
    Accept @ 11,44 Width 25 "A25"  Picture "!*!" Tag "TG_DSITITEM" To VSDGDSITITEM

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

    Label  @ 12,59 "Tab.Pre‡o"  For "TG_TABELA"
    Accept @ 13,61 Width 08 "A5"  Picture "#*#" Tag "TG_TABELA"    To VSDGTABELA
                  
    Label  @ 14,35 "Op‡„o de Ordem Fatura" For "TG_OPOF"
    Accept @ 15,39 Width 04 "A1"  Picture "S,N" Tag "TG_OPOF" To VSDGOPOF
    Accept @ 15,44 Width 25 "A3"  Picture "!*!" Tag "TG_NOMOPOF" To VSDGNOMOPOF

    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 VSDGOPCUSTO="V" And IsBlank(VSDGTABELA)
     Then Mensagem("Tabela de Pre‡o Inv lida !")
          Loop
  EndIf
  
  If IsBlank(VSDGDTREF) Or (VSDGDTFIM<VSDGDTINI) Or IsBlank(VSDGMESANO)
     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                                         

  If Existe_Mes_Ano_Fechado("01."+VSDGMESANO,"Estoque","Sdestq") Then Loop EndIf

  Impressao_Orientacao="Retrato"

  If VSDGCODMODELO="23"
     Then Curva_ABC("Tela")
  EndIf
   
  Switch
    Case VSDGCODMODELO="26" : 
         ShowPopup " Op‡äes do Invent rio " CENTERED
           "~1~  Gerar o Arquivo de Invent rio            " : " Gerar o Arquivo de Invent rio             " : "1",
             Separator,
           "~2~  Ler Arquivo de Inventario p/ Comparativo "   : " Ler Arquivo para Comparativo e ver todos itens" : "2",
           "~3~  Ler Arquivo de Inventario p/ Comparativo II" : " Ler Arquivo para Comparativo e apenas itens com diferen‡a" : "3",
             Separator,
           "~C~ancelar                                    " : " Cancelar a Opera‡„o                       " : "CANCELAR"
         EndMenu
         To VSDGOPINVENT
         If Not RetVal
            Then VSDGOPINVENT = ""
         EndIf

         if VSDGOPINVENT = "2" then  RelacionaInventTodos=True                      endif
         if VSDGOPINVENT = "3" then  RelacionaInventTodos=false VSDGOPINVENT = "2"  endif

         Switch
           Case VSDGOPINVENT = "1" : GERA_INVENT = "SALVAR"
                                     Tipo_Ext = "*.kkk"
                                     Exporta_Invent()
                                     If ARQUIVO="" Then Loop EndIf
           Case VSDGOPINVENT = "2" : DISPOSITIVO()
                                     GERA_INVENT = "ABRIR"
                                     Tipo_Ext = "INVENT.Txt"
                                     Exporta_Invent()
                                     If ARQUIVO="" Then Loop EndIf
                                     If OK="" Then Loop EndIf
           OtherWise               : GERA_INVENT = ""
                                     Loop
         EndSwitch
    Case VSDGCODMODELO="27" :
         ConfGeral("Deseja gerar o invent rio do Bloco H para o SPED FISCAL ?")
         If Ok<>"S" Then Loop EndIf     
    OtherWise : DISPOSITIVO()
                If OK="" Then Loop EndIf
  EndSwitch

  If VSDGCODMODELO="25" And VSDGOPCUSTO<>"V"
     Then Mensagem("Para o relat¢rio 25 ‚ preciso informar a op‡„o de pre‡o para VENDA!")
          Loop
  EndIf

  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+"Voce selecionou op‡„o Mes em Aberto.// //"
            Case VSDGMOV="FECHADO":
                 MSG="Existem movimenta‡”es Em Aberto://"
                 MSG=MSG+MSG_MODULO+" //"
                 MSG=MSG+"Voce selecionou op‡„o Mes Fechado.// //"
          EndSwitch
          MSG=MSG+"Verificar !"
          Mensagem(MSG)
          Loop
  EndIf

  AGUARDE("Aguarde, Gerando o Relat¢rio")
  TabelaR=Cria_Temp(Privdir())
  Empty "Reproces"
  Copy "Reproces" TabelaR

  TabelaI=Cria_Temp(PrivDir())
  Empty "Invent"
  Copy "Invent" TabelaI

  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()
           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()
  EndSwitch

  ENCONTRADO_INCONSISTENCIA=False
  Processa()
  Inventario=True
  If IsEmpty(TabelaI)
     Then If VSDGCONSIST<>"0"
             Then MENSAGEM("N„o Existem Inconsistencias")
             Else MENSAGEM("N„o Existem Registros a Processar")
          EndIf
          Delete TabelaR
          Delete TabelaI
          Loop
  EndIf
  
  If VSDGOPCUSTO="V"
     Then VSDGNOMOPCUSTO="VENDAS "+VSDGTABELA
  EndIf
  
  TabelaRel=Cria_Temp(PrivDir())
  If VSDGCOMPLEMENTO="C"
     Then If ((VSDGCODMODELO)<>"22") And
             ((VSDGCODMODELO)<>"21") And 
             ((VSDGCODMODELO)<>"07") And
             ((VSDGCODMODELO)<>"08") And
             ((VSDGCODMODELO)<>"09") And
             ((VSDGCODMODELO)<>"18") And
             ((VSDGCODMODELO)<>"20") 
             Then If ((VSDGCODMODELO)="11") Or
                     ((VSDGCODMODELO)="12") Or
                     ((VSDGCODMODELO)="15") Or
                     ((VSDGCODMODELO)="16") Or
                     ((VSDGCODMODELO)="17") Or
                     ((VSDGCODMODELO)="19") Or  
                     ((VSDGCODMODELO)="24")  
                     Then Copy "\\Base\\Sistemas\\Estoque\\Rm_1002"  TabelaRel
                     Else Copy "\\Base\\Sistemas\\Estoque\\Rm_1000"  TabelaRel
                  Endif
             Else Copy "\\Base\\Sistemas\\Estoque\\Rm_1000e" TabelaRel
          EndIf
          
          If ((VSDGCODMODELO)="20")
             Then Copy "\\Base\\Sistemas\\Estoque\\Rm_1004"  TabelaRel
          EndIf    
                    
     Else If ((VSDGCODMODELO)<>"22") And
             ((VSDGCODMODELO)<>"21") And
             ((VSDGCODMODELO)<>"07") And
             ((VSDGCODMODELO)<>"08") And
             ((VSDGCODMODELO)<>"09") And
             ((VSDGCODMODELO)<>"18") And
             ((VSDGCODMODELO)<>"20") And
             ((VSDGCODMODELO)<>"25") 
             Then If ((VSDGCODMODELO)="11") Or
                     ((VSDGCODMODELO)="12") Or
                     ((VSDGCODMODELO)="15") Or
                     ((VSDGCODMODELO)="16") Or
                     ((VSDGCODMODELO)="17") Or
                     ((VSDGCODMODELO)="19") Or
                     ((VSDGCODMODELO)="24") 
                     Then Copy "\\Base\\Sistemas\\Estoque\\Rm_1003"  TabelaRel
                     Else Copy "\\Base\\Sistemas\\Estoque\\Rm_1001"  TabelaRel
                  Endif
             Else Copy "\\Base\\Sistemas\\Estoque\\Rm_1001e" TabelaRel
          EndIf

          If ((VSDGCODMODELO)="13")
                  Then Copy "\\Base\\Sistemas\\Estoque\\Rm_1000"  TabelaRel
                  VSDGOPRELCODALF="1"
                  CopyReport TabelaRel  "14"  TabelaI "14"
          EndIF
                                             
          If ((VSDGCODMODELO)="14")
                  Then Copy "\\Base\\Sistemas\\Estoque\\Rm_1001"  TabelaRel
                  VSDGOPRELCODALF="1"
                  CopyReport TabelaRel  "14"  TabelaI "14"
          EndIf
          
         If ((VSDGCODMODELO)="20")
            Then Copy "\\Base\\Sistemas\\Estoque\\Rm_1004"  TabelaRel
         EndIf          
  EndIf
  
  If VSDGOPRELCODALF="1"
     Then REP=0
     Else REP=1
  EndIf
  REL=0
  If VSDGCODMODELO="02" Then REL=2 +REP EndIf    
  If VSDGCODMODELO="03" Then REL=4 +REP EndIf
  If VSDGCODMODELO="04" Then REL=8 +REP EndIf
  If VSDGCODMODELO="05" Then REL=10+REP EndIf
  If VSDGCODMODELO="06" Then REL=12+REP EndIf
  If VSDGCODMODELO="07" Then REL=10+REP EndIf
  If VSDGCODMODELO="09" Then REL=6 +REP EndIf
  If VSDGCODMODELO="10" Then REL=6 +REP EndIf
  If VSDGCODMODELO="11" Then REL=1 +REP EndIf
  If VSDGCODMODELO="12" Then REL=3 +REP EndIf
  If VSDGCODMODELO="13" Then REL=14+REP EndIf
  If VSDGCODMODELO="14" Then REL=14+REP EndIf
  If VSDGCODMODELO="15" Then REL=7      EndIf
  If VSDGCODMODELO="16" Then REL=8      EndIf
  If VSDGCODMODELO="17" Then REL=9      EndIf
  If VSDGCODMODELO="18" Then REL=12+REP EndIf
  If VSDGCODMODELO="19" Then REL=10+REP EndIf
  If VSDGCODMODELO="24" Then REL=12+REP EndIf
  If VSDGCODMODELO="25" Then REL=14     EndIf
  REL=StrVal(REL)   
  If VSDGCODMODELO="01" Or
     VSDGCODMODELO="08" Or
     VSDGCODMODELO="20" Or 
     VSDGCODMODELO="26" Or
     VSDGCODMODELO="27"    
     Then If VSDGOPRELCODALF="1"
             Then CopyReport TabelaRel  "R"  TabelaI "R"
             Else CopyReport TabelaRel  "1"  TabelaI "R"
          EndIf
     Else If VSDGCODMODELO<>"21" And
             VSDGCODMODELO<>"22" And
             VSDGCODMODELO<>"23"
             Then CopyReport TabelaRel  REL  TabelaI "R"
                  If (VSDGCODMODELO="15"  Or
                      VSDGCODMODELO="16"  Or
                      VSDGCODMODELO="17") And VSDGOPRELCODALF="2"
                      Then Seta_Ordem_Report(TabelaI,"R","Codigo do Item","Descricao do Item","")
                  EndIf         
          EndIf
  EndIf
  
  Switch
    Case SYS_CODIGO_CLIENTE="0296" : 
         ; Rotina Exclusiva para cliente, para ordenar por Codigo Fornecedor, independente de filtro por cod/alf
         Switch 
            Case VSDGCODMODELO="18" : 
                 If REP=0 
                    Then Seta_Ordem_Report(TabelaI,"R","Codigo do Item","Codigo Fornecedor","")
                    Else Seta_Ordem_Report(TabelaI,"R","Descricao do Item","Codigo Fornecedor","")
                 EndIf    
            Case VSDGCODMODELO="08" : 
                 If VSDGOPRELCODALF="1"
                    Then Seta_Ordem_Report(TabelaI,"R","Codigo do Item","Codigo Fornecedor","")
                    Else Seta_Ordem_Report(TabelaI,"R","Descricao do Item","Codigo Fornecedor","")
                 EndIf   
          EndSwitch  
    Case VSDGCODMODELO="21"  : 
         ;***** Modelo de Grade **********************************
         MODO = "GRADE"
         Play "RM_0011E"     
    Case VSDGCODMODELO="22"  :
         ;***** Modelo de Grade **********************************      
         MODO = "GRADE_COR"
         Play "RM_0011E"
  EndSwitch   

  ;Data da Primeira Entrada / Data da Ultima Saida
  If VSDGCODMODELO="20" 
     Then Informa_Data()
  EndIf

  SetaVisualizarCasasDecimais("15")

  POSSE   ="Do informante e em seu poder"
  POSSE_CT="Do informante em poder de terceiros"
  POSSE_DT="De terceiros em poder do informante"
                                
  If ENCONTRADO_INCONSISTENCIA And VSDGCONSIST="0"
     and VSDGCODMODELO<>"26"
     Then MSG=""
          MSG=MSG+"O Sistema detectou inconsistˆncia de dados !// //"
          MSG=MSG+"Saldos e valores imcompat¡veis ou//"
          MSG=MSG+"em algum momento o Estoque ficou negativo.// //"
          MSG=MSG+"Execute o Invent rio com CONSISTIR ERROS !// //"
          MSG=MSG+"Corrija o problema para obter o MELHOR controle !"
          Mensagem(MSG)
  EndIf
  
  If VSDGCODMODELO<>"21" And
     VSDGCODMODELO<>"22" And
     VSDGCODMODELO<>"23" 
     Then {Ask} TypeIn Tabelai Enter
          Moveto [Custo Total Atual] TypeIn "calc sum as Total"
          Do_It!
          CTOT=[Answer->Total]
          ClearAll
  EndIf        
 
  Switch
    Case VSDGCODMODELO="26" :
         ;---- Criado este modelo apenas p/ cria‡Æo de um layout de exporta‡Æo de inventario para TXT [Sol. 21123] ----- 
         If GERA_INVENT = "SALVAR"
            Then Importa_Invent()
            Else Relaciona_Invent()
         EndIf
    Case VSDGCODMODELO="27" :
         BlocoH()

    Case VSDGCODMODELO="23" :
         Curva_ABC("")  
         Impressao_Orientacao="Paisagem"
         IMPRIREL(TabelaI,"R")       

    OtherWise                                                 : 
         IMPRIREL(TabelaI,"R")       
  EndSwitch

  Delete "Answer"
  if istable(TabelaR)   then delete TabelaR   endif
  if istable(TabelaI)   then delete TabelaI   endif
  if istable(TabelaRel) then delete TabelaRel endif

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