|
v8: 8.2.17 жрёт сообщения на сервере. Что же делать? | ☑ | ||
---|---|---|---|---|
0
Industrial
13.03.13
✎
13:29
|
Памагите кто чем умеет, можна просто посочувствовать. Немного о себе: дописанная база УПП 100 GB на платформе (8.2.17.169). Когда улучшал УПП, в процедуре ПриЗаписи модуля набора записей регистра накопления я сделал доп. проверку, если она не срабатывает, то ставлю Отказ=Истина; и вызываю Сообщить("ХХХХХХХ !!!"); Теперь проблема: когда провожу "неправильный" документ, движения не записываются (так и надо) но сообщение не выводится. Смотрел в отладчике, сообщить вызывается но в окне сообщений ничего не отображается. Если ставлю Отказ=ЛОЖЬ; то отображается. Набор записей записывается в процедуре из модуля ПолныеПрава, который выполняется на сервере, т.е. я думаю, что студенты улучшили платформу 8.2.17 так, при откате транзакций на сервере, теряются сообщения пользователю.
|
|||
1
mikecool
13.03.13
✎
13:31
|
корми на клиенте
и почитай про ПолучитьСообщенияПользователю |
|||
2
Волшебник
13.03.13
✎
13:31
|
на сервере нет окна сообщений
|
|||
3
Industrial
13.03.13
✎
13:32
|
P.S. Толстый клиент обычное приложение. На платформе (8.2.13.219), такого не было, сообщить появлялось. Пробовал
Сообщить("11111"); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "111111"; Сообщение.Сообщить(); ОбщегоНазначения.СообщитьОбОшибке("11111 11"); результат такой-же |
|||
4
Industrial
13.03.13
✎
13:34
|
(2) в 8.0 нет, в 8.1 и 8.2.13 есть, а дальше снова убрали?
|
|||
5
Industrial
13.03.13
✎
13:36
|
т.е. транзакция выполняется на сервере, мне что-то не понравилось, сообщаю об ошибке, откатываю транзакцию, возвращаю управление на клиент, сообщения не показываются. Улучшатели... "Переходите, ребята, на управляемые формы."
|
|||
6
mikecool
13.03.13
✎
13:41
|
(5) ты пробовал
Глобальный контекст.ПолучитьСообщенияПользователю (Global context.GetUserMessages) Глобальный контекст (Global context) ПолучитьСообщенияПользователю (GetUserMessages) Синтаксис: ПолучитьСообщенияПользователю(<УдалятьПолученные>) Параметры: <УдалятьПолученные> (необязательный) Тип: Булево. Признак необходимости удаления полученных сообщений из списка. Истина - удалять. Значение по умолчанию: Ложь Возвращаемое значение: Тип: ФиксированныйМассив. Описание: Получает массив объектов СообщениеПользователю, которые еще не были выведены пользователю. Такое может происходить при работе в регламентных заданиях, на стороне сервера или в Web-сервисах. Доступность: Сервер, толстый клиент, внешнее соединение. См. также: СообщениеПользователю Глобальный контекст, метод Сообщить |
|||
7
mikecool
13.03.13
✎
13:41
|
или только писатель?
|
|||
8
Industrial
13.03.13
✎
14:11
|
(2),(6),(7) подтянулись Отцы, спасибо, не ожидал такого внимания. (7) пробовал
Попытка СерверныйМодуль.СоздатьДокументИЗаписать(); Исключение КонецПопытки; МассивСообщ=ПолучитьСообщенияПользователю(); Для Каждого Сооб Из МассивСообщ Цикл Сообщить(Сооб.Текст); Сооб.Сообщить(); КонецЦикла; ничего не пишет, МассивСообщ нулевой |
|||
9
Industrial
13.03.13
✎
14:13
|
Кому интересно, смастерил демо базку с одним документом. когда интерактивно проводишь документ сообщение выводится, на 8.2.17 когда запускаешь обработку1 - кнопка "тестсообщить" сообщение не выводится
http://zalil.ru/34342858 глюкк http://zalil.ru/34342860 с ПолучитьСообщенияПользователю на 8.2.13 всё работает |
|||
10
Industrial
13.03.13
✎
17:45
|
в файловой 8.2.17 тоже всё работает
|
|||
11
Industrial
14.03.13
✎
12:11
|
(10) статистика показывает сотни скачек примера с http://zalil.ru/34342858, но никто не отписался, наверное руки не дошли посмотреть, ведь на носу годовая отчётность.
Для тех, кому интересно, приведу код, который НЕ работает на 8.2.17 Итак: толстый клиент обычное приложение. документ1 делает приход по регистру накопления РегистрНакопления1. В регистре прописана отмена транзакции //модуль набора записей РегистрНакопления1. Процедура ПриЗаписи(Отказ, Замещение) Сообщить("Записывать сюда нельзя!!!"); Отказ=Истина; КонецПроцедуры //есть общий модуль "СерверныйМодуль" с флажками СЕРВЕР, вызов сервера, привелигированный, с кодом Процедура СоздатьДокументИЗаписать() Экспорт Док=документы.Документ1.СоздатьДокумент(); Док.Дата=ТекущаяДата(); док.Записать(РежимЗаписиДокумента.Проведение); КонецПроцедуры //есть обработка обработка1 с кнопкой "Тестсообщить" в ней такой код: Процедура ТестсообщитьНажатие(Элемент) СерверныйМодуль.СоздатьДокументИЗаписать(); КонецПроцедуры тесты 8.2.13 клиент сервер когда документ1 проводится через кнопку ок, выдаётся сообщение "Записывать сюда нельзя!!!" и документ не проводится(так и надо). когда запускаю обработку1 и нажимаю "Тестсообщить" ВЫДАЁТСЯ сообщение "Записывать сюда нельзя!!!" и документ не создаётся и не проводится тесты 8.2.17 клиент сервер когда документ1 проводится через кнопку ок, выдаётся сообщение "Записывать сюда нельзя!!!" и документ не проводится(так и надо). когда запускаю обработку1 и нажимаю "Тестсообщить" НЕ выдаётся сообщение !!! и документ не создаётся и не проводится тесты 8.2.17 файловая когда документ1 проводится через кнопку ок, выдаётся сообщение "Записывать сюда нельзя!!!" и документ не проводится(так и надо). когда запускаю обработку1 и нажимаю "Тестсообщить" ВЫДАЁТСЯ сообщение и документ не создаётся и не проводится Итак, ясно видно, что 8.2.17 в клиент-серверном режиме при выполнение на сервере "глотает"/не показывает сообщения, если транзакция завершилась с ошибками пробовал использовать ПолучитьСообщенияПользователю, поменял код процедуры в обработке1 Процедура ТестсообщитьНажатие(Элемент) Попытка СерверныйМодуль.СоздатьДокументИЗаписать(); Исключение КонецПопытки; МассивСообщ=ПолучитьСообщенияПользователю(); Для Каждого Сооб Из МассивСообщ Цикл Сообщить(Сооб.Текст); Сооб.Сообщить(); КонецЦикла; КонецПроцедуры не помогло, ПолучитьСообщенияПользователю выдаёт массив с 0 размером, наверно эта функция предназначена для других целей |
|||
12
Industrial
15.03.13
✎
11:34
|
Совсем забыл, вылаживаю очень ориганильный модуль объекта документ1
Процедура ОбработкаПроведения(Отказ, Режим) // регистр РегистрНакопления1 Приход Движения.РегистрНакопления1.Записывать = Истина; Движение = Движения.РегистрНакопления1.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Ресурс1 = 1; КонецПроцедуры без него сложно понять, что-же происходит |
|||
13
Industrial
18.03.13
✎
11:49
|
ап*
|
|||
14
Fragster
гуру
18.03.13
✎
11:51
|
СообщениеПользователю (UserMessage)
Свойства: ИдентификаторНазначения (TargetID) КлючДанных (DataKey) Поле (Field) ПутьКДанным (DataPath) Текст (Text) Методы: Сообщить (Message) УстановитьДанные (SetData) Конструкторы: По умолчанию Описание: Предназначен для хранения параметров сообщения, которые необходимо вывести пользователю. Если сообщение еще не было показано пользователю (такое может быть при работе на стороне сервера, в фоновом задании, внешнем соединении или Web-сервисах), можно получить накопленные сообщения методом ПолучитьСообщенияПользователю. В управляемых формах, в случае выполнения просмотра сообщения, выполняется следующий механизм обработки: Если у сообщения свойство КлючДанных заполнено и не совпадает с ключевым значением основного реквизита текущей формы (ссылкой объекта или ключом записи регистра сведений), то: открывается новая форма объекта, соответствующая значению свойства КлючДанных; если у сообщения свойство ПутьКДанным не заполнено, то в него проставляется имя основного реквизита открытой формы объекта; вызывается показ сообщения в только что открытой форме; выполняется перенос всех соответствующих сообщений из окна первой формы в новую форму (с таким же значением свойств КлючДанных, как у выбранного сообщения). При этом перенесенным сообщениям аналогичным образом проставляется свойство ПутьКДанным, если оно не установлено. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Пример: Процедура ДействиеСОбъектом(ОбъектДанных) ... Сообщение = Новый СообщениеПользователю(); Текст = "ru = ""В строке 11 табличной части ""Номенклатура"" не хватает ";" + " en = ""In line 11 of tabular section ""Nomenclature"" is missing "; Сообщение.Текст = НСтр(Текст)+НедостающееКоличество+" "+ЕдиницаИзмеренияНоменклатуры; Сообщение.Поле = "Номенклатура[10].Количество"; Сообщение.УстановитьДанные(ОбъектДанных); Сообщение.Сообщить(); КонецПроцедуры; См. также: Глобальный контекст, метод УстановитьСоответствиеОбъектаИРеквизитаФормы Глобальный контекст, метод ПолучитьСоответствиеОбъектаИРеквизитаФормы Глобальный контекст, метод ПолучитьСообщенияПользователю |
|||
15
ptiz
18.03.13
✎
11:56
|
Плюсую "на сервере нет окна сообщений".
|
|||
16
Industrial
18.03.13
✎
12:13
|
(14) глюк происходит в режиме обычного приложения толстый клиент.
пробовал Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "111111"; Сообщение.Сообщить(); -не катит (15)Видимо, как и (2), тоже писатель. "на сервере нет окна сообщений" - зато на клиенте ЕСТЬ окно сообщений. Если какая-то хрень происходит на стороне сервера,а потом управление передаётся на клиент, я должен об этом знать(увидеть сообщение об ошибках). В 8.1-8.2.13 Сообщить работало как мне хочется, а когда делали 8.2.17, студенты в подвале перенюхали клея и решили соптимизировать клиент-серверное взаимодействие, поэтому сообщения с сервера на клиент не тянутся. Улучшайте УФ, я не против, я ими не пользуюсь, но не трогайте, пожалуйста обычное приложение. Сейчас мне придётся городить регистр сведений и писать свою реализацию функции "Сообщить". Спасибо тебе, 1С. |
|||
17
ptiz
18.03.13
✎
12:15
|
(16) Надеюсь, записи из регистра сведений будешь читать до отката транзакции :)
|
|||
18
Industrial
18.03.13
✎
12:17
|
не, я буду через ком подключаться к другой базе данных. которая будет рабоать специально для сообщений на сервере.))
|
|||
19
Industrial
18.03.13
✎
14:52
|
передумал, буду записывать в текстовый файл. Это технологичнее
|
|||
20
Industrial
18.03.13
✎
18:22
|
ап*2
|
|||
21
Eugene_life
18.03.13
✎
18:26
|
пиши в файл и в конце отправляй в почту
|
|||
22
Industrial
18.03.13
✎
19:02
|
(21) спасибо, ваше мнение очень, очень важно для нас.
|
|||
23
Industrial
19.03.13
✎
11:26
|
ап*3
|
|||
24
Industrial
19.03.13
✎
14:02
|
В последней типовой упп в клиент-сервере такая-же хрень. Для воспроизведения ошибки надо установить период запрета редактирования по всем организациям по 2014 год, включить ограничение и для полных прав тоже,
и запустить проведение по партиям. Выдаётся exception, ЧТО: Не удалось записать: "Партии товаров на складах (управленческий учет)"! но сообщение об закрытом периоде не появляется, хотя оно есть. |
|||
25
Kvestin
19.03.13
✎
14:50
|
(16) 8.2.16.368 еще тоже все работало.
В догонку к теме: сегодня обнаружил, что если вызвать через COM метод обработки в которой есть "Сообщить", то процесс на кластере просто вылетает без объяснения причин ;) На 8.2.16.368 все работало без проблем. Вот такие вот обновления в платформе ... |
|||
26
Industrial
19.03.13
✎
17:53
|
УРА!!! Хорошая новость!!! мне на помощь пришли ВЫСШИЕ СИЛЫ я придумал, как обойти это досадное улучшение 1с. Теперь по порядку: вы не поверите,
но мне во сне явился СЕРЁЖА НУРАЛИЕВ. Постараюсь передать те мудрые мысли, которые поведал этот великий человек: -Дима, у тебя грустный вид. Что случилось? -Я нашёл серьёзную ошибку в платформе 8.2 в режиме обычного приложения, поделился этим на мисте чтобы узнать, может есть какие-нибуть пути обхода, предупредить тех, кто может с этим столкнуться. Но там на меня положили полный болт. -Миста отличный форум, Стас вообще молодчага, но раздел 1С надо сразу-же отключать, Мисту мы любим не за это. -Сергей, а может твои ребята поправят эту ошибку по быстрому? Если я обращусь в службу поддержки, это затянется на несколько лет. -Извини, НЕТ, мы не будет ничего исправлять. Сейчас все ресурсы сосредоточены на 8.3. Готовим пользователям много новых подарков, 1С станет ещё более маштабируемой, более интерактивной, более технологичной. -Зачем же вы сломали 8.2.17, можна было бы поправить критические ошибки 8.2.16 и не выпускать новых релизов? -В 8.2 слишком мало ошибок, мы не можем ёё так бросить. -Что-же делать, у меня УПП с 1707 сообщить, часть из них перестало выводится. -Напиши в службу поддержки, переводи конфигурацию на управляемы формы, к этому времени мы рабочую 8.3 выпустим. -В 8.3 Сообщить будет работать как надо? -В 1С 8.3 будут более маштабируемые, более технологичные, более интерактивные средства для сообщений пользователю, устаревшее Сообщить мы вообще уберём из встроенного языка. В MSDOS была коммандная строка, в WINDOWS ёё спрятали, потому-что она НЕ НУЖНА. 1С это инструмент для бизнеса, а бизнесу нужны документы, в которые колотится первичка, и отчёты, которые сдаются руководству, нужны вебсервисы, скд и оборотно-сальдовая в сафари на айфоне. ВОТ действительно важные вещи,а Сообщения никто не читает, это не интерактивно и не технологично.Переводи базу на УФ, если пользователи будут брюзжать, проси подробного ТЗ с описанием что и где должно происходить.В крайнем случае можна высылать сообщения на e-mail и СМС, это модно и технологично. В очень очень плохом случае поменяешь работу на более высокооплачиваемую, только проследи, чтобы твоя новая база была на управляемых формах. Дима, будь проще, расслабься, не нервничай. Начни бухать, заведи девушку, возьми квартиру в ипотеку, в жизни полно вещей поинтересней 1С. Я проснулся в слезах, Да, велик Сергей Георгиевич! Подумалось, ведь мне всего-лишь надо отдать информацию пользователю, если какой-то способ ёё передачи перестал работать, надо попробовать другой. Нашёл чудесную статью: 5 способов сообщения 1С «Привет, мир!» http://howknow1c.ru/programmirovanie-1c/soobwenie-v-1s.html Мне подошёл 4, программистский. Как это интерактивно и технологично: ВызватьИсключение "Привет, мир!"; Надеюсь, студенты из команды по внесению ошибок ближайшие полгода не будут трогать ВызватьИсключение, иначе мне снова придётся писать на форум. Переделал код в модуле набора записей регистра накопления: Процедура ПриЗаписи(Отказ, Замещение) Сообщить("Записывать сюда нельзя!!!"); Отказ=Истина; ВызватьИслючение "Записывать сюда нельзя!!!"; КонецПроцедуры и у пользователя ИНТЕРАКТИВНО открывается симпатичное окошко с надписью "Записывать сюда нельзя!!!" и кнопочками ОК и Подробно. Отлично, теперь бухи будут говорить, где им не хватает сообщить, а я туда буду ставить исключения. Параллельно подыскиваю более высокооплачиваемую работу, не расслабляюсь. Спасибо тебе, Стас, за чудесный форум, где общается столько сердечных людей, спасибо тебе Серёжа за чудесную программу 1С, которая кормит меня хлебом с маслом. Без 1С я вытаскивал бы застрявшую бумагу из принтеров и заправлял картриджи, а сейчас мне доверили огроменную базу данных с кучей очень важной информации. Жизнь прекрастна. |
|||
27
EvgeniuXP
19.03.13
✎
17:56
|
(2) но с сервера на клиент они передаются.
|
|||
28
EvgeniuXP
19.03.13
✎
17:57
|
(+27) по крайней мере должны передаваться при окончании процедуры.
|
|||
29
Industrial
19.03.13
✎
17:58
|
(28) если был откат транзакции, то не передаются
|
|||
30
ilya_i
19.03.13
✎
19:01
|
ВызватьИсключение говоришь. Возьмем на заметку. Спасибо, автор.
|
|||
31
GANR
19.03.13
✎
19:29
|
||||
32
ОчкарикСлава
19.03.13
✎
20:08
|
(26) класс! Книжки пиши исчо!
|
|||
33
H A D G E H O G s
19.03.13
✎
20:12
|
(26) На месте программеров, которые примут код после тебя - я бы - нашел тебя и долго бы бил ногами.
|
|||
34
H A D G E H O G s
19.03.13
✎
20:13
|
Мало того, что ВызватьИсключение записывается в ЖР, так оно и еще будет тормозиться при остановках на ошибке. С разными причинами ошибки.
Бить, табуреткой по пальцам. Однозначно. |
|||
35
Fragster
гуру
19.03.13
✎
22:06
|
ВызватьИсключение рулит. но не в этом случае
|
|||
36
zladenuw
19.03.13
✎
22:26
|
веб сервис есть ?
|
|||
37
zladenuw
19.03.13
✎
22:27
|
почитай про ошибки в релизе 17.169
20004999 (SW692673) После обращения к веб-сервису клиент перестаёт получать сообщения пользователю Проблема: Если в информационной базе существует опубликованный веб-сервис, после первого обращения к любому его методу клиенты могут перестать получать сообщения пользователю до перезапуска системы. Дата публикации: 2012-07-05 |
|||
38
Sol78
19.03.13
✎
22:45
|
(34) все правильно он сделал. посмотри типовые на УФ,
почитай "Систему стандартов и методик разработки конфигураций для платформы 1С:Предприятие 8" - раздел "Информирование пользователя" > если ошибочная ситуация возникает в процедуре или функции, которая носит общий характер (не имеет прямого отношения к записи объекта, может вызываться в контексте самых разных действий), то следует использовать ВызватьИсключение ... > 1.3. Информация об ошибке должна доводиться до пользователя в модальном диалоге. Например, такой способ информирования пользователя предлагает платформа при выводе системных сообщений об ошибке: сообщения о неуникальности кода, неуникальности записи регистра сведений, незаданной дате документа и т.п. ... > Пример №2: > При выполнении функции расчета кросс-курса валюты по отношению к управленческой валюте сообщить, что не задан курс валюты, не задана управленческая валюта и т.п. Способ реализации: Вызвать исключение. |
|||
39
Fragster
гуру
19.03.13
✎
22:51
|
(38) ну не в обработке же проведения
|
|||
40
H A D G E H O G s
19.03.13
✎
22:55
|
(38) Поищи его, ВызватьИсключение, в УПП.
Ты его найдешь в сообщениях об ошибке, именно об ошибке, но никак не просто в сообщении пользователю. Ну и остановиться по ошибке и посмотреть стэк - милое дело. |
|||
41
эцп
20.03.13
✎
11:08
|
(25) Да, есть такая проблема. В 1С написал?
|
|||
42
Industrial
20.03.13
✎
18:29
|
(31) спасибо, если придётся передавать более 1 сообщений, буду геммороиться с хранилищем значений
(34) морализатор *уев, вызватьИслючение лучше, чем отправлять сообщения на email, однозначно. (36) ни одного веб сервиса нету. (37) похоже, но не то (41) сегодня написал на [email protected] , о результатах отпишусь в теме. |
|||
43
Fragster
гуру
20.03.13
✎
18:45
|
вот кстати, через (6) и (14) работает http://infostart.ru/public/173394/ и ничего не пропадает
|
|||
44
Industrial
20.03.13
✎
18:54
|
(43) оно на уф, а я за обычное приложение рассказываю.
|
|||
45
H A D G E H O G s
20.03.13
✎
19:09
|
(42) Убей себя ап стену, коли не смог ничего лучше придумать, дятлопус.
|
|||
46
Industrial
20.03.13
✎
20:04
|
(45)батенька, не сердитесь, иначе моя вера в людей погаснет.
загадка для недятлов: есть несколько обработок, которые хитрым образом проводят документы разных видов. Все документы делают движения по регистру накопления, в модуле набора записей которого есть некоторая ПРОВЕРКА. Если проверка не срабатывает, выдаётся сообщение пользователю, движение не записывается и обработка останавливается. Внимание: сообщить перестало работать, как с минимальными усилиями выдать на гора информацию пользователю и остановить обработку? P.S. ВызватьИсключение использовать нельзя, потому-что H A D G E H O G s против. |
|||
47
H A D G E H O G s
20.03.13
✎
20:41
|
Процедура ОтложенноеСообщение() Экспорт
Если ПараметрыСеанса.Сообщение<>"" Тогда Сообщить(ПараметрыСеанса.Сообщение); ПараметрыСеанса.Сообщение=""; КонецЕсли; КонецПроцедуры Процедура ПриНачалеРаботыСистемы() ПодключитьОбработчикОжидания("ОтложенноеСообщение",1); КонецПроцедуры |
|||
48
H A D G E H O G s
20.03.13
✎
20:41
|
Первое, что пришло в голову.
|
|||
49
Kvestin
20.03.13
✎
21:04
|
(41) Для меня не критично. А есть смысл им писать ;)
|
|||
50
Fragster
гуру
20.03.13
✎
21:10
|
(46) так (14) хоть раз вызывал?
|
|||
51
Fragster
гуру
20.03.13
✎
21:10
|
и (6)
|
|||
52
Industrial
21.03.13
✎
14:51
|
(47) шикарный костыль.
(50),(51) пробовал, читай (8) |
|||
53
эцп
18.04.13
✎
14:59
|
(0) Вылечили твою проблему в 8.2.18.82:
10125390 (SW757206) Cообщение пользователю на стороне сервера Проблема: При генерации на стороне сервера сообщений пользователю в момент возврата вызова на клиент может происходить аварийное завершение работы клиента. Дата публикации: 2013-04-18 |
|||
54
chernoff
25.04.13
✎
10:03
|
Попробовал обмен через com
Теперь вместо падения платформы выдает сообщение Ошибка при вызове метода контекста (ВыполнитьДействияПослеЗавершенияЧтенияДанных): Произошла исключительная ситуация (1C:Enterprise 8.2.18.82): server_addr=tcp://1C:1661 descr=Ошибка сетевого доступа к серверу (Windows Sockets - 10054(0x00002746). An existing connection was forcibly closed by the remote host. ) line=1041 file=Src\DataExchangeTcpClientImpl.cpp Техническая информация: {Обработка.ОбменДаннымиXML.МодульОбъекта(14489)}: Ошибка при вызове метода контекста (ВыполнитьДействияПослеЗавершенияЧтенияДанных): Произошла исключительная ситуация (1C:Enterprise 8.2.18.82): server_addr=tcp://1C:1661 descr=Ошибка сетевого доступа к серверу При чем строки 14489 в Обработка.ОбменДаннымиXML.МодульОбъекта я не нашел. Их там всего 14224 У меня УПП 1.3.38.4 Да и на 1.3.39 пытал счастье |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |