Имя: Пароль:
1C
1С v8
Команда БСП по сортировке массива.
0 Dunstan
 
12.01.23
17:03
Напомните как называется?
1 lodger
 
12.01.23
17:09
2 Lama12
 
12.01.23
17:28
(0) В смысле массива? Одномерного?
3 Dunstan
 
12.01.23
17:36
(2) Да. Я вроде даже ее использовал, но забыл наименование.
4 1Сергей
 
12.01.23
17:38
пузырьком?
5 Lama12
 
12.01.23
17:40
(3) Так загрузи в СЗ. Отсортируй СЗ. Выгрузи в массив.
6 Dunstan
 
12.01.23
17:51
Ну все это я знаю. Хотелось сделать по-современному.
7 lodger
 
12.01.23
18:26
(6) по-современному это в 1с Исполнитель.
у них коллекций, кроме массива, не так чтобы много. и вот там к массиву приделали сортировку.
8 Dmitrii
 
гуру
12.01.23
18:29
(0) Нет такой.
БСП позволяет сравнивать массивы, сворачивать массивы, получать разность двух массивов, дополнить значениями из другого массива. Может что-то ещё.
Но сортировать массивы БСП не умеет.

(6) >> Хотелось сделать по-современному.

Тут стоит быть аккуратным. Чтобы после какого-нибудь очередного обновления версии БСП, которое прилетит с обновлением основной конфы, не пришлось переписывать все вызовы БСП-шных процедур и функций.
БСП можно спокойно пользоваться только в двух случаях.
1. Конфа и соответственно версия БСП в ней точно никогда не будет обновляться.
2. Ты готов сам заморачиваться, контролировать все изменения в каждом обновлении БСП - какие процедуры и функции устарели, какие были оставлены только для совместимости (их часто потом удаляют окончательно), какие удалили, какие изменили (добавив в вызов новых параметров или удалив), какие перенесли в другие модули и т.д. и т.п. Чтобы вовремя подправить свой код.

В остальных случаях рискуешь попасть на ошибки своего кода после любого очередного обновления.
Что-то совсем простое лучше делать собственными методами и кодом. Или написать свою библиотеку, которая может повторять какие-то БСП-шные возможности.
9 VladZ
 
12.01.23
18:32
(0) Зачем тебе?
10 Dmitrii
 
гуру
12.01.23
18:39
(9) См.(6) Модно, молодёжно ©
11 Галахад
 
гуру
12.01.23
18:41
Зато народ в БСП заглянул. ))
12 mistеr
 
12.01.23
18:46
(6) Задумайся, почему в БСП нет такого метода? Потому что он особо не нужен. Для небольшого количества элементов есть другие коллекции с сортировкой и другими плюшками. А если данных много, обрабатывать их нужно запросами.
13 magicSan
 
12.01.23
19:50
массив просто не однозначная структура, данные откуда изначально?
14 Ахмадинежад
 
12.01.23
20:06
если в массиве: таблица, структура, ссылка, число и двоичные данные - как это сортировать ?
15 timurhv
 
12.01.23
21:45
(8) >Тут стоит быть аккуратным. Чтобы после какого-нибудь очередного обновления версии БСП, которое прилетит с обновлением основной конфы, не пришлось переписывать все вызовы БСП-шных процедур и функций.
Запускайте проверку конфы раз в полгода в EDT, в БСП ставят комментарий об неактуализации процедуры\функции. EDT такие случаи выводит и просит переписать. Плюс код рефакторите.
16 timurhv
 
12.01.23
21:47
Я открыл свою конфу при первом запуске EDT, прифигел (мягко сказано), за 2 дня все привел в порядок и теперь периодически проверяю. Там и стандарты разработки 1С хорошо проверяет, ну кроме случаем с падежами, но это мелочи.
17 magicSan
 
12.01.23
22:56
(16) нуралиев хватит, этой блевотой не один нормальный человек пользоваться не будет
18 Dmitrii
 
гуру
13.01.23
13:55
(15) Речь не о том как проблему обойти или решить. Решения могут быть вполне простыми и нетрудоёмкими.
Не надо ставить EDT, чтобы ознакомиться перечнем изменённых, устаревших и удалённых методов. Подробное описание всего этого есть к каждой версии БСП.
Речь о том как не создавать проблему вообще.

Ведь проблема библиотечного подхода актуальна не только для 1С.
Использование в собственном коде сторонних библиотек несёт риски того, что код может перестать работать корректно после очередного изменения библиотеки.
Поэтому встаёт вопрос - что лучше - отказаться от использования библиотек(и) вообще, отказаться от обновления библиотеки (если это возможно), или заморачиваться контролем за изменениями библиотеки? Ответ на этот вопрос каждый должен дать себе сам, исходя из своих конкретных обстоятельств.
19 Новиков
 
13.01.23
16:47
ОбщегоНазначенияКлиентСерверУХ.СортироватьМассив()
20 Dmitrii
 
гуру
13.01.23
17:00
(19) Постфикс "УХ" в имени модуля недвусмысленно намекает нам на то, что речь идёт о библиотеке подсистемы УправлениеХолдингом, а не о СтандартныеПодсистемы.

точно так же автор может написать свою подсистему и модуль ОбщегоНазначенияDunstan со своим программным интерфейсом.
21 Галахад
 
гуру
13.01.23
17:02
(19) И что там?
22 Garykom
 
гуру
13.01.23
17:09
(21)

// Возвращает копию массива МассивВход, отсортированному по возрастанию/убыванию
// в зависимости от параметра ПоВозрастаниюВход.
Функция СортироватьМассив(МассивВход, ПоВозрастаниюВход = Истина) Экспорт
    РезультатФункции = Новый Массив;
    СписокВрем = Новый СписокЗначений;
    СписокВрем.ЗагрузитьЗначения(МассивВход);
    Если ПоВозрастаниюВход Тогда
        СписокВрем.СортироватьПоЗначению(НаправлениеСортировки.Возр);
    Иначе
        СписокВрем.СортироватьПоЗначению(НаправлениеСортировки.Убыв);
    КонецЕсли;
    РезультатФункции = СписокВрем.ВыгрузитьЗначения();
    Возврат РезультатФункции;
КонецФункции
23 Dmitrii
 
гуру
13.01.23
17:11
(21) Например для УТ это выглядит так.
ОбщегоНазначенияУТКлиентСервер.СортироватьМассив(Массив)


// Сортирует элементы массива.
//
// Параметры:
//    Массив - Массив - массив для сортировки.
Процедура СортироватьМассив(Массив) Экспорт
  Список = Новый СписокЗначений;
  Список.ЗагрузитьЗначения(Массив);
  Список.СортироватьПоЗначению();
  Массив = Список.ВыгрузитьЗначения();
КонецПроцедуры
24 Галахад
 
гуру
13.01.23
17:11
(22) Спасибо. Т.е. то что предлагали уже в (5).
25 Галахад
 
гуру
13.01.23
17:12
(23) Понятно. Значит (0) был прав и есть в БСП такое.
26 Dmitrii
 
гуру
13.01.23
17:16
(25) >> Значит (0) был прав и есть в БСП такое.

Нет. (0) был НЕ прав. Нет в БСП такого.
Нет в БСП модуля ОбщегоНазначенияУТКлиентСервер. Обрати внимание на суффикс "УТ" после "ОбщегоНазначения" в имени.

В ERP есть ещё такое.
ПланированиеПроизводства.СортироватьМассив(Массив, Направление, Свойство = Неопределено).


// Процедура - Сортирует массив по значениям или по реквизитам значений в указанном порядке.
// Параметры:
//  Массив      - Массив - Исходный массив для сортировки
//  Направление - НаправлениеСортировки - Способ сортировки - по возрастанию или по убыванию
//  Свойство    - Строка - Имя реквизита, по которому выполняется сравнение элементов массива.
//                         Если не указан, сортировка выполняется по значению.
Процедура СортироватьМассив(Массив, Направление, Свойство = Неопределено) Экспорт
    СравнениеЗначений = Новый СравнениеЗначений;
    Для Индекс = 0 По Массив.ВГраница() Цикл
        Для ИндексЭлемента = 0 По Массив.ВГраница() - Индекс - 1 Цикл
            Если Свойство = Неопределено Тогда
                Значение1 = Массив[ИндексЭлемента];
                Значение2 = Массив[ИндексЭлемента + 1];
            Иначе
                Значение1 = Массив[ИндексЭлемента][Свойство];
                Значение2 = Массив[ИндексЭлемента + 1][Свойство];
            КонецЕсли;
            РезультатСравнения = СравнениеЗначений.Сравнить(Значение1, Значение2);
            Если РезультатСравнения > 0 И Направление = НаправлениеСортировки.Возр
                ИЛИ РезультатСравнения < 0 И Направление = НаправлениеСортировки.Убыв Тогда
                ТекущийЭлемент = Массив[ИндексЭлемента];
                Массив[ИндексЭлемента] = Массив[ИндексЭлемента + 1];
                Массив[ИндексЭлемента + 1] = ТекущийЭлемент;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
КонецПроцедуры
27 Галахад
 
гуру
13.01.23
17:24
(26) Это интереснее. Сравнение не простых значений.
28 bolobol
 
13.01.23
17:31
Пузырёк??? Серьёзно??? Даже тупо на несколько строк больший и не менее прозрачный метод Шелла не занесли?? Космические...
29 Kassern
 
13.01.23
17:39
(28) Все в ваших руках, можете какую угодно сортировку пихнуть, хоть расческой, хоть вставками, хоть шейкерную используйте)
30 Злопчинский
 
13.01.23
17:48
24 сортировки, визуализация https://www.youtube.com/watch?v=BeoCbJPuvSE
31 ДедМорроз
 
13.01.23
21:22
Чтобы сортировать массив,нужно иметь функцию сравнения двух элементов.
Проблема в том,что в 1с нет указателей на функции и приходится очень постараться,чтобы сделать функцию.
В остальном,любой метод сортировки годится.