В ноябрьском выпуске ИТС появился дистрибутив 1С 8.2.9.356 и я решил его опробывать. Сразу хочу предупредить о "кроссплатформенности" данного продукта - это пока миф. Сервер 1С на Debian 5 вылетает примерно раз в два часа. Может конечно и руки кривые, но на Windows 2003 все работает, причем быстрее.
Однако встала у меня задача по отображению карты маршрута бизнеспроцесса на управляемой форме. Но не просто, а для каждой строки таблицы - своя карта.
Сделал я форму и написал код:
Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)
Карта = Элементы.ВыполнениеНарядов.ТекущаяСтрока.ПолучитьОбъект().ПолучитьКартуМаршрута();
Схема.УстановитьСхему(Карта);
КонецПроцедуры
и получил первый сюрприз. Оказалось, что для того, чтобы добраться до объекта нужно вызвать процедуру на сервере. Код изменился так:
&НаКлиенте
Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)
ПолучитьКартуНаСервере(Элементы.ВыполнениеНарядов.ТекущаяСтрока);
КонецПроцедуры
&НаСервере
Процедура ПолучитьКартуНаСервере(Процесс)
Карта = Процесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
Схема.УстановитьСхему(Карта);
КонецПроцедуры
дальше произошло очень интересное событие. 1С ушло в бесконечную рекурсию.
Я долго боролся с ней, но когда поборол, то оказалось, что метода "УстановитьСхему" просто нет. Код преобразился до:
&НаКлиенте
Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)
// Вставить содержимое обработчика.
Карта = ПолучитьКарту(Элементы.ВыполнениеНарядов.ТекущаяСтрока);
ИмяФайла = КаталогВременныхФайлов() + Элементы.ВыполнениеНарядов.ТекущаяСтрока;
Карта.Записать(ИмяФайла);
Схема.Прочитать(ИмяФайла);
КонецПроцедуры
&НаСервере
Функция ПолучитьКарту(БизнессПроцесс)
Возврат БизнессПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
КонецФункции
Но это то же работало не правильно. А точнее при переходе по строкам таблицы графическая схема не менялась. И тут я выяснил ещё один не приятный момент. Графическую схему не возможно очистить, её только можно создать заново.
Код который оказался в конце:
&НаКлиенте
Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)
// Вставить содержимое обработчика.
ПолучитьКарту();
КонецПроцедуры
&НаСервере
Процедура ПолучитьКарту()
БизнессПроцесс = Элементы.ВыполнениеНарядов.ТекущаяСтрока;
Карта = БизнессПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
ИмяФайла = КаталогВременныхФайлов() + БизнессПроцесс;
Карта.Записать(ИмяФайла);
Схема = Новый ГрафическаяСхема;
Схема.Прочитать(ИмяФайла);
КонецПроцедуры
И самый простой вариант как я говорил: прост и гениален...
dushelov 23.11.2009 11:49:35
Код |
---|
&НаСервере
Процедура ПолучитьКарту(БизнессПроцесс)
Схема = БизнессПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
КонецПроцедуры
|