|
Помогите свернуть массив (убрать дублирующиеся строки) | ☑ | ||
---|---|---|---|---|
0
dft2014
15.01.21
✎
14:52
|
Подскажите, есть массив (МС) с задублированными записями. Ниже код, которым я пытаюсь убрать дубли, но код не срабатывает: СвернутыйМассив всё равно содержит задублированные записи. Помогите!!!
МС = Новый Массив; Пока ТЗ_Сотрудники.следующий() Цикл МС.Добавить(новый Структура("Подразделение, Сотрудник", ТЗ_Сотрудники.Подразделение, ТЗ_Сотрудники.Сотрудник)); //здесь задублированные сотрудники, подразделение всегда одинаковое //добавим вспомогательный массив СвернутыйМассив = Новый Массив; Для каждого Элемент Из МС Цикл Если СвернутыйМассив.Найти(Элемент.Сотрудник) = Неопределено Тогда //если такого значения в массиве еще нет, добавим его СвернутыйМассив.Добавить(новый Структура("Подразделение, Сотрудник", Элемент.Подразделение, Элемент.Сотрудник)); КонецЕсли; КонецЦикла; Структ = Новый Структура("Сотрудники, Факторы", СвернутыйМассив, МФ); КонецЦикла; |
|||
1
timurhv
15.01.21
✎
14:55
|
(0) Так ищите дубли по ссылке элемента справочника, а добавляете туда структуру.
|
|||
2
dft2014
15.01.21
✎
14:57
|
(1) Мне надо, чтобы массив был в виде структуры.
|
|||
3
polosov
15.01.21
✎
14:57
|
ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива()
|
|||
4
BaZZiL
15.01.21
✎
14:58
|
ТЗ_Сотрудники это таблица? Сверните таблицу. ваш Кэп
|
|||
5
dft2014
15.01.21
✎
14:59
|
(3) Нет у меня такого модуля в 1С:ЗУП3.
|
|||
6
Gbpltw
15.01.21
✎
15:02
|
(5) в БСП есть такой модуль. Ищите.
|
|||
7
dft2014
15.01.21
✎
15:02
|
(4) Там вначале очень сложный запрос, его менять нельзя. Вот откуда ТЗ_Сотрудники берётся:
ПакетЗапрос = Запрос.ВыполнитьПакет(); ТЗ_Сотрудники = ПакетЗапрос[5].Выбрать(); МС = Новый Массив; Пока ТЗ_Сотрудники.следующий() Цикл МС.Добавить(новый Структура("Подразделение, Сотрудник", ТЗ_Сотрудники.Подразделение, ТЗ_Сотрудники.Сотрудник)); //здесь задублированные сотрудники //добавим вспомогательный массив СвернутыйМассив = Новый Массив; Для каждого Элемент Из МС Цикл Если СвернутыйМассив.Найти(Элемент.Сотрудник) = Неопределено Тогда //если такого значения в массиве еще нет, добавим его СвернутыйМассив.Добавить(новый Структура("Подразделение, Сотрудник", Элемент.Подразделение, Элемент.Сотрудник)); КонецЕсли; КонецЦикла; Структ = Новый Структура("Сотрудники, Факторы", СвернутыйМассив, МФ); Возврат структ; КонецЦикла; |
|||
8
vde69
15.01.21
✎
15:04
|
ТЗ_Сотрудники_Свернутая = ТЗ_Сотрудники.Скопировать(); // или выгрузить, зависит от типа
ТЗ_Сотрудники_Свернутая.Свернуть("Подразделение,Сотрудник",""); |
|||
9
МихаилМ
15.01.21
✎
15:05
|
если нужно свернуть массив -
1) отсортируйте его с помощью сз 2) пробегитесь по сз и выгрузите уникальные в массив |
|||
10
dft2014
15.01.21
✎
15:13
|
(8) Пишет, что "Метод объекта не обнаружен (Скопировать)". Аналогично "Метод объекта не обнаружен (Выгрузить)".
|
|||
11
dft2014
15.01.21
✎
15:15
|
(6) А разве есть ещё какие-то модули, которые не видных в Общих?!
|
|||
12
Гипервизор
15.01.21
✎
15:15
|
(10) Ну так в ТЗ_Сотрудники у вас внезапно Выборка, а она не имеет таких методов.
Тогда замените ТЗ_Сотрудники = ПакетЗапрос[5].Выбрать() на ТЗ_Сотрудники = ПакетЗапрос[5].Выгрузить(). |
|||
13
dft2014
15.01.21
✎
15:16
|
(9) Я это не осилю ((
|
|||
14
BaZZiL
15.01.21
✎
15:17
|
Если запрос возвращает "дубли", которые надо обрабатывать в результате запроса, значит это неправильный запрос.
Результат запроса можно выгрузить, тогда это будет таблица, которую можно свернуть. Хотя правильней составить запрос, который вернет результата без дублей. |
|||
15
dft2014
15.01.21
✎
15:19
|
(14) Логично, но по некоторым причинам, запрос решено не трогать.
|
|||
16
boozin
15.01.21
✎
15:22
|
Можно еще сделать запрос к ТЗ и убрать из нее дубли запросом.
|
|||
17
dft2014
15.01.21
✎
15:27
|
(12) Исправила, теперь ругается что "Метод объекта не обнаружен (Следующий)":
ПакетЗапрос = Запрос.ВыполнитьПакет(); //ТЗ_Сотрудники = ПакетЗапрос[5].Выбрать(); ТЗ_Сотр = ПакетЗапрос[5].Выгрузить(); ТЗ_Сотрудники = ТЗ_Сотр.Скопировать(); ТЗ_Сотрудники.Свернуть("Подразделение,Сотрудник",""); МС = Новый Массив; Пока ТЗ_Сотрудники.следующий() Цикл МС.Добавить(новый Структура("Подразделение, Сотрудник", ТЗ_Сотрудники.Подразделение, ТЗ_Сотрудники.Сотрудник)); //здесь задублированные сотрудники ////добавим вспомогательный массив //СвернутыйМассив = Новый Массив; //Для каждого Элемент Из МС Цикл // Если СвернутыйМассив.Найти(Элемент.Сотрудник) = Неопределено Тогда // //если такого значения в массиве еще нет, добавим его // СвернутыйМассив.Добавить(новый Структура("Подразделение, Сотрудник", Элемент.Подразделение, Элемент.Сотрудник)); // КонецЕсли; //КонецЦикла; Структ = Новый Структура("Сотрудники, Факторы", МС, МФ); Возврат структ; КонецЦикла; |
|||
18
NWsFF
15.01.21
✎
15:30
|
(17) Пока ТЗ_Сотрудники.следующий() Цикл - > Для Каждого СтрокаТЗ ИЗ ТЗ_Сотрудники Цикл
внутри цикла зменить ТЗ_Сотрудники - > СтрокаТЗ |
|||
19
dka80
15.01.21
✎
15:32
|
Что за ВОЗВРАТ в цикле?
|
|||
20
Гипервизор
15.01.21
✎
15:33
|
И если я правильно понял что вы хотите изобразить, то создание структуры еще из цикла вынести.
|
|||
21
Гений 1С
гуру
15.01.21
✎
15:38
|
Хахаха, девушка программистка.
А не проще ли, прежде чем добавлять, глянуть есть ли уже такая запись в кэше? Кэшем может тупое Соответствие по сотруднику быть. |
|||
22
dft2014
15.01.21
✎
15:57
|
(18) Спасибо, всё получилось!
vde69, Гипервизор - вам тоже СПАСИБО!!! |
|||
23
dft2014
15.01.21
✎
15:58
|
(21) А вы, батенька - шовинист!
|
|||
24
Гений 1С
гуру
15.01.21
✎
16:00
|
(23) так точно, тётенька
|
|||
25
minsk1s
01.06.21
✎
16:21
|
(17) три способа свернуть массив: https://1cnik.by/svernut_massiv.php
дубли соответственно уйдут |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |