Скрыть свой временный файл и вернуть видимость

Учебные задачи

ПолучитьНевидимость/УстановитьНевидимость работают с атрибутом Hidden файла, не с видимостью элемента формы. Содержимое ABC123 не меняется.

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

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

Подготовка

  1. Создайте учебную внешнюю обработку с пустой управляемой основной формой. Создайте команду УчебныйПример и кнопку этой команды.

  2. В свойстве команды Действие выберите процедуру УчебныйПример. Вставьте полный приведённый модуль формы.

  3. Откройте EPF в тонком или толстом клиенте Windows и нажмите кнопку. Не переносите Ждать и Асинх в серверный общий модуль.

  4. Файл создаётся на компьютере клиента Windows во временном каталоге. Веб-клиент и сервер для данного модуля не используйте.

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

  6. Создаётся только собственный временный файл с режимом СоздатьНовый. После ожидания операций ресурсы закрываются, точное собственное имя удаляется.

  7. Файл содержит только собственную ASCII-строку ABC123 (6 байтов без BOM). Поток записи закрывается перед чтением/изменением атрибутов.

  8. Все файлы примера создаются заново. Скрытость/readonly при очистке снимаются только у собственного файла после закрытия, затем точное имя удаляется.

  9. Не заменяйте временное имя путём конфигурации, базы, документа или загруженного вами архива. Атрибуты и время меняются только у учебного файла.

  10. Здесь обычная Процедура, без Асинх/Ждать. Модуль работает только на клиенте Windows.

&НаКлиенте
Процедура УчебныйПример(Команда)
    ИмяФайла = ПолучитьИмяВременногоФайла("bin");
    УчебныйФайл = Новый Файл(ИмяФайла);
    Если УчебныйФайл.Существует() Тогда
        ВызватьИсключение "Временное имя уже занято: чужой файл не открываем";
    КонецЕсли;
    Поток = Неопределено;
    Вид = Неопределено;
    Копия = Неопределено;
    СозданСвойФайл = Ложь;
    Попытка
        Поток = Новый ФайловыйПоток(ИмяФайла, РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);
        СозданСвойФайл = Истина;
        Буфер = ПолучитьБуферДвоичныхДанныхИзСтроки("ABC123", КодировкаТекста.UTF8, Ложь);
        Поток.Записать(Буфер, 0, Буфер.Размер);
        Поток.Закрыть();
        Поток = Неопределено;
        УчебныйФайл.УстановитьНевидимость(Истина);
        Сообщить(УчебныйФайл.ПолучитьНевидимость());
        УчебныйФайл.УстановитьНевидимость(Ложь);
        Сообщить(Не УчебныйФайл.ПолучитьНевидимость());
        Сообщить(УчебныйФайл.Размер() = 6);
    Исключение
        Если Вид <> Неопределено Тогда
            Вид.Закрыть();
        КонецЕсли;
        Если Копия <> Неопределено Тогда
            Копия.Закрыть();
        КонецЕсли;
        Если Поток <> Неопределено Тогда
            Поток.Закрыть();
        КонецЕсли;
        Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
            УчебныйФайл.УстановитьТолькоЧтение(Ложь);
            УчебныйФайл.УстановитьНевидимость(Ложь);
        КонецЕсли;
        Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
            УдалитьФайлы(ИмяФайла);
        КонецЕсли;
        ВызватьИсключение;
    КонецПопытки;
    Если Вид <> Неопределено Тогда
        Вид.Закрыть();
    КонецЕсли;
    Если Копия <> Неопределено Тогда
        Копия.Закрыть();
    КонецЕсли;
    Если Поток <> Неопределено Тогда
        Поток.Закрыть();
    КонецЕсли;
    Если СозданСвойФайл И УчебныйФайл.Существует() Тогда
        УчебныйФайл.УстановитьТолькоЧтение(Ложь);
        УчебныйФайл.УстановитьНевидимость(Ложь);
    КонецЕсли;
    Если СозданСвойФайл Тогда
        УдалитьФайлы(ИмяФайла);
    КонецЕсли;
    Сообщить(Не УчебныйФайл.Существует());
КонецПроцедуры

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

  1. Создаём и закрываем собственный шестибайтный файл, а не обращаемся к рабочему документу.

  2. В Windows Hidden=True может скрыть файл в проводнике в зависимости от настроек показа; объект Файл всё ещё его видит.

  3. Возвращаем Hidden=False и отдельно проверяем размер. Очистка повторно снимает атрибуты перед удалением.

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

  1. Три сравнения Истина: скрыт, снова не скрыт, размер 6.

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

  3. Последнее сравнение Истина: собственный временный файл удалён после снятия readonly/скрытости.

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

Отработано изменение файлового Hidden с восстановлением собственного объекта.

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

  1. Hidden не шифрует данные и не запрещает чтение по известному пути.

  2. Скрытость файла не равна CSS-видимости или свойству Видимость элемента 1С.

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

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

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

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

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