1с преобразовать строку в список значений

Обновлено: 07.07.2024

Визуально можно представить как таблицу из четырёх колонок:

  • значение,
  • картинка,
  • пометка,
  • представление.

Список значений может быть наполнен значениями любых типов. Значения характеризуются позицией в списке (индексом).

Рассмотрим работу с объектом на примерах:

Создание объекта СписокЗначений

Добавить элемент в список значений

Удалить элемент списка значений

Вставить элемент в список значений

Установить/снять пометки у всех элементов

Найти в списке значений

Узнать индекс элемента с известным значением

Отсортировать список значений

Сдвинуть элемент списка значений

Создать копию списка значений

Получить количество элементов списка значений

Перебор элементов списка значений

Загрузить/выгрузить в массив

Удалить все элементы из списка значений

Интерактивный выбор одного элемента из списка на форме

Модальный и немодальный режим. Универсальный способ:

Интерактивная отметка значений из списка на форме

Модальный и немодальный режим. Универсальный способ:

Преобразования таблицы значений в список значений

Поддержите нас, расскажите друзьям!

СПРОСИТЕ в комментариях!

Услуги 1С

Наш канал на Youtube


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

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

В php есть функция explode() для этого, а как реализовать в 1с?

Функция Разложить(Знач Стр, Разделитель = ",") Экспорт

Список = Новый Массив();
Длина = СтрДлина(Разделитель);

Стр = СокрЛП(Стр);
Поз = Найти(Стр, Разделитель);

Пока 0 < Поз Цикл
Список.Добавить(СокрП(Лев(Стр, Поз-1)));

Стр = СокрЛ(Сред(Стр, Поз+Длина));
Поз = Найти(Стр, Разделитель);
КонецЦикла;

Если конфигурации типовые, то там есть уже функция Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",").

В ВДГБ 8.3 и 1С Университет проф не нашел такого.
Зато есть - СтрРазделить (StrSplit)

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

Описание:
Разделяет строку на части по указанным символам-разделителям.

Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

insurgut; greenfest; Darlok; tehas; Sinoptic; user1114234; + 6 – Ответить

// Функция "расщепляет" строку на подстроки, используя заданный
// разделитель. Разделитель может иметь любую длину.
// Если в качестве разделителя задан пробел, рядом стоящие пробелы
// считаются одним разделителем, а ведущие и хвостовые пробелы параметра Стр
// игнорируются.
// Например,
// РазложитьСтрокуВМассивПодстрок(",ку. му", ",") возвратит массив значений из пяти элементов,
// три из которых - пустые строки, а
// РазложитьСтрокуВМассивПодстрок(" ку му", " ") возвратит массив значений из двух элементов
//
// Параметры:
// Стр - строка, которую необходимо разложить на подстроки.
// Параметр передается по значению.
// Разделитель - строка-разделитель, по умолчанию - запятая.
//
//
// Возвращаемое значение:
// массив значений, элементы которого - подстроки
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",") Экспорт

МассивСтрок = Новый Массив();
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока Истина Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
МассивСтрок.Добавить(Стр);
Возврат МассивСтрок;
КонецЕсли;
МассивСтрок.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;

Или вот так,рекурсивненько. Последнего разделителя нет. Массив предварительно инициализировать

из 1с :
//Разбивает строку на несколько строк по разделителю. Разделитель может иметь любую длину.
//
//Параметры:
// Строка - Строка - текст с разделителями;
// Разделитель - Строка - разделитель строк текста, минимум 1 символ;
// ПропускатьПустыеСтроки - Булево - признак необходимости включения в результат пустых строк.
// Если параметр не задан, то функция работает в режиме совместимости со своей предыдущей версией:
// - для разделителя-пробела пустые строки не включаются в результат, для остальных разделителей пустые строки
// включаются в результат.
// - если параметр Строка не содержит значащих символов или не содержит ни одного символа (пустая строка), то в
// случае разделителя-пробела результатом функции будет массив, содержащий одно значение "" (пустая строка), а
// при других разделителях результатом функции будет пустой массив.
//
// Возвращаемое значение:
// Массив - массив строк.
//
//Примеры:
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",") - возвратит массив из 5 элементов, три из которых - пустые строки;
// РазложитьСтрокуВМассивПодстрок(",один,,два,", ",", Истина) - возвратит массив из двух элементов;
// РазложитьСтрокуВМассивПодстрок(" один два ", " ") - возвратит массив из двух элементов;
// РазложитьСтрокуВМассивПодстрок("") - возвратит пустой массив;
// РазложитьСтрокуВМассивПодстрок("",,Ложь) - возвратит массив с одним элементом "" (пустой строкой);
// РазложитьСтрокуВМассивПодстрок("", " ") - возвратит массив с одним элементом "" (пустой строкой);
//
Функция РазложитьСтрокуВМассивПодстрок(Знач Строка, Знач Разделитель = ",", Знач ПропускатьПустыеСтроки = Неопределено) Экспорт

Результат = Новый Массив;

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

Позиция = Найти(Строка, Разделитель);
Пока Позиция > 0 Цикл
Подстрока = Лев(Строка, Позиция - 1);
Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Подстрока) Тогда
Результат.Добавить(Подстрока);
КонецЕсли;
Строка = Сред(Строка, Позиция + СтрДлина(Разделитель));
Позиция = Найти(Строка, Разделитель);
КонецЦикла;

Если Не ПропускатьПустыеСтроки Или Не ПустаяСтрока(Строка) Тогда
Результат.Добавить(Строка);
КонецЕсли;

Строки сравниваются посимвольно по коду символа, для ясности несколько примеров "Строка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с встает вопрос разбора большого текста это уже зоопарк из СтрДлина, Сред, СтрНайти для повышения читаемости программ для подобных задач использую свои функции: РазборПрочитатьЦелоеЧисло, РазборПрочитатьШестнадцатеричноеЧисло, РазборПрочитатьНезначимые, РазборПрочитатьИдентификатор,

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

работа со строками в 1С

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

Рассмотрим основные функции встроенного языка программирования 1С.

Строка

Функция Строка() позволяет получить текстовое представление переменных других типов.

СтрДлина

Функция позволяет получить количество символов в строке 1C, включая пробелы и незначащие символы.

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

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

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

С помощью данных функций очень просто получить первые (Лев) или последние (Прав) символы в строке, а также произвольное количество символов (Сред).

Найти

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

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

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

Аналогично можно проверить строку на пустое значение следующим образом:

СтрЗаменить

Функция СтрЗаменить позволяет массово заменить искомое значение на нужное нам. Синтаксис:

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

Позволяет получить количество строк в многострочном тексте. Функция считает количество переносов строк (Символы.ПС).

Например, построчная обработка текстового фрагмента:

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

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

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

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

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

Часто встречающиеся задачи по работе со строками в 1С

Рассмотрим классические примеры решения задач в работе с текстовыми переменными.

Конкатенация строк в 1С

Преобразовать число в строку

Однако может смущать наличие неразрывного пробела.

Его можно убрать с помощью замены неразрывного пробела на пустую строку:

или с помощью метода Формат:

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

Для новичков достаточно трудно установить кавычки внутри строки, хотя в этом нет ничего сложного. Достаточно внутри строки поставить вместо одних кавычек двое.

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

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

Однако для получения корректного сравнения часто требуется возвести строки в один регистр и убрать незначащие символы:

Таким образом, мы получим более точное сравнение двух строк.

Убрать пробелы в строке 1С

Достаточно часто нужно убрать пробелы в строке 1С.

Если требуется убрать пробелы справа и слева:

Если требуется убрать абсолютно все пробелы, можно заменить их на пустую строку:

Если требуется убрать неразрывные пробелы из строки, которая получена из числового типа, сделать это можно так:

Другие статьи по 1С:

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