Имя: Пароль:
1C
 
ДокументСписок. Количество. ОФ
0 nAPACEHAK
 
26.09.25
12:15
Доброго

На форму выведен список. тип ДокументСписок

Могу я как нибудь получить количество элементов списка?

1. Устанавливаем отбор в списке
2. Получим все что есть, с учетом отборов
Источник =  Новый ОписаниеИсточникаДанных(Список);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = Источник;
ПостроительОтчета.Выполнить();
ПостроительОтчета.Результат = ...

3. Проблемм. Если я не установлю отборы то в построитель улетит все 2млн строк таблицы, и пока он там выполняется можно не только чая напиться, но и чего покрепче

Хотелось бы перед выполнением построителя ругнуться что то типа "дофига элементов отобрано". как то перебрать элементы и если их больше 100 то нафиг. или что то типа первые 100 или еще какую матерную переменную заполнить

Спасибо
1 craxx
 
26.09.25
12:21
(0) "Хотелось бы перед выполнением построителя ругнуться что то типа "дофига элементов отобрано". "
Хотелось - ругнись. Разрешаю.
2 nAPACEHAK
 
26.09.25
12:39
(1) Спасибо за разрешение. А то я уж испереживался, как же я без него
А по существу и без флуда слабо?
3 Волшебник
 
26.09.25
12:42
используйте запрос с ВЫБРАТЬ ПЕРВЫЕ 100
4 maxab72
 
26.09.25
12:44
(2) Теоретически можно вытащить из Настроек построителя отборы, самому сформировать запрос по ним, получить количество строк в результате запроса и далее ругаться, анализировать, и вообще делать что угодно до ПостроительОтчета.Выполнить();
5 nAPACEHAK
 
26.09.25
12:57
(3) а куда его прикрутить?
была мысль выдернуть из построителя запрос и обработать его, но в построителе - ИсточникДанных. и потому ПолучитьЗапрос() не работает

(4) Настройки = ПостроительОтчета.ПолучитьНастройки();
Непонятно что с этим делать. СП радует
6 Галахад
 
гуру
26.09.25
13:09
Зачем из построителя получать настройки, когда источник "Список"?
7 nAPACEHAK
 
26.09.25
13:32
(6)
эмм... поправьте если не в ту сторону думаю....
это из список.отборы получаем которые используются
Потом человечий запрос к таблице с доками где тип дока такой же как в документсписок
что то типа выбрать количетво различные ссылка из документы.пустьбудетзаказ где накидаем условий из отбора....

выборка.количество() = то что нам надо для ругани

как то так?
8 youalex
 
26.09.25
13:43
(7) выборка.количество() - у тебя опять все доки будут.

Можно по идее, в Построитель.Текст =
"ВЫБРАТЬ Количество(*) Количество ИЗ Документ.ТвойДок"

И отбор из списка перекинуть в построитель
9 nAPACEHAK
 
26.09.25
13:58
(8) ну да, все доки. только с учетом установленных отборов из ДокументСписок
из документы.пустьбудетзаказ где накидаем условий из отбора....

или я чот не туда полез?

а в Построитель.Текст разве прокатит?
я из этого исхожу: Источник =  Новый ОписаниеИсточникаДанных(Список);
ПолучитьЗапрос (GetQuery)
Синтаксис:
ПолучитьЗапрос()
Описание:
Получить запрос для выполнения отчета.
Данный метод недоступен в случае, если установлено свойство ИсточникДанных.
10 youalex
 
26.09.25
14:09
(9) ПолучитьЗапрос() - Это все не нужно, ты можешь сразу из построителя получить результат.

>я из этого исхожу: Источник =  Новый ОписаниеИсточникаДанных(Список);
Ты же от этого хочешь уйти т.к медленно

>а в Построитель.Текст разве прокатит?
Попробуй.
11 nAPACEHAK
 
26.09.25
14:33
(9) прокатывает но не так как хотелось бы :)
при такой строке
Источник =  Новый ОписаниеИсточникаДанных(Список);
ПостроительОтчета = Новый ПостроительОтчета;
ПостроительОтчета.ИсточникДанных = Источник;
ПостроительОтчета.Текст = "ВЫБРАТЬ Количество(*) КАК Количество ИЗ Документ.ЗаказПокупателя";
ПостроительОтчета.Выполнить();

в результате я получу количество всех доков в таблице без учета отборов, все 2млн

т.е., получается что тут опять надо считывать установленные отборы и добавлять их в ГДЕ, как предполагалось в (7). ну и в принципе для этого запроса построитель получается лишний, т.к. он тогда не учитывает ИсточникДанных

ПолучитьЗапрос() - Это все не нужно, ты можешь сразу из построителя получить результат.
да, могу. но (0) если я не установлю отборы , то очень долго я всё это добро получать буду
12 youalex
 
26.09.25
14:58
(11) да не в ГДе, а в сам построитель скопируй их поэлементно.

Но просто текст не получится (думал что построитель автоматически добавляет возможные отборы), нужно получается динамически их добавлять в {ГДЕ}

Добавлять можно из Метаданные.Документ.ЗаказПокупателя.Реквизиты например + стандартные реквизиты.

Или из ДокументСписок.Отбор (но там еще могут быть критерии отбора)
13 nAPACEHAK
 
26.09.25
15:05
(12) ))))))
ну походу задача свелась так:
1. нафиг построителя
2. формируем запрос. в ГДЕ динамически пихаем то что есть в отборах у ДокументСписок
3. Выполняем запрос с группировкой по количеству
4. ругаемся или нет
5. если не ругаемся - тот же самый запрос но уже с выбором полей (ссылка, т.к. по факту от ДокСписок она и нужна)
14 Волшебник
 
26.09.25
15:07
А не проще отказаться от динамического списка, а выбирать порцию по N элементов + пагинатор?
15 nAPACEHAK
 
26.09.25
15:25
(14)

Примерно такая задача: Пользователь выбирает элементы для дальнейшей обработки. тут примерно набросал, как более менее подходящий пример, галки с флагами установить/снять все.
если отборами я ограничу ДокументСписок - то все ок
если просто ткну без отборов - то всё становится печально.

может я как то не с той стороны подошел к решению?

тут аля дин.список(ДокументСписок) + к нему колонка прикручена
Колонка                     = ЭлементыФормы.Список.Колонки.Вставить(0, "");
16 nAPACEHAK
 
26.09.25
15:31
мне больше нравится вариант - открыл список значений, накидал в него из списка выбора и получил нужные ссылки выбором, но упёрлись на галки :(
17 nAPACEHAK
 
26.09.25
17:05
* Для истории
Адекватного решения не нашлось :(
по задаче было принято решение установить необходимый минимум обязательных отборов и плясать от него


Всем спасибо.

З.Ы. Если появятся идеи - накидывайте ;)
Основная теорема систематики: Новые системы плодят новые проблемы.