Текстовый документ, поле текстового документа (Продолжаем работать с текстом в 1С)

Категория: Учебники по 1С » Технологии интеграции 1С Предприятия 8.2

В редакторе основной формы обработки создадим реквизит ПолеТД типа ТекстовыйДокумент и разместим в форме поле вида ПолеТекстовогоДокумента, связанное с этим реквизитом (рис. 1.1).

 Работа с текстом в 1С Предприятии 8.2

Для записи данных из справочника в текстовый документ может использо­ваться следующий программный код:

&НаСервереБезКонтекста
Функция ЭлементВСтроку(Элемент)

Результат = СтрЗаменить(Элемент.Наименование, ",", "\,");

// Заменить символы " и , на \" и \,
Результат = СтрЗаменить(Результат, Символ(34), "\" + Символ(34));

Результат = Символ(34) +
Строка(Элемент.Код) + Символ(34) +
"," + Символ(34) +
Результат + Символ(34);

// Убирать пробелы из строкового представления числа
Цена = СтрЗаменить(Строка(Элемент.ЗакупочнаяЦена), " ", "");

Результат = Результат + "," + Символ(34) +
Цена + Символ(34) +
"," + Символ(34) +
Строка(Элемент.ЕдиницаИзмерения) + Символ(34) + "," + Символ(34);

Возврат Результат;

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

Результат = СокрЛП(НаименованиеКомпании);
КоличествоСимволов = СтрДлина(Результат);
Для Счетчик = КоличествоСимволов По 38 Цикл
Результат = Результат + " ";
КонецЦикла;
СтрокаДаты = Формат(ТекущаяДата(), "ДЛФ=D");
Результат = Результат + СтрокаДаты;

Возврат Результат;

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

 Листинг 1.4. Процедура «ЗаписатьНоменкпатуру»:

&НаКлиенте
Процедура ЗаписатьНоменклатуру(Команда)

// Необходимо установить реальный путь
Путь = "c:\";

ТД = Новый ТекстовыйДокумент;
// Кодировка UTF8 является кодировкой по умолчанию
ТД.УстановитьТипФайла(КодировкаТекста.UTF8);

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

ТД.Записать(Путь + "nomen.txt");

КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьСтрокиНоменклатуры()

СтрокиНоменклатуры = "";

Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий() Цикл

// Выгрузить только элементы справочника
Если Не Выборка.ЭтоГруппа Тогда
СтрокиНоменклатуры = СтрокиНоменклатуры + ЭлементВСтроку(Выборка) + Символы.ПС;
КонецЕсли;
КонецЦикла;

Возврат СтрокиНоменклатуры;

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

Процесс записи инициирует процедура ЗаписатьНоменклатуру ( ) (см. листинг 1.4). В процедуре производится создание объекта ТекстовыйДокумент и устанавливается тип кодировки этого документа.

 

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

 

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

 

Для формирования строки элемента номенклатуры используется функция ЭлементВСтрокуО (см. листинг 1.2). Эта функция, а также функция СформироватьЗаголовокО реализует достигнутые при переговорах о формате файла «договоренности».

 

Для чтения данных из полученного файла может использоваться следующий программный код (листинги 1.6 и 1.7).

&НаКлиенте

Функция РазобратьСтроку(СтрокаДляРазбора)

Результат = Новый Структура("Код, Наименование, Цена, ЕдиницаИзмерения");

// Прочитать код
Позиция = Найти(СтрокаДляРазбора, ",");
Код = Сред(СтрокаДляРазбора, 2, Позиция - 3);
Результат.Код = Код;

// Отрезать прочитанный фрагмент
СтрокаДалее = Сред(СтрокаДляРазбора, Позиция + 2);

// Прочитать наименование
Позиция = Найти(СтрокаДалее, ",");
Наименование = Сред(СтрокаДалее, 1, Позиция - 2);
Результат.Наименование = Наименование;

// Отрезать прочитанный фрагмент
СтрокаДалее = Сред(СтрокаДалее, Позиция + 2);

// Прочитать цену
Позиция = Найти(СтрокаДалее, ",");
Цена = Сред(СтрокаДалее, 1, Позиция - 2);
Результат.Цена = Цена;

// Отрезать прочитанный фрагмент
СтрокаДалее = Сред(СтрокаДалее, Позиция + 2);

// Прочитать единицу измерения
Позиция = Найти(СтрокаДалее, ",");
ЕдиницаИзмерения = Сред(СтрокаДалее, 1, Позиция - 2);
Результат.ЕдиницаИзмерения = ЕдиницаИзмерения;

Возврат Результат;
КонецФункции

Листинг 1.7. Процедура «ПрочитатьНоменклатуру»

&НаКлиенте
Процедура ПрочитатьНоменклатуру(Команда)

// Необходимо установить реальный путь
Путь= "c:\";

ТД = Новый ТекстовыйДокумент;
ТД.Прочитать(Путь + "nomen.txt");

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

ЗаголовокФайла = ТД.ПолучитьСтроку(1);
Сообщение.Текст = ЗаголовокФайла;
Сообщение.Сообщить();
НазваниеОтправителя = СокрЛП(Сред(ЗаголовокФайла, 1, 39));
ДатаТекстом = СокрЛП(Сред(ЗаголовокФайла, 40));

Для ТекущаяСтрока = 2 По ТД.КоличествоСтрок() Цикл
ПрочитаннаяСтрока = ТД.ПолучитьСтроку(ТекущаяСтрока);
Сообщение.Текст = ПрочитаннаяСтрока;
Сообщение.Сообщить();
Значение = РазобратьСтроку(ПрочитаннаяСтрока);
КонецЦикла;

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

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

Функция РазобратьСтрокуО (см. листинг 1.6) извлекает из строки данные по элементу справочника, исходя из договоренностей по формату данных. Разбор заголовка реализован в процедуре ПрочитатьНоменклатуру () (см. листинг 1.7).

 

Пример работы данной 1С Обработки можно увидеть, скачав ее отсюда

dle

Помоги проекту! Расскажи друзьям о сайте: