1С 8.3 Добавляем подменю со статусами в командную панель - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

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

Данные > Примеры кода 1С > 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. Оповещаем списки об изменении;
   ОповеститьОбИзменении(Тип("СправочникСсылка.СтатусыКлиентов"));

КонецПроцедуры

&НаСервере
Процедура ИзменитьСтатусНаСервере(ВыбранныйСтатус, ВыбранныеКлиентыМассив)

   Для Каждого ТекущийКлиент Из ВыбранныеКлиентыМассив Цикл
       Если ТекущийКлиент.СтатусКлиента = ВыбранныйСтатус Тогда
           Продолжить;
       КонецЕсли;

       ОбъектКлиент = ТекущийКлиент.ПолучитьОбъект();
       ОбъектКлиент.СтатусКлиента = ВыбранныйСтатус;
       ОбъектКлиент.Записать();
   КонецЦикла;

КонецПроцедуры

#КонецОбласти
0
Комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 04.12.2022
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Назад к содержимому