Изменили код Classes\SalesFormLetter\postUpdate
X++:
protected void postUpdate()
{
SalesParmTable localSalesParmTable;
ParmId parmIdPrev;
SalesId salesIdPrev;
;
ttsbegin;
localSalesParmTable = this.setForUpdateSalesParmTable();
localSalesParmTable.StartDateTime = startDateTimeTable;
localSalesParmTable.EndDateTime = DateTimeUtil::newDateTime(systemdateget(),timenow(),DateTimeUtil::getUserPreferredTimeZone());
localSalesParmTable.updateParmJobStatusExecuted();
salesParmLine.clear();
// Sales totals are nulled in order to force a recalculation of the sales totals
// which are then stored in the SalesTable.estimate field for utilization during credit limit check
salesTotals = null;
recordListSalesParmLine.first(salesParmLine);
while (salesParmLine)
{
if (salesParmLine.OrigSalesId != salesIdPrev || salesParmLine.ParmId != parmIdPrev)
{
//counting number of SalesOrders we deal with
if (salesParmLine.OrigSalesId != salesIdPrev)
{
++numberOfRecords;
}
// 13.01.2011 AVRDV -->
/*
salesTable = salesParmLine.salesTable(true);
if (salesTable)
{
salesTable.updateDocumentStatus(this.documentStatus());
salesTable.updateBackStatus();
this.updateSalesType();
this.createBackorderLines();
salesTable.updateDeadline(salesParmUpdate.RespiteDate);
if (salesTable.SalesId != salesParmTable.SalesId)
{
// If this is not the primary sales order in the summary order,
// void the credit card preauthorization that may exist as it is no longer valid
this.voidCreditCardPreauthorize();
}
}
*/
// 13.01.2011 AVRDV <--
localSalesParmTable = salesParmLine.salesParmTable(true);
if (localSalesParmTable)
{
localSalesParmTable.updateParmJobStatusExecuted();
}
}
salesIdPrev = salesParmLine.OrigSalesId;
parmIdPrev = salesParmLine.ParmId;
if (!recordListSalesParmLine.next(salesParmLine))
break;
}
// 13.01.2011 AVRDV -->
salesTable = SalesTable::find(salesIdPrev,true);
if (salesTable)
{
salesTable.updateDocumentStatus(this.documentStatus());
salesTable.updateBackStatus();
this.updateSalesType();
this.createBackorderLines();
salesTable.updateDeadline(salesParmUpdate.RespiteDate);
if (salesTable.SalesId != salesParmTable.SalesId)
{
// If this is not the primary sales order in the summary order,
// void the credit card preauthorization that may exist as it is no longer valid
this.voidCreditCardPreauthorize();
}
}
// 13.01.2011 AVRDV <--
ttscommit;
}
В результате получили обработку заказа на 2500 строк 10 минут, вместо 20 минут.