Имя: Пароль:
1C
1C 7.7
v7: formex "ДобавитьАтрибут()"
0 Dolly_EV
 
09.07.14
15:31
Всем доброго времени суток!
Добрался наконец сделать открытие форм Справочников и Документов по умолчанию только на просмотр. И, чтобы начать редактировать, заставляю юзера жать кнопку "Изменить..." Кнопку хочу добавить всюду формекс'ом
Вот код в глобальнике:

//======================================================================
Процедура глФормаОткрытьДляРедактирования(Конт) Экспорт
    Конт.Форма.ТолькоПросмотр(0);
    Конт.Форма.кнРедактироватьОбъект.Видимость(0);
    лКоммент="Объект открыт для редактирования";
    Попытка
        лКонт=Конт.ТекущийДокумент();
        лТипСобытия="Документ";
    Исключение
        лКонт=Конт.ТекущийЭлемент();
        лТипСобытия="Справочник";
    КонецПопытки;
    ЗаписьЖурналаРегистрации(лКоммент,лТипСобытия,,лКонт,2);
    
    глФормаРасш.УстановитьФорму(Конт.Форма);
    Для Х = 0 По глФормаРасш.КоличествоАтрибутов() - 1 Цикл
        Атр     = глФормаРасш.ПолучитьАтрибут(Х);
        ТипАтр     = Число(Атр.Тип);
        ИдАтр     = Атр.Идентификатор;
        Если ТипАтр = 3 Тогда
            Если (ИдАтр<>"кнПечать") И (ИдАтр<>"кнДействия") И (ИдАтр<>"кнВыбПечать") Тогда //Кнопки
                Атр.Доступность=1;
            КонецЕсли;    
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры // глФормаОткрытьДляРедактирования

//======================================================================
Процедура глФормаТолькоПросмотр(Конт)
    Конт.ПометкаУдаления(); // Спр или Док
    Конт.Форма.ТолькоПросмотр(1);
    глФормаРасш.УстановитьФорму(Конт.Форма);
    Для Х = 0 По глФормаРасш.КоличествоАтрибутов() - 1 Цикл
        Атр     = глФормаРасш.ПолучитьАтрибут(Х);
        ТипАтр     = Число(Атр.Тип);
        ИдАтр     = Атр.Идентификатор;
        //Сообщить("Тип: "+Строка(ТипАтр)+" //Ид: "+Строка(ИдАтр)+" //Заг: "+Атр.Заголовок);
        Если ТипАтр = 3 Тогда
            Если (ИдАтр<>"кнПечать") И (ИдАтр<>"кнДействия") И (ИдАтр<>"кнВыбПечать") Тогда //Кнопки
                Атр.Доступность=0;
            КонецЕсли;    
        КонецЕсли;
    КонецЦикла;
    
    кнРед=глФормаРасш.ДобавитьАтрибут("кнРедактироватьОбъект",3);
    Лево=0; Верх=0; Ширина=0; Высота=0;
    кнРед.ПолучитьКоординаты(Лево, Верх, Ширина, Высота);
    
    Сообщить("Лево:"+Лево+" Верх:"+Верх+" Ширина:"+Ширина+" Высота:"+Высота);
    кнРед.УстановитьКоординаты(Лево, Верх-17, Ширина, Высота);
    
    кнРед.Заголовок="Изменить...";
    кнРед.Формула="глФормаОткрытьДляРедактирования(Контекст)";
    кнРед.Подсказка="Открыть объект для редактирования";
    
    
КонецПроцедуры // глФормаТолькоПросмотр

//======================================================================
Процедура ПослеОткрытия(Конт)
    Попытка
        Если Конт.Выбран()=1 Тогда
            глФормаТолькоПросмотр(Конт);
        КонецЕсли;
    Исключение
    КонецПопытки;
    
КонецПроцедуры // ПослеОткрытия

Вопросы следующие:
1. Когда начинаю играться с координатами кнопки, установка "Верх" = отрицательным срабатывает только для модальной формы - кнопка "уползает" выше формы на панель окна. Если форма не модальная - "минус" не помогает - кнопка остается в том же месте, где и создалась.
Как победить? Точнее как лучше сделать и куда привязать кнопку, учитывая многообразие различных форм?
2. Как "убить" кнопку после ее нажатия? Понятно что через "Видимость" - как красиво обойти смену слоев? чтобы не тыкать код по всем формам?
1 Duke1C
 
09.07.14
15:37
Может тупо в параметрах выставить режим открытия объектов - Просмотр??
2 Dolly_EV
 
09.07.14
15:39
(1) это где такое?
3 Ёпрст
 
09.07.14
15:40
(2) сервис-параметры
4 Ёпрст
 
09.07.14
15:41
можно и программно задать , либо правкой cfg у юзверя, либо через управлениеНастройками, есть вк от trad
5 Dolly_EV
 
09.07.14
15:44
(1)(2) А, понял. не не катит. Придется до юзеров доносить что есть системная кнопка, + хочется в журнале отлавливать событие, что юзер СОЗНАТЕЛЬНО надавил "изменить..."
6 Dolly_EV
 
09.07.14
15:46
(4) Ёпрст, посоветуй чего-нибудь красивое, ты же мастер фокусов :-)
7 Ёпрст
 
09.07.14
15:46
Добавлять кнопку - моветон.
В разы проще либо кнопку в панельинструментов самой формы, либо в панеь меню главного окна .. и усё.
8 Dolly_EV
 
09.07.14
15:47
(7) "В разы проще либо кнопку в панельинструментов" - вот это  по-подробнее
9 ИЧтоТакое1с
 
09.07.14
15:48
(1) так юзвер может обратно поменять....
10 Duke1C
 
09.07.14
15:50
(9) Ну юзверь нынче тупой и ленивый, если уж автор не знает, то юзер подавно :)
11 Dolly_EV
 
09.07.14
15:52
(10) если юзверь захочет напакостить - обязательно напакостит, причем чем тупее - тем больше напакостит. Про (1) я знал, просто сразу отмел вариант.
12 ИЧтоТакое1с
 
09.07.14
15:59
(6) сейчас "Мастер" приведет простое и изящное решение... как  всегда это у него гениально получается...
13 Dolly_EV
 
09.07.14
16:03
(12) Вот-вот.. ждемс...
14 Ёпрст
 
09.07.14
16:06
А чего ждёте ?
Как кнопку в панель струментов добавить ?
либо через рвджетс, либо через миракл, либо через дюнаврап, либо ручонками отрисовывать, либо свой тулбар через активикс слепить с блекджеком и ..

Проще через миракл
15 ИЧтоТакое1с
 
09.07.14
16:07
Я далеко не такой спец как Ёпрст. В формексе есть возможность отловить менюшку которая вызывается при правом щелчке на документе?
16 Ёпрст
 
09.07.14
16:09
(15) через контекстное меню.. не совсем очевидное редактирование будет
17 Duke1C
 
09.07.14
16:21
(13) Тады уж лучше в панель меню 1 раз добавить, чем заморачиваться с добавлением в каждой форме
18 Dolly_EV
 
09.07.14
16:22
(14) по мираклу пытался описалово собрать в кучу - нифига не вышел каменный цветок.. обрывки всякие. Есть?
19 Dolly_EV
 
09.07.14
16:23
(15) через контекстное - это еще хуже будет чем системную кнопку "Изменить (Открыть)" научить нажимать
20 Dolly_EV
 
09.07.14
16:24
+(18) желательно als )))
21 Ёпрст
 
09.07.14
16:26
(18) валялось где-то, проще у автора спросить (одних только модификаций - вагон)
22 Duke1C
 
09.07.14
16:28
(20) als тока старые, автор компоненты забил на документацию с определенного времени и новые плюшки описывал в комментах к разработке.
Добавь в панель меню и через Формекс разбирай АктивныйКонтекст, и юзер к одной кнопке быстрее привыкнет.
У меня так несколько универсальных вещей реализовано
23 Dolly_EV
 
09.07.14
16:28
(21) автор, насколько помню, не заморачивался ни разу системным описанием :-(
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший