Из процедуры НаСервереБезКонтекста можно как нибудь изменить реквизит формы?

1. DmitriyV 20.07.18 14:58 Сейчас в теме
Есть какой-нибудь велосипед?
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Timur.V 78 20.07.18 15:02 Сейчас в теме
Нет.
Опишите задачу подробней.
+
7. DmitriyV 20.07.18 15:13 Сейчас в теме
(2)
Есть событие динамического списка ПриПолученииДанныхНаСервере. Она создается без контекста. Мне нужно поменять реквизит из этого события.
Вообще сама задача, выводить количество строк в дин. списке. И при изменении отбора, создания новых строк, обновлении и т.п. изменять этот реквизит.
+
11. spacecraft 20.07.18 15:27 Сейчас в теме
(7) в качестве бреда: регистр сведений и ПодключитьОбработчикОжидания.
+
12. DarkUser 20.07.18 15:28 Сейчас в теме
... выводить количество строк в дин. списке ...

Зачем вам тогда дин.список с такими то требованиями. Сделайте таблицу значений, в ней вы всегда сможете получить количество строк даже на клиенте.
+
13. herfis 498 20.07.18 15:28 Сейчас в теме
(7) Печаль. Оттуда никак не получится.
Но вообще задач подбития итогов по динамическому списку надо бежать, как огня. Так как это попытка реализовать противоречивые требования.
Мне всегда удавалось вместо этого создать специализированный инструмент под нужную задачу со статическим списком. А его наполнением управлять через СКД. Обычно, если нужны итоги, значит подразумевается ограниченная выборка и статический список вполне подходит.
+
17. DmitriyV 20.07.18 15:34 Сейчас в теме
(13)
Где можно почитать про использование СКД в списках?
+
19. herfis 498 20.07.18 15:38 Сейчас в теме
(17) Не подскажу. Но там почти все руками. Добавляешь в реквизиты формы КомпоновщикНастроек, инициализируешь его программно, нужные настройки или пользовательские настройки выкидываешь на форму, по кнопке делаешь программную компоновку, только результат не в табличный документ получаешь, а в таблицу значений (есть у СКД такой режим компоновки). Вот эта таблица значений и будет статическим списком.
+
24. Leon75 20.07.18 18:01 Сейчас в теме
(7)Так, ради интереса.
Создайте внешнюю обработку, поместите на ее форму динамический список. Желательно со справочником типа Номенклатура, чтобы были группы.
В обработчике создайте такой код:
&НаСервереБезКонтекста
Процедура Реквизит1ПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
	К = Строки.Количество();
	Сообщить(К);
КонецПроцедуры


А потом полистайте список, по разворачивайте/по сворачивайте группы сначала просто мышкой,
а потом с нажатием клавиши F5.
+
3. pun4er 20.07.18 15:02 Сейчас в теме
Нужно именно из этой процедуры менять? Почему нельзя из другой? Или вернуть значение их этой функции и установить его уже из другого места, где контекст формы доступен?
+
4. herfis 498 20.07.18 15:03 Сейчас в теме
Звучит достаточно безумно. Чтобы поддержать градус, могу предложить передавать форму параметром.
user774630; +1
5. Octopus 337 20.07.18 15:07 Сейчас в теме
(4) Нет уж, коллега, давайте форму фиганем в хранилище, а передадим только адрес, для подстраховки преобразованный в Base64
m1_1976; user774630; +2
6. Boneman 298 20.07.18 15:12 Сейчас в теме
(5) причем менять будем обязательно в фоновом задании



А так, по существу надо просто переделать логику. В модуле формы, для чего все разделили.
НаКлиенте - это только клиент
НаСервере - На сервере но с контекстом формы.
НаСервереБезКонтекста - для того чтобы весь контекст формы не тащить, когда что-то нужно по быстрому с сервера извлечь.
и спрашивается зачем пытаться делать то, что изначально для этого не предназначено ? Переделать надо логику вызовов процедур и все.
+
8. DmitriyV 20.07.18 15:14 Сейчас в теме
(6)
Сама процедура события создается без контекста. А мне надо из этого события изменить данные
+
14. Boneman 298 20.07.18 15:30 Сейчас в теме
(8) пардон, увидел (7)
+
9. herfis 498 20.07.18 15:16 Сейчас в теме
(5) Что интересно, я реально встречал такое решение (форма в параметрах). Только уже не помню где. Может и в типовой какой. Таким образом эмулировалась директива &НаКлиентеНаСервере (которая почему-то только в модуле команды разрешена). Ставили директиву &НаКлиентеНаСервереБезКонтекста, а контекст параметром передавали. Вполне рабочее решение, так как при этом обмена с сервером не происходит.
А вот &НаСервереБезКонтекста - это уже сурово.
+
10. spacecraft 20.07.18 15:21 Сейчас в теме
(9)
Что интересно, я реально встречал такое решение (форма в параметрах)

Это довольно частое явление в типовых на БСП. Только передавать можно контекст формы соответствующий контексту метода.
+
15. Octopus 337 20.07.18 15:30 Сейчас в теме
(9) Навскидку код УТ11, форма списка заказов клиента
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
	
	ИспользоватьПричиныОтменыЗаказовКлиентов = ПолучитьФункциональнуюОпцию("ИспользоватьПричиныОтменыЗаказовКлиентов");
	
	// Обработчик подсистемы "Внешние обработки"
	ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма);
	
	ОтборыСписковКлиентСервер.СкопироватьСписокВыбораОтбораПоМенеджеру(
		Элементы.Менеджер.СписокВыбора,
		ОбщегоНазначенияУТ.ПолучитьСписокПользователейПоМассивуРолей(Документы.ЗаказКлиента.ИменаРолейСПравомДобавления()));
	
	ЕстьПравоМенятьСтатус = хс_ПроцедурыФункцииСервер.ЕстьПравоНаИзменениеСтатусаСчета();
	Элементы.ГруппаУстановитьСтатус.Видимость = ЕстьПравоМенятьСтатус;
	
	ПроверкаКонтрагентов.УстановитьУсловноеОформлениеСпискаДокументов(Список);
	
КонецПроцедуры
Показать
+
16. herfis 498 20.07.18 15:32 Сейчас в теме
(15) Не. В данном случае нормально, так как все происходит на сервере. Никаких трансформаций контекста не происходит. Это простая локальная ссылка. Жесть была бы, если бы оно между клиентом и сервером ходило.
+
18. Octopus 337 20.07.18 15:35 Сейчас в теме
(16) Да понятно. Это я привел как иллюстрацию повсеместного использования формы как параметра. Что, естественно, порождает иллюзию, что с клиента на сервер тоже можно кидать...
+
20. herfis 498 20.07.18 15:39 Сейчас в теме
(18) Да может и можно, я не пробовал. Но даже если можно - то все равно жесть. Штатная передача контекста оптимизируется по изменениям, а эта всем гамбузом пойдет.
+
21. herfis 498 20.07.18 15:52 Сейчас в теме
(17) Инициализация компоновщика настроек:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	ОбъектОбработки = РеквизитФормыВЗначение("Объект");
	СхемаКомпоновки = ОбъектОбработки.ПолучитьМакет("Макет");
	ПутьСхемыКомпоновки = ПоместитьВоВременноеХранилище(СхемаКомпоновки, УникальныйИдентификатор);
	КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПутьСхемыКомпоновки));
	КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновки.НастройкиПоУмолчанию);
	
КонецПроцедуры
Показать

Компоновка:
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(ПолучитьИзВременногоХранилища(ПутьСхемыКомпоновки), КомпоновщикНастроек.ПолучитьНастройки(), , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки= Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
ПроцессорВывода= Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ТаблицаРезультата = Новый ТаблицаЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаРезультата);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Важно!
"ПутьСхемыКомпоновки" - это строковый реквизит формы.
+
22. SlavaKron 20.07.18 16:18 Сейчас в теме
ПриПолученииДанныхНаСервере нужен как триггер на клиенте?
+
23. herfis 498 20.07.18 16:33 Сейчас в теме
(22) Да.
Вернее, лучше не на клиенте. Но можно и через клиента.
+
25. SlavaKron 20.07.18 21:06 Сейчас в теме
(23) Встречался с такой проблемой. В обычном приложении был метод ПодключитьОбработчикИзмененияДанных.
Была такая тема https://forum.infostart.ru/forum9/topic158304.

В данном случае можно в собморлмншглдгшдгшж7ь тшд
+
26. SlavaKron 21.07.18 09:40 Сейчас в теме
(25) Пардон. Хотел написать про ПодключитьОбработчикОжидания, который уже упомянули, но таки да, это бред. Хотя тема интересная.
+
27. YaroslavHolovatiy 23.07.18 12:48 Сейчас в теме
Здравствуйте, с этой публикацией ознакамливались https://infostart.ru/public/671436/ ?
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот