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 / 2499 (89) +++++++++
Регистрация: 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 / 2499 (89) +++++++++
Регистрация: 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,480 / 1256 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Ловите.

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

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

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

С Уважением,
Георгий
Старый 23.08.2006, 12:32   #7  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,480 / 1256 (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 / 1243 (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 / 1243 (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 / 1243 (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 (0) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится...
Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом"
Один рэндж длиной максимум 250 символов.
Правда никто не мешает делать их (рэнджей) несколько...
Старый 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 / 1243 (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 (0) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Может прозвучит нелогично, но помнится, когда я с этим экспериментировал, получалось ограничение именно на количество рэнджей, а не на длину в 250 символов. При этом было не важно, сколько самих рэнджей на одно поле наложить:
(2x125 или 1x250) - если в сумме получалась магическая цифра немногим больше 250 то запрос не проходил... Точно не могу утверждать - давно было, и не помню - в 3-ке или 4ке. Нужно повторять эксперимент...
И на 3-ке и на 4-ке такого эффекта никогда не замечал, хотя недавно вплотную этим занимался. Счас специально проверил и там, и там - 3 рэнджа по 250 символов в каждом отлично отрабатывают в фильтре.
Старый 22.12.2008, 15:08   #20  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 246 (0) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Цитата:
Сообщение от Kopylov Посмотреть сообщение
Вторая форма также состоит из 3х датасорсов: SalesTable, SalesLine, InventDim.
Форма самописная, дизайном отличается от формы заказов. На ней так же должны быть возможны манипуляции со строками заказов
Забавно, а что они не могут выбрать эти записи сразу на второй форме?

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

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как получить указатель на отчёт когда пользователь выбрал Печать на принтер в просмотрщике, в форму 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, время: 13:33.