Запустил у себя сейчас такой джоб.
Для 26 тысяч клиентов он отработал примерно за 2 минуты (если убрать вывод в инфолог)
Это для Аксапты версии 3.0
X++:
static void sysDatabaseLogFieldChangedCustAxForum(Args _args)
{
CustTable custTable;
SysDatabaseLog SysDatabaseLog;
int i;
container tmp;
SysOperationProgress sysOperationProgress = new SysOperationProgress(1);
int stepCount;
int total;
UserInfo UserInfo;
;
select count(RecId) from custTable;
total = custTable.RecId;
sysOperationProgress.setTotal(total);
while select custTable
{
stepCount ++;
sysOperationProgress.setCount(stepCount);
sysOperationProgress.setText(strFmt("%1 запись из %2", stepCount, total));
while select SysDatabaseLog order by createdDate, createdTime
where SysDatabaseLog.LogRecId == custTable.RecId
&& SysDatabaseLog.table == custTable.TableId
{
if (typeOf(conpeek(SysDatabaseLog.Data, 1)) == Types::Container)
{
for ( i = 1; i <= conlen(SysDatabaseLog.data); i ++)
{
tmp = conpeek(SysDatabaseLog.Data, i );
if (fieldExt2Id(conpeek(tmp, 1)) == fieldnum(custTable, zResponsibleDivision))
{
if(conpeek(tmp, 3) != conpeek(tmp, 2))
{
select firstonly UserInfo where UserInfo.Id == SysDatabaseLog.createdBy;
info(strfmt("%1 ~ %2 ~ %3 ~ %4 ~ %5", custTable.AccountNum, UserInfo.name, SysDatabaseLog.createdDate, conpeek(tmp, 3),conpeek(tmp, 2) ));
}
}
}
}
}
}
}