Имя: Пароль:
1C
1С v8
Проблема с выводом значений типа дата в ресурсах схемы СКД
,
0 Admin_Net_1C
 
19.01.16
07:01
Приветствую всех.
Платформа 8.3.6.2299, файловая УТ 11.1.10.199.
Подскажите, кто силен в СКД: есть запрос, который выводит номенклатуру, по которой есть остаток на текущую дату и не было поступлений и реализаций за выбранный период. Проблема в том, что в консоли запросов поля, с датами последнего поступления и последней реализации, заполняются, а как только переношу запрос в консоль СКД, в данных полях пусто ((
Сам запрос:

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

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

СГРУППИРОВАТЬ ПО
    втНоменклатураБезДвижений.Номенклатура
;

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

СГРУППИРОВАТЬ ПО
    втОстаткиНоменклатурыБезДвижений.Номенклатура


XML файл со схемой для СКД для консоли https://dropmefiles.com/7EG37

P.S. Также буду благодарен за подсказку, как оптимизировать первый подзапрос, где получаю номенклатуру без движений за выбранный период, т.к. эта часть запроса самая долгая по времени исполнения.
1 Admin_Net_1C
 
19.01.16
08:54
Подниму тему
2 LordCMEPTb
 
19.01.16
09:03
Ну для начала надо понять, что СКД - собственная система со своей логикой. И при включенном автозаполнении полей строку:
РегистрНакопления.ТоварыОрганизаций.Обороты(, , Регистратор, )
она понимает как
РегистрНакопления.ТоварыОрганизаций.Обороты(&НачалоПериода, &КонецПериода, Регистратор, )

Чтобы такого не было, нужно добавлять в текст свои параметры компоновки, что-то вроде:
РегистрНакопления.ТоварыОрганизаций.Обороты({&ОченьНачалоПериода},{&КонецПериода} , Регистратор, )

А первый запрос лучше разделить на 2:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
    КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура
ПОМЕСТИТЬ ВТ_ДвиженияПоНоменклатуре
ИЗ
    РегистрНакопления.ТоварыОрганизаций.Обороты(&НачалоПериода, &КонецПериода, Регистратор, ) КАК ТоварыОрганизацийОбороты
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
        ПО ТоварыОрганизацийОбороты.АналитикаУчетаНоменклатуры = КлючиАналитикиУчетаНоменклатуры.Ссылка
ГДЕ
    ТоварыОрганизацийОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг

ОБЪЕДИНИТЬ ВСЕ

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    спрНоменклатура.Ссылка КАК Номенклатура
ПОМЕСТИТЬ втНоменклатураБезДвижений
ИЗ
    Справочник.Номенклатура КАК спрНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ДвиженияПоНоменклатуре КАК ВТ_ДвиженияПоНоменклатуре
        ПО спрНоменклатура.Ссылка = ВТ_ДвиженияПоНоменклатуре.Номенклатура
ГДЕ
    НЕ спрНоменклатура.ЭтоГруппа
    И НЕ спрНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга)
    И ВТ_ДвиженияПоНоменклатуре.Номенклатура ЕСТЬ NULL
;
3 Admin_Net_1C
 
19.01.16
09:31
(2) благодарю, выполнил разделение первого подзапроса
К сожалению, в консоли СКД, поля с датами также пустые ((
4 LordCMEPTb
 
19.01.16
09:37
Тогда могу только предложить из той же консоли посмотреть на оптимизированный текст запроса, понять, в чем различия с исходным запросом. А там уже думать, что можно предпринять: либо добавить что-то на закладке конструктора запроса "Компоновка данных", либо в конструкторе СКД менять роли полей.
5 Admin_Net_1C
 
19.01.16
09:57
Убрал поля с максимальной датой поступления и реализации из ресурсов в схеме СКД. Поправил результирующий запрос для СКД:


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

СГРУППИРОВАТЬ ПО
    втОстаткиНоменклатурыБезДвижений.Номенклатура


Все равно не выходит "каменный цветочек" (
6 LordCMEPTb
 
19.01.16
10:03
Хорошо, если взять оптимизированный запрос из СКД и выполнить его в консоли запросов, он покажет нужные данные, или будет результат как в консоли СКД?
7 LordCMEPTb
 
19.01.16
10:05
Плюс я бы установил параметры для СКД в текст запроса:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Обороты({&ОченьНачалоПериода},{&КонецПериода} , Регистратор, )
Ну мало ли...
8 Admin_Net_1C
 
19.01.16
12:20
(6) оптимизированный запрос в консоли запросов отображает все данные, которые необходимо, т.е даты последнего поступления и реализации есть. А в консоли СКД данные поля пустые (скрины: http://itmages.ru/image/view/3416437/e1977383
http://itmages.ru/image/view/3416438/2df93d38 )
(7) Насколько я понял, фигурные скобки для СКД обозначают, что данные параметры могу быть не заполнены, а мне необходимо анализировать движения именно за выбранные период

Текущий вариант XML файла для консоли СКД, если кто надумает глянуть:
https://dropmefiles.com/pYylw
9 LordCMEPTb
 
19.01.16
13:08
Все, что могу предложить по этому поводу: https://yadi.sk/d/HIHryduBnKifz
Если не сработает, тогда я без понятия.
10 Admin_Net_1C
 
19.01.16
13:47
(9) Благодарю, уважаемый. Так отрабатывает, но конечно параметры ОченьНачалоПериода и ОченьКонецПериода )) совсем не комильфо. Видимо у меня в самом запросе изначально концептуальная ошибка, попробую поковырять в этом направлении
11 LordCMEPTb
 
19.01.16
13:55
(10) Тут скорее дело не в запросе, а в оптимизаторе СКД, который неиспользуемые поля убирает, "стандартные параметры" для виртуальных регистров подставляет, и прочее...
З.Ы. Настаивать на "ОченьНачалоПериода" и "ОченьКонецПериода", которые принимают значения далекие от текущей даты, не буду.
Закон Брукера: Даже маленькая практика стоит большой теории.