Имя: Пароль:
1C
1С v8
Отбор на ТабличноеПоле (Обычная форма)
0 Lin
 
25.05.20
21:19
Добрый вечер! Подскажите пожалуйста, как установить отбор на табличное поле с типом РегистрСведенийСписок в обычной форме??
Есть список регистра сведений с полями "Аналог" и "Номенклатура",  добавлено еще две колонки "Артикул" и "Остаток".
И мне надо ограничить показ строк, убрать строки с номенклатурой у которой нет остатков.
Добавленные колонки заполняются по результатам запроса.
1 RomanYS
 
25.05.20
22:03
(0) В ОФ нельзя фильтровать по колонке без данных. Самый простой вариант - УФ и динсписок
2 Lin
 
25.05.20
22:23
(1) А можно поставить отбор на результат запроса, который равен 0?
у меня есть еще на форме табличное поле списка номенклатуры, и при выборе строки, в табличном поле с аналогами должна меняться информация.
Я так попробовала, но при выборе другой номенклатуры табличное поле пустое.

        РезультатЗапроса = Запрос.Выполнить().Выбрать();
        Пока РезультатЗапроса.Следующий() Цикл
            ДанныеАналог = Соответствие.Получить(РезультатЗапроса.Аналог);
            Если ДанныеАналог <> Неопределено Тогда
                ДанныеАналог.Ячейки.Артикул.Значение = РезультатЗапроса.Артикул;
                ДанныеАналог.Ячейки.Остаток.Значение = РезультатЗапроса.КоличествоОстаток;    
            КонецЕсли;
                  ОтборОстатка = ЭлементыФормы.ТабличноеПолеАналоги.Значение;
            ОтборОстатка.Отбор.Аналог.Установить(РезультатЗапроса.Аналог);
        КонецЦикла;
3 RomanYS
 
25.05.20
22:32
(2) Можно сделать отбор на вхождение в список. Но это в любом случае костыль
4 Lin
 
25.05.20
23:11
(3) Подскажите как? мне пока и костыль сойдет, может позже что лучше придумаю...
5 Ёпрст
 
25.05.20
23:17
(4) получаешь значения измерений, по ним устанавливаешь отбор.. усё
6 Lin
 
26.05.20
23:34
(5) (4) немного не понимаю как ставить отбор по результатам из списка значений.... подскажите как это сделать?
И будет ли это работать если нужно вывести больше одного значения?

Процедура ТабличноеПолеАналогиПриПолученииДанных(Элемент, ОформленияСтрок)
        Соответствие = Новый Соответствие;
        АналогМассив = Новый Массив;
        Для каждого Стр Из ОформленияСтрок Цикл
        
            АналогМассив.Добавить(Стр.ДанныеСтроки.Аналог);
            Соответствие.Вставить(Стр.ДанныеСтроки.Аналог, Стр);
                    
        КонецЦикла;
        
        Запрос = Новый Запрос;
        Запрос.Текст = "ВЫБРАТЬ
                       |    спрНоменклатура.Ссылка,
                       |    Аналоги.Аналог,
                       |    Аналоги.Аналог.Артикул КАК Артикул,
                       |    Остатки.КоличествоОстаток
                       |ИЗ
                       |    РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК Остатки
                       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Аналоги КАК Аналоги
                       |            ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК спрНоменклатура
                       |            ПО Аналоги.Номенклатура = спрНоменклатура.Ссылка
                       |        ПО Аналоги.Аналог = Остатки.Номенклатура
                       |ГДЕ
                       |    спрНоменклатура.Ссылка = &Ссылка" ;
        
        
        Запрос.УстановитьПараметр("Ссылка", ЭлементыФормы.СправочникСписок.ТекущаяСтрока.Ссылка);
        
          РезультатЗапроса = Запрос.Выполнить();
        
        МассивЗнач = Новый Массив;
        Список = Новый СписокЗначений;
        ТЗО = РезультатЗапроса.Выгрузить();
        
        МассивЗнач = ТЗО.ВыгрузитьКолонку("КоличествоОстаток");
        Список.ЗагрузитьЗначения(МассивЗнач);
                        
         //ОтборОстатка = ЭлементыФормы.ТабличноеПолеАналоги.Значение;
         //ОтборОстатка.Отбор.Аналог.Установить(МассивЗнач);
                    
    РезультатЗапроса = Запрос.Выполнить().Выбрать();    
        Пока РезультатЗапроса.Следующий() Цикл        
             
            ДанныеАналог = Соответствие.Получить(РезультатЗапроса.Аналог);
            Если ДанныеАналог <> Неопределено Тогда
                ДанныеАналог.Ячейки.Артикул.Значение = РезультатЗапроса.Артикул;
                ДанныеАналог.Ячейки.Остаток.Значение = РезультатЗапроса.КоличествоОстаток;
            КонецЕсли;
        КонецЦикла;
    КонецПроцедуры
7 Lin
 
26.05.20
23:52
(6) немного не так...
Добавила таблицу значений, и в нее передаю ссылку номенклатуры из запроса...
Подскажите как правильно установить отбор полученной ссылки из массива на колонку "Номенклатура" в списке регистра??

      МассивЗнач = Новый Массив;
      Список = Новый СписокЗначений;
      ТЗО = РезультатЗапроса.Выгрузить();
        
                        РезультатЗапроса = Запрос.Выполнить().Выбрать();  
         Пока РезультатЗапроса.Следующий() Цикл
        
      МассивЗнач = ТЗО.ВыгрузитьКолонку("Ссылка");
      Список.ЗагрузитьЗначения(МассивЗнач);
      
     и Дальше это передать на обработку результата запроса
8 Lin
 
27.05.20
01:03
(5) спасибо, сделала
2 + 2 = 3.9999999999999999999999999999999...