Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Динамический список, условие ИЛИ

Динамический список, условие ИЛИ
Я
   Air777
 
20.04.18 - 14:25
Есть документ, допустим Перемещение. В нем 2 однотипных 
реквизита. Например Склад и Склад-Получатель.

Как сделать в динамическом списке таких документов отбор 
"Склад" который будет одновременно работать по обоим полям 
Склад и Склад-Получатель. Как установить 2 отдельных отбора 
через группу ИЛИ мне понятно. Идея в том чтобы для пользователя
это был именно 1 простой отбор без дополнительных телодвижений.

В обычных формах такая задача решалась через критерии отбора.
В УФ неясно как быть.

Спасибо за ответы.
 
 
   George Wheels
 
1 - 20.04.18 - 14:41
1. Проверить есть ли у ДС нужный ЭлементОтбора
1.1. Если есть, то использовать его
1.2. Иначе создать новый
2. Установить ВидСравнения, ЛевоеЗначение, ПравоеЗначение, ИдентификаторПользовательскойНастройки, Использование
   Вафель
 
2 - 20.04.18 - 14:42
создай отделное поле. фильтр устанавливай програмно
   arsik
 
3 - 20.04.18 - 14:46
(0) Может так?
http://prntscr.com/j7sk75
   Air777
 
4 - 20.04.18 - 14:50
(3) ооо да
спасибо то что надо!
   Air777
 
5 - 20.04.18 - 14:53
(3) блин ток оно работает так
   Вафель
 
6 - 20.04.18 - 14:54
(3) бред какой то
   Air777
 
7 - 20.04.18 - 14:54
да не работает
   Вафель
 
8 - 20.04.18 - 14:55
ну тут условие: или склады совпадают или первый склад равен значению
   arsik
 
9 - 20.04.18 - 15:03
   Вафель
 
10 - 20.04.18 - 15:05
(9) а как ты параметр без кода задашь?
 
 Рекламное место пустует
   arsik
 
11 - 20.04.18 - 15:06
+ (9) вру, не выйдет так
   Fragster
 
12 - 20.04.18 - 15:17
добавить в запрос:
{Где Таблица.Склад = &Склад ИЛИ Таблица.СкладПолучатель = &Склад}
   Fragster
 
13 - 20.04.18 - 15:18
параметр &Склад - в быстрый доступ
   Вафель
 
14 - 20.04.18 - 15:19
(13) а у динамичепских скписков разве параметры можно в быстрый доступ добавлять?
   Fragster
 
15 - 20.04.18 - 15:32
ну тогда сделать элемент на форме, при изменении коотрого устанавливать параметр
   Вафель
 
16 - 20.04.18 - 15:33
(15) так можно и фильтр настраивать при изменении параметра
   Air777
 
17 - 20.04.18 - 15:34
Вот странно что нет внятного решения для такой очевидной задачи. Исхитрится через 1 место я и сам могу. Я думал есть что то штатное.
   Вафель
 
18 - 20.04.18 - 15:35
(17) 1с вообще ход конем сделала.
В списке выводся каждый документ 2 раза. по каждому складу
   Fragster
 
20 - 20.04.18 - 16:07
ВЫБРАТЬ РАЗЛИЧНЫЕ
    РасходныйОрдерНаСклад.Ссылка,
    РасходныйОрдерНаСклад.Склад,
    РасходныйОрдерНаСклад.СкладПолучатель
ИЗ
    Документ.РасходныйОрдерНаСклад КАК РасходныйОрдерНаСклад
        {ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.МестаХранения КАК МестаХранения
        ПО РасходныйОрдерНаСклад.Склад = МестаХранения.Ссылка ИЛИ РасходныйОрдерНаСклад.СкладПолучатель = МестаХранения.Ссылка}
{ГДЕ
    МестаХранения.Ссылка.* КАК СкладОтбор}
   George Wheels
 
21 - 20.04.18 - 16:20
(1) + На форме два дополнительных реквизита "НачалоПериода" и "КонецПериода". В событии ПриИзменении вызываю процедуру НаСервере:

    Если ЗначениеЗаполнено(НачалоПериода) Тогда
        ЭлементОтбора = Неопределено;
        Для Парам = 0 По Реквизит1.Отбор.Элементы.Количество() - 1 Цикл
            ТекЭлемент = Реквизит1.Отбор.Элементы.Получить(Парам);
            Если ТекЭлемент.ИдентификаторПользовательскойНастройки = "НачалоПериода" Тогда
                ЭлементОтбора = ТекЭлемент;
            КонецЕсли;
        КонецЦикла;
        Если ЭлементОтбора = Неопределено Тогда
            ЭлементОтбора = Реквизит1.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        КонецЕсли;
        ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;
        ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Период");
        ЭлементОтбора.ПравоеЗначение = НачалоДня(НачалоПериода);
        ЭлементОтбора.ИдентификаторПользовательскойНастройки = "НачалоПериода";
        ЭлементОтбора.Использование = Истина;
    Иначе
        Для Парам = 0 По Реквизит1.Отбор.Элементы.Количество() - 1 Цикл
            ТекЭлемент = Реквизит1.Отбор.Элементы.Получить(Парам);
            Если ТекЭлемент.ИдентификаторПользовательскойНастройки = "НачалоПериода" Тогда
                ТекЭлемент.Использование = Ложь;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
   arsik
 
22 - 20.04.18 - 16:30
(20) Такое кунфу нам нужно.
   Вафель
 
23 - 20.04.18 - 16:32
вот только вот РАЗЛИЧНЫЕ не будет ли тормозит список?
   Fragster
 
24 - 20.04.18 - 16:36
(23) нет. я вообще на всякий случай добавил, вроде задваивать строки основной таблицы не должно и без него, думать лень :)
   Fragster
 
25 - 20.04.18 - 16:37
в любом случае ИЛИ тормозить будет больше
   Вафель
 
26 - 20.04.18 - 16:37
(24) должны задваиваться
   Fragster
 
27 - 20.04.18 - 16:38
(26) ну вот это не двоит:
ВЫБРАТЬ
    "А" КАК Поле1,
    "А" КАК Поле2
ПОМЕСТИТЬ Таб
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ
    Таб.Поле1,
    Таб.Поле2
ИЗ
    Таб КАК Таб
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб КАК Таб1
        ПО Таб.Поле1 = Таб1.Поле1
            ИЛИ Таб.Поле2 = Таб1.Поле1
   Fragster
 
28 - 20.04.18 - 16:38
дальше проверять лень
   Вафель
 
29 - 20.04.18 - 16:38
(27) так у тебя по 1 записи, чему тут двоить?
   Вафель
 
30 - 20.04.18 - 16:39
даже логически подумать. У тебя к 1 ззаписи должно быть 2 значения Склад.ссылка.
А этого не может быть
   Fragster
 
31 - 20.04.18 - 16:41
ВЫБРАТЬ
    "А" КАК Поле1,
    "А" КАК Поле2
ПОМЕСТИТЬ Таб
Объединить все
ВЫБРАТЬ
    "А" КАК Поле1,
    "А" КАК Поле2
Объединить все
ВЫБРАТЬ
    "А" КАК Поле1,
    "Б" КАК Поле2
Объединить все
ВЫБРАТЬ
    "Б" КАК Поле1,
    "А" КАК Поле2
;

ВЫБРАТЬ
    "А" КАК Поле1
ПОМЕСТИТЬ Таб1
Объединить 
ВЫБРАТЬ
    "Б" КАК Поле1
;

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ РАЗЛИЧНЫЕ
    Таб.Поле1,
    Таб.Поле2
ИЗ
    Таб КАК Таб
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Таб1 КАК Таб1
        ПО Таб.Поле1 = Таб1.Поле1
            ИЛИ Таб.Поле2 = Таб1.Поле1
   Fragster
 
32 - 20.04.18 - 16:41
при использовании отбора "в списке" без РАЗЛИЧНЫЕ будет задвоение
   Вафель
 
33 - 20.04.18 - 16:42
(32) ну так на то он и отбор, что он может быть, а может и не быть
 
 
   Вафель
 
34 - 20.04.18 - 16:43
Если склад всегда выбран, то лучше через объединение сделать
   Fragster
 
35 - 20.04.18 - 16:43
(33) да. если выбрать для моего запроса "Склад отбор в списке "а", "б"" то будет задвоение и ДС сломается. С РАЗЛИЧНЫЕ не сломается
   Fragster
 
36 - 20.04.18 - 16:43
если же СкладОтбор равно "А" - то все будет хорошо
   Вафель
 
37 - 20.04.18 - 16:43
Хотя может и так через "объеденить" без все сделать
   Fragster
 
38 - 20.04.18 - 16:44
(37) ну это тормозить будет не меньше "различные" :)


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