Имя: Пароль:
1C
1С v8
Реквизит формы заполненный на сервере не доступен на клиенте?
,
0 alf2006x
 
09.04.21
13:14
Но думаю что вопрос немного глубже.

Управляемая форма.
Делаю такой финт: добавил на форму реквизит ОтборПоКонтрагенту с типом "Произвольный".
Пихаю туда ЭлементОтбораКомпоновкиДанных вот так:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   ОтборПоКонтрагенту = Синонимы.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
   ОтборПоКонтрагенту.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
   ОтборПоКонтрагенту.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
   ОтборПоКонтрагенту.Использование = Истина;
   ОтборПоКонтрагенту.Применение = ТипПримененияОтбораКомпоновкиДанных.Элементы;
   ОтборПоКонтрагенту.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
КонецПроцедуры

В результате следующая процедура "фильтрации на лету" не работает:

&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)
    
    ТекущиеДанные = Элементы.Список.ТекущиеДанные;
    Если Не ТекущиеДанные = Неопределено Тогда
        ЭтаФорма.ОтборПоКонтрагенту.ПравоеЗначение = ТекущиеДанные.Владелец;
    Иначе
        ЭтаФорма.ОтборПоКонтрагенту.ПравоеЗначение = Неопределено;
    КонецЕсли
    
КонецПроцедуры

Точнее, процедура отрабатывает без ошибок, и даже правое значение устанавливается,
но на форме ничего не меняется. Фильтрация не отрабатывает.

А правильно всё работает только если инициализировать ОтборПоКонтрагенту не на сервере, а на клиенте.
Например, в процедуре "ПриОткрытии".

Вот и стало мне интересно: а почему собственно?

Всем заранее спасибо за будущие комментарии
1 программистище
 
09.04.21
13:20
Список.Обновить() не помогает?
отладчиком проверял, ОтборПоКонтрагенту твой отбор стоит или нет
2 alf2006x
 
09.04.21
13:21
Да, в отладчике отбор устанавливается корректно.
Сейчас попробую обновить.
3 alf2006x
 
09.04.21
13:29
Обновить() - не помогает.

Но заметил вот что: в переменной ОтборПоКонтрагенту отбор установлен.
А в динамическом списке Синонимы.Отбор этого отбора нет.

Похоже что отбор, сделанный к динамическому списку "Синонимы" на сервере видимо остаётся болтаться где-то
между сервером и клиентом...
4 alf2006x
 
09.04.21
13:31
Ладно, спишем на несовершенство механизма "Режим совместимости". )
5 banco
 
09.04.21
13:57
(0) А зачем этот лишний реквизит? Встал на текущую строку, установил отбор в динамическом списке.
6 alf2006x
 
09.04.21
14:06
Эээ нее... Тогда каждый раз придется искать (а если не найден - то создавать) нужный отбор.
ИМХО лишняя нагрузка (пусть и ничтожно малая).
А так - всё уже создано - только значение поменял и вуаля.
7 hhhh
 
10.04.21
20:11
(6) ну а так получается, отбор устанавливается в синонимах, а ваша переменная в итоге указывает в никуда.
8 alf2006x
 
12.04.21
16:08
(7) Сори, но понятнее не стало. У меня не переменная, а реквизит формы. Может быть где-то "глубоко в недрах" платформы это одно и то же, но я не уверен.
Тем не менее осадочек остался: отбор, созданный на сервере и положенный в реквизит формы превращается на клиенте в тыкву )
9 alf2006x
 
13.04.21
14:27
В продолжении этой же темы.
Сейчас обнажу свои скудные знания по клиент-серверной теме (слабонервным просьба далее не читать).

Есть встроенная Обработка. В ней по кнопке Alt+F3 я вызываю свой поиск. Показываю строку для ввода куска текста.
По окончании ввода вызывается серверная функция поиска (на выходе - булево: нашли /не нашли).
В процедуре поиска, естессно на сервере, я делаю свой запрос и полученный результат хочу сохранить в реквизите Обработки, чтобы пока не тащить на клиента.
Пусть, так сказать, полежит пока - потомится.
Реквизит обработки называется "РезультатПоиска". Тип - ТаблицаЗначений.
Важно: не реквизит формы, а именно реквизит обработки.

После выполнения поиска, если результат на сервере не пустой - я открываю другую форму, в которой пользователь в таблице должен выбрать одно из найденных значений.
Но вот незадача: в этой открываемой форме по адресу Объект.РезультатПоиска - пусто!  (тип - ДанныеФормыКоллекция)

Да как так то? Я же только что, прямо на сервере, туда запихнул результат выполнения своего мега-запроса.
Прямо беда с этими клиентами... не уж то слишком многого от них хочу?..
10 Kassern
 
13.04.21
14:32
(9) "Прямо беда с этими клиентами... не уж то слишком многого от них хочу?." нет, просто ты очень мало о них знаешь, а это разные вещи
11 Kassern
 
13.04.21
14:33
(9) используй временное хранилище и через него передавай данные
12 Cthulhu
 
13.04.21
14:36
(11) зачем?
если можно в месте вызова создать композитный параметр (как правило - структуру), в которую напихать все что надо, а потом указать во вротом параметре "ОткрытьФорму(..)" ?..
13 Cthulhu
 
13.04.21
14:36
* во вротом = во втором
14 Kassern
 
13.04.21
14:38
(13) да я прост не совсем понял, что ТС вообще нужно то. Я подумал что из одной формы передать результирующую ТЗ в другую форму. В типовых обычно через временное хранилище такое мутят, а потом в обработке оповещения получают из хранилища и обрабатывают
15 Cthulhu
 
13.04.21
14:42
(14): а. если не передать а вернуть - то да. через хранилище+оповещение.
16 alf2006x
 
13.04.21
14:43
(14) Да, всё правильно. В одной форме вызывается поиск, результат которого надо отобразить в виде выбора из таблицы.
Эта таблица организована в другой форме, т.к. конструкцию ТЗ.Выбрать() для управляемых забыли дописать )
17 Kassern
 
13.04.21
14:43
(16) модальные штучки не камильфо на УФ запомни)
18 Kassern
 
13.04.21
14:44
(16) зато у тебя будет своя форма выбора с блекджеком и временным хранилищем)
19 alf2006x
 
13.04.21
14:45
(17) Давно смирился. И даже поддерживаю такой подход.
20 alf2006x
 
13.04.21
14:46
А табличная часть обработки прокатит вместо врем. хранилища?
21 alf2006x
 
13.04.21
14:47
Это если её ТАМ заполнить, а ТУТ просто открыть. Появится?
22 Kassern
 
13.04.21
14:48
(20) хреновый план
23 alf2006x
 
13.04.21
14:49
(22) Почему?
24 alf2006x
 
13.04.21
14:52
(22) В натуре хреновый. Совсем не работает.
25 alf2006x
 
13.04.21
14:52
Ладно, ВХ так ВХ.
26 Kassern
 
13.04.21
15:21
(24) ну вот сам понял что хреновый)
27 alf2006x
 
13.04.21
15:24
(26) Жаль. Так красиво могло получиться! ))
28 alf2006x
 
13.04.21
15:27
А так теперь надо номер строки вручную в цикле колхозить.
Может есть опыт как по-другому заполнить НомерСтроки без обхода в цикле?
29 Kassern
 
13.04.21
15:27
(27) табчасть ты можешь использовать в обработке, для того, чтобы к примеру в модуле менеджера этой же обработки работать с данными из ТЧ.
30 Kassern
 
13.04.21
15:28
(28) а зачем тебе номер строки? Табчасть же сама его создаст, когда ты в нее загрузишь тз
31 alf2006x
 
13.04.21
15:33
(30) Хмм... Эт чё, я сам себя переплюнул что ли? )
Я то уже отказался от ТабличнойЧасти и добавил реквизит РезультатПоиска с типом ТЗ на ту самую форму, где идет выбор.
Вот его и заполняю тем, что достал из Хранилища.
32 alf2006x
 
13.04.21
15:34
(30) В общем, намёк понял, сейчас переделаю чтобы было красиво.