Каталог решений - «Маленькие» неприятности 1С 8.2

«Маленькие» неприятности 1С 8.2

«Маленькие» неприятности 1С 8.2

В наличии

Иногда одна строчка кода может быть гениальной и рождается годами, но на эти несколько строк я убил день. Как же рождалась графическая схема в 1С 8.2.

Категория:

Описание

    В ноябрьском выпуске ИТС появился дистрибутив 1С 8.2.9.356 и я решил его опробывать. Сразу хочу предупредить о «кроссплатформенности» данного продукта — это пока миф. Сервер 1С на Debian 5 вылетает примерно раз в два часа. Может конечно и руки кривые, но на Windows 2003 все работает, причем быстрее.

    Однако встала у меня задача по отображению карты маршрута бизнеспроцесса на управляемой форме. Но не просто, а для каждой строки таблицы — своя карта.

Сделал я форму и написал код:

Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)

     Карта = Элементы.ВыполнениеНарядов.ТекущаяСтрока.ПолучитьОбъект().ПолучитьКартуМаршрута();

    Схема.УстановитьСхему(Карта);
КонецПроцедуры

 

и получил первый сюрприз. Оказалось, что для того, чтобы добраться до объекта нужно вызвать процедуру на сервере. Код изменился так:

&НаКлиенте

Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)

     ПолучитьКартуНаСервере(Элементы.ВыполнениеНарядов.ТекущаяСтрока);

КонецПроцедуры

&НаСервере

Процедура ПолучитьКартуНаСервере(Процесс)

     Карта = Процесс.ПолучитьОбъект().ПолучитьКартуМаршрута();

    Схема.УстановитьСхему(Карта);

КонецПроцедуры

 

дальше произошло очень интересное событие. 1С ушло в бесконечную рекурсию.

Я долго боролся с ней, но когда поборол, то оказалось, что метода «УстановитьСхему» просто нет. Код преобразился до:

 

&НаКлиенте
Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)
    // Вставить содержимое обработчика.
    Карта = ПолучитьКарту(Элементы.ВыполнениеНарядов.ТекущаяСтрока);
    ИмяФайла = КаталогВременныхФайлов() + Элементы.ВыполнениеНарядов.ТекущаяСтрока;
    Карта.Записать(ИмяФайла);
    Схема.Прочитать(ИмяФайла);
КонецПроцедуры


&НаСервере
Функция ПолучитьКарту(БизнессПроцесс)
    Возврат БизнессПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
КонецФункции


Но это то же работало не правильно. А точнее при переходе по строкам таблицы графическая схема не менялась. И тут я выяснил ещё один не приятный момент. Графическую схему не возможно очистить, её только можно создать заново.

Код который оказался в конце:

&НаКлиенте
Процедура ВыполнениеНарядовПриАктивизацииСтроки(Элемент)
    // Вставить содержимое обработчика.
    ПолучитьКарту();
КонецПроцедуры


&НаСервере
Процедура ПолучитьКарту()

    БизнессПроцесс = Элементы.ВыполнениеНарядов.ТекущаяСтрока;
    Карта = БизнессПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
    ИмяФайла = КаталогВременныхФайлов() + БизнессПроцесс;
    Карта.Записать(ИмяФайла);
    Схема = Новый ГрафическаяСхема;
    Схема.Прочитать(ИмяФайла);
КонецПроцедуры

 

И самый простой вариант как я говорил: прост и гениален…

dushelov 23.11.2009 11:49:35

(12)

Код
&НаСервере
Процедура ПолучитьКарту(БизнессПроцесс)
   Схема = БизнессПроцесс.ПолучитьОбъект().ПолучитьКартуМаршрута();
КонецПроцедуры
has been added to your cart:
Оформление заказа