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 14 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 14 27.12.16 13:07 Сейчас в теме
Примерно вот так...
Скрытый текст
luda33; корум; +2 Ответить
7. ice-net 14 27.12.16 13:21 Сейчас в теме
(5)

Откорректировал свое решение в (5) , теперь должно получиться как Вы и хотели.
9. luda33 27.12.16 13:52 Сейчас в теме
10. Sashares 4 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 4 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 (транспонирование). По этому как уже советовали либо через временную таблицу. Как по мне так не большая проблема пробежать по циклу и перенести данные по строкам в столбцы таблицы значений. Затем можно добавить в виде параметра в запрос, если нужно.
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Ведущий инженер - программист 1С
Москва
зарплата от 200 000 руб.
Полный день

Ведущий программист 1С
Нижний Новгород
зарплата от 100 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству