|
Не могу вывести сообщение пользователю | ☑ | ||
---|---|---|---|---|
0
Opossum
14.07.16
✎
12:35
|
Добрый день. Пытаюсь разобраться с 1с, решил написать простенькую конфигурацию. Сразу возникла такая проблема: есть документ "ОплатаШтрафа", в модуле идет обработкапроведения документа. Мне нужно в двух местах вывести информационное сообщение. Либо штраф начилнен и все хорошо, либо не за что начислять штраф и тоже все хорошо. Функция Сообщить() работает только при отказах, Предупреждить() не работает. Пишет какую-то ерунду. Если перед Предупредить() пишу &НаКлиенте, выдается ошибка: неопознанный оператор. Как вывести тонкому клиенту информационное сообщение перед тем, как документ проведется?
Код прилагаю: Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Вставить содержимое обработчика. ЧитательВСправочнике = Справочники.Читатели.НайтиПоКоду(Читатель.Код); ЧитательВСправочникеОбъект = ЧитательВСправочнике.ПолучитьОбъект(); Штраф = 0; Для Каждого СтрТЧ Из ЧитательВСправочникеОбъект.КнигиНаРуках Цикл Если СтрТЧ.ШтрафЗаПросрочку <> 0 Тогда Штраф = Штраф + СтрТЧ.ШтрафЗаПросрочку; СтрТЧ.ШтрафЗаПросрочку = 0; СтрТЧ.КнигаУЧитателя.ДатаВозврата = ТекущаяДата(); КонецЕсли КонецЦикла; Если Штраф <> 0 Тогда Сообщить("Штраф за просроченные книги: " + Штраф); Иначе Сообщить("Неоплаченных штрафов нет"); КонецЕсли; ЧитательВСправочникеОбъект.Записать(); КонецПроцедуры |
|||
1
Горогуля
14.07.16
✎
12:39
|
>Функция Сообщить() работает только при отказах
это как? |
|||
2
Горогуля
14.07.16
✎
12:40
|
за первые две строчик вообще надо руки отрубить
|
|||
3
Opossum
14.07.16
✎
12:42
|
Если Штраф>0 Тогда
Сообщить("У Вас есть несданная книга: " + НаименованиеНесданнойКниги + " . Вы не можете получить новую книгу. Сдайте книги и оплатите штраф: " + Штраф + " рублей."); Отказ = Истина; Тогда сообщение выводится. Если режим проведения, сообщение не выходит |
|||
4
Горогуля
14.07.16
✎
12:42
|
и это... никогда не меняй данные объекта при записи
|
|||
5
Гипервизор
14.07.16
✎
12:44
|
"Сообщить() работает только при отказах" - да что вы говорите..
"Предупредить()" - что-то новенькое.. "Если перед Предупредить() пишу &НаКлиенте" - директивы компиляции не указывается внутри процедуры. |
|||
6
PiterPrg
14.07.16
✎
12:44
|
Давно-давно, когда дискеты были большими, а программы маленькими (где-то в 2000) я осваивал 77 и написал конфу, в которой создавал/писал справочники в модуле проведения. :-)
С тех пор никогда так больше не делал. :-) Убери табличную часть справочника. Создай регистр (можно регистр сведений периодический) |
|||
7
DrZombi
гуру
14.07.16
✎
12:46
|
(0) На сервере нет пользователей. Некому читать твои сообщения :)
|
|||
8
Opossum
14.07.16
✎
12:46
|
"и это... никогда не меняй данные объекта при записи"
а как их менять? ""Предупредить()" - что-то новенькое.." Предупреждение А внутри функции можно указать директиву выполнения? |
|||
9
Opossum
14.07.16
✎
12:48
|
А если создать общий модуль, который будет выполняться на клиенте, написать процедуру вызова сообщений. То как к ней обратиться при проведении документа?
|
|||
10
DrZombi
гуру
14.07.16
✎
12:49
|
(8) В модуле проведения вообще нечего никогда не используй в плане вывода модальных окон.
Так же Сообщить на УФ из модуля не увидят, т.к. код выполняется на сервере 1С |
|||
11
PiterPrg
14.07.16
✎
12:49
|
(8) Ни как не меняй.
Подумай, что произойдет, если перепроведут документ задним числом. Регистр остатков Книга/Читатель/КОличество |
|||
12
Горогуля
14.07.16
✎
12:50
|
(8) никак не менять. что юзер навводил - то пусть и будет
|
|||
13
DrZombi
гуру
14.07.16
✎
12:51
|
(0)Дарю
СообщениеПользователю (UserMessage) СообщениеПользователю (UserMessage) Свойства: ИдентификаторНазначения (TargetID) КлючДанных (DataKey) Поле (Field) ПутьКДанным (DataPath) Текст (Text) Методы: Сообщить (Message) УстановитьДанные (SetData) Конструкторы: По умолчанию Описание: Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю. Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах), можно получить накопленные сообщения методом ПолучитьСообщенияПользователю. В управляемых формах, в случае выполнения просмотра сообщения, выполняется следующий механизм обработки: Если у сообщения свойство КлючДанных заполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то: открывается новая форма объекта, соответствующая значению свойства КлючДанных; если у сообщения свойство ПутьКДанным не заполнено, то в него проставляется имя основного реквизита открытой формы объекта; вызывается показ сообщения в только что открытой форме; выполняется перенос всех соответствующих сообщений из окна первой формы в новую форму (с таким же значением свойств КлючДанных, как у выбранного сообщения). При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Пример: Процедура ДействиеСОбъектом(ОбъектДанных) ... Сообщение = Новый СообщениеПользователю(); Текст = "ru = ""В строке 11 табличной части ""Номенклатура"" не хватает ";" + " en = ""In line 11 of tabular section ""Nomenclature"" is missing "; Сообщение.Текст = НСтр(Текст)+НедостающееКоличество+" "+ЕдиницаИзмеренияНоменклатуры; Сообщение.Поле = "Номенклатура[10].Количество"; Сообщение.УстановитьДанные(ОбъектДанных); Сообщение.Сообщить(); КонецПроцедуры; См. также: Глобальный контекст, метод УстановитьСоответствиеОбъектаИРеквизитаФормы Глобальный контекст, метод ПолучитьСоответствиеОбъектаИРеквизитаФормы Глобальный контекст, метод ПолучитьСообщенияПользователю |
|||
14
Beretta
14.07.16
✎
13:09
|
(0)> Пишет какую-то ерунду
О! |
|||
15
Nuobu
14.07.16
✎
13:23
|
(14) Так и пишет "Ошибка в модуле обработки в функции "ОрботкаПроведения". Вы там пытаетесь сделать какую-то ерунду - показать диалог на сервере, в то время, как в 1С запрещен вызов окон в серверных методах.".
|
|||
16
Opossum
14.07.16
✎
13:54
|
прочитал, что сообщениеПользователю выдается, когда управление переходит на клиента. Вот код:
Если Штраф <> 0 Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Штраф за просроченные книги: " + Штраф; Сообщение.Сообщить(); Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Неоплаченных штрафов нет"; Сообщение.Сообщить(); КонецЕсли; ЧитательВСправочникеОбъект.Записать(); КонецПроцедуры Вроде все по мануалам, но сообщение не выводится. Как мне ередать управление клиенту? |
|||
17
Горогуля
14.07.16
✎
14:13
|
(16) ничего, что проведению совсем поровну на клиента?
|
|||
18
lera01
14.07.16
✎
14:40
|
(16) Делай в обработчике ПриЗаписи() или еще каком обработчике формы, а все нужные проверки делай перед проведением.
|
|||
19
PiterPrg
14.07.16
✎
14:46
|
(16) У тебя случаем не закрывается документ после проведения? :-)
Если да - то с ним просто закрывается окно с сообщением. А от этой дряни все-же откажись >>ЧитательВСправочникеОбъект.Записать(); Создай 2 документа на одного читателя и проведи их несколько раз в разной последовательности. Поле каждого раза смотри Книги на руках. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |