Имя: Пароль:
1C
1С v8
Управляемая форма: управление составом командной панели
0 mashunka
 
27.08.12
14:43
Дано:
Управляемая форма с командной панелью, у которой установлено свойство "Автозаполнение". Это ключевой момент, т.к. флажок снимать никак нельзя: документ связан с массой параметризованных команд, которые прекрасно автоматически добавляются в форму.

Задача №1: т.к. всего в панели очень много, то форма некрасиво растягивается вширь из-за переполненной командной панели. Я создаю процедуру, которая половину всех кнопок переводит в меню "все действия" (ТолькоВоВсехДействиях = Истина), половине меняю отображение на "Картинка". Все работает прекрасно и замечательно.

Задача №2: в предопределенное подменю "Печать" добавить печатные формы из справочника "Внешние печатные формы". Задача сама по себе решена и в другой форме, где флажок "Автоматическое заполнение" для командной панели СНЯТ, все работает!

Проблема: после программного добавления кнопок с командами печати командная панель берет и перезаполняется автоматически, сбрасывая все настройки, в том числе и добавленные команды.

Код:

Процедура ПриСозданииНаСервере()
// ....
ДобавитьВнешниеПечатныеФормы(Команды,Элементы,Элементы.ФормаКоманднаяПанель.ПодчиненныеЭлементы.ФормаПечать); // 1)
// Эта процедура добавляет кнопки в меню - представлена ниже
УправлениеВидимостьюКнопокКоманднойПанели(); // 2)
// Эта процедура меняет состав командной панели, там ничего интересного.
// ...
КонецПроцедуры // 3)

Процедура ДобавитьВнешниеПечатныеФормы(КомандыФормы,ЭлементыФормы,ГруппаФормы)
// ... Здесь запрос, получающий список печатных форм
Пока ВыборкаДопПечатныхФорм.Следующий() Цикл
       ИмяКоманды = "Печать_"+ВыборкаДопПечатныхФорм.Код;
       НоваяКоманда            = КомандыФормы.Добавить(ИмяКоманды);
       НоваяКоманда.Действие    = "ПечатьВнешнейПечатнойФормы";
       НоваяКнопка = ЭлементыФормы.Добавить(ИмяКоманды,Тип("КнопкаФормы"),ГруппаФормы);
       НоваяКнопка.Картинка    = БиблиотекаКартинок.Печать;
       НоваяКнопка.Заголовок    = ВыборкаДопПечатныхФорм.Наименование;
       НоваяКнопка.ИмяКоманды    = ИмяКоманды;
   КонецЦикла;
КонецПроцедуры

Если в первой процедуре закомментировать строку 1), то все работает правильно - панель меняется как задано в процедуре 2).
Если раскомментировать - не работает. Причем при отладке до строки 3), т.е. до конца процедуры ПриСозданииНаСервере() все изменения сохраняются, в том числе и добавленные кнопки. Но форма открывается с автозаполненной панелью.

Предположение: программное добавление кнопок видимо устанавливает какой-то признак у панели, типа "модифицированность", что заставляет ее перезаполняться... Может быть, кто-то с таким сталкивался и посоветуете, как с этим бороться...
1 vmv
 
27.08.12
14:51
Задача №1: зачем создавать процедуру где идет завяка на имена элементов формы - это костыль?

можно объявить группу Командная панель и в ней вложенные меню подменю в которых и переводить кнопки во "Все действия"

все проблемы из-за костяля чувак. УФ создавали не для того, чтобы кодом менять палитры свойств и составов любых визуальных сущностей, в том числле и Кп.

Научись работать с группами формы - это все, копаться в г-коде нет смысла
2 mashunka
 
27.08.12
15:00
1) То, что я создавала сама, я и прописала во "все действия". Так что в той процедуре я борюсь с предопределенными группами, например - "Создать на основании", которая длинно отображается словами, а мне надо значком. Команды ввода на основании же сами добавляются, я не нашла, как еще ее отображение поменять...
3 mashunka
 
27.08.12
15:01
1) Тем более, у группы нет признака "ТолькоВоВсехДействиях", он только у самих кнопок...
4 mrBlutig
 
05.09.12
18:14
Удалось разобраться? Столкнулся с той же проблемой.