Вторник, 08.10.2024, 02:17
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
О поддержке толстого клиента подписками на события БСП
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
     
    • Страница 1 из 1
    • 1
    Поиск: