|
Сравнение двух массивов | ☑ | ||
---|---|---|---|---|
0
Doroheart
12.03.20
✎
11:50
|
Добрый день, как сравнить 2 массива? К примеру есть массив 1 и массив 2, в массиве 2 большое количество номенклатуры которой может не быть в массиве 1, но при этом нужно при сравнении чтобы в таблице для массива 1 ставилась галочка выбран если вдруг позиции совпадают.
|
|||
1
pechkin
12.03.20
✎
11:53
|
ОбщегоНазначения.СравнитьМассивы()
|
|||
2
Asmody
12.03.20
✎
11:55
|
[в таблице для массива] - у массивов нет таблиц
|
|||
3
pechkin
12.03.20
✎
11:56
|
как я понял задача такая: для таблицы проставить галочки напротив тех номенклатур, что есть в массиве 2
|
|||
4
Garykom
гуру
12.03.20
✎
11:58
|
В 77 у СЗ были "галочки"
|
|||
5
Doroheart
12.03.20
✎
11:58
|
(3) да, есть номенклатура которая выпадает в таблицу и ее надо сравнить с регистром скидок номенклатуры. Т.е. Если скидка есть, то выбран истина. (2) Таблица есть, но данные из нее я планировал грузануть в массив чтобы сверить с регистром.
|
|||
6
Garykom
гуру
12.03.20
✎
12:02
|
А потом удивляются почему боинги 777 макс падают...
|
|||
7
Garykom
гуру
12.03.20
✎
12:04
|
(6) *737 MAX
|
|||
8
PR
12.03.20
✎
12:04
|
Сделать ТЗ с колонками "Номенклатура" и "Количество"
Весь массив 1 добавить с -1 в количестве Весь массив 2 добавить с 1 в количестве Свернуть ТЗ по номенклатуре и сумме по количеству Там, где остаток -1 - есть только в первом массиве, 0 - в обоих, 1 - только во втором Но есть более простые способы, конечно же Например, пробежаться по массиву 1 и если позиция найдена в массиве 2, то ставить галочку |
|||
9
VladZ
12.03.20
✎
12:07
|
(0) Через запрос. Первая часть запроса - условие по вхождению в массив1. Вторая часть - по вхождению в массив2.
Я бы начал с другого: откуда взялись эти массивы? Что послужило источником? Возможно, стоит "сдвинуть" алгоритм проверки в тот кусок кода, в котором эти массивы "образовались". |
|||
10
Жан Пердежон
12.03.20
✎
12:09
|
(1) в массиве таблиц очень даже есть
|
|||
11
singlych
12.03.20
✎
12:23
|
(1) не та функция
ОбщегоНазначенияКлиентСервер.РазностьМассивов(Массив, МассивВычитания) // Вычисляет разность массивов. Разность ю массивов А и В является массив, содержащий // все элементы массива А, не существующие в массиве В. // // Параметры: // Массив - Массив - массив элементов, из которого необходимо выполнить вычитание; // МассивВычитания - Массив - массив элементов, который будет вычитаться. // // Возвращаемое значение: // Массив - дополнение массива В до А. // // Пример: // //А = [1, 3, 5, 7]; // //В = [3, 7, 9]; // Результат = РазностьМассивов(А, В); // //Результат = [1, 5]; // |
|||
12
pechkin
12.03.20
✎
12:27
|
лечше конечно прям в запросе делать левое соединение
|
|||
13
Doroheart
12.03.20
✎
13:43
|
(9) Первый образно говоря массив появился так, второй это просто регистр в котором находятся скидки на позиции номенклатуры
Процедура КоманднаяПанельНоменклатурСписокИзмененийЦен(Кнопка) ФормаВыбораПодразделения=Справочники.ПодразделенияКомпании.ПолучитьФормуВыбора(); ФормаВыбораПодразделения.МножественныйВыбор=Ложь; ФормаВыбораПодразделения.РежимВыбора=Истина; ФормаВыбораПодразделения.ЗакрыватьПриВыборе=Истина; Подразделение=ФормаВыбораПодразделения.ОткрытьМодально(); Если Подразделение=Неопределено ИЛИ Подразделение = Справочники.ПодразделенияКомпании.ПустаяСсылка() Тогда Подразделение = ПараметрыСеанса.ПодразделениеКомпании; ТипЦен = Подразделение.ТипЦенРеализации; Товары.Очистить(); Возврат; КонецЕсли; Если ТипЦен<>Подразделение.ТипЦенРеализации Тогда ТипЦен = Подразделение.ТипЦенРеализации; КонецЕсли; Организация = Подразделение.Организация; Товары.Очистить(); ЭтаФорма.Заголовок = "Печать этикеток и ценников. Текущее подразделение скидок "+Подразделение; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ИСТИНА КАК Выбран, | ЦеныСрезПоследних.Номенклатура КАК Номенклатура, | ЦеныСрезПоследних.Номенклатура.ОсновнаяЕдиницаИзмерения КАК ЕдиницаИзмерения, | ЦеныСрезПоследних.Номенклатура.ОсновнаяЕдиницаИзмерения.Коэффициент КАК Коэффициент, | 1 КАК Количество, | 0 КАК Поле1, | 0 КАК Поле2, | 0 КАК Поле3, | 0 КАК Поле4, | ЦеныСрезПоследних.Цена КАК Цена, | ЕСТЬNULL(ЗначенияСвойствТоварныхКатегорий.Значение, ЛОЖЬ) КАК БЗМЖ |ПОМЕСТИТЬ ВТ_Товары |ИЗ | РегистрСведений.Цены.СрезПоследних( | &КонецПериода, | ТипЦен.Продажа | И ТипЦен = &ТипЦен) КАК ЦеныСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствТоварныхКатегорий КАК ЗначенияСвойствТоварныхКатегорий | ПО ЦеныСрезПоследних.Номенклатура = ЗначенияСвойствТоварныхКатегорий.Номенклатура | И (ЗначенияСвойствТоварныхКатегорий.Свойство = &Свойство) | И (ЗначенияСвойствТоварныхКатегорий.Значение = ИСТИНА) |ГДЕ | ЦеныСрезПоследних.Цена <> ЦеныСрезПоследних.ЦенаСтарая | И ЦеныСрезПоследних.Период МЕЖДУ &НачалоПериода И &КонецПериода | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | ВложенныйЗапрос.Выбран, | ВложенныйЗапрос.Номенклатура, | ВложенныйЗапрос.ЕдиницаИзмерения, | ВложенныйЗапрос.Коэффициент, | ВложенныйЗапрос.Количество, | 0, | 0, | 0, | 0, | ЦеныСрезПоследних.Цена, | ЕСТЬNULL(ЗначенияСвойствТоварныхКатегорий.Значение, ЛОЖЬ) |ИЗ | (ВЫБРАТЬ | ИСТИНА КАК Выбран, | Скидки.Объект КАК Номенклатура, | Скидки.Объект.ОсновнаяЕдиницаИзмерения КАК ЕдиницаИзмерения, | Скидки.Объект.ОсновнаяЕдиницаИзмерения.Коэффициент КАК Коэффициент, | 1 КАК Количество | ИЗ | РегистрСведений.Скидки КАК Скидки | ГДЕ | Скидки.Период МЕЖДУ &НачалоПериодаСкидки И &КонецПериода | И НЕ Скидки.Действует | И Скидки.Подразделение = &Подразделение | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | ИСТИНА, | Скидки.Объект, | Скидки.Объект.ОсновнаяЕдиницаИзмерения, | Скидки.Объект.ОсновнаяЕдиницаИзмерения.Коэффициент, | 1 | ИЗ | РегистрСведений.Скидки КАК Скидки | ГДЕ | Скидки.Действует | И Скидки.КонецДействия МЕЖДУ &НачалоПериодаСкидки И &КонецПериода | И Скидки.Подразделение = &Подразделение) КАК ВложенныйЗапрос | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&КонецПериода, ТипЦен = &ТипЦен) КАК ЦеныСрезПоследних | ПО ВложенныйЗапрос.Номенклатура = ЦеныСрезПоследних.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствТоварныхКатегорий КАК ЗначенияСвойствТоварныхКатегорий | ПО ВложенныйЗапрос.Номенклатура = ЗначенияСвойствТоварныхКатегорий.Номенклатура | И (ЗначенияСвойствТоварныхКатегорий.Свойство = &Свойство) | И (ЗначенияСвойствТоварныхКатегорий.Значение = ИСТИНА) | |ОБЪЕДИНИТЬ | |ВЫБРАТЬ РАЗЛИЧНЫЕ | ИСТИНА, | ОстаткиТоваровКомпанииОстаткиИОбороты.Номенклатура, | ОстаткиТоваровКомпанииОстаткиИОбороты.Номенклатура.ОсновнаяЕдиницаИзмерения, | ОстаткиТоваровКомпанииОстаткиИОбороты.Номенклатура.ОсновнаяЕдиницаИзмерения.Коэффициент, | 1, | ВЫБОР | КОГДА ОстаткиТоваровКомпанииОстаткиИОбороты.КоличествоНачальныйОстаток <> 0 | ТОГДА 0 | ИНАЧЕ 0 | КОНЕЦ, | ВЫБОР | КОГДА ОстаткиТоваровКомпанииОстаткиИОбороты.КоличествоПриход <> 0 | ТОГДА 0 | ИНАЧЕ 0 | КОНЕЦ, | ВЫБОР | КОГДА ОстаткиТоваровКомпанииОстаткиИОбороты.КоличествоРасход <> 0 | ТОГДА 0 | ИНАЧЕ 0 | КОНЕЦ, | ВЫБОР | КОГДА ОстаткиТоваровКомпанииОстаткиИОбороты.КоличествоКонечныйОстаток <> 0 | ТОГДА 0 | ИНАЧЕ 0 | КОНЕЦ, | ЦеныСрезПоследних.Цена, | ЕСТЬNULL(ЗначенияСвойствТоварныхКатегорий.Значение, ЛОЖЬ) |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.ОстаткиИОбороты( | &НачалоПериода, | &КонецПериода, | , | , | СкладКомпании.Розничный | И (Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар) | ИЛИ Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Комплект)) | И СкладКомпании.Подразделение = &Подразделение) КАК ОстаткиТоваровКомпанииОстаткиИОбороты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&КонецПериода, ТипЦен = &ТипЦен) КАК ЦеныСрезПоследних | ПО ОстаткиТоваровКомпанииОстаткиИОбороты.Номенклатура = ЦеныСрезПоследних.Номенклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствТоварныхКатегорий КАК ЗначенияСвойствТоварныхКатегорий | ПО ОстаткиТоваровКомпанииОстаткиИОбороты.Номенклатура = ЗначенияСвойствТоварныхКатегорий.Номенклатура | И (ЗначенияСвойствТоварныхКатегорий.Свойство = &Свойство) | И (ЗначенияСвойствТоварныхКатегорий.Значение = ИСТИНА) |ГДЕ | ОстаткиТоваровКомпанииОстаткиИОбороты.КоличествоНачальныйОстаток = 0 |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВЫБОР | КОГДА ЕСТЬNULL(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток, 0) > 0 | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Выбран, | ВТ_Товары.Номенклатура, | ВТ_Товары.ЕдиницаИзмерения, | ВТ_Товары.Коэффициент, | ВТ_Товары.Количество, | ВТ_Товары.Цена, | ВТ_Товары.БЗМЖ |ИЗ | ВТ_Товары КАК ВТ_Товары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваровКомпании.Остатки( | &КонецПериода, | СкладКомпании.Подразделение = &Подразделение | И СкладКомпании.Розничный | И (Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар) | ИЛИ Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Комплект))) КАК ОстаткиТоваровКомпанииОстатки | ПО ВТ_Товары.Номенклатура = ОстаткиТоваровКомпанииОстатки.Номенклатура | |УПОРЯДОЧИТЬ ПО | ВТ_Товары.Номенклатура |АВТОУПОРЯДОЧИВАНИЕ |; | |//////////////////////////////////////////////////////////////////////////////// |УНИЧТОЖИТЬ ВТ_Товары"; Если ДеньНедели(ТекущаяДата())=1 Тогда НачалоПериода = НачалоДня(ТекущаяДата())-2*86400; НачалоПериодаСкидки = НачалоДня(ТекущаяДата())-2*86400-1; Иначе НачалоПериода = НачалоДня(ТекущаяДата()); НачалоПериодаСкидки = НачалоДня(ТекущаяДата())-1; КонецЕсли; Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода); //Дата Запрос.УстановитьПараметр("НачалоПериодаСкидки", НачалоПериодаСкидки); //Дата Запрос.УстановитьПараметр("КонецПериода", ТекущаяДата()); //Дата Запрос.УстановитьПараметр("Подразделение", Подразделение); //Подразделения компании Запрос.УстановитьПараметр("ТипЦен", ТипЦен); //Типы цен Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Продукт без заменителя молочного жира")); РезультатЗапроса = Запрос.Выполнить(); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если НЕ Выборка.Выбран Тогда Продолжить; КонецЕсли; ОбработкаПрерыванияПользователя(); НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура=Выборка.Номенклатура; НоваяСтрока.ЕдиницаИзмерения=Выборка.ЕдиницаИзмерения; НоваяСтрока.Количество=Выборка.Количество; НоваяСтрока.Вес=1; НоваяСтрока.Коэффициент=Выборка.Коэффициент; // проверим наличие спеццены Результат = ЗапросСкидок(Выборка.Номенклатура, Справочники.ТипыСкидок.СпециальнаяЦена); Если Результат.Количество()=0 Тогда Результат = ЗапросСкидок(Выборка.Номенклатура, Справочники.ТипыСкидок.СкидкаНаТовар); КонецЕсли; Если Результат.Следующий() Тогда НоваяСтрока.Цена = Результат.ЗначениеСкидки; Иначе НоваяСтрока.Цена = Выборка.Цена; КонецЕсли; НоваяСтрока.Выбран = Выборка.Выбран; Если Выборка.БЗМЖ Тогда НоваяСтрока.БЗМЖ = Истина КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
14
Garykom
гуру
12.03.20
✎
13:54
|
(13) А потом удивляемся чего оно так тормозит
|
|||
15
Doroheart
12.03.20
✎
14:31
|
(14) И не говори)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |