Имя: Пароль:
1C
1С v8
Помогите начинающему с СКД
,
0 НачинающийНик
 
06.02.19
22:42
Добрый день!
Прошу помощи, изучаю 8ку встретил какое-то странное поведение платформы, не могу объяснить почему так происходит. Может есть опытные люди кому не лень минуту на код посмотреть?


Есть временная таблица запроса с двумя колонками: Номенклатура и Остаток, мне нужно посчитать количество колонок со значением Остатка - 0
Вот такой запросик, который отлично отрабатывает в консоли запросов, выдает корректные цифры

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

ИЗ
    ОстаткиПоДням КАК ОстаткиПоДням

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


Но когда я в СКД вставляю (без дополнительных настроек) количество 0 записей не считается, а просто номенклатура с остатками имеющая 0, получает 1.


Параметры и в скд и консоли одни и теже
1 palsergeich
 
06.02.19
23:17
Честно начни вот с этого https://www.spec8.ru/kurs-po-skd-besplatno
Папа а СКД это сложно? — Нет сынок, это тоже самое, что ехать на велосипеде, который горит и ты горишь и всё горит, и ты в аду.
2 НачинающийНик
 
06.02.19
23:23
(1) Почитал/посмотрел еще раньше, вроде все понятно было.

Ладно бы сложный запрос был бы, больше похоже на глюк.
Не суммируются блин количество выполняющих условий ОстаткиПоДням.КоличествоКонечныйОстаток = 0, а просто проставляется 1 или 0 в зависимости от того выполнилось ли хоть раз условие (тогда 1) или 0, если ни разу не выполнилось.
3 palsergeich
 
06.02.19
23:26
(2)
1) нужно понимать что СКД это <> запрос, там есть свои особенности.
2) Нужен полный текст запроса, я тогда исходя из своего опыта смогу объяснить почему так произошло.
Это не глюк, а стандартное поведение оптимизатора, он выкинул какое то поле из пакетов ранее
4 НачинающийНик
 
06.02.19
23:29
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДанныеПроизводственногоКалендаря.Дата КАК Период
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
    ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачДата И &КонДата
;

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

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

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

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

Просто отбираю остатки по товару на каждый день и в финальной таблице хочу получить количество дней с 0 остатками в разрезе номенклатуры.
5 palsergeich
 
06.02.19
23:33
Остаток на каждый день можно получить и без этих действий чисто средствами СКД. Смотри период дополнения.
Есть подозрение что поле период из 2 готпакета пропало.
Вынеси его в 3 пакет. И поставь Роль обязательное в настройках. Группировку думаю сможешь настроить сам)
6 palsergeich
 
06.02.19
23:37
Ой тьфу это не остаток на каждый день.
Не важно, проблема в том, что даю 90% вероятности, что оптимизатор из 2 пакета выкинул период совсем
7 palsergeich
 
06.02.19
23:38
Просто вытащи поле период в 3 пакет, в 3 пакете сделай Максимум(период) и в настройках полей на ячейке роль поставь галку обязательное
8 palsergeich
 
06.02.19
23:41
А для того что бы научится диагностировать такие случаи рекомендую научится работать или со стандартной консолью СДК или из пакета Инструменты разработчика, там можно увидеть ттекст запроса который отправляется на исполнение. но об этом говорят только в платных курсах, или ищи статьи.
9 palsergeich
 
06.02.19
23:43
ВЫБРАТЬ РАЗЛИЧНЫЕ
    ДанныеПроизводственногоКалендаря.Дата КАК Период
ПОМЕСТИТЬ Дни
ИЗ
    РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ГДЕ
    ДанныеПроизводственногоКалендаря.Дата МЕЖДУ &НачДата И &КонДата
;

////////////////////////////////////////////////////////////////////////////////

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

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

//////////////////////////////////////////////////////////////////////////////////

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

ИЗ
    ОстаткиПоДням КАК ОстаткиПоДням

СГРУППИРОВАТЬ ПО
    ОстаткиПоДням.Номенклатура
;
10 palsergeich
 
06.02.19
23:46
https://its.1c.ru/db/metod8dev/content/3401/hdoc
http://devtool1c.ucoz.ru/
Для разработки сложных отчетов владение хотя бы одним из этих инструментов необходимо
11 НачинающийНик
 
06.02.19
23:46
Ты прав! Огромное спасибо, не думаю что в бесплатных курсах есть эта информация по оптимизации полей в пакетах :(
12 НачинающийНик
 
06.02.19
23:47
Все получилось в смысле :) !
13 palsergeich
 
06.02.19
23:48
(11) Там про роль обязательное рассказывается.
Но диагностике не обучают.
https://xn----1-bedvffifm4g.xn--p1ai/1c-v8/skd/ вот тут это рассмотрено
14 palsergeich
 
06.02.19
23:50
(11) Да не за что. Сам в первый раз когда на такое наткнулся - горел)
15 palsergeich
 
06.02.19
23:51
А вообще СКД вещь очень интересная, ньюансы есть, их не так много, если знать то совсем не страшно.
16 Web00001
 
07.02.19
05:23
(11)Первое, чему там учат это курить текст запроса который реально уходит на сервер. А там и будет ответ на твой вопрос.
17 toypaul
 
гуру
07.02.19
11:52
РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(, , День

не очень хороший способ скажем прямо. при росте данных в регистре может подвесить систему.

особенно бессмысленно если периода отчета небольшой.

есть вариант сделать через 2 связанных набор. это раз

два (и возможно это будет лучше) сделать расчет остатков за выбранный период (а не по всем периодам) по движениям
Основная теорема систематики: Новые системы плодят новые проблемы.