AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.08.2006, 11:24   #1  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Выделенные записи на форме в отчёт/форму
Доброго времени суток, уважаемые Дамы и Господа!!! Вопрос состоит в следующем.
На моей форме есть грид. Выбираю на гриде несколько записей и нажимаю (например) кнопку "В отчёт", Эта кнопка - меню итем от моего отчёта.На кнопке указан датасорс грида(формы).Как мне в отчёте перебрать по очереди эти записи и что то с ними сделать...?

С уважением - Sada...
Старый 23.08.2006, 11:38   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Где-то так
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();
        }
    }
PS Если в датасорсе выбрана только одна строка, то getFirst(1) вернет пустую запись. В этом случае надо использовать this.args().record();
__________________
Axapta v.3.0 sp5 kr2

Последний раз редактировалось AndyD; 23.08.2006 в 11:49. Причина: Дополнение
Старый 23.08.2006, 11:57   #3  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Почиму то таблица не та берется. Мне нада пройтись по строкам (мой грид)(таблица InventJournalTrans), а в С пишет InventJournalTable...
Старый 23.08.2006, 12:14   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Наверное, ваш датасоурс не первый на форме. Модернизируем
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))));
        }
И пропишите нужный вам датасоурс в свойство Datasource кнопки - тогда args().record() гарантированно вернет вам нужную запись
__________________
Axapta v.3.0 sp5 kr2
Старый 23.08.2006, 12:21   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Ловите.

Все работает прекрасно.

Уф-ф-ф. Хоть программирование немного вспомнил

Георгий.
Вложения
Тип файла: xpo Tutorial4Sada (1).xpo (54.8 Кб, 491 просмотров)
За это сообщение автора поблагодарили: Geo (1).
Старый 23.08.2006, 12:23   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Там все очень просто: нарисовал формочку и отчет по CustTable, сделал менюайтем, разрешил на нем мультиселект. По нажатию открывается отчет, в котором перекрыт фетч. На фетче берется родительский датасорс и идет перебор по выделенным записям. Просто, как и все гениальное

С Уважением,
Георгий
Старый 23.08.2006, 12:32   #7  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Блин. Sada!

А что Вы мозги-то тренируете? Почему пользователи не могут выделить записи и нажать, например - автоотчет?

Группа полей для автоотчета задается на таблице.

С Уважением,
Георгий
Старый 23.08.2006, 12:34   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Секунду, секунду. Сейчас будем смотреть
Старый 23.08.2006, 13:09   #9  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Ё маё.... И AndyD прав и George Nordic.
Пашол увальнятся...
Старый 22.12.2008, 12:56   #10  
Kopylov is offline
Kopylov
Участник
 
5 / 11 (1) +
Регистрация: 28.02.2006
Помогите, срочно нада.
Цитата:
Сообщение от Sada Посмотреть сообщение
Доброго времени суток, уважаемые Дамы и Господа!!! Вопрос состоит в следующем.
На моей форме есть грид. Выбираю на гриде несколько записей и нажимаю (например) кнопку "В отчёт", Эта кнопка - меню итем от моего отчёта.На кнопке указан датасорс грида(формы).Как мне в отчёте перебрать по очереди эти записи и что то с ними сделать...?

С уважением - Sada...
А ктонить знает как вывести выбранные записи не в отчет, а на другой форме?
Пример: на форме SalesTable выбираем несколько строк, затем нажимаем на кнопку "Выбранные" , открывается форма только с выбранными строками.
Старый 22.12.2008, 13:05   #11  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
По нажатию на кнопку "Выбранные" передаем датасорс в нужную вам форму, пробегаемся по нему циклом типа
X++:
for (c=fds.getFirst(1) ? fds.getFirst(1) : this.args().record();
В цикле уже заполняем датасорс(обычно при таком поведении временный) нужной формы..
Старый 22.12.2008, 13:15   #12  
Kopylov is offline
Kopylov
Участник
 
5 / 11 (1) +
Регистрация: 28.02.2006
Цитата:
Сообщение от DSPIC Посмотреть сообщение
В цикле уже заполняем датасорс(обычно при таком поведении временный) нужной формы..

Собсно интересует заполнение в цикле
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  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Датасорс на второй форме какой? такой же как и на первой?
Что должно происходить далее с этими выделенными записями на 2й форме, после того как они нарисуются? просто их показать и закрыть форму?
Старый 22.12.2008, 13:27   #14  
Kopylov is offline
Kopylov
Участник
 
5 / 11 (1) +
Регистрация: 28.02.2006
Вторая форма также состоит из 3х датасорсов: SalesTable, SalesLine, InventDim.
Форма самописная, дизайном отличается от формы заказов. На ней так же должны быть возможны манипуляции со строками заказов
Старый 22.12.2008, 13:44   #15  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится...
Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом"
Старый 22.12.2008, 13:50   #16  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится...
Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом"
Один рэндж длиной максимум 250 символов.
Правда никто не мешает делать их (рэнджей) несколько...
__________________
Zhirenkov Vitaly
Старый 22.12.2008, 14:00   #17  
Kopylov is offline
Kopylov
Участник
 
5 / 11 (1) +
Регистрация: 28.02.2006
Цитата:
Сообщение от DSPIC Посмотреть сообщение
по-простому сделать не пулучится...
Жаль...
ладна, буим делать по сложному

Спасибо всем по-соучаствующим.
Старый 22.12.2008, 14:14   #18  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1234 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Один рэндж длиной максимум 250 символов.
Правда никто не мешает делать их (рэнджей) несколько...
Может прозвучит нелогично, но помнится, когда я с этим экспериментировал, получалось ограничение именно на количество рэнджей, а не на длину в 250 символов. При этом было не важно, сколько самих рэнджей на одно поле наложить:
(2x125 или 1x250) - если в сумме получалась магическая цифра немногим больше 250 то запрос не проходил... Точно не могу утверждать - давно было, и не помню - в 3-ке или 4ке. Нужно повторять эксперимент...
Старый 22.12.2008, 15:03   #19  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Может прозвучит нелогично, но помнится, когда я с этим экспериментировал, получалось ограничение именно на количество рэнджей, а не на длину в 250 символов. При этом было не важно, сколько самих рэнджей на одно поле наложить:
(2x125 или 1x250) - если в сумме получалась магическая цифра немногим больше 250 то запрос не проходил... Точно не могу утверждать - давно было, и не помню - в 3-ке или 4ке. Нужно повторять эксперимент...
И на 3-ке и на 4-ке такого эффекта никогда не замечал, хотя недавно вплотную этим занимался. Счас специально проверил и там, и там - 3 рэнджа по 250 символов в каждом отлично отрабатывают в фильтре.
__________________
Zhirenkov Vitaly
Старый 22.12.2008, 15:08   #20  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Kopylov Посмотреть сообщение
Вторая форма также состоит из 3х датасорсов: SalesTable, SalesLine, InventDim.
Форма самописная, дизайном отличается от формы заказов. На ней так же должны быть возможны манипуляции со строками заказов
Забавно, а что они не могут выбрать эти записи сразу на второй форме?

Если нет, то может вам их стоит рассмотреть вариант просто как-то помечать в стандартной форме (поле например завести какое-то с номером текущей сессии, есть много разных вариантов), а потом открывать во "второй" форме уже помеченные_нужным_образом записи.
Не скажу, что это очень красиво, но возможно вам понравится.
__________________
Zhirenkov Vitaly
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму SysPrintForm? rkorchagin DAX: Программирование 10 17.04.2008 11:59
Вывод в форме "Авансовый отчет" (EmplAdvTable_RU) полей из EmplTable Zepp DAX: Программирование 5 20.06.2007 15:44
Как в форме CustTrans через query отобрать записи у которых AmountCur != 0 ( когда в QueryBuildRange ставишь value(strFmt('!0')); - не работает!) rkorchagin DAX: Программирование 12 02.04.2007 17:58
Как из формы Form2 обновить записи на форме Form1? Hidden DAX: Функционал 15 24.05.2005 11:53
Уже существующий query подложить под форму или отчет? somebody DAX: База знаний и проекты 6 27.05.2003 15:13
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 02:32.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.