| 
			
			 | 
		#1 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
			
			
			Выделенные записи на форме в отчёт/форму
			 
			
			Доброго времени суток, уважаемые Дамы и Господа!!! Вопрос состоит в следующем.  
		
		
		
		
		
		
		
	На моей форме есть грид. Выбираю на гриде несколько записей и нажимаю (например) кнопку "В отчёт", Эта кнопка - меню итем от моего отчёта.На кнопке указан датасорс грида(формы).Как мне в отчёте перебрать по очереди эти записи и что то с ними сделать...? С уважением - Sada...  | 
| 
	
 | 
| 
			
			 | 
		#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. Причина: Дополнение  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Почиму то таблица не та берется. Мне нада пройтись по строкам (мой грид)(таблица InventJournalTrans), а в С пишет InventJournalTable...
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#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  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ловите. 
		
		
		
			Все работает прекрасно. Уф-ф-ф. Хоть программирование немного вспомнил ![]() Георгий.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Geo (1). | |
| 
			
			 | 
		#6 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Там все очень просто: нарисовал формочку и отчет по CustTable, сделал менюайтем, разрешил на нем мультиселект. По нажатию открывается отчет, в котором перекрыт фетч. На фетче берется родительский датасорс и идет перебор по выделенным записям. Просто, как и все гениальное  
		
		
		
		
		
		
		
	![]() С Уважением, Георгий  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Модератор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Блин. Sada! 
		
		
		
		
		
		
		
	А что Вы мозги-то тренируете? Почему пользователи не могут выделить записи и нажать, например - автоотчет? ![]() Группа полей для автоотчета задается на таблице. С Уважением, Георгий  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Секунду, секунду. Сейчас будем смотреть 
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Программатор 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Ё маё.... 
		
		
		
		
		
		
		
	   И AndyD прав и George Nordic.  Пашол увальнятся...  
		 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Помогите, срочно нада.
			 Цитата: 
	
		
			Сообщение от Sada
			 
 
			Доброго времени суток, уважаемые Дамы и Господа!!! Вопрос состоит в следующем.  
		
	На моей форме есть грид. Выбираю на гриде несколько записей и нажимаю (например) кнопку "В отчёт", Эта кнопка - меню итем от моего отчёта.На кнопке указан датасорс грида(формы).Как мне в отчёте перебрать по очереди эти записи и что то с ними сделать...? С уважением - Sada... Пример: на форме SalesTable выбираем несколько строк, затем нажимаем на кнопку "Выбранные" , открывается форма только с выбранными строками.  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По нажатию на кнопку "Выбранные" передаем датасорс в нужную вам форму, пробегаемся по нему циклом типа  
		
		
		
		
		
		
		
	X++: for (c=fds.getFirst(1) ? fds.getFirst(1) : this.args().record(); | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Собсно интересует заполнение в цикле X++:     SalesTable      table;
    ;
    super();
 
    fds = caller.dataSource();
 
    for (table = fds.getFirst(1) ? fds.getFirst(1) : fds.cursor();
         table;
         table = fds.getNext())
    {
        // чевототам
    } | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: wojzeh (1). | |
| 
			
			 | 
		#13 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Датасорс на второй форме какой? такой же как и на первой?  
		
		
		
		
		
		
		
	Что должно происходить далее с этими выделенными записями на 2й форме, после того как они нарисуются? просто их показать и закрыть форму?  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вторая форма также состоит из 3х датасорсов: SalesTable, SalesLine, InventDim. 
		
		
		
		
		
		
		
	Форма самописная, дизайном отличается от формы заказов. На ней так же должны быть возможны манипуляции со строками заказов  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится... 
		
		
		
		
		
		
		
	Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом"  
		 | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
		
			Сообщение от DSPIC
			 
 
			Мдя, это не гуд. И если правильно, то по-простому сделать не пулучится... 
		
	Выкрутиться можно так: Собрать из 1й формы все выделенные записи, а вернее собрать их RecId (Надеюсь выделяться будут только записи из SalesTable...). Во второй форме наложить фильтр (Range)на кверю по собранным RecId. Такой подход хорош простотой и надежностью, но плох тем, что в Range не поулчится наложить критериев (RecId's) больше чем... вроде 255 с чем-то - не помню точно. Т.е. при этом подходе пользователь сможет выделить не больше ~255 записей в один заход. Зато просто, надежно, быстро... + можно ему месагу кинуть, типо "выдели строк по-меньше, остальные другим заходом" ![]() Правда никто не мешает делать их (рэнджей) несколько... 
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Один рэндж длиной максимум 250 символов. 
Правда никто не мешает делать их (рэнджей) несколько... (2x125 или 1x250) - если в сумме получалась магическая цифра немногим больше 250 то запрос не проходил... Точно не могу утверждать - давно было, и не помню - в 3-ке или 4ке. Нужно повторять эксперимент...  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
		
			Сообщение от DSPIC
			 
 
			Может прозвучит нелогично, но помнится, когда я с этим экспериментировал, получалось ограничение именно на количество рэнджей, а не на длину в 250 символов. При этом было не важно, сколько самих рэнджей на одно поле наложить: 
		
	(2x125 или 1x250) - если в сумме получалась магическая цифра немногим больше 250 то запрос не проходил... Точно не могу утверждать - давно было, и не помню - в 3-ке или 4ке. Нужно повторять эксперимент... 
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 MCITP 
		
			
	 | 
	
	
	
		
		
			
			 Цитата: 
	
![]() Если нет, то может вам их стоит рассмотреть вариант просто как-то помечать в стандартной форме (поле например завести какое-то с номером текущей сессии, есть много разных вариантов), а потом открывать во "второй" форме уже помеченные_нужным_образом записи. Не скажу, что это очень красиво, но возможно вам понравится.  
		
				__________________ 
		
		
		
		
	Zhirenkov Vitaly  | 
| 
	
 | 
| 
	
	 | 
	
		
		
  |