ОписаниеПередаваемогоФайла.Имя

Свойства · Name

Тип: Строка. Содержит положение файла на клиенте.

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

ОписаниеПередаваемогоФайла.Имя (TransferableFileDescription.Name)

ОписаниеПередаваемогоФайла (TransferableFileDescription)

Имя (Name)

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

Использование:
Чтение и запись.
Описание:
Тип: Строка.
Содержит положение файла на клиенте.
Доступность:

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

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

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

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

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

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

Полный учебный маршрут с собственными данными и настоящими объектами платформы. Две записи UTF8, новые UUID, точные параметры оповещений, сопоставление по имени и независимое чтение результата. Отмена и ограничения выбора папки объясняются отдельно.

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

Полный модуль своей управляемой формы новой пустой файловой ИБ 8.5.1.1343. Толстый управляемый Windows x64 клиент; сервер только проверяет пустой стенд и временные данные. Фактические UI/files/1C/network операции: 0.

Подготовка

  1. Создайте новую собственную пустую файловую информационную базу на платформе 8.5.1.1343. Имя корня конфигурации — УчебныеСсылкиИПередачаФайлов85. Русский встроенный язык, управляемое приложение, совместимость «Не использовать». Не берите рабочую базу или чужие файлы. В конфигурации нет справочников, документов, регистров, планов, задач, подписок, заданий, общих реквизитов, внешних источников и расширений.

  2. Запускайте только толстый управляемый клиент Windows x64 под отдельным учебным профилем Windows. Справка разрешает многие эти API также в тонком, веб- и мобильном клиентах, но там отличаются доступ к файлам и диалоги. Эти варианты здесь не заявляются проверенными. Расширения браузера и внешние сервисы для выбранного маршрута не нужны.

  3. Создайте внешнюю обработку OwnFileTransfer85 и одну управляемую форму. Реквизиты: ПодтверждаюСвойСтенд85 — Булево, начально Ложь; Занято85 — Булево, начально Ложь, ТолькоПросмотр; ПутьОпыта85 — Строка неограниченной длины, ТолькоПросмотр; Статус85 — такая же Строка, многострочная, ТолькоПросмотр. Вставьте целиком модуль выбранной карточки; два модуля не объединяйте.

  4. Для помещения файлов на сервер добавьте реквизит ОтменитьПередНачалом85 — Булево, начально Ложь. Создайте команды и кнопки: СоздатьСвоюПару85, ПоместитьСОбычнымиПараметрами85, ПоместитьСКонструктором85, ПрочитатьСвоиFileRef85. Параметр Команда передает сама кнопка. Оповещения связывают экспортные обработчики с событиями завершения, прогресса, начала и ошибки передачи.

  5. Download форма дополнительно: ПодтверждаюТолькоСвоюПапку85 и ПодтверждаюЗакрытыйДиалог85 Булево, начально Ложь. Кнопки: ВыгрузитьБезДиалога85, ВыгрузитьДиалогПоУмолчанию85, ВыгрузитьДиалогСКонструктором85, ПроверитьРучнойДиалог85. При каждом новом опыте код сбрасывает подтверждение закрытого диалога; поставьте его заново только после фактического ручного закрытия.

  6. Учебные данные создаются программно: настоящий временный каталог клиента → новая отсутствующая папка OwnFileTransfer85-<новый UUID> → ровно два файла без вложенных путей: own-card.txt и own-total.txt. Кодировка UTF8 без BOM. Первая строка — UUID=<свой UUID>, затем LF и Книга;3;250 либо Сумма=750. Размер измеряется в байтах, не символах. Другой путь, лишний файл, каталог и дубликат отвергаются. Автоматического удаления нет.

  7. Фильтр *.txt в диалоге не защищает от выбора чужого содержимого. Обработчик ДоСвоегоUpload85 перед помещением получает настоящие СсылкаНаФайл и проверяет количество два, точные имена, собственную папку, доступный локальный Файл, содержимое и размер. При отказе он устанавливает ОтказОтПомещенияВсехФайлов=Истина. Платформа после этого не вызывает другие оповещения, поэтому Занято85 сбрасывается прямо здесь.

  8. Параметры обработчиков помещения: завершение — два (ПомещенныеФайлы, К); прогресс — шесть (СсылкаНаФайл, процент файла, отказ файлу, процент всех файлов, отказ всем, К); перед началом — три (массив ссылок, отказ всем, К); ошибка — три (ИнформацияОбОшибке, СтандартнаяОбработка, К). К — структура своего текущего опыта. Параметры отказа изменяются обработчиком. Прогресс — проценты, не байты; число и время вызовов не фиксированы.

  9. ИдентификаторФайла — UUID объекта СсылкаНаФайл, НЕ устойчивый UUID файла на диске и не UUID опыта или формы. Код запоминает настоящий UUID каждого исходного объекта из обработчика начала и сверяет тот же объект до и после Ждать. Результаты и прогресс связываются по проверенным имени и пути; их UUID объекта не предполагается равным UUID исходной ссылки.

  10. Время изменения читается в местном времени и UTC. Каждый результат сравнивается с соответствующим методом связанного Файл; местное время не сравнивается напрямую с UTC. Не меняйте исходные файлы между чтениями. Проверки времени, размера и байтов обнаруживают проверяемые отличия, но НЕ делают две Await операции атомарными.

  11. Пятый параметр помещения — настоящий УникальныйИдентификатор своей формы. Он удерживает данные временного хранилища до закрытия формы; без него данные могут исчезнуть после следующего серверного вызова. СсылкаНаФайл остается на клиенте. Сервер получает только собственные имя и адрес и читает реальные байты из хранилища. После закрытия формы платформа удаляет временные данные, но не исходные файлы.

  12. Проверьте два разных вида отмены помещения: кнопка Отмена в выборе файлов дает в обработчике завершения Неопределено; флажок ОтменитьПередНачалом85 устанавливает отказ перед передачей, поэтому файлов помещено ноль и следующих оповещений нет. Отмена одного файла, частичный массив или ошибка не считаются полной передачей. Автоматического повтора или отката нет; возможные собственные адреса сохраняются, чужие данные не удаляются.

  13. Бездиалоговый вариант получения вызывается с тремя аргументами: оповещение, массив описаний, собственная новая папка. Завершение получает два параметра. До вызова в папке ноль файлов. Описания содержат только свои короткие имена без пути и реальные адреса временного хранилища. Результаты сопоставляются по имени, адресу и полному пути; порядок массива не предполагается. Два файла перечитываются и побайтово проверяются.

  14. Диалогный вариант получения вызывается с двумя аргументами и не имеет оповещения о завершении. ПараметрыДиалогаПолученияФайлов.Каталог — только начальный каталог, НЕ запрет выбрать другое место. Сохраняйте вручную исключительно в показанную новую пустую собственную папку; не подтверждайте перезапись, другой путь или открытие сторонним приложением. Если это неудобно, используйте бездиалоговый путь, а диалог изучайте на своей VM с отменой.

  15. После фактического закрытия диалога самостоятельно поставьте ПодтверждаюЗакрытыйДиалог85 и запустите отдельную проверку. Ноль файлов и ваше подтверждение доказывают лишь отсутствие файлов в этой папке — не автоматическую отмену и не отсутствие файлов в другом месте. Один файл, лишние файлы или неверные байты означают частичный либо неизвестный результат, а не отмену. Не пытайтесь продолжать записи или автоматически откатывать такое состояние.

  16. Формы удерживают один собственный контекст и блокируют параллельные операции. Неизвестный или частичный результат не перекрывается новым опытом. Для второго конструктора помещения откройте новую форму и создайте новую пару. Каждый новый опыт получения создает другую UUID-папку и не перезаписывает старую. Не закрывайте форму во время оповещений или Ждать.

  17. Actualfiles/transfers/UI/1C/DB/network0: здесь только авторство и статические проверки кода по установленной справке. Файлы не передавались, интерфейс не запускался, БД и сеть не изменялись. Сообщения кода — ожидаемый протокол будущего ручного опыта, не доказательство выполнения. Корень проекта и конфигурации только читались; резервные копии и архивы не создавались.

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

&НаКлиенте
Функция НовыйСвойDownload85()
    ПроверитьСвоегоКлиента85();
    Если Занято85 Тогда
        ВызватьИсключение "Своя передача/диалог еще не закончена";
    КонецЕсли;
    Если Контекст85 <> Неопределено Тогда
        Если Контекст85.Фаза <> "проверено" И Контекст85.Фаза <> "отменено" Тогда
            ВызватьИсключение "Неопределенный/частичный опыт не перекрываем новым; сначала ручная read-only диагностика";
        КонецЕсли;
    КонецЕсли;
    UUID = Строка(Новый УникальныйИдентификатор);
    К = Новый Структура("UUID,Корень,Фаза,Описания", UUID, СоздатьСвоюПапку85(UUID), "готово", Новый Массив);
    К.Описания = СвояПараСервера85(UUID, УникальныйИдентификатор);
    ПроверитьОписания85(К);
    Контекст85 = К;
    ПутьОпыта85 = К.Корень;
    ПодтверждаюЗакрытыйДиалог85 = Ложь;
    Возврат К;
КонецФункции

&НаСервереБезКонтекста
Функция СвояПараСервера85(UUID, ФормаUUID)
    ПроверитьСвойПустойСтенд();
    Если ТипЗнч(ФормаUUID) <> Тип("УникальныйИдентификатор") Тогда
        ВызватьИсключение "Хранилище привязывается к actual форме, не угаданнойстроке";
    КонецЕсли;
    Описания = Новый Массив;
    Для Каждого Поле Из СвоиТексты85(UUID) Цикл
        Данные = ПолучитьДвоичныеДанныеИзСтроки(Поле.Значение, КодировкаТекста.UTF8, Ложь);
        Описание = Новый ОписаниеПередаваемогоФайла;
        Описание.Имя = Поле.Ключ;
        Описание.Хранение = ПоместитьВоВременноеХранилище(Данные, ФормаUUID);
        ПроверитьСвоиBytes85(ПолучитьИзВременногоХранилища(Описание.Хранение), Поле.Значение);
        Описания.Добавить(Описание);
    КонецЦикла;
    Возврат Описания;
КонецФункции

&НаКлиенте
Процедура ПроверитьОписания85(К)
    ПроверитьСвойКорень85(К);
    Если ТипЗнч(К.Описания) <> Тип("Массив") Или К.Описания.Количество() <> 2 Тогда
        ВызватьИсключение "Нужны exactly2own native transferable descriptors";
    КонецЕсли;
    Тексты = СвоиТексты85(К.UUID);
    Имена = Новый Соответствие;
    Для Каждого Описание Из К.Описания Цикл
        Если ТипЗнч(Описание) <> Тип("ОписаниеПередаваемогоФайла")
            Или Тексты.Получить(Описание.Имя) = Неопределено
            Или Имена.Получить(Описание.Имя) <> Неопределено
            Или ТипЗнч(Описание.Хранение) <> Тип("Строка")
            Или Не ЭтоАдресВременногоХранилища(Описание.Хранение) Тогда
            ВызватьИсключение "Descriptor — собственное flat имя и actual непустойtemp адрес";
        КонецЕсли;
        Имена.Вставить(Описание.Имя, Истина);
    КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура ВыгрузитьБезДиалога85(Команда)
    К = НовыйСвойDownload85();
    Если НайтиФайлы(К.Корень, "*", Ложь).Количество() <> 0 Тогда
        ВызватьИсключение "До записи callback download-папка должна быть пустой, overwrite запрещен";
    КонецЕсли;
    Занято85 = Истина;
    К.Фаза = "callback";
    Завершение = Новый ОписаниеОповещения("СвойDownloadЗавершен85", ЭтотОбъект, К,
        "ОшибкаСвоегоDownload85", ЭтотОбъект);
    Статус85 = "Native callback-download начат; успех не заявлен";
    Попытка
        НачатьПолучениеФайловССервера(Завершение, К.Описания, К.Корень);
    Исключение
        К.Фаза = "ошибка";
        Занято85 = Ложь;
        Статус85 = "Начало download не подтвердилось; own частичные файлы не удаляются";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура СвойDownloadЗавершен85(ПолученныеФайлы, К) Экспорт
    Попытка
        Если Контекст85 = Неопределено Или К.UUID <> Контекст85.UUID Или К.Фаза <> "callback"
            Или ТипЗнч(ПолученныеФайлы) <> Тип("Массив") Или ПолученныеФайлы.Количество() <> 2 Тогда
            ВызватьИсключение "Нужен actual полный completion2своих файлов, не неизвестнаяотмена";
        КонецЕсли;
        Ожидания = Новый Соответствие;
        Для Каждого Описание Из К.Описания Цикл
            Ожидания.Вставить(Описание.Имя, Описание.Хранение);
        КонецЦикла;
        Найденные = Новый Соответствие;
        Для Каждого Результат Из ПолученныеФайлы Цикл
            Если ТипЗнч(Результат) <> Тип("ОписаниеПереданногоФайла")
                Или Ожидания.Получить(Результат.Имя) = Неопределено
                Или Найденные.Получить(Результат.Имя) <> Неопределено
                Или Результат.Хранение <> Ожидания.Получить(Результат.Имя)
                Или НРег(Результат.ПолноеИмя) <> НРег(К.Корень + Результат.Имя) Тогда
                ВызватьИсключение "Mapbyname + exact own path/storage, не result[0] или порядокмассива";
            КонецЕсли;
            Найденные.Вставить(Результат.Имя, Истина);
        КонецЦикла;
        ПроверитьСвоиДваФайла85(К);
        К.Фаза = "проверено";
        Статус85 = "Own callback2args: два exact UTF8 файла подтверждены в своей свежей папке, независимо от порядка";
    Исключение
        К.Фаза = "ошибка";
        Статус85 = "Download callback/readback не подтверждены; partial/unknown не rollback и не успех";
    КонецПопытки;
    Занято85 = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ОшибкаСвоегоDownload85(ИнформацияОбОшибке, СтандартнаяОбработка, К) Экспорт
    СтандартнаяОбработка = Ложь;
    К.Фаза = "ошибка";
    Занято85 = Ложь;
    Если ТипЗнч(ИнформацияОбОшибке) = Тип("ИнформацияОбОшибке") Тогда
        Статус85 = "Native download error3args; original tempaddresses/files сохранены, автоматического retry нет";
    Иначе
        Статус85 = "Неверный native error callback тип";
    КонецЕсли;
КонецПроцедуры

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

&НаКлиенте
Процедура ВыгрузитьДиалогСКонструктором85(Команда)
    К = НовыйСвойDownload85();
    Параметры = Новый ПараметрыДиалогаПолученияФайлов("Сохраните два own файла ТОЛЬКО в показанную UUID-папку",
        Истина, К.Корень);
    НачатьСвойДиалогDownload85(К, Параметры);
КонецПроцедуры

&НаКлиенте
Процедура НачатьСвойДиалогDownload85(К, Параметры)
    ПроверитьОписания85(К);
    Если Не ПодтверждаюТолькоСвоюПапку85 Или НайтиФайлы(К.Корень, "*", Ложь).Количество() <> 0
        Или Параметры.Каталог <> К.Корень Или Не Параметры.ВыборКаталога
        Или Параметры.Заголовок <> "Сохраните два own файла ТОЛЬКО в показанную UUID-папку" Тогда
        ВызватьИсключение "Вы явно подтверждаете сохранение только в новую пустую own UUID-папку";
    КонецЕсли;
    Занято85 = Истина;
    К.Фаза = "диалог";
    Статус85 = "Диалогный native overload НЕ имеет completion callback. Только manual сохранение вown root/отмена и отдельная проверка";
    Попытка
        НачатьПолучениеФайловССервера(К.Описания, Параметры);
    Исключение
        К.Фаза = "ошибка";
        Занято85 = Ложь;
        Статус85 = "Начало диалога не подтвердилось; никакого auto rollback";
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьРучнойДиалог85(Команда)
    Если Контекст85 = Неопределено Или Не ПодтверждаюЗакрытыйДиалог85 Тогда
        ВызватьИсключение "Сначала ВЫ вручную завершаете/закрываете диалог, затем явно подтверждаете это";
    КонецЕсли;
    К = Контекст85;
    Если К.Фаза <> "диалог" Тогда
        ВызватьИсключение "Проверка относится только к своему запущенному диалогномуoverload";
    КонецЕсли;
    ПроверитьСвойКорень85(К);
    Количество = НайтиФайлы(К.Корень, "*", Ложь).Количество();
    Если Количество = 0 Тогда
        К.Фаза = "отменено";
        Занято85 = Ложь;
        Статус85 = "ВЫ подтверждаете закрытие/отмену диалога; own root0файлов. Native отмена автоматически не доказана; иной сохраненный путь нельзя исключить";
        Возврат;
    КонецЕсли;
    Попытка
        ПроверитьСвоиДваФайла85(К);
        К.Фаза = "проверено";
        Занято85 = Ложь;
        Статус85 = "После ВАШЕГО закрытия диалога exact own whitelist2/UTF8 readback подтверждены; остальные пути не проверялись";
    Исключение
        К.Фаза = "ошибка";
        Занято85 = Ложь;
        Статус85 = "Partial/чужой файл вown root не является CANCEL или успехом. Не перезаписывать/удалять; manual read-only разбор";
    КонецПопытки;
КонецПроцедуры

&НаКлиентеНаСервереБезКонтекста
Функция СвоиТексты85(UUID)
    Если ТипЗнч(UUID) <> Тип("Строка") Тогда
        ВызватьИсключение "Нужен UUID своего опыта строкой";
    КонецЕсли;
    Если Строка(Новый УникальныйИдентификатор(UUID)) <> UUID
        Или UUID = "00000000-0000-0000-0000-000000000000" Тогда
        ВызватьИсключение "Нужен собственный canonical ненулевой UUID";
    КонецЕсли;
    Тексты = Новый Соответствие;
    Тексты.Вставить("own-card.txt", "UUID=" + UUID + Символы.ПС + "Книга;3;250");
    Тексты.Вставить("own-total.txt", "UUID=" + UUID + Символы.ПС + "Сумма=750");
    Возврат Тексты;
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Процедура ПроверитьСвоиBytes85(Данные, Текст)
    Ожидание = ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8, Ложь);
    Если ТипЗнч(Данные) <> Тип("ДвоичныеДанные") Тогда
        ВызватьИсключение "Нужны actual bytes, не текст или ссылка";
    КонецЕсли;
    Если Данные.Размер() <> Ожидание.Размер()
        Или ПолучитьHexСтрокуИзДвоичныхДанных(Данные) <> ПолучитьHexСтрокуИзДвоичныхДанных(Ожидание) Тогда
        ВызватьИсключение "Файл обязан содержать ровно свои concrete UTF8 bytes безBOM";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвоегоКлиента85()
    #Если ТолстыйКлиентУправляемоеПриложение Тогда
        Система = Новый СистемнаяИнформация;
        Если Система.ТипПлатформы <> ТипПлатформы.Windows_x86_64 Тогда
            ВызватьИсключение "Нужен свой толстый управляемый Windowsx64 клиент8.5.1.1343";
        КонецЕсли;
        Если Не ПодтверждаюСвойСтенд85 Тогда
            ВызватьИсключение "Подтвердите только новый пустой собственный стенд";
        КонецЕсли;
        ПроверитьНаСервере85();
    #Иначе
        ВызватьИсключение "Thin/web/mobile positive path здесь не заявлен; native FileRef.File может быть Undefined";
    #КонецЕсли
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьНаСервере85()
    ПроверитьСвойПустойСтенд();
КонецПроцедуры

&НаКлиенте
Функция СоздатьСвоюПапку85(UUID)
    ПроверитьСвоегоКлиента85();
    СвоиТексты85(UUID);
    База = КаталогВременныхФайлов();
    Если Сред(База, 2, 2) <> ":\" Или Лев(База, 2) = "\\" Тогда
        ВызватьИсключение "Только actual local Windows native temp, не UNC/произвольный input";
    КонецЕсли;
    Если Прав(База, 1) <> "\" Тогда
        База = База + "\";
    КонецЕсли;
    Папка = Новый Файл(База);
    Если Не Папка.Существует() Или Не Папка.ЭтоКаталог() Тогда
        ВызватьИсключение "Native temp должен существовать";
    КонецЕсли;
    Корень = База + "OwnFileTransfer85-" + UUID + "\";
    Свежая = Новый Файл(Корень);
    Если Свежая.Существует() Тогда
        ВызватьИсключение "Своя UUID-папка уже существует; overwrite запрещен";
    КонецЕсли;
    СоздатьКаталог(Корень);
    Если НайтиФайлы(Корень, "*", Ложь).Количество() <> 0 Тогда
        ВызватьИсключение "Нужна свежая пустая собственная папка";
    КонецЕсли;
    Возврат Корень;
КонецФункции

&НаКлиенте
Процедура ПроверитьСвойКорень85(К)
    СвоиТексты85(К.UUID);
    База = КаталогВременныхФайлов();
    Если Прав(База, 1) <> "\" Тогда
        База = База + "\";
    КонецЕсли;
    Если К.Корень <> База + "OwnFileTransfer85-" + К.UUID + "\" Тогда
        ВызватьИсключение "Не свой actual native-temp UUID root";
    КонецЕсли;
    Папка = Новый Файл(К.Корень);
    Если Не Папка.Существует() Или Не Папка.ЭтоКаталог() Тогда
        ВызватьИсключение "Своя созданная папка должна существовать";
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ПроверитьСвоиДваФайла85(К)
    ПроверитьСвойКорень85(К);
    Тексты = СвоиТексты85(К.UUID);
    Файлы = НайтиФайлы(К.Корень, "*", Ложь);
    Если Файлы.Количество() <> 2 Тогда
        ВызватьИсключение "Нужны ровно2своих файла, без дополнительных/частичных результатов";
    КонецЕсли;
    Для Каждого Файл Из Файлы Цикл
        Текст = Тексты.Получить(Файл.Имя);
        Если Текст = Неопределено Или Не Файл.ЭтоФайл()
            Или НРег(Файл.ПолноеИмя) <> НРег(К.Корень + Файл.Имя) Тогда
            ВызватьИсключение "Нужен точный whitelist собственных flat имен, не каталог/другой путь";
        КонецЕсли;
        Ожидание = ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8, Ложь);
        Если Файл.Размер() <> Ожидание.Размер() Тогда
            ВызватьИсключение "Сначала exact маленький размер own fixture, потом чтениеbytes; другие/огромные файлы не загружаем";
        КонецЕсли;
        ПроверитьСвоиBytes85(Новый ДвоичныеДанные(Файл.ПолноеИмя), Текст);
    КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПроверитьСвойПустойСтенд()
    Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
        ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
    КонецЕсли;
    Если Метаданные.ЕстьИзмененияРасширениямиКонфигурации() Тогда
        ВызватьИсключение "Свой сеанс не должен изменяться расширениями";
    КонецЕсли;
    Источники = Новый Массив;
    Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
    Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
    Для Каждого Источник Из Источники Цикл
        Расширения = РасширенияКонфигурации.Получить(, Источник);
        Если ТипЗнч(Расширения) <> Тип("Массив") Тогда
            ВызватьИсключение "Native список расширений должен иметь тип Массив";
        КонецЕсли;
        Если Расширения.Количество() <> 0 Тогда
            ВызватьИсключение "В своём новом стенде нет расширений базы или сеанса";
        КонецЕсли;
    КонецЦикла;
    Если ТранзакцияАктивна() Тогда
        ВызватьИсключение "Чужая или вложенная активная транзакция не допускается";
    КонецЕсли;
КонецПроцедуры

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

  1. НовыйСвойDownload85 создает новую UUID-папку. Сервер создает две строки UTF8, помещает их во временное хранилище своей формы и формирует настоящие ОписаниеПередаваемогоФайла через Имя и Хранение. Содержимое каждого адреса проверяется до возврата.

  2. ВыгрузитьБезДиалога85 вызывает НачатьПолучениеФайловССервера с оповещением, описаниями и своей пустой папкой. Обработчик завершения сопоставляет результаты по имени, адресу и полному пути, затем проверяет ровно два файла и перечитывает их байты.

  3. После успешной проверки отдельные новые опыты используют параметры диалога: конструктор по умолчанию с тремя свойствами и конструктор с тремя аргументами. Эти объекты действительно передаются диалогному варианту API.

  4. Подтвердите сохранение только в собственную показанную папку. ВыборКаталога=Истина включает выбор папки; Каталог задает начальное место, но не запрещает пользователю выбрать другое. За пределами собственной папки код ничего не гарантирует.

  5. После фактического сохранения и закрытия диалога подтвердите его закрытие и нажмите ПроверитьРучнойДиалог85. Успех требует двух собственных файлов с точными байтами; запуск метода или наличие описаний не являются успехом.

  6. В новом опыте нажмите Отмена и отдельно проверьте пустую папку. Метод не возвращает флаг отмены: сообщение честно показывает ваше подтверждение закрытия и отсутствие файлов здесь, а не автоматически доказанную отмену или отсутствие файлов в другом месте.

  7. Один файл, чужая запись или неверные байты означают частичный либо неизвестный результат. Новый опыт запрещен; перезаписи, удаления и компенсации нет. Собственные файлы и временные адреса остаются для ручного разбора.

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

  1. Проверены два собственных коротких имени, UUID, точные байты и размер; произвольный *.txt или первый элемент массива не принимаются.

  2. Конструкторы, свойства и методы реально используются. Обработчики с 2, 6, 3 параметрами и обработчик ошибки с 3 параметрами согласованы с установленной справкой 8.5.1.1343.

  3. Свойства ссылок и результатов только для чтения не присваиваются. Недоступный СсылкаНаФайл.Файл не заменяется выдуманным локальным файлом.

  4. Отмена, частичный результат, неизвестное состояние и ошибка различаются. Нет автоматического повтора, отката, обещания атомарности или успеха без чтения результата.

  5. Интерфейс, файловая передача и 1С здесь не запускались. Проверки статические; подготовка относится только к вашему будущему собственному опыту.

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

Ожидаемый ручной результат: две собственные записи UTF8 о книге, количестве 3, цене 250 и сумме 750 передаются без изменений. Настоящие ссылки, описания и прочитанное содержимое проверяются. Отмена и частичный результат не объявляются успехом. Фактический запуск не выполнялся.

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

  1. Фильтр помещения не ограничивает содержимое. Имена, путь и байты проверяются перед передачей. После отказа перед началом других оповещений не будет, поэтому признак занятости сбрасывается там.

  2. Диалогное получение не имеет оповещения о завершении. Начальный каталог — не граница безопасности, а ручное подтверждение закрытия — не флаг платформы. Для контролируемого назначения выбирайте бездиалоговый маршрут.

  3. Проверки времени, размера и два Ждать не атомарны. Частичные или неизвестные результаты нельзя перекрывать повторной записью или слепо откатывать. Код ничего не удаляет.

  4. UUID ссылки идентифицирует объект, не физический файл. В веб-клиенте связанный Файл может быть недоступен; такой вариант честно отвергается и не объявляется рабочим примером.

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

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

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

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

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