Здравствуйте.
Возможно-ли при выполнении запроса его результат вывести не в виде строк, а в виде столбцов?
Уже мозг сломал - никак не могу сформулировать запрос, чтобы можно было это добиться
Вот какой запрос у меня получился:
"ВЫБРАТЬ
| ПартииТоваровКомпанииОстатки.СкладКомпании,
| ПартииТоваровКомпанииОстатки.Номенклатура,
| ПартииТоваровКомпанииОстатки.КоличествоОстаток,
| ПартииТоваровКомпанииОстатки.СуммаОстаток,
| ПартииТоваровКомпанииОстатки.СуммаУпрОстаток,
| ПартииТоваровКомпанииОстатки.СуммаНДСОстаток,
| ЦеныСрезПоследних.ТипЦен,
| ЦеныСрезПоследних.Цена
|ИЗ
| РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
| ПО ПартииТоваровКомпанииОстатки.Номенклатура = ЦеныСрезПоследних.Номенклатура
|ГДЕ
| ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура"
В результате наблюдаю результат:
Склад Товар Себестоимость ОбщийОстаток ОстатокНаСкладе ТипЦены Цена
Ск1 Т1 100 15 5 ОПТ 110
Ск1 Т1 100 15 5 ОПТ1 120
Ск1 Т1 100 15 5 РОЗН 130
Ск2 Т1 100 15 12 ОПТ 110
Ск2 Т1 100 15 12 ОПТ1 120
Ск2 Т1 100 15 12 РОЗН 130
Ск3 Т1 100 15 3 ОПТ 110
Ск3 Т1 100 15 3 ОПТ1 120
Ск3 Т1 100 15 3 РОЗН 130
Ск1 Т2 90 10 2 ОПТ 100
Ск1 Т2 90 10 2 ОПТ1 105
Ск1 Т2 90 10 2 РОЗН 110
Ск2 Т2 90 10 3 ОПТ 100
Ск2 Т2 90 10 3 ОПТ1 105
Ск2 Т2 90 10 3 РОЗН 110
Ск3 Т2 90 10 5 ОПТ 100
Ск3 Т2 90 10 5 ОПТ1 105
Ск3 Т2 90 10 5 РОЗН 110
Скажите пожалуйста как можно посредством запроса(ов) привести результат к такому виду:
Товар Себестоимость ОбщийОстаток ОПТ ОПТ1 РОЗН Ск1 Ск2 Ск3
Т1 100 15 110 120 130 5 12 3
Т2 90 10 100 105 110 2 3 5
У меня получилось такой вид получить, но посредством двух отдельных запросов и последующей махинации с результирующими таблицами значений, а также дальнейшее их объединение, но мне кажется, что получилось как-то через ОПУ.
Вот такая получилась процедура:
Процедура КнСформироватьНажатие(Элемент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПартииТоваровКомпанииОстатки.СкладКомпании,
| ПартииТоваровКомпанииОстатки.Номенклатура,
| ПартииТоваровКомпанииОстатки.Партия,
| ПартииТоваровКомпанииОстатки.КоличествоОстаток,
| ПартииТоваровКомпанииОстатки.СуммаОстаток,
| ПартииТоваровКомпанииОстатки.СуммаУпрОстаток,
| ПартииТоваровКомпанииОстатки.СуммаНДСОстаток
|ИЗ
| РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
|ГДЕ
| ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура",ПолеВвода1);
Результат = Запрос.Выполнить();
ТЗПартии = Новый ТаблицаЗначений;
ОписаниеКоличества = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(10, 0));
ОписаниеСуммы = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 3));
ОписаниеНоменклатуры = Новый ОписаниеТипов("СправочникСсылка.Номенклатура");
ОписаниеТипыЦен = Новый ОписаниеТипов("СправочникСсылка.ТипыЦен");
ОписаниеСклада = Новый ОписаниеТипов("СправочникСсылка.СкладыКомпании");
ТЗПартии.Колонки.Добавить("СкладКомпании", ОписаниеСклада);
ТЗПартии.Колонки.Добавить("Номенклатура", ОписаниеНоменклатуры);
ТЗПартии.Колонки.Добавить("Партия");
ТЗПартии.Колонки.Добавить("КоличествоОстаток", ОписаниеКоличества);
ТЗПартии.Колонки.Добавить("СуммаУпрОстаток", ОписаниеСуммы);
ТЗПартии.Колонки.Добавить("СуммаОстаток", ОписаниеСуммы);
ТЗПартии.Колонки.Добавить("СуммаНДСОстаток", ОписаниеСуммы);
ТЗПартии = Результат.Выгрузить();
ТЗПартии.Свернуть("Номенклатура, СкладКомпании","КоличествоОстаток, СуммаУпрОстаток, СуммаОстаток, СуммаНДСОстаток");
СписокКолонок = "";
Для каждого скл из тпСклады Цикл
НаимКолонки = Строка(СтрЗаменить(скл.Склад.Наименование, " ", ""));
НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));
ТЗПартии.Колонки.Добавить(НаимКолонки, ОписаниеКоличества);
Если ПустаяСтрока(СписокКолонок)=Истина Тогда
СписокКолонок = НаимКолонки;
Иначе
СписокКолонок = СписокКолонок+", "+НаимКолонки;
КонецЕсли;
КонецЦикла;
Для каждого стр из ТЗПартии Цикл
ТекСклад = СтрЗаменить(стр.СкладКомпании, " ", "");
ТекСклад = СтрЗаменить(ТекСклад, "-", "_");
Попытка
стр[ТекСклад] = стр.КоличествоОстаток;
Исключение
КонецПопытки;
КонецЦикла;
СписокКолонок = "КоличествоОстаток, СуммаУпрОстаток, СуммаОстаток, СуммаНДСОстаток, "+СписокКолонок;
ТЗПартии.Свернуть("Номенклатура", СписокКолонок);
Для каждого тпц из тпЦены Цикл
НаимКолонки = Строка(СтрЗаменить(тпц.ТипыЦен.Наименование, " ", ""));
НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));
ТЗПартии.Колонки.Добавить(НаимКолонки, ОписаниеСуммы);
КонецЦикла;
Для каждого стр из ТЗПартии Цикл
ТекстСообщения = "";
Для Каждого Колонка Из ТЗПартии.Колонки Цикл
ТекстСообщения = ТекстСообщения+" "+стр[Колонка.Имя];
КонецЦикла;
КонецЦикла;
Запрос = Новый Запрос;
ТекстЗапроса = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура,
| ЦеныНоменклатурыСрезПоследних.ТипЦен,
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.Цены.СрезПоследних(&Период, Активность = ИСТИНА) КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";
Запрос.УстановитьПараметр("Период", ТекущаяДата());
Запрос.УстановитьПараметр("Номенклатура", ПолеВвода1);
Запрос.Текст = ТекстЗапроса;
Результат = Запрос.Выполнить();
ТЗЦены = Новый ТаблицаЗначений;
ТЗЦены.Колонки.Добавить("Номенклатура", ОписаниеНоменклатуры);
ТЗЦены.Колонки.Добавить("ТипЦен", ОписаниеТипыЦен);
ТЗЦены.Колонки.Добавить("Цена", ОписаниеСуммы);
ТЗЦены = Результат.Выгрузить();
СписокКолонок = "";
Для каждого тпц из тпЦены Цикл
НаимКолонки = Строка(СтрЗаменить(тпц.ТипыЦен.Наименование, " ", ""));
НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));
ТЗЦены.Колонки.Добавить(НаимКолонки, ОписаниеСуммы);
Если ПустаяСтрока(СписокКолонок)=Истина Тогда
СписокКолонок = НаимКолонки;
Иначе
СписокКолонок = СписокКолонок+", "+НаимКолонки;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.нТекОперация.Заголовок = "Конвертация результата";
ЭлементыФормы.ИндикаторВыполнения.МинимальноеЗначение = 0;
ЭлементыФормы.ИндикаторВыполнения.МаксимальноеЗначение = ТЗЦены.Количество();
Для каждого стр из ТЗЦены Цикл
ТекТипЦены = СтрЗаменить(стр.ТипЦен, " ", "");
ТекТипЦены = СтрЗаменить(ТекТипЦены, "-", "_");
Попытка
стр[ТекТипЦены] = стр.Цена;
Исключение
КонецПопытки;
ЭлементыФормы.ИндикаторВыполнения.Значение = ЭлементыФормы.ИндикаторВыполнения.Значение+1;
КонецЦикла;
ТЗЦены.Свернуть("Номенклатура",СписокКолонок);
Для каждого стр из ТЗЦены Цикл
ТекстСообщения = "";
Для Каждого Колонка Из ТЗЦены.Колонки Цикл
ТекстСообщения = ТекстСообщения+" "+стр[Колонка.Имя];
КонецЦикла;
Сообщить(ТекстСообщения);
КонецЦикла;
Для каждого Строка из ТЗПартии Цикл
НайденаяСтрокаЦен = ТЗЦены.Найти(Строка.Номенклатура, "Номенклатура");
Если НайденаяСтрокаЦен = Неопределено Тогда
Иначе
Для каждого тпц из тпЦены Цикл
НаимКолонки = Строка(СтрЗаменить(тпц.ТипыЦен.Наименование, " ", ""));
НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));
Строка[НаимКолонки] = НайденаяСтрокаЦен[НаимКолонки];
КонецЦикла;
КонецЕсли;
КонецЦикла;
ТабличныйДокумент=Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
ТабличныйДокумент.Вывести(ОбластьЗаголовок);
ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Основное");
ТабличныйДокумент.Вывести(ОбластьКопирования);
Для каждого ст из тпСклады Цикл
ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Склад");
ОбластьКопирования.Параметры.СкладКомпанииНаименование = ст.Склад.Наименование;
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
Для каждого ст из тпЦены Цикл
ОбластьКопирования = Макет.ПолучитьОбласть("Шапка|Цены");
ОбластьКопирования.Параметры.ТипЦен = ст.ТипыЦен.Наименование;
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
Пп = 0;
Для каждого стр из ТЗПартии Цикл
Пп=Пп+1;
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Основное");
ОбластьКопирования.Параметры.пп = Пп;
ОбластьКопирования.Параметры.ПечНоменклатура = стр.Номенклатура;
ОбластьКопирования.Параметры.ПечАртикул = стр.Номенклатура.Артикул;
ОбластьКопирования.Параметры.ПечОстаток = стр.КоличествоОстаток;
ОбластьКопирования.Параметры.ПечСебестоимостьОбщая = стр.СуммаУпрОстаток;
ОбластьКопирования.Параметры.ПечСебестоимостьЕдиничная = стр.СуммаУпрОстаток/стр.КоличествоОстаток;
ТабличныйДокумент.Вывести(ОбластьКопирования);
Для каждого скл из тпСклады Цикл
НаимКолонки = Строка(СтрЗаменить(скл.Склад.Наименование, " ", ""));
НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));
ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Склад");
ОбластьКопирования.Параметры.ПечСклад = стр[НаимКолонки];
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
Для каждого тпц из тпЦены Цикл
НаимКолонки = Строка(СтрЗаменить(тпц.ТипыЦен.Наименование, " ", ""));
НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));
ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Цены");
ОбластьКопирования.Параметры.ПечЦена = стр[НаимКолонки];
ТабличныйДокумент.Присоединить(ОбластьКопирования);
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.Показать("Пример использования гор. автогруппировки");
КонецПроцедуры
Или средствами запроса(ов) это не решить и придется городить огород обрабатывая ТЗ и "склеивая" их между собой?
С Уважением, Дмитрий.