Имя: Пароль:
1C
1С v8
Пустые параметры СКД
0 Майбах
 
03.08.15
19:16
Здравствуйте эксперты!

Скажите как настроить отчет с использованием СКД чтобы он формировался, даже когда не установлены его параметры например: Если  КонецПериод пустое, что отчет формируется за все время.

Как сделал я:

Прописал в СКД на закладке параметры в поле Выражение -

ВЫБОР КОГДА &КонецПериода=ДАТАВРЕМЯ(1,1,1) ТОГДА ТекущаяДата()  ИНАЧЕ &КонецПериода КОНЕЦ

Выводит ошибку - Не задано значение параметра "КонецПериод".

Подскажи пожалуйста как решить данную проблему.
1 ViSo76
 
03.08.15
19:27
Используя в запросе {КонецПериода}
2 Майбах
 
03.08.15
19:39
(1) Нельзя. Ошибка. параметр у меня используется в выражении ВЫБРАТЬ, а не конструкции условия ГДЕ.
3 Майбах
 
03.08.15
19:39
ВЫБРАТЬ
    СостояниеОборудованияОстатки.Оборудование,
    СостояниеОборудованияОстатки.КоличествоОстаток,
    ВЫБОР
        КОГДА СостояниеОборудованияОстатки.СрокИспользования > ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА РАЗНОСТЬДАТ(СостояниеОборудованияОстатки.СрокИспользования, {&КонецПериода}, МЕСЯЦ)
        ИНАЧЕ 0
    КОНЕЦ КАК ОставшийсяСрокИспользования,
    ВЫБОР
        КОГДА СостояниеОборудованияОстатки.СрокГодности > ДАТАВРЕМЯ(1, 1, 1)
            ТОГДА РАЗНОСТЬДАТ(СостояниеОборудованияОстатки.Оборудование.СрокИспользования, {&КонецПериода}, МЕСЯЦ)
        ИНАЧЕ 0
    КОНЕЦ КАК ОставшийсяСрокГодности
ИЗ
    РегистрНакопления.СостояниеОборудования.Остатки({(&КонецПериода)}, ПринятКУчету) КАК СостояниеОборудованияОстатки
4 Chin
 
03.08.15
19:40
(1) Установи параметру в конструкторе СКД признак "Использовать всегда"
5 Майбах
 
03.08.15
19:40
Вот так выдает ошибку. Что не верно записан запрос. Если убрать фигурные скобки с конструкции ВЫБРАТЬ тогда выйдет ошибка - не задан параметр КонецПериода.
6 Майбах
 
03.08.15
19:42
(4) Спасибо. Помогло. Если мы не ставим эту галочку то передает значение NULL да?
7 Chin
 
03.08.15
19:44
(6) Поставь параметр в результат запроса и посмотри, честно не помню. Либо NULL, либо пустое значение по типу параметра. Под рукой нет 1С-ки.
8 Chin
 
03.08.15
19:48
И не знаю что ты там получаешь, но при пустых значениях ты точно правильно считаешь поля по срокам годности. Проверь ещё раз, возможно у тебя там будут неправильные значения рассчитываться.
9 Майбах
 
03.08.15
20:00
(8) Да. При незаполненной дате в поле "Оставшийся срок годности" пишет = -24 173
10 Майбах
 
03.08.15
20:09
Есть еще у кого-нибудь варианты, как сделать правильно? :)
11 GenV
 
03.08.15
20:13
(0)
Вариант 1: Сделать параметр "КонецПериода" обязательным. Сделать еще один параметр в котором в выражении прописывать твой код из (0) и использовать в запросе. Тогда если "КонецПериода" будет не заполнен, то в доп. параметре будет текущая дата.
Вариант 2: Для отчета на СКД добавить код в ПриКомпоновкиРезультата в котором проверять и заполнять "КонецПериода"
12 Chin
 
03.08.15
20:39
(10) Ну итить налево... Твоя задача, твое решение. Хрен знает что ты там считаешь в своем запросе. У меня конечно большие сомнения, что при незаполненном параметре ((11), вариант 1)"КонецПериода", там будет текущая дата (скорее пустая), но проверить сейчас не могу, а на память точно не помню. Я бы просто создал ещё один параметр &ТекущаяДата И если &КонецПериода пустой использовал бы параметр с текущей датой (через конструкцию Выбор Когда...).
13 Майбах
 
03.08.15
22:36
(11) (12) Получилось через создание второго параметра. Спасибо. Интересно почему же не работает с одним параметром, ведь я просто создал параметр, и переместил код Выражение в новый параметр.
14 Chin
 
04.08.15
01:54
(13) Потому что при использовании пустого значения параметра в регистре и расчетном поле он приобретает разный смысл. Регистр считает, что параметр не задан и смотрит актуальные остатки, а поле тупо считает разность с нулевой датой.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.