Как построить запрос

1. user824565 06.10.24 13:00 Сейчас в теме
Документ в ТабличнойЧасти:
Отдел(Справочник.Отделы) Согласование (Перечисление.Согласование)
Пример:
Отдел №1 - Согласовано
Отдел №2 - НаСогласовании
Отдел №3 - НаСогласовании

В справочнике Отделы есть Табличная часть "СписокСотрудников" из Справочник.Пользователи

Есть ПараметрыСенса: ТекущийПользователь.

Нужно построить запрос: Получить список отделов, в которых числится ПараметрыСенса.ТекущийПользователь, а затем собрать Все документы в которых присутствуют отделы с состоянием НаСогласовании. Причем не все, а только первый в списке. В вышеприведенном примере в результате выполнения запроса данный документ попадет в список только если текущий пользователь будет присутствовать в табличной части Отдел №2.
По теме из базы знаний
Найденные решения
3. SlavaKron 06.10.24 13:50 Сейчас в теме
(1)
только если текущий пользователь будет присутствовать в табличной части Отдел №2
Странное условие. То есть, если текущий пользователь присутствует в Отделе №3, но не в Отделе №2, то такой документ не нужен?

1. Получить временную таблицу отделов текущего пользователя
2. Получить временную таблицу с полями "Документ" и "Отдел", где отдел ищется по минимальному номеру строки и Согласование = НаСогласовании
3. Сделать внутреннее соединение временных таблиц по полю Отдел
user1519152; +1 Ответить
2. lone_mayson 54 06.10.24 13:47 Сейчас в теме
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|	Таблица.Ссылка КАК Отдел
|ПОМЕСТИТЬ Отделы
|ИЗ
|	Справочник.Отделы.Пользователи КАК Таблица
|ГДЕ
|	Таблица.Пользователь = &Пользователь
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	Согласование.Ссылка КАК Документ,
|	Согласование.НомерСтроки КАК НомерСтроки,
|	Отделы.Отдел КАК Отдел
|ПОМЕСТИТЬ ТекСогласование
|ИЗ
|	Отделы КАК Отделы
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НекийДокумент.Согласование КАК Согласование
|		ПО Отделы.Отдел = Согласование.Отдел
|			И Согласование.Согласование = ЗНАЧЕНИЕ(Перечисление.Согласование.НаСогласовании)
|			И (Согласование.Ссылка.Проведен)
|;
|////////////////////////////////////////////////////////////­////////////////////
|
|ВЫБРАТЬ
|	ТекСогласование.Документ КАК Документ,
|	ТекСогласование.НомерСтроки КАК НомерСтроки,
|	ТекСогласование.Отдел КАК Отдел
|ИЗ
|	ТекСогласование КАК ТекСогласование
|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.НекийДокумент.Согласование КАК Согласование
|		ПО ТекСогласование.Документ = Согласование.Ссылка
|			И (ВЫБОР
|				КОГДА ТекСогласование.НомерСтроки = 1
|					ТОГДА ЛОЖЬ
|				ИНАЧЕ ТекСогласование.НомерСтроки - 1 = Согласование.НомерСтроки
|			КОНЕЦ)
|ГДЕ
|	ВЫБОР
|		КОГДА ЕСТЬNULL(Согласование.Согласование, ЗНАЧЕНИЕ(Перечисление.Согласование.Согласован)) = ЗНАЧЕНИЕ(Перечисление.Согласование.Согласован)
|			ТОГДА ИСТИНА
|		ИНАЧЕ ЛОЖЬ
|	КОНЕЦ"
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. SlavaKron 06.10.24 13:50 Сейчас в теме
(1)
только если текущий пользователь будет присутствовать в табличной части Отдел №2
Странное условие. То есть, если текущий пользователь присутствует в Отделе №3, но не в Отделе №2, то такой документ не нужен?

1. Получить временную таблицу отделов текущего пользователя
2. Получить временную таблицу с полями "Документ" и "Отдел", где отдел ищется по минимальному номеру строки и Согласование = НаСогласовании
3. Сделать внутреннее соединение временных таблиц по полю Отдел
user1519152; +1 Ответить
2. lone_mayson 54 06.10.24 13:47 Сейчас в теме
"ВЫБРАТЬ РАЗЛИЧНЫЕ
|	Таблица.Ссылка КАК Отдел
|ПОМЕСТИТЬ Отделы
|ИЗ
|	Справочник.Отделы.Пользователи КАК Таблица
|ГДЕ
|	Таблица.Пользователь = &Пользователь
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	Согласование.Ссылка КАК Документ,
|	Согласование.НомерСтроки КАК НомерСтроки,
|	Отделы.Отдел КАК Отдел
|ПОМЕСТИТЬ ТекСогласование
|ИЗ
|	Отделы КАК Отделы
|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.НекийДокумент.Согласование КАК Согласование
|		ПО Отделы.Отдел = Согласование.Отдел
|			И Согласование.Согласование = ЗНАЧЕНИЕ(Перечисление.Согласование.НаСогласовании)
|			И (Согласование.Ссылка.Проведен)
|;
|////////////////////////////////////////////////////////////­////////////////////
|
|ВЫБРАТЬ
|	ТекСогласование.Документ КАК Документ,
|	ТекСогласование.НомерСтроки КАК НомерСтроки,
|	ТекСогласование.Отдел КАК Отдел
|ИЗ
|	ТекСогласование КАК ТекСогласование
|		ЛЕВОЕ СОЕДИНЕНИЕ Документ.НекийДокумент.Согласование КАК Согласование
|		ПО ТекСогласование.Документ = Согласование.Ссылка
|			И (ВЫБОР
|				КОГДА ТекСогласование.НомерСтроки = 1
|					ТОГДА ЛОЖЬ
|				ИНАЧЕ ТекСогласование.НомерСтроки - 1 = Согласование.НомерСтроки
|			КОНЕЦ)
|ГДЕ
|	ВЫБОР
|		КОГДА ЕСТЬNULL(Согласование.Согласование, ЗНАЧЕНИЕ(Перечисление.Согласование.Согласован)) = ЗНАЧЕНИЕ(Перечисление.Согласование.Согласован)
|			ТОГДА ИСТИНА
|		ИНАЧЕ ЛОЖЬ
|	КОНЕЦ"
Показать
4. user1519152 06.10.24 16:52 Сейчас в теме
>Странное условие.
Это просто список документов которые у человека на согласовании
(2) Сработает только если согласование идет строго по очереди, что в жизни не так. Да и выглядит запутанно на мой вкус. (3) проще, надежнее и просто верно.
5. user824565 06.10.24 20:41 Сейчас в теме
(4Согласование строго по очереди. Спасибо огромное!!
Оставьте свое сообщение

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