ОписаниеКомандыПланировщика.По умолчанию

Конструкторы

Создает объект на основании команды и представления.

Синтаксис

Новый ОписаниеКомандыПланировщика(<Команда>, <Представление>)
Полное описание, параметры и ограничения

ОписаниеКомандыПланировщика.По умолчанию

ОписаниеКомандыПланировщика (PlannerCommandDescription)

По умолчанию

Доступен, начиная с версии 8.3.16.

Синтаксис:
Новый ОписаниеКомандыПланировщика(<Команда>, <Представление>)
Параметры:

<Команда> (обязательный)
Тип: Произвольный.
Устанавливает команду.
См. описание свойства Команда.

<Представление> (необязательный)
Тип: Строка.
Текст команды.
Описание:

Создает объект на основании команды и представления.

Использование в версии:

Доступен, начиная с версии 8.3.16.

Описание изменено в версии 8.3.24.

Методическая информация

Практические примеры

Перенести описание команды в меню управляемого поля

Создаём оба документированных типа и явно переносим пять полей; неподходящий тип напрямую в Команды не добавляется.

Где и как запускать

Полный модуль собственной управляемой формы с двумя вымышленными событиями и настоящим обработчиком меню.

Подготовка

  1. Создайте новую внешнюю обработку УчебныйПланировщик с пустой управляемой основной формой в учебной базе 8.5.1.1343. Каждый урок — отдельная копия модуля.

  2. Не создавайте вручную реквизит УчебныйПлан и поле ПолеПлана: они создаются программно.

  3. В свойствах формы → События назначьте ПриСозданииНаСервере одноимённой процедуре. Весь приведённый код вставьте на уровне модуля.

  4. Сохраните собственную EPF и откройте через Файл → Открыть в тонком клиенте Windows. События относятся к фиксированной дате 15.09.2026, не к сегодняшнему дню.

  5. Данные существуют только в памяти формы. Записи календарей, документов, пользователей, оборудования и печать не используются.

  6. Только собственная учебная конфигурация УчебнаяКонфигурацияСинтаксиса. Начальные события training-receipt и training-review создаются в памяти самой EPF.

  7. ОбработкаФормированияКоманд назначается программно на ПолеПлана; не добавляйте второе назначение другому обработчику. Откройте контекстное меню правой кнопкой на событии 09:00–10:00.

  8. Доступные команды штатного меню заменяются только внутри этого собственного поля. КомандаПоУмолчанию сбрасывается, чтобы левая кнопка не выполняла автоматически редактирование/переход.

  9. Другой контекст: нажмите пустую область или часовой заголовок. В нём Элементы может быть Неопределено; пункты, требующие события, должны оказаться недоступны.

  10. Картинка создаётся из встроенного учебного SVG без файлов, загрузок, внешних ссылок и ресурсов конфигурации. Ничего не печатается и не записывается в базу.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйПлан", Новый ОписаниеТипов("Планировщик")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    План = Новый Планировщик;
    План.НачалоПериодаОтображения = Дата(2026, 9, 15, 9, 0, 0);
    План.КонецПериодаОтображения = Дата(2026, 9, 15, 17, 0, 0);
    План.ТекущиеПериодыОтображения.Очистить();
    План.ТекущиеПериодыОтображения.Добавить(
        План.НачалоПериодаОтображения, План.КонецПериодаОтображения);
    План.ОтображатьТекущуюДату = Ложь;
    План.ФиксироватьЗаголовокШкалыВремени = Истина;
    План.ФиксироватьЗаголовокИзмерений = Истина;
    План.ВыравниватьГраницыЭлементовПоШкалеВремени = Истина;
    План.ЦветФона = Новый Цвет(255, 255, 255);
    План.ЦветТекста = Новый Цвет(35, 45, 55);
    План.ЦветЛиний = Новый Цвет(220, 225, 230);
    План.Шрифт = Новый Шрифт("Arial", 10);
    Шкала = План.ШкалаВремени;
    Шкала.Положение = ПоложениеШкалыВремени.Верх;
    Шкала.ПрозрачныйФон = Ложь;
    Шкала.ЦветФона = Новый Цвет(240, 245, 250);
    Шкала.ЦветТекста = Новый Цвет(35, 45, 55);
    Пока Шкала.Элементы.Количество() > 0 Цикл
        Шкала.Элементы.Удалить(Шкала.Элементы.Получить(0));
    КонецЦикла;
    Часы = Шкала.Элементы.Добавить();
    Часы.Единица = ТипЕдиницыШкалыВремени.Час;
    Часы.Кратность = 1;
    Часы.Формат = "ДФ=HH:mm";
    Часы.Видимость = Истина;
    Часы.ОтображатьПериодическиеМетки = Истина;
    Часы.ЦветЛиний = Новый Цвет(220, 225, 230);
    Часы.ЦветТекста = Новый Цвет(35, 45, 55);
    Часы.ЦветФона = Новый Цвет(240, 245, 250);
    Прием = План.Элементы.Добавить(Дата(2026, 9, 15, 9, 0, 0), Дата(2026, 9, 15, 10, 0, 0));
    Прием.Значение = "training-receipt";
    Прием.Текст = "Учебный приём — 09:00–10:00";
    Прием.Подсказка = "Вымышленное событие. Только память формы.";
    Прием.ЦветФона = Новый Цвет(210, 235, 255);
    Прием.ЦветТекста = Новый Цвет(25, 70, 115);
    Прием.ЦветРамки = Новый Цвет(80, 140, 195);
    Прием.Шрифт = Новый Шрифт("Arial", 10);
    Прием.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
    Разбор = План.Элементы.Добавить(Дата(2026, 9, 15, 11, 0, 0), Дата(2026, 9, 15, 12, 0, 0));
    Разбор.Значение = "training-review";
    Разбор.Текст = "Учебный разбор — 11:00–12:00";
    Разбор.ЦветФона = Новый Цвет(225, 245, 220);
    Разбор.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;


    ЭтаФорма.УчебныйПлан = План;
    Поле = Элементы.Добавить("ПолеПлана", Тип("ПолеФормы"));
    Поле.Вид = ВидПоляФормы.ПолеПланировщика;
    Поле.ПутьКДанным = "УчебныйПлан";
    Поле.Заголовок = "Учебный день 15.09.2026";
    Поле.РазрешитьНачалоПеретаскивания = Ложь;
    Поле.РазрешитьПеретаскивание = Ложь;
    Поле.РастягиватьПоГоризонтали = Истина;
    Поле.РастягиватьПоВертикали = Истина;
    Поле.УстановитьДействие("ОбработкаФормированияКоманд", "УчебноеФормированиеКоманд");

    КомандаДействия = ЭтаФорма.Команды.Добавить("УчебноеДействие");
    КомандаДействия.Действие = "УчебноеДействие";
    КомандаДействия.Заголовок = "Проверить собственный план";
    КомандаДействия.Подсказка = "Действие только над данными учебной формы";
    КомандаДействия.ИзменяетСохраняемыеДанные = Ложь;
    Кнопка = Элементы.Добавить("КнопкаУчебноеДействие", Тип("КнопкаФормы"));
    Кнопка.ИмяКоманды = КомандаДействия.Имя;
    Кнопка.Заголовок = КомандаДействия.Заголовок;
КонецПроцедуры

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Сообщить(УчебныйПлан.Элементы.Количество() = 2);
    Сообщить("Откройте контекстное меню собственной встречи или пустой области поля");
КонецПроцедуры
&НаКлиенте
Процедура УчебноеФормированиеКоманд(Элемент, ПараметрыКоманд, Команды, КомандаПоУмолчанию)
    Ключ = НайтиКлючСобственногоНажатия(ПараметрыКоманд);
    Состояние = Новый Структура("Ключ", Ключ);
    Событие = УчебныйПлан.Элементы.Найти(Ключ);
    Команды.Очистить();
    КомандаПоУмолчанию = Неопределено;
    SVG = "<svg xmlns=""http://www.w3.org/2000/svg"" width=""32"" height=""32"" viewBox=""0 0 32 32""><rect width=""32"" height=""32"" rx=""6"" fill=""#146e32""/><path d=""M8 16l5 5 11-12"" fill=""none"" stroke=""white"" stroke-width=""3""/></svg>";
    Байты = ПолучитьДвоичныеДанныеИзСтроки(SVG, КодировкаТекста.UTF8, Ложь);
    УчебнаяКартинка = Новый Картинка(Байты);
    СтараяКоманда = Новый ОписаниеКомандыПланировщика(
        Новый ОписаниеОповещения("ПоказатьСобственноеСобытие", ЭтотОбъект, Состояние),
        "Показать собственную учебную встречу");
    СтараяКоманда.Доступность = Событие <> Неопределено;
    СтараяКоманда.Пометка = Ложь;
    СтараяКоманда.Картинка = УчебнаяКартинка;
    Просмотр = Новый ОписаниеКомандыПоляПланировщика;
    Просмотр.Команда = СтараяКоманда.Команда;
    Просмотр.Представление = СтараяКоманда.Представление;
    Просмотр.Доступность = СтараяКоманда.Доступность;
    Просмотр.Пометка = СтараяКоманда.Пометка;
    Просмотр.Картинка = СтараяКоманда.Картинка;
    Сообщить(ТипЗнч(СтараяКоманда) = Тип("ОписаниеКомандыПланировщика"));
    Сообщить(ТипЗнч(Просмотр) = Тип("ОписаниеКомандыПоляПланировщика"));
    Команды.Добавить(Просмотр);
    Сообщить(Просмотр.Представление = "Показать собственную учебную встречу");
    Сообщить(ТипЗнч(Просмотр.Команда) = Тип("ОписаниеОповещения"));
    Сообщить(Просмотр.Доступность = (Событие <> Неопределено));
    Сообщить(НЕ Просмотр.Пометка);
    Сообщить(ТипЗнч(Просмотр.Картинка) = Тип("Картинка"));

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

&НаКлиенте
Функция НайтиКлючСобственногоНажатия(ПараметрыКоманд)
    Если ТипЗнч(ПараметрыКоманд.Элементы) <> Тип("Массив") Тогда
        Возврат "";
    КонецЕсли;
    Для Каждого НажатоеСобытие Из ПараметрыКоманд.Элементы Цикл
        Если ТипЗнч(НажатоеСобытие) = Тип("ЭлементПланировщика") Тогда
            Если НажатоеСобытие.Значение = "training-receipt" ИЛИ НажатоеСобытие.Значение = "training-review" Тогда
                Возврат НажатоеСобытие.Значение;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;
    Возврат "";
КонецФункции

&НаКлиенте
Процедура ПоказатьСобственноеСобытие(Состояние) Экспорт
    Событие = УчебныйПлан.Элементы.Найти(Состояние.Ключ);
    Если Событие = Неопределено Тогда
        ВызватьИсключение "Собственное событие исчезло после открытия меню";
    КонецЕсли;
    Сообщить(СтрШаблон("%1: %2 — %3", Событие.Текст, Событие.Начало, Событие.Конец));
    Сообщить(Событие.Конец - Событие.Начало = 3600);
    Сообщить(УчебныйПлан.Элементы.Количество() = 2);
КонецПроцедуры

Разбор по шагам

  1. ОписаниеКомандыПланировщика создаётся из собственного ОписаниеОповещения и текста, затем получает доступность, пометку и картинку.

  2. Событие управляемого поля принимает элементы ОписаниеКомандыПоляПланировщика; другой тип в массиве игнорируется.

  3. Поэтому создаём новое описание поля и копируем каждое из пяти общих свойств явно.

  4. В массив Команды добавляем только Просмотр, не СтараяКоманда.

  5. Процедура оповещения остаётся собственным просмотром: одинаковый callback не делает два класса описаний одним типом.

Как проверить результат

  1. Семь предварительных проверок Истина, включая два разных типа описаний.

  2. Меню отображает собственный просмотр с теми же текстом, доступностью и картинкой; выбор показывает исходную встречу.

Ожидаемый результат

Показана осмысленная адаптация близких, но разных классов API.

На что обратить внимание

  1. Совпадение названий свойств не означает, что классы можно взаимозаменяемо передавать любому событию.

  2. Не добавляйте СтараяКоманда в верхний массив Команды этого управляемого поля.

  3. Этот перенос не превращает обычную форму в управляемую и не переносит всю её событийную модель.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.