Всем доброго времени суток!
У меня такая проблема:
Я запускаю сценарий (Job) из класса. Но передать значение переменной (даже при использовании системных классов) после первого "захода" в Job не получается. Предыдущее значение не перезаписывается.
Вариант временно хранить в таблице не подходит. Требование Клиента.
Уважаемые коллеги, подскажите, как мне решить эту проблему.
Исходные данные:
Job:
X++:
static AmountMST ScenarioScript134218100335()
{
/////////////////////////////////////// Системное объявление переменных. Не редактировать! -->
Date startDate; // Начальная дата для пересчета сценария
Date endDate; // Конечная дата для пересчета сценария
AmountMST reslt; // Промежуточный результат пересчета сценария
JobName jobName; // Название сценария \Data Dictionary\Extended Data Types\JobName
LedgerRRGOperationTable_RU ledgerRRGOperationTable; // Запись таблицы "Оперции над ячейкой отчета"
LedgerRRGCellTable_RU ledgerRRGCellTable; // Запись таблицы "Ячейки отчетов"
LedgerPeriodCode ledgerPeriodCode; // Запись таблицы "Интервалы дат"
RefRecId RRecId; // RecId записи таблицы "Оперции над ячейкой отчета"
job jb = new Job(); // Экземпляр сценария
JobName rr; // Значение RecId
AmountMST result; // Промежуточный результат пересчета сценария
AmountMST relt; // Результат пересчета сценария
/////////////////////////////////////// Системное объявление переменных. Не редактировать! <--
// USER VARIABLES -->
CustTable ct;
CustTrans ctr;
VendTable vt;
VendTrans vtr;
AmountMst Amount;
// USER VARIABLES <--
;
////////////////////////////////////// Системная инициализация переменных. Не редактировать! -->
jobName = funcname();
// Выбор записи таблицы "Оперции над ячейкой отчета"
ttsbegin;
select firstonly forupdate ledgerRRGOperationTable
where ledgerRRGOperationTable.CIT_JobName == jobName;
// Выбор записи таблицы "Ячейки отчетов"
select firstonly forupdate ledgerRRGCellTable
where ledgerRRGCellTable.RecId == ledgerRRGOperationTable.CellRecId;
// Если в записи таблицы "Оперции над ячейкой отчета" определен интервал дат из таблицы "Интервалы дат"
if(ledgerRRGOperationTable.LedgerPeriodCode)
{
select firstonly forupdate ledgerPeriodCode
where ledgerPeriodCode.Code == ledgerRRGOperationTable.LedgerPeriodCode;
startDate = ledgerPeriodCode.StartFixedDate;
endDate = ledgerPeriodCode.EndFixedDate;
}
else
{
// В противном случае определяем интервал дат из таблиц "Ячейки отчетов" и "Интервалы дат"
select firstonly forupdate ledgerPeriodCode
where ledgerPeriodCode.Code == ledgerRRGCellTable.LedgerPeriodCode;
startDate = ledgerPeriodCode.StartFixedDate;
endDate = ledgerPeriodCode.EndFixedDate;
}
rr = substr(jobName,23,10); // Определение значения RecId записи таблицы "Оперции над ячейкой отчета"
RRecId = str2int64(rr);
////////////////////////////////////// Системная инициализация переменных. Не редактировать! <--
// USER CODE -->
Amount=0;
while select * from ct
WHERE ct.CustGROUP == "UPS" ||
ct.CustGROUP == "REGION"
{
select sum(AmountMst) from ctr
WHERE ctr.ACCOUNTNUM ==ct.ACCOUNTNUM &&
(ctr.TRANSDATE >=startdate && ctr.transDATE<= endDATE);
IF (ctr.AmountMst < 0) AMOUNT+=ABS(ctr.AmountMst );
}
while select * from vt
WHERE vt .VendGroup == "PUMA" ||
vt .VendGroup == "SERIAL"
{
select sum(amountMst) from vtr
WHERE vtr.AccountNum == vt.ACCOUNTNUM &&
(vtr.TRANSDATE >=startdate && vtr.transDATE<= endDATE);
IF (vtr.AmountMst < 0) AMOUNT+=ABS(vtr.AmountMst );
}
relt=amount;
// USER CODE <--
//////////////////////////////// Присвоение значения результата пересчета сценария. Не редактировать! -->
ledgerRRGOperationTable.CIT_Result = relt; // \Data Dictionary\Tables\LedgerRRGOperationTable_RU\Fields\ Result добавленное поле где мы временно храним значение переменной
ledgerRRGOperationTable.update();
appl.parmResssy(relt); // Здесь проблемное место. Передаем значение переменной во вновь созданный метод \Classes\Application\parmResssy для \Classes\Application\classDeclaration: AmountMST resssy;
ttscommit;
//////////////////////////////// Присвоение значения результата пересчета сценария. Не редактировать! <--
return relt;
}
\Classes\LedgerRRGRunReport_RU\CIT_ScenarioScriptVend:
X++:
protected AmountMST CIT_ScenarioScriptVend(LedgerRRGAccountNumMap_RU _ScenarioAccountNumMap, // Таблица настроек Генератора
DateCode _ScenarioDateCode, // Скрипт сценария (Не нужно)
CIT_JobName _JobName, // Название job-а
FreeTxt _ScenarioFreeTxt) // Скрипт сценария (Не нужно)
{
#AOT
AmountMST resultVend;
AmountMST ressst;
job j= new Job();
str jobName; // Название job-а
LedgerRRGOperationTable_RU ledgerRRGOperationTable; // Таблица настроек Генератора
;
jobName = _JobName;
j = TreeNode::findNode(#JobsPath + "\\" + JobName);
if(j)
j.AOTrun();
resultVend = appl.parmResssy(); // Проблемное место. Не перезаписывается значение переменной.
return resultVend;
}
\Classes\Application\parmResssy:
X++:
public AmountMST parmResssy(AmountMST _resssy = resssy)
{
;
resssy = _resssy;
return resssy;
}