Имя: Пароль:
1C
 
Кто разгалает загадку? - текущая область поля табличного документа где меняется?
0 RomaH
 
naïve
05.05.16
14:48
&НаКлиенте
Процедура РасписаниеРаботыПриАктивизацииОбласти(Элемент)
    
    Если Не ЭтаФорма.ТекущийЭлемент = Элемент Тогда
        Возврат;    
    КонецЕсли;
    
    Если Элемент.ТекущаяОбласть.Низ - Элемент.ТекущаяОбласть.Верх > 3 Тогда
        Элемент.ТекущаяОбласть = РасписаниеРаботы.Область(Элемент.ТекущаяОбласть.Низ-3,Элемент.ТекущаяОбласть.Лево,Элемент.ТекущаяОбласть.Низ,Элемент.ТекущаяОбласть.Право);        
    КонецЕсли;
    
    Если Элемент.ТекущаяОбласть.Право - Элемент.ТекущаяОбласть.Лево > 0 Тогда
        Элемент.ТекущаяОбласть = РасписаниеРаботы.Область(Элемент.ТекущаяОбласть.Низ-3,Элемент.ТекущаяОбласть.Право,Элемент.ТекущаяОбласть.Низ,Элемент.ТекущаяОбласть.Право);        
    КонецЕсли;
    
    Если ТекущаяКолонкаРасписания = 0 Тогда
        ТекущаяКолонкаРасписания = 3;
    КонецЕсли;
    
    Если ТекущаяСтрокаРасписания = 0 Тогда
        ТекущаяСтрокаРасписания = 3;
    КонецЕсли;
    
    ОбластьРасписания = РасписаниеРаботы.Область(1,ТекущаяКолонкаРасписания,2,ТекущаяКолонкаРасписания);
    ОбластьРасписания.Шрифт = Новый Шрифт(ОбластьРасписания.Шрифт,,,Ложь);
    
    ОбластьРасписания = РасписаниеРаботы.Область(ТекущаяСтрокаРасписания,2,ТекущаяСтрокаРасписания,2);
    ОбластьРасписания.Шрифт    = Новый Шрифт(ОбластьРасписания.Шрифт,,,Ложь);
    
    ОбластьРасписания = РасписаниеРаботы.Область(ТекущаяСтрокаРасписания,ТекущаяКолонкаРасписания,ТекущаяСтрокаРасписания+3,ТекущаяКолонкаРасписания);
    ОбластьРасписания.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
    ОбластьРасписания.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,1);
    
    Если Элемент.ТекущаяОбласть.Право >= 3 И Элемент.ТекущаяОбласть.Низ-3 >= 3 Тогда
        //И Элемент.ТекущаяОбласть.Низ <= РасписаниеРаботы.ВысотаТаблицы //вот это условие начинает глючить
        //И Элемент.ТекущаяОбласть.Право <= РасписаниеРаботы.ШиринаТаблицы Тогда
        
        ОбластьРасписания = РасписаниеРаботы.Область(1,Элемент.ТекущаяОбласть.Право,2,Элемент.ТекущаяОбласть.Право);
        ОбластьРасписания.Шрифт = Новый Шрифт(ОбластьРасписания.Шрифт,,,Истина);
        
        ОбластьРасписания = РасписаниеРаботы.Область(Элемент.ТекущаяОбласть.Низ-3,2,Элемент.ТекущаяОбласть.Низ-3,2);
        ОбластьРасписания.Шрифт = Новый Шрифт(ОбластьРасписания.Шрифт,,,Истина);
        
        ОбластьРасписания = РасписаниеРаботы.Область(Элемент.ТекущаяОбласть.Низ-3,Элемент.ТекущаяОбласть.Право,Элемент.ТекущаяОбласть.Низ,Элемент.ТекущаяОбласть.Право);
        ОбластьРасписания.ГраницаСверху = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,3);
        ОбластьРасписания.ГраницаСнизу = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,3);
        
        ТекущаяСтрокаРасписания = Элемент.ТекущаяОбласть.Низ-3;
        ТекущаяКолонкаРасписания = Элемент.ТекущаяОбласть.Право;
        
    КонецЕсли;
    
    //РасписаниеРаботыПриАктивизацииОбластиНаСервере(СеткаПриема,Элемент.ТекущаяОбласть.Расшифровка);
    
КонецПроцедуры

на УФ поле табличного документа - выделяю текущую область ТД
в таком виде нормально выделяет - даже за пределами ширины и высоты исходного ТД "РасписаниеРаботы"

если же добавить условие на высоту и ширину - то при выделении области за границами ТД - обработчик начинает срабатывать два раза
и первый раз область именн а та  которую выделяю
а второй - на границе документа
между КонцомПроцедуры и началом выполнения второго события - замер не видит никакого выполненного кода
1 RomaH
 
naïve
05.05.16
14:51
http://cloud.screenpresso.com/Q3pJf/2016-05-05_14h49_19.png
вот так картинка выглядит без доп условия
2 RomaH
 
naïve
05.05.16
14:52
а так - с условием
http://cloud.screenpresso.com/2LZLb/2016-05-05_14h47_47.png

    Если Элемент.ТекущаяОбласть.Право >= 3 И Элемент.ТекущаяОбласть.Низ-3 >= 3
        И Элемент.ТекущаяОбласть.Низ <= РасписаниеРаботы.ВысотаТаблицы //вот это условие начинает глючить

        И Элемент.ТекущаяОбласть.Право <= РасписаниеРаботы.ШиринаТаблицы Тогда
3 RomaH
 
naïve
05.05.16
14:54
почему добавление условие - не выполнение того что внутри "Если" вызывает обраотчик второй раз и текущую область меняет?
4 Карупян
 
05.05.16
15:13
Может сначала картинки на нормальный сайт выложишь? чтоб не качать
5 RomaH
 
naïve
06.05.16
07:33
неужели изменение форматирования области ячеек вызывает смену текущей области в поле ТД?
6 Mort
 
06.05.16
08:11
Вероятно, есть какой-то неявный вызов сервера.
7 Mort
 
06.05.16
08:13
А по теме, 1С для этой темы создало вполне годный элемент управления (планировщик), гораздо лучше извращений с табличным доком.
8 ИС-2
 
06.05.16
09:01
(5) да, текущая область меняется сама.

Была подобная проблема. Табличный документ, событие при активации ячейки вызывалось при программном выводе в таб. док и текущая область менялась