ТекстовыйДокумент.НачатьЧтение

Методы · BeginReading

Вызывает начало чтения текстового документа из файла.

Синтаксис

НачатьЧтение(<ОписаниеОповещения>, <ИмяФайла>, <ТипФайла>, <РазделительСтрок>)
Полное описание, параметры и ограничения

ТекстовыйДокумент.НачатьЧтение (TextDocument.BeginReading)

ТекстовыйДокумент (TextDocument)

НачатьЧтение (BeginReading)

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

Синтаксис:
НачатьЧтение(<ОписаниеОповещения>, <ИмяФайла>, <ТипФайла>, <РазделительСтрок>)
Параметры:

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

<ИмяФайла> (обязательный)
Тип: Строка.
Имя текстового файла.

<ТипФайла> (необязательный)
Тип: КодировкаТекста, Строка.
Указывается кодировка текста в открываемом файле.
В случае, если параметр не задан, формат текста будет определен автоматически (если он хранится в файле с сигнатурой BOM в начале). Если автоматически определить формат файла не удается, файл будет открыт в кодировке UTF8.

Тип файла может быть задан как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки.
Поддерживаемые названия кодировок:
UTF-8

UTF-16

UTF-16BE

UTF-16LE

ISO-8859-1

US-ASCII

gb18030

iso-8859-2

iso-8859-3

iso-8859-4

iso-8859-5

iso-8859-6

iso-8859-7

iso-8859-8

iso-8859-9

iso-8859-13

iso-8859-15

Shift_JIS

EUC-JP

Big5

Big5-HKSCS

GBK

GB2312

GB_2312-80

EUC-KR

KSC_5601

windows-949

windows-874

cp866

KOI8-R

KOI8-U

windows-1250

windows-1251

windows-1252

windows-1253

windows-1254

windows-1255

windows-1256

windows-1257

windows-1258

macintosh

x-mac-cyrillic

ISO-2022-JP

ISO-2022-KR

ISO-2022-CN

ISO-2022-CN-EXT

HZ-GB-2312

<РазделительСтрок> (необязательный)
Тип: Строка.
Задается строка, являющаяся разделителем строк, из которой при чтении файла будет сформирован символ ПС.
Если строка пустая, то разделители строк при чтении не конвертируются.
Допустимые варианты разделителей строк:
ВК;

ПС;

ВК + ПС (значение по умолчанию - может не указываться).
При использовании других строк в качестве разделителей будет вызвано исключение.
Значение по умолчанию: ВК + ПС.
Описание:

Вызывает начало чтения текстового документа из файла.

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

Тонкий клиент, веб-клиент, толстый клиент.

См. также:
ТекстовыйДокумент, метод Прочитать
ТекстовыйДокумент, метод ПрочитатьАсинх

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

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

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

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

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

Записать и прочитать свой временный текст callback-цепочкой

Полный Windows-модуль демонстрирует различие сигнатур: ПослеЗаписи(Результат, Состояние), ПослеЧтения(Состояние). Содержимое проверяется до удаления своего файла.

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

Модуль пустой управляемой формы учебной внешней обработки; тонкий или толстый клиент Windows. Вставьте весь модуль. Это не серверный код.

Подготовка

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

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

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

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

  5. ТОЛЬКО Windows-клиент с доступом к собственному временному каталогу. Веб-клиент этим примером не проверяется.

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

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

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

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

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

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

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

&НаКлиенте
Процедура УдалитьСвойФайл(Состояние)
    Попытка
        СвойФайл = Новый Файл(Состояние.ИмяФайла);
        Если СвойФайл.Существует() Тогда
            УдалитьФайлы(Состояние.ИмяФайла);
        КонецЕсли;
    Исключение
        // Первичная ошибка должна оставаться видимой, даже если уборка не удалась.
    КонецПопытки;
КонецПроцедуры

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

  1. Проверяем отсутствие по уникальному имени до записи. Состояние удерживает источник и отдельный объект Копия.

  2. Callback записи получает Результат и Состояние, но успех для данного Windows-примера проверяется по существованию/размеру файла.

  3. НачатьЧтение заполняет Состояние.Копия. У его callback только Состояние, не выдуманный новый ТекстовыйДокумент в аргументе Результат.

  4. Обе стороны явно используют UTF-8 и разделитель ПС.

  5. Проверяем обе восстановленные строки и только затем удаляем собственный временный файл.

  6. В случае асинхронной ошибки отдельный обработчик пытается удалить только этот файл и оставляет стандартное отображение первичной ошибки.

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

  1. Пять сообщений Истина: файл непустой, число строк совпало, Книга/Ручка восстановлены, свой файл удалён.

  2. Новый запуск создаёт новое имя, а перекрывающийся запуск отклоняется до завершения.

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

Закончен конкретный файловый roundtrip с правильными callback-сигнатурами записи и чтения.

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

  1. Прочитать/НачатьЧтение меняют существующий объект Копия; не надо заменять его неизвестным результатом callback.

  2. Отсутствие файла после callback не означает успех, даже если Результат не равен Ложь.

  3. Аварийное завершение клиента или ошибка уборки могут оставить свой временный txt. Не удаляйте весь временный каталог.

  4. Это собственный учебный txt, не проверка чтения пользовательского выбранного файла через браузер.

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

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

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

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

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