Имя: Пароль:
1C
1С v8
УФ. Как из формы вызвать процедуру модуля обработки, если она на клиенте?
0 batmansoft
 
30.04.14
13:08
Добрый день.
В форме обработки у меня экспортная процедура, объявленная как на клиенте. При попытке вызывать ее вот так:
&НаКлиенте
Процедура Загрузить(Команда)
    Объект.ВыполнитьЗагрузку();
КонецПроцедуры

выдается сообщение
"{Форма.ФормаУпр.Форма(4)}: Метод объекта не обнаружен (ВыполнитьЗагрузку)
    Объект.ВыполнитьЗагрузку();
"
На сервере сделать ее нельзя, так как в ней выводяться сообщения пользователю.
Подскажите пожалуйста, как лечить?
1 jsmith82
 
30.04.14
13:08
неизлечимо
2 jsmith82
 
30.04.14
13:09
ибо баян порван в трёх местах
3 fisher
 
30.04.14
13:12
Сама хотелка неизлечима. А для вывода сообщений пользователю в серверном вызове придумано СообщениеПользователю()
4 batmansoft
 
30.04.14
13:13
(2) Дык а что, нельзя что ли в модуле обработки делать процедуры на клиенте? Если так, то почему 1С-ниа тогда дает их там объявлять?
5 batmansoft
 
30.04.14
13:15
(3) Тоесть, мне надо ВыполнитьЗагрузку() делать на сервере, а все "сообщить" и "предупреждение" переписать в СообщениеПользователю? А как быть с "состояние"?
6 fisher
 
30.04.14
13:16
(4) Неуместные опции компилятора и препроцессора просто игнорируются. Синтакс-контроль к ним не прикручен.
7 hhhh
 
30.04.14
13:16
(5) кому там на сервере может пригодиться ваше состояние?
8 andreymongol82
 
30.04.14
13:16
(4) Предлагаю ввести в конфигуратор функциональность, если что-то сделать не так - бить линейкой по пальцам. Два раза.
9 fisher
 
30.04.14
13:17
(5) Я вообще не в курсе твоей задачи. Озвучь глобально. Если код полностью клиентский, то никакого смысла исполнять его на сервере ессно нет.
10 Поpyчик-4
 
30.04.14
13:18
(4) Ты пограммист ведущий или просто?
11 fisher
 
30.04.14
13:19
Ты хочешь сделать что-то типа внешней библиотечки клиентских функций, что ли?
12 batmansoft
 
30.04.14
13:24
(9) Задача написать обработку для закачки из правленой ТИС 9.2 в УТ 11. Решил сделать ее на основе уже готовой обработины по закачке из другой правленной ТИС 9.2 в БП 2.0. А эта обработка написана так, что процедура загрузки находиться в модуле и объявлена как экспорт - я всегда так делаю.
13 fisher
 
30.04.14
13:25
Ииииии.... Добро пожаловать в мир управляемых форм!
14 fisher
 
30.04.14
13:27
В том смысле, что переписывание с обычных форм на управляемые - это нифига не подсказка в двух словах на форуме.
15 fisher
 
30.04.14
13:32
А такая "тривиальная" задача как отображение на клиенте прогресса длительной серверной операции - это вообще классика жанра и песня о любви. Оптимальный вариант - фоновое задание.
Только недавно копался, как это в БСП реализовано:
http://infostart.ru/public/274721/
16 batmansoft
 
30.04.14
13:34
Сделал ВыполнитьЗагрузку на сервере. А она все равно, не вызывается через Объект.ВыполнитьЗагрузку();
нету грит такой процедуры.
17 batmansoft
 
30.04.14
13:35
(15) мда, звездец, теперь, выходит, что бы показать юзеру ход выполнения операции, придется извратиться через заднее место...
18 batmansoft
 
30.04.14
13:36
(15) Зы, спасибо за ссылку
19 fisher
 
30.04.14
13:37
(16) РеквизитФормыВЗначение("Объект").ВыполнитьЗагрузку()
20 fisher
 
30.04.14
13:38
Рекомендую ознакомиться с книжечкой "Разработка управляемого интерфейса". Это не та тема, которая осваивается методом научного тыка.
21 fisher
 
30.04.14
13:44
(17) Это честный клиент-сервер, а не как в толстом клиенте.
Представь, что обработку ты запускаешь через браузер со своего смартфона, а исполняется она на выделенном сервере в Германии.
По-другому это никак не реализуешь.
22 batmansoft
 
30.04.14
13:45
(19) Теперь говорит:
"{Форма.ФормаУпр.Форма(4)}: Ошибка при вызове метода контекста (РеквизитФормыВЗначение)
    РеквизитФормыВЗначение("Объект").ВыполнитьЗагрузку();
по причине:
Метод недоступен на клиенте
"
23 fisher
 
30.04.14
13:47
(22) Из (16) я предположил, что ты это исполняешь из серверной процедуры формы. Из клиентской напрямую - не получится.
24 Поpyчик-4
 
30.04.14
13:47
(22) Не ипи пока себе мозг, а проштудируй книжечку "Разработка управляемого интерфейса". Это не та тема, которая осваивается методом научного тыка.
25 batmansoft
 
30.04.14
13:47
а, понял, надо так:
&НаКлиенте
Процедура Загрузить(Команда)
    ЗагрузитьНаСервере();    
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()

    РеквизитФормыВЗначение("Объект").ВыполнитьЗагрузку();

КонецПроцедуры
26 andreymongol82
 
30.04.14
13:48
(22) РеквизитФормыВЗначение - это надо на сервере делать. Взять книжку что в (20) и штудировать!
27 batmansoft
 
30.04.14
13:48
&НаКлиенте
Процедура Загрузить(Команда)
    ЗагрузитьНаСервере();    
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()

    РеквизитФормыВЗначение("Объект").ВыполнитьЗагрузку();

КонецПроцедуры
28 fisher
 
30.04.14
13:51
(27) Ага. Только, возможно, что и нет смысла выносить процедуру загрузки в модуль объекта. Учти, что реквизиты обработки, как в обычных формах, она использовать не сможет. Вернее, сможет, только они пустые будут, т.к. при серверных вызовах сохраняются только данные формы.
29 fisher
 
30.04.14
13:52
Т.е. простейший способ перехода - все реквизиты обработки переделываешь на реквизиты формы, а процедуры модуля обработки делаешь серверными процедурами формы. Ну и дальше - вперед, с песней и с книжкой.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.