Имя: Пароль:
1C
1С v8
Стандартные действия кнопки командной панели
0 vicof
 
18.01.13
06:41
Был переделан типовой справочник, добавлена иерархия.
Сейчас выношу изменения из формы в код.
Возник вопрос. Каким образом программно назначить кнопке командной панели стандартное действие, например "Создать группу"?

Кнопка.Действие = НовыйДействие("чего тут написать?");
1 vicof
 
18.01.13
06:41
*Новый Действие
2 k1us181b
 
18.01.13
07:36
Действие (Action)
Использование:

Чтение и запись.
Описание:

Тип: Строка.
Содержит имя процедуры обработчика команды.

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
Примечание:

Изменение доступно только на сервере.
3 k1us181b
 
18.01.13
07:39
Процедура из БСП

Процедура ОбновитьДанныеКнопкиНастройки()
   
   Если РежимОбмена = "Выгрузка"
       И ОбработкиНастройкиВыгрузки.Количество() > 0 Тогда
       
       ДобавитьКнопкуНастроекПриНеобходимости();
       
       Если ОбработкиНастройкиВыгрузки.Количество() = 1 Тогда
           //    Кнопка типа Действие
           мКнопкаНастройки.ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
           мКнопкаНастройки.Имя       = ОбработкиНастройкиВыгрузки.Получить(0).Значение;
           мКнопкаНастройки.Текст     = ОбработкиНастройкиВыгрузки.Получить(0).Представление;
       Иначе
           //    Кнопка типа Подменю
           мКнопкаНастройки.ТипКнопки = ТипКнопкиКоманднойПанели.Подменю;
           мКнопкаНастройки.Имя       = "Настройки";
           мКнопкаНастройки.Текст     = "Настройки";
           мКнопкаНастройки.Кнопки.Очистить();
           Для Каждого Эл Из ОбработкиНастройкиВыгрузки Цикл
               мКнопкаНастройки.Кнопки.Добавить(Эл.Значение, ТипКнопкиКоманднойПанели.Действие, Эл.Представление, Новый Действие("ДействияФормыНастройки"));
           КонецЦикла;
       КонецЕсли;
       
   Иначе
       
       УдалитьКнопкуНастроек();
       
   КонецЕсли;    
   
КонецПроцедуры
4 vicof
 
18.01.13
07:40
(3) Для своих процедур все понятно. А для стандартных?
5 vicof
 
18.01.13
08:13
Автозаполнение отключено.
6 1Сергей
 
18.01.13
08:16
Почему именно в коде это надо сделать?
7 vicof
 
18.01.13
08:21
Чтобы обновляться проще было.
8 vicof
 
18.01.13
09:43
Сделал так.

ЭлементыФормы.ДействияФормы.Кнопки.Очистить();    ЭлементыФормы.ДействияФормы.АвтоЗаполнение = Истина;

Но мне не нравится. Хоцца красивше.
9 vicof
 
18.01.13
11:01
+
10 Reset
 
18.01.13
11:33
В качестве развлечения и апа темы могу прдложить, напротив, более страшный вариант:

ЭлементыФормы.КоманднаяПанель.Кнопки.Добавить("ДобавитьГруппу",ТипКнопкиКоманднойПанели.Действие,"ДобавитьГруппу",
   ЗначениеИзСтрокиВнутр("
           |{""#"",6eb4b32a-c85d-4073-a1b5-7d82cb459b38,
           |{1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1,
           |{6,4294967295,55c7732c-0c33-4394-adca-9d15082552b6,6,
           |{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1}
           |}
           |}"));

Но никакой гарантии на то, что внутреннее представление действия не изменится с версией платформы, нет :(

Как не менее кривой вариант можно предложить (8), затем считывание значений действий в переменные, затем самостоятельное создание кнопок.
Или при инициализации считывать действие с какой-л другой формы, где нужная кнопка есть.

В общем, "красивше" сделать не удается ;)
11 Reset
 
18.01.13
11:36
Шестение СП на предмет системного перечисления ничего не дало
12 Reset
 
18.01.13
11:36
шерстение*
13 vicof
 
18.01.13
13:37
(12) во-во, походу нельзя так. Негибко как-то получается.
14 Reset
 
18.01.13
13:50
Можно облагородить внешний вид как-то так
Гдето в общедоступном месте:

ДействияСправочникСписок=Новый Структура;
ДействияСправочникСписок.Вставить("Добавить",ЗначениеИзСтрокиВнутр("{""#"",6eb4b32a-c85d-4073-a1b5-7d82cb459b38,
                                               |{1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1,
                                               |{6,4294967295,00000000-0000-0000-0000-000000000000,80,
                                               |{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,0},0,1}}}"));
ДействияСправочникСписок.Вставить("ДобавитьГруппу",ЗначениеИзСтрокиВнутр("{""#"",6eb4b32a-c85d-4073-a1b5-7d82cb459b38,
                                               |{1,1,fbe38877-b914-4fd5-8540-07dde06ba2e1,
                                               |{6,4294967295,55c7732c-0c33-4394-adca-9d15082552b6,6,
                                               |{1,99,b78f2e80-ec68-11d4-9dcf-0050bae2bc79,4,1},0,1}}}"));

Потом в нужных местах использовать

ЭлементыФормы.КоманднаяПанель2.Кнопки.Добавить("ДобавитьГруппу",
   ТипКнопкиКоманднойПанели.Действие,
   "ДобавитьГруппу",
   ДействияСправочникСписок.ДобавитьГруппу);

Я проверил на 8.1.15 и 8.2.16, работает, но возможность останется недокументированной.