Имя: Пароль:
1C
1С v8
СКД. Установка параметра программно
0 Slon747
 
07.05.16
08:57
Есть запрос:
ВЫБРАТЬ ТоварыНаСкладахОстатки.*
ИЗ
  РегистрНакопления.ТоварыНаСкладах.Остатки({&НачалоПериода}) КАК ТоварыНаСкладахОстатки

Параметр &НачалоПериода доступен в быстром отборе.
Нужно, чтобы если не выбран параметр, запрос возвращал остатки не на сегодня, а на какую-то дату.
Пробую устанавливать параметр вручную (убрал проверку на заполненность параметра):

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    ПараметрыДанных = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы;
    МойПараметр = ПараметрыДанных.Найти("НачалоПериода");
    МойПараметр.Значение = Дата('20010101');
    МойПараметр.Использование = Истина;
    
КонецПроцедуры

Но отчет все равно формирует остатки на сегодня.
Как исправить?
P.S. Не спрашивайте зачем. Это один из запросов пакете запросов СКД.
1 Defender aka LINN
 
07.05.16
09:10
УФ?
2 Slon747
 
07.05.16
09:14
(1) Да
3 Defender aka LINN
 
07.05.16
09:28
В пользовательских настройках и меняй.
А что вообще мешает назначить значению по умолчанию?
4 Slon747
 
07.05.16
09:30
(3) А как менять в пользовательских настройка?
>А что вообще мешает назначить значению по умолчанию?
Пользователь может оставить пустое значение начало периода. В этом случае запрос должен вернуть пустые остатки (на начало летосчисления).
5 Defender aka LINN
 
07.05.16
10:10
(4) КомпоновщикНастроек.ПользовательскиеНастройки, как ни ВНЕЗАПНО
6 Slon747
 
07.05.16
11:00
(5) Спасибо. Сделал так.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    Настройки                 = КомпоновщикНастроек.ПользовательскиеНастройки;    
    ИдентификаторНастройки    = Настройки.ПолучитьИдентификаторПоОбъекту(КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("НачалоПериода")));
    
    ЭлементНастройки = Настройки.Элементы.Найти(ИдентификаторНастройки);
    Если Не ЭлементНастройки.Использование Тогда
        ЭлементНастройки.Значение = Дата('20010101');
        ЭлементНастройки.Использование = Истина;
    КонецЕсли;
    
КонецПроцедуры
7 Slon747
 
07.05.16
11:05
Но возник вопрос. А можно так подставлять параметр, чтобы он не влиял на отображение в быстром отборе? Т.е. если в быстром отборе пусто, то запрос формировался на '20010101' или просто возвращал пустой результат?
8 Defender aka LINN
 
07.05.16
12:17
В поле "Выражение" прописать что-то типа

ВЫБОР
    КОГДА &НачалоПериода = ДАТАВРЕМЯ(1,1,1)
        ТОГДА ДАТАВРЕМЯ(2001,1,1)
    ИНАЧЕ &НачалоПериода
КОНЕЦ
9 Slon747
 
07.05.16
17:28
(8) Так работает, если в быстром отборе установлена галочка (Использование), но не выставлен параметр. А если галочка не стоит, то пропускает.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший