01.03.2010, 16:24 | #1 |
Участник
|
Акс 3.0 Запросы на источнике с или
Создан 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(); } 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] = Последний раз редактировалось Arahnid; 01.03.2010 в 17:07. |
|