Версия для печати темы (https://pro1c.org.ua/index.php?s=7f40922ab4cf8ccfb0d3552ba8fc42b8&showtopic=35486)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Выделить строки формы списка по фильтру (программное выделение строк списка)

Автор: Constantus 23.02.17, 11:22

Приветствую, форумчане!

УТ 10.3.20.1, Моби-С 5.5, "ABBYY Ukraine", обычные

Форма документа "Реализация". На форме можно отфильтровать документы по нужным параметрам.
Как спрашивал ранее про массовую печать (http://pro1c.org.ua/topic/massovaya-pechat-iz-formy-spiska-35459/?st=0&gopid=123325&#entry123325), массовую печать можно сделать, если выделить (множественный выбор) нужные документы в списке.

Можно ли как-нибуть выделить в форме списка все строки сразу после настройки фильтрации или как-нить передать параметры настройки фильтра в некую Процедуру, которая будет выделять строки программно попараметрам фильтра?

Автор: Flexy 23.02.17, 12:28

CTRL+A ?

Автор: Constantus 23.02.17, 12:47

Flexy @ Сегодня, 15:28 * ,

Хороший вариант, как его программно прописать?

Ситуация такая. На коде "Масовая печать" нужно перед печатью проверить включен ли фильтр (т.е. есть Отбор или нету). Далее, если включен Отбор (фильтр), то провести выделение всех отобранных строк и пустить печать.

Т.е. обезопасить себя на случай, если пользователь нажмет "Массовую печать" и пойдет печать огромного количества документов

Автор: Flexy 23.02.17, 12:55

Constantus @ Сегодня, 12:47 * ,
Зачем так сложно? Не проще что-то типа

Режим = РежимДиалогаВопрос.ДаНет;
Ответ = Вопрос("Выделенно больше 1000000 строк!!! Вы уверены, что их все надо печатать??? , Режим, 0);
Если Ответ = КодВозвратаДиалога.Нет Тогда
    Возврат;
КонецЕсли;


Проверка на есть отбор или нет - это имхо вообще ни о чем. Я могу установить отбор в списке где 2000 документов так, что в отборе у меня их будет 1999.

Автор: Constantus 23.02.17, 13:13

Понятно, но как тогда таки выделить отобранные фильтром строки???

Автор: Flexy 23.02.17, 13:18

Построитель = Новый ПостроительЗапроса;
    ЭлементыФормы.Список.ВыделенныеСтроки.Очистить();
        Источник = Новый ОписаниеИсточникаДанных(ДокументСписок);
    Построитель.ИсточникДанных = Источник;
    Построитель.Выполнить();
    Т = Построитель.Результат.Выгрузить();
    Для Каждого Строка Из Т Цикл
        ЭлементыФормы.Список.ВыделенныеСтроки.Добавить(Строка.Ссылка);
    КонецЦикла;

Автор: Constantus 24.02.17, 12:32

Flexy @ Вчера, 16:18 * ,


Куда данный код необходимо вставить?

Автор: Flexy 24.02.17, 12:36

Constantus @ Сегодня, 12:32 * ,
В Обработчик события формы списка документов "ПриПолученииДанных"

Автор: Constantus 24.02.17, 12:42

Flexy @ Сегодня, 15:36 * ,

Благодарю! Разобрался.

Вставил код в кнопку "Массовая печать"

Автор: Constantus 05.03.17, 11:53

Цитата(Flexy @ 23.02.17, 16:18) *
Построитель = Новый ПостроительЗапроса;
    ЭлементыФормы.Список.ВыделенныеСтроки.Очистить();
        Источник = Новый ОписаниеИсточникаДанных(ДокументСписок);
    Построитель.ИсточникДанных = Источник;
    Построитель.Выполнить();
    Т = Построитель.Результат.Выгрузить();
    Для Каждого Строка Из Т Цикл
        ЭлементыФормы.Список.ВыделенныеСтроки.Добавить(Строка.Ссылка);
    КонецЦикла;


А как можно проверить, что данные Построителя по фильтру не задействованы? Когда я использую данный код, то в случае отсутствия каких-либо фильтров, печатаются все документы списка...

Т.е. если нет ни одного отбора, который сделал пользователь, то не выполнять никаких действий.

Как проверить: есть отбор или нет?

Автор: logist 05.03.17, 13:03

Цитата(Constantus @ 05.03.17, 12:53) *
Как проверить: есть отбор или нет?

Если ЭлементыФормы.Список.ВыделенныеСтроки.Количество() = 0 Тогда // Нет выбранных строк

Автор: Constantus 09.03.17, 11:06

logist @ 05.03.17, 16:03 * ,


Построитель = Новый ПостроительЗапроса;
    ЭлементыФормы.Список.ВыделенныеСтроки.Очистить();
        Источник = Новый ОписаниеИсточникаДанных(ДокументСписок);
    Построитель.ИсточникДанных = Источник;
    Построитель.Выполнить();
    Т = Построитель.Результат.Выгрузить();
    Для Каждого Строка Из Т Цикл
        ЭлементыФормы.Список.ВыделенныеСтроки.Добавить(Строка.Ссылка);
    КонецЦикла;


Данный код срабатывает при любом раскладе. Т.е. при неосторожном обращении с огнем он выделяет все записи в форме списка. Как можно проверить, если выделяются все записи в форме списка, и если выделены все записи, то выполнять кокое-то действие. Или иначе, если Отбор пустой, то не проводить в действие исполнение данного кода?

Код
Если ЭлементыФормы.Список.ВыделенныеСтроки.Количество() = 0 Тогда // Нет выбранных строк
не корректен в моем случае...

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua