|   |   | 
| 
 | Как перебрать все строки динамического списка? | ☑ | ||
|---|---|---|---|---|
| 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 | 
        &НаСервере
 Процедура ЗарегистрироватьИзмененияДляВыделенныхСервер() Для каждого Ссылка из Элементы.СправочникСписокУТ.ВыделенныеСтроки Цикл ПланыОбмена.ЗарегистрироватьИзменения(Объект.УзелОбмена, Ссылка); КонецЦикла; КонецПроцедуры | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |