Объединение массивов

1. Akteur33 23.09.13 10:14 Сейчас в теме
Здравствуйте! Платформа 8.3

Есть три массива. Подскажите, пожалуйста, как проще всего объединить эти массивы в один.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
8. brodya 23.09.13 10:51 Сейчас в теме
(1) Akteur33, можно вот так даже извратиться
Список1 = Новый Массив;
Список1.Добавить(1);
Список1.Добавить(2);
Список1.Добавить(3);
Список1.Добавить(4);
Список1.Добавить(5);

Список2 = Новый Массив;
Список2.Добавить(11);
Список2.Добавить(12);
Список2.Добавить(13);
Список2.Добавить(14);
Список2.Добавить(15);

КолР = Формат(Список1.Количество() + Список2.Количество(), "ЧГ=0");

СтрСписок1  = ЗначениеВСтрокуВнутр(Список1);         
СтрСписок2  = ЗначениеВСтрокуВнутр(Список2); 
Заголовок   = Лев(СтрСписок1,44);
Элементы1   = Сред(СтрСписок1,47,СтрДлина(СтрСписок1)-50);
Элементы2   = Сред(СтрСписок2,47,СтрДлина(СтрСписок2)-50);
Подвал      = Прав(СтрСписок1,4);
СтрокаРез   = Заголовок+КолР+","+Элементы1+","+Элементы2+Подвал;
НовыйМассив = ЗначениеИзСТрокиВнутр(СтрокаРез);
Показать
12. Akteur33 23.09.13 11:04 Сейчас в теме
(8)что-то подобное я уже встречал.. ругался вот здесь
ЗначениеИзСТрокиВнутр(СтрСписР)

Ошибка формата потока.

Весь код:
Функция ОбъединитьМассивыЗначений(Массив1,Массив2,Массив3) Экспорт
	Если (ТипЗнч(Массив1)=Тип("Массив")) И (ТипЗнч(Массив2)=Тип("Массив")) И (ТипЗнч(Массив3)=Тип("Массив")) Тогда
		СтрМассив1 = ЗначениеВСтрокуВнутр(Массив1);         
		СтрМассив2 = ЗначениеВСтрокуВнутр(Массив2);
		СтрМассив3 = ЗначениеВСтрокуВнутр(Массив3);
		Шапка     = Лев(СтрМассив1,91);
		Знач1     = Сред(СтрМассив1,92,СтрДлина(СтрМассив1)-110);
		Знач2     = Сред(СтрМассив2,92,СтрДлина(СтрМассив2)-110);
		Знач3     = Сред(СтрМассив3,92,СтрДлина(СтрМассив3)-110);
		Подвал    = Прав(СтрМассив1,19);
		СтрСписР  = Шапка+Знач1+Знач2+Знач3+Подвал;
		
		СтрМассив = ЗначениеИзСТрокиВнутр(СтрСписР);
		Возврат СтрМассив;
	Иначе
		Возврат Неопределено;
	КонецЕсли
КонецФункции
Показать
16. brodya 23.09.13 11:48 Сейчас в теме
(12) Akteur33, ну да, суть та же, только для массивов необходимо использовать именно то что писал я в (8), а твой пример скорее всего для списков значений.
17. Akteur33 23.09.13 11:52 Сейчас в теме
14. Поручик 4674 23.09.13 11:16 Сейчас в теме
2. mymyka 23.09.13 10:23 Сейчас в теме
если массивы небольшие, то перебрать и засунуть уникальные элементы в 4.
Если массивы сильно большие, то загрузить их в ТЗ с 1 колонкой и через временную таблицу отобрать запросом Различные.
3. Akteur33 23.09.13 10:25 Сейчас в теме
(2)по поводу первого: это получится три цикла? тогда это теряет смысл, конечно..
4. tango 541 23.09.13 10:33 Сейчас в теме
(3) Akteur33, цель-то какая? добиться чего хотим?
6. Akteur33 23.09.13 10:40 Сейчас в теме
(4) есть не типовые регистры.
хочу получить три массива с регистрами сведений, накопления и бухгалтерии (сбств не типовые). А потом нужен еще массив со всеми полученными регистрами из этих трех.
просто я решил немного уменьшить код, сделав общую функцию, которая получает массивы с не типовыми объектами, но тогда не знаю, как получить общий массив) а так, конечно, все ясно: три цикла, и все готово.
5. mymyka 23.09.13 10:39 Сейчас в теме
(3)Задача объединения массивов на самом деле встречается весьма часто. Я обычно держу для этого функцию в общем модуле, куда передаю структуру массивов, которая в свою очередь для каждого элемента структуры организует цикл по элементам массива и добавляет полученные уникальные значения в итоговый массив. Т.о. нет смысла заморачиваться сколько там массивов надо сложить, 2,3 или 150.
7. Akteur33 23.09.13 10:43 Сейчас в теме
(5)если можно, я бы с удовольствием увидел код)
9. mymyka 23.09.13 10:52 Сейчас в теме
Функция СложитьМассивы(СтруктураМассивов, ТолькоУникальные = Истина) Экспорт
ИтогМассив = Новый Массив;
Для Каждого КлючИЗначение из СтруктураМассивов Цикл
   Если НЕ ТипЗнч(КлючИЗначение.Значение) = Тип("Массив") Тогда
       Продолжить;
   КонецЕсли;
   Для Каждого Элемент из КлючИЗначение.Значение Цикл
      Если ТолькоУникальные Тогда
         Если ИтогМассив.Найти(Элемент) = Неопределено Тогда
            ИтогМассив.Добавить(Элемент);
         КонецЕсли;
      Иначе
         ИтогМассив.Добавить(Элемент);
      КонецЕсли;
   КонецЦикла;
КонецЦикла;
Возврат ИтогМассив;
КонецФункции
Показать
dimisa; OzzY; Prikum; request4t; belas; freeek; olezhe; IvanKh; inbassador; Dioneo; _Маша; kraynev-navi; xsazar; pyrkin_vanya; CeHbKA; RailMen; Grohovod; AllEggRus; Akteur33; +19 Ответить
15. Akteur33 23.09.13 11:22 Сейчас в теме
сделал вот так(9), все получилось, пока доволен)
10. thenroach 4 23.09.13 10:54 Сейчас в теме
а пакетный запрос организовать? :)
если регистры известны. во вложенном запросе делаете пакетный запрос. если ключевые поля одинаковые то через объединения добавляйте таблицы. Во внешнем запросе можете сделать группировки и т.д. На выходе будет нужная таблица. самый простой и быстрый по времени исполнения вариант.
11. Akteur33 23.09.13 11:01 Сейчас в теме
Спасибо всем большое! Не скажу, что все из вышесказанного осознал наверно, но буду сейчас пробовать..
13. tango 541 23.09.13 11:04 Сейчас в теме
два варианта:
1. запросом ко всем (трем) источникам выбираешь все в один массив. причем это можно сделать тогда же, когда формируешь отдельные (три) массива
2. если есть уже (три) массива, делаешь из них временные таблицы и запросом же объединяешь
18. ryst 09.04.15 17:30 Сейчас в теме
В БСП есть готовая функция ОбщегоНазначения.ЗаполнитьМассивУникальнымиЗначениями(МассивПриемник, МассивИсточник);
CHELLL; dimisa; Moonlitolga; vito3; Jeka44; Drivingblind; user990801; collider; movled; greenLiss; Somebody1; kazann; makarovy; Dioneo; myoker; invertercant; nanik; +17 Ответить
19. FractonKireyev 09.04.15 18:15 Сейчас в теме
(18) ryst,
Использовать-то её можно, но делает она всё то-же самое.
20. makarovy 04.09.18 08:31 Сейчас в теме
(18)
ЗаполнитьМассивУникальнымиЗначениями

Устарела. Следует использовать ОбщегоНазначенияКлиентСервер.ДополнитьМассив,
установив параметра ТолькоУникальныеЗначения в значение Истина.
ivanovkpd; powar; fuser; user1559729; One_Assembler; mi13; unknown181538; sergey_s_; Мах; native-api; whirlpool; TimofeySin; Izumov; Vova_Di; Andrei_Ivanov; dynamicsystems; Moonlitolga; Jeka44; ПрестарелыйЗаяц; romankoav; Drivingblind; AndrewVVS; ahahaev; +23 Ответить
23. sergey_s_ 12.04.23 16:43 Сейчас в теме
(20)
ОбщегоНазначенияКлиентСервер.ДополнитьМассив

Спасибо, очень помогло столь простое решение. Надо лучше изучить БСП.
24. пользователь 12.04.23 17:14
Сообщение было скрыто модератором.
...
25. user1880116 12.04.23 19:12 Сейчас в теме
(24) В прошлом. Они все живут в прошлом, когда трава была зеленее, а вода мокрее.
Настоящее причиняет им боль, поэтому они подсознательно стремятся вернутся в уютное прошедшее время.
21. пользователь 30.12.21 11:17
Сообщение было скрыто модератором.
...
22. пользователь 30.12.21 13:24
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот