Trocar códigos produtos rápido e prático
Enviado: 09 Out 2012 03:54
Senhores eu estou numa situação q até consegui resolver mas de forma muito demorada...
Preciso refazer os códigos da tabela de produtos e para não perder as correspondencias trocar nas tabelas q tem movimentação dos produtos... como entrada, vendas, orcamentos etc...
Código q funciona porém muito lento:
Outra forma que esta rápida porém não funciona corretamente e não entendi porque...
Eu fiz de uma forma q era pra ter funcionado porém fica códigos de fora por exemplo tenho um produto com código 999999 e ele tem 4 lançamentos na tabela de historico porém não é trocado todos os 4 lançamentos... tem algo errado q não estou entendo acho q é no índice...
[]´s
Preciso refazer os códigos da tabela de produtos e para não perder as correspondencias trocar nas tabelas q tem movimentação dos produtos... como entrada, vendas, orcamentos etc...
Código q funciona porém muito lento:
Código: Selecionar todos
#include "common.ch"
#include "inkey.ch"
********************************************************************************
Procedure MAIN
* Reclassificar os produtos a partir de um determinado codigo e tb muda nas tabelas
********************************************************************************
local1:=""
local2:=""
local3:=""
local4:=""
local5:=""
Private cexecutavel:="csl.exe",cterminal:="01"
REQUEST DBFCDX // Driver para Indices DBFCDX
RDDSETDEFAULT('DBFCDX') // Informar no Inicio do Sistema
__KILLREAD()
set(4,iif(__setcentury(),"dd/mm/yyyy","dd/mm/yy"))
cont:=0
@ 10,10 SAY "DIGITE A PARTIR DE QUAL NUMERO IRA COMECAR" GET CONT VALID CONT>0
READ
if !file("PRODUTO.DBF")
else
dbusearea(.t.,NIL,"Produto", .T. ,.f.,.f.)
AbreTabelas()
mensag("Aguarde, trocando os c¢digos","W+*/R")
dbselectar("Produto")
If Select('Produto')=0
Use produto alias produto EXCLUSIVE new
Endif
produto->(dbgotop())
while produto->( !eof())
local1:=produto->codpro
local2:=strzero(cont,6)
produto->codpro=local2
trocacod("receber", "codpro", local1, local2)
trocacod("itensped", "codpro", local1, local2)
trocacod("orcament", "codpro", local1, local2)
trocacod("Compra", "codpro", local1, local2)
trocacod("Entrada", "codpro", local1, local2)
produto->(dbskip())
cont++
end
fechatudo()
qout("Pronto...")
end if
************************************************************************************************
Static Procedure TROCACOD(calias, ccampo, ccodigoold, ccodigonew)
IF (Select(cAlias) == 0)
ELSE
MENSAG("Trocando produto c¢digo:" + cCodigoOLD + " na Tabela [" + cAlias + "]","W+*/R")
dbselectarea(cAlias)
DBEVAL( { || AtribuiCodigo(cAlias, cCodigoNew) }, { || codpro == ccodigoold })
RETURN
ENDIF
************************************************************************************************
Static Function AtribuiCodigo(cAlias, cCodigoNew)
&cAlias->codpro := cCodigoNew
Return
************************************************************************************************
Static Function AbreTabelas()
if file("itensped.dbf")
dbusearea(.t.,NIL,"itensped", .T. ,.f.,.f.)
DBCreateIndex("tmp001","itensped->codpro",{|| itensped->codpro},NIL)
end if
if file("receber.DBF")
dbusearea(.t.,NIL,"receber", .T. ,.f.,.f.)
DBCreateIndex("tmp003","receber->codpro",{||receber->codpro},NIL)
end if
if file("orcament.DBF")
dbusearea(.t.,NIL,"orcament", .T. ,.f.,.f.)
DBCreateIndex("tmp004","orcament->codpro",{|| orcament->codpro},NIL)
end if
if file("compra.DBF")
dbusearea(.t.,NIL,"compra", .T. ,.f.,.f.)
DBCreateIndex("tmp005","compra->codpro",{|| compra->codpro},NIL)
end if
if file("entrada.DBF")
dbusearea(.t.,NIL,"entrada", .T. ,.f.,.f.)
DBCreateIndex("tmp008","entrada->codpro",{|| entrada->codpro},NIL)
end if
Return NIL
Outra forma que esta rápida porém não funciona corretamente e não entendi porque...
Eu fiz de uma forma q era pra ter funcionado porém fica códigos de fora por exemplo tenho um produto com código 999999 e ele tem 4 lançamentos na tabela de historico porém não é trocado todos os 4 lançamentos... tem algo errado q não estou entendo acho q é no índice...
Código: Selecionar todos
********************************
procedure TROCACOD(calias, ccampo, ccodigoold, ccodigonew)
if (Select(calias) == 0)
else
if (&calias->(dbSeek(ccodigoold)))
do while (&calias->&ccampo == ccodigoold)
&calias->&ccampo:= ccodigonew
&calias->(dbSkip())
enddo
endif
return
endif
[]´s