;** Reproces *******************************************************************
;*  Reprocessamento das Movimentacoes                                          *
;*******************************************************************************
;Autor           : Vise Informatica (VISERP)
;Desenvolvido    : 05/12/1995 por Anivel Augusto Rodrigues
;Ultima Alteracao: 07/03/2005 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Quantidade Convertida
;Ultima Alteracao: 07/03/2005 por Davi Carrano
;Motivo Alteracao: Retirei mensagem de Erro que estava aparecendo incorretamente
;Ultima Alteracao: 17/01/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes consistencia de erros
;Ultima Alteracao: 14/02/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Comercial Azevedo Custo-15%
;Ultima Alteracao: 23/03/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Custo Total centavos
;Ultima Alteracao: 12/06/2007 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Relatorio de Itens nao Cadastrados
;Ultima Alteracao: 19/06/2007 por Anivel Augusto Rodrigues      
;Motivo Alteracao: Ajustes Inconsistencia Ficha de Estoque
;Ultima Alteracao: 25/09/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Relatorio de ERROS INCONSISTENCIA
;Ultima Alteracao: 06/11/2008 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Custo Devolucao
;Ultima Alteracao: 07/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Transferencia Custo Medio/Data
;Ultima Alteracao: 22/06/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Transferencia Vr/Data Preco de Custo = Blank
;Ultima Alteracao: 19/01/2009 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Repreoces Sequencia do Lancamento          
;Ultima Alteracao: 18/02/2010 por Cleber Alves            
;Motivo Alteracao: Reprocessameno das pecas    
;Ultima Alteracao: 08/03/2010 por Cleber Alves            
;Motivo Alteracao: Ajustes     
;Ultima Alteracao: 10/03/2010 por Cleber Alves            
;Motivo Alteracao: Ajustes   
;Ultima Alteracao: 05/04/2010 por Cleber Alves            
;Motivo Alteracao: Ajustes
;Ultima Alteracao: 29/04/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes E/P valores zerados usar Ultimo custo/Preco de Custo
;Ultima Alteracao: 05/05/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Controle de Pecas apenas 0239 Brasil Textil         
;Ultima Alteracao: 22/06/2010 por Antonio Marcelo Alves
;Motivo Alteracao: Ajustes PECA EXCLUIDA penas 0239 Brasil Textil
;Ultima Alteracao: 21/07/2010 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes transferencia sem pedir sim ou nÆo      
;Ultima Alteracao: 06/01/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Cria_Ficha*()
;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: 23/09/2011 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Mensagem OF em aberto, nÆo faturadas, TRAVAR
;Ultima Alteracao: 13/10/2011 por Karina Andrade
;Motivo Alteracao: Altera Data OF's em aberto para Auditoria
;Ultima Alteracao: 02/12/2011 por Karina Andrade
;Motivo Alteracao: Ajustes ShowDialog, erro ao passar o campo MES.ANO.
;Ultima Alteracao: 06/12/2011 por Karina Andrade
;Motivo Alteracao: Add Codigo da Empresa RM_Repro(Inconsistencia)
;Ultima Alteracao: 06/12/2011 por Karina Andrade
;Motivo Alteracao: Retirado Tem_OFs_EmAberto() para SYS_CODIGO_CLIENTE="0055"
;Ultima Alteracao: 10/07/2012 por Karina Andrade
;Motivo Alteracao: Altera Data OF's em aberto para Mig Import
;Ultima Alteracao: 20/08/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes desprezar item notai cancelado
;Ultima Alteracao: 06/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloquear os usuarios usando sistema, mensagem de data maior que atual.
;Ultima Alteracao: 27/03/2013 por Kamila Gomes
;Motivo Alteracao: Ajustes Proc Tem_OFS_EmAberto() para todos os clientes
;Ultima Alteracao: 02/06/2013 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes inconsistencia nova fun‡Æo e report
;Ultima Alteracao: 03/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes transferencia de saldo, verifica item inativo e data inatividade
;Ultima Alteracao: 09/02/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes na proc Tem_OFs_EmAberto() onde havia uma "?" na MSG que foi alterado para "."
;Ultima Alteracao: 13/02/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes grava_erro, estrutura da tabela
;Ultima Alteracao: 19/03/2015 por Kamila Gomes
;Motivo Alteracao: Ajustes quando nÆo tem movimenta‡Æo no mes, mas tem que transferir o saldo
;                  proc AtualizaSaldo
;Ultima Alteracao: 28/08/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Consistencia de valores no mesmo dia
;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: 15/10/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data e custo da Ultima compra gravar dados
;Ultima Alteracao: 16/10/2015 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes em calculos NDecimal(Qtde*Custo,2) antes de subtrair/adicionar ao custo total atual

;Ultima Alteracao: 10/11/2015 por Bruno Carvalho
;Motivo Alteracao: Ajustes p/ quando saldo inicial do mˆs em processo for diferente do saldo final do mˆs anterior a este 
;Ultima Alteracao: 04/12/2015 por Andrey Fillipe
;Motivo Alteracao: Colocado o foco no NAO para transferencia para o proximo mes    
;Ultima Alteracao: 01/02/2016 por Bruno Carvalho
;Motivo Alteracao: Ajustado Monta_Dir_Trab() quando ‚ feito o Verifica_Mov(), p/ resgatar o primeiro dia do mˆs anterior e o ultimo dia do mˆs posterior    
;Ultima Alteracao: 03/02/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes verifica‡Æo de saldo inicial do mes com saldo atual mes anterior, cria ficha automaticamente sem mensagem INICIOU ZERADO
;Ultima Alteracao: 07/05/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado processo p/ reprocessamento automaticamente se saldo transferido p/ mˆs atual
;Ultima Alteracao: 06/06/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes verifica‡Æo de saldo inicial do mes com saldo atual mes anterior quanto nÆo tem reprocesamento automatico
;Ultima Alteracao: 01/08/2016 por Bruno Carvalho
;Motivo Alteracao: Adicionado na mensagem MES e ANO quanto nÆo correr movimenta‡Æo de entrada/saida conforme sele‡„o 
;Ultima Alteracao: 18/09/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog                   
;Ultima Alteracao: 28/12/2016 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes showdialog  
;Ultima Alteracao: 29/12/2016 por Rafael Matos
;Motivo Alteracao: Ajustes MensagemCheckBoxes()                 
;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: 18/01/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes "NAO USA 0239" pecas ! 
;Ultima Alteracao: 15/03/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes exclusÆo rotinas controle de pecas
;Ultima Alteracao: 11/07/2017 por Anivel Augusto Rodrigues
;Motivo Alteracao: inclusao Grava_Logt()
;Ultima Alteracao: 08/01/2018 por Bruno Carvalho
;Motivo Alteracao: Corre‡Æo da palavra imcompat¡veis -> incompat¡veis
;Ultima Alteracao: 31/01/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes preco de custo ao transferir saldos
;Ultima Alteracao: 13/03/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes preco de custo entrada por balan‡o 
;Ultima Alteracao: 07/06/2018 por Bruno Carvalho
;Motivo Alteracao: Adicionado/ajustado Grava_LogEx() 
;Ultima Alteracao: 15/10/2018 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Tem_OFs_EmAberto() 
;Ultima Alteracao: 06/02/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes seramento saldo diferen‡a centavos
;Ultima Alteracao: 11/05/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes Data da Ultima Saida, EstqPrm
;Ultima Alteracao: 23/10/2019 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes #0377 OFïS EM ABERTO MAS COM VALOR MERCADORIA>0, ITENS QTD SOLICITADA !
;Ultima Alteracao: 24/12/2019 por Bruno Carvalho
;Motivo Alteracao: Adicionado Bib_Proc
;Ultima Alteracao: 27/04/2020 por Bruno Carvalho
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 29/04/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Otimiza‡Æo na ASK p/ o campo [Tipo do Item] -> Ask_Estoque()
;Ultima Alteracao: 05/05/2020 por Bruno Carvalho
;Motivo Alteracao: Ajuste na proc, corre‡Æo no campo do [Tipo do Item] p/ filtrar os tipos "C or D or F or G or H or I"
;Ultima Alteracao: 30/07/2020 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes ask tipo do item nova fun‡Æo

;*******************************************************************************
;* Rotina p/ Verificar se existe Ofïs em aberto                                *
;*******************************************************************************
Proc Tem_OFs_EmAberto()
ClearAll

;*** Ordem de Fatura Saida /Faturamento ***                    
{Ask} {\\Sistemas\\Vendas\\FaturaC}
Moveto [Numero da OF             ] Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
Moveto [Data de Emissao          ] TypeIn "<=~VSDGDTFIM"
Moveto [Docto Nota Gerada        ] TypeIn "RPS.."
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then PROCESSAR_DADOS=False
        ALTERA_DATA=False  
        IMPRELOF=true
        
        MSG=    "Existe(m) ordem de faturamento em ABERTO,//"
        MSG=MSG+"RPS/NFSe nota servi‡o eletr“nicas, nÆo autorizada(s)!// //"
        MSG=MSG+"Verificar e corrigir lan‡amentos !// //"
        MSG=MSG+"Processo abortado!"
        Mensagem(MSG)
        return
EndIf

AGUARDE("Aguarde, verifcando OFïs em aberto")

;*** Ordem de Fatura Saida /Faturamento ***
{Ask} {\\Sistemas\\Vendas\\Destin}
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Atualiza Estoque         ] TypeIn "S"
{Ask} {\\Sistemas\\Vendas\\FaturaC}
Moveto [Numero da OF             ] Check
Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Data de Emissao          ] TypeIn "<=~VSDGDTFIM"
Moveto [Numero Nota Gerada       ] TypeIn "Blank"

switch
  case sys_codigo_cliente="0377" : Moveto [Valor Mercadoria] TypeIn ">0"
endswitch

Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then PROCESSAR_DADOS=False
        ALTERA_DATA=False  
        IMPRELOF=true
        
        MSG=   "Existe(m) ordem de faturamento em ABERTO, ou  seja, nÆo faturada(s)!// //"
        If (NumVal(Mes)+1)=13
           Then DTALT= DateVal("01.01"+"."+StrVal(NumVal(ANO)+1))
           Else DTALT= DateVal("01."+AlinhM(StrVal(NumVal(MES)+1),2)+"."+ANO)
        EndIf  
        
        If SYS_CODIGO_CLIENTE<>"0217" And
           SYS_CODIGO_CLIENTE<>"0228"    
           Then
             MSG1=MSG+"Ser  exibida a rela‡Æo desses lan‡amentos."+"//"
             Mensagem(MSG1)
             Play "Rm_0022"
        EndIf
        
        If IMPRELOF=True
           Then COR_MENSAGEM="ALERTA"
                ALINHA_TEXTO = True
                MSG1 = MSG +"A data de emissÆo/saida destes lan‡amentos ser  alterada para o"+"//"
                MSG1 = MSG1+Completa("primeiro dia do mˆs seguinte - "+StrVal(DTALT),63," ")+"//"
                ;MSG1 = MSG1+"O  estoque do mˆs seguinte tamb‚m dever  ser reprocessado  para"+"//"
                ;MSG1 = MSG1+Completa("corrigir os saldos.",63," ")+"//"
                MSG1 = MSG1+"Deseja continuar este processo ?"
                If ConfGeral(MSG1)
                   Then ALTERA_DATA=True
                        PROCESSAR_DADOS=True
                        ;*** Ordem de Fatura Saida /Faturamento ***
                        {Ask} {\\Sistemas\\Vendas\\Destin}
                        Moveto [Codigo da Destinacao     ] Example "destin"
                        Moveto [Atualiza Estoque         ] TypeIn "S"
                        {Ask} {\\Sistemas\\Vendas\\FaturaC}
                        Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
                        Moveto [Codigo da Destinacao     ] Example "destin"
                        Moveto [Data de Emissao          ] TypeIn "<=~VSDGDTFIM, changeto " TypeIn DTALT
                        Moveto [Data de Saida            ] TypeIn "changeto " TypeIn DTALT
                        Moveto [Numero Nota Gerada       ] TypeIn "Blank"
                        Do_It!
                        ClearAll
                        Mensagem("Data de emissÆo/saida referente a(s) ordem de faturamento //"
                                  +"em ABERTO, foram modificadas para "+StrVal(DTALT)+" !")
                 EndIf
        EndIf
        If Not ALTERA_DATA
          Then  
            MSG=MSG+"Observar:                                                           "+"//"
            MSG=MSG+"- quando realmente estas ordens serÆo faturadas.                    "+"//"
            MSG=MSG+"- estas ordens j  estÆo atualizando o saldo do estoque conforme  sua"+"//"
            MSG=MSG+"  data de emissÆo/saida.                                            "+"//"
            MSG=MSG+"- se vocˆ j  esta transferindo os saldos ‚ porque  as  mesmas  serÆo"+"//"
            MSG=MSG+"  faturadas no pr¢ximo mˆs ou elas deverÆo ser excluidas (Cancelar)."+"//"
            MSG=MSG+"- se as mesmas serÆo faturadas no mˆs seguinte, alterar  a  data  de"+"//"
            MSG=MSG+"  emissÆo/saida destes lan‡amentos para o pr¢ximo seguinte tamb‚m.  "+"//"
            MSG=MSG+"- caso as mesmas ainda sejam faturadas neste mˆs/ano referente, ap¢s"+"//"
            MSG=MSG+"  o seu faturamento, vocˆ ter  que reprocessar e transferir este mˆs"+"//"
            MSG=MSG+"  novamente, e  reprocessar o mˆs seguinte para corrigir os saldos. "+"// //"
            MSG=MSG+"Verificar e corrigir lan‡amentos !"
            Mensagem(MSG)
        EndIf  
EndIf

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

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

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

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

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

LimpAguarde()
EndProc    ; (Verifica_Mov)

;*******************************************************************************
; Grava erros                                                                  *
;*******************************************************************************
Proc Grava_Erro(empr,item,data,saldo,custo,msg)
Private empr,item,data,saldo,custo,msg,s,result

s=""
s=s+campodelimitado("A",empr)+","
s=s+campodelimitado("A",item)+","
If data<>BlankDate()
   Then s=s+campodelimitado("D",data)+","
   Else s=s+""+","
EndIf   
s=s+","
s=s+campodelimitado("S",msg)+","
s=s+","
s=s+campodelimitado("N",Saldo)+","
s=s+campodelimitado("$",Custo)+","
If saldo=BlankNum() And custo=BlankNum()
   Then result = BlankNum()
   Else result = NDecimal(custo/saldo,5)
EndIf
s=s+campodelimitado("$",result)+"\n"

If Not ENCONTRADO_INCONSISTENCIA
   Then FileWrite        PrivDir()+"Temperro.txt" From  s
   Else FileWrite Append PrivDir()+"Temperro.txt" From  s 
EndIf   

ENCONTRADO_INCONSISTENCIA=True
EndProc
                       
;*******************************************************************************
; Campos Delimitados                                                                 *
;*******************************************************************************
proc campodelimitado(tp,vr)
private tp, vr, s

switch
  case tp="A": s=chr(34)+vr+chr(34) 
  case tp="D": s=StrVal(day(vr))+"."+StrVal(month(vr))+"."+StrVal(year(vr)) 
  case substr(tp,1,1)="N" Or 
       substr(tp,1,1)="$" Or 
       substr(tp,1,1)="S":
               s=strval(vr) 
endswitch

return s
endproc

;*******************************************************************************
; Seleciona Notas Fiscais/Faturamento (Entrada/Saida)                          *
;*******************************************************************************
Proc Processa()
If wc=0
   Then AGUARDE("Aguarde, carregando movimentos de "+MES+"/"+ANO)
   Else AGUARDE("Aguarde, carregando transferˆncias de "+MES+"/"+ANO)
EndIf
Empty "Reproces"
ClearAll

PROCESSAR_DADOS=True

For i From 1 To CONT_REGRA
  ;*** Notas de Saida/Faturamento ***
  {Ask} {\\Sistemas\\Vendas\\Destin}
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Atualiza Estoque         ] TypeIn "S"
  {Ask} {\\Sistemas\\Vendas\\NotaC}
  Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Tipo do Documento        ] Example "tpdoc"
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Tipo Movimento Estoque   ] TypeIn "S"
  Moveto [Situacao                 ] TypeIn "Not C"  
  Switch
    Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
    Case REGRA_DATA_ESTOQUE = "Transicao" : If i=1
                                              Then Moveto [Data de Emissao] TypeIn "<~VSDGDTINI"
                                                   Moveto [Data de Saida  ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
                                              Else Moveto [Data de Emissao] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
                                            EndIf
    Case REGRA_DATA_ESTOQUE = "Nova"      : Moveto [Data de Emissao] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
  EndSwitch
  {Ask} {\\Sistemas\\Vendas\\NotaI}
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Item do Documento        ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
  Ask_EstoqueTpItem("NaoControlaEstoque")
  Moveto [Quantidade               ] Example "qtd"
  Moveto [Situacao_Item            ] TypeIn "Not C"
  {Ask} {Reproces} 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 [Tipo do Documento        ] Example "tpdoc"
  Moveto [Numero do Documento      ] Example "doc"  
  Do_It!
  ClearAll
Endfor                          

For i From 1 To CONT_REGRA
  ;*** Notas de Entrada/Faturamento ***
  {Ask} {\\Sistemas\\Vendas\\Destin}
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Atualiza Estoque         ] TypeIn "S"
  {Ask} {\\Sistemas\\Vendas\\NotaC}
  Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Tipo do Documento        ] Example "tpdoc"
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Descricao da Destinacao  ] TypeIn "Not ..DEVOL.., Not ..MANIF..,  Not ..CONSIG..,  Not ..REQUIS.., Not ..MOSTRUA.."
  Moveto [Tipo Movimento Estoque   ] TypeIn "E"
  Moveto [Situacao                 ] TypeIn "Not C"
  Switch
    Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
    Case REGRA_DATA_ESTOQUE = "Transicao" : If i=1
                                              Then Moveto [Data de Emissao] TypeIn "<~VSDGDTINI"
                                                   Moveto [Data de Saida  ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
                                              Else Moveto [Data de Emissao] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
                                            EndIf
    Case REGRA_DATA_ESTOQUE = "Nova"      : Moveto [Data de Emissao] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
  EndSwitch
  {Ask} {\\Sistemas\\Vendas\\NotaI}
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Item do Documento        ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
  Ask_EstoqueTpItem("NaoControlaEstoque")
  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"
  Moveto [Situacao_Item            ] TypeIn "Not C"
  {Ask} {Reproces} 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
EndFor

For i From 1 To CONT_REGRA
  ;*** Notas de Entrada/Faturamento DEVOLUCAO/MANIFESTO ***
  {Ask} {\\Sistemas\\Vendas\\Destin}
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Atualiza Estoque         ] TypeIn "S"
  {Ask} {\\Sistemas\\Vendas\\NotaC}
  Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Tipo do Documento        ] Example "tpdoc"
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Descricao da Destinacao  ] TypeIn "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.. Or ..MOSTRUA.."
  Moveto [Tipo Movimento Estoque   ] TypeIn "E"
  Moveto [Situacao                 ] TypeIn "Not C"       
  Switch
    Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
    Case REGRA_DATA_ESTOQUE = "Transicao" : If i=1
                                              Then Moveto [Data de Emissao] TypeIn "<~VSDGDTINI"
                                                   Moveto [Data de Saida  ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
                                              Else Moveto [Data de Emissao] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
                                            EndIf
    Case REGRA_DATA_ESTOQUE = "Nova"      : Moveto [Data de Emissao] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
  EndSwitch    
  {Ask} {\\Sistemas\\Vendas\\NotaI}
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Item do Documento        ] Example "seq"
  Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
  Ask_EstoqueTpItem("NaoControlaEstoque")
  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"
  Moveto [Situacao_Item            ] TypeIn "Not C"
  {Ask} {Reproces} 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

;*** Ordem de Fatura Saida /Faturamento ***
{Ask} {\\Sistemas\\Vendas\\Destin}
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Atualiza Estoque         ] TypeIn "S"
{Ask} {\\Sistemas\\Vendas\\FaturaC}
Moveto [Numero da OF             ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Data de Emissao          ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "S"
Moveto [Numero Nota Gerada       ] TypeIn "Blank"
{Ask} {\\Sistemas\\Vendas\\FaturaI}
Moveto [Numero da OF             ] Example "doc"
Moveto [Item da OF               ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
Moveto [Quantidade               ] Example "qtd"
{Ask} {Reproces} 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\\FaturaID")
   Then ;*** Ordem de Fatura Entrada/Troca ***
        {Ask} {\\Sistemas\\Vendas\\Destin}
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Atualiza Estoque         ] TypeIn "S"
        {Ask} {\\Sistemas\\Vendas\\FaturaC}
        Moveto [Numero da OF             ] Example "doc"
        Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
        Moveto [Codigo da Destinacao     ] Example "destin"
        Moveto [Descricao da Destinacao  ] TypeIn "..TROCA.."
        Moveto [Data de Emissao          ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
        Moveto [Tipo Movimento Estoque   ] TypeIn "S"
        Moveto [Numero Nota Gerada       ] TypeIn "Blank"
        {Ask} {\\Sistemas\\Vendas\\FaturaID}
        Moveto [Numero da OF             ] Example "doc"
        Moveto [Item da OF               ] Example "seq"
        Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
        Ask_EstoqueTpItem("NaoControlaEstoque")
        Moveto [Quantidade               ] Example "qtd"
        {Ask} {Reproces} 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 Fatura 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             ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
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          ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "E"
Moveto [Numero Nota Gerada       ] TypeIn "Blank"
{Ask} {\\Sistemas\\Vendas\\FaturaI}
Moveto [Numero da OF             ] Example "doc"
Moveto [Item da OF               ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
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} {Reproces} 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 Futura Entrada/Faturamento DEVOLUCAO/MANIFESTO ***
{Ask} {\\Sistemas\\Vendas\\Destin}
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Atualiza Estoque         ] TypeIn "S"
{Ask} {\\Sistemas\\Vendas\\FaturaC}
Moveto [Numero da OF             ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Descricao da Destinacao  ] TypeIn "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.. Or ..MOSTRUA.."
Moveto [Data de Emissao          ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "E"
Moveto [Numero Nota Gerada       ] TypeIn "Blank"
{Ask} {\\Sistemas\\Vendas\\FaturaI}
Moveto [Numero da OF             ] Example "doc"
Moveto [Item da OF               ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
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} {Reproces} 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

;*** Notas de Entrada/Estoque ***
{Ask} {NotaEC}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Data de Entrada          ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo de Operacao         ] Example "oper" TypeIn ", Not A, Not T, Not I"
Moveto [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"
{Ask} {NotaEI}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
Moveto [Quantidade               ] Example "qtd"
Moveto [Quantidade Convertida    ] Example "qtdcv"
Moveto [Custo Medio Unitario     ] Example "ctuni"
{Ask} {Reproces} 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

{Ask} {NotaEC}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Data de Entrada          ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo de Operacao         ] Example "oper" TypeIn ", T"
Moveto [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"
{Ask} {NotaEI}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
Moveto [Quantidade               ] Example "qtd"
Moveto [Quantidade Convertida    ] Example "qtdcv"
Moveto [Preco Unitario           ] Example "ctuni"
{Ask} {Reproces} 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

;*** Requisicoes/Estoque ***
{Ask} {RqCabeca}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Data de Ocorrencia       ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo de Movimento        ] Example "mov"
Moveto [Tipo de Operacao         ] Example "oper" 
Moveto [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"                
{Ask} {RqItem}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
Moveto [Quantidade               ] Example "qtd"
Moveto [Custo Unitario           ] Example "ctuni"
Moveto [Custo Total              ] Example "cttot"
{Ask} {Reproces} 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 [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"
Moveto [Valor Unitario           ] Example "ctuni"
Moveto [Valor Total              ] Example "cttot"
Do_It!
ClearAll

{Ask} {RqCabeca}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Data de Ocorrencia       ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo de Movimento        ] Example "mov" TypeIn ", E"
Moveto [Tipo de Operacao         ] Example "oper" TypeIn ", P Or I"
Moveto [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"
{Ask} {RqMatPri}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Item        ] Example "seq"
Moveto [Sequencia Materia Prima  ] Example "seqm"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
Moveto [Quantidade               ] Example "qtd"
Moveto [Custo Unitario           ] Example "ctuni"
Moveto [Custo Total              ] Example "cttot"
{Ask} {Reproces} 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 [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"
Moveto [Valor Unitario           ] Example "ctuni"
Moveto [Valor Total              ] Example "cttot"
Do_It!
ClearAll

{Ask} {RqCabeca}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Codigo                   ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Data de Ocorrencia       ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo de Movimento        ] Example "mov" TypeIn ", S"
Moveto [Tipo de Operacao         ] Example "oper" TypeIn ", T"       
Moveto [Numero do Documento      ] Example "ndoc"
Moveto [Tipo do Documento        ] Example "tpdoc"
{Ask} {RqItem}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Ask_EstoqueTpItem("NaoControlaEstoque")
Moveto [Quantidade               ] Example "qtd"
Moveto [Custo Unitario           ] Example "ctuni"
Moveto [Custo Total              ] Example "cttot"
{Ask} {Reproces} 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 [Tipo do Documento        ] Example "tpdoc"
Moveto [Numero do Documento      ] Example "ndoc"
Moveto [Valor Unitario           ] Example "ctuni"
Moveto [Valor Total              ] Example "cttot"
Do_It!
ClearAll

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

{Ask} {Reproces} TypeIn "Fast"
Moveto [Tabela                   ] TypeIn "RQITEM"
Moveto [Numero do Documento      ] TypeIn "BALANCO"
Moveto [Ordem Balanco            ] TypeIn "Changeto 2"
Do_It!
ClearAll
     
;----------------------------------------------------------------------------------------------------------
AGUARDE("Aguarde, carregando estoque inicial de "+MES+"/"+ANO)

{Ask} {SdEstq} Check
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia        ] TypeIn "~ANO"
Moveto [Mes Referencia        ] TypeIn "~MES"
Do_It!
ClearAll

View NOWINDOW "Answer" CoEditKey
NR = NRecords("Answer")
Scan

  Barra(NR, RecNo())
  Aguarde("Aguarde, carregando estoque inicial de "+MES+"/"+ANO+" "+BARRA_STRING)

  If [Saldo Inicial]=0 And ([Custo Total Inicial]>=-0.03 And [Custo Total Inicial]<=0.03)
     Then [Custo Total Inicial]=0
  EndIf

  If IsBlank([Saldo Inicial      ]) Then [Saldo Inicial      ]=0 EndIf
  If IsBlank([Custo Total Inicial]) Then [Custo Total Inicial]=0 EndIf

  [Saldo Inicial         ]=NDecimal([Saldo Inicial       ],3)
  [Custo Total Inicial   ]=NDecimal([Custo Total Inicial ],2)
  [Ultimo Custo Inicial  ]=NDecimal([Ultimo Custo Inicial],5)

  [Saldo Atual           ]=[Saldo Inicial       ]
  [Custo Total Atual     ]=[Custo Total Inicial ]
  [Ultimo Custo Atual    ]=[Ultimo Custo Inicial]
  
  [Situacao              ]=""

  ;---- Consiste irregularidades no inventario ---------------------------------
  If Not IsBlank([Saldo Atual]) Or
     Not IsBlank([Custo Total Atual])
     Then 
          MSG_ERRO=""
          Switch
            Case [Saldo Atual      ]<0      : MSG_ERRO="SALDO INICIAL NEGATIVO"

            Case [Custo Total Atual]< 0     : MSG_ERRO="CUSTO INICIAL NEGATIVO"
            
            Case [Saldo Atual      ]> 0 And 
                 [Custo Total Atual]<=0     : MSG_ERRO="CUSTO INICIAL INVALIDO E COM SALDO"
                                                                                                  
            Case [Custo Total Atual]> 0 And 
                 [Saldo Atual      ]<=0     : MSG_ERRO="SALDO INICIAL INVALIDO E COM CUSTO"
     
          EndSwitch
          If MSG_ERRO<>""
             Then Grava_Erro([Answer->Codigo da Empresa], [Answer->Codigo do Item], VSDGDTINI, [Saldo Atual], [Custo Total Atual], MSG_ERRO)
          EndIf   
  EndIf
  ;-----------------------------------------------------------------------------
EndScan
Do_It!
ClearAll

Add "Answer" "Sdestq"
ClearAll          
 
LimpAguarde()
If IsEmpty("Reproces")
   Then Processa2()
        Mensagem("N„o existe movimenta‡oes de entrada/saida conforme sele‡„o em "+AlinhM(MES,2)+"."+ANO+" !//Verificar Ok !")

        PROCESSAR_DADOS=False
        Return
Endif

AGUARDE("Aguarde, calculando estoque de "+MES+"/"+ANO)

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

CoEdit "Reproces"
PickForm "F"
NR = NRecords("Reproces")

COD_EMPRESA="***"
COD_ITEM   ="***"
DAT_MOV    ="***"
ERR_DIA    =""
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, calculando estoque de "+MES+"/"+ANO+" "+BARRA_STRING)

   CUSTO=0
   If [Codigo da Empresa] <> COD_EMPRESA Or
      [Codigo do Item   ] <> COD_ITEM
      Then 
           COD_EMPRESA  = [Reproces->Codigo da Empresa]
           COD_ITEM     = [Reproces->Codigo do Item   ]
           DAT_MOV      = "***"
           ERR_DIA      ="" 

           Moveto "SdEstq"
           Moveto [Codigo da Empresa]
           Locate [Reproces->Codigo da Empresa],
                  [Reproces->Codigo do Item   ],
                  ALINHM(StrVal( Year([Reproces->Data do Movimento])),4),
                  ALINHM(StrVal(Month([Reproces->Data do Movimento])),2)
           If Not RetVal
              Then If Not Cria_Ficha([Reproces->Codigo da Empresa],[Reproces->Codigo do Item],False)
                      Then PROCESSAR_DADOS=False
                           Do_It!
                           ClearAll
                           Return
                   EndIf
           EndIf
   EndIf

   reprocesvr_novo=False
   Moveto "SdEstq"
   Switch                                                        
     Case [Reproces->Tipo do Movimento]="E":
          If [Reproces->Tipo de Operacao]="D"
             Then CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
                  If CUSTO=0 Or IsBlank(CUSTO)
                     Then CUSTO=[Ultimo Custo Atual]
                  EndIf
                  [Saldo Atual      ]=NDecimal([Saldo Atual      ]+[Reproces->Quantidade ],3)
                  [Custo Total Atual]=NDecimal([Custo Total Atual]+(NDecimal([Reproces->Quantidade]*CUSTO,2)),2) ; ajustado em 16/10/2015
             Else If [Reproces->Tabela]="RQITEM" and [Reproces->Tipo do Movimento]="E" and [Reproces->Tipo de Operacao]="P"
                     Then 
										      If ([Reproces->Valor Total]=0 Or IsBlank([Reproces->Valor Total])) And 
													   ([Custo Total Atual    ]=0 Or IsBlank([Custo Total Atual    ])) And 
														 [Ultimo Custo Atual]>0
                             Then Moveto "Reproces" 
                                  [Reproces->Valor Unitario]=[SdEstq->Ultimo Custo Atual]
                                  [Reproces->Valor Total   ]=NDecimal([Reproces->Quantidade ]*[Reproces->Valor Unitario],2)
                                  reprocesvr_novo=True
                                  Moveto "SdEstq" 
                          EndIf   

										      If ([Reproces->Valor Total]=0 Or IsBlank([Reproces->Valor Total])) And 
													   ([Custo Total Atual    ]=0 Or ISBlank([Custo Total Atual    ])) And
														 ([Ultimo Custo Atual   ]=0 Or IsBlank([Ultimo Custo Atual   ])) And 
														 [Preco de Custo]>0
                             Then Moveto "Reproces" 
                                  [Reproces->Valor Unitario]=[SdEstq->Preco de Custo]
                                  [Reproces->Valor Total   ]=NDecimal([Reproces->Quantidade ]*[Reproces->Valor Unitario],2)
                                  reprocesvr_novo=True
                                  Moveto "SdEstq" 
                          EndIf   

                  EndIf                
             
                  [Saldo Atual      ]=NDecimal([Saldo Atual      ]+[Reproces->Quantidade ],3)
                  [Custo Total Atual]=NDecimal([Custo Total Atual]+[Reproces->Valor Total],2)

                  If [Reproces->Tipo de Operacao]="C" Or [Reproces->Tipo de Operacao]="T"
                     Then [Data do Preco de Custo]=[Reproces->Data do Movimento]
                          [Preco de Custo        ]=NDecimal([Reproces->Valor Total]/[Reproces->Quantidade],5)
                  EndIf
                  
                  If [Reproces->Tipo de Operacao]="E" And [Reproces->Numero do Documento   ]="BALANCO"
                     Then [Data do Preco de Custo]=[Reproces->Data do Movimento]
                          [Preco de Custo        ]=NDecimal([Reproces->Valor Total]/[Reproces->Quantidade],5)
                  EndIf
                  
          EndIf
     Case [Reproces->Tipo do Movimento]="S":
          CUSTO=NDecimal([Custo Total Atual]/[Saldo Atual],5)
          If CUSTO=0 Or IsBlank(CUSTO)
             Then CUSTO=[Ultimo Custo Atual]
          EndIf
          If [Reproces->Tabela]="RQITEM" And [Reproces->Tipo de Operacao]="O"
             Then [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[Reproces->Quantidade ],3)
                  [Custo Total Atual]=NDecimal([Custo Total Atual]-[Reproces->Valor Total],2)
             Else [Saldo Atual      ]=NDecimal([Saldo Atual      ]-[Reproces->Quantidade ],3)
                  If [Saldo Atual]=0
                     Then [Custo Total Atual] = 0
                     Else [Custo Total Atual]=NDecimal([Custo Total Atual]-(NDecimal([Reproces->Quantidade]*CUSTO,2)),2) ; ajustado em 16/10/2015
                  EndIf   
          EndIf         

          While True
            Moveto "\\Sistemas\\Estoque\\EstqPrm"
            Moveto [Codigo da Empresa]
            Locate [Reproces->Codigo da Empresa],[Reproces->Codigo do Item]
            If Not RetVal
               Then End Down
                    [Codigo da Empresa   ]=[Reproces->Codigo da Empresa]
                    [Codigo do Item      ]=[Reproces->Codigo do Item   ]
                    If IsLockRecord()
                       Then Del
                       Else QuitLoop
                    EndIf
               Else If Not IsLockRecord()
                       Then QuitLoop
                    EndIf
            EndIf        
          EndWhile
          [Data da Ultima Saida]=[Reproces->Data do Movimento]
          UnLockRecord
          
          Moveto "SdEstq"
   EndSwitch

   If [Saldo Atual]=0 And ([Custo Total Atual]>=-0.15 And [Custo Total Atual]<=0.15)
      Then [Custo Total Atual]=0
   EndIf

   If ([Custo Total Atual]/[Saldo Atual])>0
      Then [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
   EndIf
   UnLockRecord

  ;---- Consiste irregularidades no inventario ------------------------------------------------------------
  If Not IsBlank([Saldo Atual]) Or 
     Not IsBlank([Custo Total Atual])
     Then 
          If [Reproces->Data do Movimento]<>DAT_MOV
             Then DAT_MOV = [Reproces->Data do Movimento]
                  ERR_DIA      =""
          EndIf   
                  
          MSG_ERRO="" 
          Switch
             Case [Saldo Atual      ]<0  And Search("1",ERR_DIA)=0    : 
               MSG_ERRO="SALDO FICOU NEGATIVO"
               ERR_DIA=ERR_DIA+"1"
   
             Case [Custo Total Atual]< 0 And Search("2",ERR_DIA)=0    : 
               MSG_ERRO="CUSTO FICOU NEGATIVO"
               ERR_DIA=ERR_DIA+"2"
            
             Case [Saldo Atual      ]> 0 And 
                  [Custo Total Atual]<=0 And Search("3",ERR_DIA)=0    : 
               MSG_ERRO="CUSTO FICOU INVALIDO E COM SALDO"
               ERR_DIA=ERR_DIA+"3"
   
             Case [Custo Total Atual]> 0 And 
                  [Saldo Atual      ]<=0 And Search("4",ERR_DIA)=0    : 
               MSG_ERRO="SALDO FICOU INVALIDO E COM CUSTO"
               ERR_DIA=ERR_DIA+"4"
     
           EndSwitch
           If MSG_ERRO<>""
              Then 
              Grava_Erro([Reproces->Codigo da Empresa],[Reproces->Codigo do Item], [Reproces->Data do Movimento], [Saldo Atual], [Custo Total Atual], MSG_ERRO)
           EndIf   
   EndIf
   ;--------------------------------------------------------------------------------------------------------

   Switch
     Case [Reproces->Tabela]="RQITEM" and [Reproces->Tipo do Movimento]="S" and
          [Reproces->Tipo de Operacao]<>"O":
          Moveto "RqItem"
          If Not RecordStatus("New")
             Then [Custo Unitario]=CUSTO
                  [Custo Total   ]=NDecimal([Quantidade]*CUSTO,2)
                  UnLockRecord
          EndIf
     Case [Reproces->Tabela]="RQITEM" and reprocesvr_novo=True:
          Moveto "RqItem"
          If Not RecordStatus("New")
             Then [Custo Unitario]=[Reproces->Valor Unitario]
                  [Custo Total   ]=[Reproces->Valor Total   ]
                  UnLockRecord
          EndIf     
     Case [Reproces->Tabela]="RQMATPRI" and [Reproces->Tipo do Movimento]="S":
          Moveto "RqMatPri"
          If Not RecordStatus("New")
             Then [Custo Unitario]=CUSTO
                  [Custo Total   ]=NDecimal([Quantidade]*CUSTO,2)
                  UnLockRecord
          EndIf
     Case [Reproces->Tabela]="NOTAI":
          If [Reproces->Tipo do Movimento]="S" Or
             [Reproces->Tipo de Operacao]="D"
             Then Moveto "\\Sistemas\\Vendas\\NotaI"
                  If Not RecordStatus("New")
                     Then [Custo Medio Unitario]=CUSTO
                          UnLockRecord
                  EndIf
          EndIf
     Case [Reproces->Tabela]="FATURAI":
          If [Reproces->Tipo do Movimento]="S" Or
             [Reproces->Tipo de Operacao]="D"
             Then Moveto "\\Sistemas\\Vendas\\FaturaI"
                  If Not RecordStatus("New")
                     Then [Custo Medio Unitario]=CUSTO
                          UnLockRecord
                  EndIf
          EndIf
     Case [Reproces->Tabela]="FATURAID":
          If [Reproces->Tipo do Movimento]="E"
             Then Moveto "\\Sistemas\\Vendas\\FaturaID"
                  If Not RecordStatus("New")
                     Then [Custo Medio Unitario]=CUSTO
                          UnLockRecord
                  EndIf
          EndIf
     Case [Reproces->Tabela]="NOTAEI": 
          Moveto "\\Sistemas\\Estoque\\Notaei"
          If Not RecordStatus("New")
             Then If [Reproces->Tipo de Operacao]="D"
                     Then [Custo Medio Unitario]= NDecimal(NDecimal(CUSTO * [Quantidade Convertida],2)/[Quantidade],5)
                  EndIf
                  UnLockRecord
          EndIf
   EndSwitch

   Moveto "Reproces"

EndScan
Do_It!
ClearAll
Empty ("Reproces")

Processa2()

LimpAguarde()
EndProc  ; (Processa)

;*******************************************************************************
; Complemento do Processa()                                                    *
;*******************************************************************************
Proc Processa2()

;-- Rotina obrigatoria para atualizar saldos novo mes --------------------------
AGUARDE("Aguarde, verifica‡äes")
{Ask} {SdEstq} Check
Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item   ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia   ] TypeIn "~ANO"
Moveto [Mes Referencia   ] TypeIn "~MES"
Do_It!
ClearAll

Empty(Tabela_Sdestq_Temp)
Add "Answer" Tabela_Sdestq_Temp
ClearAll

;-- Itens nÆo cadastrados ------------------------------------------------------
AGUARDE("Aguarde, verificando itens nÆo cadastrados")
{Ask} TypeIn Tabela_Sdestq_Temp Enter 
Moveto [Codigo do Item        ] Check
Do_It!
ClearAll

Tabelainc=Cria_Temp(PrivDir())
Rename "Answer" Tabelainc
ClearAll

{Modify} {Restructure} TypeIn Tabelainc Enter Right Right  " " ; indexando arquivo 
Do_It! 
ClearAll 

{Ask} {Itens}
Moveto [Codigo do Item        ] Check 
Do_It!
ClearAll

Subtract "Answer" Tabelainc 

{Ask} TypeIn Tabelainc Enter 
Moveto [Codigo do Item        ] TypeIn "_it"
{Ask} TypeIn Tabela_Sdestq_Temp Enter Check
Moveto [Codigo do Item        ] TypeIn "_it"
Do_It!
ClearAll

View NOWINDOW "Answer"
Scan
   MSG_ERRO="ITEM NAO CADASTRADO"
   Grava_Erro([Answer->Codigo da Empresa], [Answer->Codigo do Item], VSDGDTINI, [Answer->Saldo Atual], [Answer->Custo Total Atual], MSG_ERRO)
EndScan
ClearAll

Delete Tabelainc

;-- Itens que nÆo controla estoque ---------------------------------------------
AGUARDE("Aguarde, verificando itens que nÆo controlam estoque")
{Ask} {Itens}
Moveto [Codigo do Item        ] TypeIn "_it"
Moveto [Tipo do Item          ] TypeIn "C or D or F or G or H or I"
{Ask} TypeIn Tabela_Sdestq_Temp Enter Check
Moveto [Codigo do Item        ] TypeIn "_it"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then
        View NOWINDOW "Answer" EditKey
        Scan
           [Situacao]="S" ;nÆo gera mais ficha de estoque para o item que nÆo controla estoque
        
           MSG_ERRO="TIPO DE ITEM QUE NAO CONTROLA ESTOQUE"
           Grava_Erro([Answer->Codigo da Empresa], [Answer->Codigo do Item], VSDGDTINI, [Answer->Saldo Atual], [Answer->Custo Total Atual], MSG_ERRO)
        EndScan
        Do_It!
        ClearAll

        {Ask} {Answer} Check                 
        Moveto [Situacao              ] TypeIn "S"
        Do_It!
        ClearAll
        
        Add "Answer" Tabela_Sdestq_Temp ; atualiza sdestq com itens que nÆo controla estoque
        ClearAll
EndIf

;-- Itens Inativados -----------------------------------------------------------
AGUARDE("Aguarde, verificando itens inativados em "+MES+"/"+ANO)
{Ask} {Itens}
Moveto [Codigo do Item       ] TypeIn "_it"
Moveto [Inativo              ] TypeIn "S"
{Ask} TypeIn Tabela_Sdestq_Temp Enter Check
Moveto [Codigo do Item        ] TypeIn "_it"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then
        View NOWINDOW "EstqPrm"
        View NOWINDOW "Answer" EditKey
        Scan
        
           MesItemInativado=False 
           Moveto "EstqPrm"
           Moveto [Codigo da Empresa]
           Locate [Answer->Codigo da Empresa],
                  [Answer->Codigo do Item   ]
           If RetVal
              Then If Not IsBlank([Data de Inatividade])
                      Then If AlinhM(StrVal(Month([Data de Inatividade])),2)=MES And
                              AlinhM(StrVal(Year([Data de Inatividade ])),4)=ANO
                              Then MesItemInativado=True
                           EndIf
                   EndIf
           EndIf
           
           Moveto "Answer"
           If MesItemInativado 
              Then If [Saldo Atual]=0 And [Custo Total Atual]=0
                      Then [Situacao]="I" ;nÆo gera mais ficha de estoque para o item inativado sem estoque
                      Else
                           MSG_ERRO="ITEM INATIVADO COM VALORES"
                           Grava_Erro([Answer->Codigo da Empresa], [Answer->Codigo do Item], VSDGDTFIM, [Answer->Saldo Atual], [Answer->Custo Total Atual], MSG_ERRO)
                   EndIf   
           EndIf   
        
        EndScan
        Do_It!
        ClearAll
        
        {Ask} {Answer} Check                 
        Moveto [Situacao              ] TypeIn "I"
        Do_It!
        ClearAll
        
        Add "Answer" Tabela_Sdestq_Temp ; atualiza sdestq com itens inativados
        ClearAll
EndIf

;-- Itens Com saldo Inicial do mes <> Saldo atual mes anterior -----------------
if not REPROCESSO_AUTOMATICO
   then
        AGUARDE("Aguarde, verifica‡Æo de saldos")
        {Ask} {SdEstq} Check
        Moveto [Codigo da Empresa] TypeIn "~VSDGEMPRESA.."
        Moveto [Codigo do Item   ] TypeIn "~VSDGITEM.."
        Moveto [Ano Referencia   ] TypeIn "~ANO"
        Moveto [Mes Referencia   ] TypeIn "~MES"
        Do_It!
        ClearAll
        
        {Ask} {Sdestq} 
        Moveto [Codigo da Empresa  ] TypeIn "_Emp"
        Moveto [Codigo do Item     ] TypeIn "_Item"
        Moveto [Ano Referencia     ] TypeIn ANO_ANTERIOR
        Moveto [Mes Referencia     ] TypeIn MES_ANTERIOR
        Moveto [Saldo Atual        ] Check TypeIn "_Saldo"
        Moveto [Custo Total Atual  ] Check
        {Ask} {Answer}  
        Moveto [Codigo da Empresa  ] Check TypeIn "_Emp"
        Moveto [Codigo do Item     ] Check TypeIn "_Item"
        Moveto [Saldo Inicial      ] Check TypeIn "Not _Saldo"
        Moveto [Custo Total Inicial] Check
        Do_it!  
        ClearAll
        
        If Not IsEmpty("Answer")
           Then Coedit "Answer"
                Scan
                  MSG_ERRO = Completa("SALDO INICIAL "+MES+"."+ANO+" "+Format("W10.2",[Saldo Inicial]),36," ")+
                             Completa("DIFERENTE DO MES ANTERIOR",36," ")+
                             Completa("SALDO FINAL   "+MES_ANTERIOR+"."+ANO_ANTERIOR+" "+Format("W10.2",[Saldo Atual]),36," ")
                             
                  Grava_Erro([Codigo da Empresa],[Codigo do Item],BlankDate(),[Saldo Inicial],[Custo Total Inicial],MSG_ERRO)                                                                                                                                                               
                EndScan
                Do_It!               
                ClearAll                 
        EndIf    
EndIf    
  
LimpAguarde()
EndProc

;*******************************************************************************
;* Reprocessamento das Transferencias                                          *
;*******************************************************************************
Proc Transferencia()
ClearAll

If Not PROCESSAR_DADOS
   Then Return
EndIf

AGUARDE("Aguarde, carregando entradas por transferˆncia de "+MES+"/"+ANO)

Tab_Transf=Cria_Temp(PrivDir())
For i From 1 To CONT_REGRA
  ;*** Notas de Transferencia/Faturamento ***
  {Ask} {\\Sistemas\\Vendas\\Destin}
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Atualiza Estoque         ] TypeIn "S"
  {Ask} {\\Sistemas\\Vendas\\NotaC}
  Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Codigo da Destinacao     ] Example "destin"
  Moveto [Descricao da Destinacao  ] TypeIn "..TRANSF.."
  Moveto [Valor Nota Fiscal        ] Check
  Moveto [Codigo                   ] Check
  Moveto [Tipo                     ] TypeIn "E"
  Moveto [Tipo Movimento Estoque   ] TypeIn "S"
  Moveto [Situacao                 ] TypeIn "Not C"
  Switch
    Case REGRA_DATA_ESTOQUE = "Antiga"    : Moveto [Data de Saida] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
    Case REGRA_DATA_ESTOQUE = "Transicao" : If i=1
                                              Then Moveto [Data de Emissao] TypeIn "<~VSDGDTINI"
                                                   Moveto [Data de Saida  ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
                                              Else Moveto [Data de Emissao] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM ,as Data de Saida"
                                            EndIf
    Case REGRA_DATA_ESTOQUE = "Nova"      : Moveto [Data de Emissao] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM ,as Data de Saida"
  EndSwitch 
  {Ask} {\\Sistemas\\Vendas\\NotaI} Check
  Moveto [Codigo da Empresa        ] Example "emp"
  Moveto [Numero do Documento      ] Example "doc"
  Moveto [Serie do Documento       ] Example "ser"
  Moveto [Codigo do Item           ] TypeIn "~VSDGITEM.., Not Blank"
  Ask_EstoqueTpItem("NaoControlaEstoque")
  Moveto [Situacao_Item            ] TypeIn "Not C"
  Do_It!
  ClearAll
  
  If i=1
     Then Copy "Answer" Tab_Transf
     Else Add "Answer" Tab_Transf
  EndIf
EndFor 
Copy Tab_Transf "Answer"
Delete Tab_Transf

If IsEmpty("Answer")
   Then Return
EndIf

View "\\Sistemas\\Estoque\\NotaEC"
View "\\Sistemas\\Estoque\\NotaEI"
Coedit "Answer"
NR = NRecords("Answer")
EMPANT="****"
DOCANT="******"
SERANT="****"
Scan
   Barra(NR, RecNo())
   Aguarde("Aguarde, processando entradas/transf. de "+MES+"/"+ANO+" "+BARRA_STRING)

   If [Codigo da Empresa  ]<>EMPANT Or
      [Numero do Documento]<>DOCANT Or
      [Serie do Documento ]<>SERANT
      Then  ATUALIZAR=False
            Moveto "\\Sistemas\\Estoque\\NotaEC"
            Moveto [Codigo]
            Locate IndexOrder By "NotaEC01" [Answer->Codigo da Empresa],
                   [Answer->Numero do Documento], [Answer->Serie do Documento]
            If Not RetVal
               Then  Moveto "Answer"
                     Loop
            EndIf

            If [\Sistemas\Estoque\Notaec->Data de Entrada]<>[Answer->Data de Saida] Or
               [\Sistemas\Estoque\Notaec->Valor Nota Fiscal]<>[Answer->Valor Nota Fiscal]
               Then  Moveto "Answer"
                     Loop
            EndIf

            EMPANT=[Answer->Codigo da Empresa]
            DOCANT=[Answer->Numero do Documento]
            SERANT=[Answer->Serie do Documento]
            ATUALIZAR=True
   EndIf

   If Not ATUALIZAR
      Then Loop
   Endif

   Moveto "\\Sistemas\\Estoque\\Notaei"
   Locate [\Sistemas\Estoque\Notaec->Numero do Lancamento], [Answer->Item do Documento]
   If Not RetVal
      Then  Moveto "Answer"
            Loop
   EndIf

   If [Codigo do Item]<>[Answer->Codigo do Item] Or
      [Quantidade    ]<>[Answer->Quantidade    ] Or
      [Preco Unitario]<>[Answer->Preco Unitario]
      Then  Moveto "Answer"
            Loop
   EndIf

   [Custo Medio Unitario]=[Answer->Preco Unitario]
   ;;[Custo Medio Unitario]=[Answer->Custo Medio Unitario]

   Moveto "Answer"

EndScan
Do_It!
ClearAll

Processa()

EndProc    ; (Transferencia)

;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_Ficha(ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA)
Private ESTQ_EMPRESA,ESTQ_ITEM,ESTQ_CONFIRMA,ESTQ_ANO,ESTQ_MES

ESTQ_MES=ALINHM(StrVal(Month([Reproces->Data do Movimento])),2)
ESTQ_ANO=ALINHM(StrVal(Year([Reproces->Data do Movimento])),4)

MSG="N„o foi encontrada a ficha de estoque referente a "+ESTQ_MES+"/"+ESTQ_ANO+" !// //"
MSG=MSG+Format("W08,AL","Empresa")   +"| "+Format("W11,AL","Item")   +"//"
MSG=MSG+Format("W08,AL",ESTQ_EMPRESA)+"| "+Format("W11,AL",ESTQ_ITEM)+"//"
MSG=MSG+"Observacoes:                                                           //"
MSG=MSG+"1. Talvez n„o foi executada a transferˆncia de saldos do mes anterior; //"
If ESTQ_CONFIRMA
   Then MSG=MSG+"2. Se for criada agora o saldo inicial deste item ser  igual a 0.      //"
        MSG=MSG+"3. Sim = Cria a ficha e continua, N„o = Aborta opera‡„o               //"
        MSG=MSG+"// "
        MSG=MSG+"Deseja cria-la agora e continuar ?"
        ConfGeral(MSG)
        If OK="N"
           Then Return False
        EndIf
   Else ;MSG=MSG+"2. A ficha do item ser  criada com o saldo inicial igual a 0.          //"
        ;Mensagem(MSG)

        ;MSG_ERRO="ITEM INICIOU ZERADO"
        ;Grava_Erro(ESTQ_EMPRESA, ESTQ_ITEM, VSDGDTINI, 0, 0, MSG_ERRO)
EndIf

Moveto "EstqPrm"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM
  If Not RetVal
     Then End Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Moveto "SdEstq"
While True
  Moveto [Codigo da Empresa]
  Locate ESTQ_EMPRESA, ESTQ_ITEM, ESTQ_ANO, ESTQ_MES
  If Not RetVal
     Then End Down Down
          [Codigo da Empresa   ]=ESTQ_EMPRESA
          [Codigo do Item      ]=ESTQ_ITEM
          [Ano Referencia      ]=ESTQ_ANO
          [Mes Referencia      ]=ESTQ_MES
          [Saldo Inicial       ]=0
          [Custo Total Inicial ]=0
          [Saldo Atual         ]=0
          [Custo Total Atual   ]=0
          If IsLockRecord()
             Then Del
             Else UnLockRecord
          EndIf
          Loop
  EndIf
  QuitLoop
EndWhile

Return True
EndProc  ; (Cria_Ficha)

;*******************************************************************************
; SaldoCont                                                                    *
;*******************************************************************************
Proc ATUALIZASALDOS()
private tabeladel

ClearAll

If IsEmpty(Tabela_Sdestq_Temp)
   Then Mensagem("Mˆs sem saldos p/ transferir !")
        Return
EndIf

Aguarde("Aguarde, transferindo estoque de "+MES+"/"+ANO+" para "+MESREF+"/"+ANOREF)

{Ask} {SdEstq} TypeIn "Delete"
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia        ] TypeIn "~ANOREF"
Moveto [Mes Referencia        ] TypeIn "~MESREF"
Do_It!
ClearAll

tabeladel=Cria_Temp(PrivDir())
Rename "Deleted" tabeladel
ClearAll

{Ask} TypeIn Tabela_Sdestq_Temp Enter TypeIn "Fast"
Moveto [Ano Referencia        ] TypeIn "Changeto ~ANOREF"
Moveto [Mes Referencia        ] TypeIn "Changeto ~MESREF"
Moveto [Saldo Atual           ] TypeIn "_sd"
Moveto [Custo Total Atual     ] TypeIn "_ctd"
Moveto [Ultimo Custo Atual    ] TypeIn "_uct"
Moveto [Saldo Inicial         ] TypeIn "Changeto _sd"
Moveto [Custo Total Inicial   ] TypeIn "Changeto _ctd"
Moveto [Ultimo Custo Inicial  ] TypeIn "Changeto _uct"
Do_It!
ClearAll

;-- Itens que nÆo controla estoque ---------------------------------------------
{Ask} TypeIn Tabela_Sdestq_Temp Enter Check
Moveto [Situacao              ] TypeIn "S"
Do_It!
ClearAll

SubTract "Answer" Tabela_Sdestq_Temp
ClearAll


;-- Itens Inativados -----------------------------------------------------------
{Ask} TypeIn Tabela_Sdestq_Temp Enter Check
Moveto [Situacao              ] TypeIn "I"
Do_It!
ClearAll

SubTract "Answer" Tabela_Sdestq_Temp
ClearAll

;-- Atualiza sdestq novo mes/ano -----------------------------------------------
Add Tabela_Sdestq_Temp "Sdestq"
ClearAll

if not isempty(TabelaDel)
   then
 
        {Ask} TypeIn Tabeladel Enter TypeIn "Fast Delete"
        moveto [Data do Preco de Custo] TypeIn "blank"
        Do_It!
        ClearAll
        
        {Ask} TypeIn Tabeladel Enter TypeIn "Fast Delete"
        moveto [Preco de Custo        ] TypeIn "<=0"
        Do_It!
        ClearAll
        
        Adiciona_Indice(tabeladel,"Codigo da Empresa,Codigo do Item,Ano Referencia,Mes Referencia")
        ClearAll
        
        {Ask} TypeIn Tabeladel Enter
        Moveto [Codigo da Empresa     ] TypeIn "_cemp"
        Moveto [Codigo do Item        ] TypeIn "_cite"
        Moveto [Ano Referencia        ] TypeIn "_ano"
        Moveto [Mes Referencia        ] TypeIn "_mes"
        moveto [Data do Preco de Custo] TypeIn "_dtpc"
        moveto [Preco de Custo        ] TypeIn "_pc"
        {Ask} {Sdestq} TypeIn "Fast"
        Moveto [Codigo da Empresa     ] TypeIn "_cemp"
        Moveto [Codigo do Item        ] TypeIn "_cite"
        Moveto [Ano Referencia        ] TypeIn "_ano"
        Moveto [Mes Referencia        ] TypeIn "_mes"
        moveto [Data do Preco de Custo] TypeIn "<_dtpc, changeto _dtpc"
        moveto [Preco de Custo        ] TypeIn "changeto _pc"
        Do_It!
        ClearAll
endif

delete tabeladel

LimpAguarde()
EndProc

;*******************************************************************************
;* Rotina Bloqueia Tabelas da Pasta                                            *
;*******************************************************************************
Proc BloqueiaTabelas(Pasta)
Private MSG, Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then Lock Pasta+Array_Tabelas[i] FL
          If Not RetVal
             Then MSG="O usu rio "+Upper(ErrorUser())+" esta usando uma//"
                  MSG=MSG+"rotina do sistema que atualiza o Estoque !// //"
                  MSG=MSG+Completa("- Contact -lo para liberar esta rotina;",40," ")+"//"
                  MSG=MSG+Completa("- Este reprocessamento ser  abortado.",40," ")+"//"
                  Mensagem(MSG)
                  Return False
          EndIf
  EndIf
EndFor

Return True
EndProc

;*******************************************************************************
;* Rotina Desbloqueia Tabelas da Pasta                                         *
;*******************************************************************************
Proc DesbloqueiaTabelas(Pasta)
Private Pasta, i

For i From 1 to DynArraySize(Array_Tabelas)
  If IsTable(Pasta+Array_Tabelas[i])
     Then UnLock Pasta+Array_Tabelas[i] FL
  EndIf
EndFor

EndProc

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelasE()
If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="NotaEC"
Array_Tabelas[02]="NotaEI"
Array_Tabelas[03]="RqCabeca"
Array_Tabelas[04]="RqItem"
Array_Tabelas[05]="RqMatPri"
Array_Tabelas[06]="Itens"
Array_Tabelas[07]="SdEstq"
Array_Tabelas[08]="EstqPrm"
Array_Tabelas[09]="Reproces"

EndProc

;*******************************************************************************
;* Rotina Monta Lista de Tabelas a Processar                                   *
;*******************************************************************************
Proc ListadeTabelasV()
If IsAssigned(Array_Tabelas)
   Then Release Vars Array_Tabelas
EndIf
DynArray Array_Tabelas[]

Array_Tabelas[01]="NotaC"
Array_Tabelas[02]="NotaI"
Array_Tabelas[03]="FaturaC"
Array_Tabelas[04]="FaturaI"
Array_Tabelas[05]="FaturaID"
Array_Tabelas[06]="Destin"

EndProc

;*******************************************************************************
;* Rotina                                                                      *
;*******************************************************************************
Proc SD_Dialog(Disparo,Campo,Evento,Elemento)
Temp=True
MSG_CAMPO=""
TECLA=""
If Disparo="OPEN"  Then AoCriarShowDialog() EndIf
If Disparo="EVENT" And Evento["Type"]="KEY" Then
   Switch
     Case Evento["KeyCode"] = 9: Temp=False
     Case Evento["KeyCode"] = -59: Dialog_F1()
     Case Evento["KeyCode"] =  27:
          Temp=False
          Switch
            Case Campo="TG_EMPRESA"       : Campo="NO"
            Case Campo="TG_ITEM"          : Campo="TG_EMPRESA"
            Case Campo="TG_MESANO"        : Campo="TG_ITEM"
            Case Campo="TG_OPTRANSF"      : Campo="TG_MESANO"
            Case Campo="YES" Or Campo="NO": Campo="TG_EMPRESA"
          EndSwitch
     Case (Evento["KeyCode"] <= -104 And Evento["KeyCode"] >= -113) Or
           Evento["KeyCode"]  = -139 Or  Evento["KeyCode"]  = -140:
          SYS_TECLA_ACIONADA=Evento["KeyCode"]
          Seta_Tecla_Acionada()
          CancelDialog
     Case Evento["KeyCode"] = 13:
          Temp=False
          If Checa_TAG()
             Then Switch
                    Case Campo="TG_EMPRESA" :Campo="TG_ITEM"
                    Case Campo="TG_ITEM"    :Campo="TG_MESANO"
                    Case Campo="TG_MESANO"  :Campo="TG_OPTRANSF"
                    Case Campo="TG_OPTRANSF":Campo="YES"
                  EndSwitch
          EndIf
          RefreshDialog
   EndSwitch
EndIf
Switch
  Case Campo="TG_EMPRESA":
       MSG_CAMPO="Informe o C¢digo da Empresa"
  Case Campo="TG_OPTRANSF":
     MensagemCheckBoxes()
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc 

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

If IsTable("Reproces")
   Then Empty "Reproces"
   Else Return
EndIf

VSDGEMPRESA     = ""
VSDGNOMEMP      = ""
VSDGITEM        = ""
VSDGMESANO      = ""
VSDGDTREF       = BlankDate()
VSDGDTINI       = BlankDate()
VSDGDTFIM       = BlankDate()

Array TG_OPTRANSF[1]
TG_OPTRANSF[1]="Transferir para o pr¢ximo Mˆs"

Array CheckTG_OPTRANSF[ArraySize(TG_OPTRANSF)]
CheckTG_OPTRANSF[1]=False

While True

  ShowDialog "Reprocessamento de Movimenta‡”es" Proc "SD_Dialog"
  Trigger "OPEN","ARRIVE"
  Key "F1","ENTER","ESC","TAB",
      -104, -105, -106, -107, -108, -109, -110, -111, -112, -113, -139, -140
   @ 06,12   Height 12 Width 72

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

    Label  @ 02,00 "Item"  For "TG_ITEM"
    Accept @ 03,01 Width 33 "A10" Picture "#*#" Tag "TG_ITEM"     To VSDGITEM
    Accept @ 04,01 Width 33 "A35" Picture "!*!" Tag "TG_NOMITEM" To VSDGNOMITEM

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

    Label  @ 00,35 "Saldos do Estoque"  For "TG_OPTRANSF"
    CheckBoxes @ 01,35 Height 1 Width 34 Tag "TG_OPTRANSF"
    TG_OPTRANSF[1] to CheckTG_OPTRANSF[1]

    Pushbutton @ 08,22 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 08,36 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf

  MES_ATUAL=AlinhM(StrVal(Month(Today())),2)
  ANO_ATUAL=StrVal(Year(Today()))
  
  MES=SubStr(VSDGMESANO,1,2)
  ANO=SubStr(VSDGMESANO,4,4)
  MESANO=MES+"."+ANO
  If NumVal(MES) = 12
     Then MESREF = "01"
          ANOREF = NumVal(ANO)+1
          ANOREF = AlinhM(StrVal(ANOREF),4)
     Else MESREF = NumVal(MES)+1
          MESREF = AlinhM(StrVal(MESREF),2)
          ANOREF = ANO
  Endif
  If NumVal(MES) > 12 Or NumVal(MES) = 0
     Then MENSAGEM("Mˆs inv lido!")
          Loop
  EndIf
  
  ;---- Reprocessa o estoque do mˆs seguinte automaticamente se saldo transferido
  REPROCESSO_AUTOMATICO=False
  If NumVal(MES) = 12
     Then ANO_POSTERIOR = AlinhM(StrVal(NumVal(ANO) + 1),4)
          MES_POSTERIOR = "01"
     Else ANO_POSTERIOR = AlinhM(StrVal(ANO),4)
          MES_POSTERIOR = AlinhM(StrVal(NumVal(MES) + 1),2)
  EndIf
  If (MES_ATUAL=MES_POSTERIOR And ANO_ATUAL=ANO_POSTERIOR) And MES_ATUAL<>MES And CheckTG_OPTRANSF[1]
     Then REPROCESSO_AUTOMATICO=True
  EndIf
  ;---- Verifica Saldo Inicial do mˆs referente e o Saldo Final do mˆs anterior
  If NumVal(MES) = 1
     Then ANO_ANTERIOR = AlinhM(StrVal(NumVal(ANO) - 1),4)
          MES_ANTERIOR = "12" 
     Else ANO_ANTERIOR = AlinhM(StrVal(ANO),4)
          MES_ANTERIOR = AlinhM(StrVal(NumVal(MES) - 1),2)
   EndIf   
   
  ;---- Verifica o controle da data de saida/emissao ---------------------------
  If Not Verifica_Emissao_Saida(DateVal("01."+MESANO))
     Then Loop
  EndIf 
  ;-----------------------------------------------------------------------------

  DataOk=True
  Switch
    Case NumVal(ANO)=Year(Today()) And NumVal(MES)>Month(Today()) : DataOk=False
    Case NumVal(ANO)>Year(Today())                                : DataOk=False
  EndSwitch
  If Not DataOk
     Then Mensagem("O Mes/Ano "+VSDGMESANO+" informado maior que da data atual "+Format("D13",Today())+" !")
          Loop
  EndIf        
  If CheckTG_OPTRANSF[1] And NumVal(ANO)=Year(Today()) And NumVal(MES)=Month(Today())
     Then MSG=    "O novo Mes/Ano "+MESREF+"."+ANOREF+" informado maior que da data atual "+Format("D13",Today())+" !// //"
          MSG=MSG+"Voce esta encerrando o mes de "+VSDGMESANO+". // //"
          MSG=MSG+"Deseja transferir o saldo do estoque de "+VSDGMESANO+" para "+MESREF+"."+ANOREF+" ?"
          If Not ConfGeral_N(MSG)
             Then Mensagem("Opera‡„o Cancelada !")
                  Loop
          EndIf   
  EndIf   

  If REPROCESSO_AUTOMATICO
     Then REPROCESSO_CONTADOR = 2
     Else REPROCESSO_CONTADOR = 1
  EndIf
 
 If Not Verifica_Usuario() Then Loop EndIf
 If Existe_Mes_Ano_Fechado("01."+VSDGMESANO,"Estoque","Sdestq") Then Loop EndIf

 Grava_LogEx("Estoque Reprocess")
 
 For ri From 1 To REPROCESSO_CONTADOR
    If ri = 2
       Then CheckTG_OPTRANSF[1] = False
            MESANO = MES_ATUAL+"."+ANO_ATUAL
            MES = MES_ATUAL
            ANO = ANO_ATUAL
    EndIf
    
    VSDGDTINI = DateVal("01."+MES+"."+ANO)
    If (NumVal(Mes)+1)=13
       Then VSDGDTFIM = DateVal("01.01"+"."+StrVal(NumVal(ANO)+1))-1
       Else VSDGDTFIM = DateVal("01."+AlinhM(StrVal(NumVal(MES)+1),2)+"."+ANO)-1
    EndIf
    
    AGUARDE("Aguarde, Checando dados")
    PROCESSAR_DADOS=True

    If CheckTG_OPTRANSF[1]
       Then If SYS_CODIGO_CLIENTE<>"0055"
              Then Tem_OFs_EmAberto()
                   If Not PROCESSAR_DADOS
                    Then QuitLoop
                   EndIf
            EndIf
    EndIf

    MSG_MODULO=""
    Monta_Dir_Trab(PrimeiroDia_MesAnterior(VSDGDTINI),UltimoDia_MesPosterior(VSDGDTFIM))
    While Novo_Dir_Trab()
      If Not IsBlank(Dir_Trab)
         Then Verifica_Mov()
      EndIf
    EndWhile
    If Not PROCESSAR_DADOS
       Then MSG=   "Existem movimenta‡”es fechadas://"
            Msg=MSG+MSG_MODULO+" //"
            MSG=MSG+"Esta rotina s¢ deve ser executada p/ movimenta‡”es em \"ABERTO\". // //"
            MSG=MSG+"Verificar !"
            Mensagem(MSG)
            QuitLoop
    EndIf
    If Not Verifica_Usuario() Then QuitLoop EndIf
    ListadeTabelasE()
    If (BloqueiaTabelas("\\Sistemas\\Estoque\\"))
       Then ListadeTabelasV()
            If (BloqueiaTabelas("\\Sistemas\\Vendas\\"))
               Then ENCONTRADO_INCONSISTENCIA=False

                    Tabela_Sdestq_Temp=Cria_Temp(PrivDir())
                    Create Tabela_Sdestq_Temp Like "Sdestq"

                    wc=0
  									If SYS_CODIGO_CLIENTE="NAO USA 0239"
  									   Then ProcessaP()
  									EndIf

                    Processa()
                    wc=1
                    Transferencia()

                    If CheckTG_OPTRANSF[1]
                       Then  AtualizaSaldos()
                    EndIf

                    If ENCONTRADO_INCONSISTENCIA
                       Then MSG=""
                            MSG=MSG+"O Sistema detectou inconsistˆncia de dados !// //"
                            MSG=MSG+"Saldos e valores incompat¡veis, ou//"
                            MSG=MSG+"em algum momento o Estoque ficou negativo.// //"
                            MSG=MSG+"Corrija o problema para obter o MELHOR controle !// //"
                            MSG=MSG+" 1-Use o Invent rio com CONSISTIR ERROS = SIM !                     //"
                            MSG=MSG+" 2-Use o Extrato das Movimenta‡äes para verificar a inconsistˆncia !// //"
                            MSG=MSG+"Ser  gerado um relat¢rio da inconsistˆncia !"
                            Mensagem(MSG)
                            DISPOSITIVO()
                            LimpaRodape(0)
                            If OK<>""
                               Then
                                    AGUARDE("Aguarde, gerando relat¢rio")

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

                                    {Tools} {ExportImport} {Import} {ASCII} {AppendDelimited}
                                    TypeIn PrivDir()+"Temperro.txt" Enter
                                    TypeIn Tabela_ERRO_ITEM Enter
                                    ClearAll
                                    Deleta_Arquivo(PrivDir()+"Temperro.txt")

                                    {Ask} {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

                                    IMPRIREL(Tabela_ERRO_ITEM,"R")

                                    Delete Tabela_ERRO_ITEM
                            EndIf
                    EndIf

                    If REPROCESSO_CONTADOR = 1 Or (REPROCESSO_CONTADOR = 2 And ri = 2)
                       Then COR_MENSAGEM=""
                            MSG="Opera‡„o Finalizada !"
                            If NumVal(SubStr(VSDGMESANO,4,4))<Year(Today()) Or
                               NumVal(SubStr(VSDGMESANO,1,2))<Month(Today())
                                Then COR_MENSAGEM="1"
                                     MSG=MSG+"// //"
                                     MSG=MSG+"Toda vez que vocˆ reprocessar o estoque anterior ao Mˆs/Ano corrente,  //"
                                     MSG=MSG+"  lembre-se:                                                           // //"
                                     MSG=MSG+"  1-reprocessar e transferior o estoque at‚ chegar no Mˆs/Ano corrente;//"
                                     MSG=MSG+"  2-s¢ depois reprocessar o estoque do Mˆs/Ano corrente !              "
                            EndIf
                            MENSAGEM(MSG)
                            Release Vars COR_MENSAGEM
                    EndIf
                    Delete Tabela_Sdestq_Temp
            EndIf
    EndIf
    ListadeTabelasE()
    DesbloqueiaTabelas("\\Sistemas\\Estoque\\")
    ListadeTabelasV()
    DesbloqueiaTabelas("\\Sistemas\\Vendas\\")
    If ri = 2
       Then CheckTG_OPTRANSF[1] = True
    EndIf
  EndFor
  
EndWhile
ClearAll
Release Vars All
Release Procs All
