1с подставить параметры в строку

Обновлено: 05.07.2024

Строки в 1С 8.3 во встроенном языке 1с представляют собой значения примитивного типа Строка. Значения данного типа содержат строку в формате Unicode произвольной длины. Переменные строкового типа являются набором символов заключенных в кавычки.

Пример 1. Создадим строковую переменную с текстом.

Функции работы со строками в 1с 8.3

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

СтрДлина

СтрДлина(<Строка>). Возвращает количество символов содержащихся в строке, переданной в параметре.

Итогом выполнения данного кода будет вывод на экран количества символов строки: 11.

СокрЛ

СокрЛ(<Строка>). Отсекает незначащие символы, стоящие слева от первого значащего символа в строке.
Незначащие символы:

  • пробел;
  • неразрывный пробел;
  • табуляция;
  • возврат каретки;
  • перевод строки;
  • перевод формы (страницы).

СокрП

СокрП(<Строка>). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке.

СокрЛП

СокрЛП(<Строка>). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке, также отсекает незначащие символы, стоящие слева от первого значащего символа в строке. Данная функция используется чаще предыдущих двух, так как она более универсальна.

Пример 5. Убрать незначащие символы стоящие слева и справа в наименовании контрагента.

Лев(<Строка>, <ЧислоСимволов>). Получает первые символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Пример 6. Пусть в структуре Сотрудник содержаться имя, фамилия и отчество сотрудника. Получить строку с фамилией и инициалами.

Прав(<Строка>, <ЧислоСимволов>). Получает последние символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>). Получает подстроку из строки переданной в параметре Строка, начиная с символа номер которого указан в параметре НачальныйНомер и длиной переданной в параметр ЧислоСимволов. Нумерация символов в строке начинается с 1. Если в параметре НачальныйНомер указано значение, меньшее или равное нулю, то параметр принимает значение 1. Если параметр ЧислоСимволов не указан, то выбираются символы до конца строки.

Пример 8. Пусть в строковой переменной начиная с девятой позиции содержится код региона, следует получить его и записать в отдельную строку.

СтрНайти

СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>). Осуществляет поиск указанной подстроки в строке, возвращает номер позиции первого символа найденной подстроки. Рассмотрим параметры данной функции:

  • Строка. Исходная строка;
  • ПодстрокаПоиска. Искомая подстрока;
  • НаправлениеПоиска. Указывает направление поиска подстроки в строке. Может принимать значения:
    • НаправлениеПоиска.СНачала;
    • НаправлениеПоиска.СКонца;

    ВРег(<Строка>). Преобразует все символы указанной строки в 1с 8 к верхнему регистру.

    НРег(<Строка>). Преобразует все символы указанной строки в 1с 8 к нижнему регистру.

    ТРег(<Строка>). Преобразует строку следующим образом: первый символ каждого слова переводится в верхний регистр, остальные символы слова переводятся в нижний регистр.

    Символ

    Символ(<КодСимвола>). Получает символ по его коду в кодировке Unicod.

    КодСимвола

    КодСимвола(<Строка>, <НомерСимвола>). Получает код символа в кодировке Unicode из строки указанной в первом параметре, расположенного в позиции указанной во втором параметре.

    ПустаяСтрока

    ПустаяСтрока(<Строка>). Проверяет состоит ли строка только из незначащих символов, то есть является ли она пустой.

    Пример 15. Проверить является ли пустой строка состоящая из трех пробелов.

    СтрЗаменить

    СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>). Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

    СтрЧислоСтрок

    СтрЧислоСтрок(<Строка>). Позволяет посчитать количество строк в многострочной строке. Для перехода на новую строку в 1с 8 используется символ ПС (символ перевода строки).

    Итогом выполнения данного кода будет вывод на экран количества строк в тексте: 3

    СтрПолучитьСтроку

    СтрПолучитьСтроку(<Строка>, <НомерСтроки>). Получает строку в многострочной строке по ее номеру. Нумерация строк начинается с 1.

    СтрЧислоВхождений

    СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>). Возвращает число вхождений указанной подстроки в строку. Функция чувствительна к регистру.

    Итогом выполнения данного кода будет вывод на экран числа вхождений: 2.

    СтрНачинаетсяС

    СтрНачинаетсяС(<Строка>, <СтрокаПоиска>). Проверяет начинается ли строка переданная в первом параметре, со строки во втором параметре.

    Пример 20. Определить начинается ли ИНН выбранного контрагента с цифры 1. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

    СтрЗаканчиваетсяНа

    СтрЗаканчиваетсяНа(<Строка>, <СтрокаПоиска>). Проверяет заканчивается ли строка переданная в первом параметре, на строку во втором параметре.

    Пример 21. Определить заканчивается ли ИНН выбранного контрагента на цифру 2. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

    СтрРазделить

    СтрРазделить(<Строка>, <Разделитель>, <ВключатьПустые>). Разделяет строку на части по указанным символам-разделителям и записывает полученные строки в массив. В первом параметре хранится исходная строка, во втором строка содержащая разделитель, в третьем указывается, нужно ли записывать в массив пустые строки (по умолчанию Истина).

    В результате выполнения будет получен массив с числами от 1 до 3-х.

    СтрСоединить

    СтрСоединить(<Строки>, <Разделитель>). Преобразует массив строк из первого параметра в строку, содержащую все элементы массива через разделитель, указанный во втором параметре.

    Пример 23. Используя массив чисел из предыдущего примера, получить исходную строку.

    Прочитайте статью про работу с числами: Число в 1С 8.3 — функции работы с числами

    Передача параметров по ссылке и по значению при вызове процедур и функций

    Внимание! Материал данной статьи устарел. Рекомендуется использовать документацию к платформе "1С:Предприятие 8".

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

    Передача параметров по ссылке

    По умолчанию, во встроенном языке 1С:Предприятия 8 передача параметров в процедуры и функции осуществляется по ссылке. Это означает, что изменение формального параметра внутри процедуры или функции будет отражаться на значении фактического параметра, переданного при вызове процедуры или функции.

    Передача параметров по значению

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

    Особенности передачи переменных различных типов данных по значению

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

    Рассмотрим в качестве примера ситуацию, когда параметром процедуры, передаваемым по значению, является таблица значений. Внутри вызываемой процедуры ОбработатьТаблицу() создается новый экземпляр таблицы значений, в который добавляется три строки. Это никак не влияет на состояние таблицы значений Тз , переданной в качестве фактического параметра при вызове процедуры ОбработатьТаблицу() :

    Рассмотрим в качестве примера ситуацию, когда параметром процедуры, передаваемым по значению, является таблица значений. Внутри вызываемой процедуры СвернутьТаблицу() таблица значений, переданная в качестве параметра при вызове процедуры, сворачивается:

    Схематично изобразить происходящее при вызове процедуры СвернутьТаблицу(Тз) можно следующим образом:

    (1) - вызов процедуры СвернутьТаблицу . В качестве фактического параметра указывается переменная Тз, хранящая ссылку на экземпляр таблицы значений;

    (2) - из процедуры вызывается метод Свернуть таблицы значений;

    (3) - формальный параметр ссылается на тот же самый экземпляр таблицы значений, что и фактический параметр (переменная Тз) - происходит свертка в экземпляре таблицы значений, на которую ссылается переменная Тз;

    (4) - выходим из процедуры. Экземпляр таблицы значений, на которую ссылается переменная Тз, находится в свернутом состоянии.

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

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


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

    Длина_Строки_Число = СтрДлина ( "АБВГД" ); // 5 (символов)

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

    ВычисляемаяСтрока = "1С Предприятие 8.3" ;

    // N символов слева
    Первые_два_символа = Лев ( ВычисляемаяСтрока , 2 ); // 1С

    // N символов справа
    Последние_три_символа = Прав ( ВычисляемаяСтрока , 3 ); // 8.3

    // N символов из середины (с 4-го символа получим 11 символов)
    Средние_символы = Сред ( ВычисляемаяСтрока , 4 , 11 ); // Предприятие

    &НаКлиенте
    Процедура ПолучениеЧислаВхожденийТекстаВСтроку ( Команда )

    ВычисляемаяСтрока = "Между нами провода да да да да да. И ты сказала да да да." ;
    Количество_вхождений = СтрЧислоВхождений ( ВычисляемаяСтрока , "да" ); // 8

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

    Код_из_символа = КодСимвола ( "C" ); // 67 (Латиница)
    Код_первого_символа_в_строке = КодСимвола ( "Артур" ); // 1040 (Кирилица)
    Код_пятого_символа_в_строке = КодСимвола ( "ABCDEFG" , 5 ); //69 (Латиница)
    Символ_из_кода = Символ ( 67 ); // "A" (Латиница)

    Преобразование в регистр (верхний, нижний, титульный) в 1С 8.3:

    &НаКлиенте
    Процедура ПреобразованиеВРегистр ( Команда )

    //Регистры (верхний, нижний, титульный)
    ВычисляемаяСтрока = "У лукоморья Дуб зелёный" ;
    Преобразование_в_Верх_регистр = ВРег ( ВычисляемаяСтрока ); // У ЛУКОМОРЬЯ ДУБ ЗЕЛЁНЫЙ
    Преобразование_в_Нижн_регистр = НРег ( ВычисляемаяСтрока ); // у лукоморья дуб зелёный
    Преобразование_в_Титл_регистр = ТРег ( ВычисляемаяСтрока ); // У Лукоморья Дуб Зелёный

    &НаКлиенте
    Процедура ПреобразованиеСтрокиВЧисло ( Команда )

    фЧисло = Число ( "987.65" ); // 987,65
    фЧисло = Число ( "987,65" ); // 987,65
    фЧисло = 100 + "24" ; // 124

    //Для сложения числа и строки для получения строки:
    фСтрока = Строка ( 100 ) + "24" ; // "10024"

    &НаКлиенте
    Процедура ПоискТекстаВСтроке ( Команда )

    ВычисляемаяСтрока = "1С Предприятие 8.3" ;
    ТекущийИндекс = Найти ( ВычисляемаяСтрока , "1С" ); // 1

    &НаКлиенте
    Процедура ПроверкаНаПустуюСтроку ( Команда )

    ВычисляемаяСтрока = " " ;
    Если ПустаяСтрока ( ВычисляемаяСтрока ) Тогда
    // Т.е. может содержать только незначащие символы (например: Пробелы или Переносы)
    Сообщить ( "Эта строка пустая!" );
    КонецЕсли;

    Проверка начала и конца строки: СтрНачинаетсяС, СтрЗаканчиваетсяНа (доступно с платформы 8.3.6.1977) в 1С 8.3:

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

    // СтрНачинаетсяС - это проверка начала строки - со слова "Как"
    РезультатПроверки = СтрНачинаетсяС ( "Как хорошо жить" , "Как" ); // Истина

    // СтрЗаканчиваетсяНа - это проверка конца строки: на слово "хорошо"
    РезультатПроверки = СтрЗаканчиваетсяНа ( "Как хорошо жить" , "хорошо" ); // Ложь

    Перевод строки на разные языки НСтр (доступно с платформы 8.3.6.1977) в 1С 8.3:

    &НаКлиенте
    Процедура ПереводСтрокиНаРазныеЯзыки ( Команда )

    РезультатПеревода = НСтр ( "ru = 'Как дела?'; en = 'How are you?'" ); // зависит от установленного языка

    Операции с многострочной строкой (с переносами) в 1С 8.3:

    &НаКлиенте
    Процедура МногострочнаяСтрока ( Команда )

    //Вставка переноса в строку
    ВычисляемаяСтрока =
    "Оплата по договору №1" + Символы . ПС + //1-я строка
    "Контрагент ""Новая жизнь""" + Символы . ПС + //2-я строка (если нужно использовать " в строке то, используются двойные кавычки "")
    "Сумма 1000 руб. с НДС 20%" ; //3-я строка

    Результат_число_строк = СтрЧислоСтрок ( ВычисляемаяСтрока ); // 3(строки)
    Результат_2_строка = СтрПолучитьСтроку ( ВычисляемаяСтрока , 2 )); // "Контрагент ""Новая жизнь"""

    &НаКлиенте
    Процедура РазбиениеСтрокиСРазделителями1 ( Команда ) //Пример №1

    Разделитель = ";" ;
    СтрокиСРазделителем = СтрЗаменить ( "2020; 2021; 2022" , Разделитель , Символы . ПС );
    Для А = 1 По СтрЧислоСтрок ( СтрокиСРазделителем ) Цикл
    Сообщить ( СтрПолучитьСтроку ( СтрокиСРазделителем , А ));
    КонецЦикла;

    &НаКлиенте
    Процедура РазбиениеСтрокиСРазделителями2 ( Команда ) //Пример №2 (доступно с платформы 8.3.6.1977)

    // Параметры СтрРазделить: Строка, Разделитель(символы), Булево (по умолчанию - Истина - включать в результат пустые строки)
    РезультатМассив = СтрРазделить ( "2020; 2021; 2022" , ";" ); // Массив с элементами [0] = "2020", [1] = "2021 ", [2] = "2022"
    // Существует обратная функция СтрСоединить, которая наоборот преобразует массив к строке.
    РезультатСтрока = СтрСоединить ( РезультатМассив , ";" ); // Строка "2020; 2021; 2022"

    Строки сравниваются посимвольно по коду символа, для ясности несколько примеров "Строка12" < "Строка2", "8.3.9.2000" > "8.3.8", "8.3.9.2000" > "8.3.10"

    С учетом регистра можно сравнить строки через знаки сравнения как в примерах

    Сравнение без учета регистра можно произвести функций СтрСравнить. Поддерживается с платформы 8.3.6.

    • -1 - первая строка меньше второй
    • 1 - первая строка больше второй.
    • 0 - первая строка равна второй

    Преобразование в строку (Строка, Формат)

    В языке 1С есть автоматическое преобразование типа когда все части выражения приводятся к типу первого выражения

    Преобразование функцией Строка

    при преобразовании появляется символ неразрывный пробел, а он обычно не нужен

    "Правильнее" будет преобразовывать функцией формат, которая приводит к строке простые типы и можно воспользоватся конструктором


    Строка на разных языках НСтр

    Форматирование строки по шаблону СтрШаблон. Поддерживается с платформы 8.3.6.

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

    Функции СтрСоединить, СтрРазделить. Поддерживается с платформы 8.3.6.

    Очень полезные функции улучшают читаемость кода.

    СтрРазделить удобна когда необходимо разобрать строку с разделителями, например CSV файл, разбор текста на слова, строки

    Аналогично, только наоборот работает функция СтрСоединить, преобразуя массив к строке.

    Другие функции работы со строками, которые могут быть полезны

    СтрСократить (Текст, Количество, Многострочная = Ложь) - сокращает текст до заданной длины заменяя окончание на .

    ЭтоКорректныйИдентификатор (Строка) - Проверяет является ли строка корректным идентификатором, строка вида СуммаКонтрагента, _Идентификатор

    Когда в 1с встает вопрос разбора большого текста это уже зоопарк из СтрДлина, Сред, СтрНайти для повышения читаемости программ для подобных задач использую свои функции: РазборПрочитатьЦелоеЧисло, РазборПрочитатьШестнадцатеричноеЧисло, РазборПрочитатьНезначимые, РазборПрочитатьИдентификатор,

    РазборПропуститьНаборСимволов, РазборПрочитатьСимвол, РазборПрочитатьДоСимвола, РазборНайтиТекст

    Читайте также: