Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Развернуть результат запроса в столбцы          
bizisoft Подменю пользователя
сообщение 01.03.16, 16:33
Сообщение #1

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Здравствуйте.

Возможно-ли при выполнении запроса его результат вывести не в виде строк, а в виде столбцов?
Уже мозг сломал - никак не могу сформулировать запрос, чтобы можно было это добиться
Вот какой запрос у меня получился:
"ВЫБРАТЬ
        |    ПартииТоваровКомпанииОстатки.СкладКомпании,
        |    ПартииТоваровКомпанииОстатки.Номенклатура,
        |    ПартииТоваровКомпанииОстатки.КоличествоОстаток,
        |    ПартииТоваровКомпанииОстатки.СуммаОстаток,
        |    ПартииТоваровКомпанииОстатки.СуммаУпрОстаток,
        |    ПартииТоваровКомпанииОстатки.СуммаНДСОстаток,
        |    ЦеныСрезПоследних.ТипЦен,
        |    ЦеныСрезПоследних.Цена
        |ИЗ
        |    РегистрНакопления.ПартииТоваровКомпании.Остатки КАК ПартииТоваровКомпанииОстатки
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних КАК ЦеныСрезПоследних
        |        ПО ПартииТоваровКомпанииОстатки.Номенклатура = ЦеныСрезПоследних.Номенклатура
        |ГДЕ
        |    ПартииТоваровКомпанииОстатки.Номенклатура = &Номенклатура"

В результате наблюдаю результат:
Склад          Товар         Себестоимость              ОбщийОстаток                     ОстатокНаСкладе                     ТипЦены              Цена

Ск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;
          ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
        ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Основное");    
        ОбластьКопирования.Параметры.пп = Пп;
        ОбластьКопирования.Параметры.ПечНоменклатура = стр.Номенклатура;
        ОбластьКопирования.Параметры.ПечАртикул = стр.Номенклатура.Артикул;
        ОбластьКопирования.Параметры.ПечОстаток = стр.КоличествоОстаток;
        ОбластьКопирования.Параметры.ПечСебестоимостьОбщая = стр.СуммаУпрОстаток;    
        ОбластьКопирования.Параметры.ПечСебестоимостьЕдиничная = стр.СуммаУпрОстаток/стр.КоличествоОстаток;    
        ТабличныйДокумент.Вывести(ОбластьКопирования);
        Для каждого скл из тпСклады Цикл    
            НаимКолонки = Строка(СтрЗаменить(скл.Склад.Наименование, " ", ""));
            НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));                              
            ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Склад");
            ОбластьКопирования.Параметры.ПечСклад = стр[НаимКолонки];
            ТабличныйДокумент.Присоединить(ОбластьКопирования);
        КонецЦикла;
        Для каждого тпц из тпЦены Цикл    
            НаимКолонки = Строка(СтрЗаменить(тпц.ТипыЦен.Наименование, " ", ""));
            НаимКолонки = Строка(СтрЗаменить(НаимКолонки, "-", "_"));            
            ОбластьКопирования = Макет.ПолучитьОбласть("Детали|Цены");
            ОбластьКопирования.Параметры.ПечЦена = стр[НаимКолонки];
            ТабличныйДокумент.Присоединить(ОбластьКопирования);
        КонецЦикла;         
    КонецЦикла;
    ТабличныйДокумент.Показать("Пример использования гор. автогруппировки");
КонецПроцедуры


Или средствами запроса(ов) это не решить и придется городить огород обрабатывая ТЗ и "склеивая" их между собой?

С Уважением, Дмитрий.


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

logist Подменю пользователя
сообщение 01.03.16, 16:37
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Зачем вы создаете ТЗ, если результат запроса и есть ТЗ такая же типизированная.
ТЗПартии = Результат.Выгрузить();


Попробуйте сделать на СКД, там это возможно, без танцев с бубном. Там Таблица, где Склад и ТипЦены это группировки колонок.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

pablo Подменю пользователя
сообщение 01.03.16, 16:39
Сообщение #3

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Варианты обойтись только запросом без мучений:
1. сводная таблица
2. СКД

и запрос тогда придется переписывать


Signature
Правильно поставленный вопрос содержит до 90% ответа.

Petre Подменю пользователя
сообщение 01.03.16, 16:51
Сообщение #4

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

Делайте столько левых соединений, сколько должно быть типов цены.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

bizisoft Подменю пользователя
сообщение 02.03.16, 10:45
Сообщение #5

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

Спасибо.
Попробую разобраться в СКД (что-то по началу думал, что это Система Конструкторской Документации :-) )


Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

lga_ Подменю пользователя
сообщение 11.03.16, 15:39
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 15
Спасибо сказали: 5 раз
Рейтинг: 0

Если точно известно количество типов цен и складов можно использовать конструкцию
ВЫБОР КОГДА ПартииТоваровКомпанииОстатки.СкладКомпании.Код = "123" ТОГДА
ПартииТоваровКомпанииОстатки.СуммаОстаток ИНАЧЕ 0 КОНЕЦ КАК ОстатокПоСкладу123
Затем собрать все через СГРУППИРОВАТЬ ПО.
Но конечно лучше разберитесь с СКД.

bizisoft Подменю пользователя
сообщение 15.01.19, 15:25
Сообщение #7

Завсегдатай
****
Группа: Пользователи
Сообщений: 242
Из: Донецк
Спасибо сказали: 19 раз
Рейтинг: 0

И снова здравствуйте.

Продолжаю попытки освоить СКД и опять уперся в вопрос как вывести данные в столбец а не в строку.
Решил попробовать на небольшом примере, на Партии Товаров.

Единственно, что мне удалось, так это вывести наименование складов в заголовок столбца (РИС.1 отмечено зеленым), но соответствующие значение в эти столбцы не помещается.



Подскажите, пожалуйста, какой параметр еще нужно изменить, чтобы в этих столбцах появились значения.

Хотелось получить, что-то похожее на РИС.2




Signature
1С:Предприятие 8.2 (8.2.19.130)
"Альфа-Авто: Автосервис+Автозапчасти, украинская версия 4.1" (4.1.20.01)
обычные формы.

sava1 Подменю пользователя
сообщение 15.01.19, 15:49
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

в настройках
группировки - таблица, строки - номенклатура, колонки - склады,
количество, сумма - должны быть ресурсами

Vofka Подменю пользователя
сообщение 15.01.19, 15:53
Сообщение #9

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

bizisoft, правила, пункт 6. Тема закрывается.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Тема закрыта Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.04.24, 23:43
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!