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