Нашел я, то место в коде, которое приводит к возникновению ошибки.
Для начала, привожу более короткую цепоку действий, приводящую к ошибке:
1. Создаем новую номенклатуру, заполняем все обязательные поля
2. Сохраняем запись (это обязательно)
3. Меняем какие либо поля, относящиеся к таблице InventTable
4. Переходим на закладку Цена/Скидка и меняем цену в группе полей «Заказ на продажу»
5. Сохраняем запись – все изменения, сделанные на шаге 3, будут потеряны
Ошибка кроется в методе update таблицы InventTableModule.
X++:
void update(boolean _updatePriceDate = true)
{
boolean updPrice;
FormRun formRun;
FormObjectSet formObjSet;
int i;
if (this.orig().Price != this.Price ||
this.orig().Markup != this.Markup ||
this.orig().PriceUnit != this.PriceUnit)
{
updPrice = true;
if (_updatePriceDate)
this.PriceDate = systemdateget();
}
ttsbegin;
super();
if (updPrice)
{
if (this.ModuleType != ModuleInventPurchSales::Sales)
InventTable::updateAutoSalesPrice(this.ItemId, this.PriceDate);
else
{
if (this.isFormDataSource())
{
InventTable::updateAutoSalesPercent(this.ItemId);
// refresh and reread inventTable datasource if exists in form
formRun = this.dataSource().formRun();
for (i=1; i<= formRun.dataSourceCount(); i++)
{
if (formRun.dataSource(i).cursor().TableId == tablenum(InventTable))
{
formObjSet = formRun.dataSource(i);
break;
}
}
//вот это приводит к ошибке -->
if (formObjSet)
{
formObjSet.refresh();
formObjSet.reread();
}
//вот это приводит к ошибке <--
}
}
}
ttscommit;
}
Дело в том, что update таблицы InventTableModule вызывается раньше update таблицы InventTable. Соответсвенно вызов:
X++:
//вот это приводит к ошибке -->
if (formObjSet)
{
formObjSet.refresh();
formObjSet.reread();
}
//вот это приводит к ошибке <--
приводит к тому, что все изменения пользователя слетают.
Если просто закомментировать код, то ошибка исчезнет, но он там для чего-то был написан.
Кто, что может посоветовать?