Понадобилось мне скопировать набор range из одной таблицы в другую по одноименным полям.
Код, который воспроизводит данный процесс на тестовой формочке:
PHP код:
Query q, qn = new Query();
QueryBuildDataSource qbDS, qbDSn;
DictTable dictTableSour, dictTableDest;
FieldId fieldId_Dest, fieldId_Sour;
str 100 qv;
int i;
;
super();
if(InventTable_ds.queryRun())
q = InventTable_ds.queryRun().query();
else
q = InventTable_ds.query();
qbDS = q.dataSourceNo(1);
qbDSn = qn.addDataSource(qbDS.table());
dictTableSour = new DictTable(qbDS.table());
dictTableDest = new DictTable(qbDSn.table());
for(i = 1; i <= qbDs.rangeCount(); i++)
{
fieldId_Sour = qbDS.range(i).field();
fieldId_Dest = dictTableDest.fieldName2Id(dictTableSour.fieldName(fieldId_Sour));
// fieldId_Dest = fieldId_Sour;
qv = qbDS.range(i).value();
if(fieldId_Sour && fieldId_Dest)
qbDSn.addRange(fieldId_Dest).value(qv);
}
info(qbDS.toString());
info(qbDSn.toString());
И все работало, пока не попался "хитрый" запрос с несколькими range по одному полю. В результирующем запросе получился OR между этими ограничениями вместо AND из исходного.
Создал тестовый пример - форма с одним DS (InventTable) в init устанавливается фильтр на поле ItemId. При установке пользовательского фильтра на этоже поле и копировании ограничений получаем:
[FIG1]
Кто-то может объяснить такой феномен?