Описывает объект, с которым происходит взаимодействие во время перетаскивания внутри поля планировщика.
Полное описание, параметры и ограничения
ПараметрПеретаскиванияВнутриПланировщика (PlannerInsideDragParameter)
ПараметрПеретаскиванияВнутриПланировщика (PlannerInsideDragParameter)
Доступен, начиная с версии 8.3.18.
Свойства:
ЗначенияИзмерений (DimensionValues)
Конец (End)
Начало (Begin)
Элемент (Item)
Описание:
Описывает объект, с которым происходит взаимодействие во время перетаскивания внутри поля планировщика.
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.
Использование в версии:
Доступен, начиная с версии 8.3.18.
Методическая информация
Практические примеры
Перетаскивание своего события: 120→90 минут и отдельная копия30
Один цельный собственный memory workflow с отдельным native источником параметров каждой карты; ни неизвестного ИсходногоОбъекта, ни записиИБ.
Где и как запускать
Собственная новая managed FileCF8.5.1.1343/тонкий Windows клиент/Такси. Полные связанные модули ниже; actualRuntime0.
Подготовка
Вручную создайте НОВУЮ собственную FileИБ в C:\1c-labs\OwnPlannerDrag85_6e6d6333-cd13-4e53-9940-23f270fd487c\IB. Если каталог или регистрация существуют, не очищайте и не используйте их. Exact registration File="C:\1c-labs\OwnPlannerDrag85_6e6d6333-cd13-4e53-9940-23f270fd487c\IB"; проверяется серверным кодом, это не UUID самойИБ и не доказательство владения любой базой. Здесь1С/VM/CF/GUI/файлы данных не создавались.
Платформа строго8.5.1.1343, тонкий managed Windows клиент, Такси, совместимостьНеИспользовать. Новая пустаяCF УчебноеПеретаскиваниеПлана85, один собственный пользователь План85Ученик с полной собственной ролью, включая Администрирование для nativeGetUsers. Один сеанс. Ни документов, ни регистров, ни каталогов, ни отчетов/обработок, ни подписок/заданий/внешнихисточников; другие модули пусты.
Создайте два неглобальных общих модуля: ПланСтенд85 толькоСерверДа/ВызовСервераДа/КлиентУправляемоеНет/ВнешнееСоединениеНет/ПривилегированныйНет; ПланПодтверждение85 толькоКлиентУправляемоеДа/СерверНет/ВызовСервераНет/ВнешнееСоединениеНет/ГлобальныйНет. Вставьте полные supportingModules по указанным местам. Client ЭтотОбъект не переносить на сервер.
ОбщиеФормы: УчебныйЗапускПлана85 и УчебныйПлан85, обе управляемые. Hub: реквизит Статус85 Строка0, readonly поле статуса и командная панель. В КомандныйИнтерфейс Hub включите ровно собственную общую команду УчебныйПлан85 в ее командную панель. Это именно metadata command, не form command с вручную вызванной ОбработкаКоманды.
ОбщиеКоманды → УчебныйПлан85: ТипПараметраКоманды НЕ задан, ИспользованиеПараметраКоманды одиночное, действие в командной панели Hub. В модуль команды целиком вставьте COMMAND_MODULE; platform native ОбработкаКоманды2 вызывается штатным нажатием. Не назначайте свой параметр и не открывайте команду через чужие navigation/extdata.
УчебныйПлан85: параметр формы Маркер85 Строка36. Реквизиты: ПланИсточника85 Планировщик; ПланПриемника85 Планировщик; Маркер85 Строка36; КлючЭкземпляра85 УникальныйИдентификатор; Статус85 Строка0; Остановка85/Ожидание85/Инициализирована85 Булево. Ни основного объекта, ни списка/динамическойтаблицы. Маркер не ключ производственных данных.
УчебныйПлан85: два поля Источник85/Приемник85 с ВидПолеПланировщика и ПутьКДанным соответственно ПланИсточника85/ПланПриемника85, оба растягиваются. Поле Статус85 толькоПросмотр. Команды формы Проверить85/Сброс85, Действие одноименное, ИзменяетСохраняемыеДанныеНет, две кнопки с соответствующим ИмяКоманды. Переменные СвойА85/СвойБ85/Перенос85 только в модуле, не реквизиты базы.
Назначьте события формы ПриСозданииНаСервере→одноименная процедура2, ПриОткрытии→одноименная процедура1. Остальные planner handlers привязываются только штатным server SetAction2 в исходнике. Native четыре/два формальных параметра control событий дополняются первым Элемент управляемой формы из generic event525; не вызывать handlers вручную.
Все модули/реквизиты/командную панель сохраните только в своей новойCF; обновите только ее вручную. Модуль управляемого приложения ниже откроет Hub штатным native OnStart0 после вашего ручного запуска тонкого клиента. До этого никаких действующих баз открывать этим кодом нельзя.
Нажмите общую metadata команду на Hub. Требуются actual window объект и actual empty command Parameters Structure; если native реальный вызов вернул другое, код честно откажет. Native URL только длина, без вывода содержимого или навигации. Закройте предыдущую форму плана вручную перед повторным вызовом: найденную открытую форму код не переинициализирует.
Исходный собственный план имеет ровноA09–10 с numeric20 иB11–12 с numeric25 в actual FixedStructure Value; приемник пуст. Оба без измерений, фон12–13: пустой mapping означает фон на всех областях, а не неизвестный ресурс. Никакие RO dimension mappings события не присваиваются. ActionA использует только installed БиблиотекаКартинок.Информация, actual typeКартинка проверяется; видимость картинки нужно осмотреть вручную.
Schedule10466 объявляет только native РасписаниеЭлементаПланировщика, не гарантирует Undefined/default. A/B/Copy получают отдельные собственные NewSchedule с explicit Daily1/EndDate10.10.2026 23:59:59/RepeatCount1, остальными scalar0 и пустыми собственными массивами. Все10 actual fields читаются заново через item.Schedule. Это заданная single-day policy, не выдуманный off-default; 0 RepeatCount означал бы НЕограниченно и не используется. Следующий daily день11.10 вне собственного datebound. Считаются actual два базовых ownitems, не пиксели/все порождённые повторы; включает ли count1 оригинал, код не утверждает. Осмотрите отсутствие дополнительных визуальных событий вручную.
Растяните ЛЕВУЮ границуA к09:30, не переносите целиком и не меняйте конец. Inside native fixedarray содержит только actualA; setterBegin и пустой RW proposal map нормализуются к09:30; RO End10/ItemA проверяются. Другие границы, B, выделение, создание/копирование внутри отклоняются. После отпускания нажмите Проверить: реальный текущий source должен дать90мин/45.
Выделите толькоA, потяните его из источника в приемник ровно на14:00. Разрешено толькоCopy, собственный instance/payload/native source ref и пустые dimensions; другие target times/payloads или повторная копия отклоняются. Parent receiver заменяется только после native new candidate/readback; fresh receiver/source проверяются отдельно. Не тестируйте внешние приложения/файлы/рабочие календари.
Проверьте native reset: Нет/закрытие вопроса сохраняет actual snapshot; Да создаёт свежую собственную память120мин/45 и пустой receiver. Пока вопрос открыт, мутации запрещены флагомОжидание. Закрытая форма в callback ничего не сбрасывает. После ошибки partialUI/fail-stop не продолжайте; вручную закройте и разберите причину, автоматического восстановления/DBrollback нет.
Перем СвойА85, СвойБ85, Перенос85;
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПланСтенд85.ПроверитьСтенд85();
Если ИмяФормы <> "ОбщаяФорма.УчебныйПлан85" Или Не Параметры.Свойство("Маркер85")
Или Параметры.Маркер85 <> "6e6d6333-cd13-4e53-9940-23f270fd487c" Тогда
Отказ = Истина;
ВызватьИсключение "Открытие только собственным metadata command route";
КонецЕсли;
Маркер85 = Параметры.Маркер85;
Остановка85 = Ложь;
Ожидание85 = Ложь;
Инициализирована85 = Ложь;
Источник = Элементы.Источник85;
Приемник = Элементы.Приемник85;
Если Источник.Вид <> ВидПоляФормы.ПолеПланировщика Или Источник.ПутьКДанным <> "ПланИсточника85"
Или Приемник.Вид <> ВидПоляФормы.ПолеПланировщика Или Приемник.ПутьКДанным <> "ПланПриемника85" Тогда
Отказ = Истина;
ВызватьИсключение "Нужны два собственных native planner fields";
КонецЕсли;
Источник.РазрешитьНачалоПеретаскивания = Истина;
Источник.РазрешитьПеретаскивание = Ложь;
Приемник.РазрешитьНачалоПеретаскивания = Ложь;
Приемник.РазрешитьПеретаскивание = Истина;
Источник.УстановитьДействие("ПроверкаПеретаскиванияВнутри", "ИсточникВнутри85");
Приемник.УстановитьДействие("ПроверкаПеретаскиванияВнутри", "ПриемникВнутри85");
Источник.УстановитьДействие("НачалоПеретаскивания", "ИсточникНачало85");
Источник.УстановитьДействие("ОкончаниеПеретаскивания", "ИсточникОкончание85");
Приемник.УстановитьДействие("ПроверкаПеретаскивания", "ПриемникПроверка85");
Приемник.УстановитьДействие("Перетаскивание", "ПриемникПеретаскивание85");
Источник.УстановитьДействие("НажатиеНаДействиеПланировщика", "ИсточникДействие85");
Источник.УстановитьДействие("ПередСозданием", "ЗапретСоздания85");
Приемник.УстановитьДействие("ПередСозданием", "ЗапретСоздания85");
Источник.УстановитьДействие("ПередУдалением", "ЗапретУдаления85");
Приемник.УстановитьДействие("ПередУдалением", "ЗапретУдаления85");
Источник.УстановитьДействие("ПередНачаломРедактирования", "ЗапретРедактора85");
Приемник.УстановитьДействие("ПередНачаломРедактирования", "ЗапретРедактора85");
Источник.УстановитьДействие("ПередНачаломБыстрогоРедактирования", "ЗапретБыстрогоРедактора85");
Приемник.УстановитьДействие("ПередНачаломБыстрогоРедактирования", "ЗапретБыстрогоРедактора85");
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
#Если ТонкийКлиент Тогда
Попытка
КлючЭкземпляра85 = Новый УникальныйИдентификатор;
СоздатьПланы85();
Инициализирована85 = Истина;
Статус85 = "Собственная память: A60+B60=120мин; метки20+25=45. Растяните только левую границуA к09:30.";
Исключение
Остановка85 = Истина;
Отказ = Истина;
ВызватьИсключение;
КонецПопытки;
#Иначе
Отказ = Истина;
ВызватьИсключение "Урок запускается только в тонком managed Windows клиенте";
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Функция НовыйПлан85()
План = Новый Планировщик;
Если ТипЗнч(План) <> Тип("Планировщик") Тогда
ВызватьИсключение "Native factory не вернула Планировщик";
КонецЕсли;
План.НачалоПериодаОтображения = Дата(2026, 10, 10, 8, 0, 0);
План.КонецПериодаОтображения = Дата(2026, 10, 10, 17, 0, 0);
План.ТекущиеПериодыОтображения.Очистить();
План.ТекущиеПериодыОтображения.Добавить(План.НачалоПериодаОтображения, План.КонецПериодаОтображения);
План.ОтображатьТекущуюДату = Ложь;
План.ВыравниватьГраницыЭлементовПоШкалеВремени = Ложь;
Шкала = План.ШкалаВремени;
Пока Шкала.Элементы.Количество() > 0 Цикл
Шкала.Элементы.Удалить(Шкала.Элементы.Получить(0));
КонецЦикла;
Деление = Шкала.Элементы.Добавить();
Деление.Единица = ТипЕдиницыШкалыВремени.Минута;
Деление.Кратность = 30;
Деление.Формат = "ДФ=HH:mm";
Фон = План.ИнтервалыФона.Добавить(Дата(2026, 10, 10, 12, 0, 0), Дата(2026, 10, 10, 13, 0, 0));
Если ТипЗнч(Фон) <> Тип("ИнтервалФонаПланировщика") Тогда
ВызватьИсключение "Native Add2 не вернул собственный интервал фона";
КонецЕсли;
Фон.ЗначенияИзмерений = Новый ФиксированноеСоответствие(Новый Соответствие);
Возврат План;
КонецФункции
&НаКлиенте
Процедура СоздатьПланы85()
Источник = НовыйПлан85();
Приемник = НовыйПлан85();
А = Источник.Элементы.Добавить(Дата(2026, 10, 10, 9, 0, 0), Дата(2026, 10, 10, 10, 0, 0));
Б = Источник.Элементы.Добавить(Дата(2026, 10, 10, 11, 0, 0), Дата(2026, 10, 10, 12, 0, 0));
А.Значение = Новый ФиксированнаяСтруктура(Новый Структура("Ключ85,Сумма85,Маркер85", "A", 20, Маркер85));
Б.Значение = Новый ФиксированнаяСтруктура(Новый Структура("Ключ85,Сумма85,Маркер85", "B", 25, Маркер85));
А.Текст = "A · 20";
Б.Текст = "B · 25";
А.Расписание = СоздатьСвоёРасписание85();
Б.Расписание = СоздатьСвоёРасписание85();
А.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.РазрешитьРедактирование;
Б.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
Действие = А.Действия.Добавить("read-own-A", "ПроверитьA", БиблиотекаКартинок.Информация);
Если ТипЗнч(Действие) <> Тип("ДействиеЭлементаПланировщика") Тогда
ВызватьИсключение "Native action factory не подтверждена";
КонецЕсли;
Действие.Картинка = БиблиотекаКартинок.Информация;
Действие.Доступность = Истина;
Действие.Видимость = Истина;
ПроверитьПлан85(Источник);
ПроверитьПлан85(Приемник);
ПланИсточника85 = Источник;
ПланПриемника85 = Приемник;
СвойА85 = ПланИсточника85.Элементы.Получить(0);
СвойБ85 = ПланИсточника85.Элементы.Получить(1);
Перенос85 = Неопределено;
ПроверитьСостояние85();
Если СвойА85.Начало <> Дата(2026, 10, 10, 9, 0, 0) Или ПланПриемника85.Элементы.Количество() <> 0 Тогда
ВызватьИсключение "Свежий parent readback начального состояния не совпал";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьПлан85(План)
Если ТипЗнч(План) <> Тип("Планировщик") Или План.Измерения.Количество() <> 0
Или План.НачалоПериодаОтображения <> Дата(2026, 10, 10, 8, 0, 0)
Или План.КонецПериодаОтображения <> Дата(2026, 10, 10, 17, 0, 0)
Или План.ОтображатьТекущуюДату Или План.ВыравниватьГраницыЭлементовПоШкалеВремени
Или План.ТекущиеПериодыОтображения.Количество() <> 1 Или План.ИнтервалыФона.Количество() <> 1
Или План.ШкалаВремени.Элементы.Количество() <> 1 Тогда
ВызватьИсключение "Actual parent plan scope/period/background изменен";
КонецЕсли;
Период = План.ТекущиеПериодыОтображения.Получить(0);
Фон = План.ИнтервалыФона.Получить(0);
Деление = План.ШкалаВремени.Элементы.Получить(0);
Если Период.Начало <> План.НачалоПериодаОтображения Или Период.Конец <> План.КонецПериодаОтображения
Или ТипЗнч(Фон) <> Тип("ИнтервалФонаПланировщика")
Или Фон.Начало <> Дата(2026, 10, 10, 12, 0, 0) Или Фон.Конец <> Дата(2026, 10, 10, 13, 0, 0)
Или ТипЗнч(Фон.ЗначенияИзмерений) <> Тип("ФиксированноеСоответствие") Или Фон.ЗначенияИзмерений.Количество() <> 0
Или Деление.Единица <> ТипЕдиницыШкалыВремени.Минута Или Деление.Кратность <> 30 Или Деление.Формат <> "ДФ=HH:mm" Тогда
ВызватьИсключение "Fresh readonly parent factories/фон12–13/пустой mapping не подтверждены";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция СоздатьСвоёРасписание85()
Расписание = Новый РасписаниеЭлементаПланировщика;
Если ТипЗнч(Расписание) <> Тип("РасписаниеЭлементаПланировщика")
Или ТипЗнч(Расписание.ДниНедели) <> Тип("Массив") Или ТипЗнч(Расписание.Месяцы) <> Тип("Массив") Тогда
ВызватьИсключение "Native schedule factory/readonly arrays не подтверждены";
КонецЕсли;
Расписание.ДатаКонца = Дата(2026, 10, 10, 23, 59, 59);
Расписание.КоличествоПовторов = 1;
Расписание.ПериодПовтораДней = 1;
Расписание.ПериодНедель = 0;
Расписание.ПериодМесяцев = 0;
Расписание.ПериодЛет = 0;
Расписание.ДеньВМесяце = 0;
Расписание.ДеньНеделиВМесяце = 0;
Расписание.ДниНедели.Очистить();
Расписание.Месяцы.Очистить();
ПроверитьСвоёРасписание85(Расписание);
Возврат Расписание;
КонецФункции
&НаКлиенте
Процедура ПроверитьСвоёРасписание85(Расписание)
Если ТипЗнч(Расписание) <> Тип("РасписаниеЭлементаПланировщика") Тогда
ВызватьИсключение "Actual item.Schedule не typed native schedule: не угадываем Undefined/default";
КонецЕсли;
Если ТипЗнч(Расписание.ДатаКонца) <> Тип("Дата") Или Расписание.ДатаКонца <> Дата(2026, 10, 10, 23, 59, 59)
Или ТипЗнч(Расписание.КоличествоПовторов) <> Тип("Число") Или Расписание.КоличествоПовторов <> 1
Или ТипЗнч(Расписание.ПериодПовтораДней) <> Тип("Число") Или Расписание.ПериодПовтораДней <> 1
Или ТипЗнч(Расписание.ПериодНедель) <> Тип("Число") Или Расписание.ПериодНедель <> 0
Или ТипЗнч(Расписание.ПериодМесяцев) <> Тип("Число") Или Расписание.ПериодМесяцев <> 0
Или ТипЗнч(Расписание.ПериодЛет) <> Тип("Число") Или Расписание.ПериодЛет <> 0
Или ТипЗнч(Расписание.ДеньВМесяце) <> Тип("Число") Или Расписание.ДеньВМесяце <> 0
Или ТипЗнч(Расписание.ДеньНеделиВМесяце) <> Тип("Число") Или Расписание.ДеньНеделиВМесяце <> 0
Или ТипЗнч(Расписание.ДниНедели) <> Тип("Массив") Или Расписание.ДниНедели.Количество() <> 0
Или ТипЗнч(Расписание.Месяцы) <> Тип("Массив") Или Расписание.Месяцы.Количество() <> 0 Тогда
ВызватьИсключение "Полный actual schedule readback десяти fields/arrays не совпал с own single-day policy";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьЭлемент85(Событие, Ключ, Сумма, Начало, Конец)
Если ТипЗнч(Событие) <> Тип("ЭлементПланировщика") Или ТипЗнч(Событие.Значение) <> Тип("ФиксированнаяСтруктура") Тогда
ВызватьИсключение "Нужен actual native item с собственным typed passport";
КонецЕсли;
Паспорт = Событие.Значение;
Если Паспорт.Количество() <> 3 Или Не Паспорт.Свойство("Ключ85") Или Не Паспорт.Свойство("Сумма85")
Или Не Паспорт.Свойство("Маркер85") Тогда
ВызватьИсключение "Неизвестная структура own element value";
КонецЕсли;
Если ТипЗнч(Паспорт.Ключ85) <> Тип("Строка") Или Паспорт.Ключ85 <> Ключ
Или ТипЗнч(Паспорт.Сумма85) <> Тип("Число") Или Паспорт.Сумма85 <> Сумма
Или Паспорт.Маркер85 <> Маркер85 Или Событие.Текст <> Ключ + " · " + Формат(Сумма, "ЧГ=0;ЧДЦ=0")
Или ТипЗнч(Событие.Начало) <> Тип("Дата") Или Событие.Начало <> Начало
Или ТипЗнч(Событие.Конец) <> Тип("Дата") Или Событие.Конец <> Конец
Или Событие.Родитель <> Неопределено
Или Событие.ДатаЗамещения <> Неопределено Или Событие.Удаленный
Или ТипЗнч(Событие.ЗначенияИзмерений) <> Тип("ФиксированноеСоответствие")
Или Событие.ЗначенияИзмерений.Количество() <> 0 Тогда
ВызватьИсключение "Actual native passport/даты/readonly dimension mapping изменены";
КонецЕсли;
ПроверитьСвоёРасписание85(Событие.Расписание);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСостояние85()
Если Маркер85 <> "6e6d6333-cd13-4e53-9940-23f270fd487c" Или ТипЗнч(КлючЭкземпляра85) <> Тип("УникальныйИдентификатор") Тогда
ВызватьИсключение "Own instance не подтвержден";
КонецЕсли;
ПроверитьПлан85(ПланИсточника85);
ПроверитьПлан85(ПланПриемника85);
Если ПланИсточника85.Элементы.Количество() <> 2 Или ПланИсточника85.Элементы.Получить(0) <> СвойА85
Или ПланИсточника85.Элементы.Получить(1) <> СвойБ85 Тогда
ВызватьИсключение "Два actual own references заменены/переставлены";
КонецЕсли;
Если СвойА85.Начало <> Дата(2026, 10, 10, 9, 0, 0) И СвойА85.Начало <> Дата(2026, 10, 10, 9, 30, 0) Тогда
ВызватьИсключение "Непредусмотренное actual началоA";
КонецЕсли;
ПроверитьЭлемент85(СвойА85, "A", 20, СвойА85.Начало, Дата(2026, 10, 10, 10, 0, 0));
ПроверитьЭлемент85(СвойБ85, "B", 25, Дата(2026, 10, 10, 11, 0, 0), Дата(2026, 10, 10, 12, 0, 0));
Если СвойА85.РежимРазрешенияРедактирования <> РежимРазрешенияРедактированияЭлементаПланировщика.РазрешитьРедактирование
Или СвойБ85.РежимРазрешенияРедактирования <> РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование
Или СвойА85.Действия.Количество() <> 1 Или СвойБ85.Действия.Количество() <> 0 Тогда
ВызватьИсключение "Own editing policies/actions изменены";
КонецЕсли;
Действие = СвойА85.Действия.Найти("read-own-A");
Если ТипЗнч(Действие) <> Тип("ДействиеЭлементаПланировщика") Или Действие.Значение <> "read-own-A"
Или Действие.Текст <> "ПроверитьA" Или Не Действие.Видимость Или Не Действие.Доступность
Или ТипЗнч(Действие.Картинка) <> Тип("Картинка") Тогда
ВызватьИсключение "Actual own action/readback/library picture type изменены";
КонецЕсли;
Если ПланПриемника85.Элементы.Количество() > 1 Тогда
ВызватьИсключение "Приемник допускает только одну собственную копию";
КонецЕсли;
Если ПланПриемника85.Элементы.Количество() = 1 Тогда
Копия = ПланПриемника85.Элементы.Получить(0);
ПроверитьЭлемент85(Копия, "CopyA", 20, Дата(2026, 10, 10, 14, 0, 0), Дата(2026, 10, 10, 14, 30, 0));
Если Копия.РежимРазрешенияРедактирования <> РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование
Или Копия.Действия.Количество() <> 0 Или СвойА85.Начало <> Дата(2026, 10, 10, 9, 30, 0) Тогда
ВызватьИсключение "Actual copy policy/source stage изменены";
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьГотовность85()
Если Остановка85 Или Ожидание85 Или Не Инициализирована85 Тогда
ВызватьИсключение "Fail-stop/ожидание ответа/неинициализированная own форма";
КонецЕсли;
ПроверитьСостояние85();
КонецПроцедуры
&НаКлиенте
Процедура ЗапретСоздания85(Элемент, Начало, Конец, ЗначенияИзмерений, Текст, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Элемент <> Элементы.Источник85 И Элемент <> Элементы.Приемник85 Тогда
ВызватьИсключение "Не own creation control";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗапретУдаления85(Элемент, Отказ)
Отказ = Истина;
Если Элемент <> Элементы.Источник85 И Элемент <> Элементы.Приемник85 Тогда
ВызватьИсключение "Не own deletion control";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗапретРедактора85(Элемент, НовыйЭлемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Элемент <> Элементы.Источник85 И Элемент <> Элементы.Приемник85 Тогда
ВызватьИсключение "Не own full-editor control";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗапретБыстрогоРедактора85(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Элемент <> Элементы.Источник85 И Элемент <> Элементы.Приемник85 Тогда
ВызватьИсключение "Не own quick-editor control";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсточникВнутри85(Элемент, ПараметрыПеретаскивания, ВариантИзмененияГраниц, ДействиеПеретаскивания, Отказ)
Отказ = Истина;
Если Элемент <> Элементы.Источник85 Или Элемент.Имя <> "Источник85" Тогда
ВызватьИсключение "Не own source control";
КонецЕсли;
Попытка
ПроверитьГотовность85();
Если ДействиеПеретаскивания <> ДействиеПеретаскиванияВнутриПланировщика.Редактирование
Или ВариантИзмененияГраниц <> ВариантИзмененияГраницПеретаскиванияВнутриПланировщика.Начало
Или ПланПриемника85.Элементы.Количество() <> 0 Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(ПараметрыПеретаскивания) <> Тип("ФиксированныйМассив") Или ПараметрыПеретаскивания.Количество() <> 1 Тогда
Возврат;
КонецЕсли;
Параметр = ПараметрыПеретаскивания[0];
Если ТипЗнч(Параметр) <> Тип("ПараметрПеретаскиванияВнутриПланировщика") Или Параметр.Элемент <> СвойА85 Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Параметр.Начало) <> Тип("Дата") Или ТипЗнч(Параметр.Конец) <> Тип("Дата")
Или Параметр.Конец <> Дата(2026, 10, 10, 10, 0, 0)
Или Параметр.Начало < Дата(2026, 10, 10, 9, 0, 0) Или Параметр.Начало > Дата(2026, 10, 10, 9, 30, 0)
Или ТипЗнч(Параметр.ЗначенияИзмерений) <> Тип("Соответствие") Или Параметр.ЗначенияИзмерений.Количество() <> 0 Тогда
Возврат;
КонецЕсли;
Параметр.Начало = Дата(2026, 10, 10, 9, 30, 0);
Параметр.ЗначенияИзмерений = Новый Соответствие;
Если Параметр.Начало <> Дата(2026, 10, 10, 9, 30, 0) Или Параметр.Конец <> Дата(2026, 10, 10, 10, 0, 0)
Или Параметр.Элемент <> СвойА85 Или Параметр.ЗначенияИзмерений.Количество() <> 0 Тогда
ВызватьИсключение "Actual proposed values readback не совпал";
КонецЕсли;
Отказ = Ложь;
Статус85 = "Разрешено native изменение только началаA к09:30. Нажмите Проверить после завершения: ожидание90мин/45, не runtime proof.";
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: own inside drag не подтвержден. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПриемникВнутри85(Элемент, ПараметрыПеретаскивания, ВариантИзмененияГраниц, ДействиеПеретаскивания, Отказ)
Отказ = Истина;
Если Элемент <> Элементы.Приемник85 Или Элемент.Имя <> "Приемник85" Тогда
ВызватьИсключение "Не own receiver control";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИсточникНачало85(Элемент, ПараметрыПеретаскивания, Выполнение)
Выполнение = Ложь;
Если Элемент <> Элементы.Источник85 Или Элемент.Имя <> "Источник85" Тогда
ВызватьИсключение "Не own drag source control";
КонецЕсли;
Попытка
ПроверитьГотовность85();
Если ТипЗнч(ПараметрыПеретаскивания) <> Тип("ПараметрыПеретаскивания")
Или СвойА85.Начало <> Дата(2026, 10, 10, 9, 30, 0) Или ПланПриемника85.Элементы.Количество() <> 0
Или Элемент.ВыделенныеЭлементы.Количество() <> 1 Или Элемент.ВыделенныеЭлементы[0] <> СвойА85 Тогда
Возврат;
КонецЕсли;
Перенос85 = Новый ФиксированнаяСтруктура(Новый Структура("Маркер85,Экземпляр85,Элемент85,Начало85,Конец85,Сумма85", Маркер85, КлючЭкземпляра85, СвойА85, СвойА85.Начало, СвойА85.Конец, СвойА85.Значение.Сумма85));
ПараметрыПеретаскивания.Значение = Перенос85;
ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.Копирование;
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
Если ПараметрыПеретаскивания.Значение <> Перенос85
Или ПараметрыПеретаскивания.ДопустимыеДействия <> ДопустимыеДействияПеретаскивания.Копирование
Или ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование Тогда
ВызватьИсключение "Actual native drag payload/actions readback не совпал";
КонецЕсли;
Выполнение = Истина;
Исключение
Остановка85 = Истина;
Перенос85 = Неопределено;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ДопустимаКопия85(ПараметрыПеретаскивания, ДатаПриемника, ЗначенияИзмерений)
Если ТипЗнч(ПараметрыПеретаскивания) <> Тип("ПараметрыПеретаскивания") Или Перенос85 = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
Данные = ПараметрыПеретаскивания.Значение;
Если ТипЗнч(Данные) <> Тип("ФиксированнаяСтруктура") Или Данные <> Перенос85 Или Данные.Количество() <> 6 Тогда
Возврат Ложь;
КонецЕсли;
Если Данные.Маркер85 <> Маркер85 Или Данные.Экземпляр85 <> КлючЭкземпляра85 Или Данные.Элемент85 <> СвойА85
Или Данные.Начало85 <> СвойА85.Начало Или Данные.Конец85 <> СвойА85.Конец Или Данные.Сумма85 <> 20
Или СвойА85.Начало <> Дата(2026, 10, 10, 9, 30, 0) Или СвойА85.Конец - СвойА85.Начало <> 1800
Или ПараметрыПеретаскивания.ДопустимыеДействия <> ДопустимыеДействияПеретаскивания.Копирование
Или ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование И ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Отмена
Или ТипЗнч(ДатаПриемника) <> Тип("Дата") Или ДатаПриемника <> Дата(2026, 10, 10, 14, 0, 0)
Или ТипЗнч(ЗначенияИзмерений) <> Тип("ФиксированноеСоответствие") Или ЗначенияИзмерений.Количество() <> 0
Или ПланПриемника85.Элементы.Количество() <> 0 Тогда
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаКлиенте
Процедура ПриемникПроверка85(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Дата, ЗначенияИзмерений)
СтандартнаяОбработка = Ложь;
Если Элемент <> Элементы.Приемник85 Или Элемент.Имя <> "Приемник85" Тогда
ВызватьИсключение "Не own receiving native control";
КонецЕсли;
Попытка
ПроверитьГотовность85();
Если ТипЗнч(ПараметрыПеретаскивания) <> Тип("ПараметрыПеретаскивания") Тогда
ВызватьИсключение "Unknown native drag-check receiver";
КонецЕсли;
Если Не ДопустимаКопия85(ПараметрыПеретаскивания, Дата, ЗначенияИзмерений) Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование;
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ПриемникПеретаскивание85(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Дата, ЗначенияИзмерений)
СтандартнаяОбработка = Ложь;
Если Элемент <> Элементы.Приемник85 Или Элемент.Имя <> "Приемник85" Тогда
ВызватьИсключение "Не own drop control";
КонецЕсли;
Попытка
ПроверитьГотовность85();
Если ТипЗнч(ПараметрыПеретаскивания) <> Тип("ПараметрыПеретаскивания") Тогда
ВызватьИсключение "Unknown native drop receiver";
КонецЕсли;
Если Не ДопустимаКопия85(ПараметрыПеретаскивания, Дата, ЗначенияИзмерений)
Или ПараметрыПеретаскивания.Действие <> ДействиеПеретаскивания.Копирование Тогда
ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
Возврат;
КонецЕсли;
До = ПолучитьСвойСнимок85();
Кандидат = НовыйПлан85();
Копия = Кандидат.Элементы.Добавить(Дата, Дата + (Перенос85.Конец85 - Перенос85.Начало85));
Копия.Значение = Новый ФиксированнаяСтруктура(Новый Структура("Ключ85,Сумма85,Маркер85", "CopyA", 20, Маркер85));
Копия.Текст = "CopyA · 20";
Копия.Расписание = СоздатьСвоёРасписание85();
Копия.РежимРазрешенияРедактирования = РежимРазрешенияРедактированияЭлементаПланировщика.ЗапретитьРедактирование;
ПроверитьПлан85(Кандидат);
ПроверитьЭлемент85(Копия, "CopyA", 20, Дата, Дата(2026, 10, 10, 14, 30, 0));
Если Кандидат.Элементы.Количество() <> 1 Тогда
ВызватьИсключение "Actual candidate copy count не совпал";
КонецЕсли;
Если ПолучитьСвойСнимок85() <> До Тогда
ВызватьИсключение "Own source изменился до visible assignment";
КонецЕсли;
ПланПриемника85 = Кандидат;
ПроверитьСостояние85();
Если СвойА85.Конец - СвойА85.Начало + СвойБ85.Конец - СвойБ85.Начало <> 5400
Или СвойА85.Значение.Сумма85 + СвойБ85.Значение.Сумма85 <> 45
Или ПланПриемника85.Элементы.Получить(0).Конец - ПланПриемника85.Элементы.Получить(0).Начало <> 1800
Или ПланПриемника85.Элементы.Получить(0).Значение.Сумма85 <> 20 Тогда
ВызватьИсключение "Fresh parent source90мин/45 и copy30мин/20 не подтверждены";
КонецЕсли;
Статус85 = "Actual parent readback: источник90мин/45 не изменен копированием; приемник30мин/20. Внешний вид осмотрите вручную.";
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: возможен partial UI; скрытого восстановления нет. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ИсточникОкончание85(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если Элемент <> Элементы.Источник85 Или Элемент.Имя <> "Источник85" Тогда
ВызватьИсключение "Не own native drag-end control";
КонецЕсли;
Попытка
Если Остановка85 Тогда
ВызватьИсключение "Fail-stop после drag failure";
КонецЕсли;
Если ТипЗнч(ПараметрыПеретаскивания) <> Тип("ПараметрыПеретаскивания") Тогда
ВызватьИсключение "Native DragEnd должен передать настоящий payload object";
КонецЕсли;
ПроверитьСостояние85();
Перенос85 = Неопределено;
Исключение
Остановка85 = Истина;
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура ИсточникДействие85(Элемент, ЭлементПлана, ДействиеЭлемента)
Если Элемент <> Элементы.Источник85 Или Элемент.Имя <> "Источник85" Тогда
ВызватьИсключение "Не own native action control";
КонецЕсли;
Если ЭлементПлана <> СвойА85 Или ДействиеЭлемента <> СвойА85.Действия.Найти("read-own-A") Тогда
ВызватьИсключение "Action/элемент принадлежат не этому own source";
КонецЕсли;
ПоказатьПроверку85();
КонецПроцедуры
&НаКлиенте
Процедура Проверить85(Команда)
Если Команда <> Команды.Проверить85 Или Команда.Имя <> "Проверить85" Тогда
ВызватьИсключение "Нужна собственная form command";
КонецЕсли;
ПоказатьПроверку85();
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьПроверку85()
Попытка
ПроверитьГотовность85();
Минуты = (СвойА85.Конец - СвойА85.Начало + СвойБ85.Конец - СвойБ85.Начало) / 60;
Сумма = СвойА85.Значение.Сумма85 + СвойБ85.Значение.Сумма85;
Статус85 = "Actual источник: " + Формат(Минуты, "ЧГ=0;ЧДЦ=0") + "мин/" + Формат(Сумма, "ЧГ=0;ЧДЦ=0") + "; native приемник строк=" + Формат(ПланПриемника85.Элементы.Количество(), "ЧГ=0;ЧДЦ=0") + ". Ни база, ни сеть не используются.";
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: own actual snapshot не совпал. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Функция ПолучитьСвойСнимок85() Экспорт
Если Остановка85 Или Не Инициализирована85 Тогда
ВызватьИсключение "Own snapshot запрещен после failure/до инициализации";
КонецЕсли;
ПроверитьСостояние85();
Возврат Строка(КлючЭкземпляра85) + "|" + Формат(СвойА85.Начало, "ДФ=yyyyMMddHHmmss")
+ "|" + Формат(СвойА85.Конец, "ДФ=yyyyMMddHHmmss") + "|" + Формат(СвойБ85.Начало, "ДФ=yyyyMMddHHmmss")
+ "|" + Формат(СвойБ85.Конец, "ДФ=yyyyMMddHHmmss") + "|" + Формат(ПланПриемника85.Элементы.Количество(), "ЧГ=0;ЧДЦ=0");
КонецФункции
&НаКлиенте
Процедура Сброс85(Команда)
Если Команда <> Команды.Сброс85 Или Команда.Имя <> "Сброс85" Тогда
ВызватьИсключение "Нужна собственная reset command";
КонецЕсли;
Попытка
ПроверитьГотовность85();
ПланПодтверждение85.ЗапроситьСброс85(ЭтаФорма);
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: reset не продолжать. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаКлиенте
Процедура НачатьОжидание85(Снимок) Экспорт
ПроверитьГотовность85();
Если ТипЗнч(Снимок) <> Тип("Строка") Или ПолучитьСвойСнимок85() <> Снимок Тогда
ВызватьИсключение "Async snapshot до вопроса не совпал";
КонецЕсли;
Ожидание85 = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьСброс85(Снимок, Сбросить) Экспорт
Попытка
Если Остановка85 Или Не Ожидание85 Или ТипЗнч(Сбросить) <> Тип("Булево") Или ПолучитьСвойСнимок85() <> Снимок Тогда
ВызватьИсключение "Async completion не принадлежит ожидаемому actual own state";
КонецЕсли;
Если Сбросить Тогда
СоздатьПланы85();
Статус85 = "Native ответДа: свежие own plans120мин/45, приемник пуст. БД не затронута.";
Иначе
ПроверитьСостояние85();
Если ПолучитьСвойСнимок85() <> Снимок Тогда
ВызватьИсключение "Нет/Отмена должны сохранить actual snapshot";
КонецЕсли;
Статус85 = "Нет/Отмена: actual snapshot не изменен; скрытого reset нет.";
КонецЕсли;
Ожидание85 = Ложь;
Исключение
Остановка85 = Истина;
Статус85 = "СТОП: async completion/partialUI не подтвержден. " + ОписаниеОшибки();
ВызватьИсключение;
КонецПопытки;
КонецПроцедурыПолный metadata command native route
ОбщиеКоманды → УчебныйПлан85 → Модуль команды, целиком
Клиент. Native CommandProcessing563 ровно2 формальных параметра, без control Element.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
#Если ТонкийКлиент Тогда
Если ПараметрКоманды <> Неопределено Или ТипЗнч(ПараметрыВыполненияКоманды) <> Тип("ПараметрыВыполненияКоманды") Тогда
ВызватьИсключение "Нужен настоящий вызов own common metadata command без параметра";
КонецЕсли;
Источник = ПараметрыВыполненияКоманды.Источник;
Если ТипЗнч(Источник) <> Тип("ФормаКлиентскогоПриложения") Или Источник.ИмяФормы <> "ОбщаяФорма.УчебныйЗапускПлана85" Или Не Источник.Открыта() Тогда
ВызватьИсключение "Вызов разрешен только из actual own Hub формы";
КонецЕсли;
Окно = ПараметрыВыполненияКоманды.Окно;
Ключ = ПараметрыВыполненияКоманды.Уникальность;
Дополнительные = ПараметрыВыполненияКоманды.Параметры;
Ссылка = ПараметрыВыполненияКоманды.НавигационнаяСсылка;
Если ТипЗнч(Окно) <> Тип("ОкноКлиентскогоПриложения") Или ТипЗнч(Дополнительные) <> Тип("Структура")
Или Дополнительные.Количество() <> 0 Или ТипЗнч(Ссылка) <> Тип("Строка") Тогда
ВызватьИсключение "Native window/parameters/URL не соответствуют own direct route; не угадываем default";
КонецЕсли;
ПараметрыФормы = Новый Структура("Маркер85", "6e6d6333-cd13-4e53-9940-23f270fd487c");
Форма = ПолучитьФорму("ОбщаяФорма.УчебныйПлан85", ПараметрыФормы, Источник, Ключ, Окно);
Если ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Или Форма.ИмяФормы <> "ОбщаяФорма.УчебныйПлан85"
Или Форма.ВладелецФормы <> Источник Или Форма.Открыта() Тогда
ВызватьИсключение "Нужна новая closed own форма; закрыть прежнюю вручную, не сбрасывать ее скрыто";
КонецЕсли;
Источник.Статус85 = "Actual native command URL длина=" + Формат(СтрДлина(Ссылка), "ЧГ=0;ЧДЦ=0") + "; окно и ключ переданы без изменения. URL не открывается; содержимое не выводится.";
Форма.Открыть();
#Иначе
ВызватьИсключение "Metadata command только для собственного тонкого клиента";
#КонецЕсли
КонецПроцедурыПолный client-only async confirmation
ОбщиеМодули → ПланПодтверждение85 → Модуль, целиком
Неглобальный клиентский общий модуль; actual native ОбщийМодуль.ЭтотОбъект и ShowQuestion completion2.
Процедура ПроверитьФорму85(Форма) Экспорт
#Если ТонкийКлиент Тогда
Если ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Или Форма.ИмяФормы <> "ОбщаяФорма.УчебныйПлан85"
Или Форма.Маркер85 <> "6e6d6333-cd13-4e53-9940-23f270fd487c" Или Форма.Остановка85 Тогда
ВызватьИсключение "Нужна actual собственная живая форма, не чужой calendar";
КонецЕсли;
#Иначе
ВызватьИсключение "Client-only commonmodule не вызывается на сервере";
#КонецЕсли
КонецПроцедуры
Процедура ЗапроситьСброс85(Форма) Экспорт
#Если ТонкийКлиент Тогда
Если ТипЗнч(ЭтотОбъект) <> Тип("ОбщийМодуль") Тогда
ВызватьИсключение "Native commonmodule context не подтвержден";
КонецЕсли;
ЭтотОбъект.ПроверитьФорму85(Форма);
Снимок = Форма.ПолучитьСвойСнимок85();
Форма.НачатьОжидание85(Снимок);
Данные = Новый ФиксированнаяСтруктура(Новый Структура("Форма85,Снимок85", Форма, Снимок));
Оповещение = Новый ОписаниеОповещения("ПослеОтвета85", ЭтотОбъект, Данные);
Если Оповещение.Модуль <> ЭтотОбъект Или Оповещение.ИмяПроцедуры <> "ПослеОтвета85" Тогда
ВызватьИсключение "Actual native callback binding не совпал";
КонецЕсли;
ПоказатьВопрос(Оповещение, "Сбросить только учебную память?", РежимДиалогаВопрос.ДаНет, 0, КодВозвратаДиалога.Нет);
#Иначе
ВызватьИсключение "ЭтотОбъект общего модуля доступен здесь только на клиенте";
#КонецЕсли
КонецПроцедуры
Процедура ПослеОтвета85(Результат, Данные) Экспорт
#Если ТонкийКлиент Тогда
Если ТипЗнч(Данные) <> Тип("ФиксированнаяСтруктура") Или Данные.Количество() <> 2
Или Не Данные.Свойство("Форма85") Или Не Данные.Свойство("Снимок85") Тогда
ВызватьИсключение "Native completion additionalparams не подтверждены";
КонецЕсли;
Форма = Данные.Форма85;
Если ТипЗнч(Форма) <> Тип("ФормаКлиентскогоПриложения") Тогда
ВызватьИсключение "Unknown completion source";
КонецЕсли;
Если Не Форма.Открыта() Тогда
Возврат;
КонецЕсли;
ЭтотОбъект.ПроверитьФорму85(Форма);
Если Результат <> КодВозвратаДиалога.Да И Результат <> КодВозвратаДиалога.Нет И Результат <> КодВозвратаДиалога.Отмена Тогда
ВызватьИсключение "Unexpected native answer: no hidden reset";
КонецЕсли;
Форма.ЗавершитьСброс85(Данные.Снимок85, Результат = КодВозвратаДиалога.Да);
#Иначе
ВызватьИсключение "Native question callback должен быть клиентским";
#КонецЕсли
КонецПроцедурыПолный server-only own environment preflight
ОбщиеМодули → ПланСтенд85 → Модуль, целиком
Server-only, безUI/ЭтотОбъект/client callee, только readonly File/metadata/user проверка.
Процедура ПроверитьСтенд85() Экспорт
Если СтрокаСоединенияИнформационнойБазы() <> "File=""C:\1c-labs\OwnPlannerDrag85_6e6d6333-cd13-4e53-9940-23f270fd487c\IB"";" Тогда
ВызватьИсключение "Нужна точная регистрация собственной новой File ИБ";
КонецЕсли;
Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Текущий = ПользователиИнформационнойБазы.ТекущийПользователь();
Если ТипЗнч(Пользователи) <> Тип("Массив") Или Пользователи.Количество() <> 1 Или Текущий = Неопределено Тогда
ВызватьИсключение "Нужен один собственный учебный пользователь";
КонецЕсли;
Если Пользователи[0].Имя <> "План85Ученик" Или Текущий.УникальныйИдентификатор <> Пользователи[0].УникальныйИдентификатор Тогда
ВызватьИсключение "Пользователь стенда не подтвержден; его UUID не выводится";
КонецЕсли;
Если Метаданные.Документы.Количество() <> 0 Или Метаданные.Справочники.Количество() <> 0
Или Метаданные.Обработки.Количество() <> 0 Или Метаданные.Отчеты.Количество() <> 0
Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0
Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0
Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0
Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0
Или Метаданные.ОбщиеФормы.Количество() <> 2 Или Метаданные.ОбщиеКоманды.Количество() <> 1
Или Метаданные.ОбщиеМодули.Количество() <> 2 Тогда
ВызватьИсключение "Нельзя подменять новый минимальный стенд рабочей конфигурацией";
КонецЕсли;
Если Метаданные.ОбщиеФормы.Найти("УчебныйПлан85") = Неопределено
Или Метаданные.ОбщиеФормы.Найти("УчебныйЗапускПлана85") = Неопределено
Или Метаданные.ОбщиеКоманды.Найти("УчебныйПлан85") = Неопределено
Или Метаданные.ОбщиеМодули.Найти("ПланСтенд85") = Неопределено
Или Метаданные.ОбщиеМодули.Найти("ПланПодтверждение85") = Неопределено Тогда
ВызватьИсключение "Отсутствуют собственные metadata factories урока";
КонецЕсли;
КонецПроцедурыПолный собственный Hub
ОбщиеФормы → УчебныйЗапускПлана85 → Модуль, целиком
Managed server creation2, metadata command panel сформирована вручную.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПланСтенд85.ПроверитьСтенд85();
Если ИмяФормы <> "ОбщаяФорма.УчебныйЗапускПлана85" Тогда
Отказ = Истина;
ВызватьИсключение "Нужен собственный Hub";
КонецЕсли;
Статус85 = "Нажмите native общую команду УчебныйПлан85 в командной панели этой формы.";
КонецПроцедурыПолный native startup ownHub
Конфигурация → Модуль управляемого приложения, целиком
Native OnStart0 в тонком Windows клиенте, не manual call metadata handler.
Процедура ПриНачалеРаботыСистемы()
#Если ТонкийКлиент Тогда
ОткрытьФорму("ОбщаяФорма.УчебныйЗапускПлана85");
#Иначе
ВызватьИсключение "Own workflow только в тонком managed Windows клиенте";
#КонецЕсли
КонецПроцедурыРазбор по шагам
Собственная новаяCF/File/user → actual native Hub → metadata CommandProcessing2 → GetForm5 без RO setters.
Real NewPlanner/Elements.Add2/Actions.Add3 и typed native passportsA20/B25; fresh parent reference/readback, пустые readonly maps и собственный фон.
Настоящий InsideDragCheck4+managedElement: fixedarray/actualA/BeginRW/EndRO/ItemRO/MapRW. Предложение не выдаётся за уже измененный renderer; read actual parent после завершения вручную.
SourceStart2+Element и receiver Check/Drop4+Element: собственный payload/native ref/onlyCopy, кандидат30мин20 → native readback → visible assignment → fresh source90/45 + receiver30/20.
Client-only CommonModule.ThisObject9761 действительно module context ОписаниеОповещения и экспортного native callback2. Да сбрасывает память; Нет/Отмена сохраняет full validated snapshot.
Native callback никогда не вызывается вручную; failures остаются fail-stop, readonlyUnknown/foreign/ref/date/dimensions/action отказ до дальнейшей мутации.
Как проверить результат
Будущий manual initial2events120мин/45, after-left-resize90мин/45, actualCopy1row30мин/20; независимая арифметика в статических тестах не runtimeproof.
Future native Yes→120мин/45+empty receiver; No/Cancel→same actual validated state; Close→memory discarded, без скрытой записи.
Installed raw signatures/context/readonly/enum/factories, все wholemodules и scoped negative mutants проверяются статически. Ни nativeCFcompiler, ни GUI/1С здесь не запускались.
Ожидаемый результат
Ожидается после вашего ручного запуска: собственный memory план120→90мин с неизменными45 и отдельная copy30мин/20. Подготовка/код/статические тесты не являются утверждением фактического runtime результата.
На что обратить внимание
Old ПараметрыФормированияКомандПланировщика deprecated8.3.23 не приобретён из current event678: current native возвращает другой тип. Эта legacy семья не покрывается догадкой.
Command event563 prose упоминает изменение Window/Uniqueness, но точные property7751/7749 объявляют RO. Только читать/передавать; никакого setter.
Planner current item maps FixedMapRO, proposed inside maps MapRW, background maps FixedMapRW — разные контракты. Own fixture dimensionless; чужие измерения не теряются молча.
Native getter/readback typeКартинка не доказывает визуальное совпадение пикселей; наличие места для action и изображение осмотреть вручную. Пустой default picture не выдаётся за libraryimage.
Drag отказ запрещает конкретные native изменения, не откатывает всю форму/ИБ. Receiver assignment/reset не атомарны; partial UI нельзя скрывать.
ExactFile/metadata/own refs/snapshot задают границы конкретного урока, не юридическое доказательство владенияИБ и не синхронизация конкурирующих пользователей.
Native actual param objects не создаются конструкторами. Они приходят из штатных native handlers; ссылка команды не открывается и никаких файлов/сети/DBwrite нет.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.