Добавляем подменю со статусами в командную панель

andrey5565 308 5 9 8
#Область  ОбработчикиСобытий
 
 &НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ДобавитьЭлементыНаФорму();
КонецПроцедуры

#КонецОбласти  

#Область  ВспомогательныеПроцедурыИФункции

&НаСервере
Процедура ДобавитьЭлементыНаФорму()
	
	// 1.0. Добавляем на форму группу с видом Подменю: "__ГруппаСтатус";
	Если Элементы.Найти("__ГруппаСтатус") = Неопределено Тогда
		НоваяГруппа = Элементы.Добавить("__ГруппаСтатус", Тип("ГруппаФормы"), ЭтотОбъект.КоманднаяПанель);
		НоваяГруппа.Заголовок = "Установить статус";
		НоваяГруппа.Вид = ВидГруппыФормы.Подменю; 
		
		НоваяГруппа.ЦветРамки = WebЦвета.Черный;
		НоваяГруппа.ЦветФона = Новый Цвет(81, 103, 188);
		НоваяГруппа.ЦветТекстаЗаголовка = WebЦвета.Белый;
		
		НоваяГруппа.ШрифтЗаголовка = Новый Шрифт(, , Истина, , , , );
	КонецЕсли;	
	
	//Элементы.Переместить(Элементы.__ГруппаСтатус, ЭтотОбъект.КоманднаяПанель, ЭтотОбъект.КоманднаяПанель.ПодчиненныеЭлементы.ФормаОбновить);
	// 1.1. Добавляем реквизит формы "__АдресВоВременномХранилище" (соответствие ИмяКоманды --- СсылкаНаЭлементСправочникаСтатусыКлиентов);
	//Для хранения адреса во временном хранилище, где хранится соответствие "ИмяКоманды, СсылкаНаЭлементСправочникаСтатусыКлиентов"
	Если Элементы.Найти("__АдресВременногоХранилища") = Неопределено Тогда
		ТипСтрока = Новый ОписаниеТипов("Строка");
		РеквизитТекст = Новый РеквизитФормы("__АдресВременногоХранилища", ТипСтрока);
		ДобавляемыеРеквизиты = Новый Массив;
		ДобавляемыеРеквизиты.Добавить(РеквизитТекст);
		ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	КонецЕсли;
	
	//1.2. Получаем статусы заказов поставщиков;
	// Справочник ---	СтатусыКлиентов;
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	СтатусыКлиентов.Ссылка КАК Ссылка,
		|	СтатусыКлиентов.Наименование КАК Наименование
		|ИЗ
		|	Справочник.СтатусыКлиентов КАК СтатусыКлиентов";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	СоответствиеИменКомандСсылок = Новый Соответствие;
	
	Пока Выборка.Следующий() Цикл

		НаименованиеСтатусаБезПробелов = СокрЛП(СтрЗаменить(Выборка.Наименование, " ", ""));

		//1.3. Создаем команду;
		Если Команды.Найти("__УстановитьСтатус" + НаименованиеСтатусаБезПробелов) = Неопределено Тогда
			НоваяКоманда = Команды.Добавить("__УстановитьСтатус" + НаименованиеСтатусаБезПробелов);
			НоваяКоманда.Действие = "ИзменитьСтатус";
		КонецЕсли;

		//1.4. Создаем элемент формы;
		Если Элементы.Найти("__ИзменитьСтатус" + НаименованиеСтатусаБезПробелов) = Неопределено Тогда
			НоваяКнопка = Элементы.Добавить("__ИзменитьСтатус" + НаименованиеСтатусаБезПробелов, Тип("КнопкаФормы"), Элементы.__ГруппаСтатус);
			НоваяКнопка.ИмяКоманды = "__УстановитьСтатус" + НаименованиеСтатусаБезПробелов; 
			НоваяКнопка.Заголовок = Выборка.Наименование;
		КонецЕсли;

		СоответствиеИменКомандСсылок.Вставить("__УстановитьСтатус" + НаименованиеСтатусаБезПробелов, Выборка.Ссылка);
		
	КонецЦикла;
	
	//1.5.  Сохраняем во временное хранилище СоответствиеИменКомандСсылок; 
	НовыйУникальныйИдентификатор = Новый УникальныйИдентификатор();
	АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СоответствиеИменКомандСсылок, НовыйУникальныйИдентификатор);
	//1.6. Записываем адрес во временном хранилище в реквизит формы;
	ЭтотОбъект.__АдресВременногоХранилища = АдресВоВременномХранилище;	
	
КонецПроцедуры // ДобавитьЭлементыНаФорму()

&НаКлиенте
Процедура ИзменитьСтатус(Команда)
	
	ВыбранныеКлиенты = Элементы.Список.ВыделенныеСтроки;
	Если ВыбранныеКлиенты <> Неопределено Тогда
		//1.7. Получаем из временного хранилища СоответствиеИменКомандСсылок; 
		СоответствиеИменКомандСсылок = ПолучитьИзВременногоХранилища(ЭтотОбъект.__АдресВременногоХранилища);
		//1.8. Получаем выбранный статус;
		ВыбранныйСтатус = СоответствиеИменКомандСсылок.Получить(Команда.Имя);
		ИзменитьСтатусНаСервере(ВыбранныйСтатус, ВыбранныеКлиенты);
	КонецЕсли;
	//1.9. Оповещаем списки об изменении;
	ОповеститьОбИзменении(Тип("СправочникСсылка.СтатусыКлиентов"));
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьСтатусНаСервере(ВыбранныйСтатус, ВыбранныеКлиентыМассив)
	
	Для каждого ТекущийКлиент Из ВыбранныеКлиентыМассив Цикл
		Если ТекущийКлиент.СтатусКлиента = ВыбранныйСтатус Тогда
			Продолжить;
		КонецЕсли;
		
		ОбъектКлиент = ТекущийКлиент.ПолучитьОбъект();
		ОбъектКлиент.СтатусКлиента = ВыбранныйСтатус;
		ОбъектКлиент.Записать();   
		
	КонецЦикла;
	
КонецПроцедуры

#КонецОбласти
1

Комментарии

СергейТ
#1, 13 декабря 2022 15:36

Хорошо бы скрин ))


См. также

ЗаполнитьПодменюСтатус (БСП)

Добавить кнопку на форму в командную панель

ОпределитьРазделыСВариантамиОтчетов (БСП)

ПриОпределенииПорядкаРазделовКомандногоИнтерфейса (БСП)

УстановитьСтатусИзмененияПометкиУдаления (БСП)

УстановитьСтатусИзмененияПометкиУдаленияДокумента (БСП)

УстановитьСтатусИзмененияПометкиУдаленияОбъекта (БСП)

ЗаполнитьПодменюПоТипуВзаимодействия (БСП)

ОбработатьПодменюОтборПоТипуВзаимодействий (БСП)

Модератору