|
Массив выбрать только уникальные записи | ☑ | ||
---|---|---|---|---|
0
Roma1314704
19.05.18
✎
13:54
|
День добрый. Есть массив значений номенклатуры в т.ч.есть наименование и код родителя товара верхнего уровня. Задача как выбрать только уникальные наименование категорий и код категории? Ведь к примеру из 20 наименований товара уникальными может быть к примеру 4 родительские категории с соотвествующим кодом. Вопрос как перебрать массив и выбрать только не повторяющиеся?
|
|||
1
b_ru
19.05.18
✎
14:08
|
ТЗ.Свернуть() например.
|
|||
2
b_ru
19.05.18
✎
14:10
|
Хотя если у тебя именно массив номенклатуры, то очевидно
ВЫБРАТЬ РАЗЛИЧНЫЕ спр.Родитель.Наименование КАК Наименование, спр.Родитель.Код КАК Код ИЗ Справочник.Номенклатура КАК спр ГДЕ спр.Ссылка В (&МойМассив) |
|||
3
Cyberhawk
19.05.18
✎
14:30
|
(0) "как перебрать массив и выбрать только не повторяющиеся" // Откуда выбрать?
|
|||
4
Roma1314704
19.05.18
✎
14:36
|
&НаСервере
Функция ПолучитьМассивДанных() МассивДанных = Новый Массив; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Товар.Код КАК Код, | Товар.Наименование КАК Наименование, | Товар.Ссылка, | РегистрЦен.ЦенаПродажиРозетка КАК ЦенаПродажи, | Товар.Бренд КАК Бренд, | Товар.ХарактеристикаXML КАК ОписаниеТовара, | Товар.СсылкаФотоТовара1 Как СсылкаФотоТовара1, | Товар.СсылкаФотоТовара2 Как СсылкаФотоТовара2, | Товар.СсылкаФотоТовара3 Как СсылкаФотоТовара3, | Товар.СсылкаФотоТовара4 Как СсылкаФотоТовара4, | Товар.ТоварXml КАК ТоварXml, | Товар.СсылкаНаСайт Как СсылкаНаСайт, | ЕСТЬNULL(Остатки.КоличествоОстаток,0) КАК ОстатокТовара | | ИЗ | Справочник.Номенклатура КАК Товар | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрНакопления.ОстаткиПоСкладам.Остатки КАК Остатки | ПО (Товар.Ссылка = Остатки.Номенклатура И Остатки.Склад = &Склад) | ЛЕВОЕ СОЕДИНЕНИЕ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК РегистрЦен ПО (Товар.Ссылка = РегистрЦен.Номенклатура) | | ГДЕ | ТоварXml = &Истина"; Запрос.УстановитьПараметр("Истина", Истина); Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию("Основной склад")); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл НоваяЗапись = Новый Структура("Код,Ссылка, Наименование, Бренд, ОписаниеТовара, Характеристика, ЗначениеХарактеристики, ЦенаПродажи, СсылкаНаСайт, Категория, РодительскаяКатегорияКод,РодительскаяКатегория,СсылкаФотоТовара1,СсылкаФотоТовара2, СсылкаФотоТовара3, СсылкаФотоТовара4, ОстатокТовара, Доступность"); НоваяЗапись.Код = Строка(ВыборкаДетальныеЗаписи.Код); НоваяЗапись.Ссылка = ВыборкаДетальныеЗаписи.Ссылка; НоваяЗапись.Наименование = Строка(ВыборкаДетальныеЗаписи.Наименование); НоваяЗапись.ЦенаПродажи = Строка(ВыборкаДетальныеЗаписи.ЦенаПродажи); НоваяЗапись.СсылкаНаСайт = Строка(ВыборкаДетальныеЗаписи.СсылкаНаСайт); Товар = ВыборкаДетальныеЗаписи.Ссылка; РодительВерхнегоУровня = ВернутьРодителя(Товар); КодРодительВерхнегоУровня = ВернутьКодРодителя(Товар); НоваяЗапись.РодительскаяКатегория = Строка(РодительВерхнегоУровня); НоваяЗапись.РодительскаяКатегорияКод = Строка(КодРодительВерхнегоУровня); НоваяЗапись.СсылкаФотоТовара1 = Строка(ВыборкаДетальныеЗаписи.СсылкаФотоТовара1); НоваяЗапись.СсылкаФотоТовара2 = Строка(ВыборкаДетальныеЗаписи.СсылкаФотоТовара2); НоваяЗапись.СсылкаФотоТовара3 = Строка(ВыборкаДетальныеЗаписи.СсылкаФотоТовара3); НоваяЗапись.СсылкаФотоТовара4 = Строка(ВыборкаДетальныеЗаписи.СсылкаФотоТовара4); НоваяЗапись.ОстатокТовара = Строка(ВыборкаДетальныеЗаписи.ОстатокТовара); НоваяЗапись.ОписаниеТовара = Строка(ВыборкаДетальныеЗаписи.ОписаниеТовара); НоваяЗапись.Бренд = Строка(ВыборкаДетальныеЗаписи.Бренд); Если Строка(ВыборкаДетальныеЗаписи.ОстатокТовара > 0) Тогда НоваяЗапись.Доступность = "true"; Иначе НоваяЗапись.Доступность = "false" ; КонецЕсли; МассивДанных.Добавить(НоваяЗапись); КонецЦикла; Возврат МассивДанных; КонецФункции |
|||
5
Roma1314704
19.05.18
✎
14:38
|
Нужно получить с этого массива только уникальные значения РодительскаяКатегория и РодительскаяКатегорияКод
|
|||
6
Cyberhawk
19.05.18
✎
15:23
|
Так у тебя массив структур - преобразовывай его в ТЗ и сворачивай ее
|
|||
7
Roma1314704
19.05.18
✎
17:46
|
ткните пальцем где глянуть как это реализовать
|
|||
8
Aleksey
19.05.18
✎
17:50
|
Процедура УдалитьПовторяющиесяЭлементы(Массив)
ТекущийИндекс = 0; ВсегоЭлементов = Массив.Количество(); Пока ТекущийИндекс < ВсегоЭлементов Цикл Индекс2 = ТекущийИндекс + 1; Пока Индекс2 < ВсегоЭлементов Цикл Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда Массив.Удалить(Индекс2); ВсегоЭлементов = ВсегоЭлементов - 1; Иначе Индекс2 = Индекс2 + 1; КонецЕсли; КонецЦикла; ТекущийИндекс = ТекущийИндекс + 1; КонецЦикла; КонецПроцедуры |
|||
9
Aleksey
19.05.18
✎
17:55
|
(7) а не проще ли еще один запрос сварганить? Или вставить в выборку еще один массив?
|
|||
10
Roma1314704
19.05.18
✎
17:58
|
Вот здесь сам не разберусь -мне нужно выдернуть в xml код и наименование родителькой категории верхнего уровня (уникальные)
|
|||
11
Roma1314704
19.05.18
✎
17:59
|
как их перебрать и проверить на уникальность?
|
|||
12
perester
19.05.18
✎
18:00
|
Сделай из него тз, добавь колонку со значением число 1, сверни тз просуммировав по этой колонке и выбери где колонка равно 1, или запросом также
|
|||
13
perester
19.05.18
✎
18:02
|
Если просто свернуть то получится Так что уйдут только дубли, а не повторяющиеся значения, если я правильно понял, то нужны только те которые без дублей?
|
|||
14
Roma1314704
19.05.18
✎
18:22
|
Да, нужно избавиться от дублей по 2-ум колонкам
|
|||
15
Roma1314704
19.05.18
✎
18:34
|
Подскажите схему как массив в ТЗ преобразовать
|
|||
16
Aleksey
19.05.18
✎
23:48
|
(14) у тебя одна из колонок - ссылка. что ты собирался с ней делать? Она одна делает любое сочитание родителей уникальным
Так что что ты хочешь? |
|||
17
Tateossian
20.05.18
✎
00:02
|
(8) Ужасная процедура - ее стоимость - квадратичная сложность, O(n^2). Куда проще вставлять в новое соответствие ключ, а потом трансформировать в массив - тут будет хотя бы линейная сложность.
|
|||
18
Aleksey
20.05.18
✎
00:12
|
(17) что есть квадратичная сложность?
|
|||
19
Roma1314704
20.05.18
✎
12:34
|
ТЗ.Свернуть(""РодительскаяКатегорияКод")
Получил уникальные записи Как теперь правильно получить Название Родительской категории в соотвествии с кодом ? Не искать же в Справочнике номенклатура по коду категории соотвествующее название ? Нужна подсказка |
|||
20
PiotrLoginov
20.05.18
✎
12:37
|
Рома, тебе 39 лет. Ты в 1С уже 11 лет. Сам ты из страны, где 1С запрещена. Спрашиваешь вещи... азы какие-то.
|
|||
21
PiotrLoginov
20.05.18
✎
12:38
|
Ответ на (0) был в (1) и (2) Если интересует, что дальше делать с уникальными записями, заводи новую ветку.. должен же быть какой-то порядок.
|
|||
22
Roma1314704
20.05.18
✎
12:44
|
ок
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |