if !result = aerror(laerror) tablerevert( .t., "sales" ) ...I suggest you don't revert automatically, and let the user press a "Cancel" button. The reason is that some errors - such as a duplicate primary key - can be corrected by the user, so in this case, a cancel won't be necessary.
>sno1=thisform.text1.value > date1=thisform.text2.value > code1=thisform.text4.value > partyname=thisform.text5.value > >*--- delete current invoice if found > select sales > delete all for sno=thisform.text1.value in sales > tableupdate(.t.,.t.,'sales') > >*--- get NEW sno (refresh sno if some one has saved invoices greater than text1.value) > maxsno=0 > calculate max(sno) for !deleted() to maxsno > thisform.text1.value=maxsno+1 > > Begin transaction > > *---prepare credit entry > select temp > repl all credit with round(credit,0),type with [P],detail with thisform.text3.value,; > sno with thisform.text1.value,dates with date1, code2 with code1,; > credit with round(credit,0),edmode with .t. for !empty(codes) > > update temp set names =products.names from products where temp.codes=products.codes > > select sales > append from dbf("temp") for !empty(codes) and !deleted() > > result=tableupdate(.t.,.t.,'sales') > > *---error trapping routine > if !result > = aerror(laerror) > tablerevert( .t., "sales" ) > = messagebox('Error #' + ltrim(str(laerror[1])) + ': ' + laerror[2] + ; > ' occurred while saving.') > endif result > > *---prepare debit entry > select temp > repl all code2 with codes, codes with code1,names with partyname,detail with thisform.text3.value,; > sno with thisform.text1.value,debit with round(credit,0),; > credit with 0 type with "" ,edmode with .t. for !empty(codes) > > select sales > append from dbf("temp") for !empty(codes) and !deleted() > > result=tableupdate(.t.,.t.,'sales') > > *---error trapping routine > if !result > = aerror(laerror) > tablerevert( .t., "sales" ) > = messagebox('Error #' + ltrim(str(laerror[1])) + ': ' + laerror[2] + ; > ' occurred while saving.') > endif result > > end transaction > > flush in sales force >