Строки в 1С

Строки в 1С

«Для чего это нужно?» — спросите Вы. Например, для представления значений массива в виде строковой последовательности для дальнейшей передачи в обмене, сохранения вариантов значений списка выбора и т.п.

Существует два основных способа свернуть массив значений в строку:

1). Перебором элементов массива

м = Новый Массив; м.Добавить(1); м.Добавить(2); м.Добавить(3); ВыходнаяСтрока = «»; Разделитель = «,»; Для каждого элт Из м Цикл ВыходнаяСтрока = ВыходнаяСтрока + ?(ПустаяСтрока(ВыходнаяСтрока), «», Разделитель); ВыходнаяСтрока = ВыходнаяСтрока + элт; КонецЦикла; Сообщить(ВыходнаяСтрока); //вернет: 1,2,3

Однако, такой «деревянный» метод подойдет, разве что, для платформы 1С:Предприятие 8.2 или младше. Если вы работаете с 1С 8.3, рекомендуется пользоваться встроенной функцией СтрСоединить()

2). Функция СтрСоединить()

м = Новый Массив; м.Добавить(1); м.Добавить(2); м.Добавить(3); Разделитель = «,»; ВыходнаяСтрока = СтрСоединить(м, Разделитель); Сообщить(ВыходнаяСтрока); //вернет: 1,2,3

Такой код смотрится не только компактнее, но и работает быстрее.

Вопрос:

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

Ответы:

Проще всего сделать передачу поместив таблицу значение во временно хранилище.

Например:

&НаКлиенте Процедура ДелаемТаблицуЗначенийНаКлиенте () ….. АдресХранилища = ПоместитьВоВременноеХранилище(ТаблицаЗначений); //помещаем нашу ТЗ СчитываемНаСервере(АдресХранилища) …. КонецПроцедуры &НаСервере Процедура СчитываемНаСервере(АдресХранилища) ….. ТаблицаЗначения = ПолучитьИзВременногоХранилища(АдресХранилища); //получаем обратно …. КонецПроцедуры

Вроде должно работать 🙂

Наша команда предоставляет услуги по консультированию, настройке и внедрению 1С.
Связаться с нами можно по телефону +7 499 350 29 00.
Услуги и цены можно увидеть по .
Будем рады помочь Вам!

Еще можно преобразовать таблицу в какой нибудь другой типа данных.

Видел как то такое извращение:

ТекстТЗ = ЗначениеВСтрокуВнутр(ТаблицаЗначений); //получаем текстовое представление таблицы

Передаем переменную в любую процедуру — хоть клиентскую, хоть серверную.

И там делаем вот такое:

ТаблицаЗначений = ЗначениеИзСтрокиВнутр(ТекстТЗ);

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

Функции для работы со строками в 1С 8.2 и 8.3

Строка

Функция Строка(x) возвращает текстовое представление переданного ей значения «x”.

СтрДлина

Функция СтрДлина(x) вычисляет количество символов в строке «x”, учитывая пробелы и ничего не значащие символы.

1 2 3 4 &НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрДлина(«тестовая строка»)); //15 КонецПроцедуры

СокрЛП, СокрЛ, СокрП

Функции СокрЛП(x), СокрЛ(x) и СокрП(x) убирают пробелы и ничего не значащие символы у переданной строки «x” с обеих сторон, слева и справа соответственно.

Лев, Прав, Сред

Функции Лев(x, y) и Прав(x, y) возвращают количество символов «y” с левого или правого края переданной им строки «x”. А функция Сред(x, y, z) возвращает количество символов «z” из указанного места «y” переданной строки «x”.

ВРег, НРег, ТРег

Функция ВРег(x) преобразует все символы переданной строки «x” в верхний регистр, НРег(x) — в нижний регистр, ТРег(x) — первую букву каждого слова преобразует в верхний регистр, а все остальные нижний.

Найти

Функция Найти(x, y) возвращает номер первого символа первого вхождения подстроки «y” в строку «x”, если, конечно, такое вхождение найдено (при этом нумерация начинается с 1). Если же вхождений не найдено, то функция возвращает 0.

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

Функция СтрЧислоВхождений(x, y) возвращает количество вхождений подстроки «y” в строку «x”.

1 2 3 4 &НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрЧислоВхождений(«тестовая строка», «т»)); //3 КонецПроцедуры

СтрЗаменить

Функция СтрЗаменить(x, y, z) позволяет в указанной строке «x” заменить все вхождения одной подстроки «y” на другую «z”, результатом выполнения функции будет строка с проведенными заменами.

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

Функция ПустаяСтрока(x) сравнивает переданную ей строку «x” с пустой и возвращает результат этого сравнения — Истина или Ложь, при этом строка состоящая из пробелов и/или ничего не значащих символов приравнивается к пустой.

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

Функция СтрЧислоСтрок(x) возвращает количество строк в многострочном тексте «x”.

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

Функция СтрПолучитьСтроку(x, y) возвращает строку с номером «y” из многострочного текста «x”.

Символ, КодСимвола

Функция Символ(x) получает код символа «x” и возвращает строку содержащую соответствующий символ (в кодировке Unicode). Функция КодСимвола(x) делает обратное действие — получает символ «x” и возвращает его код в кодировке Unicode. Таблицу символов Unicode можно найти, например, .

1 2 3 4 5 &НаКлиенте Процедура ТестСтрока(Команда) Сообщить(Символ(1046)); //Ж Сообщить(КодСимвола(«Ж»)); //1046 КонецПроцедуры

Символы

Это не функция, а набор наиболее часто используемых специальных символов, состоит из:

ЗначениеВСтрокуВнутр, ЗначениеИзСтрокиВнутр

Функция ЗначениеВСтрокуВнутр(x) возвращает системное строковое представление значения «x”. Функция ЗначениеИзСтрокиВнутр(x) проделывает обратную операцию и возвращает значение, полученное из строкового системного представления «x”. Обе эти функции используются для сохранения функциональной совместимости с версией 7.7. Использование для каких-либо других целей не рекомендуется. В новых версиях платформы данные функции не работают (хотя их описание присутствует в справке).

ВвестиСтроку

Функция ВвестиСтроку(x, y, z, w) вызывает диалог для ввода строки, введенная строка записывается в переменную «x”, кроме этого можно указать подсказку «y”, длину вводимой строки «z”, отметку многострочности вводимого текста «w”. Функция возвращает Истина — если ввод был произведен, Ложь — если пользователь отказался от ввода. Выглядит это окно примерно так:

1 2 3 4 5 &НаКлиенте Процедура ТестСтрока(Команда) НовСтр = «»; ВвестиСтроку(НовСтр, «Введите имя», 50, Ложь); КонецПроцедуры

Окно ввода строки

Функции для работы со строками начиная с версии 8.3.6.1977

В обновлении 8.3.6.1977 набор функций для работы со строками был серьезно расширен.

СтрШаблон

Функция СтрШаблон(x, y1-y10) является аналогом функции printf из языка C++ и многих других. В исходной строке «x” можно использовать маркеры подстановки «%1, %2..%10” (не более 10), которые впоследствии заменяются на соответствующие «y1, y2..y10”. Функция возвращает результат этой замены. Если количество маркеров замены не соответствует количеству параметров «y1, y2..y10”, то генерируется ошибка.

СтрСравнить

Функция СтрСравнить(x, y) выполняет лексикографическое сравнение переданных ей строк «x” и «y” и возвращает одно из трех значений:

  • 0 — строки равны;
  • 1 — строка «x” больше строки «y”;
  • -1 — строка «x” меньше строки «y”.
1 2 3 4 &НаКлиенте Процедура ТестСтрока(Команда) Сообщить(СтрСравнить(«ааа», «ааб»)); //-1 КонецПроцедуры

СтрНайти

Функция СтрНайти(x, y, z, w, v) призвана полность заменить функцию Найти(), так как она ее полность повторяет (строка «x” и подстрока поиска «y”), а также позволяет указать необязательные дополнительные параметры поиска: направление поиска «z”, начальную позицию «w” и номер вхождения «v”.

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

Функции СтрНачинаетсяС(x, y) и СтрЗаканчиваетсяНа(x, y) проверяют начинается/заканчиватся ли строка «x” с/на подстроку «y” и возвращают результат — Истина или Ложь.

СтрРазделить, СтрСоединить

Функция СтрРазделить(x, y, z) разделяет строку «x” по разделителю «y” и возвращает получившийся массив строк, параметр «z” позволяет указать, нужно ли включать в этот массив пустые строки. Функция СтрСоединить(x, y) выполняет обратную задачу — склеивает массив строк «x” в одну строку через разделитель «y” (если этот разделитель указан).

Типовые задачи при работе со строками в 1С 8.2 и 8.3

Сложение строк

В языке 1С работает сложение как непосредственно строк, так и сложение переменных:

Преобразования строка-число, число-строка

Помимо специальных функций:

  • Строка(x) — подробно описана выше;
  • Число(x) — подробно описана в статье о числах в 1С.

Кроме этого прекрасно работает приведение типов «на лету», тут все завит от того, что с чем складывает (какой тип данных идет первым), в случае если приведение типов невозможно, будет вызвана исключительная ситуация и показана соответствующая ошибка:

Кавычки в строке

Одинарные кавычки не нуждаются в каком-либо экранировании, а для использования внутри строки двойных кавычек каждую двойную кавычку нужно продублировать:

1 2 3 4 5 &НаКлиенте Процедура ТестСтрока(Команда) Сообщить(«‘Мама’ «»мыла»» ‘раму'»); //’Мама’ «мыла» ‘раму’ Сообщить(«»»»); //» КонецПроцедуры

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

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

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

При сравнении строк будет разумно (в зависимости от задачи, конечно) обрезать все не значащие символы и привести строки к одному регистру:

Разделение строки по разделителю

Для того чтобы разбить строку по разделителю в языке 1С существует два способа, старый:

Начиная с версии 8.3.6.1977 в языке 1С существует специальная функция позволяющая разложить строку по разделителю в массив строк:

1 2 3 4 5 6 7 &НаКлиенте Процедура ТестСтрока(Команда) МассивСтрок = СтрРазделить(СтрокаСРазделителями, «,»); Для Каждого ТекСтрока Из МассивСтрок Цикл Сообщить(ТекСтрока); КонецЦикла; КонецПроцедуры

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Возвращает первое или очередное вхождение подстроки в исходную строку.

Синтаксис

Функция СтрНайти() имеет следующий синтаксис:

Число СтрНайти(ИсходнаяСтрока, ПодстрокаПоиска, , , )

А также альтернативный англоязычный синтаксис:

number StrFind(SourceString, Substring, , , )

Параметры

Описание параметров функции СтрНайти():

Имя параметра Тип Описание
ИсходнаяСтрока Строка Исходная строка.
ПодстрокаПоиска Строка Искомая подстрока.
НаправлениеПоиска (необязательный) НаправлениеПоиска Указывает направление поиска подстроки в строке. Возможные значения:

СКонца Задает направление поиска от конца строки к ее началу
СНачала Задает направление поиска от начала строки в концу

Значение по умолчанию: НаправлениеПоиска.СНачала

НачальнаяПозиция (необязательный) Число Указывает позицию в строке, с которой начинается поиск. Если параметр не задан и в параметре НаправлениеПоиска указано значение СНачала, то значение по умолчанию равно 1.
НомерВхождения (необязательный) Число Указывает порядковый номер вхождения подстроки в исходной строке. Значение по умолчанию: 1 (ищется первое вхождение)
Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Число
Позиция первого символа найденной подстроки.

Описание

Функция СтрНайти() находит требуемое вхождение подстроки поиска с начала или с конца исходной строки. Нумерация символов в строке начинается с 1. Если строка не содержит указанной подстроки, то возвращается 0. Если параметр ПодстрокаПоиска является пустой строкой, то возвращается 1. Если оба обязательных параметра являются пустыми строками, возвращается 1.

Внимание! Поиск выполняется с учетом регистра, аналогично устаревшей функции Найти(). Внимание!! В том случае, если Вы используете релиз платформы 1С:Предприятие ниже 8.3.6, функция работать не будет. При попытке сохранить модуль вы получите ошибку: «Функция СтрНайти() не определена!»

Доступность

Пример кода с использованием функции СтрНайти():

ИсходнаяСтрока = «Заголовок: прочие товары»; Рез = СтрНайти(ИсходнаяСтрока, «заголовок:»); //Рез = 0, т.к. поиск регистрозависимый //регистронезависимый поиск: Рез = СтрНайти(нрег(ИсходнаяСтрока), «заголовок:»); //Рез = 1 //поиск значений, расположенных в конце строк стал удобнее ИсходнаяСтрока = «Значение: Стул комнатный Значение: 1»; Рез = СтрНайти(нрег(ИсходнаяСтрока), «значение:», НаправлениеПоиска.СКонца);

Функция 1С СтрЗаменить(ГдеЗаменять, ЧтоЗаменять, НаЧто) заменяет все вхождения ЧтоЗаменять в строке ГдеЗаменять.

Например:

  • Выполняем 1С СтрЗаменить(«Здесь; одни; точки;», «;», «.»)
  • 1С возвращает » Здесь. одни. точки.»
  • Выполняем 1С СтрЗаменить(«Ежик любит посмеяться, Ежик любит попрыгать, Ежиковидный смех», «Ежик», «Кролик»)
  • 1С возвращает «Кролик любит посмеяться, Кролик любит попрыгать, Кроликовидный смех»
  • Выполняем 1С СтрЗаменить(«Опера оправа курага», «ра», «да»)
  • 1С возвращает «Опеда опдава кудага»

На примере нашего анализатора текста сделаем с помощью 1С СтрЗаменить – создание сообщения пользователю на основе шаблона с переменными.

Допустим:

  • Текст, который мы считали из файла – шаблон сообщения пользователю
  • В тексте шаблона могут быть указаны переменные с помощью # перед началом слова, например #Документ.Организация.
    После # первым словом до точки идет указание – откуда брать переменную – из документа, константы, результат функции.
    Мы должны считать переменную из текста, определить ее значение, заменить имя переменной на значение.
  • В качестве параметра функции нам передается ссылка на документ, на основе которого мы выводим пользователю сообщение.

Только зарегистрированные пользователи VIP группы могут видеть этот контент.

Пример использования созданных нами функций:
//Функция для вызова из шаблона из переменной #Функция.ФиоПодписанта
Функция ФиоПодписанта()
Возврат «Васюкин С.М.»;
КонецФункции

//Вот такое значение мы устанавливаем в константу
Константы.ТекстПриветствия.Установить(«Доброго дня, вечера, ночи!»);

АнализТекста(Шаблон, ДокументСсылка);

Сообщения от 1С в результате выполнения этого кода:
Было: #Константа.ТекстПриветствия
Рады видеть Вас на нашей конференции от организации ‘#Документ.Организация’
Старший менеджер, #Функция.ФиоПодписанта

Стало: Доброго дня, вечера, ночи!
Рады видеть Вас на нашей конференции от организации ‘ООО «Белые ночи»‘
Старший менеджер, Васюкин С.М.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *