|
![]() |
#1 |
Участник
|
Цитата:
Сообщение от Ace of Database
![]() Увеличьте значение макроса currentVersion - присвойте следующую версию. А то у вас отображается старая версия Query, сохраненная методом pack до того, как вы добавили Range.
И по тому полю, что стоит у табьлицы индексом, добавьте Range и сделайте его Hidden. Ну а вообще да, лучше создать Query в АОТ, чтобы наглядно можно было его редактировать. Значение увеличил - появилось нужное мне поле - сотрудник(EmplTaBle.EmplId). Цитата:
Сообщение от Ace of Database
И по тому полю, что стоит у табьлицы индексом, добавьте Range и сделайте его Hidden.
X++: qbr = qbds.addRange(fieldnum(VendSpListJour, EmplId)); |
|
![]() |
#2 |
Участник
|
Добавить две строки
X++: qbr = SysQuery::findOrCreateRange(qbds, fieldnum(VendSpListJour, EmplId));
qbr.status(RangeStatus::Hidden); |
|
![]() |
#3 |
Участник
|
Добавил эти две строчки - пропало моё поле и снова появилось то, которое стоит индексом на таблице.
Значение в currentversion пробовал увеличивать - не помогло. |
|
![]() |
#4 |
Участник
|
А у вас что, поле EmplId есть в двух таблицах? Тогда без разницы, по какой таблице идет фильтрация. Попробуйте поиграться с конструктором Query в АОТ, как я написал.
|
|
![]() |
#5 |
Участник
|
Цитата:
Хорошо, спасибо, буду делать query. Вот если оставить так X++: qbr = qbds.addRange(fieldnum(VendSpListJour EmplId)); Буду искать как их делать, чтобы был нужный запрос. Спасибо вам ещё раз. |
|
![]() |
#6 |
Участник
|
А какое поле стоит индексом в таблице? Поведение Query такое, что когда вы прячете в Range одно индексное поле, Аксапта начинает отображать поле из следующего индекса. Надо по следующему полю тоже Range добавлять и делать его hidden. И так до тех пор, пока все индексные поля не кончатся, и Аксапта не перестанет их добавлять на форму.
Последний раз редактировалось Ace of Database; 02.04.2013 в 13:47. |
|
![]() |
#7 |
Участник
|
|
|
![]() |
#8 |
Участник
|
По этому полю тоже сделайте Range со статусом Hidden. И так до тех пор, пока все индексные поля не кончатся, и Аксапта не перестанет их добавлять на форму
|
|
![]() |
#9 |
Участник
|
|
|
![]() |
#10 |
Участник
|
Сейчас код выглядит так
X++: qbds = query.addDataSource(tablenum(VendSpListJour)); // qbr = qbds.addRange(fieldnum(VendSpListJour, EmplId)); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(VendSpListJour, InternalSp)); qbr.status(RangeStatus::Hidden); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(VendSpListJour, EmplId)); //qbr.status(RangeStatus::Hidden); |
|
![]() |
#11 |
Участник
|
Попробуйте добавить строку
X++: qbr.label("Сотрудник"); |
|
![]() |
#12 |
Участник
|
|
|
![]() |
#13 |
Участник
|
У себя попробовал в дизайнере Query метку у Range поменять - тоже не работает. Значит надо либо так и оставить, либо метку поля VendSpListJour.EmplId в таблице поменять.
|
|
![]() |
#14 |
Участник
|
Цитата:
Так оставить точно не получиться, консультант по головке не погладит. Так метка ведь верно выводится, если её изменить, измениться только названия поля, а название самое Group останется таким же. Я вот про это ![]() А то может я неверно выразился ![]() |
|
![]() |
#15 |
Участник
|
Я так понял, что эта метка - название таблицы, которая добавлена в источник.
Хотел добавить в источники ещё и таблицу EmplTable, чтобы отображалось нужное название, но выдаёт ошибку "недопустимый диапазон"( X++: qbds = query.addDataSource(tablenum(EmplTable)); qbds = query.addDataSource(tablenum(VendSpListJour)); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, EmplId)); qbr.status(RangeStatus::Hidden); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable,AltNum)); qbr.status(RangeStatus::Hidden); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, DEL_Alias)); qbr.status(RangeStatus::Hidden); qbr = SysQuery::findOrCreateRange(qbds, fieldnum(EmplTable, PartyId)); qbr.status(RangeStatus::Hidden); qbr = qbds.addRange(fieldnum(VendSpListJour, EmplId)); queryRun = new QueryRun(query); |
|
![]() |
#16 |
Участник
|
Мне наш ещё один программист подсказал почти такой же способ, как и вы, но с одним "но": создать 2 объекта datasource для двух таблиц EmplTable и VendSpListJour и в источник EmplTable привязать к VendSpListJour, как дочерний, после активировать их связи и тогда получается то, что мне необходимо
![]() |
|
![]() |
#17 |
Участник
|
Если когда-нибудь будете делать через Query в АОТ, то метод paсk должен выглядеть так:
X++: public container pack() { return [#CurrentVersion, #CurrentList, (queryRun) ? queryRun.pack() : conNull()]; } X++: public boolean unpack(container packedClass) { version version = runbase::getVersion(packedClass); container queryCon; switch (version) { case #CurrentVersion: [version,#CurrentList,queryCon] = packedClass; if (sysQuery::isPackedOk(queryCon)) queryRun = new queryRun(queryCon); else this.initQuery(); break; default: return false; } return true; } |
|
![]() |
#18 |
Участник
|
Еще для себя напишу, чтобы не забыть
На моем примере на картинке в начале этой темы я показал форму, которая построена на Query, использующую таблицу InventBatch. Это необычная таблица, привязанная сразу к двум таблицам в запросе: к таблице InventDim по полю InventBatchId и к таблице InventTable по полю ItemId. Чтобы запрос с этой таблицей работал корректно, я источник данных для нее сделал дочерним к InventDim через дизайнер Query в АОТ, а в методе initQuery() моего класса программно добавил связку с источником данных InventTable X++: void initQuery() { Query query = new Query(queryStr(zInventAdvanceProdDateReport)); QueryBuildDatasource qbds; QueryBuildRange qbr; ; qbds = query.dataSourceTable(tableNum(InventBatch)); qbr = sysQuery::findOrCreateRange(qbds, fieldNum(InventBatch, ItemId)); qbr.value("((ItemId == InventTable_1.ItemId))"); qbr.status(RangeStatus::Hidden); queryRun = new QueryRun(query); } Последний раз редактировалось Ace of Database; 02.04.2013 в 18:40. |
|
![]() |
#19 |
Участник
|
Подниму этот вопрос.
Мне нужно производить определённые действия(проставлять checkbox-ы) только для тех строк в таблице, в которых поле сотрудник равно тому, что я выбрал в динамическом фильтре. В туториалах нет такого. Подскажите, как мне сравнивать со значением из дин.фильтра моё значение? Заранее спасибо за ответы. |
|
![]() |
#20 |
Участник
|
Global::inRange(), хотя если есть "динамический фильтр", то, наверно, есть и запрос, и лучше использовать запрос, а не пытаться его расковырять и анализировать "вручную".
|
|
Теги |
runbasereport, диалог, динамическая форма, периодическая операция, программно |
|
|