Самостоятельный учебный процесс с настоящим диалогом платформы, собственными подготовленными данными, независимой проверкой результата и отдельным объяснением отмены. Все изменения только в памяти своей формы.
Где и как запускать
Полный модуль собственной управляемой формы новой пустой файловойCF8.5.1.1343; толстый управляемый Windowsx64 клиент. Модальный вариант только в отдельной CF. ActualUI/1C/БД/файлы/сеть0.
Подготовка
Создайте новую собственную пустую файловую ИБ платформы ровно 8.5.1.1343. Русский встроенный язык, управляемое приложение, совместимость «Не использовать». Рабочие конфигурации, чужие формы, действующие задания и данные не использовать.
Конфигурация не содержит справочников, документов, регистров, планов, задач, общих реквизитов, внешних источников, подписок и регламентных заданий. Нет расширений БД и сеанса. Полный guard проверяет все эти условия, три источника расширений и отсутствие активной транзакции.
Используйте только толстый управляемый клиент Windows x64 под своим учебным профилем. Справка у диалогов содержит и другие клиенты, но поля РасписаниеРегламентногоЗадания доступны на сервере, в толстом клиенте и внешнем соединении; их чтение в тонком клиенте здесь не выдумывается.
Для выбора диаграммы и немодального расписания имя корня CF — УчебныеДиалогиДиаграммыИРасписания85. Свойство конфигурации Режим использования модальности — Не использовать. Код проверяет это, а не открывает модальное окно вопреки настройке.
Для ОткрытьМодально создайте ДРУГУЮ новую пустую CF УчебныйМодальныйДиалогРасписания85. Только в ней явно задайте Режим использования модальности — Использовать. Это отдельный учебный вариант, не инструкция менять режим рабочей конфигурации.
Внешняя обработка OwnChartScheduleDialog85: одна управляемая форма. Общие реквизиты ПодтверждаюСвойСтенд85 — Булево, начально Ложь; Занято85 — Булево, начально Ложь и ТолькоПросмотр; Статус85 — Строка неограниченной длины, многострочная, ТолькоПросмотр. Вставьте весь модуль одной карточки; не объединяйте одинаковые обработчики.
Для диаграммы добавьте реквизит Диаграмма85 типа Диаграмма. Перетащите его на форму, создайте элемент вида Поле диаграммы с ПутьКДанным=Диаграмма85. Источник данных и автоматическое транспонирование не задавать. Кнопки: ПодготовитьСвоюДиаграмму85, ВыбратьТипЧерезЖдать85, ВыбратьТипЧерезОповещение85.
Диаграмма заполняется собственными вычислениями: одна серия «Выручка, руб.», утром 3 книги по 250 = 750, вечером 5 по 250 = 1250. После подготовки и смены типа реальные значения перечитываются из двух ячеек, сумма должна быть 2000. Смена оформления не заменяет данные.
У ДоступныеТипыДиаграммы свойство только для чтения: ему нельзя присвоить новый массив. Код получает настоящий массив, очищает его и добавляет Гистограмма/График, затем повторно читает свойство и проверяет ровно эти два типа. Если изменение массива не отразилось, выбор не запускается. Диалог.ТипДиаграммы задает начальное выделение, а не выбранный результат.
Для каждого немодального выбора создается новый собственный UUID-контекст. ОписаниеОповещения действительно связано с экспортным обработчиком завершения из двух параметров: результат и контекст. Ошибка связывается отдельным обработчиком из трех параметров. Не вызывайте эти обработчики вручную с придуманными результатами.
Показать выбора типа документирует Неопределено при отсутствии выбора. Для ВыбратьАсинх справка описывает выбранный тип, но явно не называет результат отмены; код проверяет тип и безопасно обрабатывает Неопределено, не обещая эту ветку как документированный обязательный результат Promise.
Для немодального расписания кнопки: ПодготовитьСвоеРасписание85, ИзменитьЧерезЖдать85, ИзменитьЧерезОповещение85. Рабочий объект и кандидат создаются отдельно настоящим Новый РасписаниеРегламентногоЗадания. Диалог получает только кандидата, поэтому отмена не требует откатывать рабочий объект.
Учебное расписание только в памяти: 10.10.2026, 08:00–10:00, без дней недели, месяцев и детальных расписаний. ПериодПовтораДней=1, остальные специальные ограничения нулевые. В диалоге меняйте только начало на 09:00, остальные поля не трогайте. Получится нормальное часовое окно 09:00–10:00. Все 15 полей проверяются на конкретные собственные значения, а не принимается любой непустой объект.
ТребуетсяВыполнение проверяет конкретные даты, не запускает задание. Перед началом и после конца окна — Ложь, на границах — Истина, на соседних датах — Ложь. Даты предыдущих запусков не передаются: по справке задание считается не запускавшимся, условия повторного запуска этим опытом не доказываются.
Свойство ДиалогРасписанияРегламентногоЗадания.Расписание только для чтения: оно не присваивается. Результат Ждать или оповещения сверяется как настоящее РасписаниеРегламентногоЗадания; Неопределено означает закрытие не по OK. Изменения отдельного кандидата при отмене допускаются, но рабочий объект остается исходным.
В экспорте конструктор диалога назван «По умолчанию», но родная страница HBK говорит «По расписанию» и требует обязательный аргумент Расписание. Код всегда передает реальный собственный объект. Вызов без аргумента запрещен; имя карточки не меняет контракт.
Для модальной формы добавьте ПодтверждаюЗакрытиеЧерезOK85 — Булево, начально Ложь. Кнопки: ПодготовитьСвойМодальныйОпыт85, ОткрытьСвойМодальныйДиалог85, ЯвноПринятьТолькоСвойOK85, ОтброситьМодальногоКандидата85. Новое открытие сбрасывает подтверждение. Значение Bool показывается, но не используется для угадывания OK/Отмена: справка не расшифровывает его значения.
При модальном опыте только после реального нажатия OK вручную подтвердите его и отдельно примите проверенного кандидата. После Отмена не ставьте подтверждение: отдельной командой отбросьте кандидат, даже если его поля изменились во время редактирования. Это ваше явное решение, не автоматически доказанная кнопка закрытия.
Подготовка явно создает заново только свою диаграмму или объект расписания в памяти. Не выполняйте ее пока идет диалог; не меняйте данные формы параллельно. После успешного выбора расписания следующему независимому опыту нужна новая явная подготовка исходного окна.
ActualUI/1C/files/DB/network0: здесь только авторство и статические проверки по установленной справке. Диалоги, задания, база и сеть не запускались и не изменялись. Расписание никуда не записывается, фоновые работы не создаются. Корень проекта только читался; резервные копии и архивы не создавались.
&НаКлиенте
Перем СвоеРасписание85;
&НаКлиенте
Перем КонтекстРасписания85;
&НаКлиенте
Процедура ПодготовитьСвоеРасписание85(Команда)
ПроверитьСвоегоКлиента85();
Если Занято85 Тогда
ВызватьИсключение "Сначала закройте свой текущий диалог";
КонецЕсли;
СвоеРасписание85 = СоздатьСвоеРасписание85();
КонтекстРасписания85 = Неопределено;
Статус85 = "Свой объект в памяти: 10.10.2026, 08:00–10:00. Регламентных заданий нет; ничего не записано и не запущено";
КонецПроцедуры
&НаКлиенте
Функция НачатьСвойКандидат85()
ПроверитьСвоегоКлиента85();
Если Занято85 Или СвоеРасписание85 = Неопределено Тогда
ВызватьИсключение "Сначала отдельная подготовка; одновременно второйдиалог не запускаем";
КонецЕсли;
ПроверитьСвоеРасписание85(СвоеРасписание85, 8);
Кандидат = СоздатьСвоеРасписание85();
Диалог = Новый ДиалогРасписанияРегламентногоЗадания(Кандидат);
ПроверитьСвоеРасписание85(Диалог.Расписание, 8);
К = Новый Структура("UUID,Диалог", Строка(Новый УникальныйИдентификатор), Диалог);
КонтекстРасписания85 = К;
Занято85 = Истина;
Статус85 = "Измените в собственном кандидате только ВремяНачала на09:00; остальные поля не меняйте";
Возврат К;
КонецФункции
&НаКлиенте
Асинх Процедура ИзменитьЧерезЖдать85(Команда)
К = НачатьСвойКандидат85();
Попытка
Результат = Ждать К.Диалог.ОткрытьАсинх();
ЗавершитьСвойКандидат85(Результат, К);
Исключение
КонтекстРасписания85 = Неопределено;
Занято85 = Ложь;
Статус85 = "Ждать/проверка расписания не подтверждены. Рабочий own объект не заменяется неизвестным кандидатом";
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЧерезОповещение85(Команда)
К = НачатьСвойКандидат85();
Завершение = Новый ОписаниеОповещения("СвойКандидатЗакрыт85", ЭтотОбъект, К,
"ОшибкаСвоегоКандидата85", ЭтотОбъект);
Попытка
К.Диалог.Показать(Завершение);
Исключение
КонтекстРасписания85 = Неопределено;
Занято85 = Ложь;
Статус85 = "Начало диалога не подтверждено; никакого автоматического повторного показа";
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура СвойКандидатЗакрыт85(Результат, К) Экспорт
Попытка
ЗавершитьСвойКандидат85(Результат, К);
Исключение
КонтекстРасписания85 = Неопределено;
Занято85 = Ложь;
Статус85 = "Native callback/проверка кандидата не подтвердились; неизвестные изменения не принимаем";
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ОшибкаСвоегоКандидата85(ИнформацияОбОшибке, СтандартнаяОбработка, К) Экспорт
СтандартнаяОбработка = Ложь;
Если КонтекстРасписания85 <> Неопределено И К.UUID = КонтекстРасписания85.UUID Тогда
КонтекстРасписания85 = Неопределено;
Занято85 = Ложь;
КонецЕсли;
Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда
Статус85 = "Native error3args: кандидат не принят; ничего не записано/запущено";
Иначе
Статус85 = "Неизвестный тип ошибки собственного диалога";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьСвойКандидат85(Результат, К)
ПроверитьСвоегоКлиента85();
Если КонтекстРасписания85 = Неопределено Или К.UUID <> КонтекстРасписания85.UUID Или Не Занято85 Тогда
ВызватьИсключение "Не свой текущий контекст диалога расписания";
КонецЕсли;
ПроверитьСвоеРасписание85(СвоеРасписание85, 8);
Если Результат = Неопределено Тогда
Статус85 = "Отмена: отдельный рабочий объект остался 08:00–10:00; возможные правки кандидата отброшены";
Иначе
ПроверитьСвоеРасписание85(Результат, 9);
ПроверитьСвоеРасписание85(К.Диалог.Расписание, 9);
СвоеРасписание85 = Результат;
ПроверитьСвоеРасписание85(СвоеРасписание85, 9);
Статус85 = "OK: собственный объект в памяти теперь 09:00–10:00, конкретные даты проверены; заданий, записей и запусков нет";
КонецЕсли;
КонтекстРасписания85 = Неопределено;
Занято85 = Ложь;
КонецПроцедуры
&НаКлиенте
Функция СоздатьСвоеРасписание85()
Расписание = Новый РасписаниеРегламентногоЗадания;
Расписание.ДатаНачала = Дата(2026, 10, 10);
Расписание.ДатаКонца = Дата(2026, 10, 10);
Расписание.ВремяНачала = Дата(1, 1, 1, 8, 0, 0);
Расписание.ВремяКонца = Дата(1, 1, 1, 10, 0, 0);
Расписание.ВремяЗавершения = Дата(1, 1, 1);
Расписание.ДеньВМесяце = 0;
Расписание.ДеньНеделиВМесяце = 0;
Расписание.ИнтервалЗавершения = 0;
Расписание.ПаузаПовтора = 0;
Расписание.ПериодНедель = 0;
Расписание.ПериодПовтораВТечениеДня = 0;
Расписание.ПериодПовтораДней = 1;
Расписание.ДетальныеРасписанияДня = Новый Массив;
Расписание.ДниНедели = Новый Массив;
Расписание.Месяцы = Новый Массив;
ПроверитьСвоеРасписание85(Расписание, 8);
Возврат Расписание;
КонецФункции
&НаКлиенте
Процедура ПроверитьСвоеРасписание85(Расписание, ЧасНачала)
Если ТипЗнч(Расписание) <> Тип("РасписаниеРегламентногоЗадания") Тогда
ВызватьИсключение "Нужен настоящий объект своего расписания в памяти, не строка/Структура";
КонецЕсли;
Если ЧасНачала <> 8 И ЧасНачала <> 9 Тогда
ВызватьИсключение "Свой опыт рассматривает только окно 08:00–10:00 либо 09:00–10:00";
КонецЕсли;
Если Расписание.ДатаНачала <> Дата(2026, 10, 10) Или Расписание.ДатаКонца <> Дата(2026, 10, 10)
Или Расписание.ВремяНачала <> Дата(1, 1, 1, ЧасНачала, 0, 0)
Или Расписание.ВремяКонца <> Дата(1, 1, 1, 10, 0, 0)
Или Расписание.ВремяЗавершения <> Дата(1, 1, 1)
Или Расписание.ДеньВМесяце <> 0 Или Расписание.ДеньНеделиВМесяце <> 0
Или Расписание.ИнтервалЗавершения <> 0 Или Расписание.ПаузаПовтора <> 0
Или Расписание.ПериодНедель <> 0 Или Расписание.ПериодПовтораВТечениеДня <> 0
Или Расписание.ПериодПовтораДней <> 1 Или Расписание.ДетальныеРасписанияДня.Количество() <> 0
Или Расписание.ДниНедели.Количество() <> 0 Или Расписание.Месяцы.Количество() <> 0 Тогда
ВызватьИсключение "Свой кандидат должен отличаться только часомначала; неизвестные ограничения не принимаем";
КонецЕсли;
Если Расписание.ТребуетсяВыполнение(Дата(2026, 10, 10, ЧасНачала - 1, 59, 59))
Или Не Расписание.ТребуетсяВыполнение(Дата(2026, 10, 10, ЧасНачала, 0, 0))
Или Не Расписание.ТребуетсяВыполнение(Дата(2026, 10, 10, 10, 0, 0))
Или Расписание.ТребуетсяВыполнение(Дата(2026, 10, 10, 10, 0, 1))
Или Расписание.ТребуетсяВыполнение(Дата(2026, 10, 9, ЧасНачала, 0, 0))
Или Расписание.ТребуетсяВыполнение(Дата(2026, 10, 11, ЧасНачала, 0, 0)) Тогда
ВызватьИсключение "Конкретные positive/negative даты должны подтвердить только собственное окно";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСвоегоКлиента85()
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Система = Новый СистемнаяИнформация;
Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Или Не ПодтверждаюСвойСтенд85 Тогда
ВызватьИсключение "Подтвердите только свою новую пустую ИБ, толстый управляемый Windowsx64 клиент8.5.1.1343";
КонецЕсли;
ПроверитьНаСервере85();
#Иначе
ВызватьИсключение "Этот самостоятельный маршрут не заявляет другие клиенты проверенными";
#КонецЕсли
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьНаСервере85()
ПроверитьСвойПустойСтенд();
Если Метаданные.РежимИспользованияМодальности <> Метаданные.СвойстваОбъектов.РежимИспользованияМодальности.НеИспользовать Тогда
ВызватьИсключение "Режим модальности этой самостоятельной учебнойCF должен быть НеИспользовать";
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Подготовьте отдельный рабочий объект расписания 10.10.2026, 08:00–10:00. Проверьте конкретные границы и соседние даты методом ТребуетсяВыполнение.
Новый кандидат создается отдельно тем же настоящим конструктором расписания. Диалог обязательно получает его аргументом. Рабочий объект в диалог не передается.
Выберите Ждать ОткрытьАсинх либо Показать с оповещением. В диалоге измените только время начала с 08:00 на 09:00 и нажмите OK.
Примите результат только после проверки настоящего типа, всех 15 полей, конкретных положительных/отрицательных дат и свойства самого диалога. Потом перечитайте свой рабочий объект, который теперь имеет окно 09:00–10:00.
Подготовьте новый независимый исходный объект. Измените кандидата и нажмите Отмена: Неопределено не заменяет рабочий объект. Он остается 08:00–10:00, даже если кандидат был изменен до отмены.
Непредусмотренная дата, дни недели, дополнительное расписание или другое поле отвергаются. Никакого создания/записи/запуска регламентных заданий нет.
Как проверить результат
Реальные собственные данные подготовлены до открытия; результат не заменяется неизвестной строкой, структурой или объектом из рабочей базы.
Аргументы конструкторов и методов, результаты Promise/Bool, экспортные callbacks и доступность совпадают с установленной справкой8.5.1.1343.
Readonly свойства не присваиваются; повторное чтение подтверждает изменение настоящего массива/кандидата либо выбранного оформления.
Отмена, ошибка и согласие пользователя не смешиваются. Рабочий объект не передается редактируемым кандидатом; повторный одновременный диалог запрещен.
Нет регламентных заданий, записи расписания, файлов, сети, actualUI/1C или обещания атомарности; только авторство и статические проверки.
Ожидаемый результат
Ожидаемый ручной результат: выбранный тип применяется без изменения750/1250/2000; либо только свой проверенный объект расписания меняется08:00→09:00. Отмена не заменяет рабочие данные. Диалоги фактически здесь не запускались.
На что обратить внимание
Имя экспортированной карточки конструктора «По умолчанию» не означает ноль аргументов: диалогу расписания обязательно нужен настоящий объект.
Показать/ОткрытьАсинх расписания документируют Неопределено при закрытии не поOK; модальный метод дает Bool без расшифровки его значений. Нельзя подменять один контракт другим.
Параметры выбора и редактируемый кандидат не являются рабочими данными. Проверять нужно независимое чтение после принятия; при отмене допустимы изменения кандидата, но не рабочей диаграммы/расписания.
ТребуетсяВыполнение отвечает на вопрос о дате и не запускает задание. Этот пример не доказывает поведение планировщика, предыдущих запусков, фоновой очереди или доставки отчета.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.