Имя: Пароль:
1C
 
Динамический список в 8.2
0 Poky
 
06.06.11
10:12
Нужна помощь с 8.2. У меня есть форма списка (динамический список). Как можно програмного перебрать строки этого списка. В нем могут быть отборы и т.п.
1 Poky
 
06.06.11
10:24
Ап
2 Dzenn
 
гуру
06.06.11
10:26
попробуй закрыть и <зачеркнуто>открыть</зачеркнуто> больше не открывать конфигуратор
3 Poky
 
06.06.11
10:29
(2) Лучше б по существу вопроса помогли...
4 Поручик
 
06.06.11
10:31
Выделенные строки можешь перебрать.
5 Poky
 
06.06.11
10:33
(4) Выделенные - это понятно. Но как-то не хорошо каждый раз просить пользователя выделять все строки.
6 3V
 
06.06.11
10:33
сталкивался с подобной задачей
получаешь все отборы которые используются для вывода этого списка, формируешь запрос по данным отбора и перебираешь на здоровье, т.к. сам список не содержит толком набора строк
ЗЫ могу ошибаться
7 Poky
 
06.06.11
10:35
(6) "Формируешь запрос по данным отбора" - это как?
8 SerMaxim
 
06.06.11
10:35
Не уверен что работает в УФ, попробуй объект ПостроительЗапроса. В качестве источника кидай в него свой дин.список на форме.
9 3V
 
06.06.11
10:37
(7) в запрос вставляешь условия для отбора данных, которые у тебя выводятся в список, чтобы получить аналогичный список данных только уже в табличном варианте
(8) не уверен что взлетит
10 Poky
 
06.06.11
10:39
(8) Вы имеете ввиду это?

Построитель = Новый ПостроительОтчета;
Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Список);
Выборка = Построитель.Результат.Выбрать();
Пока Выборка.Следующий() Цикл
  Сообщить(Выборка.Ссылка);
КонецЦикла;

Не работает, пишет что параметр не верный ОписаниеИсточникаДанных(ДокументСписок)
11 SerMaxim
 
06.06.11
10:39
(10) ПостроительЗапроса
12 Poky
 
06.06.11
10:43
(11) Построитель запроса тоже не катит:

Ошибка при вызове конструктора (ОписаниеИсточникаДанных)
   Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Список);
по причине:
Несоответствие типов (параметр номер '1')
13 detec
 
06.06.11
10:44
(0) Если у тебя таблица с данными, которую нужно перебирать, то нельзя использовать динамический список. Создай в форме реквизит "Таблица Значений" и будут доступны методы обхода и пр.
14 Poky
 
06.06.11
10:48
(9) т.е. вручную обходить коллекцию элементов отбора компоновки данных и модифицировать запрос, добавляя в него условия?
Тогда точно так же нужно обходить и коллекцию значений параметров. И порядок применить тот же. И группировку.
15 Poky
 
06.06.11
10:51
(13) так для того чтобы обходить таблицу значений, ее сначала нужно заполнить данными точно таким же образом как и динамический список.
Используя те же отборы, параметры, порядок и группировки. А вот как это сделать?
16 Defender aka LINN
 
06.06.11
10:56
(15) Так же, как в (10), только использовать не Построитель, а СКД. Только вот нафига?
17 Poky
 
06.06.11
10:58
(15) Ну например надо распечатать документы, те которые в списке. Чтобы не в каждый заходить а групповой обработкой.

А как привинтить все это к СКД? Скиньте примерчик пожалуйста.
18 Defender aka LINN
 
06.06.11
11:04
(17) Рекурсивно обойти отбор и скопировать.
19 Poky
 
06.06.11
11:08
(18) Рекурсивно? Тут без примерчика точно никак =)))

Вообще мне кажется эта задача довольно частая должна быть - странно что нет какого-то простого способа.
20 Defender aka LINN
 
06.06.11
11:26
(19) В типовых, во всяком случае в 8.1, есть процедура готовая: ТиповыеОтчеты.СкопироватьЭлементы
21 Reaper_1c
 
06.06.11
11:34
(17) А нажать ctrl+A и вызвать команду печати уже не православно?
22 Defender aka LINN
 
06.06.11
12:12
(17) Выделяешь и тыкашь команду печати. ВНЕЗАПНО, да?
23 Poky
 
06.06.11
12:35
Итак резюме.

Делал в конфигурации Управление торговлей, редакция 11.0 (11.0.6.7) через СКД.

Список - наш динамический список, доступный в контексте модуля формы на сервере

СхемаКомпоновки = Новый СхемаКомпоновкиДанных();

Источник = СхемаКомпоновки.ИсточникиДанных.Добавить();
Источник.Имя = "Источник1";
Источник.СтрокаСоединения="";
Источник.ТипИсточникаДанных = "local";

НаборДанных = СхемаКомпоновки.НаборыДанных.Добавить(Тип("НаборДанныхЗапросСхемыКомпоновкиДанных"));

Если Список.ПроизвольныйЗапрос Тогда
   НаборДанных.Запрос = Список.ТекстЗапроса;
Иначе
   НаборДанных.Запрос = "ВЫБРАТЬ
                    |    *
                    |ИЗ
                    |    " + Список.ОсновнаяТаблица;
КонецЕсли;

НаборДанных.Имя = "Запрос";
НаборДанных.АвтоЗаполнениеДоступныхПолей = Истина;
НаборДанных.ИсточникДанных = "Источник1";

НастройкиКомпоновки = МобильныеПриложения.СкомпоноватьНастройки(СхемаКомпоновки);

ОбщегоНазначенияУТКлиентСервер.СкопироватьЭлементы(НастройкиКомпоновки.Отбор, Список.Отбор);
ОбщегоНазначенияУТКлиентСервер.СкопироватьЭлементы(НастройкиКомпоновки.Порядок, Список.Порядок);

МакетКомпоновки = ОбщегоНазначенияУТ.ПолучитьМакетКомпоновки(СхемаКомпоновки, НастройкиКомпоновки);

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);

ТЗ = Новый ТаблицаЗначений;

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТЗ);
ПроцессорВывода.НачатьВывод();

Пока Истина Цикл
   
   ЭлементРезультатаКомпоновкиДанных = ПроцессорКомпоновкиДанных.Следующий();
   
   Если ЭлементРезультатаКомпоновкиДанных = Неопределено Тогда
       Прервать;
   КонецЕсли;
   
   ПроцессорВывода.ВывестиЭлемент(ЭлементРезультатаКомпоновкиДанных);
   
КонецЦикла;

ПроцессорВывода.ЗакончитьВывод();

// ну и далее можем обходить ТЗ и делать что нам нужно: печатать, перепроводить, изменять реквизит и т.п.