Имя: Пароль:
1C
1С v8
Выбрать остатки по ВСЕЙ номенклатуре в разрезе складов.
,
0 Vladius
 
05.11.13
14:32
Всем привет. Что то не могу разобраться как выбрать остатки по ВСЕЙ номенклатуре в разрезе складов, т.е даже если нет остатка что бы номенклатура выводилась. Без разреза по складам все получается но вот в разрезе складов выводятся те позиции по которым есть остаток. Вот мой запрос:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
               | Товары.Ссылка КАК Номенклатура,
               | ТоварыНаСкладахОстатки.Склад КАК Склад,
               | СУММА(ТоварыНаСкладахОстатки.КоличествоОстаток) КАК КоличествоОстаток
               |ИЗ
               | РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура.ТопАссортимент) КАК ТоварыНаСкладахОстатки
               |  ПОЛНОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
               |  ПО ТоварыНаСкладахОстатки.Номенклатура = Товары.Ссылка
               |ГДЕ
               | Товары.ПометкаУдаления = ЛОЖЬ
               | И Товары.ТопАссортимент
               |
               |СГРУППИРОВАТЬ ПО
               | Товары.Ссылка,
               | ТоварыНаСкладахОстатки.Склад
               |
               |УПОРЯДОЧИТЬ ПО
               | Товары.Наименование
               |ИТОГИ
               | СУММА(КоличествоОстаток)
               |ПО
               | Склад,
               | Номенклатура";

Подскажите как выбрать по всем товарам что бы были итоги по складам?
1 GROOVY
 
05.11.13
14:35
Зачем группировка?

Что суммируем? Колбасу с табуретками?
2 GROOVY
 
05.11.13
14:37
Советую сначала выбрать товары из справочника с нужными отборами, потом эту выборку соединять с остатками регистра, и ее же запихнуть в параметры вирт таблицы.
3 GROOVY
 
05.11.13
14:38
А про суммирование по складам реально не понятно....
4 Vladius
 
05.11.13
14:38
(1) Без группировки так же работает запрос
5 Vladius
 
05.11.13
14:39
(2) Так я так и сделал, выбрал все товары с нужным мне отбором, потом полным соединением я лезу в регистр товары на складах и вытаскиваю остаток по номенклатуре.
6 fisher
 
05.11.13
14:46
(0) Не, полным соединением не получится. Сначала нужно получить табличку комбинаций складов и номенклатуры, а её уже соединять левым соединением с фактическими остатками.
7 GANR
 
05.11.13
14:46
(0) Если на складе нет ни одной номенклатурной позиции выводить 0 все равно нужно?

Если нужно - в правой части соединения должно быть декартово произведение таблиц Номенклатура x Склад (соединение БЕЗ УСЛОВИЯ на закладке конструктора СВЯЗИ), если не нужно - в правой части нужен просто справочник Номенклатура. <1>

Ну а потом к этому безобразию <1> надо присоединить левым соединением остатки из регистра накопления. <2>

Соединять надо по условию <1>.Номенклатура = <2>.Номенклатура

ПОЛНОЕ СОЕДИНЕНИЕ между таблицами <1> и <2> ни к чему - ЛЕВОЕ СОЕДИНЕНИЕ лучше уж.
8 GANR
 
05.11.13
14:52
(0) И еще - вижу ошибку, о которой у меня лично уже язык отсох всем напоминать

            |ГДЕ
               | Товары.ПометкаУдаления = ЛОЖЬ
               | И Товары.ТопАссортимент

Превращает твое ЛЕВОЕ / ПОЛНОЕ соединение в обычное внутреннее, так как рубит все NULL (то, что отсутствует в одной из соединяемых таблиц).
9 Vladius
 
05.11.13
14:53
(8) А как тогда отбор делать?
10 Vladius
 
05.11.13
15:02
(8) Если по любому у номенклатуры надо сделать отбор то как тогда делать отбор если это ошибка?
11 mistеr
 
05.11.13
15:08
Почему еще никто не спросил, что означает "в разрезе складов", если нет остатка? :)
12 Skom
 
05.11.13
15:08
Выбрать
бла бла
ИЗ Справочник.Номенклатура
ЛЕВОЕ СОЕДИНЕНИЕ Остатки ПО Остатки.Номенклатура = Номенклатура.Ссылка

как то так
13 mistеr
 
05.11.13
15:10
(11) Предвижу ответ: "тех складов, где товар БЫЛ" :)
14 dk
 
05.11.13
15:12
имхо забыть про соединение и сделать через объединить
выбрать
   товар, склад, сумма(остаток)
ИЗ
(выбрать товар, склад, 0 из спр.товары, спр.склады
объединить все
выбрать товар, склад, остаток из рег.остатки
) Влож
Сгруппировать по товар, склад
15 Vladius
 
05.11.13
15:31
ВЫБРАТЬ
               |    ВложенныйЗапрос.Склад КАК Склад,
               |    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
               |    ТоварыНаСкладахОстатки.КоличествоОстаток КАК КоличествоОстаток
               |ИЗ
               |    (ВЫБРАТЬ
               |        Склады.Ссылка КАК Склад,
               |        Номенклатура.Ссылка КАК Номенклатура
               |    ИЗ
               |        Справочник.Номенклатура КАК Номенклатура,
               |        Справочник.Склады КАК Склады
               |    ГДЕ
               |        Номенклатура.ТопАссортимент
               |        И Номенклатура.ПометкаУдаления = ЛОЖЬ) КАК ВложенныйЗапрос
               |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
               |        ПО ВложенныйЗапрос.Склад = ТоварыНаСкладахОстатки.Склад
               |            И ВложенныйЗапрос.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура
               |
               |УПОРЯДОЧИТЬ ПО
               |    Номенклатура
               |ИТОГИ
               |    СУММА(КоличествоОстаток)
               |ПО
               |    Склад,
               |    Номенклатура

Во, вот так работает как надо
16 Hmster
 
05.11.13
15:33
ага когда номенклатуры 50К и складов пару сотен.
Шикарно работает.
17 Vladius
 
05.11.13
15:34
(16) складов штук 10 и тут не вся номенклатура а с определенным отбором.
18 Vladius
 
05.11.13
15:35
(16) И пользователи не будут смотреть по определенным складам.
19 Skom
 
05.11.13
17:11
Еще раз, выбираешь всю номенклатуру и к ней левым соединенем цепляешь остатки.
И будет у тебя как в (0), а именно:
"т.е даже если нет остатка что бы номенклатура выводилась"

чего лисапед то изобретать?
20 Borteg
 
05.11.13
17:18
(0) Если остатка номенклатуры нет, как определить на каком складе она должна отобразиться????
21 GANR
 
05.11.13
17:19
(15) Вот-вот - примерно это я и имел в виду в (7).
А по (9) фильтровать таблицы нужно ПЕРЕД тем, как их соединять.
22 fisher
 
05.11.13
17:27
(19) Все он правильно сделал. Не тупи. Нулевой остаток нужно показать по конкретным складам.
(20) От задач. ТС отображает по каждому из существующих. Чаще делают по складам из числа имеющих остатки. Можно еще хитрее делать - например, определять склады и номенклатуру с остатками/движениями по ним за какой-либо опорный период и по ним уже показывать текущие остатки.