Имя: Пароль:
1C
1С v8
Документооборот, ЗадачиМнеПриАктивизацииСтроки()
0 YurAnt
 
17.04.15
13:42
Доброго времени суток, господа-форумчане.
Столкнулся с такой вот интересной задачей:
есть Документооборот 8 КОРП, редакция 1.3
в документообороте есть Задачи/ЗадачиИсполнителя

http://savepic.net/6759930.htm

В списке моих задач ("ФормаЗадачиМне"), если пользователь тыкает по задаче - подсвечивать мертвенько-зеленым цветом всякое разное в окошке справа "ГруппаНаименованиеИТипПриложения" (по сути вложение задачи, документ)

работа у всех идет в тонком клиенте.

подсветка идет в момент когда пользователь ткнул мышей в задачу.

Далее если у документа-вложения реквизит "Бюджет" = Ложь, то подсвечиваем. (т.е. без обращения к серверу - никак, ибо по текущей заявке смотрим что за док во вложении и дальше стучимся к нему)

А теперь самое весёлое... 1) при вызове сервера автоматом активизируется ЗадачиМнеПриАктивизацииСтроки()
именно эта процедура обрабатывает "тык" мышью,
в обчем рекурсия.
На клиенте не вариант ибо все сидят в тонком. А через сервер идет вызов рекурсии...
Сижу вот ломаю мозг как это побеждать.

С ув. YurAnt.
1 YurAnt
 
17.04.15
13:44
т.е. пользователь тыкает мышью
попадает в

&НаКлиенте
Процедура ЗадачиМнеПриАктивизацииСтроки(Элемент)
    //********** 14.04.2015*******************************************************************
    //ИтогПоиска = ПоискПоСтруктуреНаСервере(Элементы.ЗадачиМне.ТекущиеДанные.БизнесПроцесс);
    //        
    //Если Не ЗначениеЗаполнено(ИтогПоиска) Тогда
    //    зеленый = Новый Цвет(152, 251, 152);
    //    Элементы.ГруппаНаименованиеИТипПриложения.ПодчиненныеЭлементы.ДеревоПриложенийНаименование.ЦветФона = зеленый;    
    //Иначе                
    //    Элементы.ГруппаНаименованиеИТипПриложения.ПодчиненныеЭлементы.ДеревоПриложенийНаименование.ЦветФона = Новый Цвет(255, 255, 255);
    //КонецЕсли;
    //********** 14.04.2015*******************************************************************

//=======================================================
&НаСервере
Функция ПоискПоСтруктуреНаСервере(БПСсылка)
    Предмет = БПСсылка.Ссылка.Предметы[0].Предмет;
    Если ЗначениеЗаполнено(Предмет) Тогда
        ВидДок = Предмет.ВидДокумента;
    Иначе
        ВидДок = Неопределено;
    КонецЕсли;

    ЗаявкаНаОплату = Справочники.ВидыВнутреннихДокументов.НайтиПоНаименованию("Заявка на оплату");
        
    Если ЗначениеЗаполнено(ВидДок) Тогда    
        Если ВидДок = ЗаявкаНаОплату Тогда
            БюджетЗаявкаНаОплату = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Бюджет (Заявка на оплату)");
            
            СтруктураПоиска = Новый Структура;
            СтруктураПоиска.Вставить("Свойство", БюджетЗаявкаНаОплату);
            
            ИтогПоиска = Предмет.ДополнительныеРеквизиты.НайтиСтроки(СтруктураПоиска);
        КонецЕсли;
    КонецЕсли;
    
    Возврат ИтогПоиска;
КонецФункции
2 YurAnt
 
17.04.15
13:46
и как только идет вызов сервера, происходит повторный вызов ЗадачиМнеПриАктивизацииСтроки(Элемент)

не говоря уже о том, что при открытии формы, эта процедурка пробегает по всем строкам...
а вызов сервера в цикле не есть хорошо
3 YurAnt
 
17.04.15
13:52
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.