Имя: Пароль:
1C
1С v8
Подбор элементов в фильтра отчета не по одной, а сразу несколько
0 pnamik
 
01.10.14
10:02
Конфигурация самописная на платформе 1С8.0.18.2. В отчете по продажам есть фильтр: по товарам из списка,  по товарам из группы. Из списка или из группы товары выбирается по одному. А нужно сразу несколько выбирать. Из фильтра когда переходишь на номенклатуру, чтобы выбирать товары, в номенклатуре с помощью Shift можно выбирать несколько товаров, но нажатие Enter переводит в фильтр только тот товар, на котором был курсор. Как осуществить возможность подбора товара в фильтре? Функция внизу:

Функция ПолучитьСписокТоваров()
    Если Фильтр = Перечисления.ВидыФильтровОтчетов.ПоТоварамИзСписка Тогда
        Список = Товары.ВыгрузитьКолонку("Номенклатура");
    ИначеЕсли Фильтр = Перечисления.ВидыФильтровОтчетов.ПоТоварамИзГрупп Тогда
        Список = Новый СписокЗначений;
        Для Каждого Стр Из ГруппыТоваров Цикл
            Если Стр.Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда Продолжить; КонецЕсли;
            спТоваров = Справочники.Номенклатура.ВыбратьИерархически(Стр.Номенклатура);
            Пока спТоваров.Следующий() Цикл;
                Если спТоваров.ЭтоГруппа = Истина Тогда
                    Продолжить;
                КонецЕсли;
                Список.Добавить(спТоваров.Ссылка);
            КонецЦикла;    
        КонецЦикла;
    ИначеЕсли Фильтр = Перечисления.ВидыФильтровОтчетов.ПоТоварамПоставщиков Тогда
        Массив = Поставщики.ВыгрузитьКолонку("Контрагент");
        ТекстЗапроса =
        "ВЫБРАТЬ
         |    ДвиженияПоПартиям.Номенклатура
         |ИЗ
         |    РегистрНакопления.ДвиженияПоПартиям КАК ДвиженияПоПартиям
         |ГДЕ
         |    ДвиженияПоПартиям.Партия.Поставщик В(&СписокПост)";
        
        Запрос = Новый Запрос(ТекстЗапроса);    
        Запрос.УстановитьПараметр("СписокПост",Массив);
        Список = Запрос.Выполнить().Выгрузить();
    ИначеЕсли Фильтр = Перечисления.ВидыФильтровОтчетов.ПоСодержаниюВНаименовании Тогда
        Список = Новый СписокЗначений;
        Для Каждого Стр Из ТаблицаПодобий Цикл
            Если СокрЛП(Стр.СтрокаПодобия) = "" Тогда Продолжить; КонецЕсли;
            ТекстЗапроса =
            "ВЫБРАТЬ
            |    Номенклатура.Наименование,
            |    Номенклатура.Ссылка
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |    Номенклатура.Наименование ПОДОБНО &Подобие";
            Запрос = Новый Запрос(ТекстЗапроса);
            Запрос.УстановитьПараметр("Подобие","%"+СокрЛП(Стр.СтрокаПодобия)+"%");
            Рез = Запрос.Выполнить().Выбрать();
            Пока Рез.Следующий() Цикл
                Список.Добавить(Рез.Ссылка);
            КонецЦикла;
        КонецЦикла;    
    ИначеЕсли Фильтр = Перечисления.ВидыФильтровОтчетов.ПоТоварамИзНакладных Тогда
        Список = Новый СписокЗначений;
        Для Каждого Стр Из Накладные Цикл
            Если Стр.Документ = Документы.ПриходнаяНакладная.ПустаяСсылка() Тогда Продолжить; КонецЕсли;
            
            Для Каждого Н Из Стр.Документ.Накладная Цикл
                Список.Добавить(Н.Номенклатура);
            КонецЦикла;
        КонецЦикла;
    ИначеЕсли Фильтр = Перечисления.ВидыФильтровОтчетов.ПоСвойствамНоменклатуры Тогда
        Список = Новый СписокЗначений;
        Для Каждого Стр Из ТаблицаСвойств Цикл
            Если СокрЛП(Стр.Свойство) = Справочники.СвойстваНоменклатуры.ПустаяСсылка() Тогда Продолжить; КонецЕсли;
            ТекстЗапроса =
            "ВЫБРАТЬ
            |    Номенклатура.Ссылка
            |ИЗ
            |    Справочник.Номенклатура КАК Номенклатура
            |ГДЕ
            |    Номенклатура.Свойство = &Свойство";
            Запрос = Новый Запрос(ТекстЗапроса);
            Запрос.УстановитьПараметр("Свойство",Стр.Свойство);
            Рез = Запрос.Выполнить().Выбрать();
            Пока Рез.Следующий() Цикл
                Список.Добавить(Рез.Ссылка);
            КонецЦикла;
        КонецЦикла;    
    КонецЕсли;
    
    Возврат Список
КонецФункции
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс