Полный собственный учебный маршрут с concrete UTF8/typedrecord/UUID/state, positive readback и отрицательными проверками. Native сигнатуры/результаты проверены; сторонние файлы, настройки и каталоги не принимаются как fixture.
Где и как запускать
Полный модуль управляемой формы только толстого Windows-клиента8.5.1.1343 своей новой пустой файловой ИБ; server только guard, actual0.
Подготовка
Создайте новую пустую файловую ИБ платформы ровно8.5.1.1343, имя корня УчебноеФайловоеСостояние85, русский встроенный язык/управляемое приложение, совместимость Не использовать. Никакие реальные настройки, документы/архивы или рабочие папки не использовать.
В этой ИБ0предметных объектов, регистров, внешних источников, общих реквизитов, заданий/подписок;0расширений базы/сеанса. Полный серверный guard проверяет exact версию/metadata/все3nativeисточника расширений и отсутствие транзакции.
Запускайте только толстый управляемый Windows-клиент8.5.1.1343 под отдельным учебным Windows-профилем; thin/web/mobile/server positive пути не заявляются. File value API и SaveValue/RestoreValue поддерживаются в толстом клиенте, не переносите их на сервер или browser.
Создайте внешнюю обработку OwnGlobalIO85 с собственной управляемой формой. Реквизиты ПодтверждаюСвойОпыт85 Булево начальноЛожь, Статус85 Строка0 многострочный ТолькоПросмотр, ПутьОпыта85 Строка0 ТолькоПросмотр. Назначьте ПриОткрытии и команду/действие Выполнить85 из выбранного целого модуля.
Settings-урок вместо Выполнить85 имеет3отдельные команды/кнопки СоздатьНастройку85, ПрочитатьНастройку85, ОбновитьТолькоСвоюНастройку85. Дополнительно UUIDНастройки85 Строка36. При чтении следующего сеанса вставьте сохраненный собственный UUID, не начинайте новую настройку.
Модули самостоятельны: вставляйте весь выбранный code, не склеивайте одинаковые процедуры/guards из нескольких уроков. Обновите только свою учебную ИБ и подтвердите только этот пустой стенд.
Файловые workflows используют лишь actual native временный каталог толстого клиента. Проверяется локальный абсолютный диск/существующая папка/отличие от КаталогПрограммы; далее fresh OwnGlobalIO85-UUID, отсутствие/пустота. Native ЗначениеВФайл/ИзФайла могут использовать каталог программы при отсутствующем каталоге — эту fallback-ветку блокируем ДО вызова.
Split/merge payload — конкретный UTF8безBOM BEGIN:<ownUUID>|Книга;3;250;750|END. РазделитьФайл получает16БАЙТ, не16символов, и свою пустую parts-папку. Возвращенный массив используется только как count: type его элементов в native не описан и не угадывается.
Documented имена частей own-payload.bin.001/.002... проверяются реально через Файл и размеры16/остаток; порядок для merge array задан explicit. Для merge mask набор предварительно доказывается точным количеством своих частей; именам свойственен lexicographic порядок с ведущими нулями.
Native value-file fixture — сериализуемая реальная Структура из6полей: Версия1,ownUUID,Книга,Количество3,Цена250,Сумма750. ЗначениеВФайл даетBool, проверяем его; ЗначениеИзФайла возвращает actualтип, сверяем все поля/типы/расчет, не любое восстановленное значение.
Настройки SaveValue/RestoreValue имеют область именно текущая параИБ-пользователь. Создается один новый namespace OwnGlobalIO85:<ownUUID> после проверки отсутствия; последующая отдельная команда меняет только доказанную own v3/750 наv4/1000. Никакого перечисления/очистки всех пользовательских настроек нет.
Все созданные собственные files/parts/wrong-order-output и свой namespace сохраняются после ВАШЕГО ручного опыта для контроля. Автоматического/рекурсивного удаления или очистки настроек нет; повторный overwrite не допускается.
При ожидании callback не закрывайте форму/клиент; Занято85 блокирует вторую команду. Completion native tempdir имеет2параметра, error callback3в правильном порядке. Каталог из callback сверяется с реальным native temp, не становится произвольным input-путем.
Actual1C/files/user-settings/network0: здесь только авторство/статические source/native tests. Никаких резервных копий/архивов не создаем. До ручного опыта сообщения успеха — ожидаемый протокол, не runtime-доказательство.
&НаКлиенте
Процедура СоздатьНастройку85(Команда)
Если Занято85 Тогда
ВызватьИсключение "Own настройка еще обрабатывается";
КонецЕсли;
Занято85 = Истина;
Статус85 = "Новая собственная настройка еще не подтверждена";
Попытка
ПроверитьСвоегоКлиента85();
UUIDНастройки85 = Строка(Новый УникальныйИдентификатор);
Ключ = СвойКлючНастройки85(UUIDНастройки85);
Если ВосстановитьЗначение(Ключ) <> Неопределено Тогда
ВызватьИсключение "Own fresh namespace уже занят; overwrite запрещен";
КонецЕсли;
Исходная = СоздатьСвоюЗапись85(UUIDНастройки85, 3);
СохранитьЗначение(Ключ, Исходная);
Прочитанная = ВосстановитьЗначение(Ключ);
ПроверитьСвоюЗапись85(Прочитанная, UUIDНастройки85, 3);
Статус85 = "OwnUUID " + UUIDНастройки85 + ": сохранена и прочитана own настройка3/250/750 для текущей парыИБ-пользователь. Сохраните UUID для следующего сеанса";
Исключение
Статус85 = "Own create/restore не подтверждены, чужие настройки не менялись";
КонецПопытки;
Занято85 = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьНастройку85(Команда)
Если Занято85 Тогда
ВызватьИсключение "Own настройка еще обрабатывается";
КонецЕсли;
Занято85 = Истина;
Попытка
ПроверитьСвоегоКлиента85();
Ключ = СвойКлючНастройки85(UUIDНастройки85);
Запись = ВосстановитьЗначение(Ключ);
Если Запись = Неопределено Тогда
ВызватьИсключение "Own UUID не найден в этой пареИБ-пользователь; не подбирайте другие ключи";
КонецЕсли;
Если ТипЗнч(Запись) <> Тип("Структура") Тогда
ВызватьИсключение "Свою настройку нельзя заменить произвольным восстановленным типом";
КонецЕсли;
Если Не Запись.Свойство("Количество", Количество) Или (Количество <> 3 И Количество <> 4) Тогда
ВызватьИсключение "Только две собственные учебные версии3/4";
КонецЕсли;
ПроверитьСвоюЗапись85(Запись, UUIDНастройки85, Количество);
Статус85 = "OwnUUID " + UUIDНастройки85 + ": восстановлены реальные Книга/" + Строка(Количество) + "/250/" + Строка(Запись.Сумма) + " из текущей парыИБ-пользователь, не создан default-object";
Исключение
Статус85 = "Own UUID/тип/схема настройки не подтверждены; fallback-success запрещен";
КонецПопытки;
Занято85 = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьТолькоСвоюНастройку85(Команда)
Если Занято85 Тогда
ВызватьИсключение "Own настройка еще обрабатывается";
КонецЕсли;
Занято85 = Истина;
Попытка
ПроверитьСвоегоКлиента85();
Ключ = СвойКлючНастройки85(UUIDНастройки85);
До = ВосстановитьЗначение(Ключ);
ПроверитьСвоюЗапись85(До, UUIDНастройки85, 3);
Новая = СоздатьСвоюЗапись85(UUIDНастройки85, 4);
СохранитьЗначение(Ключ, Новая);
После = ВосстановитьЗначение(Ключ);
ПроверитьСвоюЗапись85(После, UUIDНастройки85, 4);
Статус85 = "OwnUUID " + UUIDНастройки85 + ": только подтвержденная собственная настройка3/750 обновлена до4/1000, actual restore проверен. Другие namespaces не затрагиваются";
Исключение
Статус85 = "Own-update3→4 не подтвержден, повторять автоматически нельзя";
КонецПопытки;
Занято85 = Ложь;
КонецПроцедуры
&НаКлиенте
Функция СвойКлючНастройки85(UUID)
Если ТипЗнч(UUID) <> Тип("Строка") Тогда
ВызватьИсключение "UUID должен быть строкой";
КонецЕсли;
ЗначениеUUID = Новый УникальныйИдентификатор(UUID);
Если UUID <> Строка(ЗначениеUUID) Или UUID = "00000000-0000-0000-0000-000000000000" Тогда
ВызватьИсключение "Нужен точный собственный ненулевой canonical UUID";
КонецЕсли;
Возврат "OwnGlobalIO85:" + UUID;
КонецФункции
&НаКлиенте
Функция СоздатьСвоюЗапись85(UUID, Количество)
Если Количество <> 3 И Количество <> 4 Тогда
ВызватьИсключение "Разрешены только две конкретные own учебные версии";
КонецЕсли;
Возврат Новый Структура("Версия,UUID,Номенклатура,Количество,Цена,Сумма", 1, UUID, "Книга", Количество, 250, Количество * 250);
КонецФункции
&НаКлиенте
Процедура ПроверитьСвоюЗапись85(Запись, UUID, Количество)
Если ТипЗнч(Запись) <> Тип("Структура") Или Запись.Количество() <> 6 Тогда
ВызватьИсключение "Нужна реальная own Структура с шестью точными полями";
КонецЕсли;
Для Каждого Имя Из СтрРазделить("Версия,UUID,Номенклатура,Количество,Цена,Сумма", ",") Цикл
Если Не Запись.Свойство(Имя) Тогда
ВызватьИсключение "Отсутствует own поле " + Имя;
КонецЕсли;
КонецЦикла;
Если ТипЗнч(Запись.Версия) <> Тип("Число") Или Запись.Версия <> 1
Или ТипЗнч(Запись.UUID) <> Тип("Строка") Или Запись.UUID <> UUID
Или ТипЗнч(Запись.Номенклатура) <> Тип("Строка") Или Запись.Номенклатура <> "Книга"
Или ТипЗнч(Запись.Количество) <> Тип("Число") Или Запись.Количество <> Количество
Или ТипЗнч(Запись.Цена) <> Тип("Число") Или Запись.Цена <> 250
Или ТипЗнч(Запись.Сумма) <> Тип("Число") Или Запись.Сумма <> Количество * 250 Тогда
ВызватьИсключение "Нарушены actual типы, ownUUID или расчет собственной записи";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Перем Занято85;
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Занято85 = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьСвоегоКлиента85()
ПроверитьСеанс85();
#Если ТолстыйКлиентУправляемоеПриложение Тогда
Система = Новый СистемнаяИнформация;
Если (Система.ТипПлатформы <> ТипПлатформы.Windows_x86 И Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64) Или Не ПодтверждаюСвойОпыт85 Тогда
ВызватьИсключение "Нужна своя новая пустая файловая ИБ и толстый Windows-клиент8.5.1.1343";
КонецЕсли;
#Иначе
ВызватьИсключение "Полный урок поддерживает только толстый управляемый Windows-клиент";
#КонецЕсли
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСеанс85()
ПроверитьСвойПустойСтенд();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Расширения = РасширенияКонфигурации.Получить(, Источник);
Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
ВызватьИсключение "Native список расширений должен иметь тип Массив";
КонецЕсли;
Если Расширения.Количество() <> 0 Тогда
ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
КонецЕсли;
КонецПроцедурыРазбор по шагам
Нажмите отдельную СоздатьНастройку85: guard подтверждает именно свою новую emptyИБ/thickclient; генерируется новый canonical UUID.
Ключ OwnGlobalIO85:<UUID> принадлежит только этому учебному примеру. ВосстановитьЗначение перед созданием должно дать Неопределено; иначе никакой overwrite.
Создается actual own Struct Книга3/250/750. СохранитьЗначение вызывается как процедура: native не описываетBool-return, поэтому его не выдумываем.
Следующее ВосстановитьЗначение обязано дать именно собственную реальную структуру; schema/UUID/типы/расчет проверяются. Undefined не подменяется фиктивным default-object успеха.
Запишите свойUUID. Закройте и заново откройте только свою ИБ под тем же1Спользователем, вставьтеUUID и нажмите ПрочитатьНастройку85: проверяются реальные восстановленные данные, не новая запись.
Отдельная ОбновитьТолькоСвоюНастройку85 сначала доказывает actual own Qty3/750 иUUID. Только затем сохраняет конкретную version Qty4/1000 и вновь проверяет восстановленное.
Проверка другой парыИБ-пользователь выполняется пользователем только на отдельном собственном учебном контексте: отсутствие собственногоUUID — ожидаемое отсутствие, не причина читать чужие настройки.
Повторное обновлениеv4→v4 запрещено guard до записи; чужие namespaces не перебираются/не очищаются. ПараIBA-user — native граница, не операционныйWindows-user каталог.
Как проверить результат
Пройдены собственные positive данные/actualтип/schema/UUID, не только непустые объекты или отсутствие исключений.
Native аргументы/returns/context совпадают со справкой8.5.1.1343; неоднозначный result не угадывается.
Own absolute root/namespace проверяется до writes; unknown/overwrite/fallback-success не допускается.
Все изменения только при будущем ВАШЕМ ручном опыте в новом стенде. Actualfiles/settings/1C/network0, ничего автоматически не удаляем.
Ожидаемый результат
Один новый own user/IB namespace, actual restore3/750, отдельное guarded-update4/1000 и чтение в другом сеансе. Не заявляется runtime-проверенное сохранение до ручного опыта.
На что обратить внимание
ЗначениеВФайл/ИзФайла — внутренний native формат, не человекочитаемыйJSON. Здесь сохранение и schema readback выполняются только для own записи.
РазделитьФайл работает сбайтами; ОбъединитьФайлы не проверяет смысл порядка. СохранитьЗначение хранит значение по пареИБ-пользователь, а не по произвольному глобальномуключу всей системы.
Прямой actual запуск здесь не выполнялся. Ложь/Undefined/неверная schema не маскируются успехом или новым default-object.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.