|
Обмен ЗУП (типовая с доработанной) - ошибка отложенных движений | ☑ | ||
---|---|---|---|---|
0
Shaitana
23.05.12
✎
07:14
|
Есть две скульные базы ЗУП (релиз последний на данный момент), одна из них на поддержке, немного доработана, другая типовая. Платформа 8.2 естественно.
Между базами настроен обмен по загруженным правилам обмена (настроены в конвертации данных), сам обмен работает. Но: отложенные движения выполняются только при запуске вручную в режиме толстого клиента. При выполнении отложенных движений в фоновом режиме (если установить галку "выполнять отложенные движения"), или при нажатии на кнопку "выполнить отложенные движения под полными правами", вылезает ошибка: "документ.БлаБла(любой)(...) значение не является значением объектного типа УдалитьСообщения". Ошибка вылетает в типовой базе, обмен производится односторонний - выгрузка из нетиповой в типовую. Пока добралась примерно до такой вот истины: в документах в обработке проведения сидят такие вот строки: ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений"); ОбработкаКомментариев.УдалитьСообщения(); В случае с вызовом с клиента, всё обрабатывается на ОК, в случае с вызовом с сервера ОбработкаКомментариев в отладчике = Неопределено. И дальше всё упирается в параметры сеанса ОбщиеНастройки, которые в разных режимах запуска по-разному получаются... И здесь уже запуталась. В общем, вопрос: кто-нибудь сталкивался с отложенными движениями в обменах с ЗУП? И как можно победить данную ошибку? Запускать движения каждый раз вручную гемор( В предыдущей мини-ветке была следующая переписка: Ranger_83 2 (0)сталкивался.Но так и не нашел времени разобраться.Что мешает отключить обработку комментариев на #Сервере? Shaitana 3 - Придется редактировать код каждого документа, обработка комментариев в каждом прописана отдельно. А база типовая. Хотелось бы обойтись меньшей кровью, исправив код в одном месте. И еще подозрения, что не всё так просто и возможно обойти без исправления кода...(теплится надежда) ruschel90 5 - up! тоже столкнулся с такой же проблемой, только в последнем релизе Комплексной автоматизации. Изменения в модуль внести могу(закоментить работу с сообщениями если на сервере), ибо конфа нетиповая, но боюсь что вылезут другие праблы. А вообще ИМХО ЗУП реализован только в части Рег.зарплаты, и в основном из-за жестких регламентов и сроков сдачи отчетности бухгалтерами, которые очень злые, когда не успевают по вине программы...). Всё остальное: Обмены, упр. учет - работает через опу. Жутко не продумано и с вечными неисправляемыми косяками.((( |
|||
1
Zerg
23.05.12
✎
07:20
|
План обмена Полный? По организации?
|
|||
2
Shaitana
24.05.12
✎
09:28
|
План обмена Полный, да.
|
|||
3
Shaitana
29.05.12
✎
08:37
|
up!
Ну же, гуру 1С, где вы? |
|||
4
Shaitana
30.05.12
✎
04:04
|
up
|
|||
5
Shaitana
31.05.12
✎
02:56
|
up '-(
|
|||
6
Shaitana
31.05.12
✎
05:42
|
Разобралась с сервером:
на сервере если выполняется, то переменная нужная получается из глобального модуля: Кэш = ПараметрыСеанса.ОбщиеЗначения.Получить(); КэшИзменен = Ложь; ПолученноеЗначение = ОбщегоНазначения.ПолучитьЗначениеПеременной(Имя, Кэш, КэшИзменен); А в хранилище значений "Общие значения" нет переменной "глОбработкаСообщений", возвращается значение "неопределено", соответственно у этого Неопределено нет метода "УдалитьСообщения". Пока не приходит в голову как это вылечить. |
|||
7
kosts
31.05.12
✎
06:09
|
(6) Типа этого
#Если ТолстыйКлиентОбычноеПриложение тогда #КонецЕсли |
|||
8
ZanderZ
31.05.12
✎
06:31
|
(6) в ОбщегоНазначения.ПолучитьЗначениеПеременной(Имя, Кэш, КэшИзменен);
есть "глОбработкаСообщений" |
|||
9
Shaitana
31.05.12
✎
07:38
|
(7) типа этого не получится, потому что придем к тому же - переменной равной "неопределено". Или тогда типа этого придется прописывать в каждом объекте конфы, там где получается переменная.
(8) ну в самой процедурке есть получение этой переменной, ибо туда же приходит запрос переменной когда на клиенте. Но на сервере всё заканчивается на первых же строках: Если Кэш = Неопределено Тогда Кэш = Новый Структура; Иначе НайденноеЗначение = Неопределено; Если Кэш.Свойство(ИмяПараметра, НайденноеЗначение) Тогда Возврат НайденноеЗначение; КонецЕсли; КонецЕсли; -на клиенте Кэш неопределено возвращает, а на сервере он определен, а в нем нет переменной этой. |
|||
10
ZanderZ
31.05.12
✎
07:41
|
(9) ну так если нет переменной то условие
Если Кэш.Свойство(ИмяПараметра, НайденноеЗначение) Тогда Возврат НайденноеЗначение; КонецЕсли; не выполнится и пойдет дальше.... |
|||
11
Shaitana
31.05.12
✎
07:41
|
В общем, граждане, решила проблему, описываю на случай если кому пригодится:
В глобальном модуле в функции вклинила такую вот дописку (закомментированная ДСом): Функция глЗначениеПеременной(Имя) Экспорт Кэш = ПараметрыСеанса.ОбщиеЗначения.Получить(); КэшИзменен = Ложь; ПолученноеЗначение = ОбщегоНазначения.ПолучитьЗначениеПеременной(Имя, Кэш, КэшИзменен); Если КэшИзменен Тогда ПараметрыСеанса.ОбщиеЗначения = Новый ХранилищеЗначения(Кэш); КонецЕсли; //(...ДС Если ВРег(Имя) = ВРег("глОбработкаСообщений") Тогда ПолученноеЗначение = Обработки.ОбработкаЗаглушкаОтложенногоПроведенияНаСервере.Создать(); КонецЕсли; //...)ДС Возврат ПолученноеЗначение; КонецФункции -ну и соответсвенно создала пустую обработку ОбработкаЗаглушкаОтложенногоПроведенияНаСервере, в модуле объекта которой создала две пустых экспортных процедуры: Процедура УдалитьСообщения() Экспорт КонецПроцедуры Процедура ПоказатьСообщения(ЗаголовокФормы = НеОпределено) Экспорт КонецПроцедуры И всё теперь работает на ОК! Всем спасибо за моральную поддержку)))) |
|||
12
Shaitana
31.05.12
✎
07:46
|
(10) Кэш есть, а переменной глОбработкаСообщений в нем нет, условие выполняется и получает "неопределено".
|
|||
13
ZanderZ
31.05.12
✎
07:51
|
(12) ну так значит надо проинициализировать ее
|
|||
14
kosts
31.05.12
✎
08:00
|
(11) Это значит, что типовой механизм теперь не будет работать вообще?
|
|||
15
Shaitana
31.05.12
✎
08:06
|
(14) смотря что подразумевать под типовым механизмом?
отложенные движения продолжают работать в типовом режиме. Только без ошибок и независимо от того что в кэше. В принципе обработка сообщений приписана для работы на клиенте, а на сервере,судя по отдельным ограничениям в ней: #Если ТолстыйКлиентОбычноеПриложение тогда #КонецЕсли. Подразумевается что обработки сообщений не должно быть, только этот механизм дает сбой. Если кто знает как этих сбоев избежать, можно продолжить тему. |
|||
16
kosts
31.05.12
✎
08:16
|
(15) > отложенные движения продолжают работать в типовом режиме.
Я имею ввиду, что типовая обработка СообщенияВыполняемыхДействий никогда не будет использована, и пользователь никогда не увидит, что пыталась сказать ему программа. |
|||
17
Shaitana
31.05.12
✎
08:50
|
(16) Верно. Чуть подкорректировала:
вписала не в глобальный модуль а в модуль ОбщегоНазначения, Функция ПолучитьЗначениеПеременной: ... Если Кэш.Свойство(ИмяПараметра, НайденноеЗначение) Тогда //(...ДС Если ВРег(Имя) = ВРег("глОбработкаСообщений") и НайденноеЗначение=Неопределено Тогда НайденноеЗначение = Обработки.ОбработкаЗаглушкаОтложенногоПроведенияНаСервере.Создать(); КонецЕсли; //...)ДС Возврат НайденноеЗначение; КонецЕсли; ... |
|||
18
Shaitana
31.05.12
✎
08:51
|
в таком случае "левая" обработка будет вызываться только при работе на сервере. а пользователю будет показываться прежняя типовая обработка :-)
|
|||
19
Shaitana
31.05.12
✎
08:52
|
*вместо ВРег(Имя):
ВРег(ИмяПеременной)... |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |