Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отбор номенклатуры по единицам измерения

Отбор номенклатуры по единицам измерения
Я
   Михаил22
 
18.07.19 - 11:18
Здравствуйте!
Не могу разобраться как в УТ отобрать номенклатуру по нужной Базовой Единице Измерения.
Выборка ругается на 3 параметр, т.е. отбор. Нужно именно через объекты 1С, не через запрос.
Подскажите что не так:

Отбор = Новый Структура("БазоваяЕдиницаИзмерения",Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("уп"));
Выборка = Справочники.Номенклатура.Выбрать(,,Отбор,);
 
 
   lubitelxml
 
1 - 18.07.19 - 11:21
Выборка = Справочники.Номенклатура.Выбрать(Отбор); - вроде так всегда делал...
   lubitelxml
 
2 - 18.07.19 - 11:21
но лучше запрос написать
   Михаил22
 
3 - 18.07.19 - 11:24
(1) Так тож ругается

И так ругается.
Отбор = Новый Структура("БазоваяЕдиницаИзмерения","уп"); 

Всю голову сломал! Полдня убил еже.
   lubitelxml
 
4 - 18.07.19 - 11:28
Запрос.УстановитьПараметр("ВыбБазоваяЕдиницаИзмерения",Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("уп"));
Запрос.Текст = 
"ВЫБРАТЬ
| спр.Ссылка
|ИЗ
| Справочник.Номенклатура
|ГДЕ
| Спр.БазоваяЕдиницаИзмерения = &ВыбБазоваяЕдиницаИзмерения
|";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
//тут действия с элементами справочника

КонецЦикла
   Галахад
 
5 - 18.07.19 - 11:28
(0) Индексирование по полю стоит?
   Михаил22
 
6 - 18.07.19 - 11:29
(4) Спасибо. С запросом нет проблем, но надо с объектами 1с.
   Михаил22
 
7 - 18.07.19 - 11:30
(5) Точно, не стоит. Вот я тормоз. Спасибо!!!
   Михаил22
 
8 - 18.07.19 - 18:10
Нет, что-то не могу совладать и с выборкой по единицам измерения

Что не так с запросом? На выходе ноль элементов, хотя их там много.

ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ 
 Справочник.Номенклатура КАК Номенклатура 
ГДЕ 
  Номенклатура.БазоваяЕдиницаИзмерения = "уп"

Работает только при таком виде:

ВЫБРАТЬ
  Номенклатура.Ссылка
ИЗ
  Справочник.Номенклатура КАК Номенклатура
ГДЕ
  Номенклатура.БазоваяЕдиницаИзмерения.Наименование = "уп"

Но так мне не подходит.

Задача такая.
  Внешняя обработка в которой стандартными элементами формы выводим и фильтруем номенклатуру, а потом по этой выборке надо пробежаться и сделать кое-какие монипуляции.

Стандартные элементы после отбора возвращают СправочникСписок.Номенклатура. Через эту штуку к выбранным элементам Номенклатуры не достучаться. Можно только получить правила отбора.
И вот если в отборе участвует БазоваяЕдиницаИзмерения, то сделать запрос или выборку не получается. Выборка дает ошибку, а запрос пустоту.
   shuhard
 
9 - 18.07.19 - 18:15
(8)[Номенклатура.БазоваяЕдиницаИзмерения = "уп"]
не может работать и не будет
"уп" не является ссылкой
   shuhard
 
10 - 18.07.19 - 18:16
ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ 
 Справочник.Номенклатура КАК Номенклатура 
ГДЕ 
  Номенклатура.БазоваяЕдиницаИзмерения = &уп

Запрос.УстановитьПараметры("уп", ТМЦ.ЕдиницаХраненияОстатков);
   Михаил22
 
11 - 18.07.19 - 18:22
(10) А без параметров как прописать сразу в текст запроса ссылку?
   shuhard
 
12 - 18.07.19 - 18:23
(11) ВЫБРАТЬ 
Номенклатура.Ссылка
ИЗ 
 Справочник.Номенклатура КАК Номенклатура 
ГДЕ 
  Номенклатура.БазоваяЕдиницаИзмерения = некийзапрос.ТМЦ.ЕдиницаХраненияОстатков
   Михаил22
 
13 - 18.07.19 - 18:33
(10) Спасибо. Разобрался. Но возникла другая проблема.
При фильтрации стандартными элементами форму есть условие "Содержит", а как его интерпретировать в Запросе?
   shuhard
 
14 - 18.07.19 - 18:34
(13) подобно, он же Like
   Михаил22
 
15 - 18.07.19 - 18:41
(14) Ё. Прейдется условия из Отбора в СправочникСписок.Номенклатура разбирать и менять на ключевые слова запроса.

Может есть какая-то возможность добраться к выбранным элементам справочника из СправочникСписок, используя объекты 1С?
   shuhard
 
16 - 18.07.19 - 18:45
(15) какая-то есть
но правильно либо запросы, либо СКД
   Михаил22
 
17 - 18.07.19 - 18:50
(16) СКД тож потребует интерпретации условий. Все получается не элегантно.

Извиняюсь, но чем больше работаю с 1С, тем больше понимаю, что ее создатели были не в своем уме. :)
   catena
 
18 - 19.07.19 - 06:09
(15)А список ваш на какой форме лежит?
   Михаил22
 
19 - 19.07.19 - 09:04
(18) На главной форме внешней обработки. Не модальная.
   catena
 
20 - 19.07.19 - 10:02
(19)Смешно))) ОФ или УФ?
   Михаил22
 
21 - 19.07.19 - 10:27
ОФ. Не серверная база.
   catena
 
22 - 19.07.19 - 10:32
(21)Тогда можно скопировать отбор в построитель

    ТекОтбор = ЭлементыФормы.СписокИзКоторогоБерем.ОтборСтрок;
    Построитель = Новый ПостроительОтчета;
    Построитель.ИсточникДанных = Новый ОписаниеИсточникаДанных(СписокИзКоторогоБерем);
    Для каждого ЭлементОтбора Из ТекОтбор Цикл
    
        Если ЭлементОтбора.Использование Тогда
            НовыйЭлемент = Построитель.Отбор.Добавить(ЭлементОтбора.ПутьКДанным, ЭлементОтбора.Имя, ЭлементОтбора.Представление);
            НовыйЭлемент.ВидСравнения = ЭлементОтбора.ВидСравнения;
            НовыйЭлемент.Значение = ЭлементОтбора.Значение;
            НовыйЭлемент.ЗначениеС = ЭлементОтбора.ЗначениеС;
            НовыйЭлемент.ЗначениеПо = ЭлементОтбора.ЗначениеПо;
            НовыйЭлемент.Использование = Истина;
        КонецЕсли;
    
    КонецЦикла; 
    РезультатЗапроса = Построитель.Результат;
        
    Возврат РезультатЗапроса.Выгрузить();
   Михаил22
 
23 - 19.07.19 - 10:43
С построителем не работал.
Так понимаю ВидСравнения в построителе совпадает со объектом СправочникСписок.
Оба объекты 1С.
   catena
 
24 - 19.07.19 - 10:52
(23)м, что? Я вопроса не поняла. ВидСравнения - это вообще говоря системное перечисление, но в данном случае это не важно, т.к. тут просто копируются все элементы и значения из одного отбора в другой. Все, что вам нужно, это поставить таблицу выборки вместо СписокИзКоторогоБерем и элемент формы, на котором отбор вместо ЭлементыФормы.СписокИзКоторогоБерем.ОтборСтрок


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.