|
23.08.2006, 11:24 | #1 |
Программатор
|
Выделенные записи на форме в отчёт/форму
Доброго времени суток, уважаемые Дамы и Господа!!! Вопрос состоит в следующем.
На моей форме есть грид. Выбираю на гриде несколько записей и нажимаю (например) кнопку "В отчёт", Эта кнопка - меню итем от моего отчёта.На кнопке указан датасорс грида(формы).Как мне в отчёте перебрать по очереди эти записи и что то с ними сделать...? С уважением - Sada... |
|
23.08.2006, 11:38 | #2 |
Участник
|
Где-то так
X++: FormRun fr; FormDatasource fds; Common c; ; fr = this.args().caller(); if (fr) { fds = fr.dataSource(); c=fds.getFirst(1); while (c) { // здесь делаете что вам надо с полученной записью c = fds.getNext(); } }
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 23.08.2006 в 11:49. Причина: Дополнение |
|
23.08.2006, 11:57 | #3 |
Программатор
|
Почиму то таблица не та берется. Мне нада пройтись по строкам (мой грид)(таблица InventJournalTrans), а в С пишет InventJournalTable...
|
|
23.08.2006, 12:14 | #4 |
Участник
|
Наверное, ваш датасоурс не первый на форме. Модернизируем
X++: FormDatasource fds; Common c; ; fds = this.args().record().dataSource(); if (fds) for (c=fds.getFirst(1) ? fds.getFirst(1) : this.args().record(); c;c=fds.getNext()) { info(int2str(c.(fieldnum(common, recId)))); }
__________________
Axapta v.3.0 sp5 kr2 |
|
23.08.2006, 12:21 | #5 |
Модератор
|
Ловите.
Все работает прекрасно. Уф-ф-ф. Хоть программирование немного вспомнил Георгий. |
|
|
За это сообщение автора поблагодарили: Geo (1). |
23.08.2006, 12:23 | #6 |
Модератор
|
Там все очень просто: нарисовал формочку и отчет по CustTable, сделал менюайтем, разрешил на нем мультиселект. По нажатию открывается отчет, в котором перекрыт фетч. На фетче берется родительский датасорс и идет перебор по выделенным записям. Просто, как и все гениальное
С Уважением, Георгий |
|
23.08.2006, 12:32 | #7 |
Модератор
|
Блин. Sada!
А что Вы мозги-то тренируете? Почему пользователи не могут выделить записи и нажать, например - автоотчет? Группа полей для автоотчета задается на таблице. С Уважением, Георгий |
|
23.08.2006, 12:34 | #8 |
Программатор
|
Секунду, секунду. Сейчас будем смотреть
|
|
23.08.2006, 13:09 | #9 |
Программатор
|
Ё маё.... И AndyD прав и George Nordic.
Пашол увальнятся... |
|
22.12.2008, 12:56 | #10 |
Участник
|
Помогите, срочно нада.
Цитата:
Сообщение от Sada
Доброго времени суток, уважаемые Дамы и Господа!!! Вопрос состоит в следующем.
На моей форме есть грид. Выбираю на гриде несколько записей и нажимаю (например) кнопку "В отчёт", Эта кнопка - меню итем от моего отчёта.На кнопке указан датасорс грида(формы).Как мне в отчёте перебрать по очереди эти записи и что то с ними сделать...? С уважением - Sada... Пример: на форме SalesTable выбираем несколько строк, затем нажимаем на кнопку "Выбранные" , открывается форма только с выбранными строками. |
|
22.12.2008, 13:05 | #11 |
Боец
|
По нажатию на кнопку "Выбранные" передаем датасорс в нужную вам форму, пробегаемся по нему циклом типа
X++: for (c=fds.getFirst(1) ? fds.getFirst(1) : this.args().record(); |
|
22.12.2008, 13:15 | #12 |
Участник
|
Цитата:
Собсно интересует заполнение в цикле X++: SalesTable table; ; super(); fds = caller.dataSource(); for (table = fds.getFirst(1) ? fds.getFirst(1) : fds.cursor(); table; table = fds.getNext()) { // чевототам } |
|
|
За это сообщение автора поблагодарили: wojzeh (1). |
22.12.2008, 13:21 | #13 |
Боец
|
Датасорс на второй форме какой? такой же как и на первой?
Что должно происходить далее с этими выделенными записями на 2й форме, после того как они нарисуются? просто их показать и закрыть форму? |
|
22.12.2008, 13:27 | #14 |
Участник
|
Вторая форма также состоит из 3х датасорсов: SalesTable, SalesLine, InventDim.
Форма самописная, дизайном отличается от формы заказов. На ней так же должны быть возможны манипуляции со строками заказов |
|
22.12.2008, 15:08 | #15 |
MCITP
|
Цитата:
Если нет, то может вам их стоит рассмотреть вариант просто как-то помечать в стандартной форме (поле например завести какое-то с номером текущей сессии, есть много разных вариантов), а потом открывать во "второй" форме уже помеченные_нужным_образом записи. Не скажу, что это очень красиво, но возможно вам понравится.
__________________
Zhirenkov Vitaly |
|
22.12.2008, 15:55 | #16 |
Боец
|
2 ZVV: можно взглянуть на код?
Проверил сам - получилось не более 476 критериев. + Проверил, тема обсуждалась (Поиск на форуме по "476" или "477") + см. вложение |
|
22.12.2008, 16:51 | #17 |
MCITP
|
Цитата:
Цитата:
Сообщение от DSPIC
Может прозвучит нелогично, но помнится, когда я с этим экспериментировал, получалось ограничение именно на количество рэнджей, а не на длину в 250 символов. При этом было не важно, сколько самих рэнджей на одно поле наложить:
(2x125 или 1x250) - если в сумме получалась магическая цифра немногим больше 250 то запрос не проходил... А обсуждаемая магическая цифра 476 (например тут соединить query и временную таблицу) - это уже ограничение несколько другого рода. И не на кол-во ренджей, как могло бы показаться, а на размер SQL-оператора, насколько я понимаю. Очевидно, ваш пример проверялся на сиквеле, где, помнится размер оператора максимальный 32К (могу ошибаться)? Ну вот оно где-то так и выходит, по моим прикидкам. На оракле это ограничение выше - 64К (для 9-ой версии, например). (Причём из документации по 10-ке и 11-ке данное ограничение вообще исчезло почему-то) Соответсвенно данный пример может отрабатывать с гораздо большим значением У меня например успешно отрабатывает такой джоб на оракле: X++: static void Job_QueryRangeLimit(Args _args) { Query query; QueryRun queryRun; QueryBuildDataSource qbds; QueryBuildRange qbr; int nextI; ; query = new Query(); qbds = query.addDataSource(tablenum(InventTable)); for (nextI = 1; nextI <= 1200 ; nextI++) { qbr = qbds.addRange(fieldNum(InventTable, ItemId)); qbr.value(queryValue(int2str(nextI))); } queryRun = new QueryRun(query); queryRun.next(); } Цитата:
ORA-00600: internal error code, arguments: [733], [36332372], [pga heap], [], [], [], [], []
Кстати, даже в этом случае (1200), размер SQL-оператора уходящего в БД превышает задекларированные 64к, но работает. Тестировал на 3.0сп3кр3 + Оракл 9208Вин
__________________
Zhirenkov Vitaly |
|
22.12.2008, 13:44 | #18 |
Боец
|
Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится...
Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом" |
|
22.12.2008, 13:50 | #19 |
MCITP
|
Цитата:
Сообщение от DSPIC
Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится...
Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом" Правда никто не мешает делать их (рэнджей) несколько...
__________________
Zhirenkov Vitaly |
|
22.12.2008, 14:00 | #20 |
Участник
|
|
|
|
|