Имя: Пароль:
1C
1С v8
Сравнить 2 ТЗ
,
0 Ruslan_
culeiman
 
01.02.17
17:50
Есть 2 ТЗ, необходимо вытащить только те товары которые есть в ТЗ1, но нет в ТЗ2 :

ТЗ1              ТЗ2
Товар1          Товар1
Товар2

Подскажите примером кода пожалуйста
1 Heckfy
 
01.02.17
17:55
Пример кода лень ваять.
Общий смысл: Запрос, тз во временные таблицы, левое соединение перовой со второй по NULL.
2 Aleksey
 
01.02.17
17:55
В 7-ке, в 8-ке, в екселе?
3 МихаилМ
 
01.02.17
17:55
4 Ruslan_
culeiman
 
01.02.17
17:59
(1) левое соединение перовой со второй по NULL это вот так:
|ПО ВсяНоменклатура.Ссылка = NULL
5 Ёпрст
 
01.02.17
18:03
6 Chameleon1980
 
01.02.17
18:37
(4) с нулл никогда не сравнишь
7 Chameleon1980
 
01.02.17
18:37
+ это ничто
8 Heckfy
 
02.02.17
10:01
(6) (7) - NULL - это что то :) :) :)
(4) Не, не так. Держи для примера запрос, который ищет контрагентов, у которых нет договоров. Свои таблицы в него подставь:


&НаСервере
Процедура СформироватьНаСервере()
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка,
    |    ДоговорыКонтрагентов.Ссылка КАК ВладелецСсылка
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |        ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
    |ГДЕ
    |    ДоговорыКонтрагентов.Ссылка ЕСТЬ NULL "
    ;
    РезультатЗапроса=Запрос.Выполнить().Выбрать();
    Сообщить(""+РезультатЗапроса.Количество());
КонецПроцедуры

&НаКлиенте
Процедура Сформировать(Команда)
    СформироватьНаСервере();
КонецПроцедуры
9 Shved_72
 
02.02.17
10:02
Если на БСП:

ОбщегоНазначения.КоллекцииИдентичны(НовыйНабор,СтарыйНабор)
10 Альбатрос
 
02.02.17
10:14
(9) Это несколько не то.
11 iomoe
 
02.02.17
10:25
Вот так, например:
ВЫБРАТЬ ТЗ1.Товар ИЗ ТЗ1
ГДЕ  НЕ ТЗ1.Товар В (ВЫБРАТЬ ТЗ1.Товар ИЗ ТЗ2)
12 iomoe
 
02.02.17
10:26
Опечатался немного: ВЫБРАТЬ ТЗ1.Товар ИЗ ТЗ1
ГДЕ  НЕ ТЗ1.Товар В (ВЫБРАТЬ ТЗ2.Товар ИЗ ТЗ2)
13 Альбатрос
 
02.02.17
10:27
(12) Соединение получше вложенного вопроса, имхо.
14 iomoe
 
02.02.17
10:29
Или так:
ВЫБРАТЬ ТЗ1.Товар ИЗ ТЗ1
ЛЕВОЕ СОЕДИНЕНИЕ ТЗ1  
ПО ТЗ1.Товар = ТЗ2.Товар
ГДЕ ТЗ2.Товар IS NULL
15 senior
 
02.02.17
10:53
(1) отправлять на сервер БД таблицы, чтобы он сделал то, что можно сделать на сервере 1С? однако
16 1dvd
 
02.02.17
10:57
(6) а "Есть NULL" это не сравнение?
17 Heckfy
 
02.02.17
10:59
(15) Что это сейчас было?!?!?!
18 mkalimulin
 
02.02.17
11:00
(0) Просто собери в одну, а потом сверни.
19 EvgeniuXP
 
02.02.17
11:02
Только хардкод! Тз.НайтиСтроки()
20 mkalimulin
 
02.02.17
11:04
(19) Хардкор - это цикл по второй таблице внутри цикла по первой, школота!
21 Windyhead
 
02.02.17
11:04
(17) Грибы ))
22 mkalimulin
 
02.02.17
11:05
(17) Это было (18)
23 Альбатрос
 
02.02.17
11:08
(18) И что в итоге получится?
24 mkalimulin
 
02.02.17
11:12
(23) В итоге получится таблица, из которой можно выбрать искомое.
25 EvgeniuXP
 
02.02.17
11:14
(20) через найти и будешь два цикла делать, первый - обходить первую тз и находить во второй тз, второй - перебирай найденные :))) только хардкод!
26 mkalimulin
 
02.02.17
11:16
(25) Только хардкод - значит никаких найти(). Только "для" и "если".
27 Альбатрос
 
02.02.17
11:21
(24) из примера (0) у тебя получится первая таблица
28 mkalimulin
 
02.02.17
11:23
(27) Не тупи. Сворачиваешь с суммированием, разумеется.
29 Рэйв
 
02.02.17
11:25
ну если по хардкору то...

//-
мУдалять=Новый Массив;
Для каждого Стр Из Т2 Цикл
    мСтроки=Т!.НайтиСтроки(Новый Структура("Номенклатура",Стр.Номенклатура));
    Для Каждого Эл из мСтроки цикл
        мУдалять.Добавить(Эл);
    Конеццикла;
Конеццикла;

Для Каждого Эл Из мУдалять Цикл
    Т1.Удалить(Эл);
КонецЦикла;
//--

Как то так:=)
30 mkalimulin
 
02.02.17
11:26
(29) Молодец! Теперь сделай без найтистроки()
31 Рэйв
 
02.02.17
11:27
(30)что тут думать.Сравнением:-)
32 Альбатрос
 
02.02.17
11:28
(28) Он не договаривает, а туплю я ))))
33 mkalimulin
 
02.02.17
11:33
(32) Именно так.
34 mkalimulin
 
02.02.17
11:33
(31) Ну напиши. Мы полюбуемся.
35 Рэйв
 
02.02.17
11:39
(34)лень:-)