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

Работа со строковыми значениями

Строковый тип данных — это один из базовых типов данных, поддерживаемых в языке 1С версии 7.7. Строковым типом в системе «1С:Предприятие» может задаваться любая последовательность символов, в том числе и пустая (последняя в программном коде записывается как последовательность из двух подряд идущих кавычек).

a = "Отчет за ";

// строка с символом пробела
b = " ";

// пустая строка
c = "";

Операции со строками

Чтобы присоединить одну строку к другой, в языке 1С используется операция конкатенации. Длина результирующей строки при этом равна сумме длин соединяемых строк.

Пример конкатенации строковых значений:

ФИО = СокрЛП(Фамилия) + " " + СокрЛП(Имя) + " " + СокрЛП(Отчество);

При сложении нескольких строк, в случае несовпадения типа данных второго или последующих операндов со строковым типом, значения этих операндов неявно преобразуются к строковому типу в соответствии с правилами преобразования типов. Например:

Заголовок = "Отчёт о закупках по состоянию на " + ТекущаяДата());

В вышеприведённом примере второй операнд имеет тип "Дата". При сложении со строкой система неявно преобразует его в строковый тип.

Строки можно сравнивать между собой и использовать в логических операциях. В языке 1С для строк определены следующие операции сравнения:

  • больше (Строка1 > Строка2);
  • больше или равно (Строка1 >= Строка2);
  • равно (Строка1 = Строка2);
  • не равно (Строка1 >< Строка2);
  • меньше (Строка1 < Строка2);
  • меньше или равно (Строка1 <= Строка2).

Пример использования строк в логических операциях:

Если (Строка2>=Строка1)И(Строка3<>Строка1) Тогда
   . . .
Иначе
   . . .
КонецЕсли;

Строковые литералы

В строковых выражениях, наряду с переменными, могут использоваться строковые литералы, представляющие собой обычные строки, заключённые в двойные кавычки. Например:

ИмяФайла = ИмяКаталога + "output.txt";

Наряду с короткими (однострочными) литералами, синтаксис языка 1С допускает использование и многострочных конструкций, причём последние в исходном коде могут задаваться двумя способами.

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

Стр = "Первая строка" // пример строковой константы
"Вторая строка"
"Третья строка";

Способ второй. В этом случае значение литерала полностью идентично предыдущему случаю. Отличие заключается в том, что каждая отдельная составляющая (строка) не замыкается кавычками, а на каждой последующей строке помещен символ переноса строки «|» («вертикальная черта»). В таком варианте комментарии между открывающей и закрывающей кавычками (то есть внутри многострочного литерала) не допускаются.

Стр = "Первая строка
|Вторая строка
|Третья строка";

Системные строковые константы

В системе 1С версии 7.7 предусмотрено три встроенных константы строкового типа: РазделительСтраниц (англоязычный синоним — PageBreak), РазделительСтрок (англоязычный синоним — LineBreak) и СимволТабуляции (англоязычный синоним — TabSymbol). Они служат для замены в строковых выражениях соответствующих непечатных символов, то есть символа разделителя страницы, символа разделителя строк и символа табуляции.

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

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

ОтчетОПродажах = СоздатьОбъект("Текст");
ОтчетОПродажах.ДобавитьСтроку("Страница 1");
. . .
ОтчетОПродажах.ДобавитьСтроку(РазделительСтраниц);
ОтчетОПродажах.ДобавитьСтроку("Страница 2");
. . .
ОтчетОПродажах.Показать();

Другой пример:

Если Вопрос("Для документов вида ""Операция""" + РазделительСтрок +
            "каждый год нумерация начинается заново." + РазделительСтрок +
            "Присвоить новый номер?", "Да+Нет") = "Да" Тогда
   Документ.НомерДок = НовыйНомерДок;
   СтатусВозврата(0);
КонецЕсли;

Преобразование в строковый тип значений других базовых типов

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

  • Если преобразуемое в строку число не имеет форматных установок, то его строковым представлением является полное представление числа в формате с фиксированной точкой.
  • Дата преобразованная к строковому типу имеет вид "ДД.ММ.ГГ", где ГГ — две цифры года, ММ — числовое обозначение месяца (01, 02, 03 и т.д.), ДД — день месяца (01, 02, 03 и т.д.).

Примечание: То, что выражение является строковым, система определяет по первому операнду. В случае несовпадения типа второго и последующих операндов со строковым типом, их значения неявно преобразуются к требуемому типу в соответствии с правилами преобразования типов. Чтобы явно указать, что выражение является строковым, следует начать его с пустой строки:

РезультирующаяСтрока = "" + СтрокаПолученнаяИзФайла;

Для явного преобразования в строковый тип значений других базовых типов в программном коде используется системная функция Строка(). Англоязычный синоним имени функции — String().

Синтаксис функции:

Строка(<ПреобразуемоеЗначение>)

где <ПреобразуемоеЗначение> — выражение типа "Число" или "Дата", результат вычисления которого необходимо преобразовать в строку.

Примеры использования функции:

Стр = Строка(36) + " руб.";          // результатом будет строка "36 руб."
Стр = Строка('01.01.2001') + " г.";  // результатом будет строка "01.01.01 г."
                                     // или "01.01.2001 г." (в зависимости от
                                     // установленного формата даты)

Примечание: Даты во встроенном языке программирования 1С принято заключать в одинарные кавычки, в отличие от строк, для выделения которых используются кавычки двойные.

Системные функции для работы со строками

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

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

Если ПустаяСтрока(СпрСотр.Наименование) = 0 Тогда
   ФИО = СокрЛП(СпрСотр.Наименование);
Иначе
   ФИО = "<неизвестный сотрудник>";
КонецЕсли;

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

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

// производим обработку строки
Для СимволСтр=1 По СтрДлина(ОбрабатываемаяСтрока) Цикл
   . . .
КонецЦикла;

Удалить конечные пробельные символы слева, справа или с обоих концов строки сразу позволяют системные функции СокрЛ(), СокрП() и СокрЛП() соответственно. В качестве единственного параметра эти функции принимают строковое выражение, у которого необходимо удалить конечные пробельные символы. Возвращаемым значением этих функций является преобразованная строка. Англоязычные синонимы имён функций: TrimL(), TrimR(), TrimAll().

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

НаименованиеОбъекта = СокрЛП(СпрОС.Наименование);

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

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

ФИО = Врег(СпрСотр.Наименование);

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

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

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

Файл = Нрег(ВведенноеИмяФайла);

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

Преобразовать строку из DOS-кодировки в Windows-кодировку позволяет системная функция OemToAnsi(). В качестве единственного параметра функции передаётся строковое выражение, содержащее строку, которую необходимо преобразовать. Возвращаемым значением функции будет преобразованная строка. Русскоязычный синоним имени функции отсутствует.

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

Стр = OemToAnsi(СтрокаИзФайла);

Примечание: Подобное преобразование строк обычно требуется при работе с некоторыми файлами.

Преобразовать строку из Windows-кодировки в DOS-кодировку позволяет системная функция AnsiToOem(). В качестве единственного параметра функции передаётся строковое выражение, содержащее строку, которую необходимо преобразовать. Возвращаемым значением функции будет преобразованная строка. Русскоязычный синоним имени функции отсутствует.

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

СтрокаВФайл = AnsiToOem(Стр);

Примечание: Подобное преобразование строк обычно требуется при работе с некоторыми файлами.

Системные функции для работы с подстроками

Выбрать из строки указанное количество символов слева позволяет системная функция Лев(). Возвращаемым значением функции будет подстрока из выбранных символов. Англоязычный синоним имени функции — Left().

Синтаксис функции:

Лев(<Строка>, <ЧислоСимволов>)

где

  • <Строка> — строковое выражение, содержащее исходную строку, из которой будет выделена подстрока;
  • <ЧислоСимволов> — числовое выражение, задающее число символов, которое необходимо включить в подстроку.

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

Фамилия = Лев(СокрЛ(СпрСотр.Наименование), Найти(СокрЛ(СпрСотр.Наименование), " ") - 1);

В вышеприведённом примере с помощью функции Найти() определяем позицию первого пробела, а затем выбираем все символы, стоящие левее этой позиции.

Выбрать из строки указанное количество символов справа позволяет системная функция Прав(). Возвращаемым значением функции будет подстрока из выбранных символов. Англоязычный синоним имени функции — Right().

Синтаксис функции:

Прав(<Строка>, <ЧислоСимволов>)

где

  • <Строка> — строковое выражение, содержащее исходную строку, из которой будет выделена подстрока;
  • <ЧислоСимволов> — числовое выражение, задающее число символов, которое необходимо включить в подстроку.

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

// исходим из того, что имя файла состоит из восьми символов,
// точки и трех символов расширения
ИмяФайла = Прав(ПолноеИмяФайла, 12);

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

Синтаксис функции:

Сред(<Строка>, <НомерСимвола>, <ЧислоСимволов>)

где

  • <Строка> — строковое выражение, содержащее исходную строку, из которой будет выделена подстрока;
  • <НомерСимвола> — числовое выражение, задающее номер символа, с которого начнётся выборка подстроки (нумерация символов в строке начинается с 1);
  • <ЧислоСимволов> — числовое выражение, задающее число символов, которое необходимо включить в подстроку.

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

КодРайона = Сред(СокрЛП(ИНН), 3, 2);

Найти позицию первого вхождения подстроки в строку позволяет системная функция Найти() (англоязычный синоним — Find()). Возвращаемым значением данной функции является число — позиция первого символа первого вхождения.

Синтаксис функции:

Найти(<Строка>, <Подстрока>)

где

  • <Строка> — строковое выражение, содержащее строку, в которой будет выполняться поиск;
  • <Подстрока> — строковое выражение, содержащее подстроку, поиск которой будет выполняться.

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

Фамилия = Лев(СокрЛ(СпрСотр.Наименование), Найти(СокрЛ(СпрСотр.Наименование), " ") - 1);

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

Синтаксис функции:

СтрЧислоВхождений(<Строка>, <Подстрока>)

где

  • <Строка> — строковое выражение, содержащее строку, в которой будет выполняться поиск;
  • <Подстрока> — строковое выражение, содержащее подстроку, поиск которой будет выполняться.

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

Если СтрЧислоВхождений(ФамилияИнициалы, ".") < 2 Тогда
   Сообщить("Инициалы сотрудника не указаны или записаны неверно");
КонецЕсли;

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

Синтаксис функции:

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

где

  • <Строка> — строковое выражение, содержащее строку, в которой будет выполняться поиск и замена подстрок;
  • <СтарПодстрока> — строковое выражение, содержащее заменяемую подстроку (подстроку, поиск и замена которой будет выполняться);
  • <НовПодстрока> — строковое выражение, содержащее заменяющую (новую) подстроку.

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

// если есть неправильно записанные символы слэша, заменим их
ПолноеИмяФайла = СтрЗаменить(ПутьКФайлу, "/", "\") + "report.txt";

Системные функции для работы с многострочным текстом

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

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

ВсегоСтрок = ВсегоСтрок + СтрКоличествоСтрок(ИсследуемыйБлокТекста);

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

Синтаксис функции:

СтрПолучитьСтроку(<ИсходныйТекст>, <НомерСтроки>)

где

  • <ИсходныйТекст> — строковое выражение, содержащее исходный многострочный текст;
  • <НомерСтроки> — числовое выражение, содержащее порядковый номер строки, которую необходимо получить. Нумерация строк в многострочном тексте начинается с 1.

Возвращаемым значением функции будет полученная строка текста.

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

ВтораяСтрока = СтрПолучитьСтроку(ИсследуемыйБлокТекста, 2);

Системные функции для работы с символами

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

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

Буква_я = Симв(255);

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

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

КодБуквы_я = КодСимв("я");

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