О поддержке толстого клиента подписками на события БСП
|
|
tormozit | Дата: Четверг, 19.12.2013, 14:19 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
| Оригинальная тема на партнерском форуме 1С https://partners.v8.1c.ru/forum/topic/1135052
Проблемы, о которых пойдет речь, касаются не только БСП, но вообще методики расположения обработчиков подписок на события в конфигурациях под управляемое приложение. Просто статистически базы с конфигурациями, включащими БСП, явно преобладают. Поэтому я буду рассматривать эти проблемы на примере именно БСП.
При запуске предприятия в клиент-серверном режиме в базе с конфигурацией на основе БСП в режиме толстого управляемого клиента есть несколько типов проблем с подписками на события, которых можно было бы избежать. Обычно такое происходит в случаях - если конфигурация разработана для обычного приложения, а БСП встроили с целью мягкого перевода ее на управляемое приложение
- после добавления в конфигурацию функционала работающего только в толстом клиенте
|
|
| |
tormozit | Дата: Четверг, 19.12.2013, 14:20 | Сообщение # 2 |
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
| Проблема №1
Ошибки типа "При подписке <ИмяПодписки> на событие <ИмяСобытия> произошла ошибка. Обработчик события не найден." На форуме нашел такой пример Обсуждение 1114793 »» Такие ошибки обычно появляются из-за того, что подписки БСП включаются для агрегатных типов объектов (СправочникОбъект, ДокументОбъект и т.д.), а у общих модулей обработчиков этих подписок не включена компиляция в режиме толстого управляемого клиента. Например так сделано в конфигурации "Управление торговлей 11" с подпиской ПроверитьИзмененияДатВПредмете.
Провел следующий эксперимент. Взял демо конфигурацию БСП 2.0.1.7 Добавил туда справочник Справочник1 Подписку ПроверитьИзмененияДатВПредмете подключил к агрегатному типу СправочникОбъект В процедуру ПриНачалеРаботыСистемы добавил код Код #Если ТолстыйКлиентУправляемоеПриложение Тогда Объект = Справочники.Справочник1.СоздатьЭлемент(); Объект.Записать(); #КонецЕсли Запустил в режиме толстого управляемого клиента Получил ошибку "При подписке ПроверитьИзмененияДатВПредмете на событие ПриЗаписи произошла ошибка. Обработчик события не найден." Включил у общего модуля НапоминанияПользователяСервер все флажки компиляции, обрамив все его тело директивой препроцессора для компиляции везде, кроме тонкого и веб клиентов Запустил в режиме толстого управляемого клиента Ошибки не возникло Отмечу, что контроль доступности обработчиков всех событий объекта платформой выполняется сразу при инициализации объекта, а не при вызове события.
|
|
| |
tormozit | Дата: Четверг, 19.12.2013, 14:20 | Сообщение # 3 |
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
| Проблема №2
Ошибки типа «Ошибка при выполнении обработчика - <ИмяСобытия> по причине: Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода <ИмяМетода>().» На форуме нашел такой пример Обсуждение 994600 »» Такие ошибки появляются из-за того, что подписки БСП обычно включаются для супертипов объектов (СправочникОбъект, ДокументОбъект и т.д.), а у общих модулей обработчиков этих подписок не включена компиляция в режиме толстого управляемого клиента и включен флажок «вызов сервера».
Провел следующий эксперимент. Взял демо конфигурацию БСП 2.0.1.7 Добавил туда справочник Справочник1 Подписку ЗаписатьГруппыИВидыДоступа подключил к агрегатному типу СправочникОбъект В процедуру ПриНачалеРаботыСистемы добавил код Код #Если ТолстыйКлиентУправляемоеПриложение Тогда Объект = Справочники.Справочник1.СоздатьЭлемент(); Объект.Записать(); #КонецЕсли Запустил в режиме толстого управляемого клиента Получил ошибку " {МодульУправляемогоПриложения(71)}: Ошибка при вызове метода контекста (Записать) Объект.Записать(); по причине: Ошибка при выполнении обработчика - 'ПриЗаписи' по причине: Попытка передачи с клиента на сервер мутабельного значения 1-го параметра метода ЗаписатьГруппыИВидыДоступа (). " Исправление этой проблемы более сложное. Нужно вынести метод обработчика подписки в отдельный общий модуль без флажка «вызов сервера», но со всеми включенными флажками компиляции, обрамив все его тело директивой препроцессора для компиляции везде, кроме тонкого и веб клиентов.
В качестве примера борьбы с этой проблемой приведу факт, что в известной универсальной подсистеме "Инструменты разработчика" мне пришлось во всех инструментах, выполняющих запись данных, делать опцию перенаправления записи на сервер. Довольно странная на первый взгляд опция, но наличие этой проблемы в большом числе типовых конфигураций заставило.
|
|
| |
tormozit | Дата: Четверг, 19.12.2013, 14:21 | Сообщение # 4 |
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
| Общий вывод и рекомендация
Для решения обеих проблем достаточно все обработчики подписок располагать в общих модулях без флажка «Вызов сервера» и с включенными всеми флажками компиляции, все тело которых обрамлено директивой препроцессора для компиляции везде, кроме тонкого и веб клиентов.
|
|
| |
imivankov | Дата: Пятница, 15.05.2015, 21:44 | Сообщение # 5 |
Рядовой
Группа: Проверенные
Сообщений: 6
Репутация: 0
Статус: Оффлайн
| Странно, но помогает наоброт именно включение флажка "Вызов сервера". Объединял с Бухгалтерия 3.0.39.58., обработка ирРедактированиеОбъектаБД в форме выдает ошибку когда пытается получить объект, потому что обработчик события находится в модуле, где стоят все галки компиляции, но не стоит вызов сервера. Хочется услышать реально ли чтобы нормально заработало с Бух 3.0 или эти ошибки будут числом далеко за сотню, пока все модули в которых есть обработчики событий не будут изменены (установлен флажок "Вызов сервера") и будут ли ещё засады?
|
|
| |
tormozit | Дата: Среда, 10.06.2015, 00:52 | Сообщение # 6 |
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
| В версии 3.33.1 портативных инструментов реализован серверный модуль для конфигураций с БСП и соответственно поддержка опции "Запись на сервере" для всех модифицирующих данные инструментов.
|
|
| |
Kasansin | Дата: Вторник, 03.11.2015, 10:09 | Сообщение # 7 |
Лейтенант
Группа: Проверенные
Сообщений: 43
Репутация: 5
Статус: Оффлайн
| Установка флажка "Вызов сервера" помогла (около 10 модулей). На партнерском форуме где то было, что 1С хочет отказаться от флажка "Вызов сервера". Официальной информации не нашел. Пока буду жить в включенными флажками.
|
|
| |
tormozit | Дата: Вторник, 03.11.2015, 10:15 | Сообщение # 8 |
Генералиссимус
Группа: Администраторы
Сообщений: 6386
Репутация: 165
Статус: Оффлайн
| Цитата Kasansin ( ) Установка флажка "Вызов сервера" помогла (около 10 модулей). Помогла решить какаую проблему?
|
|
| |
Kasansin | Дата: Четверг, 05.11.2015, 09:53 | Сообщение # 9 |
Лейтенант
Группа: Проверенные
Сообщений: 43
Репутация: 5
Статус: Оффлайн
| Цитата tormozit ( ) Помогла решить какаую проблему? Эту проблему. редактор объектов и удаление объектов. В обработке удаление объектов режим "запись на сервере" - не включал. Хотя наверно перестарался надо было протестировать с этой галочкой Список модуле опишу с своей теме.
Сообщение отредактировал Kasansin - Четверг, 05.11.2015, 11:45 |
|
| |