В программных модулях системы «1С:Предприятие» версии 7.7 для работы с текстами используется специальный агрегатный тип данных "
Текст"
. Механизм работы с текстами предназначен для формирования отчётов в текстовом виде, а также для обмена информацией с другими программами (например, системой Клиент-Банк) посредством текстовых файлов. Средства языка дают возможность не только вывода строк в текстовые файлы, но и считывания имеющихся файлов с последующим разбором их по строкам.
Во всех программных модулях вызов методов для работы с текстом может выполняться только при помощи переменной со ссылкой на объект типа "
Текст"
, который создаётся при помощи функции СоздатьОбъект()
. Чтобы вызвать метод объекта "
Текст"
, имя метода (с указанием необходимых параметров) пишется через точку после идентификатора переменной.
При создании объекта типа "
Текст"
в качестве названия агрегатного типа данных обязательно должно выступать ключевое слово «Текст» или его англоязычный синоним — «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");
Примечание: При использовании фиксированных шаблонов подставляемое вместо выражения значение обрезается, если же количество символов в значении больше размеров поля, либо дополняется последующими пробелами, если количество символов в значении меньше размеров поля. Если результат числовой, то в границах поля строка прижимается к правой границе.
Другие статьи по схожей тематике