Программное создание кнопок со стандартным действием над таблицей формы. УФ.

1. e-9 60 24.12.20 16:45 Сейчас в теме
УФ.
Программно создаю дерево на форме.
Без каких-либо моих "лишних действий", у него отрисовывается командная панель (КП) со стандартной кнопкой "Добавить", а также двумя стрелками перемещения строк вверх-вниз. Все ок.

На эту же КП программно помещаю свою кнопку, связанную с моей "нестандартной" командой.

Далее произошла обычная история "Все было хорошо, пока Пользователю не понадобилось..."
А ему захотелось, чтобы эта "нестандартная" кнопка помещалась ПЕРЕД стандартными кнопками.

И вот тут-то начался трэш.........

На ИТС описано, как надо поступить в конфигураторе при ручном "рисовании":
1) Для таблицы формы, установить положение ее стандартной КП в "Нет".
2) Добавить новую группу формы с видом "Командная панель".
3) В нее добавить две группы формы с видом "Группа кнопок".
4) В первую из них добавить кнопку с "нестандартной" командой.
5) Во второй, в свойстве "Источник команд", указать нашу таблицу формы.

Программно, получилось все, кроме п.5.
НЕТУ у группы формы свойства ИсточникКоманд. Или ИсточникДействий.
А свойство Родитель (в котором можно было бы прописать нашу таблицу формы) - только чтение!

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


Т.е., чтобы в момент создания второй КП, ее Родитель был моим деревом. Но при этом у созданной КП вид сразу становится "Группа колонок", и уже не меняется!

Кто с этим боролся и побеждал - хелп плиз!
Прикрепленные файлы:
Найденные решения
3. dhurricane 25.12.20 09:28 Сейчас в теме
(1) Предлагаю Вам пойти по самому простому пути: не трогать командную панель и ее состав, а сразу вставить кнопку в нужное место. Т.к. Вы добавляете свою кнопку программно и скорее всего в обработчике создания формы, то все стандартные команды уже сгенерированы и размещены платформой на своих местах. Вам остается только вставить кнопку вперед всех:
КнопкаФормы = Элементы.Вставить(
	НоваяКоманда.Имя, 
	Тип("КнопкаФормы"),
	ЭлементДерево.КоманднаяПанель,
	ЭлементДерево.КоманднаяПанель.ПодчиненныеЭлементы[0]);
8. e-9 60 25.12.20 22:14 Сейчас в теме
(3)
КнопкаФормы = Элементы.Вставить(
НоваяКоманда.Имя,
Тип("КнопкаФормы"),
ЭлементДерево.КоманднаяПанель,
ЭлементДерево.КоманднаяПанель.ПодчиненныеЭлементы[0]);


Да, точно; причем, я начинал именно с этого, самого очевидного варианта - но я сразу напоролся на то, что в процедуре ПриСозданииНаСервере, ЭлементДерево.КоманднаяПанель.ПодчиненныеЭлементы.Количество() = 0 - и я сдался.

А сейчас я сделал это в ПриОткрытии: сделал вызов серверной процедуры, в которой и добавил кнопку - так, как Вы и предложили. Ну и еще надо не забыть присвоить ИмяКоманды:
КнопкаФормы.ИмяКоманды = "МояКоманда";

Благодарю!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dhurricane 25.12.20 09:28 Сейчас в теме
(1) Предлагаю Вам пойти по самому простому пути: не трогать командную панель и ее состав, а сразу вставить кнопку в нужное место. Т.к. Вы добавляете свою кнопку программно и скорее всего в обработчике создания формы, то все стандартные команды уже сгенерированы и размещены платформой на своих местах. Вам остается только вставить кнопку вперед всех:
КнопкаФормы = Элементы.Вставить(
	НоваяКоманда.Имя, 
	Тип("КнопкаФормы"),
	ЭлементДерево.КоманднаяПанель,
	ЭлементДерево.КоманднаяПанель.ПодчиненныеЭлементы[0]);
4. FatPanzer 25.12.20 09:36 Сейчас в теме
(3) Еще вариант - у любого табличного поля уже есть собственная командная панель. Надо просто отключить на ней автозаполнение, и рисовать свой состав кнопок, если уж так надо.
5. dhurricane 25.12.20 10:04 Сейчас в теме
(4) Об этом автор проговорил, но из контекста задачи я понял, что обязательным условием является именно программное редактирование состава командной панели.
6. FatPanzer 25.12.20 10:09 Сейчас в теме
(5) Нет, он говорил, что он программно добавляет свою командную панель, и у него не получается назначить ей ИсточникДействий.
Я же предлагал использовать существующую, отключив в ней Автозаполнение. Хотя и это не поможет - Автозаполнение и ИсточникДействий недоступны для программной обработки...
7. e-9 60 25.12.20 21:24 Сейчас в теме
(6)
Автозаполнение и ИсточникДействий недоступны для программной обработки

Увы.
8. e-9 60 25.12.20 22:14 Сейчас в теме
(3)
КнопкаФормы = Элементы.Вставить(
НоваяКоманда.Имя,
Тип("КнопкаФормы"),
ЭлементДерево.КоманднаяПанель,
ЭлементДерево.КоманднаяПанель.ПодчиненныеЭлементы[0]);


Да, точно; причем, я начинал именно с этого, самого очевидного варианта - но я сразу напоролся на то, что в процедуре ПриСозданииНаСервере, ЭлементДерево.КоманднаяПанель.ПодчиненныеЭлементы.Количество() = 0 - и я сдался.

А сейчас я сделал это в ПриОткрытии: сделал вызов серверной процедуры, в которой и добавил кнопку - так, как Вы и предложили. Ну и еще надо не забыть присвоить ИмяКоманды:
КнопкаФормы.ИмяКоманды = "МояКоманда";

Благодарю!
2. FatPanzer 24.12.20 16:49 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот