× Linguagem de Programação ADVPL

Perguntas Update error - lock required

Mais
10 anos 7 horas atrás #26264 por joaocarloscorrea
Boa noite! Tenho pouca experiencia com o ADVPL, estou sofrendo com esse erro do assunto do topico! Desenvolvi uma rotina que usa um PE de quando é feito um lancamento de Doc. Entrada, assim que é feita a entrada executa um menu que contem uma planilha de formação de preco, onde o usuario informa os dados e confirma gravando o preco novo na tabela SB1, uso essa rotina aqui para gravar:

static function mudasb1(_cProd,_Prv,nCusto)

cMemo := "Impostos" + Chr(13) + Chr(10)
cMemo += "IRPJ: "+transform(nIrpj,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "ICMS: "+transform(nIcms,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "IPI: "+transform(nIpi,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "CSLL: "+transform(nCsll,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "PIS: "+transform(nPis,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "COFINS: "+transform(nCofins,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "
" + Chr(13) + Chr(10)
cMemo += "Outros Encargos" + Chr(13) + Chr(10)
cMemo += "Perda: "+transform(nOutros,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "Custo de Venda: "+transform(nCustVenda,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "Desp. Admin: "+transform(nDesp,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "
" + Chr(13) + Chr(10)
cMemo += "Custos e Precos" + Chr(13) + Chr(10)
cMemo += "Custo de Compra: "+transform(nCustoProd,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "Margem: "+transform(nMargem,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "Margem Liquida: "+transform(nMargemLiq,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "Preco Minimo: "+transform(nPrecoMin,"@E 999,999,999.999%")+Chr(13) + Chr(10)
cMemo += "Preco Final: "+transform(nResult,"@E 999,999,999.999%")

DbSelectArea("SB1")
DbSeek(xFilial("SB1")+_cProd)
RecLock("SB1",.F.)
REPLACE SB1->B1_ZULTCUS WITH nCusto
REPLACE SB1->B1_PRV1 WITH _Prv
REPLACE SB1->B1_ZPLANIL WITH cMemo //Replace NOVO com a gravacao da planilha
MsUnlock()
DBCloseArea()
Close(oDlg1)
return

Já uso essa customizacao ao certo tempo, porem foi me solicitado que eu gravasse a formação do preco no produto, para consultas, dai coloquei MAIS um replace (o que apresenta erro). Porem a customizacao roda normal, o erro que recebo é quando vou CONSULTAR o produto, e visualizo o mesmo e o campo esta gravado OK, mas quando fecho a tela, vem o erro do tópico, como segue o anexo.


Se puderem me ajudar ficaria muito agradecido!
Anexos:

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 11 meses atrás #26267 por lalberto
Respondido por lalberto no tópico Update error - lock required
Substitua essa parte na função:

DbSelectArea("SB1")
DbSeek(xFilial("SB1")+_cProd)
RecLock("SB1",.F.)
REPLACE SB1->B1_ZULTCUS WITH nCusto
REPLACE SB1->B1_PRV1 WITH _Prv
REPLACE SB1->B1_ZPLANIL WITH cMemo //Replace NOVO com a gravacao da planilha
MsUnlock()
DBCloseArea()

Por Essa:

If SB1->(dbSetOrder(1), dbSeek(xFilial("SB1")+_cProd))
If RecLock("SB1",.f.)
SB1->B1_ZULTCUS := nCusto
SB1->B1_PRV1 := _Prv
SB1->B1_ZPLANIL := cMemo
SB1->(MsUnlock())
Endif
Endif
Close(oDlg1)
return

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 11 meses atrás #26319 por joaocarloscorrea
Opa! funcionou perfeito! fico agradecido!

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 11 meses atrás #26344 por joaocarloscorrea
Ontem fiz um teste no ambiente oficial e o erro continuou, engracado que quando eu visualizo o produto pela consulta padrão ficar certo, mas quando vou no cadastro do produto e visualizo por lá, dá erro, não estou entendendo.

Por favor Acessar ou Registrar para participar da conversa.

Mais
9 anos 11 meses atrás #26367 por lalberto
Respondido por lalberto no tópico Update error - lock required
Coloque no começo da função

Local aArea := GetArea()



e Antes do Return


RestArea(aArea)

Luiz Alberto Vieira Alves
Proprietário
55 (12) 9 8256-5905 (Vivo)
www.3lsystems.com.br
www.masteradvpl.com.br

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.135 segundos
Joomla templates by a4joomla