Глобальный контекст.НачатьПолучениеКаталогаВременныхФайлов

Методы · BeginGettingTempFilesDir

Начинает получение имени каталога, который используется программой для размещения временных файлов.

Синтаксис

НачатьПолучениеКаталогаВременныхФайлов(<ОписаниеОповещения>)
Полное описание, параметры и ограничения

Глобальный контекст.НачатьПолучениеКаталогаВременныхФайлов (Global context.BeginGettingTempFilesDir)

Глобальный контекст (Global context)

НачатьПолучениеКаталогаВременныхФайлов (BeginGettingTempFilesDir)

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

Синтаксис:
НачатьПолучениеКаталогаВременныхФайлов(<ОписаниеОповещения>)
Параметры:

<ОписаниеОповещения> (обязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
<ИмяКаталогаВременныхФайлов> – имя временного файла, тип Строка.

<ДополнительныеПараметры> – значение, которое было указано при создании объекта ОписаниеОповещения.

Описание:

Начинает получение имени каталога, который используется программой для размещения временных файлов.

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

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

Примечание:
Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
См. также:
Глобальный контекст, метод КаталогВременныхФайлов

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

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

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

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

Callback native-temp: подтвердить каталог и сохранить собственный structured file

Полный собственный учебный маршрут с concrete UTF8/typedrecord/UUID/state, positive readback и отрицательными проверками. Native сигнатуры/результаты проверены; сторонние файлы, настройки и каталоги не принимаются как fixture.

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

Полный модуль управляемой формы только толстого Windows-клиента8.5.1.1343 своей новой пустой файловой ИБ; server только guard, actual0.

Подготовка

  1. Создайте новую пустую файловую ИБ платформы ровно8.5.1.1343, имя корня УчебноеФайловоеСостояние85, русский встроенный язык/управляемое приложение, совместимость Не использовать. Никакие реальные настройки, документы/архивы или рабочие папки не использовать.

  2. В этой ИБ0предметных объектов, регистров, внешних источников, общих реквизитов, заданий/подписок;0расширений базы/сеанса. Полный серверный guard проверяет exact версию/metadata/все3nativeисточника расширений и отсутствие транзакции.

  3. Запускайте только толстый управляемый Windows-клиент8.5.1.1343 под отдельным учебным Windows-профилем; thin/web/mobile/server positive пути не заявляются. File value API и SaveValue/RestoreValue поддерживаются в толстом клиенте, не переносите их на сервер или browser.

  4. Создайте внешнюю обработку OwnGlobalIO85 с собственной управляемой формой. Реквизиты ПодтверждаюСвойОпыт85 Булево начальноЛожь, Статус85 Строка0 многострочный ТолькоПросмотр, ПутьОпыта85 Строка0 ТолькоПросмотр. Назначьте ПриОткрытии и команду/действие Выполнить85 из выбранного целого модуля.

  5. Settings-урок вместо Выполнить85 имеет3отдельные команды/кнопки СоздатьНастройку85, ПрочитатьНастройку85, ОбновитьТолькоСвоюНастройку85. Дополнительно UUIDНастройки85 Строка36. При чтении следующего сеанса вставьте сохраненный собственный UUID, не начинайте новую настройку.

  6. Модули самостоятельны: вставляйте весь выбранный code, не склеивайте одинаковые процедуры/guards из нескольких уроков. Обновите только свою учебную ИБ и подтвердите только этот пустой стенд.

  7. Файловые workflows используют лишь actual native временный каталог толстого клиента. Проверяется локальный абсолютный диск/существующая папка/отличие от КаталогПрограммы; далее fresh OwnGlobalIO85-UUID, отсутствие/пустота. Native ЗначениеВФайл/ИзФайла могут использовать каталог программы при отсутствующем каталоге — эту fallback-ветку блокируем ДО вызова.

  8. Split/merge payload — конкретный UTF8безBOM BEGIN:<ownUUID>|Книга;3;250;750|END. РазделитьФайл получает16БАЙТ, не16символов, и свою пустую parts-папку. Возвращенный массив используется только как count: type его элементов в native не описан и не угадывается.

  9. Documented имена частей own-payload.bin.001/.002... проверяются реально через Файл и размеры16/остаток; порядок для merge array задан explicit. Для merge mask набор предварительно доказывается точным количеством своих частей; именам свойственен lexicographic порядок с ведущими нулями.

  10. Native value-file fixture — сериализуемая реальная Структура из6полей: Версия1,ownUUID,Книга,Количество3,Цена250,Сумма750. ЗначениеВФайл даетBool, проверяем его; ЗначениеИзФайла возвращает actualтип, сверяем все поля/типы/расчет, не любое восстановленное значение.

  11. Настройки SaveValue/RestoreValue имеют область именно текущая параИБ-пользователь. Создается один новый namespace OwnGlobalIO85:<ownUUID> после проверки отсутствия; последующая отдельная команда меняет только доказанную own v3/750 наv4/1000. Никакого перечисления/очистки всех пользовательских настроек нет.

  12. Все созданные собственные files/parts/wrong-order-output и свой namespace сохраняются после ВАШЕГО ручного опыта для контроля. Автоматического/рекурсивного удаления или очистки настроек нет; повторный overwrite не допускается.

  13. При ожидании callback не закрывайте форму/клиент; Занято85 блокирует вторую команду. Completion native tempdir имеет2параметра, error callback3в правильном порядке. Каталог из callback сверяется с реальным native temp, не становится произвольным input-путем.

  14. Actual1C/files/user-settings/network0: здесь только авторство/статические source/native tests. Никаких резервных копий/архивов не создаем. До ручного опыта сообщения успеха — ожидаемый протокол, не runtime-доказательство.

&НаКлиенте
Перем КонтекстКаталога85;

&НаКлиенте
Процедура Выполнить85(Команда)
    Если Занято85 Тогда
        ВызватьИсключение "Свое получение каталога еще выполняется";
    КонецЕсли;
    Занято85 = Истина;
    Статус85 = "Свой temp-directory callback еще не подтвержден";
    Попытка
        ПроверитьСвоегоКлиента85();
        К = Новый Структура("Запуск,Завершено", Строка(Новый УникальныйИдентификатор), Ложь);
        КонтекстКаталога85 = К;
        Оповещение = Новый ОписаниеОповещения("СвойTempКаталог85", ЭтотОбъект, К, "ОшибкаСвоегоКаталога85", ЭтотОбъект);
        НачатьПолучениеКаталогаВременныхФайлов(Оповещение);
    Исключение
        КонтекстКаталога85 = Неопределено;
        Занято85 = Ложь;
        Статус85 = "Own temp-directory подготовка/начало не подтверждены";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура СвойTempКаталог85(Каталог, К) Экспорт
    Попытка
        ПроверитьСвоегоКлиента85();
        Если Не Занято85 Или КонтекстКаталога85 = Неопределено Или К.Завершено
            Или К.Запуск <> КонтекстКаталога85.Запуск Тогда
            ВызватьИсключение "Нет собственного active temp-directory контекста";
        КонецЕсли;
        CallbackБаза = ПроверитьСвоюБазуКаталога85(Каталог);
        NativeБаза = ПроверитьСвоюБазуКаталога85(КаталогВременныхФайлов());
        Если НРег(CallbackБаза) <> НРег(NativeБаза) Тогда
            ВызватьИсключение "Callback должен дать actual native каталог, не произвольную входную папку";
        КонецЕсли;
        ФайловыйОпыт = СоздатьСвойКорень85(CallbackБаза);
        ПутьОпыта85 = ФайловыйОпыт.Корень;
        СохранитьПрочитатьСвойФайл85(ФайловыйОпыт);
        Статус85 = "OwnUUID " + ФайловыйОпыт.UUID + ": actual temp callback2args → verified local directory → fresh UUID root → native structured file/snapshot/nonformat-check. Own файлы оставлены";
    Исключение
        Статус85 = "Own temp-directory callback/serialization/readback не подтверждены";
    КонецПопытки;
    К.Завершено = Истина;
    КонтекстКаталога85 = Неопределено;
    Занято85 = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ОшибкаСвоегоКаталога85(ИнформацияОбОшибке, СтандартнаяОбработка, К) Экспорт
    СтандартнаяОбработка = Ложь;
    Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда
        Статус85 = "Own каталог не получен, диагностический объект не выводится";
    Иначе
        Статус85 = "Native error callback имеет неподтвержденный тип";
    КонецЕсли;
    К.Завершено = Истина;
    КонтекстКаталога85 = Неопределено;
    Занято85 = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура СохранитьПрочитатьСвойФайл85(К)
    Путь = К.Корень + "own-value.bin";
    ПроверитьОтсутствиеСвоегоФайла85(Путь);
    Исходная = СоздатьСвоюЗапись85(К.UUID, 3);
    Если Не ЗначениеВФайл(Путь, Исходная) Тогда
        ВызватьИсключение "Native ЗначениеВФайл вернул Ложь, сериализация не подтверждена";
    КонецЕсли;
    Файл = Новый Файл(Путь);
    Если Не Файл.Существует() Или Не Файл.ЭтоФайл() Или Файл.Размер() <= 0 Тогда
        ВызватьИсключение "Нужен actual собственный непустой native value-file";
    КонецЕсли;
    ИзФайла = ЗначениеИзФайла(Путь);
    ПроверитьСвоюЗапись85(ИзФайла, К.UUID, 3);
    Исходная.Количество = 4;
    Исходная.Сумма = 1000;
    Повторно = ЗначениеИзФайла(Путь);
    ПроверитьСвоюЗапись85(Повторно, К.UUID, 3);
    Если Повторно.Количество = Исходная.Количество Тогда
        ВызватьИсключение "File snapshot не должен измениться вслед за исходным memory object";
    КонецЕсли;
    НеФормат = К.Корень + "not-a-value.txt";
    ПроверитьОтсутствиеСвоегоФайла85(НеФормат);
    НеДанные = ПолучитьДвоичныеДанныеИзСтроки("Own not a native value:" + К.UUID, КодировкаТекста.UTF8, Ложь);
    НеДанные.Записать(НеФормат);
    ОтказФормата = Ложь;
    Попытка
        ЧужойФормат = ЗначениеИзФайла(НеФормат);
        ПроверитьСвоюЗапись85(ЧужойФормат, К.UUID, 3);
    Исключение
        ОтказФормата = Истина;
    КонецПопытки;
    Если Не ОтказФормата Тогда
        ВызватьИсключение "Собственный plain text не должен пройти как наша native structured record";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Функция СоздатьСвоюЗапись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(База)
    Если ТипЗнч(База) <> Тип("Строка") Или СтрДлина(База) < 4 Или Сред(База, 2, 2) <> ":\" Тогда
        ВызватьИсключение "Для этого Windows опыта нужна actual абсолютная локальная папка, не относительный или UNC путь";
    КонецЕсли;
    Каталог = Новый Файл(База);
    Если Не Каталог.Существует() Или Не Каталог.ЭтоКаталог() Тогда
        ВызватьИсключение "Native value-file API не должен переходить в каталог программы из-за отсутствующего каталога";
    КонецЕсли;
    Полный = Каталог.ПолноеИмя;
    Если Прав(Полный, 1) <> "\" Тогда
        Полный = Полный + "\";
    КонецЕсли;
    Программа = КаталогПрограммы();
    Если Прав(Программа, 1) <> "\" Тогда
        Программа = Программа + "\";
    КонецЕсли;
    Если НРег(Полный) = НРег(Программа) Тогда
        ВызватьИсключение "Нельзя писать учебные данные в каталог исполняемой программы";
    КонецЕсли;
    Возврат Полный;
КонецФункции

&НаКлиенте
Функция СоздатьСвойКорень85(База)
    ПроверитьСвоегоКлиента85();
    ПолнаяБаза = ПроверитьСвоюБазуКаталога85(База);
    UUID = Строка(Новый УникальныйИдентификатор);
    Если UUID = "00000000-0000-0000-0000-000000000000" Тогда
        ВызватьИсключение "Нужен fresh ненулевой own UUID";
    КонецЕсли;
    Путь = ПолнаяБаза + "OwnGlobalIO85-" + UUID + "\";
    Папка = Новый Файл(Путь);
    Если Папка.Существует() Тогда
        ВызватьИсключение "Нельзя занять или перезаписать существующий UUID-каталог";
    КонецЕсли;
    СоздатьКаталог(Путь);
    Если Не Папка.Существует() Или Не Папка.ЭтоКаталог() Тогда
        ВызватьИсключение "Own абсолютная папка не создана";
    КонецЕсли;
    Если НайтиФайлы(Путь, "*", Ложь).Количество() <> 0 Тогда
        ВызватьИсключение "Новая собственная UUID-папка обязана быть пустой";
    КонецЕсли;
    Возврат Новый Структура("UUID,Корень", UUID, Путь);
КонецФункции

&НаКлиенте
Процедура ПроверитьОтсутствиеСвоегоФайла85(Путь)
    Файл = Новый Файл(Путь);
    Если Файл.Существует() Тогда
        ВызватьИсключение "Own файл должен быть новым; overwrite запрещен";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Перем Занято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 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. Команда запускает own контекст соfreshUUID запуска после проверки emptyИБ/Windows/thickclient, а не принимает готовый неизвестный объект.

  2. НачатьПолучениеКаталогаВременныхФайлов получает один native ОписаниеОповещения с реальными exported success/error процедурами.

  3. СвойTempКаталог85 получает КаталогСтрока иК. Active flag/UUID/завершенность перепроверяются; fakeResult/ИмяФайла параметр не добавляется.

  4. Callback path должен быть existing абсолютным локальным каталогом и не каталогомexe; сверяется с нормализованным actual КаталогВременныхФайлов()

  5. Лишь после этого создаем fresh own UUID подкаталог, отсутствующий/пустой. Получение каталога само по себе ничего не записывает.

  6. Запускаем full native serialization/readback6fields, stable snapshot и plain-text negative. Это полезная цепочка использования каталога, не getter-wrapper.

  7. Ошибка native callback принимает ИнформацияОбОшибке,СтандартнаяОбработка,К, не печатает диагностический объект и не превращается в успех.

  8. После actual readback или неуспеха Занято85 снято, контекст очищен. Files остаются только в ownUUID root; закрытие клиента не гарантирует callback.

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

  1. Пройдены собственные positive данные/actualтип/schema/UUID, не только непустые объекты или отсутствие исключений.

  2. Native аргументы/returns/context совпадают со справкой8.5.1.1343; неоднозначный result не угадывается.

  3. Own absolute root/namespace проверяется до writes; unknown/overwrite/fallback-success не допускается.

  4. Все изменения только при будущем ВАШЕМ ручном опыте в новом стенде. Actualfiles/settings/1C/network0, ничего автоматически не удаляем.

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

Native temp callback2args → verified own absolute root → real native structured file/snapshot/negative check. Не является обещанием файлового результата без completion/readback.

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

  1. ЗначениеВФайл/ИзФайла — внутренний native формат, не человекочитаемыйJSON. Здесь сохранение и schema readback выполняются только для own записи.

  2. РазделитьФайл работает сбайтами; ОбъединитьФайлы не проверяет смысл порядка. СохранитьЗначение хранит значение по пареИБ-пользователь, а не по произвольному глобальномуключу всей системы.

  3. Прямой actual запуск здесь не выполнялся. Ложь/Undefined/неверная schema не маскируются успехом или новым default-object.

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

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

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

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

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