Имя: Пароль:
1C
1С v8
Сравнения Массивов
0 Profenixxx
 
04.07.14
18:47
Добрый день!
Подскажите пожалуйста схему следующей отработки
Есть 2 ва Массива в них разные данные, как можно получить объект которого нет в 1ом массиве, например:
1 Массив:
1.Апельсин
2.Мандарин

2Массив:
1.Апельсин
2.Мандарин
3.Яблоко

Т.е. Получить яблоко, я обычно сравниваю только массивы но получаю либо истину либо ложь, но мне необходимо еще получить название не имеющегося элемента массива при исключении.
1 Wobland
 
04.07.14
18:49
таб2 левое таб1 где таб1 есть нулл?
2 Господин ПЖ
 
04.07.14
18:52
(1) + затолкать в запрос
3 Wobland
 
04.07.14
18:56
готов спорить, что массивы для данных автор выбирал сам и бывал немного неправ
4 Profenixxx
 
04.07.14
18:58
Да может. Я использовал Массив для хранения значения 2х баз. Т.е. я беру Запросом значение в одной базе и в Основной, вгоняю их в массив и сравниваю.
Это корректно?
5 Wobland
 
04.07.14
18:59
(4) доставай запросом ТЗ оттуда, загоняй еёв запрос здесь и сравнивай
6 acsent
 
04.07.14
19:00
если они отсортированы, то можно общим проходом сравнить их и вывести различи
7 Profenixxx
 
04.07.14
19:02
ЗначениеВСтрокуВнутр(Массив1Базы) = ЗначениеВСтрокуВнутр(Массив2Базы)

В массивах хранятся наименования этих элементов. Каким общим проходом можно их сравнить?
8 Wobland
 
04.07.14
19:03
(7) не знаешь, как работают циклы?
9 Profenixxx
 
04.07.14
19:03
Циклами туда и загонял наименования с запросом
10 mdocs
 
04.07.14
19:14
Две зависимые базы должны сравниваться по UID, остальное велосипед
11 Wobland
 
04.07.14
19:16
бывает на свете КД... но что там делает автор, мы не в курсе
12 Profenixxx
 
04.07.14
19:21
Пример моего кода
//Подключаюсь к 1ой базе, получаю данные
ЗапросУдаленнаяБаза = ОткрытаяИБ.NewObject("Запрос",

        "ВЫБРАТЬ
        |    Поступление.Номер
        |ИЗ
        |    Документ.Поступление КАК Поступление");

    Результат1 = ЗапросУдаленнаяБаза.Выполнить();

    ВыборкаДетальныеЗаписи1 = Результат1.Выбрать();

    Пока ВыборкаДетальныеЗаписи1.Следующий() Цикл
    //Забрасываю все номера в массив для сравнения
        Массив1Базы.Добавить(ВыборкаДетальныеЗаписи1.Номер);
    КонецЦикла;


/// Делаю еще один запрос в основной базе
Запрос = Новый Запрос;
    Запрос.Текст =


        "ВЫБРАТЬ
        |    Поступление.Номер
        |ИЗ
        |    Документ.Поступление КАК ПоступлениеНМА");

    Результат1 = ЗапросУдаленнаяБаза.Выполнить();

    ВыборкаДетальныеЗаписи = Результат.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    //Заганяю во 2ой массив
        Массив2Базы.Добавить(ВыборкаДетальныеЗаписи.Номер);
    КонецЦикла;



Делаю сравнения

Если ЗначениеВСтрокуВнутр(Массив1Базы) = ЗначениеВСтрокуВнутр(Массив2Базы)
13 Profenixxx
 
04.07.14
19:22
Разборка по номерам массив бессмыслен, либо что то я недогоняю.
14 Wobland
 
04.07.14
19:28
>ЗначениеВСтрокуВнутр(Массив1Базы) = ЗначениеВСтрокуВнутр(Массив2Базы)
ты вот это назвал сравнением? даже не поинтересовавшись, что там у массивов внутри
15 Profenixxx
 
04.07.14
19:34
У массивов Тип строка, с нужными номерами.
16 Эмбеддер
 
04.07.14
19:34
в чем проблема, не пойму
2 цикла последовательно - по 1-му массиву и по 2-му. если элемент из 1-го массива не найден во 2-м массиве (используя Найти), значит он отсутствует в другом массиве
17 Wobland
 
04.07.14
19:36
(16) а массивы обязательно?;)
18 МихаилМ
 
04.07.14
19:44
(0)
выгрузить в тз
далее искать на форуме темы типа "сравнить 2 тз"
19 МихаилМ
 
04.07.14
19:45
(16)
найти - это тот же цикл.

тогда уж отсортировать и без найти.
20 Эмбеддер
 
04.07.14
19:46
(17) массивы уже есть в условии задачи
не нравятся массивы - можно сделать таблицу значений, перенести в нее значения в колонку и сделать 2 колонки "Количество1, Количество2". и свернуть таблицу
ТЗ.Свернуть("Элемент", "Количество1, Количество2")

второй вариант скорей всего медленнее, но я бы воспользовался им
21 Эмбеддер
 
04.07.14
19:48
(19) "найти - это тот же цикл" - зависит от реализации. тогда уж сортировка в таблице, если требуется гарантированно линейная сложность (время)
Закон Брукера: Даже маленькая практика стоит большой теории.