1С 8.3 Добавляем подменю со статусами в командную панель
Данные > Примеры кода 1С > 1С 8.3 Форма, элементы
Перейти в раздел примеры кода 1С 8.3:
Вставка подменю со статусами в командную панель в 1С 8.3:
#Область ОбработчикиСобытий
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДобавитьЭлементыНаФорму();
КонецПроцедуры
#КонецОбласти
#Область ВспомогательныеПроцедурыИФункции
&НаСервере
Процедура ДобавитьЭлементыНаФорму()
// 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.0. Добавляем на форму группу с видом Подменю: "__ГруппаСтатус";
Если Элементы.Найти("__ГруппаСтатус") = Неопределено Тогда
НоваяГруппа = Элементы.Добавить("__ГруппаСтатус", Тип("ГруппаФормы"), ЭтотОбъект.КоманднаяПанель);
НоваяГруппа.Заголовок = "Установить статус";
НоваяГруппа.Вид = ВидГруппыФормы.Подменю;
НоваяГруппа.ЦветРамки = WebЦвета.Черный;
НоваяГруппа.ЦветФона = Новый Цвет(81, 103, 188);
НоваяГруппа.ЦветТекстаЗаголовка = WebЦвета.Белый;
НоваяГруппа.ШрифтЗаголовка = Новый Шрифт(, , Истина, , , , );
КонецЕсли;
//Элементы.Переместить(Элементы.__ГруппаСтатус, ЭтотОбъект.КоманднаяПанель, ЭтотОбъект.КоманднаяПанель.ПодчиненныеЭлементы.ФормаОбновить);
// 1.1. Добавляем реквизит формы "__АдресВоВременномХранилище" (соответствие ИмяКоманды --- СсылкаНаЭлементСправочникаСтатусыКлиентов);
//Для хранения адреса во временном хранилище, где хранится соответствие "ИмяКоманды, СсылкаНаЭлементСправочникаСтатусыКлиентов"
Если Элементы.Найти("__АдресВременногоХранилища") = Неопределено Тогда
ТипСтрока = Новый ОписаниеТипов("Строка");
РеквизитТекст = Новый РеквизитФормы("__АдресВременногоХранилища", ТипСтрока);
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(РеквизитТекст);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
КонецЕсли;
//1.2. Получаем статусы заказов поставщиков;
// Справочник --- СтатусыКлиентов;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СтатусыКлиентов.Ссылка КАК Ссылка,
| СтатусыКлиентов.Наименование КАК Наименование
|ИЗ
| Справочник.СтатусыКлиентов КАК СтатусыКлиентов";
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
СоответствиеИменКомандСсылок = Новый Соответствие;
Пока Выборка.Следующий() Цикл
НаименованиеСтатусаБезПробелов = СокрЛП(СтрЗаменить(Выборка.Наименование, " ", ""));
//1.3. Создаем команду;
Если Команды.Найти("__УстановитьСтатус" + НаименованиеСтатусаБезПробелов) = Неопределено Тогда
НоваяКоманда = Команды.Добавить("__УстановитьСтатус" + НаименованиеСтатусаБезПробелов);
НоваяКоманда.Действие = "ИзменитьСтатус";
КонецЕсли;
//1.4. Создаем элемент формы;
Если Элементы.Найти("__ИзменитьСтатус" + НаименованиеСтатусаБезПробелов) = Неопределено Тогда
НоваяКнопка = Элементы.Добавить("__ИзменитьСтатус" + НаименованиеСтатусаБезПробелов, Тип("КнопкаФормы"), Элементы.__ГруппаСтатус);
НоваяКнопка.ИмяКоманды = "__УстановитьСтатус" + НаименованиеСтатусаБезПробелов;
НоваяКнопка.Заголовок = Выборка.Наименование;
КонецЕсли;
СоответствиеИменКомандСсылок.Вставить("__УстановитьСтатус" + НаименованиеСтатусаБезПробелов, Выборка.Ссылка);
КонецЦикла;
//1.5. Сохраняем во временное хранилище СоответствиеИменКомандСсылок;
НовыйУникальныйИдентификатор = Новый УникальныйИдентификатор();
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(СоответствиеИменКомандСсылок, НовыйУникальныйИдентификатор);
//1.6. Записываем адрес во временном хранилище в реквизит формы;
ЭтотОбъект.__АдресВременногоХранилища = АдресВоВременномХранилище;
КонецПроцедуры // ДобавитьЭлементыНаФорму()
&НаКлиенте
Процедура ИзменитьСтатус(Команда)
ВыбранныеКлиенты = Элементы.Список.ВыделенныеСтроки;
Если ВыбранныеКлиенты <> Неопределено Тогда
//1.7. Получаем из временного хранилища СоответствиеИменКомандСсылок;
СоответствиеИменКомандСсылок = ПолучитьИзВременногоХранилища(ЭтотОбъект.__АдресВременногоХранилища);
//1.8. Получаем выбранный статус;
ВыбранныйСтатус = СоответствиеИменКомандСсылок.Получить(Команда.Имя);
ИзменитьСтатусНаСервере(ВыбранныйСтатус, ВыбранныеКлиенты);
КонецЕсли;
//1.9. Оповещаем списки об изменении;
ОповеститьОбИзменении(Тип("СправочникСсылка.СтатусыКлиентов"));
КонецПроцедуры
&НаСервере
Процедура ИзменитьСтатусНаСервере(ВыбранныйСтатус, ВыбранныеКлиентыМассив)
Для Каждого ТекущийКлиент Из ВыбранныеКлиентыМассив Цикл
Если ТекущийКлиент.СтатусКлиента = ВыбранныйСтатус Тогда
Продолжить;
КонецЕсли;
ОбъектКлиент = ТекущийКлиент.ПолучитьОбъект();
ОбъектКлиент.СтатусКлиента = ВыбранныйСтатус;
ОбъектКлиент.Записать();
КонецЦикла;
КонецПроцедуры
#КонецОбласти
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник