Отбор по значению в текущей колонке

1. user1008893 29.01.19 11:20 Сейчас в теме
Есть обработка Управление заказами,в ней надо сделать отбор по номенклатуре. Я выбираю номенклатуру и нажимаю эту кнопку и она отбирает. Помогите пожалуйста,как это реализовать?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. SP17081992 5 29.01.19 11:28 Сейчас в теме
(1) Тип списка какой: динамическый список или таблица значении?
4. user1008893 29.01.19 11:31 Сейчас в теме
(3)ничего не делала,только кнопку на форме создала
5. SP17081992 5 29.01.19 11:35 Сейчас в теме
(4) Если ничего не делала, тогда сделай динамический список, а отбор в динамическом списке стандартный, никакой код не нужен написать.
7. user1008893 29.01.19 11:39 Сейчас в теме
(5)По моему,вы меня не поняли. Есть уже готовые данные на форме. Когда мышкой выбираешь какую либо номенклатуру,то нажав на кнопку отбора ,происходит отбор по выбранной номенклатуре.
2. SedovSU@mail.ru 297 29.01.19 11:28 Сейчас в теме
Можно так написать

ЭлементОтбораКомпоновкиДанных = ДинамическийСписок.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяПоля");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравнения;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = ВашеЗначение;
ЭлементОтбораКомпоновкиДанных.Использование = Использование;
20. user1008893 29.01.19 12:56 Сейчас в теме
6. user633533_encantado 11 29.01.19 11:39 Сейчас в теме
Пользуйтесь БСП:

	ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Номенклатура", 
	МояНоменклатура, ВидСравненияКомпоновкиДанных.Равно, "ОборПоНоменклатуре", Истина);
8. user1008893 29.01.19 11:41 Сейчас в теме
(6)
ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Номенклатура",
МояНоменклатура, ВидСравненияКомпоновкиДанных.Равно, "ОборПоНоменклатуре", Истина);

это в действия кнопки написать?
Если да,то у меня ошибка
9. user633533_encantado 11 29.01.19 11:42 Сейчас в теме
(8) Так бывает, когда не до конца понимаешь, что делаешь )
10. user1008893 29.01.19 11:43 Сейчас в теме
(9)
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

 

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

Переменная не определена (ОбщегоНазначенияКлиентСервер)
11. user633533_encantado 11 29.01.19 11:45 Сейчас в теме
(10) Вы написали , что у вас ERP, в этой конфигурации такая подсистема есть. А у вас похоже нет.
12. user1008893 29.01.19 11:52 Сейчас в теме
(11)Переписанная она,вот нашла тут,с нижним подчеркиванием просто. Но в ней нет УстановитьЭлементОтбораДинамическогоСписка
13. user633533_encantado 11 29.01.19 11:53 Сейчас в теме
(12) Как бы конфигурацию не переписывали, стандартные модули из БСП никуда деться не должны иначе все работать перестанет, лукавите вы где-то.
14. user1008893 29.01.19 11:55 Сейчас в теме
(13)
Прикрепленные файлы:
15. user633533_encantado 11 29.01.19 11:58 Сейчас в теме
(14) И что эта картинка доказывает, кроме того что кто-то впихнул свой общий модуль с нижним подчеркиванием в середине ?
16. user1008893 29.01.19 12:02 Сейчас в теме
(15)
Прикрепленные файлы:
18. user633533_encantado 11 29.01.19 12:09 Сейчас в теме
(16) А, у вас какая-то другая ERP, я думал у вас типовая ERP 2.

Задавайте отбор без использования БСП тогда, как вам в (2) показали.
19. user1008893 29.01.19 12:26 Сейчас в теме
(18)
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)

 

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

{Обработка.УправлениеЗаказамиНаПроизводство.Форма.ФормаОтчета.Форма(2502)}: Поле объекта не обнаружено (Отбор)
ЭлементОтбораКомпоновкиДанных = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Что я не так делаю?
27. Kovekh 29.01.19 14:27 Сейчас в теме
(16)
Есть сомнения по поводу того, что у Вас ERP. У неё всего лишь 2 версия шагает, а у Вас уже 3.0.3.19?:D
28. user1008893 29.01.19 14:30 Сейчас в теме
(27)ERP у нас,лучше помогите пожалуйста
29. user1008893 29.01.19 14:35 Сейчас в теме
(27)Процедура УстановитьОтборНаКлиенте(Список, ИмяПоля, ЗначениеПоля)
текдан= ЭлементыФормы.ДеревоЗаказы.ТекущиеДанные;
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДеревоЗаказы);
НовыйОтбор = ПостроительЗапроса.Отбор.Добавить("Состав");
НовыйОтбор.Использование = Истина;
НовыйОтбор.ВидСравнения = ВидСравнения.Содержит;
НовыйОтбор.Значение =текдан.Состав;
ПостроительЗапроса.Выполнить();
ДеревоЗаказы=ПостроительЗапроса.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

КонецПроцедуры

Вот так получается,но выводится пустое дерево
17. user1008893 29.01.19 12:07 Сейчас в теме
(15)как исправить ошибку?
21. user1008893 29.01.19 13:00 Сейчас в теме
у меня есть дерево значений,в нем надо сделать отбор
22. d.batovskiy 29.01.19 13:12 Сейчас в теме
(21) Вам же сказали нужно сделать динамический список, а потом использовать отборы как показано выше. Выше указанные отборы работают для динамического списка.
23. user1008893 29.01.19 13:17 Сейчас в теме
24. SedovSU@mail.ru 297 29.01.19 13:26 Сейчас в теме
(23) Смотрите если у вас список - это динамический список то воспользуйтесь вот этим кодом

ЭлементОтбораКомпоновкиДанных = ДинамическийСписок.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбораКомпоновкиДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИмяПоля");
ЭлементОтбораКомпоновкиДанных.ВидСравнения = ВидСравнения;
ЭлементОтбораКомпоновкиДанных.ПравоеЗначение = ВашеЗначение;
ЭлементОтбораКомпоновкиДанных.Использование = Использование;


Если же у вас список - это ДокументСписок тогда нужно по написать

ЭлементОтбора = ДокументСписок.Отбор["ИмяВашегоРеквизитаПоКоторомуНужноОтобрать"];
ЭлементОтбора.Использование	= Истина;
ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
ЭлементОтбора.Значение = ИмяРеквизитаВКоторомХранитьсяЗначение;



При по тому реквизиту которому делаете отбор он должен быть реквизитом документа!
25. user1008893 29.01.19 13:29 Сейчас в теме
(24)У меня дерево значений
Пытаюсь вот так
ПостроительЗапроса = Новый ПостроительЗапроса;
ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДеревоЗаказы);
НовыйОтбор = ПостроительЗапроса.Отбор.Добавить("Состав");
НовыйОтбор.Использование = Истина;
НовыйОтбор.ВидСравнения = ВидСравнения.Содержит;
НовыйОтбор.Значение = "шкаф";
ПостроительЗапроса.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией)
Прикрепленные файлы:
26. user1008893 29.01.19 13:50 Сейчас в теме
(24)или можно сначала дерево значений преобразовать в таблицу значений
30. SedovSU@mail.ru 297 29.01.19 14:44 Сейчас в теме
(26) у вас тут более сложный вопрос. Ведь вам нужно получить отбор с видом сравнения содержит и еще по дереву значений. Нужно выполнить запрос но вот результат запроса - вы на основании его будете переформировать таблицу значений что ли?
31. user1008893 29.01.19 14:46 Сейчас в теме
(30)да,тоже подумала,это очень долго и сложно.
Делаю вот так (29),но выводится пустота
35. SedovSU@mail.ru 297 29.01.19 14:57 Сейчас в теме
(31) у вас реквизит Состав - строковое значение?
36. user1008893 29.01.19 14:58 Сейчас в теме
37. SedovSU@mail.ru 297 29.01.19 15:03 Сейчас в теме
(36) Вот я могу ошибаться, но на сколько я знаю в источнике данных у построителя может быть только таблица значений. А если все таки может быть дерево значений, то скорее всего там будут браться строки только самого первого уровня. Попробуйте сперва преобразовать дерево значений в таблицу значений и все у вас получиться.
38. SedovSU@mail.ru 297 29.01.19 15:04 Сейчас в теме
(37) дополнию что истоником данных может быть ТаблицаЗначений; РезультатЗапроса; ОбластьЯчеекТабличногоДокумента; Табличная часть; РегистрНакопленияНаборЗаписей.<Имя регистра накопления>; РегистрСведенийНаборЗаписей.<Имя регистра сведений>; РегистрБухгалтерииНаборЗаписей.<Имя регистра бухгалтерии>; РегистрРасчетаНаборЗаписей.<Имя регистра расчета>. Нужно преобразование в таблицу значений
39. user1008893 29.01.19 15:06 Сейчас в теме
(38)Процедура УстановитьОтборНаКлиенте(Список, ИмяПоля, ЗначениеПоля)
текдан= ЭлементыФормы.ДеревоЗаказы.ТекущиеДанные;
//ПостроительЗапроса = Новый ПостроительЗапроса;
//ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ДеревоЗаказы);
//НовыйОтбор = ПостроительЗапроса.Отбор.Добавить("Состав");
//НовыйОтбор.Использование = Истина;
//НовыйОтбор.ВидСравнения = ВидСравнения.Содержит;
//НовыйОтбор.Значение =текдан.Состав;
//ПостроительЗапроса.Выполнить();
//ДеревоЗаказы=ПостроительЗапроса.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Отбор = Новый Структура("Состав", текдан.Состав);
МассивСтрокДерева = ДеревоЗаказы.Строки.НайтиСтроки(Отбор, Истина);
ДеревоЗаказы.Строки.Очистить();
Для Каждого СтрокаДерева Из МассивСтрокДерева Цикл
УзелДерева=ДеревоЗаказы.Строки.Добавить();
УзелДерева.Состав=ДеревоЗаказы.Состав;
КонецЦикла
КонецПроцедуры

так ругается на состав.
Уже не знаю, что делать
40. SedovSU@mail.ru 297 29.01.19 17:47 Сейчас в теме
(39) а у вас это поле точно есть в дереве?? какую ошибку выдает, скиньте описание
41. user1008893 30.01.19 07:59 Сейчас в теме +2 $m
(40)Короче,мы делали вчера и поняли,что эта штука в принципе будет не нужна.Спасибо всем.
32. SedovSU@mail.ru 297 29.01.19 14:48 Сейчас в теме
А поскольку у вас дерево значений попробуйте вот так.

Отбор = Новый Структура("Номенклатура", РеквизитНоменклатура);
МассивСтрокДерева = Дерево.Строки.НайтиСтроки(Отбор, Истина);


В результате у вас получиться массив строк дерева значений с найденой номенклатурой.
Даллее обходите массив и создаете новое дерево значений
33. SedovSU@mail.ru 297 29.01.19 14:51 Сейчас в теме
Просто не важно как хоть запросом, хоть отбором вы в результате получитете какой то результат. Но далее вам этот результат нужно представить пользователю. Следовательно вы должны очистить текущее дерево и добавить в него новые значения из вашего результат запроса или отбора.

При очистки отбора вам нужно вернуть дерево значений в исходное состояние.
34. SedovSU@mail.ru 297 29.01.19 14:53 Сейчас в теме
Можно как то так написать только:

Отбор = Новый Структура("Номенклатура", РеквизитНоменклатура);
МассивСтрокДерева = Дерево.Строки.НайтиСтроки(Отбор, Истина);
Дерево.Строки.Очистить();
Для Каждого СтрокаДерева Из МассивСтрокДерева Цикл
УзелДерева = Дерево.Строки.Добавить();
/// .......... далее заполняете реквизиты
Конеццикла
42. meriferi 30.01.19 16:31 Сейчас в теме
Запросом список элементов и в отбор списка элементов ссылки списком значений
43. timeforlive 15 01.02.19 05:24 Сейчас в теме
Автор решил(а) не заморачиваться и найти другое решение, оставить себе свои кровные sm (нужное подчеркнуть).
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот