ДиалогРасписанияЭлементаПланировщика.Показать

Методы · Show

Открывает диалог расписания не модально.

Синтаксис

Показать(<ОписаниеОповещенияОЗакрытии>)
Полное описание, параметры и ограничения

ДиалогРасписанияЭлементаПланировщика.Показать (PlannerItemScheduleDialog.Show)

ДиалогРасписанияЭлементаПланировщика (PlannerItemScheduleDialog)

Показать (Show)

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

Синтаксис:
Показать(<ОписаниеОповещенияОЗакрытии>)
Параметры:

<ОписаниеОповещенияОЗакрытии> (обязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия диалога со следующими параметрами:
<Расписание> - Расписание диалог закрыли, нажав кнопку"OK"; Неопределено - в противном случае;

<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.
Если параметр не указан или имеет тип Неопределено, то по завершению никакая процедура вызвана не будет.
Описание:

Открывает диалог расписания не модально.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, внешнее соединение, мобильное приложение (клиент).

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

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

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

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

Применить расписание из callback после закрытия диалога

Оповещение получает результат и собственное состояние; повторный старт запрещён до окончания диалога.

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

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

Подготовка

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

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

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

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

  5. В этом уроке начальные два собственных события заменяются одним событием guide-owned-recurrence. Весь план существует только в памяти внешней обработки; календари телефона, пользователей и документы базы не используются.

  6. Дата, диапазон просмотра и правило повторения фиксированы в коде. Счётчик коллекции Элементы не используется как обещанный счётчик всех визуальных повторов.

  7. Для диалога сначала нажмите Отмена, потом повторите опыт с ОК. Объект для редактирования копируется отдельно, включая массивы дней и месяцев.

  8. ОткрытьМодально используйте только в собственной учебной базе с разрешёнными модальными вызовами; не меняйте ради опыта режим рабочей конфигурации.

&НаКлиенте
Перем ВыполняетсяДиалогРасписания;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Новые = Новый Массив;
    Новые.Добавить(Новый РеквизитФормы("УчебныйПлан", Новый ОписаниеТипов("Планировщик")));
    ЭтаФорма.ИзменитьРеквизиты(Новые);
    План = Новый Планировщик;
    План.НачалоПериодаОтображения = Дата(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);
    Разбор.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
    План.Элементы.Очистить();
    План.НачалоПериодаОтображения = Дата(2026, 9, 15);
    План.КонецПериодаОтображения = Дата(2026, 9, 23);
    План.ТекущиеПериодыОтображения.Очистить();
    План.ТекущиеПериодыОтображения.Добавить(План.НачалоПериодаОтображения, План.КонецПериодаОтображения);
    Часы.Единица = ТипЕдиницыШкалыВремени.День;
    Часы.Формат = "ДФ=dd.MM";
    СобственноеСобытие = План.Элементы.Добавить(Дата(2026, 9, 15, 9, 0, 0), Дата(2026, 9, 15, 9, 0, 0) + 3600);
    СобственноеСобытие.Значение = "guide-owned-recurrence";
    СобственноеСобытие.Текст = "Повторяющаяся учебная встреча";
    СобственноеСобытие.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
    Расписание = Новый РасписаниеЭлементаПланировщика;
    Расписание.ДниНедели.Очистить();
    Расписание.Месяцы.Очистить();
    Расписание.ПериодПовтораДней = 1;
    Расписание.КоличествоПовторов = 3;
    Расписание.ДатаКонца = Дата(2026, 9, 22, 23, 59, 59);
    СобственноеСобытие.Расписание = Расписание;

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

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

&НаКлиенте
Процедура УчебноеДействие(Команда)
    Если ВыполняетсяДиалогРасписания = Истина Тогда
        ВызватьИсключение "Дождитесь закрытия собственного диалога";
    КонецЕсли;
    Событие = УчебныйПлан.Элементы.Найти("guide-owned-recurrence");
    Если Событие = Неопределено Тогда
        ВызватьИсключение "Нет собственного повторяющегося события";
    КонецЕсли;
    Если Событие.Конец - Событие.Начало <> 3600 Тогда
        ВызватьИсключение "Ожидалась собственная часовая встреча";
    КонецЕсли;
    Копия = КопироватьРасписаниеУрока(Событие.Расписание);
    Диалог = Новый ДиалогРасписанияЭлементаПланировщика(Копия);
    Сообщить(ТипЗнч(Диалог.Расписание) = Тип("РасписаниеЭлементаПланировщика"));
    Состояние = Новый Структура("Ключ,Диалог", "guide-owned-recurrence", Диалог);
    Оповещение = Новый ОписаниеОповещения("ПослеДиалогаРасписания", ЭтаФорма, Состояние, "ОшибкаДиалогаРасписания", ЭтаФорма);
    ВыполняетсяДиалогРасписания = Истина;
    Попытка
        Диалог.Показать(Оповещение);
    Исключение
        ВыполняетсяДиалогРасписания = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеДиалогаРасписания(Результат, Состояние) Экспорт
    ВыполняетсяДиалогРасписания = Ложь;
    Событие = УчебныйПлан.Элементы.Найти(Состояние.Ключ);
    Если Событие = Неопределено Тогда
        ВызватьИсключение "Собственное событие больше не существует; результат не применён";
    КонецЕсли;
    Если Результат = Неопределено Тогда
        Сообщить(Событие.Расписание.ПериодПовтораДней = 1 И Событие.Расписание.КоличествоПовторов = 3);
        Сообщить("Отмена: собственное расписание не применялось заново");
        Возврат;
    КонецЕсли;
    Если ТипЗнч(Результат) <> Тип("РасписаниеЭлементаПланировщика") Тогда
        ВызватьИсключение "Диалог вернул неожиданный тип";
    КонецЕсли;
    Событие.Расписание = Результат;
    Сообщить("ОК: собственное событие получило подтверждённое расписание");
КонецПроцедуры

&НаКлиенте
Процедура ОшибкаДиалогаРасписания(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
    ВыполняетсяДиалогРасписания = Ложь;
    СтандартнаяОбработка = Истина;
КонецПроцедуры

&НаКлиенте
Функция КопироватьРасписаниеУрока(Источник)
    Копия = Новый РасписаниеЭлементаПланировщика;
    Копия.ДатаКонца = Источник.ДатаКонца;
    Копия.ДеньВМесяце = Источник.ДеньВМесяце;
    Копия.ДеньНеделиВМесяце = Источник.ДеньНеделиВМесяце;
    Копия.КоличествоПовторов = Источник.КоличествоПовторов;
    Копия.ПериодЛет = Источник.ПериодЛет;
    Копия.ПериодМесяцев = Источник.ПериодМесяцев;
    Копия.ПериодНедель = Источник.ПериодНедель;
    Копия.ПериодПовтораДней = Источник.ПериодПовтораДней;
    Копия.ДниНедели.Очистить();
    Для Каждого День Из Источник.ДниНедели Цикл
        Копия.ДниНедели.Добавить(День);
    КонецЦикла;
    Копия.Месяцы.Очистить();
    Для Каждого Месяц Из Источник.Месяцы Цикл
        Копия.Месяцы.Добавить(Месяц);
    КонецЦикла;
    Возврат Копия;
КонецФункции

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

  1. На клиенте находим собственное событие по ключу guide-owned-recurrence. Данные другого календаря не передаются.

  2. КопироватьРасписаниеУрока создаёт новый объект и новые массивы дней/месяцев. Присваивание Копия=Источник не является таким копированием.

  3. Диалог редактирует только копию. Исходное расписание применяется заново лишь при подтверждённом результате; отмена не читает и не применяет изменённую копию.

  4. ДатаКонца и КоличествоПовторов — ограничения повторения. Диалог не сохраняет встречу, не создаёт регламентное задание и не пишет настройки пользователя.

  5. В ПослеДиалогаРасписания два параметра: Результат и Состояние. Неопределено означает отмену, другой ожидаемый тип — расписание.

  6. Состояние удерживает собственный диалог и ключ. Перед применением событие снова ищется: если его больше нет, чужой элемент не выбирается вместо него.

  7. Отдельный трёхаргументный обработчик ошибки сбрасывает флаг формы и оставляет СтандартнаяОбработка=Истина.

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

  1. Первый запуск: поменяйте правило в диалоге и Отмена. Сообщение подтверждает, что исходные период 1 и лимит 3 не изменились.

  2. Второй запуск: поменяйте правило и ОК. Показано подтверждение применения к собственному событию; проверьте новый вид повторов в учебном плане.

  3. Этот вывод не является результатом запуска на вашей платформе: контрольный опыт выполняется в отдельной учебной базе.

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

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

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

  1. Не применяйте результат к текущему выделенному элементу: за время диалога выделение могло измениться.

  2. Не закрывать собственную форму во время опыта; завершение приложения не считается подтверждением диалога.

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

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

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

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

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