Имя: Пароль:
1C
1С v8
Отбор в запросе
,
0 Flempy
 
01.12.22
10:58
Имеется запрос в обработке, допустим с сотрудниками. Необходимо добавить отбор по организации, подразделении и сотруднику. Как можно сделать отбор, по аналогии с отбором в СКД: имею в виду, что при отборе Организации,Подразделении и сотрудника, выходят соответственно сотрудники указанного подразделения и организации, если не выбирать сотрудника - тогда выведутся сотрудники подразделения указанной организации, то же самое и с организацией. Надеюсь, понятно объяснил
1 lubitelxml
 
01.12.22
11:01
Сотрудников сначала в массив собираешь в зависимости от установленных пользователем отбором, потом в параметры этот массив.
2 hockeyist
 
01.12.22
11:07
(0) Да как угодно. Хочешь через "ИЛИ", хочешь через парсинг текста запроса, хочешь через объект СхемаЗапроса.
"ИЛИ" самый простой путь
3 Гипервизор
 
01.12.22
11:15
ВЫБОР
  КОГДА &Сотрудник <> &ПустойСотрудник ТОГДА Сотрудник = &Сотрудник
  КОГДА &Подразделение <> &ПустоеПодразделение ТОГДА Подразделение = &Подразделение
  КОГДА Организация <> &ПустаяОрганизация ТОГДА Организация = &Организация
КОНЕЦ
4 Dmitrii
 
гуру
01.12.22
11:33
(0) Вариантов несколько. Выбор конкретного зависит от конкретного запроса.
Можно, например, так.

(&Сотрудник = ЗНАЧЕНИЕ("Справочник.Сотрудники.ПустаяСсылка") ИЛИ Сотрудник = &Сотрудник)
И (&Подразделение = ЗНАЧЕНИЕ("Справочник.ПодразделенияОрганизации.ПустаяСсылка") ИЛИ Подразделение = &Подразделение)
И (&Организация = ЗНАЧЕНИЕ("Справочник.Организации.ПустаяСсылка") ИЛИ Организация = &Организация)

Вариант из (3) некорректен.
5 1Сергей
 
01.12.22
11:35
Сотрудник В (&Сотрудники)

не предлагали ещё?
6 Dmitrii
 
гуру
01.12.22
11:45
(5) В задаче указано " по сотрудникУ" (в единственно числе). Не стоит плодить лишние сущности там, где они не нужны.
А если ты предлагаешь писать отдельный запрос для получения значения параметра &Сотрудники, то это только усложнит задачу. Да и в этом отдельном запросе всё равно придётся как-то извращаться для описания отбора в нужном виде.
7 Гипервизор
 
01.12.22
11:52
(4) А что некорректно в (3)? Я понял так, что при указании сотрудника, другие отборы не нужны, не так?
8 Flempy
 
01.12.22
11:56
(4) Спасибо большое
9 Dmitrii
 
гуру
01.12.22
12:04
(7) >> при указании сотрудника, другие отборы не нужны, не так?

Не исключено конечно.
Но с вероятностью около 99.9% не так. В таких задачах обычно комбинация отборов может быть любой - от полного отсутствия всех значений отбора до указания значений отбора противоречащих друг другу (например, когда указано подразделение от другой организации).
10 1Сергей
 
01.12.22
12:06
(6) зачем? Делаем массив из Одного сотрудника или пустой, если не указан.
11 Гипервизор
 
01.12.22
12:09
(9) Тогда действительно некорректный вариант. Но зачем предоставлять возможность выбора подразделения другой организации? )
12 Flempy
 
01.12.22
12:21
(9) У меня как раз таки случай из 0.1%. Можете подсказать, как можно на форме сделать условие, что при выборе подразделения, высвечиваются только подразделения указанной организации?
13 Kassern
 
01.12.22
12:34
(12) Связь выбора в свойствах поля
14 hockeyist
 
01.12.22
13:10
(10) В семерке это работало...
15 Dmitrii
 
гуру
01.12.22
13:13
(12) Указать у реквизита Подразделение связь параметров Выбора Отбор.Владелец(Организация). Это чтобы в форме выбора Подразделения сразу отбор был.
Ну и/или вручную наколхозить проверку при изменении значения Подразделения. И перед началом выполнения обработки ещё проверку. Для надёжности ))).
16 Dmitrii
 
гуру
01.12.22
13:16
(10) >> Делаем массив из Одного сотрудника.

Зачем? Для чего это усложнение с дополнительными телодвижениями? Что оно нам даст?
Избавит от необходимости контроля отборов по Подразделению и Организации? - Нет. Тогда ради чего, если это никак не решает нашу задачу?
17 hockeyist
 
01.12.22
13:44
(16) Не говоря уж о том, что в восьмерке это просто не работает. Применение "В" к пустой коллекции даст ложь, а не истину
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn