В колонке табличной части находятся целые числа. Необходимо "сжать" ряд чисел, заменив подряд идущие числа их диапазоном. Например: 1, 3, 4, 5, 7, 10, 11, 12, 16 должно превратиться в 1, 3-5, 7, 10-12, 16.
Автор: ildarovich
Функция КолонкаСжато(ДокументСсылка, ИмяТабличнойЧасти, ИмяКолонки, Слэш = ",", Тире = "-")
Запрос = Новый Запрос("ВЫБРАТЬ Различные " + ИмяКолонки + " ИЗ Документ." + ДокументСсылка.Метаданные().Имя + "." + ИмяТабличнойЧасти + " ГДЕ Ссылка = &Ссылка Упорядочить ПО " + ИмяКолонки);
Запрос.УстановитьПараметр("Ссылка", ДокументСсылка);
Ряд = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку(ИмяКолонки);
Если Ряд.Количество() = 0 Тогда Возврат ""
КонецЕсли;
Ряд.Добавить(0); Ряд.Добавить(0);
Сжато = Строка(Ряд[0]);
Для ё = 1 По Ряд.Количество() - 3 Цикл
Если Число(Ряд[ё + 1]) - Число(Ряд[ё - 1]) <> 2 Тогда
Сжато = Сжато + Слэш + Строка(Ряд[ё])
ИначеЕсли Число(Ряд[ё + 2]) - Число(Ряд[ё]) <> 2 Тогда
Сжато = Сжато + Тире
КонецЕсли
КонецЦикла;
Возврат СтрЗаменить(Сжато, Тире + Слэш, Тире)
КонецФункции
Формат изображения (уменьшить,обрезать,масштабировать,сжать)
КолонкиДляЗагрузкиДанных (БСП)
#1, 04 мая 2020 22:28
А есть какоето практическое применение? какойто готовый кейс? больше похоже на задачку какуюто.
#2, 05 мая 2020 12:46
(1) Константин Аванесов, это код из серии Минимализмы (кратчайшее решение некоторых задач). Но если вдруг понадобится в практике, то уже есть готовое решение 😃