РежимАвтоВремя.НеИспользовать

Свойства · DontUse

Не использовать установку времени объекта (документа, бизнес-процесса, задачи). Это означает, что если в дате объекта время не нулевое, оно будет сброшено (время - 0:00:00).

Полное описание, параметры и ограничения

РежимАвтоВремя.НеИспользовать (AutoTimeMode.DontUse)

РежимАвтоВремя (AutoTimeMode)

НеИспользовать (DontUse)

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

Описание:
Не использовать установку времени объекта (документа, бизнес-процесса, задачи). Это означает, что если в дате объекта время не нулевое, оно будет сброшено (время - 0:00:00).
Использование в версии:

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

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

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

Применить РежимАвтоВремя.НеИспользовать к собственному объекту

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

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

Основной блок — серверное создание собственной управляемой формы документа. Дополнительный — отдельная клиентская команда той же формы.

Подготовка

  1. В отдельной пустой учебной конфигурации создайте документ УчебнаяОперацияРежимов: строковый номер 12 с автонумерацией, разрешите проведение и оперативное проведение, добавьте Комментарий (Строка 100).

  2. Движений по регистрам у этого собственного документа нет; обработчик проведения для данного опыта не нужен. Пример изучает состояние записи / проведения, а не реализует бухгалтерский учёт.

  3. Создайте у документа управляемую форму УчебнаяФорма: основной реквизит Объект, поля Объект.Дата и Объект.Комментарий. Основной блок — только в её модуле, событие ПриСозданииНаСервере.

  4. В этой форме создайте команду ЗаписатьСвойДокумент и кнопку, назначьте дополнительный клиентский обработчик. Откройте именно новую свою форму без параметра Ключ.

  5. АвтоВремя в установленной справке доступно только для записи. Код его назначает, но не пытается прочитать обратно. Метод формы Записать вызывается без аргумента РежимЗаписиДокумента — это другой контракт.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Объект.Дата = НачалоДня(ТекущаяДата());
    Объект.Комментарий = "Собственная проверка времени записи";
    АвтоВремя = РежимАвтоВремя.НеИспользовать;
    Сообщить("Способ установки времени нового документа: НеИспользовать");
КонецПроцедуры
Та же собственная форма документа: обычная запись через форму
&НаКлиенте
Процедура ЗаписатьСвойДокумент(Команда)
    Если ЭтаФорма.Записать() Тогда
        Сообщить("Собственный документ записан с датой: " + Строка(Объект.Дата));
    Иначе
        Сообщить("Запись отменена");
    КонецЕсли;
КонецПроцедуры

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

  1. Создаём только собственные метаданные и конкретный объект / форму указанного типа.

  2. Назначаем перечисление правильному свойству либо параметру метода.

  3. Проверяем состояние собственного объекта, не интерпретируя синтаксический пример как рабочую учётную операцию.

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

  1. Запишите своей кнопкой и прочитайте фактическую дату сохранённого нового документа.

  2. Режим относится к установке времени при записи нового документа; не обещайте перенумерацию или изменение ранее существовавших документов.

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

Режим использован в настоящем контексте собственного документа или счёта.

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

  1. Не запускайте примеры создания / записи в рабочей базе.

  2. Не смешивайте Записать объекта и Записать формы: состав параметров и возвращаемое значение различаются.

  3. При сборке HTML записи, проведение, отмена проведения и код 1С не исполнялись.

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

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

Новичок вручную готовит отдельную пустую CF, один собственный документ и регистр. На настоящем Объект управляемой формы проверяет время09:30→00:00, native форму Записать(Структура), перепроведение2/200→3/300 без дублей, Прочитать0 и явную передачу своей ссылки в форму-владелец. Это полный учебный процесс, а не пример с неизвестным исходным объектом.

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

1С8.5.1.1343 Windows, тонкий клиент, управляемое приложение, Такси; новая собственная файловая ИБ. MAIN — модуль настоящей managed ФормаДокумента собственного Документ.Уч85Заявка. Серверные и клиентские директивы обязательны. Native extension catalog1649, не ordinary Форма/catalog56. Здесь подготовлены только исходники и статические проверки; 1С/ИБ/движения/UI/сеть не запускались.

Подготовка

  1. Работайте только в собственной Windows VM/учебной среде, не в УТ/КА/УНФ/БП, не в копии рабочей базы с чужими данными. Самостоятельно вручную создайте новую пустую файловую ИБ в C:\1c-labs\OwnManagedDoc85_b369c9c1-6d85-489d-a571-e23297a90d44\IB. Этот урок не создаёт каталоги/ИБ и ничего не скачивает.

  2. Создайте новую CF Уч85УправляемыйДокумент, основной режим запуска Управляемое приложение, интерфейс Такси, платформу8.5.1.1343. Не переносите код в ordinary форму; native Расширение документа здесь означает Расширение формы клиентского приложения для документа.

  3. В этой новой CF вручную создайте роль Уч85Стенд: право Администрирование нужно native ПолучитьПользователей0, чтение/добавление/изменение/проведение только своего Уч85Заявка и чтение/запись Уч85Итоги нужны процессу. Подготовьте единственного собственного пользователя ИБ Уч85Док_b369c9c1 с этой ролью только изолированного стенда, не выдавайте её в рабочих базах. Серверный код получает настоящего аутентифицированного пользователя и массив всех пользователей ИБ, проверяет ровно одного, одинаковые имя и UUID; этот фактический UUID далее сохраняется в своих данных и сверяется перед каждой записью. Вручную подставлять UUID в код не нужно. Не меняйте scope guards для обхода отказа.

  4. UUID b369c9c1-6d85-489d-a571-e23297a90d44 — только метка стенда/пути. Новый UUID сценария создаёт native Новый УникальныйИдентификатор в собственной форме запуска. Действительный UUID пользователя получают из native ТекущийПользователь. Реальный UUID самой ИБ код не измеряет.

  5. Сопоставьте native СтрокаСоединенияИнформационнойБазы() с точным File="C:\1c-labs\OwnManagedDoc85_b369c9c1-6d85-489d-a571-e23297a90d44\IB";. Если реальная строка иная, остановитесь и разберите адрес; не разрешайте Srvr/Ref/production адреса, не заменяйте guard на поиск подстроки.

  6. В CF не должно быть справочников, иных документов, иных регистров, расширений, обменов, фоновых/регламентных заданий, разделителей и данных. Используйте только одну учебную сессию. Guards — ограничения собственного примера, не многопользовательская блокировка и не абсолютная защита от произвольного кода.

  7. В Конфигураторе создайте Документы → Уч85Заявка. Проведение Разрешить, оперативное проведение Запретить, запись движений при проведении Записывать выбранные, удаление движений Автоматически. Номер строковый с автонумерацией; Дата включает дату и время. Оставьте штатные Ссылка/Проведен/ПометкаУдаления, не подменяйте Проведен вручную.

  8. Реквизиты документа: Метка85, Пользователь85, Сценарий85 — Строка36; Количество — Число3,0 неотрицательное; Сумма — Число15,2 неотрицательное. Табличных частей и других реквизитов нет. Для пользовательского UUID подходит именно строка36, не значение из произвольного справочника.

  9. Создайте РегистрНакопления Уч85Итоги, вид Остатки. Измерения Метка85, Пользователь85, Сценарий85 — Строка36; ресурсы Количество Число3,0 и Сумма Число15,2. Единственный регистратор — Документ.Уч85Заявка. На вкладке Движения документа включите ровно этот регистр. Проверяется физическая таблица движений, не виртуальный остаток с неизвестным периодом.

  10. В Документ.Уч85Заявка → Модуль объекта вставьте полностью OBJECT. Native ПередЗаписью(Отказ,РежимЗаписи,РежимПроведения) имеет3 параметра; ОбработкаПроведения(Отказ,РежимПроведения)2. Эти события вызывает сама платформа при записи; вручную их никогда не вызывайте. Amount считается до записи объекта, движения формируются внутри штатной транзакции проведения.

  11. Создайте Общий модуль Уч85ДокСтенд: Сервер=True, Вызов сервера=True, Клиент управляемого приложения=False, Глобальный=False, Привилегированный=False, Повторное использование возвращаемых значений Не использовать. Вставьте полностью SERVER. Модуль не создаёт/записывает/удаляет объекты: он проверяет адрес, пользователя, metadata и собственный readback.

  12. Мастером Документ.Уч85Заявка → Формы создайте управляемую ФормаДокумента и назначьте её основной формой документа. Основной реквизит Объект должен иметь тип ДокументОбъект.Уч85Заявка. Именно эта metadata даёт native extension. Не создавайте расширение через Новый и не переименовывайте общую форму/переменную в документ ради совпадения имени.

  13. В ФормаДокумента создайте параметр Сценарий85 Строка36. Native РежимВыбора и ПараметрыВыбора не дублируйте custom реквизитами: при открытии ПараметрыВыбора принимает Структура, одноимённое native свойство формы принимает ФиксированнаяСтруктура. Ключ в этом запуске отсутствует сознательно — native создаёт новый документ; чужой Ключ не передаётся.

  14. Дополнительные реквизиты ФормаДокумента: Сценарий85 Строка36, СвояСсылка85 ДокументСсылка.Уч85Заявка, Этап85 Число1,0, НеизвестныйИсход85/ОтправкаНачата85/СогласиеНаСвоиДвеЗаписи85/СогласиеНаСбросСвоих99 Булево, Статус85 Строка500, Навигация85 Строка1000. Для этих дополнительных реквизитов СохраняемыеДанные=False: они только состояние формы, не изменяемые сохраняемые данные документа. Поля Объект.Дата/Количество/Сумма, статус и навигация — ТолькоПросмотр=True; согласия — обычные флажки. Этап/ссылку/UUID/flags пользователю не редактировать.

  15. В модуль ФормаДокумента вставьте полностью MAIN/FORM. В свойствах формы события ПриСозданииНаСервере → ПриСозданииНаСервере2; ПередЗаписьюНаСервере → ПередЗаписьюНаСервере3. Клиентские document ПередЗаписью2 и ПослеЗаписи1 не назначайте: в них запрещены вызовы серверных методов формы. Не копируйте object ПередЗаписью3 в client событие с2 параметрами.

  16. Создайте команды ФормаДокумента ПервоеПроведение85, Перепроведение85, ПеречитатьСвою85, ПодготовитьВыбор85, ПередатьСвоюСсылку85. Каждая Действие=одноимённая процедура(Команда), кнопка Тип=КнопкаФормы, ИмяКоманды=эта команда. Кнопки расположите в указанном порядке; стандартные Записать/Провести/ПровестиИЗакрыть/ОтменаПроведения не показывайте. Server event дополнительно запрещает стандартную запись вне подготовленной команды.

  17. Создайте ОбщаяФорма.Уч85ДокЗапуск, управляемая общая форма без основного прикладного реквизита. Её реквизиты: Статус85 Строка500, ВыбраннаяЗаявка85 ДокументСсылка.Уч85Заявка, Навигация85 Строка1000. Все3 СохраняемыеДанные=False и только для просмотра. Добавьте команду СоздатьСвоюЗаявку85 с одноимённым действием(Команда) и кнопкой этой команды. Не добавляйте поле выбора другого документа.

  18. В Уч85ДокЗапуск вставьте полностью LAUNCHER. События формы: ПриСозданииНаСервере2 и ОбработкаВыбора(ВыбранноеЗначение,ИсточникВыбора)2. Это событие владельца-формы, НЕ одноимённое событие поля ввода с другим набором параметров. ПодготовитьПрием85 — собственная экспортная процедура, не native callback.

  19. В Модуль управляемого приложения вставьте полностью APPLICATION и назначьте native ПриНачалеРаботыСистемы без параметров. Вначале он проверяет пустоту собственного стенда и только затем открывает свою общую форму. Компиляцию CF и запуск нового собственного клиента выполните вручную; здесь это не выполнялось.

  20. Перед первым запуском проверьте вручную: документная таблица пуста, регистр пуст, одна сессия, единственный нужный пользователь/адрес/вкладка Движения, текущая CF именно своя. Не переносите данные и не выполняйте автоматическое удаление/rollback/очистку после урока. После завершения сохранённый собственный документ остаётся в стенде; повторный старт намеренно остановится.

  21. Native АвтоВремя только для записи: setter НеИспользовать сбрасывает ненулевое время нового документа в00:00; это НЕ сохранение09:30. Native ИспользоватьРежимПроведения и ПриЗаписиПерепроводить на клиенте только чтение, поэтому setters находятся только в серверном ПриСозданииНаСервере.

  22. Native ПараметрыВыбора не документирует универсальную грамматику фильтров. Наши3 ключа — явная прикладная проверка равенства собственной метки, UUID и количества3; не используйте её для незнакомых форм/условий/провайдеров. ВыборДоступен приложение вычисляет после независимого readback.

  23. Путь передачи выбора явный: реальная своя форма-владелец хранит actual child-instance, UUID и подготовленный ownDocRef; child выключает РежимВыбора перед native ОповеститьОВыборе(ownDocRef), которое уведомляет владельца и закрывает по ЗакрыватьПриВыборе=True. Это не утверждение, что default ChoiceMode всегда возвращает DocRef: default native закрытие передаёт произвольный основной реквизит.

  24. Если CF не компилируется, raw native property/handler не совпадает или native Записать не даёт ожидаемого результата — остановите ручной протокол и покажите точную ошибку. Не заменяйте реальные данные ожидаемыми числами, не вызывайте Posting вручную и не ослабляйте guards. Статические тесты ниже не являются запуском1С.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Паспорт = Уч85ДокСтенд.ПроверитьПустойСтенд85();
    ЗначениеСценария = Неопределено;
    ЗначениеКритериев = Неопределено;
    ЗначениеРежима = Неопределено;
    Если Не Параметры.Свойство("Сценарий85", ЗначениеСценария)
        Или Не Параметры.Свойство("ПараметрыВыбора", ЗначениеКритериев)
        Или Не Параметры.Свойство("РежимВыбора", ЗначениеРежима) Тогда
        Отказ = Истина;
        ВызватьИсключение "Форму открывает только собственная учебная форма-владелец с полными параметрами.";
    КонецЕсли;
    Уч85ДокСтенд.ПроверитьСценарий85(ЗначениеСценария);
    Если ТипЗнч(ЗначениеКритериев) <> Тип("Структура") Или ЗначениеРежима <> Ложь Тогда
        Отказ = Истина;
        ВызватьИсключение "Параметр ПараметрыВыбора — Структура; новая заявка ещё не открывается для выбора.";
    КонецЕсли;
    Сценарий85 = ЗначениеСценария;
    ЭтаФорма.ПараметрыВыбора = Новый ФиксированнаяСтруктура(ЗначениеКритериев);
    ПроверитьКритерии85();
    Заявка = ЭтаФорма.РеквизитФормыВЗначение("Объект");
    Если ТипЗнч(Заявка) <> Тип("ДокументОбъект.Уч85Заявка") Или Не Заявка.ЭтоНовый() Тогда
        Отказ = Истина;
        ВызватьИсключение "Ожидается новая настоящая форма собственного документа с основным реквизитом Объект.";
    КонецЕсли;
    Объект.Метка85 = Паспорт.Метка;
    Объект.Пользователь85 = Паспорт.Пользователь;
    Объект.Сценарий85 = Сценарий85;
    Объект.Дата = Дата(2026, 1, 2, 9, 30, 0);
    Объект.Количество = 2;
    Объект.Сумма = 200;
    ЭтаФорма.АвтоВремя = РежимАвтоВремя.НеИспользовать;
    ЭтаФорма.ИспользоватьРежимПроведения = ИспользованиеРежимаПроведения.Неоперативный;
    ЭтаФорма.ПриЗаписиПерепроводить = Истина;
    ЭтаФорма.РежимВыбора = Ложь;
    ЭтаФорма.ВыборДоступен = Ложь;
    ЭтаФорма.ЗакрыватьПриВыборе = Истина;
    Этап85 = 0;
    НеизвестныйИсход85 = Ложь;
    ОтправкаНачата85 = Ложь;
    Статус85 = "Подготовлена своя новая заявка2/200; дата09:30 ещё не записана.";
КонецПроцедуры

&НаСервере
Процедура ПроверитьКритерии85()
    Критерии = ЭтаФорма.ПараметрыВыбора;
    Если ТипЗнч(Критерии) <> Тип("ФиксированнаяСтруктура") Или Критерии.Количество() <> 3
        Или Критерии.Метка85 <> "b369c9c1-6d85-489d-a571-e23297a90d44"
        Или Критерии.Сценарий85 <> Сценарий85 Или Критерии.Количество <> 3 Тогда
        ВызватьИсключение "Изменены точные собственные критерии: метка, UUID сценария, количество3.";
    КонецЕсли;
КонецПроцедуры

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

&НаКлиенте
Процедура ПервоеПроведение85(Команда)
    Если Не СогласиеНаСвоиДвеЗаписи85 Или Этап85 <> 0 Или НеизвестныйИсход85 Или ОтправкаНачата85 Тогда
        ВызватьИсключение "Нужно явное согласие на две учебные записи в новой собственной базе; повтор запрещён.";
    КонецЕсли;
    Если Объект.Количество <> 2 Или Объект.Сумма <> 200
        Или Объект.Дата <> Дата(2026, 1, 2, 9, 30, 0)
        Или ЭтаФорма.ИспользоватьРежимПроведения <> ИспользованиеРежимаПроведения.Неоперативный
        Или Не ЭтаФорма.ПриЗаписиПерепроводить Тогда
        ВызватьИсключение "Начальные собственные данные или read-only клиентские свойства изменены.";
    КонецЕсли;
    ПараметрыЗаписи = Новый Структура("РежимЗаписи,РежимПроведения", РежимЗаписиДокумента.Проведение, РежимПроведенияДокумента.Неоперативный);
    НеизвестныйИсход85 = Истина;
    Если Не ЭтаФорма.Записать(ПараметрыЗаписи) Тогда
        ВызватьИсключение "Форма вернула Ложь. Исход отдельно проверяет человек; автоматического повтора нет.";
    КонецЕсли;
    Паспорт = ПодтвердитьСвоюЗапись85(2, 200);
    СвояСсылка85 = Паспорт.Ссылка;
    Этап85 = 1;
    НеизвестныйИсход85 = Ложь;
    ЭтаФорма.ВыборДоступен = Ложь;
    Статус85 = "Readback: свой документ2/200, дата00:00, ровно одно реальное движение2/200.";
КонецПроцедуры

&НаКлиенте
Процедура Перепроведение85(Команда)
    Если Этап85 <> 1 Или НеизвестныйИсход85 Или ОтправкаНачата85
        Или Объект.Ссылка <> СвояСсылка85 Или Объект.Количество <> 2 Или Объект.Сумма <> 200 Тогда
        ВызватьИсключение "Нет точного собственного состояния после первого успешного проведения.";
    КонецЕсли;
    ПодтвердитьСвоюЗапись85(2, 200);
    Объект.Количество = 3;
    ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Запись);
    НеизвестныйИсход85 = Истина;
    Если Не ЭтаФорма.Записать(ПараметрыЗаписи) Тогда
        ВызватьИсключение "Обычная запись формы вернула Ложь; нельзя слепо переписывать или повторять.";
    КонецЕсли;
    ПодтвердитьСвоюЗапись85(3, 300);
    Этап85 = 2;
    НеизвестныйИсход85 = Ложь;
    ЭтаФорма.ВыборДоступен = Истина;
    Статус85 = "Readback3/300: перепроведение заменило собственное движение, не добавило второе5/500.";
КонецПроцедуры

&НаСервере
Функция ПодтвердитьСвоюЗапись85(Количество, Сумма)
    ПроверитьКритерии85();
    Если Объект.Сценарий85 <> Сценарий85 Или (Этап85 > 0 И Объект.Ссылка <> СвояСсылка85) Тогда
        ВызватьИсключение "Ссылка или UUID данных формы изменены.";
    КонецЕсли;
    Паспорт = Уч85ДокСтенд.ПаспортСвоейЗаявки85(Объект.Ссылка, Сценарий85, Количество, Сумма);
    Если Объект.Количество <> Паспорт.Количество Или Объект.Сумма <> Паспорт.Сумма
        Или Объект.Дата <> Паспорт.Дата Или Не Объект.Проведен Тогда
        ВызватьИсключение "Данные реальной управляемой формы не совпали с независимым чтением базы.";
    КонецЕсли;
    Возврат Паспорт;
КонецФункции

&НаКлиенте
Процедура ПеречитатьСвою85(Команда)
    Если Этап85 <> 2 Или НеизвестныйИсход85 Или ОтправкаНачата85 Или Не СогласиеНаСбросСвоих99 Тогда
        ВызватьИсключение "Нужно явное согласие потерять только намеренно введённые собственные99, без записи.";
    КонецЕсли;
    ПодтвердитьСвоюЗапись85(3, 300);
    Объект.Количество = 99;
    Если Объект.Ссылка <> СвояСсылка85 Или Объект.Количество <> 99 Тогда
        ВызватьИсключение "Изменено не собственное ожидаемое поле.";
    КонецЕсли;
    НеизвестныйИсход85 = Истина;
    ЭтаФорма.Прочитать();
    ПодтвердитьСвоюЗапись85(3, 300);
    Этап85 = 3;
    НеизвестныйИсход85 = Ложь;
    Статус85 = "Native Прочитать() восстановило своё сохранённое3/300; движения остались ровно одни.";
КонецПроцедуры

&НаКлиенте
Процедура ПодготовитьВыбор85(Команда)
    Если Этап85 <> 3 Или НеизвестныйИсход85 Или ОтправкаНачата85 Тогда
        ВызватьИсключение "Сначала нужны обе записи и явное native перечитывание своего документа.";
    КонецЕсли;
    Паспорт = ПодтвердитьСвоюЗапись85(3, 300);
    Навигация85 = ЭтаФорма.ПолучитьНавигационнуюСсылкуОбъекта();
    Если Навигация85 <> Паспорт.Навигация Или ПустаяСтрока(Навигация85)
        Или Объект.Ссылка <> СвояСсылка85 Тогда
        ВызватьИсключение "Внутренняя навигационная строка не совпала с именно своей сохранённой ссылкой.";
    КонецЕсли;
    ЭтаФорма.РежимВыбора = Истина;
    ЭтаФорма.ВыборДоступен = Объект.Метка85 = ЭтаФорма.ПараметрыВыбора.Метка85
        И Объект.Сценарий85 = ЭтаФорма.ПараметрыВыбора.Сценарий85
        И Объект.Количество = ЭтаФорма.ПараметрыВыбора.Количество;
    Если Не ЭтаФорма.РежимВыбора Или Не ЭтаФорма.ВыборДоступен Тогда
        ВызватьИсключение "Собственные критерии выбора не выполнены.";
    КонецЕсли;
    Этап85 = 4;
    Статус85 = "Готов явный выбор своей сохранённой заявки3/300. Ссылка показана текстом, не открывается.";
КонецПроцедуры

&НаКлиенте
Процедура ПередатьСвоюСсылку85(Команда)
    Если Этап85 <> 4 Или НеизвестныйИсход85 Или ОтправкаНачата85
        Или Не ЭтаФорма.РежимВыбора Или Не ЭтаФорма.ВыборДоступен
        Или Не ЭтаФорма.ЗакрыватьПриВыборе Или Объект.Ссылка <> СвояСсылка85 Тогда
        ВызватьИсключение "Выбор разрешён один раз, только из своей подготовленной формы.";
    КонецЕсли;
    Паспорт = ПодтвердитьСвоюЗапись85(3, 300);
    Если Навигация85 <> Паспорт.Навигация
        Или ЭтаФорма.ПолучитьНавигационнуюСсылкуОбъекта() <> Навигация85 Тогда
        ВызватьИсключение "Навигационная строка собственного документа изменена.";
    КонецЕсли;
    ОтправкаНачата85 = Истина;
    ЭтаФорма.ВладелецФормы.ПодготовитьПрием85(ЭтаФорма, СвояСсылка85, Сценарий85, Навигация85);
    ЭтаФорма.РежимВыбора = Ложь;
    Если ЭтаФорма.РежимВыбора Или Не ЭтаФорма.ЗакрыватьПриВыборе Тогда
        ВызватьИсключение "Сбой подготовки явной передачи без стандартного ChoiceMode при закрытии.";
    КонецЕсли;
    ЭтаФорма.ОповеститьОВыборе(СвояСсылка85);
КонецПроцедуры
SERVER — полный серверный паспорт собственного стенда и независимые запросы

Своя новая CF → Общие → Общие модули → Уч85ДокСтенд → Модуль.

Общий модуль Сервер=True/ВызовСервера=True, не глобальный/не привилегированный. Проверка exact ownFileIB/currentIBUserUUID/metadata/record count и чтение только своей ссылки/UUID; native DB calls только в authoredsource.

Функция ПаспортСтенда85() Экспорт
    ОжидаемоеСоединение = "File=""C:\1c-labs\OwnManagedDoc85_b369c9c1-6d85-489d-a571-e23297a90d44\IB"";";
    Если СтрокаСоединенияИнформационнойБазы() <> ОжидаемоеСоединение Тогда
        ВызватьИсключение "Разрешена только новая собственная файловая учебная база с точным путём.";
    КонецЕсли;
    Если Метаданные.Документы.Количество() <> 1
        Или Метаданные.Документы.Найти("Уч85Заявка") = Неопределено
        Или Метаданные.РегистрыНакопления.Количество() <> 1
        Или Метаданные.РегистрыНакопления.Найти("Уч85Итоги") = Неопределено
        Или Метаданные.Справочники.Количество() <> 0
        Или Метаданные.РегистрыСведений.Количество() <> 0
        Или Метаданные.РегистрыБухгалтерии.Количество() <> 0
        Или Метаданные.РегистрыРасчета.Количество() <> 0 Тогда
        ВызватьИсключение "Стенд должен содержать только свой документ и один свой регистр накопления.";
    КонецЕсли;
    МДДокумента = Метаданные.Документы.Уч85Заявка;
    МДРегистра = Метаданные.РегистрыНакопления.Уч85Итоги;
    Если МДДокумента.Проведение <> Метаданные.СвойстваОбъектов.Проведение.Разрешить
        Или МДДокумента.ОперативноеПроведение <> Метаданные.СвойстваОбъектов.ОперативноеПроведение.Запретить
        Или МДДокумента.УдалениеДвижений <> Метаданные.СвойстваОбъектов.УдалениеДвижений.УдалятьАвтоматически
        Или МДДокумента.ЗаписьДвиженийПриПроведении <> Метаданные.СвойстваОбъектов.ЗаписьДвиженийПриПроведении.ЗаписыватьВыбранные
        Или МДРегистра.ВидРегистра <> Метаданные.СвойстваОбъектов.ВидРегистраНакопления.Остатки
        Или МДДокумента.Движения.Количество() <> 1 Или Не МДДокумента.Движения.Содержит(МДРегистра) Тогда
        ВызватьИсключение "Реальные read-only metadata проведения, записи, удаления и включённого своего регистра изменены.";
    КонецЕсли;
    Пользователь = ПользователиИнформационнойБазы.ТекущийПользователь();
    Пользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
    Если Пользователь = Неопределено Или Пользователи.Количество() <> 1 Тогда
        ВызватьИсключение "Нужен единственный реальный пользователь новой своей учебной базы.";
    КонецЕсли;
    Если Пользователь.Имя <> "Уч85Док_b369c9c1"
        Или Пользователи[0].Имя <> Пользователь.Имя
        Или Пользователи[0].УникальныйИдентификатор <> Пользователь.УникальныйИдентификатор Тогда
        ВызватьИсключение "UUID аутентифицированного пользователя не совпал с единственным настоящим пользователем ИБ, не UUID пути.";
    КонецЕсли;
    Возврат Новый Структура("Метка,Пользователь", "b369c9c1-6d85-489d-a571-e23297a90d44", Строка(Пользователь.УникальныйИдентификатор));
КонецФункции

Функция КоличествоЗаписей85(ИмяТаблицы)
    Если ИмяТаблицы <> "Документ.Уч85Заявка" И ИмяТаблицы <> "РегистрНакопления.Уч85Итоги" Тогда
        ВызватьИсключение "Запрещена произвольная таблица запроса.";
    КонецЕсли;
    Запрос = Новый Запрос("ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Число ИЗ " + ИмяТаблицы);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Не Выборка.Следующий() Тогда
        ВызватьИсключение "Нет строки результата подсчёта.";
    КонецЕсли;
    Возврат Выборка.Число;
КонецФункции

Процедура ПроверитьСценарий85(Сценарий) Экспорт
    Если ТипЗнч(Сценарий) <> Тип("Строка") Или СтрДлина(Сценарий) <> 36 Тогда
        ВызватьИсключение "Сценарий должен быть строкой настоящего нового UUID.";
    КонецЕсли;
    Идентификатор = Новый УникальныйИдентификатор(Сценарий);
    Если НРег(Строка(Идентификатор)) <> НРег(Сценарий) Тогда
        ВызватьИсключение "Недопустимый UUID сценария.";
    КонецЕсли;
КонецПроцедуры

Функция ПроверитьПустойСтенд85() Экспорт
    Паспорт = ПаспортСтенда85();
    Если КоличествоЗаписей85("Документ.Уч85Заявка") <> 0
        Или КоличествоЗаписей85("РегистрНакопления.Уч85Итоги") <> 0 Тогда
        ВызватьИсключение "Стенд не пуст. Повторное создание, очистка и перезапись не выполняются.";
    КонецЕсли;
    Возврат Паспорт;
КонецФункции

Процедура ПроверитьСвойОбъект85(Заявка) Экспорт
    Паспорт = ПаспортСтенда85();
    Если ТипЗнч(Заявка) <> Тип("ДокументОбъект.Уч85Заявка") Тогда
        ВызватьИсключение "Ожидается реальный объект собственного документа, а не данные формы или чужой объект.";
    КонецЕсли;
    ПроверитьСценарий85(Заявка.Сценарий85);
    Если Заявка.Метка85 <> Паспорт.Метка Или Заявка.Пользователь85 <> Паспорт.Пользователь
        Или Заявка.ПометкаУдаления Или (Заявка.Количество <> 2 И Заявка.Количество <> 3) Тогда
        ВызватьИсключение "Не совпали собственные данные, пользователь или допустимое количество.";
    КонецЕсли;
КонецПроцедуры

Процедура ПроверитьПередЗаписью85(Заявка, ПроверятьДвижения = Истина) Экспорт
    ПроверитьСвойОбъект85(Заявка);
    Если Заявка.Сумма <> 200 Тогда
        ВызватьИсключение "Изменена исходная собственная сумма200; до записи её не исправляем молча.";
    КонецЕсли;
    Если Заявка.ЭтоНовый() Тогда
        ПроверитьПустойСтенд85();
        Если Заявка.Количество <> 2 Или Заявка.Проведен
            Или (Заявка.Дата <> Дата(2026, 1, 2, 9, 30, 0) И Заявка.Дата <> Дата(2026, 1, 2)) Тогда
            ВызватьИсключение "Новый документ изменён относительно собственной подготовки.";
        КонецЕсли;
    Иначе
        Если ПроверятьДвижения Тогда
            ПаспортСвоейЗаявки85(Заявка.Ссылка, Заявка.Сценарий85, 2, 200);
        Иначе
            ПаспортДокумента85(Заявка.Ссылка, Заявка.Сценарий85, 2, 200);
        КонецЕсли;
        Если Заявка.Количество <> 3 Или Заявка.Дата <> Дата(2026, 1, 2)
            Или Не Заявка.Проведен Тогда
            ВызватьИсключение "Разрешено только одно изменение собственной проведённой заявки 2→3.";
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Функция ПаспортДокумента85(Ссылка, Сценарий, Количество, Сумма)
    Паспорт = ПаспортСтенда85();
    ПроверитьСценарий85(Сценарий);
    Если ТипЗнч(Ссылка) <> Тип("ДокументСсылка.Уч85Заявка") Или Ссылка.Пустая()
        Или (Количество <> 2 И Количество <> 3) Или Сумма <> Количество * 100 Тогда
        ВызватьИсключение "Недопустимый собственный ожидаемый паспорт.";
    КонецЕсли;
    Если КоличествоЗаписей85("Документ.Уч85Заявка") <> 1 Тогда
        ВызватьИсключение "В стенде должна быть ровно одна собственная заявка.";
    КонецЕсли;
    Запрос = Новый Запрос(
        "ВЫБРАТЬ З.Ссылка, З.Дата, З.Количество, З.Сумма, З.Проведен, З.ПометкаУдаления,
        | З.Метка85, З.Пользователь85, З.Сценарий85
        |ИЗ Документ.Уч85Заявка КАК З
        |ГДЕ З.Ссылка = &Ссылка И З.Метка85 = &Метка
        | И З.Пользователь85 = &Пользователь И З.Сценарий85 = &Сценарий");
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("Метка", Паспорт.Метка);
    Запрос.УстановитьПараметр("Пользователь", Паспорт.Пользователь);
    Запрос.УстановитьПараметр("Сценарий", Сценарий);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Не Выборка.Следующий() Тогда
        ВызватьИсключение "Своя сохранённая заявка с точными UUID не найдена.";
    КонецЕсли;
    Если Выборка.Дата <> Дата(2026, 1, 2) Или Выборка.Количество <> Количество
        Или Выборка.Сумма <> Сумма Или Не Выборка.Проведен Или Выборка.ПометкаУдаления Тогда
        ВызватьИсключение "Независимый readback документа не совпал: время00:00, количество, сумма, проведение.";
    КонецЕсли;
    Если Выборка.Следующий() Тогда
        ВызватьИсключение "Неожиданный дубль документа.";
    КонецЕсли;
    Возврат Новый Структура("Ссылка,Сценарий,Количество,Сумма,Дата,Навигация", Ссылка, Сценарий, Количество, Сумма, Дата(2026, 1, 2), ПолучитьНавигационнуюСсылку(Ссылка));
КонецФункции

Функция ПаспортСвоейЗаявки85(Ссылка, Сценарий, Количество, Сумма) Экспорт
    Документ = ПаспортДокумента85(Ссылка, Сценарий, Количество, Сумма);
    Паспорт = ПаспортСтенда85();
    Если КоличествоЗаписей85("РегистрНакопления.Уч85Итоги") <> 1 Тогда
        ВызватьИсключение "В стенде должно быть ровно одно движение, не дубли и не5/500.";
    КонецЕсли;
    Движения = Новый Запрос(
        "ВЫБРАТЬ Д.Регистратор, Д.Период, Д.Активность, Д.ВидДвижения, Д.Количество, Д.Сумма
        |ИЗ РегистрНакопления.Уч85Итоги КАК Д
        |ГДЕ Д.Регистратор = &Ссылка И Д.Метка85 = &Метка
        | И Д.Пользователь85 = &Пользователь И Д.Сценарий85 = &Сценарий");
    Движения.УстановитьПараметр("Ссылка", Ссылка);
    Движения.УстановитьПараметр("Метка", Паспорт.Метка);
    Движения.УстановитьПараметр("Пользователь", Паспорт.Пользователь);
    Движения.УстановитьПараметр("Сценарий", Сценарий);
    СтрокаДвижения = Движения.Выполнить().Выбрать();
    Если Не СтрокаДвижения.Следующий() Тогда
        ВызватьИсключение "Нет собственного движения native ОбработкаПроведения.";
    КонецЕсли;
    Если СтрокаДвижения.Регистратор <> Ссылка Или СтрокаДвижения.Период <> Дата(2026, 1, 2)
        Или Не СтрокаДвижения.Активность Или СтрокаДвижения.ВидДвижения <> ВидДвиженияНакопления.Приход
        Или СтрокаДвижения.Количество <> Количество Или СтрокаДвижения.Сумма <> Сумма Тогда
        ВызватьИсключение "Реальное движение не заменено на ожидаемые собственные 2/200 или3/300.";
    КонецЕсли;
    Если СтрокаДвижения.Следующий() Тогда
        ВызватьИсключение "Движение продублировано: вместо замены получено накопление.";
    КонецЕсли;
    Возврат Документ;
КонецФункции
OBJECT — полный модуль собственного документа и реальные движения

Своя новая CF → Документы → Уч85Заявка → Модуль объекта.

Модуль объекта собственный Документ.Уч85Заявка; native ПередЗаписью3/ОбработкаПроведения2 на сервере в транзакции. Пишет только собственные движения включённого Уч85Итоги; здесь не исполнялся.

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

Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    Уч85ДокСтенд.ПроверитьСвойОбъект85(ЭтотОбъект);
    Если РежимПроведения <> РежимПроведенияДокумента.Неоперативный
        Или Дата <> Дата(2026, 1, 2) Или Сумма <> Количество * 100
        Или Движения.Уч85Итоги.Количество() <> 0 Тогда
        Отказ = Истина;
        ВызватьИсключение "Неверный режим, дата, сумма или непустой подготовленный набор своих движений.";
    КонецЕсли;
    Движения.Уч85Итоги.Записывать = Истина;
    Движение = Движения.Уч85Итоги.Добавить();
    Движение.Период = Дата;
    Движение.Активность = Истина;
    Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
    Движение.Метка85 = Метка85;
    Движение.Пользователь85 = Пользователь85;
    Движение.Сценарий85 = Сценарий85;
    Движение.Количество = Количество;
    Движение.Сумма = Сумма;
КонецПроцедуры
LAUNCHER — полная собственная managed форма-владелец

Своя новая CF → Общие → Общие формы → Уч85ДокЗапуск → Модуль.

Общая managed форма, own GetForm factory/actual child-instance и native generic owner ОбработкаВыбора2. Не input-field handler; server OnCreate2 и client one-shot reception.

Перем СвояФорма85;
Перем ЗапускНачат85;
Перем ПриемПодготовлен85;
Перем ПриемНачат85;
Перем ОжидаемаяСсылка85;
Перем ОжидаемыйСценарий85;
Перем ОжидаемаяНавигация85;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Уч85ДокСтенд.ПроверитьПустойСтенд85();
    Статус85 = "Своя новая пустая база подтверждена; создание и две записи требуют согласия в форме документа.";
КонецПроцедуры

&НаКлиенте
Процедура СоздатьСвоюЗаявку85(Команда)
    Если ЗапускНачат85 = Истина Тогда
        ВызватьИсключение "Урок запускается один раз. Другой объект не создаём и не ищем чужие формы.";
    КонецЕсли;
    Уч85ДокСтенд.ПроверитьПустойСтенд85();
    ЗапускНачат85 = Истина;
    ПриемПодготовлен85 = Ложь;
    ПриемНачат85 = Ложь;
    Идентификатор = Новый УникальныйИдентификатор;
    ОжидаемыйСценарий85 = Строка(Идентификатор);
    Критерии = Новый Структура("Метка85,Сценарий85,Количество", "b369c9c1-6d85-489d-a571-e23297a90d44", ОжидаемыйСценарий85, 3);
    ПараметрыФормы = Новый Структура("Сценарий85,ПараметрыВыбора,РежимВыбора", ОжидаемыйСценарий85, Критерии, Ложь);
    СвояФорма85 = ПолучитьФорму("Документ.Уч85Заявка.Форма.ФормаДокумента", ПараметрыФормы, ЭтаФорма, Истина);
    Если СвояФорма85 = Неопределено Или ТипЗнч(СвояФорма85) <> Тип("ФормаКлиентскогоПриложения")
        Или СвояФорма85.ВладелецФормы <> ЭтаФорма Тогда
        ВызватьИсключение "Не получена собственная новая managed форма документа с этим реальным владельцем.";
    КонецЕсли;
    СвояФорма85.Открыть();
КонецПроцедуры

&НаКлиенте
Процедура ПодготовитьПрием85(Источник, Ссылка, Сценарий, Навигация) Экспорт
    Если СвояФорма85 = Неопределено Или Источник <> СвояФорма85
        Или ПриемПодготовлен85 = Истина Или ПриемНачат85 = Истина Или Сценарий <> ОжидаемыйСценарий85
        Или ТипЗнч(Ссылка) <> Тип("ДокументСсылка.Уч85Заявка") Тогда
        ВызватьИсключение "Подготовка приёма допустима только от единственного своего child-instance и UUID.";
    КонецЕсли;
    Паспорт = Уч85ДокСтенд.ПаспортСвоейЗаявки85(Ссылка, Сценарий, 3, 300);
    Если Навигация <> Паспорт.Навигация Тогда
        ВызватьИсключение "Передана не точная собственная внутренняя навигационная строка.";
    КонецЕсли;
    ОжидаемаяСсылка85 = Паспорт.Ссылка;
    ОжидаемаяНавигация85 = Паспорт.Навигация;
    ПриемПодготовлен85 = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    Если ПриемПодготовлен85 <> Истина Или ПриемНачат85 = Истина Или ИсточникВыбора <> СвояФорма85
        Или ТипЗнч(ВыбранноеЗначение) <> Тип("ДокументСсылка.Уч85Заявка")
        Или ВыбранноеЗначение <> ОжидаемаяСсылка85 Тогда
        ВызватьИсключение "Чужой, повторный или произвольный default payload не принимается. Запись не выполняется.";
    КонецЕсли;
    ПриемНачат85 = Истина;
    Паспорт = Уч85ДокСтенд.ПаспортСвоейЗаявки85(ВыбранноеЗначение, ОжидаемыйСценарий85, 3, 300);
    Если Паспорт.Навигация <> ОжидаемаяНавигация85 Тогда
        ВызватьИсключение "После native уведомления независимый паспорт собственной ссылки изменился.";
    КонецЕсли;
    ВыбраннаяЗаявка85 = Паспорт.Ссылка;
    Навигация85 = Паспорт.Навигация;
    Статус85 = "Native ОбработкаВыбора2 приняла свою ссылку3/300 один раз; новых записей и открытия URL нет.";
КонецПроцедуры
APPLICATION — полный старт своего управляемого приложения

Своя новая CF → Открыть модуль управляемого приложения → ПриНачалеРаботыСистемы.

Тонкий клиент собственной новой CF, native ПриНачалеРаботыСистемы0; read-only server guard перед открытием собственного launcher. Native global owner не объявляется фиктивным типом.

Процедура ПриНачалеРаботыСистемы()
    Уч85ДокСтенд.ПроверитьПустойСтенд85();
    ОткрытьФорму("ОбщаяФорма.Уч85ДокЗапуск");
КонецПроцедуры

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

  1. В своей новой пустой ИБ запустите тонкий клиент под единственным подготовленным пользователем. Общая форма проверит address/user/metadata/нулевые counts. Нажмите СоздатьСвоюЗаявку85 один раз: native ПолучитьФорму с exact metadata name, owner=ЭтаФорма, Уникальность=Истина создаст новую настоящую managed форму документа без Ключ.

  2. Проверьте в форме свои начальные2/200 и дату02.01.2026 09:30. ВыборДоступен=False, поскольку требуемое приложением количество3 ещё не достигнуто. Отметьте СогласиеНаСвоиДвеЗаписи85: оно относится только к собственному одноразовому учебному процессу.

  3. Нажмите ПервоеПроведение85. Перед native Form.Записать(Структура) устанавливается флаг неизвестного исхода; структура содержит оба predefined keys разных enum types. Server BeforeWrite3 и реальный object BeforeWrite3 запрещают чужое/неожиданное состояние; object Amount=2×100, native Posting2 формирует ровно одно incoming движение собственного регистра.

  4. Независимый запрос в SERVER обязан прочитать реально сохранённый документ и одно движение2/200 с теми же recorder/marker/user/scenario, датой00:00, Проведен=True и Активность=True. Только после успешного readback сохраняется фактическая собственная ссылка и снимается unknown-outcome flag. Время09:30 не обещается сохранить.

  5. Нажмите Перепроведение85. Перед изменением перепроверяется сохранённое2/200; только собственное поле количества меняется на3. Обычная запись формы передаёт РежимЗаписи=Запись, РежимПроведения не задаётся специально: свойства формы разрешают автоматическое неоперативное перепроведение. Native object event должен получить проведение, иначе урок честно откажет.

  6. После второй native записи независимые реальные данные должны быть3/300, одна прежняя собственная ссылка, один документ и ОДНО движение3/300. Значения5/500 или два движения — ошибка замены/metadata. Старые движения удаляет native механизм только этого своего документа, не наш произвольный cleanup-код.

  7. Отметьте СогласиеНаСбросСвоих99 и нажмите ПеречитатьСвою85. Команда проверяет собственное saved3/300, намеренно меняет только своё несохранённое количество на99 и вызывает native Прочитать() без аргументов. После actual readback форма опять3/300; никаких записей или повторного проведения на этом этапе нет.

  8. Нажмите ПодготовитьВыбор85. ПолучитьНавигационнуюСсылкуОбъекта() вызывается без обоих optional внешних параметров, возвращает внутреннюю строку своей ссылки и сравнивается с server native ПолучитьНавигационнуюСсылку(ownRef). URL не открывается, внешнее хранилище ссылок не заполняется. РежимВыбора=True и собственные exact критерии дают ВыборДоступен=True.

  9. Нажмите ПередатьСвоюСсылку85. Проверяются exact own state/3/300/link/child-owner и одноразовость, владелец вооружается своей проверенной ссылкой. РежимВыбора=False readback исключает default отправку при закрытии в режиме выбора; native ОповеститьОВыборе отправляет именно нашу сохранённую DocRef и закрывает по ЗакрыватьПриВыборе=True.

  10. Native ОбработкаВыбора2 владельца сравнивает фактический ИсточникВыбора с сохранённым actual child-instance и exact ownDocRef/UUID. До приёма результата одноразовый флаг установлен; последующий независимый server readback должен подтвердить3/300/link. Только тогда поле ВыбраннаяЗаявка85 показывает свою ссылку. Чужие формы/массивы/неизвестные payload/повтор отклоняются без writes.

  11. Сохраните ручной протокол успеха либо точного отказа, не перезапускайте запись автоматически. Документ/движение остаются в своей новой учебной базе; следующий запуск отказом сообщает непустоту вместо очистки. Здесь такого ручного протокола ещё нет: runtime0.

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

  1. Статически: PRIMARY10 уникальны, main uses все native methods/properties, source metadata actual DocForm, raw native10+support/event/enum pages сверяются с установленным shcntx_ru.hbk8.5.1.1343; пять native checkers должны вернуть0 mismatches.

  2. Вручную: неверный File/CF/userUUID/пользователь/непустая ИБ/другая ссылка/несоответствие marker/scenario/количества → отказ до записи. На стороне сервера параметры и независимые данные проверяются повторно; это не доказательство защиты от произвольного привилегированного кода.

  3. Вручную: первая native запись даёт readback2/200, Date02.01.2026 00:00, PostedTrue, физическая таблица own register содержит ровно1 active incoming запись своего recorder/UUID. Нет записи счётчика после Posting и нет ручного присваивания Posted.

  4. Вручную: обычная запись уже проведённой заявки с own RepostOnWriteTrue заменяет одну запись2/200 на одну3/300. Проверить не только сумму, но own registrar/dimensions/date/activity/type и глобальный count1 внутри доказанно своей пустой CF.

  5. Вручную: после deliberate99 native read возвращает сохранённое3/300; количество записей/движений не меняется. Навигационная строка0args совпадает с серверной своей ссылкой, не открывается и не создаёт внешние параметры.

  6. Вручную: native Notify с ChoiceModeFalse всё же вызывает реальную wired ОбработкаВыбора2 владельца и закрывает дочернюю форму по CloseOnChoiceTrue; сообщение выбрано один раз. Default ChoiceMode/mainattr type и exact-once callback здесь не измерены: обязательно подтвердить собственным ручным UI протоколом.

  7. Статически/модель: отказ/исключение/partial неизвестность не снимают guard перед retry, неверный источник/payload/link отсекается, native события не вызываются руками, никакого actual1C/DB/UI/network/print/CF/files provisioning/backups не выполнено.

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

Ожидаемый ручной результат: один свой документ02.01.2026 00:00 с количеством3 и суммой300, одно своё активное приходное движение3/300, native перечитанная форма и полученная собственной формой-владельцем ссылка. Здесь существуют только authoredsource/static tests; этот результат в1С не исполнялся и не измерялся.

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

  1. Короткое имя Расширение документа в выгрузке не даёт право использовать ordinary документную форму. PRIMARY10 связаны с native catalog1649 managed document extension и actual metadata main Объект.

  2. РежимАвтоВремя.НеИспользовать сбрасывает ненулевое время нового документа в00:00. АвтоВремя write-only нельзя читать для baseline/getter/assertion; проверяется реально сохранённая дата.

  3. ИспользоватьРежимПроведения имеет enum ИспользованиеРежимаПроведения; РежимПроведения predefined parameter/event имеет другой enum РежимПроведенияДокумента. Нельзя подменять типы одинаково названным Неоперативный.

  4. Form.Write принимает одну Структура и возвращает Булево, DocObject.Write принимает другие параметры и не возвращает этот native Bool. Успешный Bool без независимого saved readback ещё не доказывает нужный результат.

  5. Native ПередЗаписьюНаСервере формы имеет3 параметра и исполняется вне транзакции; object ПередЗаписью тоже3, но другие параметры/контекст и выполняется внутри транзакции. Posting2 не заменяется ручным вызовом.

  6. Сумма вычисляется в object ПередЗаписью до записи. Не полагайтесь на сохранение реквизитов, назначенных уже в Posting: факт проведения проверяется настоящим собственным движением, а не фиктивным persisted counter.

  7. Вне транзакции server формы до второй записи проверяет полный старый паспорт2/200 с движением; inside object ПередЗаписью проверяется собственный старый документ без предположения, в какой момент native удалит прежние движения. После завершённой записи снова обязателен полный независимый паспорт с ровно одним новым движением.

  8. Автоматическое удаление движений, Записывать выбранные и включённый own регистр — обязательная metadata. Непустой набор/два движения/5/500 не маскируются Clear/пересчётом ожидаемых данных.

  9. Client setters UsePostingMode/RepostOnWrite недоступны: assignments находятся в серверном OnCreate. Document client BeforeWrite/AfterWrite имеют специальные запреты серверных вызовов; данный урок их вообще не использует.

  10. ДанныеФормыСтруктура на клиенте — модель данных, не ДокументОбъект. Настоящий server объект получают native РеквизитФормыВЗначение("Объект") и проверяют concrete metadata type.

  11. ПараметрыВыбора formparam — Структура; native property — ФиксированнаяСтруктура. Приложение явно проверяет свои3 равенства, а не придумывает универсальные правила/Отбор.*/операторы неизвестных форм.

  12. Прочитать() может сбросить несохранённое. Урок делает это только с отдельным явным согласием после own-link/passport проверки и специально введёнными99; другие пользовательские изменения не discard автоматически.

  13. GetObjectURL имеет два optional параметра: задавать нужно оба либо ни одного. Используем0, не создаём внешнее хранилище данных ссылок; сама URL строка не является доказательством доверия или права изменить объект.

  14. Default ChoiceMode при закрытии передаёт значение основного реквизита, native generic ОбработкаВыбора2 допускает arbitrary/array. Наш явный Notify отправляет concrete ownDocRef и заранее выключает ChoiceMode; generic default payload всегдаDocRef не обещается.

  15. Native Notify не требует ChoiceModeTrue по собственному контракту и закрывает по CloseOnChoice. РежимВыбораFalse перед Notify обоснован raw условием default отправки при закрытии; фактическое число событий/закрытие нужно подтвердить вручную, а owner one-shot отклоняет повтор.

  16. Read-only поля формы не абсолютная защита, server guards не криптографическая авторизация/многопользовательская синхронизация, SafeMode на время object Posting/BeforeWrite нативно отключается. Только собственный известный исходник новой CF/VM, не production.

  17. Если запись/перечитывание/уведомление завершились с исключением или неизвестным исходом, никакого retry/blindrestore/delete/перезаписи другого документа. Сначала человек независимо проверяет свою ИБ и фиксирует точную ошибку.

  18. UUID пользователя ИБ — не UUID базы; UUID метки пути — тоже не native IBUUID. Сценарий отдельно создаёт настоящий fresh UUID; реальный UUID самой ИБ не измеряется.

  19. Автоматически повторить урок в той же непустой ИБ нельзя. Код ничего не чистит и не делает резервных копий; ручная подготовка нового собственного стенда — отдельное действие пользователя.

  20. Статические Python models/native checkers не являются BSL-компилятором и не доказали native form command→repost→notification в работающей1С. Runtime, записей, UI, сети и provisioning в этой работе0.

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

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

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

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

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