|
Как перебрать все строки динамического списка? | ☑ | ||
---|---|---|---|---|
0
megabax
21.04.15
✎
10:56
|
Подскажите пожалуйста, как перебрать все строки динамического списка?
|
|||
1
D_E_S_131
21.04.15
✎
11:02
|
Почему нужно перебирать именно строки дин.списка? Больше нечего что ли в базе перебрать?
|
|||
2
megabax
21.04.15
✎
11:38
|
(1) Потому что стоит задача: написать универсальную обработину, в которой при помощи универсаьных фильтров сделает отбор объектов, а потом с ними деаються определенные действия. Дя универсаьности я решил применить динамический список, так как там ножно настроить фильтр и это достаочно универсально.
|
|||
3
Живой Ископаемый
21.04.15
✎
11:41
|
ну раз у тебя есть отборы, то стало быть ты можешь по ним построить запрос, в который попадет все то, что попадает в динамический список
|
|||
4
megabax
21.04.15
✎
11:44
|
(3) И как же мне по этим отборам построить запрос? Мне что, теперь перебирать все установенне поьзоватеем отборы и динамиечески фомрировать текст запроса? ии как?
|
|||
5
Живой Ископаемый
21.04.15
✎
11:47
|
в 8.3.6 расширили объектную модель запроса
|
|||
6
eklmn
гуру
21.04.15
✎
11:48
|
(4) нет, просто правильный запрос сделать и все
|
|||
7
megabax
21.04.15
✎
11:50
|
(6) Что значит правильный запрос?
|
|||
8
tushich
21.04.15
✎
11:51
|
(0) Пойди от обратного. Добавь таблицу значений и прикрути к ней скд.
|
|||
9
Фрэнки
21.04.15
✎
11:51
|
(4) попробуй вот так, например:
Построитель = Новый ПостроительЗапроса; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДокументСписок); Выборка = Построитель.Результат.Выбрать(); Пока Выборка.Следующий() Цикл |
|||
10
megabax
21.04.15
✎
11:54
|
(9) Уже пробовал.
Сделал вот так: Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Список); Выборка = Построитель.Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Ссылка); КонецЦикла; пишет: "{Форма.Форма.Форма(28)}: Ошибка при вызове конструктора (ОписаниеИсточникаДанных) Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Список); по причине: Несоответствие типов (параметр номер '1')" Сделал так: Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Элементы.Список); Выборка = Построитель.Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Ссылка); КонецЦикла; тоже самое |
|||
11
AntonH851
21.04.15
✎
11:55
|
(9)
Синтаксис: Новый ОписаниеИсточникаДанных(<ИсточникДанных>) Параметры: <ИсточникДанных> (обязательный) Тип: ТаблицаЗначений; РезультатЗапроса; ОбластьЯчеекТабличногоДокумента. Описываемый источник данных. Из динамического списка источник не умеет же делать |
|||
12
Фрэнки
21.04.15
✎
12:12
|
Не построитель отчета, а построитель Запроса. Там какие-то отличия между ними есть.
И в источник я ставил данные, которые указаны были в качестве значения параметра "Данные" у табличного поля. Т.е. в Описание источника данных надо не название Элемента формы, а ссылку на Данные, которые отобразил динамический список. |
|||
13
megabax
21.04.15
✎
12:20
|
(12) У Динамического списка нету поля Данные.
|
|||
14
megabax
21.04.15
✎
12:23
|
Попробовал создать отчет на СКД, создал в нем команду, сделал в ней так:
Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Результат); Выборка = Построитель.Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Ссылка); КонецЦикла; Тоже самое. Как еще можно орагнизовать выборку строк из какой нибудь универсаьной фигни? |
|||
15
megabax
21.04.15
✎
12:50
|
up
|
|||
16
DrShad
21.04.15
✎
12:55
|
(14) ВыделенныеСтроки
|
|||
17
megabax
21.04.15
✎
12:56
|
(16) Там массив с номерами строк. А как к самой то строке обратиться по ее номеру (в динамическом списке)?
|
|||
18
fisher
21.04.15
✎
12:56
|
Под УФ нормальное решение только в 8.3.6 запилили.
Под обычными - через построитель запроса. |
|||
19
DrShad
21.04.15
✎
12:59
|
(17) это не номера строк, а их ИД
обратиться потом через ПолучитьПоИдентификатору() |
|||
20
DrShad
21.04.15
✎
13:01
|
кроме того Выделенные строки доступен для записи, а не только на чтение
|
|||
21
megabax
21.04.15
✎
13:05
|
(19) У динамического списка нету поучить по идентифкатору
|
|||
22
sapphire
21.04.15
✎
13:08
|
(2) Ну и глупец. Используй СКД.
|
|||
23
megabax
21.04.15
✎
13:12
|
(22) А не поделитесь примером как перебрать все строки из отчета СКД?
|
|||
24
megabax
21.04.15
✎
13:13
|
Сделал вот так вот так (в отчете на СКД):
Построитель = Новый ПостроительОтчета; Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(Результат.ТекущаяОбласть); Выборка = Построитель.Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Ссылка); КонецЦикла; теперь выдает {Отчет.УниверсаьнаяОбработка.Форма.ФормаОтчета.Форма(6)}: Ошибка при получении значения атрибута контекста (Результат) Выборка = Построитель.Результат.Выбрать(); по причине: {(1, 1)}: Ожидается выражение "ВЫБРАТЬ" |
|||
25
Фрэнки
21.04.15
✎
13:23
|
(24) он не смог в построителе отчета сгенерить запрос. В запросе не оказалось выражения Выбрать.
|
|||
26
megabax
21.04.15
✎
13:36
|
(25) А делать то теперь что?
|
|||
27
megabax
21.04.15
✎
13:37
|
Пробовал еще так:
сообщить(Результат.ПолучитьОбласть(1,1,1,1)); Резуьтат - это табичный документ где результа работы СКД. Но Результат.ПолучитьОбласть(1,1,1,1) возвращает еще один табличный документ. А как до самой ячейки то добарться? Еси я пишу Результат.ПолучитьОбласть(1,1,1,1).Значение то значение ндоступно для чение? и что тепреь делать? |
|||
28
Фрэнки
21.04.15
✎
13:41
|
Может быть у готового СКД есть такое:
ПроцессорКомпоновкиДанных (DataCompositionProcessor) Методы: Инициализировать (Initialize) Сбросить (Reset) Следующий (Next) |
|||
29
sapphire
21.04.15
✎
13:41
|
(23) Не из отчета, а из ДереваЗначений
|
|||
30
sapphire
21.04.15
✎
13:42
|
Функция ПолучитьРезультатКомпоновки(Режим=Ложь,Результат=неопределено,МакетКомпоновки,Настройки=неопределено,ВнешниеДанные=неопределено,МакетОформления=неопределено,ПоказыватьВывод=Ложь) Экспорт
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; ДанныеРасшифровки= Новый ДанныеРасшифровкиКомпоновкиДанных; МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(МакетКомпоновки ,?(Настройки=неопределено,МакетКомпоновки.НастройкиПоУмолчанию,Настройки) //Настройки ,ДанныеРасшифровки //Расшифровка ,МакетОформления //МакетОформления ,?(Режим,неопределено,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")) ); //МакетКомпоновкиДанных.ЗначенияПараметров.Очистить(); //ЗначениеСсылка=Новый ЗначениеПараметраМакетаКомпоновкиДанных(); // ////"Ссылка",Справочники.ОперативныеПериоды.НайтиПоКоду(Лев(""+НачалоМесяца(Объект.Дата),10)) //МакетКомпоновкиДанных.ЗначенияПараметров.Добавить(); //МакетКомпоновкиДанных.ЗначенияПараметров.Добавить("ДанныеПроверки",Объект.Ссылка); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных,ВнешниеДанные); ПроцессорВывода =?(Режим,Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент, Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений) ; Если Не Результат=неопределено Тогда Если Режим Тогда ПроцессорВывода.УстановитьДокумент(Результат); Иначе ПроцессорВывода.УстановитьОбъект(Результат); КонецЕсли; КонецЕсли; возврат ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных,ПоказыватьВывод); КонецФункции |
|||
31
DrShad
21.04.15
✎
13:45
|
Элементы.СправочникСписокУТ.ВыделенныеСтроки.Очистить();
Запрос = Новый Запрос; Запрос.Текст = "Выбрать ТАБ.Ссылка ИЗ " + СправочникСписокУТ.ОсновнаяТаблица + " КАК ТАБ ГДЕ НЕ Таб.ссылка в (&МассивСсылок)"; Запрос.УстановитьПараметр("МассивСсылок", СправочникСписокБПКОРП.Выгрузить().ВыгрузитьКолонку("Ссылка")); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Элементы.СправочникСписокУТ.ВыделенныеСтроки.Добавить(Выборка.Ссылка); КонецЦикла; |
|||
32
DrShad
21.04.15
✎
13:46
|
&НаСервере
Процедура ЗарегистрироватьИзмененияДляВыделенныхСервер() Для каждого Ссылка из Элементы.СправочникСписокУТ.ВыделенныеСтроки Цикл ПланыОбмена.ЗарегистрироватьИзменения(Объект.УзелОбмена, Ссылка); КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |