Как преобразовать текстовую строку в массив чисел и отсортировать их в 1С?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

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

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

Если мы просто разделим строку методом СтрРазделить, мы получим массив строк. При попытке отсортировать такой массив 1С применит «алфавитную» сортировку. В такой логике строка «10» будет меньше, чем строка «9», потому что символ «1» стоит раньше символа «9». Чтобы избежать этого, нам нужно заставить систему воспринимать данные именно как числа.

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

Наиболее эффективным и простым способом решения задачи является использование объекта СписокЗначений. Ключевой момент здесь — принудительное указание типа данных через ОписаниеТипов. Это обеспечит неявное приведение типов при загрузке данных в список.

Рассмотрим пошаговый алгоритм реализации:

  1. Разделяем исходную строку на массив подстрок с помощью функции СтрРазделить.
  2. Создаем объект СписокЗначений.
  3. Устанавливаем свойство ТипЗначения, чтобы список «понимал», что внутри будут числа.
  4. Загружаем массив в список, выполняем сортировку и выгружаем результат обратно в массив.

Пример программной реализации

Давайте посмотрим на готовый код, который реализует данную логику. Этот код можно использовать в модуле формы или в серверном модуле.


ИсходнаяСтрока = "122, 18, 9, 10";
МассивСтрок = СтрРазделить(ИсходнаяСтрока, ",");

СЗ = Новый СписокЗначений;
// Указываем, что в списке будут только числа
СЗ.ТипЗначения = Новый ОписаниеТипов("Число");

// Загружаем данные — приведение типов произойдет автоматически
СЗ.ЗагрузитьЗначения(МассивСтрок);

// Выполняем сортировку по возрастанию
СЗ.СортироватьПоЗначению(НаправлениеСортировки.Возр);

// Получаем отсортированный массив чисел
Результат = СЗ.ВыгрузитьЗначения();

Почему кнопка может «не отрабатывать»?

Если вы написали код, но по нажатию кнопки ничего не происходит, рекомендуем проверить следующие моменты:

Рекомендации по надежности

Для создания более профессионального кода учитывайте, что пользователь может ввести некорректные данные (буквы или спецсимволы вместо цифр). Чтобы программа не «вылетала» с ошибкой, используйте конструкцию Попытка...Исключение при преобразовании каждого элемента в число. Также, если вы планируете в дальнейшем выполнять сложные манипуляции с этими числами, рассмотрите возможность использования ТаблицыЗначений с одной колонкой типа Число — это дает больше возможностей для последующей фильтрации и группировки данных.

← На главную