Имя: Пароль:
1C
1С v8
УстановитьЗначениеПараметра в динамическом списке равному значению реквизита формы
0 Bro
 
22.08.19
10:45
Работаю в учебной версии 8.3.

Создал форму с одним динамическим списком товаров и полем фильтром по цене. В качестве источника списка указал:

ВЫБРАТЬ
    СправочникТовар.Ссылка,
    СправочникТовар.ПометкаУдаления,
    СправочникТовар.Код,
    СправочникТовар.Наименование,
    СправочникТовар.Цена,
    СправочникТовар.Предопределенный,
    СправочникТовар.ИмяПредопределенныхДанных
ИЗ
    Справочник.Товар КАК СправочникТовар
    
ГДЕ
    СправочникТовар.Цена = &Цена

Дальше при изменении цены:

&НаКлиенте
Процедура ЦенаПриИзменении(Элемент)
    Список.Параметры.УстановитьЗначениеПараметра("Цена", Цена);
    Сообщить("Изменение цены " + Цена);
КонецПроцедуры

Ввожу 20, в динамическом списке становится пусто (хотя товары с ценой 20 есть), но в сообщении пишет Изменение цены 20

Изменяю код на

&НаКлиенте
Процедура ЦенаПриИзменении(Элемент)
    Список.Параметры.УстановитьЗначениеПараметра("Цена", 20);
    Сообщить("Изменение цены " + Цена);
КонецПроцедуры

Все работает. Что я делаю не так?
1 Василий Алибабаевич
 
22.08.19
10:49
(0) "Дальше при изменении цены" Кто такой "цена" в данном контексте?
Судя по отличиям рабочего и нерабочего кода "Цена" - не число.
2 aleks_default
 
22.08.19
10:50
(1)+1 тип реквизита строка наверное
3 Bro
 
22.08.19
10:56
(2) Точно, спасибо, действительно строка.

Тогда еще один вопрос, а есть событие на программное изменение реквизита формы Цена? То есть если в другом действии будет написано что Цена = 15, как отловить это и обновить значение параметра запроса? Потому как ПриИзменении это чисто при интерактивном изменении.
4 Василий Алибабаевич
 
22.08.19
11:36
(3) Если вот это вот "Цена = 15" будет происходить на клиенте - тогда можно писать примерно так :
Цена = 15;
ЦенаПриИзменении(0);
5 Bro
 
22.08.19
12:12
(4) Это понятно, но откуда я знаю, где может изменяться эта цена. Плюс что делать, если изменение реквизита действительно происходит на сервере?

Лет 10 назад когда имел дело с фокспро у них было отдельно programmaticchange и interactivechange, мне здесь нужно любое change. Соответственно как это в 1С сделать?
6 D_E_S_131
 
04.10.19
15:43
"...но откуда я знаю, где может изменяться эта цена" - цена же у Вас реквизит формы - она и поменяться может только при каком-то действии, вызванном в этой форме. И уже вот в этой процедуре "действия" в самом конце вызывается процедура "ЦенаПриИзменении(<значение цены>)". А для "действий", которые отрабатывают &НаСервере нужно сделать серверный обработчик изменения реквизита "Цена":

&НаКлиенте
Процедура ЦенаПриИзменении(Элемент)
    ПриИзмененииЦеныСервер();
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииЦеныСервер()
    Список.Параметры.УстановитьЗначениеПараметра("Цена", 20);
    Сообщить("Изменение цены " + Цена);
КонецПроцедуры