Значение не является значением объектного типа (УдалитьСообщения) (ЗУП)
При ночном обмене с периферийными узлами (базы серверные, обмен через подключение к базе, система ЗУП ред. 2.5.98.2, платформа 8.2.19.68) возникает ошибка проведения:
Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ОбработкаПроведения': {Документ.КадровоеПеремещениеОрганизаций.МодульОбъекта(2160)}: Значение не является значением объектного типа (УдалитьСообщения)
Редактирование модуля в каждом отдельном объекте - не вариант.
Если кто-то сталкивался и решил проблему - подскажите пожалуйста "как".
Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ОбработкаПроведения': {Документ.КадровоеПеремещениеОрганизаций.МодульОбъекта(2160)}: Значение не является значением объектного типа (УдалитьСообщения)
Редактирование модуля в каждом отдельном объекте - не вариант.
Если кто-то сталкивался и решил проблему - подскажите пожалуйста "как".
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Может быть конфигурацию переписывали? Можно проверить:
Модуль ОбщегоНазначенияЗК, экспортная функция ПолучитьЗначениеПеременной. Строки кода:
Вряд ли кто-то что-то наделал, но мало ли. Могли и обработку подменить. Следующим шагом убедиться, что вызываемой обработке есть экспортная процедура:
Модуль ОбщегоНазначенияЗК, экспортная функция ПолучитьЗначениеПеременной. Строки кода:
ИначеЕсли ВРег(ИмяПараметра) = ВРег("глОбработкаСообщений") Тогда
НайденноеЗначение = Обработки.СообщенияВыполняемыхДействий.Создать();
Вряд ли кто-то что-то наделал, но мало ли. Могли и обработку подменить. Следующим шагом убедиться, что вызываемой обработке есть экспортная процедура:
Процедура УдалитьСообщения() Экспорт
(4) omut, повторюсь, решение вида:
мы использовать не будем, это требует изменения МО каждого объекта.
Вопросы типа "изменили обработку", "а есть ли права"... давайте не тратить время друг друга.
Хотелось бы получить ответ от человека, понимающего проблему.
#Если Клиент Тогда
мы использовать не будем, это требует изменения МО каждого объекта.
Вопросы типа "изменили обработку", "а есть ли права"... давайте не тратить время друг друга.
Хотелось бы получить ответ от человека, понимающего проблему.
Где именно ошибка, известно.
Она находится в модуле объекта всех документов:
Решается просто:
Но нам такой вариант не подходит. Эту проверку нужно добавить в каждый модуль объекта. Не проводятся документы всех типов.
Она находится в модуле объекта всех документов:
Процедура ОбработкаПроведения(Отказ, Режим)
ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений");
ОбработкаКомментариев.УдалитьСообщения();
...
Решается просто:
Процедура ОбработкаПроведения(Отказ, Режим)
#Если Клиент Тогда
ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений");
ОбработкаКомментариев.УдалитьСообщения();
...
Но нам такой вариант не подходит. Эту проверку нужно добавить в каждый модуль объекта. Не проводятся документы всех типов.
Видимо, остается только вносить изменения в модуль ОбщегоНазначенияЗК. Что-то типа
ИначеЕсли ВРег(ИмяПараметра) = ВРег("глОбработкаСообщений") Тогда
#Если ТолстыйКлиентОбычноеПриложение Тогда
НайденноеЗначение = Обработки.СообщенияВыполняемыхДействий.Создать();
#Иначе
НайденноеЗначение = Константы.МояЗаглушка.СоздатьМенеджерЗначения();
#КонецЕсли
Создать Константу с именем "МояЗаглушка", права на чтение выдать и в модуль менеджера добавить парочку экспортных методов. На вскидку: УдалитьСообщения и ПоказатьСообщения, которые вообще ничего не будут делать. Тип константы и прочие тонкости значения не имеют. Хоть булево.
ИначеЕсли ВРег(ИмяПараметра) = ВРег("глОбработкаСообщений") Тогда
#Если ТолстыйКлиентОбычноеПриложение Тогда
НайденноеЗначение = Обработки.СообщенияВыполняемыхДействий.Создать();
#Иначе
НайденноеЗначение = Константы.МояЗаглушка.СоздатьМенеджерЗначения();
#КонецЕсли
Создать Константу с именем "МояЗаглушка", права на чтение выдать и в модуль менеджера добавить парочку экспортных методов. На вскидку: УдалитьСообщения и ПоказатьСообщения, которые вообще ничего не будут делать. Тип константы и прочие тонкости значения не имеют. Хоть булево.
(9) omut, не сработало.
Нашли решение в старой базе, обмен был с УТ.
Решение следующее:
В общем модуле "ОбщегоНазначенияЗК":
Обработка без формы.
В модуле объекта обработки две пустые процедуры:
Нашли решение в старой базе, обмен был с УТ.
Решение следующее:
В общем модуле "ОбщегоНазначенияЗК":
Функция ПолучитьЗначениеПеременной(ИмяПараметра, Кэш = Неопределено, КэшИзменен = Ложь) Экспорт
Если Кэш = Неопределено Тогда
// Кэш не был проинициализирован
Кэш = Новый Структура;
Иначе
// Ищем значение в структуре
НайденноеЗначение = Неопределено;
Если Кэш.Свойство(ИмяПараметра, НайденноеЗначение) Тогда
// вставляем отсюда
Если ВРег(ИмяПараметра) = ВРег("глОбработкаСообщений") и НайденноеЗначение = Неопределено Тогда
НайденноеЗначение = Обработки.ОбработкаОтложенногоПроведенияНаСервере.Создать();
КонецЕсли;
//сюда
Возврат НайденноеЗначение;
КонецЕсли;
КонецЕсли;
ПоказатьОбработка без формы.
В модуле объекта обработки две пустые процедуры:
Процедура УдалитьСообщения() Экспорт
КонецПроцедуры
Процедура ПоказатьСообщения(ЗаголовокФормы = Неопределено) Экспорт
КонецПроцедуры
Показать
После ночного обмена в регистре по-прежнему остались отложенные движения, возможно меньше, но тем не менее они там есть.
Дополнительным решением является увеличение попыток обмена, но баз слишком много, такой вариант тоже не очень приемлем.
Я добавила внешнюю обработку, запускаемую по регламенту, для очистки РС "Отложенные движения": обработка проводит документы и удаляет записи из регистра.
Но, до вставки кода, который я указала выше, обработка также выдавала ошибку: "Значение не является значением объектного типа (УдалитьСообщения)".
В ней установила привилегированный режим.
И еще добавила вот это:
Не смотря на то, что РЛС у нас нет, этот регистр мешал проведению документов.
И теперь все работает как надо :)
Дополнительным решением является увеличение попыток обмена, но баз слишком много, такой вариант тоже не очень приемлем.
Я добавила внешнюю обработку, запускаемую по регламенту, для очистки РС "Отложенные движения": обработка проводит документы и удаляет записи из регистра.
Но, до вставки кода, который я указала выше, обработка также выдавала ошибку: "Значение не является значением объектного типа (УдалитьСообщения)".
В ней установила привилегированный режим.
И еще добавила вот это:
НаборЗаписейДоступа = РегистрыСведений.ОбъектыДоступаДокументов.СоздатьНаборЗаписей();
НаборЗаписейДоступа.Отбор.ДокументСсылка.Установить(Запись.Документ);
НаборЗаписейДоступа.Записать(Истина);
Не смотря на то, что РЛС у нас нет, этот регистр мешал проведению документов.
И теперь все работает как надо :)
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот