Дурной вопрос. Понял, что я не знаю красивого ответа. Может подскажете?
Есть:
= код, в котором объявлена переменная типа map CustVendTrans
= запрос, который содержит либо custTrans, либо vendTrans в зависимости от внешних
= метод, который устанавливает range в этом запросе
= для range нужно получить fieldnum
вопрос:
а как проще и красивше получить fieldnum?
X++:
CustVendTrans custVendTrans = custVendTransStatic.custVendTrans();
Query q;
QueryBuildDataSource qbds;
;
switch( _journalTable.JournalModule)
{
case ModuleCustVend::Cust:
q = new Query(querystr(myCustQuery));
break;
case ModuleCustVend::Vend:
q = new Query(querystr(myVendQuery));
break;
default:
throw Error::unsupportedEnumValue(_journalTable.JournalModule);
}
qbds = q.dataSourceTable(custVendTrans.TableId);
// здесь возвращает fieldid из мапа = 39, а нужно для CustTrans = 41, а для VendTrans = 78
SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ExchRate) ).value(myValue);
// есть еще много критериев. как бы красиво оформить?
SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
SysQuery::findOrCreateRange(qbds, fieldnum(custVendTrans, ....
понятно, что можно вставить в switch. но тогда код будет дублироваться. некрасиво. хотя везде в стандартной аксапте именно так и делается
понятно, что можно через DictField, но получается слишком длинный код, когда критериев (range) достаточно много.
есть еще какой-нибудь способ?