Имя: Пароль:
1C
1С v8
Запрос и СКД
0 first_may
 
10.03.17
23:01
Добрый день.

Выполняю запрос

ВЫБРАТЬ
    ТоварыНаСкладахОстатки.Склад КАК Склад,
    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
    ТоварыНаСкладахОстатки.СерияНоменклатуры КАК Серия,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток,
    ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Цена,
    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследних.Цена, 0) КАК Стоимость,
    ЕСТЬNULL(ТоварыНаСкладахОстаткиСрез.КоличествоОстаток, 0) КАК ОстатокСрез,
    ЕСТЬNULL(ТоварыНаСкладахОстаткиСрез.КоличествоОстаток, 0) * ЕСТЬNULL(ЦеныНоменклатурыСрезПоследнихСрез.Цена, 0) КАК СтоимостьСрез
ИЗ
    РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), СерияНоменклатуры.СрокГодности <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&Период, ДЕНЬ), ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&ПериодСрез, ДЕНЬ), СерияНоменклатуры.СрокГодности <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТоварыНаСкладахОстаткиСрез
        ПО ТоварыНаСкладахОстатки.Склад = ТоварыНаСкладахОстаткиСрез.Склад
            И ТоварыНаСкладахОстатки.Номенклатура = ТоварыНаСкладахОстаткиСрез.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиСрез.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.СерияНоменклатуры = ТоварыНаСкладахОстаткиСрез.СерияНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&ПериодСрез, ДЕНЬ), ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследнихСрез
        ПО (ТоварыНаСкладахОстаткиСрез.Номенклатура = ЦеныНоменклатурыСрезПоследнихСрез.Номенклатура)
            И (ТоварыНаСкладахОстаткиСрез.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследнихСрез.ХарактеристикаНоменклатуры)

УПОРЯДОЧИТЬ ПО
    ТоварыНаСкладахОстатки.Номенклатура.Наименование


Получаю
Остато = 40
ОстатокСрез = 0


Затем делаю отчет на СКД с этим запросом. И при тех же параметрах получаю
Остато = 40
ОстатокСрез = 40


Скажите пож, почему один и тот же запрос с одинаковыми параметрами в консоле и СКД выдает разные результаты?
1 mehfk
 
10.03.17
23:15
Берешь портативные инструменты разработчика, делаешь отчет в консоли компоновок, запускаешь с отладкой и смотришь реальный запрос.
2 mehfk
 
10.03.17
23:16
НУ и собственно ответ: потому что реальные запросы разные.
3 first_may
 
10.03.17
23:26
(2) почему разные? тектс запроса один и тот же.
4 h-sp
 
10.03.17
23:29
(3) нет, текст запроса в скд другой
5 mistеr
 
10.03.17
23:30
(0) Проблема здесь:

РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&Период, ДЕНЬ)

СКД плюет на твои параметры виртуальных таблиц и ставит свои.
6 mehfk
 
10.03.17
23:31
(3) ты (1) проделал?
7 youalex
 
10.03.17
23:51
(0) >почему один и тот же запрос с одинаковыми параметрами в консоле и СКД выдает разные результаты?

как минимум, потому что консоль, а не консоля.
8 first_may
 
10.03.17
23:54
(5) надо вместо &Период и &ПериодСрез надо делать допустим &Дата1 и &Дата2?
9 mehfk
 
10.03.17
23:55
В СКД есть свои параметры. Специальные. В книжке по СКД можно найти более подробную информацию.
10 h-sp
 
11.03.17
00:00
(8) возьми их в фигурные скобки
11 first_may
 
11.03.17
07:00
(9) да,я знаю что Период это свой параметр. Но ПериодСрез этот же не стандартный. А остатки на эту дату почему то не берутся.

(10) попробую.
12 first_may
 
11.03.17
07:15
Заменил параметры и написал так

    РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&ДатаОтчета, ДЕНЬ), СерияНоменклатуры.СрокГодности <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТоварыНаСкладахОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ тзКоличествоСимволов100 КАК тзКоличествоСимволов100
        ПО (ТоварыНаСкладахОстатки.СерияНоменклатуры.СерийныйНомер ПОДОБНО тзКоличествоСимволов100.Симв)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&ДатаОтчета, ДЕНЬ), ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
        ПО ТоварыНаСкладахОстатки.Номенклатура = ЦеныНоменклатурыСрезПоследних.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(КОНЕЦПЕРИОДА(&ДатаСравнения, ДЕНЬ), СерияНоменклатуры.СрокГодности <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)) КАК ТоварыНаСкладахОстаткиСрез
            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(КОНЕЦПЕРИОДА(&ДатаСравнения, ДЕНЬ), ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследнихСрез
            ПО ТоварыНаСкладахОстаткиСрез.Номенклатура = ЦеныНоменклатурыСрезПоследнихСрез.Номенклатура
                И ТоварыНаСкладахОстаткиСрез.ХарактеристикаНоменклатуры = ЦеныНоменклатурыСрезПоследнихСрез.ХарактеристикаНоменклатуры
        ПО ТоварыНаСкладахОстатки.Склад = ТоварыНаСкладахОстаткиСрез.Склад
            И ТоварыНаСкладахОстатки.Номенклатура = ТоварыНаСкладахОстаткиСрез.Номенклатура
            И ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиСрез.ХарактеристикаНоменклатуры
            И ТоварыНаСкладахОстатки.СерияНоменклатуры = ТоварыНаСкладахОстаткиСрез.СерияНоменклатуры
Г



Получилось то, что хотел. Спасибо всем.