Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Skincb

Evento para actualizar preços na tabela St

Recommended Posts

Skincb

Boa tarde,

Estou muito cru nisto da programação em XBase, pretendo actualizar 2 campos na tabela ST quando altero um dossier interno, já desenvolvi um pedaço de código mas está complicado.

Select bi
goto top
scan
if bi.edebito>0
impcust=''
impcust=impcust+[update st set ]
impcust=impcust+[st.epcult=']+strtran(str((bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)),12,4),',','.')+[' ]
impcust=impcust+[where st.ref=']+(bi.ref)+[' ]
if not (u_sqlexec(impcust))
mensagem("Deu erro ao actualizar os stocks!!","DIRECTA")
u_sqlexec("ROLLBACK")
return .f.
endif
u_sqlexec("COMMIT TRANSACTION")
endif
endscan

Enquanto pretendia apenas um campo, foi tranquilo, este codigo funcionou na perfeição, entretanto tive necessidade de actualizar um segundo campo ST.CUSTOG, mas só pretendo actualizar quando o preço liquido da linha for superior ao valor que esta no campo st.custog.

Avancei com a criação de 2 campos para guardar os dados mas deve estar a faltar aqui qualquer coisa, podem dar me uma ajuda sff, o comando esta assim:

Select bi
Goto Top
Scan
If bi.edebito>0
Local MyPrOld, MyPrNew
MyPrOld=''
MyPrOld=MyPrOld+[select st.custog as Pref ]
MyPrOld=MyPrOld+[from st (nolock) ]
MyPrOld=MyPrOld+[where st.ref=']+(bi.ref)+[' ]
u_sqlexec(MyPrOld,"curs1")
If bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)>curs1.Pref
MyPrNew=''
MyPrNew=MyPrNew+[bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100) ]
u_sqlexec(MyPrNew,"curs2")
mensagem("Passou pelo sim!!","DIRECTA")
Else
MyPrNew=''
MyPrNew=MyPrNew+[curs1.Pref ]
u_sqlexec(MyPrNew,"curs2")
mensagem("Passou pelo nao!!","DIRECTA")
Endif
If Not (u_sqlexec(curs2))
mensagem("Deu erro no MyPrNew!!","DIRECTA")
Endif
impcust=''
impcust=impcust+[update st set ]
impcust=impcust+[st.epcult=']+Strtran(Str((bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)),12,4),',','.')+[', ]
impcust=impcust+[st.custog=']+Strtran(Str(curs2.Pref,12,4),',','.')+[' ]
impcust=impcust+[where st.ref=']+(bi.ref)+[' ]
If Not (u_sqlexec(impcust))
mensagem("Deu erro ao actualizar os stocks!!","DIRECTA")
u_sqlexec("ROLLBACK")
Return .F.
Endif
u_sqlexec("COMMIT TRANSACTION")
Endif
Endscan

 

Edited by Skincb
Desenvolvi mais

Share this post


Link to post
Share on other sites
Skincb

Já consegui resultados, pode estar com muita palha, mas está a funcionar:

Select bi
Goto Top
Scan
	If bi.edebito>0
		Local MyPrOld, MyPrNew, impcust
		u_sqlexec([select bi.bistamp from bi WHERE Bi.bostamp=']+(Alltrim(bo.bostamp))+['],[curs0])
		Select curs0
		Browse
		MyPrOld=''
		MyPrOld=MyPrOld+[select st.custog AS 'Pref', ]
		MyPrOld=MyPrOld+[st.ref AS 'Rref' ]
		MyPrOld=MyPrOld+[from st (nolock) ]
		MyPrOld=MyPrOld+[where st.ref=']+(bi.ref)+[' ]
		u_sqlexec(MyPrOld,"curs1")
		Select curs1
		Browse
		If bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)>curs1.Pref
			MyPrNew=''
			MyPrNew=MyPrNew+[select bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100) AS 'Pref', ]
			MyPrNew=MyPrNew+[bi.ref AS 'RRef' ]
			MyPrNew=MyPrNew+[from bi (nolock) ]
			MyPrNew=MyPrNew+[where bi.ref=']+(curs1.Rref)+[' and bi.bistamp=']+(Alltrim(curs0.bistamp))+[' ]
			mensagem("Passou pelo sim!!","DIRECTA")
			impcust=''
			impcust=impcust+[update st set ]
			impcust=impcust+[st.epcult=']+Strtran(Str((bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)),12,4),',','.')+[', ]
			impcust=impcust+[st.custog=']+Strtran(Str((bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)),12,4),',','.')+[' ]
			impcust=impcust+[where st.ref=']+(bi.ref)+[' ]
			If Not (u_sqlexec(impcust))
				mensagem("Deu erro ao actualizar os stocks!!","DIRECTA")
				u_sqlexec("ROLLBACK")
				Return .F.
			Endif
			u_sqlexec("COMMIT TRANSACTION")
		Else
			MyPrNew=''
			MyPrNew=MyPrNew+[select bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100) AS 'Pref', ]
			MyPrNew=MyPrNew+[bi.ref AS 'RRef' ]
			MyPrNew=MyPrNew+[from bi (nolock) ]
			MyPrNew=MyPrNew+[where bi.ref=']+(curs1.Rref)+[' and bi.bistamp=']+(Alltrim(curs0.bistamp))+[' ]
			mensagem("Passou pelo nao!!","DIRECTA")
			impcust=''
			impcust=impcust+[update st set ]
			impcust=impcust+[st.epcult=']+Strtran(Str((bi.edebito*(1-bi.desconto/100)*(1-bi.desc2/100)),12,4),',','.')+[' ]
			impcust=impcust+[where st.ref=']+(bi.ref)+[' ]
			If Not (u_sqlexec(impcust))
				mensagem("Deu erro ao actualizar os stocks!!","DIRECTA")
				u_sqlexec("ROLLBACK")
				Return .F.
			Endif
			u_sqlexec("COMMIT TRANSACTION")
		Endif
	Endif
Endscan

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.