Как получить структуру из запроса

1. luda33 27.12.16 10:49 Сейчас в теме
Есть регистр сведений
номенклатура1 картинка1
номенклатура1 картинка2
номенклатура1 картинка3
номенклатура1 картинка4

Как запросом получить результат
номенклатура1 картинка1 картинка2 картинка3 картинка4 - при условии что нас интересует 4 любые картинки при их наличии в регистре
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
6. GeRon 27.12.16 13:18 Сейчас в теме
(1)задача называется "транспонирование"
Если просто получить таблицу, то только с постобработкой, язык запросов в 1с не такой развитый
8. ice-net 19 27.12.16 13:24 Сейчас в теме
(6)
Язык запросов довольно гибкий и функциональный! Правда, не всегда такие решения выигрывают по скорости и универсальности. =)
2. artem_from_minsk 27.12.16 10:55 Сейчас в теме
  | ВЫБРАТЬ ПЕРВЫЕ 4
        |   РегистрХ.Номенклатура КАК Номенклатура,
        |   РегистрХ.Картинка КАК Картинка
        | ИЗ
        |   РегистрСведений.РегистрХ
        | ГДЕ РегистрХ.Номенклатура = &Номенклатура


Как -то так. Выберет либо 4 записи либо меньше
3. luda33 27.12.16 12:41 Сейчас в теме
(2) и получу таблицу
номенклатура1 картинка1
номенклатура1 картинка2
номенклатура1 картинка3
номенклатура1 картинка4
а надо одну строку таблицы
номенклатура1 картинка1 картинка2 картинка3 картинка4
отбора по номенклатуре не будет - нужно получить результат типа

номенклатура1 картинка1.1 картинка1.2 картинка1.3 картинка1.4
номенклатура2 картинка2.1 картинка2.2 картинка2.3 картинка2.4
номенклатура3 картинка3.1 картинка3.2 картинка3.3 картинка3.4

4. antz 27.12.16 12:55 Сейчас в теме
Надо именно в запросе? Постобработка не канает?
корум; +1 Ответить
5. ice-net 19 27.12.16 13:07 Сейчас в теме
Примерно вот так...
Скрытый текст
luda33; корум; +2 Ответить
7. ice-net 19 27.12.16 13:21 Сейчас в теме
(5)

Откорректировал свое решение в (5) , теперь должно получиться как Вы и хотели.
9. luda33 27.12.16 13:52 Сейчас в теме
10. Sashares 35 27.12.16 14:13 Сейчас в теме
(5) Зачем так сложно?

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

;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ первые 1 
	Таб.Номенклатура,
	Таб.Картинка КАК картинка1,
	Таб1.Картинка КАК Картинка1 КАК картинка2,
	Таб2.Картинка КАК Картинка2 КАК картинка3,
	Таб3.Картинка КАК Картинка3 КАК картинка4
ИЗ
	Таб КАК Таб
		ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб1
		ПО Таб.Номенклатура = Таб1.Номенклатура
			И Таб.Картинка <> Таб1.Картинка
		ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб2
		ПО Таб.Номенклатура = Таб2.Номенклатура
			И Таб.Картинка <> Таб2.Картинка
			И (Таб1.Картинка <> Таб2.Картинка)
		ЛЕВОЕ СОЕДИНЕНИЕ Таб КАК Таб3
		ПО Таб.Номенклатура = Таб3.Номенклатура
			И Таб.Картинка <> Таб3.Картинка
			И (Таб1.Картинка <> Таб3.Картинка)
			И (Таб2.Картинка <> Таб3.Картинка)
Показать


Такой вариант, как и в (5) подходит только для получения разных картинок 1 номенклатуры. Если будет без отбора по номенклатуре, или по нескольким, будет плохо.
корум; +1 Ответить
11. Sashares 35 27.12.16 15:03 Сейчас в теме
Более рабочий вариант, но картинок должно быть не меньше 4 =):
ВЫБРАТЬ
	"Ном1" КАК Номенклатура,
	"Кар1" КАК Картинка,
	1 КАК кол
ПОМЕСТИТЬ Таб

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном1",
	"Кар2",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном1",
	"Кар3",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном1",
	"Кар4",
	1
	
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном1",
	"Кар5",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном1",
	"Кар6",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном2", 
	"Кар1",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном2",
	"Кар2",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном2",
	"Кар3",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном2",
	"Кар4",
	1
	
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном2",
	"Кар5",
	1
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
	"Ном2",
	"Кар6",
	1

;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	Таб.Номенклатура КАК Номенклатура,
	максимум(Таб.Картинка) КАК Картинка1,
	максимум(Таб1.Картинка) КАК Картинка2,
	максимум(Таб2.Картинка) КАК Картинка3,
	максимум(Таб3.Картинка) КАК Картинка4
ИЗ
	Таб КАК Таб
		внутреннее СОЕДИНЕНИЕ Таб КАК Таб1
		ПО Таб.Номенклатура = Таб1.Номенклатура
			И Таб.Картинка < Таб1.Картинка
		внутреннее СОЕДИНЕНИЕ Таб КАК Таб2
		ПО (Таб.Номенклатура = Таб2.Номенклатура)
			И (Таб1.Картинка < Таб2.Картинка)
		внутреннее СОЕДИНЕНИЕ Таб КАК Таб3
		ПО (Таб.Номенклатура = Таб3.Номенклатура)
			И (Таб2.Картинка < Таб3.Картинка)
СГруппировать По Таб.Номенклатура
Показать
Прикрепленные файлы:
12. artem_from_minsk 27.12.16 15:08 Сейчас в теме
Ну в 1С я не стречал аналога SQL PIVOT (транспонирование). По этому как уже советовали либо через временную таблицу. Как по мне так не большая проблема пробежать по циклу и перенести данные по строкам в столбцы таблицы значений. Затем можно добавить в виде параметра в запрос, если нужно.
Оставьте свое сообщение

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