Отбор на форме списка документов УФ
Здравствуйте.
Как правильно сделать отбор на форму списка документов?
Мне нужно в форме списка сделать 2 поля. Первое это ДатаВхДокумента, второе это Номенклатура.
Хочу сделать возможность устанавливать отбор по дате входящего документа и по номенклатуре.
Нашёл вот такой пример:
На форму добавил реквизит формы с типом спр.Номенклатура.
Как правильно сделать отбор на форму списка документов?
Мне нужно в форме списка сделать 2 поля. Первое это ДатаВхДокумента, второе это Номенклатура.
Хочу сделать возможность устанавливать отбор по дате входящего документа и по номенклатуре.
Нашёл вот такой пример:
На форму добавил реквизит формы с типом спр.Номенклатура.
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементОтбора.ПравоеЗначение = Элементы.Номенклатура;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
По теме из базы знаний
- Универсальный шикарный списочный отбор
- Глобальное меню разработчика для управляемых форм
- Быстрые отборы. Вставка списка товаров из буфера обмена
- Поддержка пользователей [Alt+S] (подключаемое расширение)
- Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) TODD22, если список динамический, есть рекомендации делать через критерии отбора:
ВЫБРАТЬ
КО.Ссылка,
КО.ВерсияДанных,
КО.ПометкаУдаления,
КО.Номер,
КО.Дата,
КО.Проведен,
КО.Контрагент,
КО.Проект,
КО.Сумма,
КО.МоментВремени
ИЗ
Документ.РасходнаяНакладная КАК КО
ЛЕВОЕ СОЕДИНЕНИЕ КритерийОтбора.ПоНоменклатуре(&Номенклатура) КАК Док
ПО Док.Ссылка = КО.Ссылка
ГДЕ
(Док.Ссылка = КО.Ссылка
ИЛИ &Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка))
Показать
(4) dj_serega, Вроде получилось. Только такой момент.
Я сделал функцию в обработчике реквизита номенклатура при изменении на клиенте.
Когда открываю форму у меня в списке все документы. Затем выбираю номенклатуру и у меня срабатывает отбор.
Но если я очищаю реквизит номенклатуры то у меня список документов вообще пустой.
Я сделал функцию в обработчике реквизита номенклатура при изменении на клиенте.
Когда открываю форму у меня в списке все документы. Затем выбираю номенклатуру и у меня срабатывает отбор.
Но если я очищаю реквизит номенклатуры то у меня список документов вообще пустой.
(19) dj_serega,
Вот код установки отбора. По первой номенклатуре срабатывает. Если выбираю вторую номенклатуру то не срабатывает. Просто пустой список.
Как его правильно очистить?
&НаКлиенте
Процедура НоменклатураПриИзмененииНаСервере()
Если ЗначениеЗаполнено(Номенклатура) Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементОтбора.ПравоеЗначение = Номенклатура;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
ПоказатьВот код установки отбора. По первой номенклатуре срабатывает. Если выбираю вторую номенклатуру то не срабатывает. Просто пустой список.
Как его правильно очистить?
(20) TODD22,
+ ты при КАЖДОМ изменении номенклатуры ДОБАВЛЯЕШЬ этот элемент отбора. Зачем?
ПолеКомпоновки = Новый ПолеКомпоновкиДанных("Номенклатура");
Для Каждого ЭлементОтбора Из Список.Отбор.Элементы Цикл
Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных")
И ЭлементОтбора.ЛевоеЗначение = ПолеКомпоновки Тогда
Список.Отбор.Элементы.Удалить(ЭлементОтбора);
КонецЕсли;
КонецЦикла;
+ ты при КАЖДОМ изменении номенклатуры ДОБАВЛЯЕШЬ этот элемент отбора. Зачем?
(20) TODD22, если других отборов нет то:
&НаКлиенте
Процедура НоменклатураПриИзмененииНаСервере()
Список.Отбор.Элементы.Очистить();
Если ЗначениеЗаполнено(Номенклатура) Тогда
ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
ЭлементОтбора.ПравоеЗначение = Номенклатура;
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
КонецЕсли;
КонецПроцедуры
Показать&НаКлиенте
Процедура ТоварПриИзменении(Элемент)
Список.Параметры.УстановитьЗначениеПараметра("Номенклатура", Товар);
КонецПроцедуры
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Список.Параметры.УстановитьЗначениеПараметра("Номенклатура", Товар);
КонецПроцедуры
Показать
Получилось
Если ЗначениеЗаполнено(Номенклатура) Тогда
ЭлементОтбора = Список.Отбор.Элементы;
ЭлементОтбора.Очистить();
ТекОтбор = ЭлементОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ТекОтбор.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
ТекОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Номенклатура");
ТекОтбор.ПравоеЗначение = Номенклатура;
ТекОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ТекОтбор.Использование = Истина;
Иначе
ЭлементОтбора = Список.Отбор.Элементы;
ЭлементОтбора.Очистить();
КонецЕсли;
Показать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)