Имя: Пароль:
1C
 
Расширение. Кнопки не отображаются на форме в польз режиме.
0 realevgenius
 
23.01.24
11:34
Всем - здравствуйте, уважаемые!

Расширения не люблю из-за их глючности...

Но в очередной раз пробую делать расширениями.

Что сделал: Копию базы, добавил на форму кнопки, обработчики, все работает. Выгрузил расширение конфигурации из копии, загрузил в в актуальную базу.

Кнопок нету на форме. Добавил в расширение "ПриОткрытии", поставил туда точку останова. - при открытии формы - останавливается, т.е. расширение работает, все нормально.
Безопасный режим и остальное, это все гуглил, смотрел...

Вдруг кто знает, где искать, смотреть.

https://ibb.co/h9MrrtL
https://ibb.co/5nJTzqs
https://ibb.co/tqcS8Zz
1 yurikmellon2
 
23.01.24
11:39
2 spiller26
 
23.01.24
11:49
(0) Права проверь
3 DrZombi
 
23.01.24
12:00
(0) Лепите элементы "при создании формы" программно.
4 realevgenius
 
23.01.24
12:07
(1) Да, спасибо! Помогло...

(2) Спасибо! но  - не то... Все проверял.

(3) Спасибо! Да, наверное, так лучше... Ну хотел Расширениями как-то ускорить
5 DrZombi
 
23.01.24
12:42
(4) Да там все просто.

Процедура СОГ_ПриСозданииНаСервереПосле
&НаСервере
&После("ПриСозданииНаСервере") //Указать, если есть в основной форме, если нет, то все через диалог формы в расширения (увы)
Процедура СОГ_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
      СОГ_ИнтерфейсВызовСервера.ДобавитьНаФормуЭлементаЭлементы_ОсновныеСредства(ЭтотОбъект);
КонецПроцедуры


//СОГ_ИнтерфейсВызовСервера

Процедура ДобавитьНаФормуЭлементаЭлементы_ОсновныеСредства(ЭтотОбъект_) Экспорт
    
    Элементы = ЭтотОбъект_.Элементы;
    Форма     = ЭтотОбъект_.ЭтаФорма;
    Объект     = Форма.Объект;
    Команды     = Форма.Команды;

    ИмяКоманды_О = "СОГ_СоздатьПеремещениеОС";
    ИмяКоманды_О_Элемента = ИмяКоманды_О;
    Если Команды.Найти(ИмяКоманды_О_Элемента) = Неопределено Тогда
        Картинка = Неопределено; //ПолучитьИзБиблиотекиКартинку("ЗаписатьИзменения");
        
        Команда = Команды.Добавить(ИмяКоманды_О_Элемента); //Имя команды
        Команда.Заголовок = "Изменить";
        Команда.Действие  = "Расш1_СоздатьПеремещениеОСВместо"; //Имя связанной процедуры
        Команда.Подсказка = "Создать перемещение ОС (МОЁ)";
        Команда.Отображение = ?(Картинка = Неопределено,ОтображениеКнопки.Текст,ОтображениеКнопки.КартинкаИТекст);
        Если Картинка <> Неопределено Тогда
            Команда.Картинка = Картинка;
        КонецЕсли;
        Команда.ИзменяетСохраняемыеДанные = Истина;
    КонецЕсли;
    
         
    ГруппаФормы = Элементы.Найти("ГруппаМестонахождение");
    Если ГруппаФормы = Неопределено Тогда
        ГруппаФормы = Форма;  //Если поплывет интерфейс, то его надо будет поправить...
    КонецЕсли;
    
    ЭлементФормы_Кнопка1 = Элементы.Найти(ИмяКоманды_О);
    Если ЭлементФормы_Кнопка1 = Неопределено Тогда
        ЭлементФормы_Кнопка1 = Элементы.Добавить(ИмяКоманды_О, Тип("КнопкаФормы"), ГруппаФормы);
        ЭлементФормы_Кнопка1.Вид         = ВидКнопкиФормы.Гиперссылка;
        ЭлементФормы_Кнопка1.ИмяКоманды     = ИмяКоманды_О_Элемента;
        ЭлементФормы_Кнопка1.ТолькоВоВсехДействиях = Ложь;
    КонецЕсли;
    
      
    ИмяЭлемента = "СОГ_Декорация2";
    ЭлементФормы = ДобавитьДекорациюНаФорму(ИмяЭлемента, ГруппаФормы, Неопределено, Элементы);
    ЭлементФормы.Заголовок = "Комментарий:";
    
КонецПроцедуры

// Служебные процедуры СОГ_ИнтерфейсВызовСервера

//Получить картинку оп наименованию...
Функция ПолучитьИзБиблиотекиКартинку(ИмяКартинки)
    
    Попытка
        Возврат БиблиотекаКартинок[ИмяКартинки];
    Исключение
        Возврат Неопределено;
    КонецПопытки;
    
КонецФункции



#Область Дополнительные_Функции

Функция ПолучитьСвойствоДопРеквизита(ИмяСвойства) Экспорт
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Имя", ИмяСвойства);
    Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
    |    ДополнительныеРеквизитыИСведения.Ссылка КАК Ссылка,
    |    ДополнительныеРеквизитыИСведения.Имя КАК Имя,
    |    ДополнительныеРеквизитыИСведения.ПометкаУдаления КАК ПометкаУдаления,
    |    ДополнительныеРеквизитыИСведения.Наименование КАК Наименование
    |ИЗ
    |    ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
    |ГДЕ
    |    ДополнительныеРеквизитыИСведения.Имя = &Имя
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПометкаУдаления";
    
    РезЗапроса = Запрос.Выполнить();
    Если РезЗапроса.Пустой() Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Выбор = РезЗапроса.Выбрать();
    Выбор.Следующий();
    
    стрСвойства = Новый Структура("Ссылка,Имя,ПометкаУдаления,Наименование");
    ЗаполнитьЗначенияСвойств(стрСвойства, Выбор);
    
    Возврат стрСвойства;
КонецФункции

Функция НайтиРеквизитПоНаименованию(МассРекв, ИмяРеквизита)
    Перем РезФункци,СчИндекса,КолВо,Реквизит;
    
    РезФункци = Неопределено;
    
    СчИндекса = 0;
    КолВо = МассРекв.Количество();
    Пока КолВо > 0 Цикл
        Реквизит = МассРекв[КолВо-1];
        
        СчИндекса = СчИндекса + 1;
        Если Реквизит.Имя = ИмяРеквизита Тогда
            РезФункци = СчИндекса - 1;
            Прервать;
        КонецЕсли;
        
        КолВо = КолВо - 1;
    КонецЦикла;
    
    Возврат РезФункци;
КонецФункции

Функция ДобавитьЭлементНаФорму(ИмяЭлемента, ПутьКДанным, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;
        Если ПутьКДанным <> Неопределено И ЗначениеЗаполнено(ПутьКДанным) Тогда
            Попытка
                ЭлементФормы.ПутьКДанным = ПутьКДанным;
            Исключение
            КонецПопытки;
        КонецЕсли;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

//ГруппаФормы
Функция ДобавитьГруппуНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

//ТаблицаФормы
Функция ДобавитьТаблицуНаФорму(ИмяЭлемента, ПутьКДанным, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ТаблицаФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ТаблицаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.ПутьКДанным = ПутьКДанным;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

//ДобавитьГруппуКнопокНаФорму
Функция ДобавитьГруппуКнопокНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидГруппыФормы.ГруппаКнопок;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

Функция ДобавитьГруппуКолонокНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидГруппыФормы.ГруппаКолонок;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

Функция ДобавитьСтраницуНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидГруппыФормы.Страница;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

Функция ДобавитьСтраницыНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ГруппаФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидГруппыФормы.Страницы;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

Функция ДобавитьДекорациюНаФорму(ИмяЭлемента, ЭлементТаблицы_Список, ЭлементТаблицы_После, Элементы)
    
    ЭлементФормы = Элементы.Найти(ИмяЭлемента);
    Если ЭлементФормы = Неопределено и ЭлементТаблицы_Список <> Неопределено Тогда
        Если ЭлементТаблицы_После = Неопределено Тогда
            ЭлементФормы = Элементы.Добавить(ИмяЭлемента, Тип("ДекорацияФормы"), ЭлементТаблицы_Список);
        Иначе
            ЭлементФормы = Элементы.Вставить(ИмяЭлемента, Тип("ДекорацияФормы"), ЭлементТаблицы_Список, ЭлементТаблицы_После);
        КонецЕсли;
        ЭлементФормы.Вид = ВидДекорацииФормы.Надпись;
    КонецЕсли;
    
    Возврат ЭлементФормы;
КонецФункции

#КонецОбласти
6 DrZombi
 
23.01.24
12:34
+ (5) Искать элементы простым...

    ЭлементФормы_Осн = Форма; //Элементы.Найти("Страницы");
    
    ЭлементФормы_Перед = Элементы.Найти("Страницы");
    Если ЭлементФормы_Перед <> Неопределено Тогда
        ЭлементФормы_Осн = ЭлементФормы_Перед.Родитель;
    КонецЕсли;
7 realevgenius
 
23.01.24
12:58
(6) Да, спасибо! Так и делаю, когда без расширений... В общем модуле
Независимо от того, куда вы едете — это в гору и против ветра!