23.11.2004, 07:38 | #1 |
Участник
|
Запрос с параметрами
Здравствуйте, мне надо чтобы в грид выводилась только незаблокированная номенклатура, т.е.
select * from T join ITM where ItM.ItemId==T.ItemId && ITM.ModuleType==2 && ITm.Blocked==0 ; Я перекрыла метод DataSource InventTable public void executeQuery() { ds= this.query().addDataSource(TableNum(InventTable)); ds1= ds.addDataSource(TableNum(InventTableModule)); ds.joinMode(SQLBuilderJoinType::Innerjoin); ds1.addLink(fieldNum(InventTable, ItemId), fieldNum(InventTableModule, Itemid)); range1 = ds1.addRange(fieldNum(InventTableModule, ModuleType)); range2 = ds1.addRange(fieldNum(InventTableModule, Blocked)); range1.value('2'); range2.value('0'); //throw info(ds.toString()); // InventTable T = this.cursor(); // select * from T join ITM where ItM.ItemId==T.ItemId && ITM.ModuleType==2 && Tm.Blocked==0 ; super(); } Но, сюдя по всему упустила что-то самое важное, так-как это не работает и выводится весь список. |
|
23.11.2004, 07:52 | #2 |
Участник
|
в какой форме используете данный запрос?
|
|
23.11.2004, 07:54 | #3 |
Участник
|
В форме InventClassifierItemSelection
|
|
23.11.2004, 08:27 | #4 |
Участник
|
похоже что форма самописная... тогда мне нужно описание датасорса... какие таблицы... какие связи..
|
|
23.11.2004, 08:38 | #5 |
Участник
|
форма из ритейла, таблицы InventTable, InventTableModule, InventSum, InventDim, ..
|
|
23.11.2004, 08:50 | #6 |
Участник
|
тогда еще проще...
|
|
23.11.2004, 08:54 | #7 |
Участник
|
сделай прямо в датасорсе на InventTableModule ограничение по выводу записей
что-то в этом роде this.query().addDataSource(TableNum(InventTable)).addRange(fieldNum(InventTableModule, Blocked)).value('0') также можно поступить и с типом... (ModuleType) |
|
23.11.2004, 09:53 | #8 |
Участник
|
Re: Запрос с параметрами
Цитата:
Изначально опубликовано PT
Но, сюдя по всему упустила что-то самое важное, так-как это не работает и выводится весь список. затем не создавайте query программно, а прицепите его PHP код:
И потом. Свой query надо создавать после super, насколько я помню (к сожалению, сейчас нет Аксапты под рукой, чтобы проверить) |
|
23.11.2004, 12:00 | #9 |
Участник
|
Да. Еще.
Вы ДОБАВЛЯЕТЕ датасорсы в executeQuery. А запрос надо формировать в init, в executeQuery только редактировать в фильтры. |
|
23.11.2004, 12:31 | #10 |
Участник
|
Спасибо, я все разнесла. дописала строчку InventTAble_ds.query(q); Запрос выполняется, но выдает ошибку на строке super();
в ExecuteQuery - Ошибка времени выполнения. : Неправильный тип аргумента функции. |
|
23.11.2004, 13:56 | #11 |
экс-модератор
|
ds.joinMode() берет на вход енум joinMode, а не SQLBuilderJoinType
и вообще, перенесите весь код в инит() датасорса, иначе у вас фигня полная получится когда пользователь будет запускать поиск в этой форме. |
|
24.11.2004, 08:16 | #12 |
Участник
|
Я последовала совету Tays, написала в ините DataSurce InventTableModule
super(); this.query().dataSourceName('inventTableModule').addRange(fieldnum(inventTableModule, ModuleType)).value('2'); this.query().dataSourceName('inventTableModule').addRange(fieldnum(inventTableModule, Blocked)).value('0'); а весь свой первый запрос удалила и все красиво заработало. оказывается это действительно так просто Спасибо |
|