Двойная сортировка массива

26.07.23

Разработка - Универсальные функции

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
Двойная сортировка массива:
.epf 11,77Kb
0 2 500 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Функция возвращает отсортированный массив

- сначала по строковому представлению типа значения, по возрастанию. Например, если массив содержит 2 значения, типы Число и Булево, то после сортировки на первом месте окажется Булево

- потом по значению в рамках одного типа по убыванию (например, если в массиве есть три числа 3, 55, 7, то после сортировки они встанут рядом, в порядке 55, 7, 3

Исходный массив должен остаться неизменным

Реализовано двумя способами

1) с помощью таблицы и метода Сортировать

2) пузырьком

На форме есть возможность заполнения массива. Для наглядности, в таблицу на форме выводится результат

Учебная задачка, может, кому пригодится.

Протестирована на конфигурации Зарплата и управление персоналом, редакция 3.1 (3.1.27.23).

 

&НаСервере
Функция СортироватьМассивТЗНаСервере(МойМассив)
	
	ТЗ = Новый ТаблицаЗначений;
	ТЗ.Колонки.Добавить("ЗначенияМассива");    // Создание колонки для значений массива
	ТЗ.Колонки.Добавить("ТипЗначенияМассива"); // Создание колонки для типа значений массива

	Для Каждого Стр Из МойМассив Цикл
		СтрокаТЗ = ТЗ.Добавить();         
		СтрокаТЗ.ЗначенияМассива = Стр;
		СтрокаТЗ.ТипЗначенияМассива = Строка(ТипЗнч(Стр));		
	КонецЦикла;

	ТЗ.Сортировать("ТипЗначенияМассива Возр, ЗначенияМассива Убыв");

	СортМассив = ТЗ.ВыгрузитьКолонку("ЗначенияМассива");
	
	Возврат СортМассив;
	
КонецФункции

&НаСервере
Функция СортироватьМассивПузырькомНаСервере(МойМассив)
	
	//загрузим в СортМассив МойМассив
	СортМассив = МойМассив;
	КолВо = МойМассив.Количество()-1;   //количество итераций внутри СортМассив
	
	//сортируем СортМассив по типу
    Для i = 0 По КолВо Цикл
        Для j = 0 ПО КолВо - i - 1 Цикл
            Если Строка(ТипЗнч(СортМассив[j])) > Строка(ТипЗнч(СортМассив[j + 1])) Тогда
                Замена = СортМассив[j];
                СортМассив[j] = СортМассив[j + 1];
                СортМассив[j + 1] = Замена;
            КонецЕсли;            
        КонецЦикла;        
	КонецЦикла;
	
	t = 0;
	Пока t <= КолВо Цикл 
	
		//определим границы однотипных элементов
		tПервый = t;      //первый элемент типа
		tПоследний = t;	  //последний элемент этого же типа
		t = tПервый;
		Тип = Строка(ТипЗнч(СортМассив[t]));
		Пока t <= КолВо Цикл
			Если Строка(ТипЗнч(СортМассив[t])) = Тип Тогда
				tПоследний = t;
			КонецЕсли;	
			t = t + 1;			
		КонецЦикла;                   
		tКолВо = tПоследний - tПервый; //количество итераций на промежутке однотипных элементов
		
		//сортируем элементы СортМассив на промежутке однотипных элементов
	    Для i = 0 По tКолВо Цикл
	        Для j = tПервый По tПоследний - i - 1 Цикл
	            Если СортМассив[j] < СортМассив[j + 1] Тогда
	                Замена = СортМассив[j];
	                СортМассив[j] = СортМассив[j + 1];
	                СортМассив[j + 1] = Замена;
	            КонецЕсли;            
	        КонецЦикла;        
		КонецЦикла;                   
		
		t = tПоследний + 1;
		
	КонецЦикла;                   

	Возврат СортМассив;
	
КонецФункции

 

Вступайте в нашу телеграмм-группу Инфостарт

двойная сортировка массива сортировка методом пузырька сортировка пузырьком

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3623    Abysswalker    9    

45

Универсальные функции Работа с интерфейсом Программист 1С:Предприятие 8 Бесплатно (free)

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

14.05.2025    6722    DeerCven    15    

59

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

21.05.2024    49718    dimanich70    83    

170

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7400    6    John_d    13    

59

Универсальные функции Программист Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    62433    atdonya    31    

70

Универсальные функции Программист 1С:Предприятие 8 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    9232    ke.92@mail.ru    17    

68