Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Текстовые файлы
Дальше: Отображение текстового документа

Текстовый документ, поле текстового документа

Для иллюстрации возможностей работы с текстовым файлом (с использованием объекта ТекстовыйДокумент и поля формы вида ПолеТекстовогоДокумента) добавим в нашу демонстрационную обработку реквизит ТД типа ТекстовыйДокумент и реквизит СтрокаРазделителя, в котором будет храниться разделитель между значениями текстового файла. Перетащим их в окно элементов формы.

Затем добавим команду ЗаписатьДанныеСотрудников. Обработчик команды заполним следующим образом (листинг 6.29).

Листинг 6.29. Обработчик команды «ЗаписатьДанныеСотрудников»

&НаКлиенте

Процедура ЗаписатьДанныеСотрудников(Команда)

 

НовыйТД = Новый ТекстовыйДокумент;

// Установить кодировку документа UTF8. Это кодировка по умолчанию.

НовыйТД.УстановитьТипФайла(КодировкаТекста.UTF8);

 

Если ПустаяСтрока(СтрокаРазделителя) Тогда

СтрокаРазделителя = ",";

КонецЕсли;

Текст = ПолучитьСтрокиСотрудников(СтрокаРазделителя);

Текст = СформироватьЗаголовок("ООО Быстрее, выше, сильнее") + Символы.ПС + Текст;

НовыйТД.УстановитьТекст(Текст);

 

НовыйТД.НачатьЗапись(, "c:\temp\doc_text.txt");

 

КонецПроцедуры

В этом обработчике мы создаем объект ТекстовыйДокумент и устанавливаем тип кодировки этого документа.

Затем вызываем функцию ПолучитьСтрокиСотрудников(), в которую передаем строку разделителя значений (см. листинг 6.30). Эта функция выполняется на сервере. В ней в цикле обхода выборки элементов справочника Сотрудники мы формируем строки с данными сотрудников и в виде одной большой строки возвращаем в процедуру ЗаписатьДанныеСотрудников(). Для объединения данных мы используем функцию глобального контекста СтрСоединить().

После этого в полученную строку мы добавляем заголовок файла обмена. Для получения заголовка используется функция СформироватьЗаголовок(), см. листинг 6.31. Затем методом УстановитьТекст() объекта ТекстовыйДокумент мы устанавливаем эту строку в виде текста в текстовый документ и записываем документ в текстовый файл методом НачатьЗапись().

Функции СформироватьЗаголовок() и ПолучитьСтрокиСотрудников() реализуют достигнутые при переговорах «договоренности» о формате файла обмена.

Листинг 6.30. Функция «ПолучитьСтрокиСотрудников()»

&НаСервере

Функция ПолучитьСтрокиСотрудников(Разделитель)

 

СтрокаСотрудника = Новый Массив();

МассивСтрокСотрудников = Новый Массив();

 

Выборка = Справочники.Сотрудники.Выбрать();

Пока Выборка.Следующий() Цикл

СтрокаСотрудника.Очистить();

СтрокаСотрудника.Добавить(Выборка.Код);

СтрокаСотрудника.Добавить(Выборка.Наименование);

СтрокаСотрудника.Добавить(Формат(Выборка.ДатаРождения, "ДЛФ=D"));

СтрокаСотрудника.Добавить(Выборка.КоличествоДетей);

 

Данные = СтрСоединить(СтрокаСотрудника, Разделитель);

МассивСтрокСотрудников.Добавить(Данные);

КонецЦикла;

 

Возврат СтрСоединить(МассивСтрокСотрудников, Символы.ПС);

 

КонецФункции

Листинг 6.31. Функция «СформироватьЗаголовок()»

&НаКлиенте

Функция СформироватьЗаголовок(НаименованиеКомпании)

 

Возврат СокрЛП(НаименованиеКомпании) + "-" + Формат(ТекущаяДата(), "ДЛФ=D");

 

КонецФункции

Для чтения данных из полученного файла добавим команду ПрочитатьДанныеСотрудников. Обработчик команды заполним следующим образом (листинг 6.32).

Листинг 6.32. Обработчик команды «ПрочитатьДанныеСотрудников»

Процедура ПрочитатьДанныеСотрудников(Команда)

 

ТД.НачатьЧтение(Новый ОписаниеОповещения("ПрочитатьДанныеЗавершение", ЭтотОбъект), "c:\temp\doc_text.txt");

 

КонецПроцедуры

В этом обработчике мы начинаем чтение из записанного ранее текстового файла методом НачатьЧтение() объекта ТекстовыйДокумент. В результате содержимое текстового файла полностью загружается в реквизит ТД, находящийся в нашей демонстрационной обработке. В метод НачатьЧтение() первым параметром мы передаем имя процедуры-обработчика оповещения ПрочитатьДанныеЗавершение(), которая будет выполнена, после того как текстовый файл будет прочитан (листинг 6.33).

Листинг 6.33. Процедура «ПрочитатьДанныеЗавершение()»

&НаКлиенте

Процедура ПрочитатьДанныеЗавершение(Дополнительно) Экспорт

 

Сообщение = Новый СообщениеПользователю();

 

ЗаголовокФайла = ТД.ПолучитьСтроку(1);

СтрокаЗаголовка = СтрРазделить(ЗаголовокФайла, "-");

НазваниеОтправителя = СтрокаЗаголовка[0];

Сообщение.Текст = НазваниеОтправителя;

Сообщение.Сообщить();

ДатаТекстом = СтрокаЗаголовка[1];

Сообщение.Текст = ДатаТекстом;

Сообщение.Сообщить();

 

Для ТекущаяСтрока = 2 По ТД.КоличествоСтрок() Цикл

ПрочитаннаяСтрока = ТД.ПолучитьСтроку(ТекущаяСтрока);

СтрокиСотрудников = СтрРазделить(ПрочитаннаяСтрока, СтрокаРазделителя);

 

Для Каждого Строка Из СтрокиСотрудников Цикл

Если НЕ ПустаяСтрока(Строка) Тогда

Сообщение.Текст = Строка;

Сообщение.Сообщить();

КонецЕсли;

КонецЦикла;

 

КонецЦикла;

 

КонецПроцедуры

Содержимое прочитанного файла мы получаем с помощью метода ПолучитьСтроку() текстового документа. Строку заголовка, согласно договоренности, мы получаем в первой строке документа. Остальные строки с данными сотрудников получаем в цикле обхода строк текстового документа.

Для разбора строк мы используем функцию глобального контекста СтрРазделить().

Назад: Текстовые файлы
Дальше: Отображение текстового документа