Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Массив выбрать только уникальные записи

Массив выбрать только уникальные записи
Я
   Roma1314704
 
19.05.18 - 13:54
День добрый. Есть массив значений номенклатуры в т.ч.есть наименование и код родителя товара верхнего уровня. Задача как выбрать только уникальные наименование категорий и код категории? Ведь к примеру из 20 наименований товара уникальными может быть к примеру 4 родительские категории с соотвествующим кодом. Вопрос как перебрать массив и выбрать только не повторяющиеся?
 
 
   b_ru
 
1 - 19.05.18 - 14:08
ТЗ.Свернуть() например.
   b_ru
 
2 - 19.05.18 - 14:10
Хотя если у тебя именно массив номенклатуры, то очевидно

ВЫБРАТЬ РАЗЛИЧНЫЕ
  спр.Родитель.Наименование КАК Наименование,
  спр.Родитель.Код КАК Код
ИЗ
  Справочник.Номенклатура КАК спр
ГДЕ
  спр.Ссылка В (&МойМассив)
   Cyberhawk
 
3 - 19.05.18 - 14:30
(0) "как перебрать массив и выбрать только не повторяющиеся" // Откуда выбрать?
   Roma1314704
 
4 - 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" ;
        КонецЕсли;
        МассивДанных.Добавить(НоваяЗапись);
        
        
    КонецЦикла;
    
    Возврат МассивДанных;
    
КонецФункции
   Roma1314704
 
5 - 19.05.18 - 14:38
Нужно получить с этого массива только уникальные значения РодительскаяКатегория и РодительскаяКатегорияКод
   Cyberhawk
 
6 - 19.05.18 - 15:23
Так у тебя массив структур - преобразовывай его в ТЗ и сворачивай ее
   Roma1314704
 
7 - 19.05.18 - 17:46
ткните пальцем где глянуть как это реализовать
   Aleksey
 
8 - 19.05.18 - 17:50
Процедура УдалитьПовторяющиесяЭлементы(Массив) 

    ТекущийИндекс = 0; 
    ВсегоЭлементов = Массив.Количество(); 
    Пока ТекущийИндекс < ВсегоЭлементов Цикл 
        Индекс2 = ТекущийИндекс + 1; 
        Пока Индекс2 < ВсегоЭлементов Цикл 
            Если Массив[Индекс2] = Массив[ТекущийИндекс] Тогда 
                Массив.Удалить(Индекс2); 
                ВсегоЭлементов = ВсегоЭлементов - 1; 
            Иначе 
                Индекс2 = Индекс2 + 1; 
            КонецЕсли; 
        КонецЦикла; 
        ТекущийИндекс = ТекущийИндекс + 1; 
    КонецЦикла; 

КонецПроцедуры
   Aleksey
 
9 - 19.05.18 - 17:55
(7) а не проще ли еще один запрос сварганить? Или вставить в выборку еще один массив?
   Roma1314704
 
10 - 19.05.18 - 17:58
Вот здесь сам не разберусь  -мне нужно выдернуть в xml код и наименование родителькой категории верхнего уровня (уникальные)
 
 Рекламное место пустует
   Roma1314704
 
11 - 19.05.18 - 17:59
как их перебрать и проверить на уникальность?
   perester
 
12 - 19.05.18 - 18:00
Сделай из него тз, добавь колонку со значением число 1, сверни тз просуммировав по этой колонке и выбери где колонка равно 1, или запросом также
   perester
 
13 - 19.05.18 - 18:02
Если просто свернуть то получится Так что уйдут только дубли, а не повторяющиеся значения, если я правильно понял, то нужны только те которые без дублей?
   Roma1314704
 
14 - 19.05.18 - 18:22
Да, нужно избавиться от дублей по 2-ум колонкам
   Roma1314704
 
15 - 19.05.18 - 18:34
Подскажите схему как массив в ТЗ преобразовать
   Aleksey
 
16 - 19.05.18 - 23:48
(14) у тебя одна из колонок - ссылка. что ты собирался с ней делать? Она одна делает любое сочитание родителей уникальным

Так что что ты хочешь?
   Tateossian
 
17 - 20.05.18 - 00:02
(8) Ужасная процедура - ее стоимость - квадратичная сложность, O(n^2). Куда проще вставлять в новое соответствие ключ, а потом трансформировать в массив - тут будет хотя бы линейная сложность.
   Aleksey
 
18 - 20.05.18 - 00:12
(17) что есть квадратичная сложность?
   Roma1314704
 
19 - 20.05.18 - 12:34
ТЗ.Свернуть(""РодительскаяКатегорияКод")
Получил уникальные записи 

Как теперь правильно получить Название Родительской категории в соотвествии с кодом ? Не искать же в Справочнике номенклатура по коду категории соотвествующее название ?
Нужна  подсказка
   PiotrLoginov
 
20 - 20.05.18 - 12:37
Рома, тебе 39 лет. Ты в 1С уже 11 лет.  Сам ты из страны, где 1С запрещена. Спрашиваешь вещи...  азы какие-то.
   PiotrLoginov
 
21 - 20.05.18 - 12:38
Ответ на (0) был в (1) и (2)  Если интересует, что дальше делать с уникальными записями, заводи новую ветку.. должен же быть какой-то порядок.
   Roma1314704
 
22 - 20.05.18 - 12:44
ок


Список тем форума
Рекламное место пустует  Рекламное место пустует
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует