Есть регистр ЗначенияСвойствОбъектов, и справочник например "Склады",
По складам в регистр пишутся свойства (как в типовых). Требуется запросом получить данные по складам в разрезе этих свойств.
В SQL-е есть оператор Pivot для "переворачивания" таблиц, то есть данные выборки становятся полями другой выборки. А как бы извернуться с запросом в 1С?
По складам в регистр пишутся свойства (как в типовых). Требуется запросом получить данные по складам в разрезе этих свойств.
В SQL-е есть оператор Pivot для "переворачивания" таблиц, то есть данные выборки становятся полями другой выборки. А как бы извернуться с запросом в 1С?
Прикрепленные файлы:
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Вот какое-то решение. Но всё-равно нужно знать какие свойства ты хочешь видеть
глупость написал. Но пусть остаётся.
Выбрать
"Товар1" КАК Товар,
"Свойство1" КАК Свойство,
"Значение 1" Как Знач
Поместить Свойства
Объединить все
Выбрать
"Товар1" КАК Товар,
"Свойство2" КАК Свойство,
"Значение 2" Как Знач
Объединить все
Выбрать
"Товар2" КАК Товар,
"Свойство1" КАК Свойство,
"Значение1 товар 2" Как Знач
Объединить все
Выбрать
"Товар2" КАК Товар,
"Свойство2" КАК Свойство,
"Значение2 товар2" Как Знач
Объединить все
Выбрать
"Товар2" КАК Товар,
"Свойство3" КАК Свойство,
"Значение3 товар2" Как Знач
;
Выбрать distinct
Свойства1.Товар,
Свойства2.Знач КАК Свойство1,
Свойства3.Знач КАК Свойство2,
Свойства4.Знач КАК Свойство3
Из
Свойства КАК Свойства1
Левое Соединение Свойства КАК Свойства2
По Свойства1.Товар = Свойства2.Товар
И Свойства2.Свойство = "Свойство1"
Левое Соединение Свойства КАК Свойства3
По Свойства1.Товар = Свойства3.Товар
И Свойства3.Свойство = "Свойство2"
Левое Соединение Свойства КАК Свойства4
По Свойства1.Товар = Свойства4.Товар
И Свойства4.Свойство = "Свойство3"
;
Уничтожить
Свойства
Показатьглупость написал. Но пусть остаётся.
(5) Спасибо за ответ, хотя все равно идеей не проникся. Те свойства, которые я хочу видеть получаются просто:
И вот что теперь с этими данными делать - ума не приложу. Я конечно где то в глубине души (где то очень глубоко) предполагаю, что будет еще запрос (или несколько) с использованием временных таблиц, кучей левых соединений (видимо по количеству различных свойств) и наверно текст запроса будет сформирован программно и т.д. Но пока я до этого не допер. Если не трудно разъясни суть своего алгоритма.
"ВЫБРАТЬ
| ЗначенияСвойств.Свойство
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
|ГДЕ
| ЗначенияСвойств.Объект ССЫЛКА Справочник.Склады
|
|СГРУППИРОВАТЬ ПО
| ЗначенияСвойств.Свойство";
ПоказатьИ вот что теперь с этими данными делать - ума не приложу. Я конечно где то в глубине души (где то очень глубоко) предполагаю, что будет еще запрос (или несколько) с использованием временных таблиц, кучей левых соединений (видимо по количеству различных свойств) и наверно текст запроса будет сформирован программно и т.д. Но пока я до этого не допер. Если не трудно разъясни суть своего алгоритма.
(7) Пишет
Ошибка при выполнении файловой операции 'D:\Downloads\ТранспонированиеСвойств.epf'
по причине:
Неверный формат хранилища данных 'file://D:/Downloads/ТранспонированиеСвойств.epf'
Это часом не 8.2? или 8.0 или чо там еще, у меня просто 8.1 (13.37). Заголовки файлов отличаются..
Ошибка при выполнении файловой операции 'D:\Downloads\ТранспонированиеСвойств.epf'
по причине:
Неверный формат хранилища данных 'file://D:/Downloads/ТранспонированиеСвойств.epf'
Это часом не 8.2? или 8.0 или чо там еще, у меня просто 8.1 (13.37). Заголовки файлов отличаются..
(8) 1С:Предприятие 8.1 (8.1.13.41). Писал дома, сейчас на работе, скачал с форума. Всё работает.
Кладёшь на форму табличное поле типа таблица значений. Называешь её тз. В модуль обработки заталкиваешь такой код:
и настаёт счастье
Кладёшь на форму табличное поле типа таблица значений. Называешь её тз. В модуль обработки заталкиваешь такой код:
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗначенияСвойств.Свойство
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойств
|ГДЕ
| ЗначенияСвойств.Объект ССЫЛКА Справочник.Склады";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
поз = 1;
ЗапросТранспонированный = Новый Запрос;
стрЗначенияСвойств = "";
стрЛевыеСоединения = "";
Пока Выборка.Следующий() Цикл
стр = Формат(поз, "ЧГ=0");
стрЗначенияСвойств = стрЗначенияСвойств + "
| Свойства" + стр + ".Значение КАК Свойство" + стр + ",";
стрЛевыеСоединения = стрЛевыеСоединения + "
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК Свойства" + стр + "
| ПО ЗначенияСвойствОбъектов.Объект = Свойства" + стр + ".Объект
| И (Свойства" + стр + ".Свойство = &Свойство" + стр + ")";
ЗапросТранспонированный.УстановитьПараметр("Свойство" + стр, Выборка.Свойство);
поз = поз + 1;
КонецЦикла;
стрЗначенияСвойств = Лев(стрЗначенияСвойств, СтрДлина(стрЗначенияСвойств) - 1); // уберём последнюю зап'ятую. она не нужна.
ЗапросТранспонированный.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| ЗначенияСвойствОбъектов.Объект КАК Товар,
| " + стрЗначенияСвойств + "
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
| " + стрЛевыеСоединения + "
|ГДЕ
| ЗначенияСвойствОбъектов.Объект ССЫЛКА Справочник.Склады";
РезультатТранспонирования = ЗапросТранспонированный.Выполнить();
//Выборка = Результат.Выбрать();
ЭлементыФормы.тз.Значение = РезультатТранспонирования.Выгрузить();
// транспонированный результат запроса получили. Правда названия полей выборки бессмысленны.
// Зато порядок совпадает с порядком полей в запросе по свойствам.
// Теперь наводим красоту. Назовём колонки осмысленно.
Выборка.Сбросить();
поз = 1;
Пока Выборка.Следующий() Цикл
тз.Колонки[поз].Заголовок = Строка(Выборка.Свойство);
поз = поз + 1;
КонецЦикла;
ЭлементыФормы.тз.СоздатьКолонки();
КонецПроцедуры
Показатьи настаёт счастье
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот