|   |   | 
| 
 | Вызов клиентской функции из модуля объекта | ☑ | ||
|---|---|---|---|---|
| 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) Это вы начнете делать, в виду жестких временных рамок :)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |