Файл.НачатьУстановкуНевидимости

Методы · BeginSettingHidden

Начинает установку значения атрибута файла "Скрытый" ("Hidden").

Синтаксис

НачатьУстановкуНевидимости(<ОписаниеОповещения>, <Невидимость>)
Полное описание, параметры и ограничения

Файл.НачатьУстановкуНевидимости (File.BeginSettingHidden)

Файл (File)

НачатьУстановкуНевидимости (BeginSettingHidden)

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

Синтаксис:
НачатьУстановкуНевидимости(<ОписаниеОповещения>, <Невидимость>)
Параметры:

<ОписаниеОповещения> (необязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения со следующими параметрами:
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.

<Невидимость> (обязательный)
Тип: Булево.
Истина - установить атрибут "Скрытый", Ложь - снять атрибут "Скрытый".
Описание:

Начинает установку значения атрибута файла "Скрытый" ("Hidden").

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

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

См. также:
Файл, метод УстановитьНевидимость
Файл, метод УстановитьНевидимостьАсинх

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

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

Описание изменено в версии 8.3.18.

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

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

Переключить Hidden/readonly через последовательные оповещения

Четыре установочных/получающих метода применяем к своему закрытому файлу. Возвращённые булевы значения читаются в обработчиках, установка передаёт только состояние.

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

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

Подготовка

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

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

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

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

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

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

  7. Вставьте весь модуль одной задачи в новую учебную форму. Здесь обычные процедуры и ОписаниеОповещения, не Асинх/Ждать.

  8. Учебный файл ABC123 создаётся с СоздатьНовый; поток записи закрывается до запуска операций карточки.

  9. В обработчиках успеха сначала идут результаты метода, затем Состояние; установочные методы передают только Состояние.

  10. При очистке снимаются Hidden/readonly только у собственного точного имени. Ошибки закрытия/удаления показываются, не скрываются.

Перем Выполняется;

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

&НаКлиенте
Функция ОповещениеДля(Имя, Состояние)
    Возврат Новый ОписаниеОповещения(Имя, ЭтотОбъект, Состояние,
        "ОшибкаОперации", ЭтотОбъект);
КонецФункции

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

&НаКлиенте
Процедура ОшибкаОперации(Ошибка, СтандартнаяОбработка, Состояние) Экспорт
    ОсвободитьРесурсы(Состояние);
    Выполняется = Ложь;
    СтандартнаяОбработка = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ПослеСкрытия(Состояние) Экспорт
    Попытка
        Состояние.Карточка.НачатьПолучениеНевидимости(ОповещениеДля("Скрытость", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура Скрытость(Скрыт, Состояние) Экспорт
    Попытка
        Сообщить(Скрыт);
        Состояние.Карточка.НачатьУстановкуНевидимости(ОповещениеДля("ПослеВосстановленияВидимости", Состояние), Ложь);
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеВосстановленияВидимости(Состояние) Экспорт
    Попытка
        Состояние.Карточка.НачатьПолучениеНевидимости(ОповещениеДля("ВидимостьВосстановлена", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ВидимостьВосстановлена(Скрыт, Состояние) Экспорт
    Попытка
        Сообщить(Не Скрыт);
        Состояние.Карточка.НачатьУстановкуТолькоЧтения(ОповещениеДля("ПослеReadonly", Состояние), Истина);
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеReadonly(Состояние) Экспорт
    Попытка
        Состояние.Карточка.НачатьПолучениеТолькоЧтения(ОповещениеДля("Readonly", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура Readonly(ТолькоЧтение, Состояние) Экспорт
    Попытка
        Сообщить(ТолькоЧтение);
        Состояние.Карточка.НачатьУстановкуТолькоЧтения(ОповещениеДля("ПослеСнятияReadonly", Состояние), Ложь);
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ПослеСнятияReadonly(Состояние) Экспорт
    Попытка
        Состояние.Карточка.НачатьПолучениеТолькоЧтения(ОповещениеДля("ReadonlyСнят", Состояние));
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ReadonlyСнят(ТолькоЧтение, Состояние) Экспорт
    Попытка
        Сообщить(Не ТолькоЧтение);
        Сообщить(Состояние.Карточка.Размер() = 6);
        ЗавершитьПример(Состояние);
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьПример(Состояние) Экспорт
    Попытка
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        Сообщить("Проверка файловой карточки завершена");
    Исключение
        ОсвободитьРесурсы(Состояние);
        Выполняется = Ложь;
        ВызватьИсключение;
    КонецПопытки;
КонецПроцедуры

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

  1. После установочного НачатьУстановкуНевидимости вызывается ПослеСкрытия только с Состояние.

  2. Полученный Hidden=True читается в Скрытость; после установки False отдельно проверяется восстановление.

  3. Readonly также включается и затем снимается с двумя обратными чтениями.

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

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

  1. Пять сравнений Истина: Hidden=True/False, readonly=True/False, размер 6.

  2. При успешной очистке файл отсутствует. Атрибуты чужих файлов и права пользователя базы не менялись.

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

Отработана полная цепочка установки и проверки двух файловых атрибутов.

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

  1. Readonly-атрибут не заменяет ACL, Hidden не скрывает секреты от чтения по пути.

  2. Не добавляйте фиктивный параметр Результат установочным обработчикам: это сдвинет Состояние.

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

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

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

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

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