Имя: Пароль:
1C
1С v8
Помогите плиз с запросом
,
0 Alexey_55
 
29.04.14
11:03
Добрый день.
С консоли запросов выводится нужный результат.
Если выводить в СКД то он совершенно другой.
Подскажите плиз в чем проблема?

ВЫБРАТЬ
    КОНЕЦПЕРИОДА(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ) КАК ДатаРабочая
ПОМЕСТИТЬ ВТ_Дни
ИЗ
    РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
    РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачалоПериодаСрОст И &КонецПериодаСрОст

ИНДЕКСИРОВАТЬ ПО
    ДатаРабочая
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , День, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Дни.ДатаРабочая,
    МАКСИМУМ(ВТ_Остатки.Период) КАК ДатаОстатка,
    ВТ_Остатки.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ПериодыСОстатками
ИЗ
    ВТ_Дни КАК ВТ_Дни
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
        ПО ВТ_Дни.ДатаРабочая >= ВТ_Остатки.Период

СГРУППИРОВАТЬ ПО
    ВТ_Дни.ДатаРабочая,
    ВТ_Остатки.Номенклатура

ИНДЕКСИРОВАТЬ ПО
    ДатаОстатка,
    Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_ПериодыСОстатками.Номенклатура КАК Номенклатура,
    ВЫРАЗИТЬ(ВЫБОР
            КОГДА РАЗНОСТЬДАТ(&НачалоПериодаСрОст, &КонецПериодаСрОст, ДЕНЬ) + 1 > 0
                    И ВТ_Остатки.КоличествоКонечныйОстаток <> 0
                ТОГДА ВТ_Остатки.КоличествоКонечныйОстаток / (РАЗНОСТЬДАТ(&НачалоПериодаСрОст, &КонецПериодаСрОст, ДЕНЬ) + 1)
            КОГДА РАЗНОСТЬДАТ(&НачалоПериодаСрОст, &КонецПериодаСрОст, ДЕНЬ) + 1 = 0
                ТОГДА ВТ_Остатки.КоличествоКонечныйОстаток
            ИНАЧЕ 0
        КОНЕЦ КАК ЧИСЛО(15, 5)) КАК СреднийОстЗаДень
ИЗ
    ВТ_ПериодыСОстатками КАК ВТ_ПериодыСОстатками
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Остатки КАК ВТ_Остатки
        ПО ВТ_ПериодыСОстатками.ДатаОстатка = ВТ_Остатки.Период
            И ВТ_ПериодыСОстатками.Номенклатура = ВТ_Остатки.Номенклатура
1 mikecool
 
29.04.14
11:04
в параметрах
2 Господин ПЖ
 
29.04.14
11:05
скд умная... выкидывает таблицы не участвующие в выборке если ей не дать по рукам
3 Alexey_55
 
29.04.14
11:08
(1) В параметрах виртуальной таблицы при выполнении в консоли запросов я устанавливаю периоды. Это я скопировал с СКД.
4 Trainee
 
29.04.14
11:09
Очень может быть, что СКД, навязало период в оборотную таблицу.
Лечится либо более аккуратной работой с параметрами.
Попробуй найти консоль, кот. формирует схему СКД и посмотреть как платформа оптимизировала запрос.
5 Alexey_55
 
29.04.14
11:09
(2) Подскажи плиз как дать по рукам?
6 Tateossian
 
29.04.14
11:12
(5) Вот тут
ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстаткиИОбороты.Период КАК Период,
    ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , День, , Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты

ИНДЕКСИРОВАТЬ ПО
    Номенклатура,
    Период
;

Не нужна таблица оборотов
7 Господин ПЖ
 
29.04.14
11:12
(5) добавить поле из "пропадающей" таблицы в результирующий селект, поставить в Роль - "Обязательное", если пользователю оно не нужно - навтыкать все ограничения какие есть
8 Alexey_55
 
29.04.14
11:18
(4) (6) (7) Благодарю, буду пробовать.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn