Поле списка ~ Как заполнить подменю на командной панели, добавив пометку и установив обработчик? В форме документа на основной панели "ДействияФормы" создаем подменю "ПодменюТипДокумента" и в процедуру при открытии добавляем СформироватьТипыДокумента():
Код 1C v 8.х Процедура Пометка(Кнопка)
//Отменим пометки у всех кнопок
Для Каждого ТекКнопа из ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки Цикл
ТекКнопа.Пометка = Ложь;
КонецЦикла;
//Теперь установим пометку текущей кнопки
Кнопка.Пометка=?(Кнопка.Пометка, Ложь, Истина);
//Задаем название подменю именем выбранной кнопки
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Текст = "Тип документа: "+Кнопка.Имя;
//Установим значения обработчика Вида расчета
Если Кнопка.Имя = "Валюта" тогда
ВидРасчета=ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Оклад в валюте");
ИначеЕсли Кнопка.Имя = "Рубли" тогда
ВидРасчета=ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Оклад в рублях");
Иначе
ВидРасчета=ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка();
КонецЕсли;
КонецПроцедуры
Процедура СформироватьТипыДокумента()
МенюКнопки = ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки;
НоваяКнопка = МенюКнопки.Вставить(0, "Обычный", ТипКнопкиКоманднойПанели.Действие, "Обычный", Новый Действие("Пометка"));
НоваяКнопка = МенюКнопки.Вставить(1, "Валюта", ТипКнопкиКоманднойПанели.Действие, "Валюта", Новый Действие("Пометка"));
НоваяКнопка = МенюКнопки.Вставить(2, "Рубли", ТипКнопкиКоманднойПанели.Действие, "Рубли", Новый Действие("Пометка"));
//Определим какой тип документа по Виду расчета и поставим пометку
Если ВидРасчета=ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Оклад в валюте") Тогда
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки[1].Пометка = Истина;
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Текст = "Тип документа: "+ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки[1].Имя;
ИначеЕсли ВидРасчета=ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Оклад в рублях") Тогда
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки[2].Пометка = Истина;
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Текст = "Тип документа: "+ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки[2].Имя;
Иначе
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки[0].Пометка = Истина;
ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Текст = "Тип документа: "+ЭлементыФормы.ДействияФормы.Кнопки.ПодменюТипДокумента.Кнопки[0].Имя;
КонецЕсли;
КонецПроцедуры
В результате на форме появляется подменю Тип Документа, с выбором значений Обычный, Валюта, Рубли! При выборе значения на нем устанавливается помета,а на других убирается и устанавливается значение реквизита ВидРасчета
Обязательно посмотрите еще пример:
Программное добавление кнопок подменю на командную панель формы Категория:
Работа с Формой (Диалог) и её элементами Перебор значений перечисления и добавление их в подменю формы Код 1C v 8.х Для Каждого метпер Из Метаданные.Перечисления.СостоянияРаботникаОрганизации.ЗначенияПеречисления Цикл
МенюКнопки = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ПодменюНеявки.Кнопки;
НоваяКнопка = МенюКнопки.Вставить(инд, метпер.Имя, ТипКнопкиКоманднойПанели.Действие, метпер, Новый Действие("Пометка"));
//Работает и Командировка - считается рабочими видами
Если НЕ (метпер.Имя="Работает" или метпер.Имя="Командировка") тогда
НоваяКнопка.Пометка = Истина; //поставим помету
КонецЕсли;
инд=инд+1;
КонецЦикла;
Категория:
Перечисления Кнопка ~ Программное добавление кнопок на командную панель формы Код 1C v 8.х //Переберая перечисления, добавим кнопки с именем значение перечисления, и возможностью установки пометки
для каждого метпер из Метаданные.Перечисления.СостоянияРаботникаОрганизации.ЗначенияПеречисления Цикл
МенюКнопки = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ПодменюНеявки.Кнопки;
НоваяКнопка = МенюКнопки.Вставить(инд, метпер.Имя, ТипКнопкиКоманднойПанели.Действие, метпер, Новый Действие("Пометка"));
//Работает и Командировка - считается рабочими видами
Если НЕ (метпер.Имя="Работает" или метпер.Имя="Командировка") тогда
НоваяКнопка.Пометка = Истина; //поставим помету
КонецЕсли;
инд=инд+1;
КонецЦикла;
// а Действие("Пометка") это:
Процедура Пометка(Кнопка)
Кнопка.Пометка=?(Кнопка.Пометка, Ложь, Истина);
// Можно и так:
// Кнопка.Пометка = Не Кнопка.Пометка;
КонецПроцедуры
Следующий пример показывает как выгрузить из табличной части Подразделения, удалить повторяющиеся и в "КоманднаяПанельЗарплата" - меню "ФормированиеВедомостей" - подменю "СформироватьПоПодразделению" добавить для каждого подразделения кнопку формирования ведомости
Код 1C v 8.х // заполним меню подразделений для ведомостей
ТзПодразделений=Зарплата.ВыгрузитьКолонку("ПодразделениеРаботника");
//Удалим в массиве задвоения
ТекущийИндекс = 0;
ВсегоЭлементов = ТзПодразделений.Количество();
Пока ТекущийИндекс < ВсегоЭлементов Цикл
Индекс2 = ТекущийИндекс + 1;
Пока Индекс2 < ВсегоЭлементов Цикл
Если ТзПодразделений[Индекс2] = ТзПодразделений[ТекущийИндекс] Тогда
ТзПодразделений.Удалить(Индекс2);
ВсегоЭлементов = ВсегоЭлементов - 1;
Иначе
Индекс2 = Индекс2 + 1;
КонецЕсли;
КонецЦикла;
ТекущийИндекс = ТекущийИндекс + 1;
КонецЦикла;
инд=0;
для каждого ТекПодразд из ТзПодразделений Цикл
МенюКнопки = ЭлементыФормы.КоманднаяПанельЗарплата.Кнопки.ФормированиеВедомостей.Кнопки.СформироватьПоПодразделению.Кнопки;
НоваяКнопка = МенюКнопки.Вставить(инд, ТекПодразд, ТипКнопкиКоманднойПанели.Действие, ТекПодразд, Новый Действие("СформироватьВедомостиПоПодразделению"));
инд=инд+1;
КонецЦикла;
Категория:
Работа с Формой (Диалог) и её элементами