|
Вызов клиентской функции из модуля объекта | ☑ | ||
---|---|---|---|---|
0
grasshoper
30.08.21
✎
10:18
|
Добрый день. Недавно решил научиться работать с управляемыми формами. Подскажи те, как можно вызвать клиентскую функцию из модуля объекта на управляемой форме? Есть обычная форма и управляемая. С обычной все работает, а вот как приделать ту же функцию к управляемой пока понять не могу.
В Модуле объекта: &НаКлиенте // Функция ВыбратьПапку() - Возвращает путь к выбранному каталогу // // Возвращаемое значение: // Строка - Содержит путь к выбранному каталогу // // Пример: // Функция ВыбратьПапку() Функция ВыбратьПапку() Экспорт ДилогЗагрузкиФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДилогЗагрузкиФайла.МножественныйВыбор = ЛОЖЬ; Если ДилогЗагрузкиФайла.Выбрать() Тогда Возврат ДилогЗагрузкиФайла.Каталог; КонецЕсли; Возврат ""; КонецФункции // ВыбратьПапку() В модуле управляемой формы: &НаСервере // Функция ВыбратьПапку() - Возвращает путь к выбранному каталогу // // Возвращаемое значение: // Строка - Содержит путь к выбранному каталогу // // Пример: // Функция ВыбратьПапку() Функция ВыбратьПапку() ОбработкаОбъект = РеквизитФормыВЗначение("Объект"); Папка = ОбработкаОбъект.ВыбратьПапку(); ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект"); Возврат Папка; КонецФункции // ВыбратьПапку() |
|||
1
ДенисЧ
30.08.21
✎
10:18
|
С сервера ты клиента не вызовешь. Никак.
|
|||
2
grasshoper
30.08.21
✎
10:22
|
(1) Получилось только на Толстом клиенте управляемого приложения. То есть для тонкого клиента мне все необходимые функции модуля объекта придётся отдельно дублировать для тонкого клиента? Нельзя как-то написать одну функцию в модуле и дергать её для обычного и управляемого приложения?
|
|||
3
b_ru
30.08.21
✎
10:24
|
В модуле управляемой формы:
&НаСервере Функция ВыбратьПапку() Эта функция должна быть НаКлиенте очевидно. |
|||
4
ДенисЧ
30.08.21
✎
10:25
|
(2) Надо сразу делать по уму.
Сначала на клиенте всё спросить и выбрать, потом идти на сервер. |
|||
5
b_ru
30.08.21
✎
10:25
|
А вообще в УФ такие функции принято в модуле менеджера писать, а не в модуле объекта.
|
|||
6
ДенисЧ
30.08.21
✎
10:25
|
(2) "Нельзя как-то написать одну функцию в модуле и дергать её для обычного и управляемого приложения?"
В общем случае - нет. |
|||
7
ДенисЧ
30.08.21
✎
10:25
|
(5) Какие такие? Опрос пользователя? О_о
|
|||
8
grasshoper
30.08.21
✎
10:27
|
(3) На клиенте не могу обратиться к модулю объекта
|
|||
9
Мультук
гуру
30.08.21
✎
10:28
|
(8)
об = РеквизитФормыВЗначение("Объект"); пСтр = об.МояФункция(); |
|||
10
Мультук
гуру
30.08.21
✎
10:29
|
(8)
&НаКлиенте Процедура Команда1(Команда) Команда1НаСервере(); КонецПроцедуры &НаСервере Процедура Команда1НаСервере() об = РеквизитФормыВЗначение("Объект"); пСтр = об.МояФункция(); КонецПроцедуры |
|||
11
b_ru
30.08.21
✎
10:30
|
(7) В том числе, если они из разных форм вызываются.
|
|||
12
grasshoper
30.08.21
✎
10:31
|
(10) об.МояФункция() стоит с директивой &НаКлиенте
|
|||
13
ZDenis
30.08.21
✎
10:33
|
(12) В модуле объекта не нужны директивы, они все на стороне сервера выполняются в УФ
|
|||
14
grasshoper
30.08.21
✎
10:41
|
(13) а я могу в модуле серверной процедуры прописать кусок, который будет выполняться на клиенте? или всё в модуле объекта выполняется на сервере?
|
|||
15
grasshoper
30.08.21
✎
10:43
|
(13) Вот такое к примеру извращение:
// Функция ВыбратьПапку() - Возвращает путь к выбранному каталогу // // Возвращаемое значение: // Строка - Содержит путь к выбранному каталогу // // Пример: // Функция ВыбратьПапку() Функция ВыбратьПапку() Экспорт #Если Клиент ИЛИ ТонкийКлиент Тогда ДилогЗагрузкиФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога); ДилогЗагрузкиФайла.МножественныйВыбор = ЛОЖЬ; Если ДилогЗагрузкиФайла.Выбрать() Тогда Возврат ДилогЗагрузкиФайла.Каталог; КонецЕсли; #КонецЕсли Возврат ""; КонецФункции // ВыбратьПапку() |
|||
16
ZDenis
30.08.21
✎
10:46
|
(14) Все диалоги выполняются в тонком клиенте исключительно на Клиентской части и их со стороны сервера ты не вызовешь, это тебе еще в (1) ответили. Если надо что-то спросить или выбрать, то делай это в форме, а не в модуле объекта.
|
|||
17
grasshoper
30.08.21
✎
10:53
|
(16) То есть все клиентские процедуры пихать только в модуль формы? А если у меня одна и та же функция в 10-ти управляемых формах вызывается, 10 раз продублировать в модулях? Вот этот момент не пойму.
|
|||
18
ZDenis
30.08.21
✎
10:55
|
(17) Да все клиентские процедуры пихаются в формы. Если они одинаковые для многих форм, то можешь вынести ее в общий модуль
|
|||
19
grasshoper
30.08.21
✎
10:56
|
(18) а если хочу всё как-то хранить в рамках одной обработки?
|
|||
20
ДенисЧ
30.08.21
✎
10:59
|
(19) Тогда откажись или от УФ, или от ОФ.
Зачем тебе устаревшее дерьмо? (с) |
|||
21
grasshoper
30.08.21
✎
11:02
|
(20) Короче опять костыли by 1C
|
|||
22
ДенисЧ
30.08.21
✎
11:02
|
(21) Да. Всё, что тебе не нравится - костыль, дерьмо и не стоит Твоего Высочайшего Внимания.
|
|||
23
Василий Алибабаевич
30.08.21
✎
11:04
|
(0) Сам еще не запутался в показаниях?
(17) "одна и та же функция в 10-ти управляемых формах вызывается" и тут же (19) "хочу всё как-то хранить в рамках одной обработки?" |
|||
24
acht
30.08.21
✎
11:07
|
(23) Судя по всему у Его Величества 100500 форм в одной обработке.
Подождем, пожалуй, темы, где Его Велоколепие начнет задавать вопросы - как же передавать данные объекта между формами? |
|||
25
grasshoper
30.08.21
✎
11:08
|
(23) А что тут не понятно то? Есть одна функция которую можно вызывать из любой формы обращаясь к модулю объекта и вызываю её в обычных формах. В управляемых же, из модуля объекта её не вызвать, так как она должна выполняться на клиенте, то бишь нужно её прописать в модуль формы, а если у меня таких форм 10 штук, то скопировать в каждую форму. Что не понятно?
|
|||
26
grasshoper
30.08.21
✎
11:10
|
(24) Просто пытаюсь узнать у здешних разработчиков, из-за своего незнания работы с управляемыми формами, как сделать 1 процедуру и вызывать её на обычных и управляемых формах не дублируя. 1 функция = много точек вызова.
- и всё? - и всё. |
|||
27
Мультук
гуру
30.08.21
✎
11:10
|
(26)
|
|||
28
acht
30.08.21
✎
11:12
|
(26) Зачем ты вообще лезешь туда, если уже заранее уверен в том, что это "костыли by 1C"? Ты мазохист, что-ли?
Узнать он пытается... |
|||
29
Garykom
гуру
30.08.21
✎
11:14
|
(0) Теоретически можно например через обработчик ожидания и фоновое но это будет изврат
И еще надо временное хранилище или нечто вроде юзать |
|||
30
ildary
30.08.21
✎
11:15
|
(26) А зачем Вам вызывать процедуру и на обычных формах и на УФ? К чему такая универсализация, если ОФ и УФ сильно отличаются?
|
|||
31
Garykom
гуру
30.08.21
✎
11:16
|
(29)+ Короче синхронно не выйдет никак, только асинхронно
Хотя и синхронно можно но это уже ВК на клиенте нужна, которую будет сервер вызывать |
|||
32
grasshoper
30.08.21
✎
11:16
|
(28) Ничего дельного от Вас так и не услышал.
|
|||
33
Мультук
гуру
30.08.21
✎
11:16
|
(26)
{Автор, это ты еще про асинхронность не читал} P.S. Можно вот так, но за такие вещи обычно бьют ногой в живот. //Форма главная &НаКлиенте Процедура КомандаПривет(Команда) ф = ПолучитьФорму("ВнешняяОбработка.ТестоваяОбработка_ФормаДонор.Форма.ФормаДонор"); ф.ПриветМир(); КонецПроцедуры // Форма "ФормаДонор" &НаКлиенте Процедура ПриветМир() Экспорт Сообщить("ПриветМир"); КонецПроцедуры |
|||
34
grasshoper
30.08.21
✎
11:18
|
(30) а зачем мне одинаковые процедуры писать в обычную форму и писать в управляемую форму?
|
|||
35
grasshoper
30.08.21
✎
11:19
|
(30) банальное дублирование кода, а потом ещё изменяй её и там и там, если нужно будет
|
|||
36
acht
30.08.21
✎
11:20
|
(33) > за такие вещи обычно бьют ногой в живот.
А советующего вещи, за которое бъют - чем и куда бить надо? =) |
|||
37
ildary
30.08.21
✎
11:23
|
(35) А чем не устроил общий модуль, как Вам советовали в (18)?
|
|||
38
Василий Алибабаевич
30.08.21
✎
11:25
|
(26) "1 функция = много точек вызова." Также легко как и просто. Передавай в "1 функция" путь к нужному каталогу и не нужно будет тот вопрос задавать на сервере (ГЫ. Сервер может быть в датацентра в Германии. Тогда к кому там будет обращен вопрос?)
|
|||
39
grasshoper
30.08.21
✎
11:26
|
(37) общий модуль это хорошо, но если это будет внешняя обработка подключаемая к разным конфигурациям?
|
|||
40
Asmody
30.08.21
✎
11:26
|
(33) Вообще-то, это один из способов вынести общие клиентские методы в отдельный модуль во внешней обработке. Ничего тут критичного нет.
|
|||
41
Asmody
30.08.21
✎
11:28
|
(39) Писать совсем универсально под ОФ и УФ не выйдет. Разная идеология у них.
|
|||
42
ildary
30.08.21
✎
11:28
|
(40) не считая того, что ПолучитьФорму() обьявлен нерекомендуемым в применении в текущих версиях.
|
|||
43
ДенисЧ
30.08.21
✎
11:28
|
(39) "А если он бы вёз патроны?" (с)
|
|||
44
ildary
30.08.21
✎
11:29
|
(41) Он ждёт волшебную палочку, чтобы вжух и 1С сделала по его хотению.
|
|||
45
grasshoper
30.08.21
✎
11:30
|
(44) спрашиваю совета
|
|||
46
Asmody
30.08.21
✎
11:32
|
(42) Я ж говорю - "костыль". Пока 1С сама не упрется в необходимость клиентских модулей во внешних обработках
|
|||
47
grasshoper
30.08.21
✎
11:32
|
Ну если нужно дублировать для каждой формы, то ради бога, хотелось просто как лучше.
|
|||
48
Asmody
30.08.21
✎
11:34
|
С другой стороны, сама 1С не пишет универсальную фигню, чтобы и под ОФ, и под УФ.
А для УФ модно делать расширения, а не внешние обработки. |
|||
49
ДенисЧ
30.08.21
✎
11:37
|
(48) "для УФ модно делать расширения"
А в Европах можно этосамое мужикам с мужиками... Что нам, каждой моде следовать? |
|||
50
1Сергей
30.08.21
✎
12:08
|
(49) Ты европейскую моду с одинесовской не путай :)
|
|||
51
ildary
30.08.21
✎
12:20
|
(46) скорее будет так: на крупном внедрении Почта/Газпром/Атом - окажется, что это самый подходящий способ для какой-то задачи и тут же волшебным образом вместо костыля появится "рекомендованное решение".
|
|||
52
DrZombi
гуру
30.08.21
✎
12:42
|
(0) >>> Если ДилогЗагрузкиФайла.Выбрать() Тогда
Забудьте про модальные окна, сегодня все идет через обработчик - ОписаниеОповещения (NotifyDescription) |
|||
53
DrZombi
гуру
30.08.21
✎
12:43
|
(34) Это вы начнете делать, в виду жестких временных рамок :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |