Работа со строками в 1С 8.3
Строка — примитивный тип данных в языке программирования 1С. Помимо 1С, этот тип данных используется во всех известных языках программирования, обычно он называется «string».
Функции работы со строками в 1С
Рассмотрим основные функции встроенного языка программирования 1С.
Строка
Функция Строка() позволяет получить текстовое представление переменных других типов.
Пример:
Строка(ТекущаяДата()) //"23.02.2015 21:31:24" Строка(Истина) // Да Строка(1058) // "1 058"
СтрДлина
Функция позволяет получить количество символов в строке 1C, включая пробелы и незначащие символы.
Например:
СтрДлина("Тестовая строка") // 15
СокрЛП, СокрЛ, СокрП
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Полезная функция для удаления незначащих символов в строковом значении. СокрЛ обрабатывает символы, стоящие слева от последнего значащего символа, СокрП — справа. А СокрЛП — справа и слева.
Пример:
СокрЛП(" Слева и справа есть незначащие символы - пробелы ") // получим строку без пробелов слева и справа
Помимо пробелов, функция 1C удаляет такие символы, как перенос строки, неразрывный пробел и т.д.
Лев, Прав, Сред
С помощью данных функций очень просто получить первые (Лев) или последние (Прав) символы в строке, а также произвольное количество символов (Сред).
Пример:
Лев("Тестовая строка", 4) // "Тест" Сред("Тестовая строка", 5, 6) // "овая с"
Найти
Функция для поиска подстроки внутри другой подстроки. Синтаксис Найти(<Строка для поиска>, <Подстрока поиска>). Функция возвращает число — номер позиции символа (или символов) в исходной подстроке. Если подстроки не найдено, вернётся число 0. Если в искомой подстроке есть несколько вхождений, вернется номер позиции первого совпадения.
Пример:
Найти("Тестовая строка", "строка") // 10 Найти("Тестовая строка", "123") // вернется 0, подстроки "123" нет в исходной строке Найти("Тестовая строка", "я") // 8
ВРег, НРег, ТРег
Функции для управления регистром строки. ВРег — преобразует строку в верхний регистр. НРег — в нижний. ТРег — у каждого нового слова первая буква преобразуется в верхний регистр, остальные в нижний.
Пример:
ВРег("Тестовая строка") // "ТЕСТОВАЯ СТРОКА" НРег("Тестовая строка") // "тестовая строка" ТРег("Тестовая строка") // "Тестовая Строка"
ПустаяСтрока
Функция, позволяющая сравнить исходную строку с пустой строкой. Проверяется наличие незначащих символов.
Пример:
ПустаяСтрока("Тест") //ложь ПустаяСтрока(" ") // истина
Аналогично можно проверить строку на пустое значение следующим образом:
СокрЛП(" ") = "" // истина
СтрЗаменить
Функция СтрЗаменить позволяет массово заменить искомое значение на нужное нам. Синтаксис:
Например:
СтрЗаменить("Произвольная Строка", " " , "") //"ПроизвольнаяСтрока"
СтрЧислоСтрок
Позволяет получить количество строк в многострочном тексте. Функция считает количество переносов строк (Символы.ПС).
Например, построчная обработка текстового фрагмента:
Для Н=1 по СтрЧислоСтрок(ТекстФайла) Цикл ..... КонецЕсли;
СтрПолучитьСтроку
С помощью данной функции можно получить произвольную строку из многострочного текста. Синтаксис — СтрПолучитьСтроку(<Строка>, <Номер строки>).
Пример:
СтрокаНомер5 = СтрПолучитьСтроку(ИсходнаяСтрока, 5)
СтрЧислоВхождений
Функция для подсчета числа вхождений произвольного фрагмента в строку. Например, подсчитать количество вхождений определенных символов или слов в текст.
Пример:
СтрЧислоВхождений ("Тестовая строка", "т") // 2
Символ и КодСимвола
Две обратные функции. С помощью КодСимвола можно получить код символа в кодировке Unicode. Функцией Символ можно получить символ, зная Unicode кодификатор.
Примеры:
КодСимвола("Т") // 1 058 Символ(1058) // "Т"
Часто встречающиеся задачи по работе со строками в 1С
Рассмотрим классические примеры решения задач в работе с текстовыми переменными.
Конкатенация строк в 1С
Конкатенация, или объединение строк в 1С делается оператором «+».
Например:
"Первая часть строки " + "и вторая" // получим "Первая часть строки и вторая"
Преобразовать число в строку
Тут всё просто. Достаточно использовать метод «Строка()»:
Строка(12355.44) // "12 355,44"
Однако может смущать наличие неразрывного пробела.
Его можно убрать с помощью замены неразрывного пробела на пустую строку:
СтрЗаменить(Строка(12355.44),Символы.НПП,"") // "12355,44"
или с помощью метода Формат:
Строка(Формат(12355.44,"ЧГ="))
Кавычки в строке 1С
Для новичков достаточно трудно установить кавычки внутри строки, хотя в этом нет ничего сложного. Достаточно внутри строки поставить вместо одних кавычек двое.
Например:
Строка("Наша организация называется ""Березка"", мы работаем на рынке с 1999 года")
Символ переноса строки
Символ переноса строки необходим для переноса строки на следующую строку. В 1С это можно сделать с помощью специальной конструкции «Символы.ПС».
Пример:
"Этот текст будет на первой строке" + Символы.ПС + "А этот на второй"
Сравнение строк в 1С
Сравнить строки достаточно просто с помощью оператора сравнения — «=».
Однако для получения корректного сравнения часто требуется возвести строки в один регистр и убрать незначащие символы:
СокрЛП(ВРег(Строка1)) = СокрЛП(ВРег(Строка2))
Таким образом, мы получим более точное сравнение двух строк.
Убрать пробелы в строке 1С
Достаточно часто нужно убрать пробелы в строке 1С.
Если требуется убрать пробелы справа и слева:
ИсходнаяСтрока = СокрЛП(ИсходнаяСтрока)
Если требуется убрать абсолютно все пробелы, можно заменить их на пустую строку:
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, " " ,"")
Если требуется убрать неразрывные пробелы из строки, которая получена из числового типа, сделать это можно так:
ИсходнаяСтрока = СтрЗаменить(ИсходнаяСтрока, Символы.НПП ,"")
Другие статьи по 1С:
- Администрирование (обновление 1С, резервные копии и т.д);
- Программирование 1С
- Обучение 1С
Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Владимир:
Как в Запросе вывести в поле текст в две строки, то есть вставить символы перевода строки (CR + LF)?
Алексей:
Можете попробовать вот так, т.е. перенос строки прямо внутри кавычек:
ВЫБРАТЬ
«Первая строка» + »
» + «Вторая строка» КАК ПримерСтрокиСПереносом
Главное, не ставить отступ (табуляцию или пробелы), а то вторая строка будет с таким же отступом.
Алексей:
Кавычки автоматически заменились на угловые, но смысл, надеюсь, понятен.
Ник:
А как убрать гласные из строки?
Дмитрий:
Нстр() забыли
Алекс:
Добрый день, уважаемые господа,
Мы создаём базу данных в среде 1С. Номенклатура Продукции содержит символы: тире (-), скобки (), пробелы, символ конца строки и тд. Для поиска нужной позиции мы из файла Excel вставляем позицию номенклатуры в строку поиска в базе данных 1С. Естественно ничего не находим, а позиция эта в базе есть. Разработчик-программист утверждает что убрать символы для проведения поиска невозможно в 1С. Это правда ?
Королевна:
Конечно, неправда. Программист может все. Я когда сравниваю две строки, всегда убираю с обоих концов пробелы и перевожу либо в верхний или нижний регистр сравниваемые позиции(это обязательно уже многие годы). А убрать скобки и т.д. внутри сравниваемых реквизитов тоже возможно.
Andrey:
При загрузке из файла убрать можно но вот найти в базе игнорируя все это будет проблематично. Запрос тут бесполезен, только пребором а лучше с кешированием, дабы хот как то ускорить. Но все это обязательно очень скажется на производительности особенно если в базе много номенклатуры. Я бы выбрал все наименования из базы, прошелся бы по таблице и изменил их как требуется, потом добавил бы индекс по этому полю и искал бы из файла, но это сработет при условии что хватит памяти на такую таблицу
Королевна:
Добрый день. А как записать в 1с управляющий код — межстрочный интервал?
Алексей:
В большинстве случаев нет, т.к. почти везде используется неформатированный текст.
Аноним:
а в шаблоне в печ форме перенос строки( символы.ПС) работает ?
Алексей:
Shift+Enter в помощь.
Алексей:
Цитата:
Однако для получения корректного сравнения часто требуется возвести строки в один регистр и убрать незначащие символы:
СокрЛП(ВРег(Строка1)) = СокрЛП(ВРег(Строка2))
Таким образом, мы получим более точное сравнение двух строк.
Думаю, стоит уточнить, что это стоит использовать только в случаях, когда не требуется регистрозависимое сравнение строк.
Вообще, для регистронезависимого сравнения предназначены функция СтрСравнить() и объект СравнениеЗначений.