Имя: Пароль:
1C
 
Какой самый оптимальный способ сгруппировать массив структур?
,
0 Hipocrisy2013
 
24.04.19
12:47
Какой самый оптимальный способ сгруппировать массив?
1 1Сергей
 
24.04.19
12:48
Лесной массив?
2 alkorolev
 
24.04.19
12:49
создать Массив2, при обходе Массива1 искать значение в Массиве2. Если не находишь, то добавлять значение в массив2
3 Hipocrisy2013
 
24.04.19
12:56
(2) Если нужно какие то поля суммировать, то не очень походит
На ум приходит перебрать массив и построчно добавить в ТЗ, ТЗ свернуть, и назад в массив
Но, столько действий ради какой то банальной операции...
4 igork1966
 
24.04.19
12:57
(3) Можно за один проход с использованием например соответствия или структуры. Вопрос только в ключе
5 sqr4
 
24.04.19
12:58
(0) Двумерный массив? А зачем данные которые нужно группировать хранить в массиве?
6 Chameleon1980
 
24.04.19
13:00
ТЗ в запрос с итогами
7 Chameleon1980
 
24.04.19
13:00
+ т.к. ".. Если нужно какие то поля суммировать..."
это уже не массив
8 alkorolev
 
24.04.19
13:04
(3) а откуда ты получил массив с коллекцией полей, среди которых есть сумма?
9 alkorolev
 
24.04.19
13:05
с ТЗ верная мысль. Но я полагаю, что у тебя массив уже был рожден из ТЗ
10 vdss
 
24.04.19
13:08
(3) Ни разу не видел в 1С двухмерные массивы. Обычно такие задачи решаются через ТЗ.Свернуть(), или запросом
11 alkorolev
 
24.04.19
13:12
(10) кто сказал, что у него двумерный массив? у него массив с какими то коллекциями. Скорее всего строкаТаблицы или структурами
12 Hipocrisy2013
 
24.04.19
13:13
(5)(8) Такой массив формируется типовым функционалом при формировании позиций чека, и заполняется он строкой в цикле ТЧ.
13 Hipocrisy2013
 
24.04.19
13:14
ТЧ заранее свернуть не могу, так как у каждой позиции есть свой УИД и в цикле есть пару функций которым требуется этот УИД
14 alkorolev
 
24.04.19
13:16
(13) ну, значит, описывай свою ТаблицуЗначений, в нее запихивай строки из Массива и сворачивай Таблицу
15 Hipocrisy2013
 
24.04.19
13:16
Короч это не двухмерный массив, это массив структур
16 Вафель
 
24.04.19
13:17
проходишь в цикле - ключ в соотвествие, сумму в значение соотвествия
17 Hipocrisy2013
 
24.04.19
13:17
(14) Ну да, других вариантов нет
18 fisher
 
24.04.19
13:19
(15) Не прошло и 15 сообщений до попытки сформулировать задачу внятно :)
Ок. На входе массив структур. Сворачивать надо по нескольким полям, а по остальным суммировать? Полный аналог свертки ТЗ?
19 Hipocrisy2013
 
24.04.19
13:38
(18)"Ок. На входе массив структур. Сворачивать надо по нескольким полям, а по остальным суммировать? Полный аналог свертки ТЗ?" - Всё верно
20 igork1966
 
24.04.19
13:41
(19) --> (4)(16)
21 Garykom
 
гуру
24.04.19
13:44
Где то у меня был свой код на java реализующий Свернуть("КолонкиГруппировки", "КолонкиСуммирования") для объекта своего аналога ТЗ из 1С.
Возможно даже смогу найти, тогда еще гитхаба не было поэтому валяется где то в архивах на не подключенном hdd.

Но там не массивы а через ArrayList
22 Garykom
 
гуру
24.04.19
13:45
(21)+ Вроде бы через HashTable делал уже не помню за давностью лет.
23 fisher
 
24.04.19
14:00
(19) Тогда подозреваю что лучше будет таки в ТЗ и сворачивать. На структурах/соответствиях в 1С много накладных расходов выйдет, несмотря на преимущества хэшированных структур данных. Да и в общем виде эту задачу в 1С решать несподручно. С одним полем в качестве ключа - еще куда ни шло.
24 Лефмихалыч
 
24.04.19
14:36
(0) перекидать его в соответствие, например
25 Лефмихалыч
 
24.04.19
14:52
(17) есть, но есть очень много НО. Например

Функция ЕслиМутабельныхЗначенийНетИВсёСериализуетсяТоСработает(МассивСтруктур)
  Множество = Новый Соответствие;
  Для каждого Элемент из МассивСтруктур Цикл
    Множество[XMLСтрока(Элемент)] = Истина;
  КонецЦикла;

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

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

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