Создан EDT FilmCode по примеру Dimension, но состоит из 25 элементов. Тип данных в нем int.
Затем сделана форма и одна из группы полей на grid FilmCode.
Задача отфильтровать те строки, где в группе FilmCode хотя бы в одном элементе указано выбранное значение. Значение указывается через специальное поле StringEdit на форме.
Пишу запрос
X++:
public void executeQuery()
{
QueryBuildRange qbdsrange1;
QueryBuildDataSource qbds1;
Integer _idx;
str 10000 strFilter;
str 10 CinemaFilmCode;
;
qbds1 = this.query().dataSourceTable(tableNum(CinemaSchTable));
CinemaFilmCode = int2str(CinemaFilmTable::findName(FindFilm.valueStr()).FilmCode);
qbds1.clearRange(fieldId2Ext(fieldNum(CinemaSchTable,FilmCode),1));
if (FindFilm.valueStr())
{
qbdsrange1 = qbds1.addRange(fieldNum(CinemaSchTable,FilmCode));
strFilter = '((CinemaSchTable.FilmCode[1] == '+CinemaFilmCode+')';
for (_idx=2; _idx <=25; _idx++)
{
strFilter += ' || (CinemaSchTable.FilmCode['+ int2str(_idx)+'] == '+ CinemaFilmCode+')';
}
strFilter += ')';
qbdsrange1.value(strFmt(strFilter));
}
super();
}
Выдает ошибку нехватает скобки правой на 28 символе. Однако, этот же запрос через обзор таблицы работает.
SELECT * FROM CinemaSchTable WHERE ((((CinemaSchTable.FilmCode[1] == 437) || (CinemaSchTable.FilmCode[2] == 437) || (CinemaSchTable.FilmCode[3] == 437) || (CinemaSchTable.FilmCode[4] == 437) || (CinemaSchTable.FilmCode[5] == 437) || (CinemaSchTable.FilmCode[6] == 437) || (CinemaSchTable.FilmCode[7] == 437) || (CinemaSchTable.FilmCode[8] == 437) || (CinemaSchTable.FilmCode[9] == 437) || (CinemaSchTable.FilmCode[10] == 437) || (CinemaSchTable.FilmCode[11] == 437) || (CinemaSchTable.FilmCode[12] == 437) || (CinemaSchTable.FilmCode[13] == 437) || (CinemaSchTable.FilmCode[14] == 437) || (CinemaSchTable.FilmCode[15] == 437) || (CinemaSchTable.FilmCode[16] == 437) || (CinemaSchTable.FilmCode[17] == 437) || (CinemaSchTable.FilmCode[18] == 437) || (CinemaSchTable.FilmCode[19] == 437) || (CinemaSchTable.FilmCode[20] == 437) || (CinemaSchTable.FilmCode[21] == 437) || (CinemaSchTable.FilmCode[22] == 437) || (CinemaSchTable.FilmCode[23] == 437))))
Если писать без указания таблицы FilmCode[24] = 541..., то тоже не работает.
Если писать = или вместо || поставить or, то тоже не работает.
Если в qbdsrange1.value(strFmt(strFilter)); записать просто 541, то по первому полю в группе работает.
Не могу понять где ошиблась.
Если
X++:
if (FindFilm.valueStr())
{
qbdsrange1 = qbds1.addRange(fieldid2ext(fieldNum(CinemaSchTable,FilmCode),1));
strFilter = ' == 1)||(CinemaSchTable.FilmCode[1] == '+CinemaFilmCode+')';
for (_idx=2; _idx <=2; _idx++)
{
strFilter += ' || (CinemaSchTable.FilmCode['+ int2str(_idx)+'] == '+ CinemaFilmCode+')';
}
strFilter += '';
qbdsrange1.value(strFmt(strFilter));
}
ошибок нет, но и фильтр не работает
Такое впечатление, что он пытается зачем-то поставить FilmCode[1] =