操作路径:
应收账款->销售订单->销售订单行->库存->预留
一张销售订单有多行,选中其中一行(不要选的一行,要不然问题看不出来),点击库存->预留.
做预留动作前的窗体如下图所示:
如果在预留字段填写1,然后保存,预留界面就会变成下图所示的界面:
如果看现有量页签就会发现产品已经不是Farseer而是00000002_162了,也就是说在预留窗体中做预留操作后,销售订单行的当前行会跳到第一行,导致预留窗体中的相应数据也被改写成销售订单第一行的物料对应的数据,这样操作起来非常不方便,我觉得这应该算是一个bug。
原因
由于每次做预留动作时都会通过调用SalesTable的doRefresh方法刷新SalesTable窗体,在该方法中调用了salesLine_ds.research()方法,该方法会导致excuteQuery()方法的调用,重新查询SalesLine表中的记录,这时当前行会重新定位到第一行。
解决方法
在调用salesLine_ds.research()方法前记住当前行,在重新查询后定位到原来那一行。将代码修改如下:
void doRefresh()
{
//Farseer Begin
SalesLine origSalesLine;
//Farseer End
;
salesTable_ds.reread();
salesTable_ds.refresh();
//Farseer Begin
origSalesLine.RecId = salesLine.RecId;
//Farseer End
salesLine_ds.research();
//Farseer Begin
salesLine_ds.findRecord(origSalesLine);
//Farseer End
interCompanyPurchSalesReference_ds.executeQuery();
}
{
//Farseer Begin
SalesLine origSalesLine;
//Farseer End
;
salesTable_ds.reread();
salesTable_ds.refresh();
//Farseer Begin
origSalesLine.RecId = salesLine.RecId;
//Farseer End
salesLine_ds.research();
//Farseer Begin
salesLine_ds.findRecord(origSalesLine);
//Farseer End
interCompanyPurchSalesReference_ds.executeQuery();
}