Имя: Пароль:
1C
 
Как правильно передать параметр в запрос через СКД?
,
0 Dotoshin
 
22.05.15
14:34
Добрый день, уважаемые форумчане.
Помогите пожалуйста правильно сделать отчет.
Есть такой запрос:
ВЫБРАТЬ
    НоменклатураДополнительныеРеквизиты.Ссылка,
    НоменклатураДополнительныеРеквизиты.Значение
ПОМЕСТИТЬ ОбластиПрименения
ИЗ
    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
ГДЕ
    НоменклатураДополнительныеРеквизиты.Свойство = &ОбластьПрименения
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Номенклатура.Ссылка КАК Номенклатура,
    Номенклатура.Производитель,
    Номенклатура.Марка,
    ОбластиПрименения.Значение КАК ОбластиПрименения
ИЗ
    Справочник.Номенклатура КАК Номенклатура
        ЛЕВОЕ СОЕДИНЕНИЕ ОбластиПрименения КАК ОбластиПрименения
        ПО Номенклатура.Ссылка = ОбластиПрименения.Ссылка
В параметрах СКД появляется параметр ОбластьПрименения. Как сделать чтобы этот параметр всегда содержал нужное значение.
То есть в справочнике есть элемент, значение которого мне нужно всегда подставлять в качестве параметра.
1 Desna
 
22.05.15
14:40
в параметрах укажи значение
2 Desna
 
22.05.15
14:42
или выражение если он не предопределенный или в модуле
3 ssh2006
 
22.05.15
14:44
(0) еще вариант - сделать предопределенным (для 8.3)
4 РазДва
 
22.05.15
14:47
а ещё можно сделать схему в режиме предприятия, указать в параметрах нужный элемент, а потом загрузить её в конфигуратор через xml
5 Dotoshin
 
22.05.15
15:02
Да в том то и дело, что элемент не предопределенный
6 Dotoshin
 
22.05.15
15:03
А как его в параметрах указать?
7 Desna
 
22.05.15
15:09
(4) прикольно, оно туда гуид пишет, спасибо не знал
8 User_Agronom
 
22.05.15
15:19
ХЗ = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ОбластьПрименения");
ХЗ.Использование = Истина;
ХЗ.Значение = "находи его сам как-нибудь";

Я обычно делаю форму. Если тебе нужно этот параметр всегда один и тот же, тогда в событии приОткрытии, например.
9 Desna
 
22.05.15
15:19
(4) только задачу это не решает
10 Desna
 
22.05.15
15:23
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных;
    Параметры.УстановитьЗначениеПараметра("ВалютаРегламентированногоУчета", Константы.ВалютаРегламентированногоУчета.Получить());
11 kosts
 
22.05.15
15:24
Создай справочник. Назови его к примеру ДругиеПредопределенные. Добавить реквизит с именем Значение, с нужным тебе типом. Добавить предопределенный элемент в этот справочник (запомни имя). В режиме предприятия заполнишь руками Значение в предопределенном элемента. В запросе потом можно писать:


...
Где
ПО Номенклатура.Ссылка = (Значение(Справочник.ДругиеПредопределенные.ИмяПредопределенного)).Значение


Чем всё это удобно- в конфигураторе изменения только один раз. Изменение значения делаются в предприятии (может к примеру, пользователь сменить).
Т.е. полужесткая схема, вроде мы жестко сделали, но остается возможность легко поменять.
И главное не вмешиваемся в предопределенные элементы типового справочника, что положительно сказывается на обновлении.
12 Dotoshin
 
22.05.15
15:24
(8) А как лучше находить? По наименованию как-то не надежно - могут поменять наименование.
На счет формы вы имели ввиду, что надо на нее вывести этот параметр и пусть пользователь его каждый раз заполняет?
13 Dotoshin
 
22.05.15
15:28
(11) У нас конфигурация на поддержке, не хочется с нее снимать.
14 Desna
 
22.05.15
15:30
(11) эта проста в мемориз
15 Desna
 
22.05.15
15:31
(11) это овнодело, но не овнокод
16 kosts
 
22.05.15
15:32
(15) Предложишь схему получше, поверю
17 Desna
 
22.05.15
15:33
(16) сделать отдельный справочник ПредопределенныеЭлементы и общую функцию повторного или неповторного использования, некоторые все равно потом грохают этот справочник и тулят все в константы таки.
18 kosts
 
22.05.15
15:34
(15) Чем один подход хуже другого, первое законно второе нет?...


Где
ПО Номенклатура.Ссылка = Значение(Справочник.ДругиеПредопределенные.ВажныйЭлемент)

Где
ПО Номенклатура.Ссылка = (Значение(Справочник.ДругиеПредопределенные.ВажныйЭлемент)).Значение
19 kosts
 
22.05.15
15:35
(18) Имелось ввиду

Где
ПО Номенклатура.Ссылка = Значение(Справочник.Номенклатура.ВажныйЭлемент) // <- подправил

Где
ПО Номенклатура.Ссылка = (Значение(Справочник.ДругиеПредопределенные.ВажныйЭлемент)).Значение

20 Dotoshin
 
22.05.15
15:36
(17) То есть надо сделать константу и в нее загрузить значение нужного элемента? Я правильно понимаю?
21 Desna
 
22.05.15
15:37
(18) обычно делали ПредопределенныеЭлементы с ПВХ, зачем еще лезть в конфигуратор чтобы вносить предопределенные? по-сути предопределенные ничем от констант не отличаются
22 Dotoshin
 
22.05.15
15:37
и потом в параметры запроса передавать эту константу?
23 Desna
 
22.05.15
15:40
(22) нет, еще пример овнокода, может тебе сгодится
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных;
    Параметры.УстановитьЗначениеПараметра("Вася", Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("Вася", Истина));
24 Dotoshin
 
22.05.15
15:45
(23) Можно конечно и так, но хотелось бы обойтись без поисков по наименованию. Как-то это ненадежно.
25 РазДва
 
22.05.15
15:50
(24) А где ты всовываешь этот отчет, если конфигурация на поддержке и не хочется её снимать?
26 Dotoshin
 
22.05.15
15:51
(25) Как внешний отчет.
27 Dotoshin
 
22.05.15
15:54
Может быть есть какие-то рекомендации со стороны разработчиков, как нужно решать такие задачи?
28 Desna
 
22.05.15
15:59
(27) пользователь пусть сохраняет свои настройки
29 Desna
 
22.05.15
16:04
(28) упс, варианты у пользователя должны быть свои
30 Dotoshin
 
22.05.15
16:04
(28) Не понял, а как он это может сделать? Параметр-то внутри. Как пользователь до него доберется или вы предлагаете сделать этот параметр доступным для ввода в настройках и для каждого пользователя сохранить значение этого параметра?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.