Цитата:
Сообщение от
ice
2 sukhanchik: а можно привести исходный код медода queryAddDynaCursorAsRangeAndValue(), а то у меня его нет
X++:
// This method will traverse dynalinks on QueryBuildDataSource represented by _queryDynaBdsNo
// and convert current dyna-record into ranges and values on that QueryBuildDataSource
static client server void queryAddDynaCursorAsRangeAndValue(
Query _query, // new query
Query _queryDyna, // query having external links (=dyna links)
Integer _queryDynaBdsNO // queryBuildDataSource on _queryDyna having external links
)
{
QueryBuildRange toQbr;
QueryBuildDynalink qbDyna;
Counter dynaLinkNo = 1;
Counter toI;
DictField dictField;
Integer dictIndex;
Integer originalId;
Integer queryDsNO = _queryDynaBdsNO;
fieldId id;
;
if (!_queryDynaBdsNO)
return;
if (!_query || !_queryDyna)
throw error(strfmt("@SYS23669",funcname()));
if (!_queryDyna.dataSourceNo(_queryDynaBdsNO))
throw error(strfmt("@SYS23667",funcname()));
if (_query.dataSourceCount() < _queryDynaBdsNO || _query.dataSourceNo(_queryDynaBdsNO).file() != _queryDyna.dataSourceNo(_queryDynaBdsNO).file())
{
_query.addDataSource(_queryDyna.dataSourceNo(_queryDynaBdsNO).file());
queryDsNO = _query.dataSourceCount();
}
while (dynaLinkNo <= _queryDyna.dataSourceNo(_queryDynaBdsNO).dynalinkCount())
{
qbDyna = _queryDyna.dataSourceNo(_queryDynaBdsNO).dynalink(dynaLinkNo);
id = fieldExt2Id(qbDyna.field());
originalId = id;
toQbr = null;
if (_query.dataSourceNo(queryDsNO).findRange(id))
{
toI = 1;
while (true)
{
toQbr = _query.dataSourceNo(queryDsNO).findRange(id,toI);
if (!toQbr || !toQbr.value() || toQbr.value() == queryValue(qbDyna.cursor().(qbDyna.dynamicField())))
break;
toI++;
}
}
if (!toQbr || (toQbr && toQbr.value() && queryValue(qbDyna.cursor().(qbDyna.dynamicField())) && toQbr.value() != queryValue(qbDyna.cursor().(qbDyna.dynamicField()))))
{
// is this a Dimension field?
dictField = new DictField(_query.dataSourceNo(queryDsNO).table(),id);
if (dictField.arraySize() > 1)
{
// yes, working with Array field
dictIndex = originalId >> 16;
toQbr = _query.dataSourceNo(queryDsNO).addRange(fieldId2Ext(id, dictIndex));
}
else
{
toQbr = _query.dataSourceNo(queryDsNO).addRange(id);
}
}
if (toQbr)
toQbr.value(queryValue(qbDyna.cursor().(qbDyna.dynamicField())));
dynaLinkNo++;
}
}