Имя: Пароль:
1C
1С v8
Запрос по остаткам.
,
0 bahuus
 
21.12.14
23:42
Добрый вечер!
Подскажите начинающему в каком направлении двигаться по такому вот вопросу. Требуется в таблицу значения вывести информацию остатки по складам, где в строках "номенклатура", а в колонках "склад". Склады указываются в списке значений. Как это сделать с помощью СКД знаю, а вот как запросом и встроенным языком в документе нет. Может кто подскажет и поможет?
1 vicof
 
21.12.14
23:52
Пишешь запрос, как в СКД.
И обходишь результат запроса по грвппировкам. Если склад новый - добавляешь новую колонку, если номенклаутра новая - новую строку.

Только зачем, если на СКД гораздо проще?
2 bahuus
 
21.12.14
23:57
(1) Потом на основании этой таблицы формировать документ "Перемещение". Ситуация такая: есть документ "Заявка план меню" в ней две таблицы "блюдо" и "ингредиенты". По таблице "ингредиенты" формируем остатки по складам, выводим в таблицу значений и на основании её формируем перемещение на кухню, где есть остаток. Может я неправильно выбрал алгоритм подскажите...
3 HEKPOH
 
22.12.14
00:03
(2) ну так и выгрузи результат СКД в ТЗ
4 bahuus
 
22.12.14
00:57
(3) Выводит ошибку:
"Ошибка генерации макета
по причине:
Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений

В СКД -> Настройки стоит "Таблица", а если просто детальные записи, то в ТЗ выводит просто как из запроса.

Может я не то смотрю и делаю?
5 MSOliver
 
22.12.14
02:53
(3) вроде не получится, сколько колонок склад будет?
6 MSOliver
 
22.12.14
02:54
(2) для данной задачи не нужно формировать ТЗ описанной в (0)
7 bahuus
 
22.12.14
06:05
(6) Там задача усовершенствуется:
Потом на основании этой таблицы формировать документ "Перемещение". Ситуация такая: есть документ "Заявка план меню" в ней две таблицы "блюдо" и "ингредиенты". По таблице "ингредиенты" формируем остатки по складам, выводим в таблицу значений и на основании её формируем перемещение на кухню, где есть остаток. Может я неправильно выбрал алгоритм подскажите...
8 Йохохо
 
22.12.14
06:21
(7) тебе ее показывать надо? промежуточную ТЗ. И обрабатывать клик?
9 bahuus
 
22.12.14
06:55
(8) Да пользователь ее хочет видеть. Сделал её таким образом. Подскажите корректно ли решение:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |ЗаявкаПланМеню.Номенклатура КАК Номенклатура,
        |    Склады.Ссылка КАК Склад
        |ПОМЕСТИТЬ ВТ
        |ИЗ
        |    Документ.ЗаявкаПланМеню.Ингридиенты КАК ЗаявкаПланМеню,
        |    Справочник.Склады КАК Склады
        |ГДЕ
        |    ЗаявкаПланМеню.Ссылка = &Ссылка
        |    И Склады.Ссылка В(&Склады)
        |
        |СГРУППИРОВАТЬ ПО
        |    ЗаявкаПланМеню.Номенклатура,
        |    Склады.Ссылка
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Номенклатура,
        |    Склад
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ.Номенклатура КАК Номенклатура,
        |    ВТ.Склад КАК Склад,
        |    ЕСТЬNULL(СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток), 0) КАК КоличествоОстаток
        |ИЗ
        |    ВТ КАК ВТ
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
        |                ,
        |                (Номенклатура, Склад) В
        |                    (ВЫБРАТЬ
        |                        ВТ.Номенклатура,
        |                        ВТ.Склад
        |                    ИЗ
        |                        ВТ КАК ВТ)) КАК ТоварыНаСкладахОстатки
        |        ПО ВТ.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
        |            И ВТ.Склад = ТоварыНаСкладахОстатки.Склад
        |
        |СГРУППИРОВАТЬ ПО
        |    ВТ.Склад,
        |    ВТ.Номенклатура
        |
        |УПОРЯДОЧИТЬ ПО
        |    Номенклатура,
        |    Склад
        |ИТОГИ ПО
        |    Склад";
        
    Запрос.Параметры.Вставить("Склады", ОтборПоСкладам);
    Запрос.Параметры.Вставить("Ссылка", ВыбДокумент);

    Результат = Запрос.Выполнить();

    ВыборкаСклад = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Склад");
    
    ИндексКолонки = 1;
    
    Пока ВыборкаСклад.Следующий() Цикл
        
        ОписаниеКоличество = Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(12, 3));
        ТабличноеПоле.Колонки.Добавить( , ОписаниеКоличество, Строка(ВыборкаСклад.Склад.Наименование), );
        ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
        ВыборкаДетальныеЗаписи = ВыборкаСклад.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            
            НайденнаяСтрока = ТабличноеПоле.Найти(ВыборкаДетальныеЗаписи.Номенклатура, );
            
            Если НайденнаяСтрока = Неопределено Тогда
                            
                НоваяСтрока = ТабличноеПоле.Добавить();
                НоваяСтрока.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
                
                НоваяСтрока[ИндексКолонки] = ВыборкаДетальныеЗаписи.КоличествоОстаток;
                
            Иначе
                
                НайденнаяСтрока[ИндексКолонки] = ВыборкаДетальныеЗаписи.КоличествоОстаток;
                
            КонецЕсли;            
            
        КонецЦикла;
        
        ИндексКолонки = ИндексКолонки + 1;
        
    КонецЦикла;

А потом уже делать перемещение...
10 MSOliver
 
22.12.14
07:05
Левое соединение убери, а так если все работает то ничего не трогай...
11 bahuus
 
22.12.14
07:07
(10) Соединение полностью убрать?
12 13_Mult
 
22.12.14
07:08
(9) Жесть какая
13 MSOliver
 
22.12.14
07:08
(11) нет, только его левую часть :)