Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Вызов клиентской функции из модуля объекта

Вызов клиентской функции из модуля объекта
Я
   grasshoper
 
30.08.21 - 10:18
Добрый день. Недавно решил научиться работать с управляемыми формами. Подскажи те, как можно вызвать клиентскую функцию из модуля объекта на управляемой форме? Есть обычная форма и управляемая. С обычной все работает, а вот как приделать ту же функцию к управляемой пока понять не могу.

В Модуле объекта:
&НаКлиенте
// Функция ВыбратьПапку() - Возвращает путь к выбранному каталогу
//
// Возвращаемое значение:
//  Строка - Содержит путь к выбранному каталогу
//
// Пример:
//  Функция ВыбратьПапку()
Функция ВыбратьПапку() Экспорт
    ДилогЗагрузкиФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
    ДилогЗагрузкиФайла.МножественныйВыбор = ЛОЖЬ;
    
    Если ДилогЗагрузкиФайла.Выбрать() Тогда
        Возврат ДилогЗагрузкиФайла.Каталог;
    КонецЕсли;
    
    Возврат "";
КонецФункции // ВыбратьПапку()

В модуле управляемой формы:
&НаСервере
// Функция ВыбратьПапку() - Возвращает путь к выбранному каталогу
//
// Возвращаемое значение:
//  Строка - Содержит путь к выбранному каталогу
//
// Пример:
//  Функция ВыбратьПапку()
Функция ВыбратьПапку()
    ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
    Папка             = ОбработкаОбъект.ВыбратьПапку();    
    ЗначениеВРеквизитФормы(ОбработкаОбъект, "Объект");
    
    Возврат Папка;
КонецФункции // ВыбратьПапку()
   ДенисЧ
 
1 - 30.08.21 - 10:18
С сервера ты клиента не вызовешь. Никак.
   grasshoper
 
2 - 30.08.21 - 10:22
(1) Получилось только на Толстом клиенте управляемого приложения. То есть для тонкого клиента мне все необходимые функции модуля объекта придётся отдельно дублировать для тонкого клиента? Нельзя как-то написать одну функцию в модуле и дергать её для обычного и управляемого приложения?
   b_ru
 
3 - 30.08.21 - 10:24
В модуле управляемой формы:
&НаСервере
Функция ВыбратьПапку() 


Эта функция должна быть НаКлиенте очевидно.
   ДенисЧ
 
4 - 30.08.21 - 10:25
(2) Надо сразу делать по уму.
Сначала на клиенте всё спросить и выбрать, потом идти на сервер.
   b_ru
 
5 - 30.08.21 - 10:25
А вообще в УФ такие функции принято в модуле менеджера писать, а не в модуле объекта.
   ДенисЧ
 
6 - 30.08.21 - 10:25
(2) "Нельзя как-то написать одну функцию в модуле и дергать её для обычного и управляемого приложения?"
В общем случае - нет.
   ДенисЧ
 
7 - 30.08.21 - 10:25
(5) Какие такие? Опрос пользователя? О_о
   grasshoper
 
8 - 30.08.21 - 10:27
(3) На клиенте не могу обратиться к модулю объекта
   Мультук
 
9 - 30.08.21 - 10:28
(8)

    об = РеквизитФормыВЗначение("Объект");
    пСтр = об.МояФункция();
   Мультук
 
10 - 30.08.21 - 10:29
(8)

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

&НаСервере
Процедура Команда1НаСервере()
    об = РеквизитФормыВЗначение("Объект");
    пСтр = об.МояФункция();
КонецПроцедуры
   b_ru
 
11 - 30.08.21 - 10:30
(7) В том числе, если они из разных форм вызываются.
   grasshoper
 
12 - 30.08.21 - 10:31
(10) об.МояФункция() стоит с директивой &НаКлиенте
   ZDenis
 
13 - 30.08.21 - 10:33
(12) В модуле объекта не нужны директивы, они все на стороне сервера выполняются в УФ
   grasshoper
 
14 - 30.08.21 - 10:41
(13) а я могу в модуле серверной процедуры прописать кусок, который будет выполняться на клиенте? или всё в модуле объекта выполняется на сервере?
   grasshoper
 
15 - 30.08.21 - 10:43
(13) Вот такое к примеру извращение:

// Функция ВыбратьПапку() - Возвращает путь к выбранному каталогу

//
// Возвращаемое значение:

//  Строка - Содержит путь к выбранному каталогу
//

// Пример:
//  Функция ВыбратьПапку()

Функция ВыбратьПапку() Экспорт
    #Если Клиент ИЛИ ТонкийКлиент Тогда

        ДилогЗагрузкиФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
        ДилогЗагрузкиФайла.МножественныйВыбор = ЛОЖЬ; 
        
        Если ДилогЗагрузкиФайла.Выбрать() Тогда
            Возврат ДилогЗагрузкиФайла.Каталог;
        КонецЕсли;
    #КонецЕсли

    
    Возврат "";
КонецФункции// ВыбратьПапку()
   ZDenis
 
16 - 30.08.21 - 10:46
(14) Все диалоги выполняются в тонком клиенте исключительно на Клиентской части и их со стороны сервера ты не вызовешь, это тебе еще в (1) ответили. Если надо что-то спросить или выбрать, то делай это в форме, а не в модуле объекта.
   grasshoper
 
17 - 30.08.21 - 10:53
(16) То есть все клиентские процедуры пихать только в модуль формы? А если у меня одна и та же функция в 10-ти управляемых формах вызывается, 10 раз продублировать в модулях? Вот этот момент не пойму.
   ZDenis
 
18 - 30.08.21 - 10:55
(17) Да все клиентские процедуры пихаются в формы. Если они одинаковые для многих форм, то можешь вынести ее в общий модуль
   grasshoper
 
19 - 30.08.21 - 10:56
(18) а если хочу всё как-то хранить в рамках одной обработки?
   ДенисЧ
 
20 - 30.08.21 - 10:59
(19) Тогда откажись или от УФ, или от ОФ.
Зачем тебе устаревшее дерьмо? (с)
   grasshoper
 
21 - 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) "хочу всё как-то хранить в рамках одной обработки?"
   acht
 
24 - 30.08.21 - 11:07
(23) Судя по всему у Его Величества 100500 форм в одной обработке.
Подождем, пожалуй, темы, где Его Велоколепие начнет задавать вопросы - как же передавать данные объекта между формами?
   grasshoper
 
25 - 30.08.21 - 11:08
(23) А что тут не понятно то? Есть одна функция которую можно вызывать из любой формы обращаясь к модулю объекта и вызываю её в обычных формах. В управляемых же, из модуля объекта её не вызвать, так как она должна выполняться на клиенте, то бишь нужно её прописать в модуль формы, а если у меня таких форм 10 штук, то скопировать в каждую форму. Что не понятно?
   grasshoper
 
26 - 30.08.21 - 11:10
(24) Просто пытаюсь узнать у здешних разработчиков, из-за своего незнания работы с управляемыми формами, как сделать 1 процедуру и вызывать её на обычных и управляемых формах не дублируя. 1 функция = много точек вызова.
- и всё?
- и всё.
   Мультук
 
27 - 30.08.21 - 11:10
(26)
   acht
 
28 - 30.08.21 - 11:12
(26) Зачем ты вообще лезешь туда, если уже заранее уверен в том, что это "костыли by 1C"? Ты мазохист, что-ли?
Узнать он пытается...
   Garykom
 
29 - 30.08.21 - 11:14
(0) Теоретически можно например через обработчик ожидания и фоновое но это будет изврат
И еще надо временное хранилище или нечто вроде юзать
   ildary
 
30 - 30.08.21 - 11:15
(26) А зачем Вам вызывать процедуру и на обычных формах и на УФ? К чему такая универсализация, если ОФ и УФ сильно отличаются?
 
 
   Garykom
 
31 - 30.08.21 - 11:16
(29)+ Короче синхронно не выйдет никак, только асинхронно
Хотя и синхронно можно но это уже ВК на клиенте нужна, которую будет сервер вызывать
   grasshoper
 
32 - 30.08.21 - 11:16
(28) Ничего дельного от Вас так и не услышал.
   Мультук
 
33 - 30.08.21 - 11:16
(26)

{Автор, это ты еще про асинхронность не читал}

P.S.
Можно вот так, но за такие вещи обычно бьют ногой в живот.

//Форма главная

&НаКлиенте
Процедура КомандаПривет(Команда)
    ф = ПолучитьФорму("ВнешняяОбработка.ТестоваяОбработка_ФормаДонор.Форма.ФормаДонор");    
    ф.ПриветМир();
КонецПроцедуры


// Форма "ФормаДонор"


&НаКлиенте
Процедура ПриветМир() Экспорт
    Сообщить("ПриветМир");
КонецПроцедуры
   grasshoper
 
34 - 30.08.21 - 11:18
(30) а зачем мне одинаковые процедуры писать в обычную форму и писать в управляемую форму?
   grasshoper
 
35 - 30.08.21 - 11:19
(30) банальное дублирование кода, а потом ещё изменяй её и там и там, если нужно будет
   acht
 
36 - 30.08.21 - 11:20
(33) > за такие вещи обычно бьют ногой в живот.

А советующего вещи, за которое бъют - чем и куда бить надо? =)
   ildary
 
37 - 30.08.21 - 11:23
(35) А чем не устроил общий модуль, как Вам советовали в (18)?
   Василий Алибабаевич
 
38 - 30.08.21 - 11:25
(26) "1 функция = много точек вызова." Также легко как и просто. Передавай в "1 функция" путь к нужному каталогу и не нужно будет тот вопрос задавать на сервере (ГЫ. Сервер может быть в датацентра в Германии. Тогда к кому там будет обращен вопрос?)
   grasshoper
 
39 - 30.08.21 - 11:26
(37) общий модуль это хорошо, но если это будет внешняя обработка подключаемая к разным конфигурациям?
   Asmody
 
40 - 30.08.21 - 11:26
(33) Вообще-то, это один из способов вынести общие клиентские методы в отдельный модуль во внешней обработке. Ничего тут критичного нет.
   Asmody
 
41 - 30.08.21 - 11:28
(39) Писать совсем универсально под ОФ и УФ не выйдет. Разная идеология у них.
   ildary
 
42 - 30.08.21 - 11:28
(40) не считая того, что ПолучитьФорму() обьявлен нерекомендуемым в применении в текущих версиях.
   ДенисЧ
 
43 - 30.08.21 - 11:28
(39) "А если он бы вёз патроны?" (с)
   ildary
 
44 - 30.08.21 - 11:29
(41) Он ждёт волшебную палочку, чтобы вжух и 1С сделала по его хотению.
   grasshoper
 
45 - 30.08.21 - 11:30
(44) спрашиваю совета
   Asmody
 
46 - 30.08.21 - 11:32
(42) Я ж говорю - "костыль". Пока 1С сама не упрется в необходимость клиентских модулей во внешних обработках
   grasshoper
 
47 - 30.08.21 - 11:32
Ну если нужно дублировать для каждой формы, то ради бога, хотелось просто как лучше.
   Asmody
 
48 - 30.08.21 - 11:34
С другой стороны, сама 1С не пишет универсальную фигню, чтобы и под ОФ, и под УФ.
А для УФ модно делать расширения, а не внешние обработки.
   ДенисЧ
 
49 - 30.08.21 - 11:37
(48) "для УФ модно делать расширения"
А в Европах можно этосамое мужикам с мужиками... Что нам, каждой моде следовать?
   1Сергей
 
50 - 30.08.21 - 12:08
(49) Ты европейскую моду с одинесовской не путай :)
   ildary
 
51 - 30.08.21 - 12:20
(46) скорее будет так: на крупном внедрении Почта/Газпром/Атом - окажется, что это самый подходящий способ для какой-то задачи и тут же волшебным образом вместо костыля появится "рекомендованное решение".
   DrZombi
 
52 - 30.08.21 - 12:42
(0) >>> Если ДилогЗагрузкиФайла.Выбрать() Тогда

Забудьте про модальные окна, сегодня все идет через обработчик - ОписаниеОповещения (NotifyDescription)
   DrZombi
 
53 - 30.08.21 - 12:43
(34) Это вы начнете делать, в виду жестких временных рамок :)


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.