;** 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 cancalado
;Ultima Alteracao: 06/03/2012 por Anivel Augusto Rodrigues
;Motivo Alteracao: Ajustes bloquear os usuarios usando sistema, mensagem de data maior que atual.

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

;*** 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" Check
Moveto [Codigo da Empresa        ] Example "emp" TypeIn ", ~VSDGEMPRESA.."
Moveto [Codigo da Destinacao     ] Example "destin"
Moveto [Data de Emissao          ] Example "dtref" TypeIn ", <=~VSDGDTFIM"
Moveto [Numero Nota Gerada       ] TypeIn "Blank"
Do_It!
ClearAll

If Not IsEmpty("Answer")
   Then PROCESSAR_DADOS=False
        ALTERA_DATA=False  
        ;modificar a data de emissÆo somente para Auditoria
        MSG=   "Existe(m) ordem de faturamento em ABERTO, ou  seja, nÆo faturada!// //"
        If SYS_CODIGO_CLIENTE="0217" Or
           SYS_CODIGO_CLIENTE="0228"    
          Then 
            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                

            MSG1=MSG+"Deseja alterar a data de emissÆo/saida destes lan‡amentos"+"//"
            MSG1=MSG1+" para o primeiro dia do mˆs seguinte - "+StrVal(DTALT)+"?"
            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 (SYS_CODIGO_CLIENTE<>"0217" And 
            SYS_CODIGO_CLIENTE<>"0228")
             or 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
EndProc

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

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


If SYS_CODIGO_CLIENTE="0239"
	 Then
				;*** Pecas/Estoque ***
				If IsTable("\\Sistemas\\Estoque\\"+Dir_Trab+"Pecasmov")
				   Then {Ask} TypeIn "\\Sistemas\\Estoque\\"+Dir_Trab+"Pecasmov" Enter
				        Moveto [Numero do Lancamento     ] Check
				        Moveto [Codigo da Empresa        ] TypeIn "~VSDGEMPRESA.."
				        Moveto [Data                     ] TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
				        Do_It!
				        ClearAll
				        If Not IsEmpty("Answer")
				           Then MSG_MODULO=MSG_MODULO+"Pecas no Estoque            "+" - "+Dir_Trab+"//"
				                PROCESSAR_DADOS=False
				        EndIf
				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

EndProc    ; (Verifica_Mov)

;*******************************************************************************
; Seleciona PecaMov (Entrada/Saida)                                            *
;*******************************************************************************
Proc ProcessaP()

;*********Entrada da Peca "0"*****************

;*** 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 [Codigo da Destinacao     ] Example "destin"
Moveto [Descricao da Destinacao  ] TypeIn "..DEVOL.."
Moveto [Data de Saida            ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "E"
Moveto [Situacao                 ] TypeIn "Not C"
{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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
Moveto [Quantidade               ] Example "qtd"
Moveto [Situacao_Item            ] TypeIn "Not C"
{Ask} {Reproces} TypeIn "Fast Insert"
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"
Do_It!
ClearAll

;*** Ordem de Futura Entrada/Faturamento DEVOLUCAO ***
{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.."
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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
Moveto [Quantidade               ] Example "qtd"
{Ask} {Reproces} TypeIn "Fast Insert"
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"
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"
{Ask} {NotaEI}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
Moveto [Quantidade               ] Example "qtd"
Moveto [Quantidade Convertida    ] Example "qtdcv"
{Ask} {Reproces} TypeIn "Fast Insert"
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"

Do_It!
ClearAll

If IsEmpty("Reproces")
   Then Mensagem("Sem movimenta‡oes de entrada/saida conforme sele‡„o !//Verificar Ok !")
        PROCESSAR_DADOS=False        
Endif

CoEdit "Pecassd"
Scan For [Mes Referencia]=MES And [Ano Referencia]=ANO

  If Not IsBlank(VSDGEMPRESA) And [Codigo da Empresa]<>VSDGEMPRESA
     Then Loop
  EndIf
  If Not IsBlank(VSDGITEM) And [Codigo do Item]<>VSDGITEM
     Then Loop
  EndIf
  
  If IsBlank([Saldo Inicial      ]) Then [Saldo Inicial      ]=0 EndIf
  If IsBlank([Cortes Inicial     ]) Then [Cortes Inicial     ]=0 EndIf  
  [Saldo Atual  ] = [Saldo Inicial  ]
  [Cortes Atual ] = [Cortes Inicial ]
  
EndScan
Do_It!
ClearAll

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


CoEdit "Pecassd","Reproces"

NR = NRecords("Reproces")
If PROCESSAR_DADOS Then
Scan

   Barra(NR, RecNo())
   Aguarde("Aguarde, Processando "+BARRA_STRING)

   Moveto "Pecassd"
   Moveto [Codigo da Empresa]
   Locate [Reproces->Codigo da Empresa],[Reproces->Codigo do Item ],0,ANO,MES 
   If RetVal then        
     Switch
       Case [Reproces->Tipo do Movimento]="E":
            [Saldo Atual      ]=NDecimal([Saldo Atual      ]+[Reproces->Quantidade ],3)                 
     EndSwitch
     Moveto "Reproces"
   else Cria_FichaP()
        Moveto "Reproces"
   EndIf
EndScan
EndIf
Do_It!
ClearAll


Empty ("Reproces")

;*******************************************************************
{Ask} {Pecasmov} check
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."   
Moveto [Data                  ] TypeIn " >=~VSDGDTINI, <=~VSDGDTFIM"
Do_It!
Clearall


If IsEmpty("Answer")
   Then Mensagem("N„o existe movimenta‡oes de entrada/saida(Pecas) conforme sele‡„o !//Verificar Ok !")
        Return
Endif

Sort "Answer" on "Codigo da Empresa","Codigo do Item", "Codigo da Peca" , "Tipo Lancamento"


Coedit "Pecassd", "Answer"

NR = NRecords("Answer")
Scan
    Barra(NR, RecNo())
    Aguarde("Aguarde,Processando/P "+BARRA_STRING)
    moveto "Pecassd"
    Moveto [Codigo da Empresa]
    Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item ],[Answer->Codigo da Peca], 
            ALINHM(StrVal(Year([Answer->Data])),4),ALINHM(StrVal(Month([Answer->Data])),2)           
    If Retval Then
      If [Answer->Codigo da Peca] = 0 then 
          Switch
              Case [Answer->Tipo Lancamento]="PECA CRIADA":            
                   [Saldo Atual  ] = NDecimal([Saldo Atual    ] - [Answer->Quantidade],3)   
                   If [Pecassd->Saldo Atual  ] < 0 
                      Then [Pecassd->Saldo Atual  ] = 0  
                   EndIf                                 
              Case [Answer->Tipo Lancamento]="PECA EXCLUIDA":
                   [Saldo Atual  ] = NDecimal([Saldo Atual    ] + [Answer->Quantidade],3)         
          Endswitch 
      Else    
          Switch
              Case [Answer->Tipo Lancamento]="PECA CRIADA":            
                   Switch
                       Case [Answer-> Tipo Movimento] = "E":            
                            [Saldo Atual  ] = NDecimal([Saldo Atual    ] + [Answer->Quantidade],3)
                       Case [Answer-> Tipo Movimento] = "S":
                            [Saldo Atual  ] = NDecimal([Saldo Atual    ] - [Answer->Quantidade],3)
                   EndSwitch  
              Case [Answer->Tipo Lancamento]="CORTE EXCLUIDO":
                   [Saldo Atual  ] = NDecimal([Saldo Atual    ] + [Answer->Quantidade],3) 
                   [Cortes Atual ] = [Cortes Atual   ] - 1
              Case [Answer->Tipo Lancamento]="CORTE NA PECA":
                   [Saldo Atual  ] = NDecimal([Saldo Atual    ] - [Answer->Quantidade],3) 
                   [Cortes Atual ] = [Cortes Atual   ] + 1 
              Case [Answer->Tipo Lancamento]="ENTRADA RESIDUO":
                   [Saldo Atual  ] = NDecimal([Saldo Atual    ] + [Answer->Quantidade],3) 
              Case [Answer->Tipo Lancamento]="SAIDA RESIDUO":
                   [Saldo Atual  ] = NDecimal([Saldo Atual    ] - [Answer->Quantidade],3)
              Case [Answer->Tipo Lancamento]="PECA EXCLUIDA":
                   Del
                   Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item ],0, 
                   ALINHM(StrVal(Year([Answer->Data])),4),ALINHM(StrVal(Month([Answer->Data])),2)
                   If Retval
                      Then [Saldo Atual  ] = NDecimal([Saldo Atual    ] + [Answer->Quantidade],3)
                   EndIf
          Endswitch
      EndIf
    Else Switch 
           Case [Answer->Tipo Lancamento]="PECA EXCLUIDA":
                Locate [Answer->Codigo da Empresa],[Answer->Codigo do Item ],0, 
                ALINHM(StrVal(Year([Answer->Data])),4),ALINHM(StrVal(Month([Answer->Data])),2)
                If Retval
                   Then [Saldo Atual  ] = NDecimal([Saldo Atual    ] + [Answer->Quantidade],3)
                EndIf
         Endswitch           
    EndIf 
    moveto "Answer"   
   
EndScan
Do_It!
Clearall
EndProc

;*******************************************************************************
; Seleciona Notas Fiscais/Faturamento (Entrada/Saida)                          *
;*******************************************************************************
Proc Processa()
If wc=0
   Then AGUARDE("Aguarde, Processando")
   Else AGUARDE("Aguarde, Processando Saidas por Transferencia")
EndIf
Empty "Reproces"
ClearAll

PROCESSAR_DADOS=True
;*** 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 [Codigo da Destinacao     ] Example "destin"
Moveto [Data de Saida            ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "S"
Moveto [Situacao                 ] TypeIn "Not C"
{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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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"
Do_It!
ClearAll

;*** 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 [Codigo da Destinacao     ] Example "destin"
Moveto [Descricao da Destinacao  ] TypeIn "Not ..DEVOL.., Not ..MANIF..,  Not ..CONSIG..,  Not ..REQUIS.."
Moveto [Data de Saida            ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "E"
Moveto [Situacao                 ] TypeIn "Not C"
{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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [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} {\\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 "..DEVOL.. Or ..MANIF.. Or ..CONSIG.. Or ..REQUIS.."
Moveto [Data de Saida            ] Example "dtref" TypeIn ", >=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Tipo Movimento Estoque   ] TypeIn "E"
Moveto [Situacao                 ] TypeIn "Not C"
{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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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"
Do_It!
ClearAll



;*** 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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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"
Do_It!
ClearAll


;*** 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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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"
Do_It!
ClearAll

;*** 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.."
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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [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.."
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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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"
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"
{Ask} {NotaEI}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [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"
{Ask} {NotaEI}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [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"                 
{Ask} {RqItem}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [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"
{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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [Valor Unitario           ] Example "ctuni"
Moveto [Valor Total              ] Example "cttot"
Do_It!
ClearAll

{Ask} {RqCabeca}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Codigo da Empresa Destino] 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"
{Ask} {RqItem}
Moveto [Numero do Lancamento     ] Example "doc"
Moveto [Sequencia do Lancamento  ] Example "seq"
Moveto [Codigo do Item           ] Example "ite" TypeIn ",~VSDGITEM.., Not Blank"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
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 [Valor Unitario           ] Example "ctuni"
Moveto [Valor Total              ] Example "cttot"
Do_It!
ClearAll

CoEdit Tabela_ERRO_ITEM,"Itens","SdEstq"
Scan For [Mes Referencia]=MES And [Ano Referencia]=ANO

  If Not IsBlank(VSDGEMPRESA) And [Codigo da Empresa]<>VSDGEMPRESA
     Then Loop
  EndIf
  If Not IsBlank(VSDGITEM) And [Codigo do Item]<>VSDGITEM
     Then Loop
  EndIf
  CODEMP=[Codigo da Empresa]
  
  okproces=true
  ITEM=[Codigo do Item]
  If IsBlank(VSDGITEM)
     Then Moveto "Itens"
          Moveto [Codigo do Item]
          Locate ITEM
          If Not RetVal
             Then Moveto Tabela_ERRO_ITEM
                  End
                  Down
                  [Codigo do Item       ]=ITEM
                  [MSG_Erro             ]="ITEM NAO CADASTRADO"
                  okproces=False
          EndIf
          Moveto "SdEstq"
  EndIf

  If okproces
     Then
          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]

          ;;*** 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 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
          EndIf
          If INCONSISTENTE
             Then ENCONTRADO_INCONSISTENCIA=True

                  Moveto Tabela_ERRO_ITEM
                  End
                  Down
                  [Codigo da Empresa    ]=[SdEstq->Codigo da Empresa]
                  [Codigo do Item       ]=ITEM
                  [MSG_Erro             ]="SALDO/CUSTO INICIAL INCONSISTENTE"

                  Moveto "SdEstq"
          EndIf
  EndIf
EndScan
Do_It!
ClearAll
     
If IsEmpty("Reproces")
   Then Mensagem("N„o existe movimenta‡oes de entrada/saida conforme sele‡„o !//Verificar Ok !")
        PROCESSAR_DADOS=False
        Return
Endif

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

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

COD_EMPRESA="***"
COD_ITEM   ="***"
Scan

   Barra(NR, RecNo())
   Aguarde("Aguarde, Processando "+BARRA_STRING)
   CUSTO=0
   If [Codigo da Empresa] <> COD_EMPRESA Or
      [Codigo do Item   ] <> COD_ITEM
      Then ESTQ_ITEM_OK = True
           COD_EMPRESA  = [Reproces->Codigo da Empresa]
           COD_ITEM     = [Reproces->Codigo do Item   ]

           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
   If Not ESTQ_ITEM_OK
      Then Loop
   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]+(CUSTO*[Reproces->Quantidade]),2)
            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 SYS_CODIGO_CLIENTE="0114" Or SYS_CODIGO_CLIENTE="0120"
                     Then If [Reproces->Data do Movimento]>=[Data do Preco de Custo] And [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
                  EndIf

                  If [Reproces->Data do Movimento]>=[Data do Preco de Custo] And
                     ([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
          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)
                  [Custo Total Atual]=NDecimal([Custo Total Atual]-([Reproces->Quantidade]*CUSTO),2)
          EndIf

          Moveto "Estqprm"
          Moveto [Codigo da Empresa]
          Locate [Reproces->Codigo da Empresa],[Reproces->Codigo do Item]
          If RetVal
             Then If [Reproces->Data do Movimento]>[Data da Ultima Saida]
                     Then [Data da Ultima Saida]=[Reproces->Data do Movimento]
                          UnLockRecord
                  EndIf
          EndIf
          Moveto "SdEstq"
   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 [Ultimo Custo Atual]=NDecimal([Custo Total Atual]/[Saldo Atual],5)
   EndIf

;;;[Preco de Custo        ]=NDecimal([Preco de Custo],5)

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

   ;;**********************************************

   If INCONSISTENTE
      Then ENCONTRADO_INCONSISTENCIA=True

           FormKey
           Moveto Tabela_ERRO_ITEM
           End
           Down
           [Codigo da Empresa    ]=COD_EMPRESA
           [Codigo do Item       ]=COD_ITEM
           [MSG_Erro             ]=Format("D13",[Reproces->Data do Movimento])+
                                   " SALDO/CUSTO INCONSISTENTE"
           UnLockRecord

           Moveto "Reproces"
           FormKey
   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]=CUSTO
                  EndIf
                  UnLockRecord
          EndIf
   EndSwitch

   Moveto "Reproces"

EndScan
Do_It!
ClearAll
Empty ("Reproces")
EndProc  ; (Processa)

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

If Not PROCESSAR_DADOS
   Then Return
EndIf

AGUARDE("Aguarde, Processando Entradas por Transferencia")

;*** 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 [Data de Saida            ] Check TypeIn ">=~VSDGDTINI, <=~VSDGDTFIM"
Moveto [Valor Nota Fiscal        ] Check
Moveto [Codigo                   ] Check
Moveto [Tipo                     ] TypeIn "E"
Moveto [Tipo Movimento Estoque   ] TypeIn "S"
Moveto [Situacao                 ] TypeIn "Not C"
{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"
Moveto [Tipo do Item             ] TypeIn "Not C, Not D, Not F, Not G, Not H, Not I"
Moveto [Situacao_Item            ] TypeIn "Not C"
Do_It!
ClearAll
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 Transferˆncia"+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

If SYS_CODIGO_CLIENTE="0239"
	 Then ProcessaP()
EndIf

Processa()

EndProc    ; (Transferencia)
;*******************************************************************************
;* Rotina para Criar Ficha do Estoque e Parametros                             *
;*******************************************************************************
Proc Cria_FichaP()
Moveto "Pecassd"
End Down Down
[Codigo da Empresa   ]=[Reproces->Codigo da Empresa]
[Codigo do Item      ]=[Reproces->Codigo do Item   ]
[Codigo da Peca      ]=0 
[Ano Referencia      ]=ANO
[Mes Referencia      ]=MES 
[Saldo Inicial       ]=0
[Saldo Atual         ]=0
UnLockRecord

EndProc  ; (Cria_Ficha)

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

Moveto "EstqPrm"
Moveto [Codigo da Empresa]
Locate ESTQ_EMPRESA, ESTQ_ITEM
If Not RetVal
   Then End Down Down
        [Codigo da Empresa   ]=ESTQ_EMPRESA
        [Codigo do Item      ]=ESTQ_ITEM
        UnLockRecord
        Moveto [Codigo da Empresa]
        Locate ESTQ_EMPRESA, ESTQ_ITEM
EndIf

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)




;*******************************************************************************
; SaldoPeca                                                                    *
;*******************************************************************************
Proc ATUALIZASALDOSPECA()

ClearAll

MSG_AGUARDE="Aguarde,Transferindo saldos/P de "+MESANO+"->"+MESREF+"."+ANOREF

Aguarde(MSG_AGUARDE+Barra(8,1))
{Ask} {Pecassd} TypeIn "Fast"
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia        ] TypeIn "~ANOREF"
Moveto [Mes Referencia        ] TypeIn "~MESREF"
Moveto [Saldo Inicial         ] TypeIn "Changeto Blank"
Moveto [Cortes Inicial        ] TypeIn "Changeto Blank"
Moveto [Saldo Atual           ] TypeIn "Changeto Blank"
Moveto [Cortes Atual          ] TypeIn "Changeto Blank"
Do_It!
ClearAll

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

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

View "Pecassd"
CoEdit "Answer"
NR = NRecords("Answer")
Scan
   Aguarde(MSG_AGUARDE+Barra(NR,RecNo()))
      If RecordStatus("New")
         Then QuitLoop
      EndIf
      Moveto "Pecassd"
           Moveto [Codigo da Empresa]
           Locate [Answer->Codigo da Empresa],
                  [Answer->Codigo do Item   ],[Answer->Codigo da Peca   ],ANOREF,MESREF
           If Not RetVal
              Then End Down
                   [Codigo da Empresa     ]=[Answer->Codigo da Empresa]
                   [Codigo do Item        ]=[Answer->Codigo do Item   ]                   
                   [Codigo da Peca        ]=[Answer->Codigo da Peca   ]
                   [Ano Referencia        ]=ANOREF
                   [Mes Referencia        ]=MESREF
           EndIf
           [Saldo Inicial         ]=[Answer->Saldo Atual           ]
           [Cortes Inicial        ]=[Answer->Cortes Atual          ] 
           [Saldo Atual           ]=[Answer->Saldo Atual           ]
           [Cortes Atual          ]=[Answer->Cortes Atual          ]           
     Moveto "Answer"
EndScan
Do_It!
ClearAll
EndProc
;*******************************************************************************
; SaldoCont                                                                    *
;*******************************************************************************
Proc ATUALIZASALDOS()
Private ATUASALDO
ClearAll

MSG_AGUARDE="Aguarde, Transferindo saldos de "+MESANO+"->"+MESREF+"."+ANOREF

Aguarde(MSG_AGUARDE+Barra(8,1))

{Ask} {SdEstq} TypeIn "Fast"
Moveto [Codigo da Empresa     ] TypeIn "~VSDGEMPRESA.."
Moveto [Codigo do Item        ] TypeIn "~VSDGITEM.."
Moveto [Ano Referencia        ] TypeIn "~ANOREF"
Moveto [Mes Referencia        ] TypeIn "~MESREF"
Moveto [Saldo Inicial         ] TypeIn "Changeto Blank"
Moveto [Custo Total Inicial   ] TypeIn "Changeto Blank"
Moveto [Ultimo Custo Inicial  ] TypeIn "Changeto Blank"
Moveto [Saldo Atual           ] TypeIn "Changeto Blank"
Moveto [Custo Total Atual     ] TypeIn "Changeto Blank"
Moveto [Ultimo Custo Atual    ] TypeIn "Changeto Blank"
Moveto [Preco de Custo        ] TypeIn "Changeto Blank"
Moveto [Data do Preco de Custo] TypeIn "Changeto Blank"
Do_It!
ClearAll

{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

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



NR=NRecords("Answer")
View "Itens"
View "EstqPrm"
View "SdEstq"
CoEdit "Answer"
Scan
   Aguarde(MSG_AGUARDE+Barra(NR,RecNo()))
   If RecordStatus("New")
      Then QuitLoop
   EndIf

   Moveto "Itens"
   Moveto [Codigo do Item]
   Locate [Answer->Codigo do Item]
   If RetVal
      Then If [Tipo do Item     ]="C" Or
              [Tipo do Item     ]="D" Or
              [Tipo do Item     ]="F" Or
              [Tipo do Item     ]="G" Or
              [Tipo do Item     ]="H" Or
              [Tipo do Item     ]="I"
              Then Moveto "Answer"
                   Loop
           EndIf
   EndIf

   ATUASALDO=True
   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 ATUASALDO=False
                   EndIf
           EndIf
   EndIf

   If ATUASALDO
      Then Moveto "SdEstq"
           Moveto [Codigo da Empresa]
           Locate [Answer->Codigo da Empresa],
                  [Answer->Codigo do Item   ],ANOREF,MESREF
           If Not RetVal
              Then End Down
                   [Codigo da Empresa     ]=[Answer->Codigo da Empresa]
                   [Codigo do Item        ]=[Answer->Codigo do Item   ]
                   [Ano Referencia        ]=ANOREF
                   [Mes Referencia        ]=MESREF
           EndIf
           [Saldo Inicial         ]=[Answer->Saldo Atual           ]
           [Saldo Atual           ]=[Answer->Saldo Atual           ]
           [Custo Total Inicial   ]=[Answer->Custo Total Atual     ]
           [Custo Total Atual     ]=[Answer->Custo Total Atual     ]
           [Ultimo Custo Inicial  ]=[Answer->Ultimo Custo Atual    ]
           [Ultimo Custo Atual    ]=[Answer->Ultimo Custo Atual    ]



       ;;*****Especial *******

           If SYS_CODIGO_CLIENTE="0117" AND MES="11" AND ANO="2006"
              Then
                   [Custo Total Inicial   ]=NDecimal([Answer->Custo Total Atual ]-(([Answer->Custo Total Atual ]*15)/100),2)
                   [Ultimo Custo Inicial  ]=NDecimal([Answer->Ultimo Custo Atual]-(([Answer->Ultimo Custo Atual]*15)/100),5)

                   [Custo Total Atual     ]=[Custo Total Inicial   ]
                   [Ultimo Custo Atual    ]=[Ultimo Custo Inicial  ]
           EndIf

       ;;*********************

           If [Answer->Data do Preco de Custo]>=[Data do Preco de Custo]
              Then [Data do Preco de Custo]=[Answer->Data do Preco de Custo]
                   [Preco de Custo        ]=[Answer->Preco de Custo        ]
           EndIf

           UnLockRecord

           Moveto [Codigo da Empresa]
           Locate [Answer->Codigo da Empresa],
                  [Answer->Codigo do Item   ],ANO,MES
           If RetVal
              Then [Situacao]="T"
                   UnLockRecord
           EndIf

   EndIf

   Moveto "Answer"
EndScan
Do_It!
ClearAll
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"
Array_Tabelas[10]="Pecassd"

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":
       MSG_CAMPO="Defina a op‡„o"
       TECLA="Barra de Espa‡o=Marca/Desmarca  "
Endswitch
Monta_Prompt(MSG_CAMPO,TECLA)
Return Temp
EndProc

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

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

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

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

Array TG_OPTRANSF[1]
TG_OPTRANSF[1]="Transferir Saldos para o proximo Mes"

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 13 Width 58

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

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

    Label  @ 04,00 "Mes/Ano Referente"  For "TG_MESANO"
    Accept @ 05,01 Width 10 "A07"  Picture "##;.####" Tag "TG_MESANO"  To VSDGMESANO

    CheckBoxes @ 07,00 Height 1 Width 50 Tag "TG_OPTRANSF"
    TG_OPTRANSF[1] to CheckTG_OPTRANSF[1]

    Pushbutton @ 09,14 width 11 "~O~k"      OK     Default Value "Ok" Tag "YES" To BottonValue
    Pushbutton @ 09,28 width 11 "~C~ancela" CANCEL                    Tag "NO"  To BottonValue

  EndDialog
  If Not RetVal Then QuitLoop EndIf
                         
  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

  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(MSG)
             Then Loop
          EndIf   
  EndIf   

  If Not Verifica_Usuario() Then Loop 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 Loop
                 EndIf
          EndIf         
  EndIf    

  MSG_MODULO=""
  Monta_Dir_Trab((VSDGDTINI-30),(VSDGDTFIM+30))
  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)
          Loop
  EndIf
;-------------------------------------------------------------------------------

  If Not Verifica_Usuario() Then Loop EndIf
  ListadeTabelasE()
  If (BloqueiaTabelas("\\Sistemas\\Estoque\\"))
     Then ListadeTabelasV()
          If (BloqueiaTabelas("\\Sistemas\\Vendas\\"))
             Then

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

                  ENCONTRADO_INCONSISTENCIA=False
                  wc=0    
									If SYS_CODIGO_CLIENTE="0239"
									   Then ProcessaP()
									EndIf   

                  Processa()
                  wc=1
                  Transferencia()
                  Do_It!

                  If Not IsEmpty(Tabela_ERRO_ITEM)
                     Then
                          {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!
                          Moveto "Itens"  ClearImage
                          Moveto Tabela_ERRO_ITEM  ClearImage

                          ENCONTRADO_INCONSISTENCIA=True

                          MSG=""
                          MSG=MSG+"O Sistema detectou inconsistˆncia de dados!// //"
                          MSG=MSG+"Ser  exibido um relat¢rio dos mesmos !"
                          Mensagem(MSG)
                          DISPOSITIVO()
                          If OK<>""
                             Then IMPRIREL(Tabela_ERRO_ITEM,"R")
                          EndIf
                  EndIf

                  If ENCONTRADO_INCONSISTENCIA And PROCESSAR_DADOS
                     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 = SIM !// //"
                          MSG=MSG+"Corrija o problema para obter o MELHOR controle !"
                          Mensagem(MSG)
                  EndIf

              ;;;;If ENCONTRADO_INCONSISTENCIA And CheckTG_OPTRANSF[1] And PROCESSAR_DADOS
              ;;;;   Then MSG="O Sistema detectou inconsistˆncia de dados !//"
              ;;;;        MSG=MSG+"Deseja continuar com a Transferˆncia "
              ;;;;        ConfGeral(MSG)
              ;;;;        If OK="N"
              ;;;;           Then CheckTG_OPTRANSF[1]=False
              ;;;;                PROCESSAR_DADOS=False
              ;;;;           Else MSG="Esteja conciente da inconsistˆncia de dados !// //"
              ;;;;                MSG=MSG+"Os Saldos de Estoque ficar„o INCORRETOS !// //"
              ;;;;                MSG=MSG+"Corrija o problema para obter o MELHOR controle !"
              ;;;;                Mensagem(MSG)
              ;;;;        EndIf
              ;;;;EndIf

                  If CheckTG_OPTRANSF[1]
                     Then 
                          
                          PROCESSAR_DADOS=True
                       ;;;If Not PROCESSAR_DADOS
                       ;;;   Then ConfGeral("Deseja realmente Transferir o Saldo para o pr¢ximo mˆs? ")
                       ;;;        If OK="S" Then PROCESSAR_DADOS=True EndIf
                       ;;;EndIf
                          If PROCESSAR_DADOS
                             Then 
									                If SYS_CODIGO_CLIENTE="0239"
									                   Then AtualizaSaldosPeca()
									                EndIf   
														      
                                  AtualizaSaldos()
                          EndIf
                  EndIf

                  If PROCESSAR_DADOS
                     Then
                        ;;If NumVal(SubStr(VSDGMESANO,4,4))<Year(Today) Or
                        ;;   (NumVal(SubStr(VSDGMESANO,1,2))<Month(Today) And
                        ;;    NumVal(SubStr(VSDGMESANO,4,4))<Year(Today))
                        ;;    Then COR_MENSAGEM="1"
                        ;;         MSG=    "Toda vez que vocˆ reprocessar dados anterios ao Mˆs/Ano corrente,   "
                        ;;         MSG=MSG+"reprocessar e transferior o estoque at‚ chegar no Mˆs/Ano corrente !"
                        ;;         MENSAGEM(MSG)
                        ;;EndIf

                          MENSAGEM("Opera‡„o Finalizada !")
                     Else MSG="Opera‡„o Cancelada !// //"
                          MSG=MSG+"Os Saldos de Estoque ficar„o INCORRETOS !// //"
                          MSG=MSG+"Corrija o problema para obter o MELHOR controle !"
                          Mensagem(MSG)
                  EndIf

                  Delete Tabela_ERRO_ITEM

          EndIf
  EndIf
  ListadeTabelasE()
  DesbloqueiaTabelas("\\Sistemas\\Estoque\\")
  ListadeTabelasV()
  DesbloqueiaTabelas("\\Sistemas\\Vendas\\")
                 
EndWhile
ClearAll
Release Vars All
Release Procs All
