Создание отчёта

1. user1958097 11.06.23 09:00 Сейчас в теме
Заранее извиняюсь за дилетантский вопрос, со схемой компоновки данных знаком очень поверхностно.

Есть регистр накопления Продажи с измерениями Покупатель и Номенклатура. Требуется создать отчёт с двумя полями ввода для юзера: КупленнаяНоменклатура и НекупленнаяНоменклатура. Пользователь выбирает купленную и некупленную номенклатуру, а отчёт на основе регистра Продажи выдаёт список покупателей, которые удовлетворяют двум условиям: купили первую номенклатуру и не купили вторую.

Получается сделать отбор по одному условию через, собственно, механизм отбора. Как сделать так, чтобы проверялись оба условия - ума не приложу
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DesertPunk 11.06.23 09:50 Сейчас в теме
(1)Номенклатура = &номенклатура1 И НЕ Номенклатура = &номенклатура2
Лучше делай через виртуальные таблицы РН
3. user1958097 11.06.23 10:05 Сейчас в теме
(2) Делаю через виртуальную таблицу, получается запрос

ВЫБРАТЬ
	ПродажиОбороты.Покупатель КАК Покупатель,
	ПродажиОбороты.Номенклатура КАК Номенклатура
ИЗ
	РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ГДЕ
	НЕ ПродажиОбороты.Номенклатура = &НедокупленныйТовар

СГРУППИРОВАТЬ ПО
	ПродажиОбороты.Покупатель,
	ПродажиОбороты.Номенклатура
Показать


Т.к. в регистре содержатся записи формата "Покупатель | Номенклатура", то в отчёте получаем всех покупателей, у которых есть хотя бы одна строка в регистре, которая условию соответствует. То есть, если Боб купил компьютер и мышь, а мы ставим в НекупленныйТовар компьютер, то Боб всё равно попадёт в отчёт, ведь есть запись "Боб | Мышь", удовлетворяющая нашему требованию. Не понимаю, как именно этот нюанс отразить
4. DesertPunk 11.06.23 10:15 Сейчас в теме
(3)Как хранятся данные о связке товара?
5. user1958097 11.06.23 10:39 Сейчас в теме
(4) Не понял вопроса. Номенклатура и Покупатель - ссылки на соответствующие справочники. Вкладка "Связи наборов данных" в СКД пуста
6. DesertPunk 11.06.23 11:07 Сейчас в теме
(5) Как конфа будет понимать что должно попадать в «недокупленный товар»? Ты же не планируешь в эту колонку выгружать все 50000+ позиций номенклатуры. Скорее всего есть связка типа «Смартфон+ чехол» или «пачка сигарет+зажигалка».
7. user1958097 11.06.23 11:15 Сейчас в теме
(6) Это учебная конфигурация, пока только несколько элементов номенклатуры. Подобного рода связки нет, по условию задачи она должна быть кастомизируемой: в форме отчёта пользователь задаёт товар, который куплен, который недокуплен, и получает список подходящих покупателей. И именно с определением некупленного товара у меня проблемы: нужен какой-то механизм, который возьмёт все записи регистра с КупленнымТоваром, и Покупателей из этих записей проверит на то, что в регистре отсутствуют записи этих Покупателей с НедокупленнымТоваром. В силу своего незнания СКД это я реализовать не могу, но подозреваю, что решение кроется в правильной настройке группировки/иерархии.

На псевдокоде:

КупленныйТовар = Ввод()
НедокупленныйТовар = Ввод()

Если КупленныйТовар в Регистре

    Если Не (НедокупленныйТовар в Регистре и НедокупленныйТовар.Покупатель = КупленныйТовар.Покупатель)
        Вывод(КупленныйТовар.Покупатель)
8. DesertPunk 12.06.23 08:48 Сейчас в теме
(7) Тогда проще. В качестве параметра можно передавать не только один элемент сравнения, но и список:
НЕ Номенклатура В (&Список)

Получается тебе нужно сначала получить список купленной номенклатуры по покупателю и передать это в качестве параметра для отбора в справочник номенклатуры. Но сразу оговорюсь: в реальной боевой базе так можно очень элегантно положить сервер.
9. user1958097 12.06.23 14:55 Сейчас в теме
(8) Благодарю за ответ. Пожалуй, это то что нужно. Но я уже реализовал таким вот образом. Механизм получается вроде тот же, что и у тебя.

ВЫБРАТЬ
	ПродажиОбороты.Покупатель КАК Покупатель,
	ПродажиОбороты.Номенклатура КАК Номенклатура
ИЗ
	РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
ГДЕ
	ПродажиОбороты.Номенклатура = &КупленныйТовар
	И НЕ (ПродажиОбороты.Покупатель, ПродажиОбороты.Номенклатура) В
				(ВЫБРАТЬ
					ПродажиОбороты.Покупатель,
					ПродажиОбороты.Номенклатура
				ИЗ
					РегистрНакопления.Продажи.Обороты КАК ВложенныеПродажи
				ГДЕ
					ВложенныеПродажи.Покупатель = ПродажиОбороты.Покупатель
					И ВложенныеПродажи.Номенклатура = &НедокупленныйТовар)
Показать
Оставьте свое сообщение

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