Как получить номенклатуру, спецификация которой содержит необходимые значения рабочих мест врачей

1. user1421407 30.11.21 12:27 Сейчас в теме
Доброго времени суток, товарищи! Третий день ломаю голову, так и не смог придумать ничего путного...

Задача такая:
Имеется справочник "СпецификацииМедицинскихУслуг" с табличной частью "МестаВыполненияЭтапов".
Этот справочник имеет реквизит "Номенклатура".

Необходимо найти всю номенклатуру, спецификация которой содержит в табличной части все необходимые мне места выполения этапов...

Пытался сделать вот такой запрос:

Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
               |	СпецификацииМедУслугРабочиеМеста.Ссылка.Номенклатура КАК Номенклатура
               |ИЗ
               |	Справочник.СпецификацииМедицинскихУслуг.МестаВыполненияЭтапов КАК СпецификацииМедУслугРабочиеМеста
               |ГДЕ
               |	СпецификацииМедУслугРабочиеМеста.Ссылка.Активная = ИСТИНА
               |	И СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто1
               |	И СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто2
               |	И СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто3";
Запрос.УстановитьПараметр("РабочееМесто1", РабочееМесто1);
Запрос.УстановитьПараметр("РабочееМесто2", РабочееМесто2);
Запрос.УстановитьПараметр("РабочееМесто3", РабочееМесто3);
Выгрузка = Запрос.Выполнить().Выгрузить();
Показать


В результате - пустое значение "Выгрузка"...

Надеюсь на вашу помощь, господа!
Найденные решения
6. collider 30.11.21 14:03 Сейчас в теме
Не ручаюсь, что синтаксис - контроль не ругнётся, но принцип, думаю, понятен.

ВЫБРАТЬ
СпецификацииМедУслугРабочиеМеста.Ссылка.Номенклатура КАК Ссылка,
Количество(Различные СпецификацииМедУслугРабочиеМеста.МестоВыполнения) Как МестоВыполнения 
ИЗ
 Справочник.СпецификацииМедицинскихУслуг.МестаВыполненияЭтапов КАК СпецификацииМедУслугРабочиеМеста
ГДЕ
 СпецификацииМедУслугРабочиеМеста.Ссылка.Активная = ИСТИНА
 И (СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто1
 ИЛИ СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто2
 ИЛИ СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто3"

СГРУППИРОВАТЬ ПО 
СпецификацииМедУслугРабочиеМеста.Ссылка

ИМЕЮЩИЕ
Количество(Различные СпецификацииМедУслугРабочиеМеста.МестоВыполнения) = 3
Показать

Выбрать все, в которых попадётся хотя бы один из параметров и сгруппировать. Где попадётся три, то и выбирать.
user1421407; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. MACTEP1C 30.11.21 12:42 Сейчас в теме
Может, ИЛИ нужно, а не И?
3. collider 30.11.21 12:47 Сейчас в теме
(2) Тогда в выборку попадут все, в которых есть хотя бы одно место выполнения этапов. А надо только такие, в которых все.
4. user1421407 30.11.21 12:56 Сейчас в теме
(3) Да, вы правильно поняли, нужно чтобы все три рабочих места находились в табличной части спецификации номенклатуры...
5. VictorRGB2 13 30.11.21 13:46 Сейчас в теме
(4) попробуйте сгруппировать условие в одно И
как-то так
| И (СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто1
| И СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто2
| И СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто3)

хотя... то на то и выйдет снова

я бы попробовал по одному условия отключать и смотреть в результат запроса
что-то с установкой параметров не то, скорее всего

и вот это
СпецификацииМедУслугРабочиеМеста.Ссылка.Активная = ИСТИНА

можно заменить на простое
СпецификацииМедУслугРабочиеМеста.Ссылка.Активная
8. user1421407 01.12.21 06:14 Сейчас в теме
(5) Итоговый код получился таким:

ВЫБРАТЬ
	СпецификацииМедУслугРабочиеМеста.Ссылка.Номенклатура КАК Номенклатура,
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СпецификацииМедУслугРабочиеМеста.МестоВыполнения) КАК МестоВыполнения
ИЗ
	Справочник.СпецификацииМедицинскихУслуг.МестаВыполненияЭтапов КАК СпецификацииМедУслугРабочиеМеста
ГДЕ
	СпецификацииМедУслугРабочиеМеста.Ссылка.Активная = ИСТИНА
	И (СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто1
			ИЛИ СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто2
			ИЛИ СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто3)

СГРУППИРОВАТЬ ПО
	СпецификацииМедУслугРабочиеМеста.Ссылка,
	СпецификацииМедУслугРабочиеМеста.Ссылка.Номенклатура,

ИМЕЮЩИЕ
	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СпецификацииМедУслугРабочиеМеста.МестоВыполнения) = &КоличествоРабочихМест
Показать
6. collider 30.11.21 14:03 Сейчас в теме
Не ручаюсь, что синтаксис - контроль не ругнётся, но принцип, думаю, понятен.

ВЫБРАТЬ
СпецификацииМедУслугРабочиеМеста.Ссылка.Номенклатура КАК Ссылка,
Количество(Различные СпецификацииМедУслугРабочиеМеста.МестоВыполнения) Как МестоВыполнения 
ИЗ
 Справочник.СпецификацииМедицинскихУслуг.МестаВыполненияЭтапов КАК СпецификацииМедУслугРабочиеМеста
ГДЕ
 СпецификацииМедУслугРабочиеМеста.Ссылка.Активная = ИСТИНА
 И (СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто1
 ИЛИ СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто2
 ИЛИ СпецификацииМедУслугРабочиеМеста.МестоВыполнения = &РабочееМесто3"

СГРУППИРОВАТЬ ПО 
СпецификацииМедУслугРабочиеМеста.Ссылка

ИМЕЮЩИЕ
Количество(Различные СпецификацииМедУслугРабочиеМеста.МестоВыполнения) = 3
Показать

Выбрать все, в которых попадётся хотя бы один из параметров и сгруппировать. Где попадётся три, то и выбирать.
user1421407; +1 Ответить
7. user1421407 01.12.21 06:12 Сейчас в теме
(6) Благодарю!!! Всё получилось :)
Оставьте свое сообщение

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