Если в параметрах Расчетов с клиентами установлена проверка кредитного лимита, то при попытке изменить (например, цену) свежесозданную строку выскакивает сообщение об ошибке:
Цитата:
Warning Сообщение (19:22:50) Значение, введенное в поле 'Оценка суммы' таблицы 'Заказы' ('1321,00') нельзя сохранить, поскольку оно изменено другим пользователем (новое значение - '1321,00'). Используйте функцию "Восстановить", чтобы подставить новое значение.
Error Сообщение (19:22:50) Невозможно отредактировать запись в 'Заказы' ('SalesTable').
Одно или более полей в записи изменено другим пользователем, или в форме выбраны не все поля. Воспользуйтесь функцией "Восстановить".
При этом если предварительно перечитать строку из таблицы (F5), то ошибки нет. Таким образом где-то после Insert в SalesLine происходит изменение значений полей estimateGross и estimateNet.
Сравнение
dis и
old dis слоев метода insert() класса SalesLineType:
PHP код:
public void insert(boolean dropInvent = false,
boolean findMarkup = true,
Common childBuffer = NULL )
{
InventUpd_Estimated estimated;
NumberSeq numberSeq;
SalesTable salesTable;
container salesEstimated;
AmountCur estimate;
;
if (salesLine.inventTable().interCompanyBlockedSales() && salesLine.salesTable().isInterCompanyOrder())
throw checkFailed(strFmt("@SYS74812", salesLine.itemId));
ttsbegin;
if (salesLine.creditNoteLine())
salesLine.transactionCode = IntraStatParameters::find().defaultCreditNote;
numberSeq = NumberSeq::newGetNum(InventParameters::numRefInventTransId());
salesLine.inventTransId = numberSeq.num();
if (!salesLine.custAccount || !salesLine.custGroup)
{
salesLine.custAccount = salesLine.salesTable().custAccount;
salesLine.custGroup = salesLine.salesTable().custGroup;
}
salesLine.taxAutogenerated = NoYes::Yes;
salesLine.setSalesStatus();
if (!salesLine.interCompanySkipUpdate && salesLine.salesTable().isInterCompanyOrder())
this.interCompanyMirror(salesLine.salesTable());
this.updateSalesTable();
if (salesLine.salesStatus != salesLine.salesTable().salesStatus)
{
salesTable = salesLine.salesTable(true);
salesTable.salesStatus = salesLine.salesStatus;
salesTable.update();
}
if (!dropInvent)
{
estimated = new InventUpd_Estimated(InventMovement::construct(salesLine, false, childBuffer));
estimated.updateNow();
}
//-> OLD DIS
salesLine.calcCreditEstimate();
//<- OLD DIS
salesLine.doInsert();
//-> DIS: Здесь ПОСЛЕ ВСТАВКИ происходит присвоение значений
// estimateGross и estimateNet в SalesLine!!!
// salesLine.calcCreditEstimate();
//<- DIS
if (estimated)
estimated.updateReservation();
if (findMarkup)
salesLine.createMarkupTrans(salesLine.salesTable());
ttscommit;
}
Или дело в другом? По крайней мере в приведенном виде ошибка исчезла.
Кстати, может кто знает почему при установке/снятии 'Цена включает налог' в Заказе, эти самые estimateGross и estimateNet не пересчитываются? =0)