|
Как вывести сообщение пользователю из модуля объекта? | ☑ | ||
---|---|---|---|---|
0
Майбах
11.12.16
✎
14:01
|
Добрый день!
Есть внешняя обработка. Как из модуля объекта внешней обработки вывести сообщение пользователю? |
|||
1
quest
11.12.16
✎
14:02
|
переписать обработку, так что бы функции возвращали текст, этот текст - вывести пользователю.
|
|||
2
h-sp
11.12.16
✎
14:02
|
(0) так же как и не из модуля. Одинаково
|
|||
3
Майбах
11.12.16
✎
14:06
|
(2)
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт // Реализация логики команды Если ИдентификаторКоманды = "ПересчетИтогов" Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Проверка выполнена"; Сообщение.Сообщить(); КонецЕсли; КонецПроцедуры Не работает так... |
|||
4
ColonelAp4u
11.12.16
✎
14:18
|
(3) а если просто
Если ИдентификаторКоманды = "ПересчетИтогов" Тогда Сообщить("Проверка выполнена"); КонецЕсли; |
|||
5
Майбах
11.12.16
✎
14:26
|
(4) не работает. Просто не показывается ничего, но в "Если.." заходит проверял, но сообщения нет.
|
|||
6
quest
11.12.16
✎
15:23
|
ты форму не закрываешь случаем по итогу работы?
|
|||
7
quest
11.12.16
✎
15:24
|
ну и попутно скажи - управляемое приложение?
|
|||
8
Мигрень
11.12.16
✎
15:30
|
Модуль объекта выполняется на сервере.
На сервере, Карл. Кому ты хочешь показывать сообщение не сервере? |
|||
9
Майбах
11.12.16
✎
15:35
|
Управляемое.
Бухгалтерия 3.0 |
|||
10
Майбах
11.12.16
✎
15:36
|
(8) согласен, но как мне тогда сообщить пользователю или открыть форму обработки?
|
|||
11
Undefined
11.12.16
✎
15:36
|
(8) СообщениеПользователю работает на сервере
(0) попробуй обновить платформу. помню в каком то релизе был такой баг, сообщения сервера не доходили до клиента. |
|||
12
Майбах
11.12.16
✎
16:00
|
(11) Попробовал под 8.3.8 и 8.3.9 - результат тотже.
|
|||
13
Майбах
11.12.16
✎
16:06
|
Может быть из внешней обработки никак нельзя вывести сообщение пользователю?
|
|||
14
Limes
11.12.16
✎
16:11
|
(13) Код в модуле формы:
&НаСервере
в модуле объекта: Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
Сообщение выводит... |
|||
15
Майбах
11.12.16
✎
16:15
|
У Вас открывается форма, у меня же использование стоит - "ВызовСерверногоМетода", т.е. обработка работает по расписанию (функция БП 3.0) форма не открывается. Вот как тут быть? Т.е. если все ок - сообщаем пользователю, если не ОК - тогда ничего не делаем.
|
|||
16
Майбах
11.12.16
✎
16:18
|
Наверное сложно объясняю, в общем обработка выполняется по расписанию, на кнопку - соообщитьТекст (как у вас) пользователь не должен нажимать.
|
|||
17
Undefined
11.12.16
✎
16:19
|
(15) если обработка работает по расписанию значит она работает под дефолтным пользователем DefUser под которым выполняются регламентные задания, поэтому твой пользователь и не получит никогда сообщение, потому что обработка выполняется не в его сеансе
|
|||
18
1sanekmaloi1
11.12.16
✎
16:20
|
Как на счет :
Глобальный контекст (Global context) ПолучитьСообщенияПользователю (GetUserMessages) Синтаксис: ПолучитьСообщенияПользователю(<УдалятьПолученные>) Параметры: <УдалятьПолученные> (необязательный) Тип: Булево. Признак необходимости удаления полученных сообщений из списка. Истина - удалять. Значение по умолчанию: Ложь. Возвращаемое значение: Тип: ФиксированныйМассив. Описание: Получает массив объектов СообщениеПользователю, которые еще не были выведены пользователю. Такое может происходить при работе в регламентных заданиях, на стороне сервера или в Web-сервисах. |
|||
19
Undefined
11.12.16
✎
16:21
|
(16) в таких случаях надо использовать метод ПолучитьСообщенияПользователя() или как то так, которое надо выполнить на клиенте
|
|||
20
Chameleon1980
11.12.16
✎
16:21
|
писать в жр не вариант?
или вам оперативно чтобы видеть? |
|||
21
Майбах
11.12.16
✎
16:25
|
По журналу регистрации фоновое задание выполняется от Пользователя под которым работаю - Администратор.
А как использовать ПолучитьСообщенияПользователя() ? |
|||
22
Майбах
11.12.16
✎
16:26
|
К примеру получу я массив объектов, но я же опять не смогу его вывести с помощью - сообщить()
|
|||
23
Chameleon1980
11.12.16
✎
16:29
|
"...По журналу регистрации фоновое задание выполняется от Пользователя под которым работаю - Администратор. ..."
это как это? я предлагал писать в жр а когда нужно анализировать его под любым юзером. потому и спросил - нужно оперативно чтоли видеть? может тупой костыль, но писать куданить в нужном юзере через обработку ожидания проверять есть запись или нет и показывать юзеру, что там написалось. |
|||
24
Майбах
11.12.16
✎
16:36
|
Да, ошибочка - пользователь не определен при запуске, т.е. ты был прав про работу фоновых заданий.
|
|||
25
Майбах
11.12.16
✎
17:55
|
А как потом проверять через обработку ожидания по данным пользователем?
|
|||
26
Chameleon1980
11.12.16
✎
17:58
|
Можно завести константу типа какому пользователю выдавать сообщения от регламентов.
В обработке ожидания сравнивать с этой константой если <> Возврат иначе выводить накопленные сообщения пользователю может быстро не понятно ответил. спрашивайте я бы так, наверное, сделал |
|||
27
Майбах
11.12.16
✎
18:06
|
Конфигурацию снимать с поддержки нельзя
|
|||
28
Chameleon1980
11.12.16
✎
18:10
|
ну по строке что-ли тогда сравнивайте имя пользователя (хотя за такое ругают обычно)
а что страшного от добавления константы. Боитесь за обновления? Это жеж новый объект |
|||
29
Chameleon1980
11.12.16
✎
18:14
|
ну сделать обработку
держать ее открытой только для нужного пользователя т.к. ПоключитьОбработчикОжидания все равно бы пришлось где-то прописать |
|||
30
Chameleon1980
11.12.16
✎
18:27
|
типа так, наверное. не пробовал.
&НаСервере Функция ПолучитьСообщения() Сообщения=ПолучитьСообщенияПользователю(Истина); Возврат Сообщения; КонецФункции &НаКлиенте Процедура ОбработчикОжидания() СообщенияПользователю=ПолучитьСообщения(); Если СообщенияПользователю.Количество()=0 Тогда Возврат; КонецЕсли; Для Каждого Сообщение Из СообщенияПользователю Цикл Сообщить(Сообщение.Текст); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("ОбработчикОжидания", 5); КонецПроцедуры |
|||
31
Garykom
гуру
11.12.16
✎
18:27
|
(27) Не надо ничего никуда снимать, штатный механизму "отложенных сообщений" изучи и заюзай.
Ну или по топорному пиши в текстовый файлик - лог. |
|||
32
Chameleon1980
11.12.16
✎
18:28
|
ну и вместо сообщить можно
Новый СообщениеПользователю тут нарисовать |
|||
33
Chameleon1980
11.12.16
✎
18:29
|
(31) ну вот это типа такого жеж?
|
|||
34
Garykom
гуру
11.12.16
✎
18:29
|
(31)+ Только сначала реши какому именно пользователю хочешь показывать сообщения... Потому что обработке по расписанию типа (15) пофиг
|
|||
35
Garykom
гуру
11.12.16
✎
18:30
|
(33) Да способов сообщений от одного пользователя - другому куча.
|
|||
36
Chameleon1980
11.12.16
✎
18:36
|
(30) в пустой обработке
и она будет ловить сообщения, отправленнные, из регламенты через СообщениеПользователю |
|||
37
Майбах
11.12.16
✎
18:37
|
Все это конечно хорошо, но мне нужно показывать сообщения текущему пользователю, обработка запустилась, сообщения отложились, и что дальше? Я ведь получается вообще не могу из обработок внешних сообщения показывать
|
|||
38
Chameleon1980
11.12.16
✎
18:42
|
да как это
вот попробуй так: и не закрывай обработку: &НаСервере Функция ПолучитьСообщения() Сообщения=ПолучитьСообщенияПользователю(Истина); Возврат Сообщения; КонецФункции &НаКлиенте Процедура ОбработчикОжидания() Сообщить(""+ТекущаяДата()); СообщенияПользователю=ПолучитьСообщения(); Если СообщенияПользователю.Количество()=0 Тогда Возврат; КонецЕсли; Для Каждого Сообщение Из СообщенияПользователю Цикл Сообщить(Сообщение.Текст); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("ОбработчикОжидания", 5); КонецПроцедуры она тебе будет показывать каждые 5 секунд текущее дату и время + если есть накопленные на сервере (в твоем регламенте) сообщения - они тут тоже вылезут |
|||
39
Chameleon1980
11.12.16
✎
18:43
|
даже (вроде), если у тебя другое приложение открыто (активно) при получении сообщения активизируется 1с в и окне сообщений будет твоя информация.
пора уже начинать пробовать. |
|||
40
Garykom
гуру
11.12.16
✎
18:45
|
(37) Какому именно текущему? Объясни вот как телефон поймет какому знакомому ты звонишь если ты ему не скажеешь это набирая номер.
Так и тут твой код в "обработке по расписанию" откуда знает кому написать и как? |
|||
41
Chameleon1980
11.12.16
✎
18:46
|
просто держи обработку свернутой
если у тебя в отдельных окнах а так не знаю, как себя поведет думаю, ничего страшного тоже не дут |
|||
42
Chameleon1980
11.12.16
✎
18:47
|
"...Я ведь получается вообще не могу из обработок внешних сообщения показывать..."
С чего это? +обработка у тебя будет запущена только у нужного пользователя |
|||
43
Chameleon1980
11.12.16
✎
18:49
|
Только ПолучитьСоообщенияПользователю
поймает все не показанные сообщения Глобальный контекст (Global context) ПолучитьСообщенияПользователю (GetUserMessages) Синтаксис: ПолучитьСообщенияПользователю(<УдалятьПолученные>) Параметры: <УдалятьПолученные> (необязательный) Тип: Булево. Признак необходимости удаления полученных сообщений из списка. Истина - удалять. Значение по умолчанию: Ложь. Возвращаемое значение: Тип: ФиксированныйМассив. Описание: Получает массив объектов СообщениеПользователю, которые еще не были выведены пользователю. Такое может происходить при работе в регламентных заданиях, на стороне сервера или в Web-сервисах. Доступность: Сервер, толстый клиент, внешнее соединение, мобильное |
|||
44
Майбах
11.12.16
✎
19:17
|
Получается одна обработка будет по расписанию проверять данные и создавать сообщения, а вторая должна тоже при открытии проверять, но как программно запустить обработку т.е. открыть при запуске 1С?
|
|||
45
Майбах
11.12.16
✎
19:19
|
/Execute "Адрес внешней обработки" — параметр предназначен для автоматического запуска внешней обработки после запуска системы.
нашел кажется) |
|||
46
mistеr
11.12.16
✎
19:25
|
А про самого пользователя никто не подумал? Ему оно надо получать всякий спам от регламентных заданий?
|
|||
47
Chameleon1980
11.12.16
✎
19:38
|
(46)
это да я поправился "в пустой обработке и она будет ловить сообщения, отправленнные, из регламенты через СообщениеПользователю" можно придумать какой-нить РС в котором помимо сообщений и юзера писать, которому предназначается. можно было бы в регламенте перед сообщениями писать кому предназначено. только ПолучитьСообщенияПользователю для всех ловит и флаг в этой процедуре все сообщения удаляет я бы, наверное, рс сделал и ничего страшного, что это новый объект метаданных. На обновление то не скажется. |
|||
48
Chameleon1980
11.12.16
✎
19:41
|
надоть посмотреть, может в бп3 уже есть что подходящее
|
|||
49
Chameleon1980
11.12.16
✎
19:50
|
может вообще в скуль писать.
|
|||
50
Chameleon1980
11.12.16
✎
19:51
|
типа этого, думаю, можно подумать
РС "СостоянияНовостей" |
|||
51
Майбах
11.12.16
✎
19:52
|
А можно ли как то обработку с формой в которой выполняется обработчик - ОбработчикОжидания, не показывать пользователю, то есть обработка открыта а форма ему не видна, чтобы не раздражало?
|
|||
52
Garykom
гуру
11.12.16
✎
19:53
|
(49) (50) Думаю 1С если еще нету то скоро добавит в платформу "очереди сообщений" с отправителем и получателем.
Главное чтобы не забыли что отправителем/получателем может быть не только пользователь. |
|||
53
Chameleon1980
11.12.16
✎
19:56
|
(52)
возможно многие типа такого, зачастую, просто сами допиливают. тут можно тупа через лог писать. в обработке ожидания смотреть наличие, сообщать и очищать лог. |
|||
54
Майбах
11.12.16
✎
19:58
|
В принципе с обработчиком ожидания хороший вариант, но только вот постоянно открытая форма обработки не очень хорошо для пользователя, можно ли как то ее скрыть?
|
|||
55
Chameleon1980
11.12.16
✎
19:58
|
а ты про "На уровне платформы"
|
|||
56
Майбах
11.12.16
✎
19:59
|
Хотя бы как то :)
|
|||
57
Chameleon1980
11.12.16
✎
20:02
|
только вот конфликта не получится при записи в файл и при очистке файла после прочтения в одно время.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |