Имя: Пароль:
1C
1С v8
Как составить запрос по остаткам
0 aleks100
 
05.04.12
08:33
Как составить запрос,чтобы выводилось в виде
номенклатура  остсклад1, остскла2,остсклад3
1 butterbean
 
05.04.12
08:35
в СКД?
2 aleks100
 
05.04.12
08:36
обычный запрос в конструкторе
3 butterbean
 
05.04.12
08:37
(2) сделай итоги по складам
4 Wobland
 
05.04.12
08:39
(0) обратись к виртуальной таблице Остатки
5 КМ155
 
05.04.12
08:40
(2) если складов 2-3 десятка, то левое соединение
6 aleks100
 
05.04.12
08:42
(5) четыре склада
7 КМ155
 
05.04.12
08:44
(6) ну и ?
8 Fragster
 
гуру
05.04.12
08:45
а что автор 4 года делал?
9 rinatru
 
05.04.12
08:48
(8) и мне интересно...
10 КМ155
 
05.04.12
08:48
(8) сделай из топика голосовалку
11 aleks100
 
05.04.12
08:50
мне надо чтобы остсклад1, остскла2,остсклад3 отображались в виде столбцов
12 КМ155
 
05.04.12
08:52
(11) ну и что не получается ?
13 DarKySiK
 
05.04.12
08:53
(11) ВЫБОР КОГДА
14 Gesperid
 
05.04.12
08:53
(0) в общем случае никак, при конечном числе складов - соединяешь полученные остатки каждого склада по номенклатуре
15 КМ155
 
05.04.12
09:01
(14) уже было в (5)
проще через UNION
ВЫБРАТЬ
   ВложенныйЗапрос.Склад,
   ВложенныйЗапрос.Номенклатура,
   СУММА(ВложенныйЗапрос.Склад1) КАК Склад1,
   СУММА(ВложенныйЗапрос.Склад2) КАК Склад2,
   СУММА(ВложенныйЗапрос.Склад3) КАК Склад3,
   СУММА(ВложенныйЗапрос.Склад4) КАК Склад4
ИЗ
   (ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад КАК Склад,
       ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
       ТоварыНаСкладахОстатки.КоличествоОстаток КАК Склад1,
       0 КАК Склад2,
       0 КАК Склад3,
       0 КАК Склад4
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад1) КАК ТоварыНаСкладахОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад,
       ТоварыНаСкладахОстатки.Номенклатура,
       0,
       ТоварыНаСкладахОстатки.КоличествоОстаток,
       0,
       0
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад2) КАК ТоварыНаСкладахОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад,
       ТоварыНаСкладахОстатки.Номенклатура,
       0,
       0,
       ТоварыНаСкладахОстатки.КоличествоОстаток,
       0
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад3) КАК ТоварыНаСкладахОстатки
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       ТоварыНаСкладахОстатки.Склад,
       ТоварыНаСкладахОстатки.Номенклатура,
       0,
       0,
       0,
       ТоварыНаСкладахОстатки.КоличествоОстаток
   ИЗ
       РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад4) КАК ТоварыНаСкладахОстатки) КАК ВложенныйЗапрос

СГРУППИРОВАТЬ ПО
   ВложенныйЗапрос.Склад,
   ВложенныйЗапрос.Номенклатура
16 aleks100
 
05.04.12
09:02
понятно(14)
17 butterbean
 
05.04.12
09:02
(15) через ВЫБОР как-то попроще
18 butterbean
 
05.04.12
09:03
(17)+ особенно радует у тебя группировка по складу
19 КМ155
 
05.04.12
09:14
(17) через Выбор задача не решается
(18) учи матчасть
20 Gesperid
 
05.04.12
15:08
(19)

    ВЫБРАТЬ
   ТоварыНаСкладахОстатки.Номенклатура,
   СУММА(ВЫБОР
           КОГДА ТоварыНаСкладахОстатки.Склад = &Склад1
               ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
           ИНАЧЕ 0
       КОНЕЦ) КАК ПоСкладу1,
   СУММА(ВЫБОР
           КОГДА ТоварыНаСкладахОстатки.Склад = &Склад2
               ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
           ИНАЧЕ 0
       КОНЕЦ) КАК ПоСкладу2,
   СУММА(ВЫБОР
           КОГДА ТоварыНаСкладахОстатки.Склад = &Склад3
               ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
           ИНАЧЕ 0
       КОНЕЦ) КАК ПоСкладу3,
   СУММА(ВЫБОР
           КОГДА НЕ ТоварыНаСкладахОстатки.Склад В (&Склад1, &Склад2, &Склад3)
               ТОГДА ТоварыНаСкладахОстатки.КоличествоОстаток
           ИНАЧЕ 0
       КОНЕЦ) КАК ПоОстальным
ИЗ
   РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки

СГРУППИРОВАТЬ ПО
   ТоварыНаСкладахОстатки.Номенклатура
21 zak555
 
05.04.12
18:28
(15) одни запросом никак ?
22 zak555
 
05.04.12
18:29
(20) без выбора никак ?
23 Fragster
 
гуру
05.04.12
18:34
(22) я разрешаю выводить результат как надо без выбора
24 zak555
 
05.04.12
18:36
(23) мне просто стало интересно заявление : "учи матчасть"
25 Fragster
 
гуру
05.04.12
18:47
(24) ну, это ХЗ. просто автор либо сам ответил на свой вопрос, либо не смог правильно свой вопрос сформулировать
26 zak555
 
05.04.12
23:56
странно, что никто не написал запрос в единственном числе и без выбора
27 БибиГон
 
06.04.12
00:09
(26) напиши.
28 Конфигуратор1с
 
06.04.12
01:51
А что Обычный запрос не подойдет, просто вывод по группировкам?
29 GROOVY
 
06.04.12
01:59
Вот запрос для получения данных для вывода:

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

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

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
   ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОбластьПодвалТаблицы = Макет.ПолучитьОбласть("ПодвалТаблицы");
   ОбластьНоменклатура = Макет.ПолучитьОбласть("Номенклатура");
   ОбластьСклад = Макет.ПолучитьОбласть("Склад");

   ТабДок.Очистить();
   ТабДок.Вывести(ОбластьЗаголовок);
   ТабДок.Вывести(ОбластьШапкаТаблицы);
   ТабДок.НачатьАвтогруппировкуСтрок();

   ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

   Пока ВыборкаНоменклатура.Следующий() Цикл
       ОбластьНоменклатура.Параметры.Заполнить(ВыборкаНоменклатура);
       ТабДок.Вывести(ОбластьНоменклатура, ВыборкаНоменклатура.Уровень());

       ВыборкаСклад = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

       Пока ВыборкаСклад.Следующий() Цикл
           ОбластьСклад.Параметры.Заполнить(ВыборкаСклад);
           ТабДок.Вывести(ОбластьСклад, ВыборкаСклад.Уровень());
       КонецЦикла;
   КонецЦикла;

   ТабДок.ЗакончитьАвтогруппировкуСтрок();
   ТабДок.Вывести(ОбластьПодвалТаблицы);
   ТабДок.Вывести(ОбластьПодвал);



А вот пример вывода вертикальных секций

ТабДок = Новый ТабличныйДокумент;
Секция = ТабДок.ПолучитьОбласть("R1C1");
ТабДок.НачатьАвтогруппировкуКолонок();
Секция.Область("R1C1").Текст = "Параметр";
ТабДок.Вывести(Секция,1,"Группа 1",Ложь);
Для К=1 По 10 Цикл
   Секция = ТабДок.ПолучитьОбласть("R1C1");
   Секция.Область().Текст = "А"+К;
   Секция.Область().ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
   ТабДок.Присоединить(Секция,2,"Группа 2",Истина);
КонецЦикла;
Секция.Область("R1C1").Текст = "Итого:";
ТабДок.Присоединить(Секция,1,"Группа 2",Ложь);
Секция.Область("R1C1").Текст = "Значение";
ТабДок.Вывести(Секция,1,"Группа 2",Ложь);
Цена = 10; Итог = Цена;
Для К=1 По 10 Цикл
   Секция = ТабДок.ПолучитьОбласть("R1C1");
   Секция.Область().Текст = Цена;
   ТабДок.Присоединить(Секция,2,"Группа 2",Истина);
   Цена = Цена + 10;
   Итог = Итог + Цена;
КонецЦикла;
Секция.Область("R1C1").Текст = Итог;
ТабДок.Присоединить(Секция,1,"Группа 2",Ложь);
ТабДок.ЗакончитьАвтогруппировкуКолонок();
ТабДок.ИтогиСправа = Истина;
ТабДок.ОтображатьСетку = Ложь;
ТабДок.Защита = Ложь;
ТабДок.ТолькоПросмотр = Истина;
ТабДок.Показать("Пример использования гор. автогруппировки");


Лень собирать вместе, надеюсь автор сможет сам.
Независимо от того, куда вы едете — это в гору и против ветра!