Опубликовано: 17.01.2021

Работа с текстовыми файлами

В программных модулях системы «1С:Предприятие» версии 7.7 для работы с текстами используется специальный агрегатный тип данных "Текст". Механизм работы с текстами предназначен для формирования отчётов в текстовом виде, а также для обмена информацией с другими программами (например, системой Клиент-Банк) посредством текстовых файлов. Средства языка дают возможность не только вывода строк в текстовые файлы, но и считывания имеющихся файлов с последующим разбором их по строкам.

Текстовый редактор 1С

Во всех программных модулях вызов методов для работы с текстом может выполняться только при помощи переменной со ссылкой на объект типа "Текст", который создаётся при помощи функции СоздатьОбъект(). Чтобы вызвать метод объекта "Текст", имя метода (с указанием необходимых параметров) пишется через точку после идентификатора переменной.

При создании объекта типа "Текст" в качестве названия агрегатного типа данных обязательно должно выступать ключевое слово «Текст» или его англоязычный синоним — «Text».

СтрокаОтчета = СоздатьОбъект("Текст");

Англоязычный вариант:

StringOfText = CreateObject("Text");

Методы для работы с текстовыми файлами

Установить или получить используемую кодировку при работе с текстовыми файлами позволяет метод КодоваяСтраница(). В качестве единственного параметра методу передаётся числовое выражение, задающее кодировку (возможные значения: 0 — Windows-кодировка; 1 — DOS-кодировка). Для определения текущей кодировки метод используется без параметра (возвращаемое значение: 0 — Windows-кодировка; 1 — DOS-кодировка). Англоязычный синоним имени метода — SetCodePage().

Пример использования метода:

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.КодоваяСтраница(0);
ТекстДок.Открыть("D:\1S_Base\1SBDB\catalog.txt");

Открыть текстовый файл позволяет метод Открыть(). В качестве единственного параметра методу передаётся строковое выражение, содержащее имя открываемого файла с указанием пути к нему. Англоязычный синоним имени метода — Open().

Пример использования метода:

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.КодоваяСтраница(0);
ТекстДок.Открыть(КаталогИБ() + "detail.txt");

Узнать количество строк в текстовом документе позволяет метод КоличествоСтрок(). Параметры у метода отсутствуют, а возвращает он количество строк текста, содержащегося в файле. Англоязычный синоним имени метода — LinesCnt().

Обычно данный метод используется при организации цикла выборки строк документа:

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.КодоваяСтраница(0);
ТекстДок.Открыть(КаталогИБ() + "detail.txt");
Если ТекстДок.КоличествоСтрок() = 0 Тогда
   Предупреждение("Этот файл пустой!");
Иначе
   Для НомерСтроки = 1 По ТекстДок.КоличествоСтрок() Цикл
      // Тело цикла выборки строк
      . . .
   КонецЦикла;
КонецЕсли;

Сохранить внесённые в файл изменения позволяет метод Записать(). В качестве единственного параметра методу передаётся строковое выражение, содержащее имя записываемого файла (с указанием пути к нему). Англоязычный синоним имени метода — Write().

Пример использования метода:

. . .
ТекстДок.ДобавитьСтроку("Отчёт о закупках по состоянию на " + ТекущаяДата());
ТекстДок.Записать("D:\1S_Base\SSTDB\report.txt");

Методы для работы с текстом в отчётах и файлах

Описываемые ниже методы позволяют формировать новый или редактировать имеющийся текст для последующего вывода его на экран в качестве отчёта или для сохранения в файл.

Получить строку текста по номеру позволяет метод ПолучитьСтроку(). В качестве единственного параметра методу передаётся числовое выражение, содержащее номер нужной строка текста. Возвращаемым значением метода будет требуемая строка текста. Англоязычный синоним имени метода — GetLine().

Пример использования метода:

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.КодоваяСтраница(0);
ТекстДок.Открыть(КаталогИБ() + "detail.txt");
Если ТекстДок.КоличествоСтрок() = 0 Тогда
   Предупреждение("Этот файл пустой!");
Иначе
   Для НомерСтроки = 1 По ТекстДок.КоличествоСтрок() Цикл
      // Выводим содержимое документа в окно сообщений
      Сообщить(ТекстДок.ПолучитьСтроку(НомерСтроки));
   КонецЦикла;
КонецЕсли;

Добавить строку в конец текста позволяет метод ДобавитьСтроку(). В качестве единственного параметра методу передаётся строковое выражение, содержащее вставляемую строку. Англоязычный синоним имени метода — AddLine().

Пример использования метода:

Справки = СоздатьОбъект("Текст");
Справки.КодоваяСтраница(0);
Справки.ДобавитьСтроку("ТипИнф:ДОХОД" + Строка(Год));
Справки.ДобавитьСтроку("ИМНС:" + Константа.КодИМНС);
Справки.ДобавитьСтроку("НаимОтпр:"+ВРег(СокрЛП(Константа.НазваниеОрганизации)));
. . .
Справки.Записать(КаталогПользователя()+ИмяФайла+".TXT");

Вставить строку в уже имеющийся текст позволяет метод ВставитьСтроку(). Англоязычный синоним имени метода — InsertLine().

Синтаксис метода:

ВставитьСтроку(<НомерСтроки>, <Содержимое>);

где

  • <НомерСтроки> — числовое выражение, содержащее номер вставляемой строки;
  • <Содержимое> — строковое выражение, содержащее вставляемую строку.

Пример использования метода:

ВыходнойТекст = СоздатьОбъект("Текст");
ВыходнойТекст.КодоваяСтраница(1);
. . .
// ставим строку записи о пачке
Если ИсходнаяТаблица = "СЗВ-4-1" Тогда
   // ВЫВОДИМ СТРОКУ В ФАЙЛ
   ВыходнойТекст.ВставитьСтроку(3,"""ПАЧК"","+Строка(НомПачкиВПачке)+",""ОПИСЬ"",""ОП61"","""+ДатаВыдачиСведенияПФР+""",1,"+Год+","""+КатегорияВсех+""","""","""","""+ТипПачки+""","""+ДопТипПч+""",0,0,0,0,"+ЧислоВФайл(НачисленоСтр)+","+ЧислоВФайл(НачисленоНкп)+","+ЧислоВФайл(НачисленоДоп)+",0,0");
Иначе
   // ВЫВОДИМ СТРОКУ В ФАЙЛ
   ВыходнойТекст.ВставитьСтроку(3,"""ПАЧК"","+Строка(НомПачкиВПачке)+",""ОПИСЬ"",""ОП61"","""+ДатаВыдачиСведенияПФР+""",1,"+Год+","""+КатегорияВсех+""","""","""+СокрЛП(ТУвПачке)+""","""+ТипПачки+""","""+ДопТипПч+""",0,0,0,0,"+ЧислоВФайл(НачисленоСтр)+","+ЧислоВФайл(НачисленоНкп)+","+ЧислоВФайл(НачисленоДоп)+",0,0");
КонецЕсли;
. . .

Заменить строку в уже имеющемся тексте позволяет метод ЗаменитьСтроку(). Англоязычный синоним имени метода — ReplaceLine().

Синтаксис метода:

ЗаменитьСтроку(<Номер>, <НовоеСодержимое>);

где

  • <Номер> — числовое выражение, содержащее номер заменяемой строки;
  • <НовоеСодержимое> — строковое выражение — новое содержимое строки.

Пример использования метода:

// Меняем информацию о кодировке внутри файла
ТекстФайл = СоздатьОбъект("Текст");
ТекстФайл.Открыть(Файл);
ИзменяемаяСтрока = ТекстФайл.ПолучитьСтроку(1);
ИзменяемаяСтрока = СтрЗаменить(ИзменяемаяСтрока, "utf-8", "windows-1251");
ТекстФайл.ЗаменитьСтроку(1, ИзменяемаяСтрока);
ТекстФайл.Записать(Файл);

Удалить строку с указанным номером позволяет метод УдалитьСтроку(). В качестве единственного параметра методу передаётся числовое выражение, содержащее номер удаляемой строки. Англоязычный синоним имени метода — DeleteLine().

Пример использования метода:

ТекстДок.УдалитьСтроку(7);

Очистить содержимое текстового документа позволяет метод Очистить(). Параметры у данного метода отсутствуют. Англоязычный синоним имени метода — Clear().

Пример использования метода:

ТекстДок.Очистить();

Открыть окно редактирования текста (то есть вывести полученный отчёт на экран для просмотра, редактирования и печати) позволяет метод Показать(). Англоязычный синоним имени метода — Show().

Синтаксис метода:

Показать(<3аголовок>, <ИмяФайла>)

где

  • <3аголовок> — строковое выражение, содержащее заголовок окна редактирования;
  • <ИмяФайла> — строковое выражение, содержащее имя файла для последующего сохранения отчёта. Параметр является необязательным. Если он имеет непустое значение, то при закрытии окна система будет предлагать сохранить данные в указанный файл. Если файла с именем <ИмяФайла> не существует, то он будет создан. Если же параметр <ИмяФайла> опущен или имеет пустое значение, то при закрытии окна система не будет предлагать сохранить данные в файл.

Пример использования метода:

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.КодоваяСтраница(0);
ТекстДок.Открыть(КаталогПользователя() + "detail.txt");
ТекстДок.Показать("Редактирование детального отчёта", КаталогПользователя() + "detail.txt");

Запретить редактирование текста в окне позволяет метод ТолькоПросмотр(). В качестве единственного параметра методу передаётся числовое выражение, определяющее режим вывода текста на экран (возможные значения: 1 — запрещено редактирование текста, 0 — разрешено редактирование текста). Англоязычный синоним имени метода — ReadOnly().

Параметр метода является необязательным. Возвращаемым значением метода является текущее числовое значение режима редактирования текста (на момент до исполнения метода). Вызов метода ТолькоПросмотр() при использовании с параметром должен предшествовать вызову метода Показать().

Пример:

ТекстДок = СоздатьОбъект("Текст");
ТекстДок.КодоваяСтраница(0);
ТекстДок.Открыть(КаталогПользователя() + "detail.txt");
ТекстДок.ТолькоПросмотр(1);
ТекстДок.Показать("Просмотр детального отчёта");

Методы для работы с шаблонами в тексте

При формировании строк отчётов очень часто используются шаблоны — поля, ограниченные квадратными скобками («[]»). Внутри такого поля содержится выражение, которое при добавлении строки в текст заменяется конкретным значением. При этом количество символов в подставляемом значении может быть неограниченным (если применяется обычный шаблон), а может быть ограничено размером поля (если применяется фиксированный шаблон). Тип используемого шаблона определяется соответствующим методом объекта "Текст".

Использование обычных шаблонов в тексте разрешает/запрещает метод Шаблон(). В качестве единственного параметра методу передаётся числовое выражение, определяющее флаг использования шаблонов (возможные значения: 1 — разрешить добавление строк по шаблону, 0 — отменить добавление строк по шаблону). Англоязычный синоним имени метода — Template().

Параметр метода является необязательным. Возвращаемым значением метода является текущее числовое значение флага добавления строк по шаблону (на момент до исполнения метода). Вызов метода Шаблон() при использовании с параметром должен предшествовать вызову методов, формирующих строки.

ТекстДок.Шаблон(1);
ТекстДок.ДобавитьСтроку("[Услуга.Наименование], арт.[Услуга.Код] ...... [Услуга.Цена]");
ТекстДок.Шаблон(0);
ТекстДок.ДобавитьСтроку("Вывоз мусора, арт.6321 ...... 58.00");

Использование фиксированных шаблонов в тексте разрешает/запрещает метод ФиксШаблон(). В качестве единственного параметра методу передаётся числовое выражение, определяющее флаг использования фиксированных шаблонов (возможные значения: 1 — разрешить добавление строк по шаблону, 0 — отменить добавление строк по шаблону). Англоязычный синоним имени метода — FixTemplate().

Параметр метода является необязательным. Возвращаемым значением метода является текущее числовое значение флага добавления строк по фиксированному шаблону (на момент до исполнения метода). Вызов метода ФиксШаблон() при использовании с параметром должен предшествовать вызову методов, формирующих строки.

ТекстДок.ФиксШаблон(1);
ТекстДок.ДобавитьСтроку("[Услуга.Наименование   ], арт.[Услуга.Код ] ...... [Услуга.Цена  ]");
ТекстДок.ФиксШаблон(0);
ТекстДок.ДобавитьСтроку("Вывоз мусора, арт.6321 ...... 58.00");

Примечание: При использовании фиксированных шаблонов подставляемое вместо выражения значение обрезается, если же ко­ли­чес­тво символов в значении больше размеров поля, либо дополняется последующими пробелами, если количество символов в значении меньше раз­ме­ров поля. Если результат числовой, то в границах поля строка прижимается к правой границе.

Другие статьи по схожей тематике