Для чтения и отображения в форме обработки содержимого текстового документа добавим команду ПросмотрТД. Обработчик команды заполним следующим образом (листинг 6.34).
Листинг 6.34. Обработчик команды «ПросмотрТД»
&НаКлиенте
Процедура ПросмотрТД(Команда)
ТД.Очистить();
ТД.НачатьЧтение(Новый ОписаниеОповещения("ПросмотрТДЗавершение", ЭтотОбъект), "c:\temp\doc_text.txt");
КонецПроцедуры
В этом обработчике мы начинаем чтение из записанного ранее текстового файла методом НачатьЧтение() объекта ТекстовыйДокумент. В результате содержимое текстового файла полностью загружается в реквизит ТД, находящийся в нашей демонстрационной обработке. В метод НачатьЧтение() первым параметром мы передаем имя процедуры-обработчика оповещения ПросмотрТДЗавершение(), которая будет выполнена, после того как текстовый файл будет прочитан (листинг 6.35).
Листинг 6.35. Процедура «ПросмотрТДЗавершение()»
&НаКлиенте
Процедура ПросмотрТДЗавершение(Дополнительно) Экспорт
ТД.ВставитьСтроку(1, "Показывается в оригинальном виде");
КонецПроцедуры
Перед выводом текстового документа реквизит ПолеТД типа ТекстовыйДокумент очищается, после чтения в качестве первой вставляется строка «Показывается в оригинальном виде» (она «сдвигает» ранее загруженные строки).
Пользователь может производить любые корректировки текста, представленного в поле формы, отражающем текстовый документ. Чтобы записать результат работы в файл, добавим команду ЗаписьТД. Обработчик команды заполним следующим образом (листинг 6.36).
Листинг 6.36. Обработчик команды «ЗаписьТД»
&НаКлиенте
Процедура ЗаписьТД(Команда)
ТД.НачатьЗапись(Новый ОписаниеОповещения("ЗаписьТДЗавершение", ЭтотОбъект), "c:\temp\doc_text2.txt");
КонецПроцедуры
В этом обработчике методом НачатьЗапись() объекта ТекстовыйДокумент мы начинаем запись содержимого текстового документа, отображаемого в форме, в указанный вторым параметром текстовый файл. Первым параметром в этот метод мы передаем имя процедуры-обработчика оповещения ЗаписьТДЗавершение(), которая будет выполнена, после того как текстовый файл будет записан (листинг 6.37).
Листинг 6.37. Процедура «ЗаписьТДЗавершение()»
&НаКлиенте
Процедура ЗаписьТДЗавершение(Результат, Дополнительно) Экспорт
Если Результат Тогда
ТД.Очистить();
КонецЕсли;
КонецПроцедуры
После записи реквизит, содержащий данные текстового документа, очищается. Этого можно и не делать, в этом случае обработчик оповещения в методе НачатьЗапись() можно не указывать.
При работе с текстовыми файлами в «1С:Предприятии» следует учитывать особенности представления разделителей строк в файлах Windows и в тексте, используемом для обработки внутри «1С:Предприятия». Для целей внутренней обработки текста используется разделитель, состоящий из одного символа, в то время как в файлах Windows в качестве разделителя строк используется комбинация из двух последовательных символов.
Внутри «1С:Предприятия» разделителем строк является символ Символы.ПС, он же LF (Line Feed, Перевод Строки), который имеет шестнадцатеричный код ОА. В то же время в кодировке текстовых файлов для Windows принято, что разделителем строк является пара символов – «CR-LF». CR (Carriage Return, Возврат Каретки) имеет шестнадцатеричный код 0D.
При записи и чтении текстовых файлов «1С:Предприятие» производит преобразование внутренних разделителей строк в представление, принятое в текстовых файлах Windows. То есть при записи символ «ПС» (LF) преобразуется в пару символов «ВК-ПС» («CR-LF»). При чтении происходит обратное преобразование, то есть пара «ВК-ПС» («CR-LF») преобразуется в одиночный символ ПС (LF).
Символ «ВК» («CR») при записи файла не преобразуется и не выбрасывается, то есть попадает в файл как есть. При чтении файла символы «ВК» («CR») и «ПС» («LF»), не образующие пару, также считываются без преобразований.