К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

Как оповестить пользователя из серверного модуля?

Гость
0 - 04.06.2014 - 10:38
Ситуация: документ изменяет введенные данные. Не движения: именно данные. Но это функция вспомогательная, основная-то движения. Конкретно: в Номенклатуре есть дополнительный реквизит (т.е., нужный не всем, и в движениях не участвует), но из данных документа его можно (и нужно) запомнить. Или сформировать, если его нет.
Все это дело естественно всандалить в процедуру ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи). Нажимает юзер кнопоцку "Провести и закрыть" - и вуаля: специально заточенная функция на сервере делает это.
Только совсем-совсем молча, ибо после закрытия формы документа сносит и панель сообщений.
Всякие штучки, что внизу экрана всплывают (типо ПоказатьОповещениеПользователя) - не годится - не одно оно нужно, да и затыкается штатным оповещением о завершении работы с документом.
И как жить с этим? Сообщать надо не всегда, но иногда надо.



Гость
1 - 04.06.2014 - 10:44
И да, накопленные сообщения можно и возвратить, но куда? Форма-то уже тю-тю, закрывшись... Некому принять сохраненные сообщения, чтоб красиво выложить перед глазками виноватого.
Uho
2 - 04.06.2014 - 10:51
ваще то делать это надо ПриЗаписи
Гость
3 - 04.06.2014 - 10:55
И ПередЗаписью из модуля документа не здорово: среагирует на метки удаления, и вообще - есть куча административного барахла по изменению нумерации, замены реквизитов и т.п. - нафиг это счастье в виде простынь сведений при массовой перезаписи документов.
Гость
4 - 04.06.2014 - 10:57
2-Uho > Смотри (3): тоже редьки не слаще.
Uho
5 - 04.06.2014 - 10:58
Цитата:
Сообщение от VZ Посмотреть сообщение
нафиг это счастье в виде простынь сведений при массовой перезаписи документов.
для этого существуют процедуры на клиенте
Uho
6 - 04.06.2014 - 10:59
+5 т.е. в форме
Гость
7 - 04.06.2014 - 11:11
5-Uho > Существуют, но как из запитать? Надо, чтоб это дело вызывалось перед завершением ввода, т.е., в момент "Провести и закрыть". А тут-то форма закрывается. Некому будет принимать протокол.
Не, можно, конешно, жамкать кнопу "записать", форма отсается открытой, но юзеры делают губки обиженным бантиком...
Uho
8 - 04.06.2014 - 11:35
ну тогда может ПриЗакрытии подойдет?
Uho
9 - 04.06.2014 - 11:40
призаписи записываешь данные, формируешь сообщения пользователю, а при закрытии - ПолучитьСообщенияПользователю.
Uho
10 - 04.06.2014 - 11:40
еще можно подпиской на событие
Гость
11 - 04.06.2014 - 11:48
8-Uho > Не пойдет: при каждом просмотре включать? При просто просмотреть? А как с теми, кто только помотреть и может?
9-Uho > А пальцем показать?
10-Uho > Неа. Подписка делается на объект: ПриЗаписи, ПриПоведении... Формы там нетути.
Uho
12 - 04.06.2014 - 13:36
вот так, например

Код:
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	//записываем дополнительные данные
	//....
	
	//формируем сообщения пользователю
	
	ТекстСообщенияПользователю = "Сам дурак!";
	
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
	
	Если ЗначениеЗаполнено(ТекстСообщенияПользователю) Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = ТекстСообщенияПользователю;
		Сообщение.Сообщить();
	КонецЕсли;
	
КонецПроцедуры
ТекстСообщенияПользователю - реквизит формы
Гость
13 - 04.06.2014 - 16:39
При закрытии выведет в область сообщений формы? Или главного окна?
Uho
14 - 04.06.2014 - 16:42
главного.
Гость
15 - 05.06.2014 - 01:01
12-Uho > Хмм...
&НаСервере
ТекстСообщенияПользователю = "Сам дурак!";
ТекстСообщенияПользователю - реквизит формы


Процедура на сервере будет писать в форму на клиенте?
Гость
16 - 05.06.2014 - 06:54
пиши в лог, после закрытия документа выводи форму лога с отбором. примерно как при обмене с сайтом. еще можно сообщение пользователю прислать, в почтовый клиент или в список заданий. с уведомлением начальника.
Uho
17 - 05.06.2014 - 09:20
15-VZ > форма доступна и на клиенте, и на сервере, ее реквизиты тоже
Гость
18 - 05.06.2014 - 10:00
16-Управление торговлей 11 > Не конкретность ищу. Неясна схема: как поймать на клиенте событие, что документ записался? Форма об этом сообщает серверной процедуре, из которой ничего клиенту не возвращается. И вызвать клиентскую процедуру нельзя.
Вот если я нажимаю не "Провести и закрыть", а "Записать" (кнопа с картинкой дискеты), то форма остается открытой, и панель сообщений на месте. Но это не нужное усложнение для работы. А без этого форма закрывается, закрывая автоматически панель сообщений. Даже этого не предотвратить.
Ищу метод активизировать клиента. Фоновый процесс на клиенте замутить, который что-то будет опрашивать? Если в БД не лезет, то и тормозить не будет.
А вот как - не ведаю.
Сервер о клиенте ведает, иначе как бы те же сообщения выкладывал, или всплывающие окна заставлял формироваться. Вот токо даже клиентскую обормотку из сервера не вызвать :(
Uho
19 - 05.06.2014 - 10:10
18-VZ > чем (12) не устраивает?
Гость
20 - 05.06.2014 - 11:03
(18) я слушаю
Гость
21 - 05.06.2014 - 12:28
19-Uho > В саму форму лезть неохота. Хлопотно больно эти УФ разглядывать.
Хотя, конечно, можно строку неопределенной длины пихнуть (длина=0), и видно ее в ПослеЗаписиНаСервере...
Прикину :)
Хочется компактности...
Uho
22 - 05.06.2014 - 12:43
в ПослеЗаписиНаСервере сообщение выведется в форму (которая закроется при ПровестиИЗакрыть), а в ПриЗакрытии - выведется в главное окно.

ЗЫ. а еще можно попробовать идентификатор главного окна получить и вывести сообщения туда насильно.
Гость
23 - 05.06.2014 - 13:29
VZ приручает восьмерку
Гость
24 - 05.06.2014 - 13:30
подманивает ее морковкой
Гость
25 - 05.06.2014 - 14:22
24-Helen1986 > Зависть к ближнему способствует худобе ;)
Гость
26 - 05.06.2014 - 15:31
22-Uho >С идентификатором, кстати, не прокатит, если включен режим вкладок - все равно при "провести и закрыть" сообщения закроются.
Гость
27 - 05.06.2014 - 15:56
26-Sneer > Ну, именно к моей задаче это не относится: сообщения не из тех, что препятствуют проведению - я не зря запсочил самоделщину в ПослеЗаписи. Потому нужна была лишь информация о правленом доп.реквизите (конкретно: вес единицы измерения в кГ). И вовсе не вся номенклатура под это дело попадает: с "весовой" ЕИ, разумеется, нет, бессмыслица. И только то, что производится. Исключая услуги ;)
Доп.рекизит не учетный, это больше отчетный для собственных нужд. Ну, и ТТН легче формировать: там среди реквизитов "вес" есть.
А сообщения довольно куцые по длине, в них наименованиям товара тесно. Пойдет лучше одно пошире, но со всеми нужными строками, чем узкое из отдельных фрагментов.
Гость
28 - 05.06.2014 - 16:22
А зачем вообще нужны эти сообщения? если предполагаются какие-то действия, так надо к ним переходить. Если нет - то и сообщать не надо.
Гость
29 - 05.06.2014 - 17:17
28-Управление торговлей 11 > Ну, хотя бы для того, чтобы вопросы снимать "А почему...?" - "А потому, что перед этим ввела в приходе столько-то штук на столько-то тонн. И это запомнилось как характеристика. Нет, я не знаю, как это поправить: почему одно и тоже в пятницу легче, а в понедельник тяжелее. Разбирайтесь сами."
Контроль косвенный ;)
Кстати, сами хотели сей механизм. А я предупреждал: "Бойтесь желаний..." :)
Гость
30 - 05.06.2014 - 18:02
28-Управление торговлей 11 >еще раз предложу логи, форму с отбором и бизнес-процесс "Задание"
Гость
31 - 05.06.2014 - 19:46
0-VZ > ИМХО "красиво", без модификации формы объекта, инициирующего транзакцию сделать не получится. Доработки:
1. Добавить на клиенте кэш для хранения времени начала транзакций. Либо экспортной переменной модуля приложения, либо используя кэш типового решения.
2. При создании "сопуствующих объектов" записывать информацию о них в историю работы пользователя.
3. В модуле управляемого приложения сделать экспортную процедуру - анализатор истории. Например так:

Код:
Перем ВремяЗапускаТранзакции Экспорт;

&НаКлиенте
Процедура Подключаемый_ПроверкаИстории() Экспорт

	Если Не ВремяЗапускаТранзакции = Неопределено Тогда
	
		ИсторияРаботы = ИсторияРаботыПользователя.Получить();
		СчетчикЭлементов = 0;
		Для Каждого ЭлементИстории Из ИсторияРаботы Цикл
			Если ЭлементИстории.Дата >= ВремяЗапускаТранзакции Тогда
				СчетчикЭлементов = СчетчикЭлементов + 1;
			КонецЕсли;
		КонецЦикла;
		
		Если СчетчикЭлементов > 1 Тогда
			ПоказатьОповещениеПользователя("При записи объекта были записаны дополнительные элементы НСИ",, "подробности можно увидеть в истории работы пользователя");
		КонецЕсли;
	КонецЕсли;	

КонецПроцедуры // Подключаемый_ПроверкаИстории()

&НаКлиенте
Процедура ПодключитьОбработчикИстории() Экспорт

	ВремяЗапускаТранзакции = ТекущаяДата();
	ПодключитьОбработчикОжидания("Подключаемый_ПроверкаИстории", 0.1, Истина);

КонецПроцедуры // ПодключитьОбработчикИстории()
4. Перед записью в форме добавить строку:
Код:
	ПодключитьОбработчикИстории();
В реальности места расположения процедур нужно выбрать более уместные, чем модуль управляемого приложения, но сама концепция выглядит как-то так.
Гость
32 - 05.06.2014 - 21:25
31-Reaper > Излишне сложно. Сойдет и параметр формы в качестве переменной, видимой всеми процедурами. И к чему нам история? Нам истории никчему: вводя количество, по введенному/сохраненному ранее значению формируется вес на указанное количество. Если введенного/запомненного нет, то юзер, взглянув в бумажку, пишет общий вес самостоятельно.
После записи (и возможно, проведения, вся табличная часть отправляется на обработку: если "весового коэффициента" не было до того, он формируется из известных значений. Если он другой, то и пишется другой (допустим лаг "ну, почти тоже самое значение"). Собственно, зачем здесь история? Есть история документа, есть история движений в учетных единицах, этого - достаточно. Сообщения же, так, больше для порядка, чтоб юзер совсем уж себя сиротой не чувствовал ;)
Да и знать будет, где что искать, если потребуется.
Захотят строгий учет - будет. Оне сами этого не ведают.
Да и общий отчет по этому делу "за период" уже, собственно, готов. А эти отчеты бережно сохраняются в твердой копии.
Гость
33 - 05.06.2014 - 22:34
32-VZ >С точки зрения методики разработки УФ использование истории считается правильным решением. А я контекста ведь не знал, вот и озвучил "правильное".
Гость
34 - 05.06.2014 - 22:45
33-Reaper > Да контекс-то так себе, ничего интересного :) Только пришлось занудливо прошарить все связки, чтоб понять реализацию в деталях. Описания же нет, как обычно.
К полному разочарованию, ничего из БСП вообще задействовать не удалось.
Гость
35 - 06.06.2014 - 00:10
34-VZ > БСП это отдельная трагикомедия... В наших с ней взаимоотношениях я пока веду в счете, но расслабиться она не дает.


К списку вопросов






Copyright ©, Все права защищены