Имя: Пароль:
1C
1С v8
Различие по данным в разных таблицах значений
, ,
0 Валидатор
 
12.03.14
11:02
Есть 2 таблицы значений с заполненными данными, нужно сделать, чтобы все позиции, которые в этих таблицах различаются попали в 3 таблицу значений, как так сделать? вот что есть по получению одинаковых позиций из 2х таблиц:
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    тзСинхронизацияЕК.Код КАК Код,
    |    тзСинхронизацияЕК.Артикул КАК Артикул,
    |    тзСинхронизацияЕК.Наименование КАК Наименование,
    |    тзСинхронизацияЕК.УникальныйИдентификатор КАК УникальныйИдентификатор
    |ПОМЕСТИТЬ тзСинхронизацияЕК
    |ИЗ
    |    &тзСинхронизацияЕК КАК тзСинхронизацияЕК
    |;
    |
    | X
    |ВЫБРАТЬ
    |    тзСинхронизацияХД.ИДОбъекта77,
    |    тзСинхронизацияХД.Наименование77,
    |    тзСинхронизацияХД.ЕКГУИД
    |ПОМЕСТИТЬ тзСинхронизацияХД
    |ИЗ
    |    &тзСинхронизацияХД КАК тзСинхронизацияХД
    |;
    |
    | X
    |ВЫБРАТЬ
    |    тзСинхронизацияЕК.Код,
    |    тзСинхронизацияЕК.Артикул,
    |    тзСинхронизацияЕК.Наименование,
    |    тзСинхронизацияЕК.УникальныйИдентификатор,
    |    тзСинхронизацияХД.ИДОбъекта77,
    |    тзСинхронизацияХД.Наименование77,
    |    тзСинхронизацияХД.ЕКГУИД
    |ИЗ
    |    тзСинхронизацияЕК КАК тзСинхронизацияЕК
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ тзСинхронизацияХД КАК тзСинхронизацияХД
    |        ПО тзСинхронизацияЕК.УникальныйИдентификатор = тзСинхронизацияХД.ЕКГУИД";
    
Запрос.УстановитьПараметр("тзСинхронизацияЕК",ТаблицаДляСинхронизаций);
    Запрос.УстановитьПараметр("тзСинхронизацияХД",ТаблицаНоменклатуры);
1 Wobland
 
12.03.14
11:03
полное же. с условием на нулл
2 Валидатор
 
12.03.14
11:04
(1) где именно на 0 условие?
3 vmv
 
12.03.14
11:04
в УПП в общих модулях есть функции по работе с ТЗ как с множествами
4 Валидатор
 
12.03.14
11:05
(1) полное соединение объединит обе таблицы в одну и будет очень много записей, а мне нужны только те, которые не совпадают
5 Wobland
 
12.03.14
11:13
(4) те, у которых тот или другой УИД есть нулл?
6 ShoGUN
 
12.03.14
11:15
(5) +1
7 Валидатор
 
12.03.14
11:15
(5) те, у которых УИД не совпадает
8 ShoGUN
 
12.03.14
11:16
+(6) Главное "= NULL" не написать :)
9 Wobland
 
12.03.14
11:18
(7) ты правда этого хочешь?
10 Валидатор
 
12.03.14
11:18
Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    тзСинхронизацияЕК.Код КАК Код,
                   |    тзСинхронизацияЕК.Артикул КАК Артикул,
                   |    тзСинхронизацияЕК.Наименование КАК Наименование,
                   |    тзСинхронизацияЕК.УникальныйИдентификатор КАК УникальныйИдентификатор
                   |ПОМЕСТИТЬ тзСинхронизацияЕК
                   |ИЗ
                   |    &тзСинхронизацияЕК КАК тзСинхронизацияЕК
                   |ГДЕ
                   |    тзСинхронизацияЕК.УникальныйИдентификатор ЕСТЬ NULL
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    тзСинхронизацияХД.ИДОбъекта77,
                   |    тзСинхронизацияХД.Наименование77,
                   |    тзСинхронизацияХД.ЕКГУИД
                   |ПОМЕСТИТЬ тзСинхронизацияХД
                   |ИЗ
                   |    &тзСинхронизацияХД КАК тзСинхронизацияХД
                   |ГДЕ
                   |    тзСинхронизацияХД.ЕКГУИД ЕСТЬ NULL
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    тзСинхронизацияЕК.Код,
                   |    тзСинхронизацияЕК.Артикул,
                   |    тзСинхронизацияЕК.Наименование,
                   |    тзСинхронизацияЕК.УникальныйИдентификатор,
                   |    тзСинхронизацияХД.ИДОбъекта77,
                   |    тзСинхронизацияХД.Наименование77,
                   |    тзСинхронизацияХД.ЕКГУИД
                   |ИЗ
                   |    тзСинхронизацияЕК КАК тзСинхронизацияЕК
                   |        ПОЛНОЕ СОЕДИНЕНИЕ тзСинхронизацияХД КАК тзСинхронизацияХД
                   |        ПО тзСинхронизацияЕК.УникальныйИдентификатор = тзСинхронизацияХД.ЕКГУИД";
    
    Запрос.УстановитьПараметр("тзСинхронизацияЕК", ТаблицаДляСинхронизаций);
    Запрос.УстановитьПараметр("тзСинхронизацияХД",ТаблицаНоменклатуры);
    ОбщийРезультат = Запрос.Выполнить().Выгрузить()

вот сделал, в итоге пустая ТЗ возвращается
11 ShoGUN
 
12.03.14
11:18
(7)То есть найти те строки, для которых нет строки с таким же УИД в другой таблице? Если да, то всё верно тебе сказали - полное соединение и условие ЕСТЬ NULL на поля УИД.
12 Валидатор
 
12.03.14
11:18
(9) я хочу чтобы номенклатура, которая по УИД не совпадает мне в ТЗ в результате запроса попадала
13 Валидатор
 
12.03.14
11:21
(11) - (10) да, именно так, и сделал но теперь он мне пустую таблицу возвращает, а не таблицу с различиями
14 ShoGUN
 
12.03.14
11:21
(10) >вот сделал, в итоге пустая ТЗ возвращается
Полное соединение возвращает пустую таблицу только если обе исходные таблицы пустые. Что-то ты не договариваешь.
15 Валидатор
 
12.03.14
11:21
(14) в параметры я передаю 2 таблицы, обе из них заполнены
16 Wobland
 
12.03.14
11:23
(15) только сразу же убиваешь у них всё ещё до соединения
17 Валидатор
 
12.03.14
11:24
(16) да, увидел, переделал, результат тот же
    Запрос.Текст = "ВЫБРАТЬ
                   |    тзСинхронизацияЕК.Код КАК Код,
                   |    тзСинхронизацияЕК.Артикул КАК Артикул,
                   |    тзСинхронизацияЕК.Наименование КАК Наименование,
                   |    тзСинхронизацияЕК.УникальныйИдентификатор КАК УникальныйИдентификатор
                   |ПОМЕСТИТЬ тзСинхронизацияЕК
                   |ИЗ
                   |    &тзСинхронизацияЕК КАК тзСинхронизацияЕК
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    тзСинхронизацияХД.ИДОбъекта77,
                   |    тзСинхронизацияХД.Наименование77,
                   |    тзСинхронизацияХД.ЕКГУИД
                   |ПОМЕСТИТЬ тзСинхронизацияХД
                   |ИЗ
                   |    &тзСинхронизацияХД КАК тзСинхронизацияХД
                   |;
                   |
                   |////////////////////////////////////////////////////////////////////////////////
                   |ВЫБРАТЬ
                   |    тзСинхронизацияЕК.Код,
                   |    тзСинхронизацияЕК.Артикул,
                   |    тзСинхронизацияЕК.Наименование,
                   |    тзСинхронизацияЕК.УникальныйИдентификатор,
                   |    тзСинхронизацияХД.ИДОбъекта77,
                   |    тзСинхронизацияХД.Наименование77,
                   |    тзСинхронизацияХД.ЕКГУИД
                   |ИЗ
                   |    тзСинхронизацияЕК КАК тзСинхронизацияЕК
                   |        ПОЛНОЕ СОЕДИНЕНИЕ тзСинхронизацияХД КАК тзСинхронизацияХД
                   |        ПО тзСинхронизацияЕК.УникальныйИдентификатор = тзСинхронизацияХД.ЕКГУИД
                   |ГДЕ
                   |    тзСинхронизацияЕК.УникальныйИдентификатор ЕСТЬ NULL
                   |    И тзСинхронизацияХД.ЕКГУИД ЕСТЬ NULL ";
18 ShoGUN
 
12.03.14
11:25
(16) Тьфу, условия не посмотрел во временных таблицах. Всё так.
(15) ЕСТЬ NULL применять надо ПОСЛЕ полного соединения, а не ДО!
19 ShoGUN
 
12.03.14
11:25
(17) Не И, а ИЛИ :))))
20 ShoGUN
 
12.03.14
11:25
Совсем мозгами не думаем...
21 Валидатор
 
12.03.14
11:26
(20) в итоге все равно получается объединенная ТЗ
22 Wobland
 
12.03.14
11:27
(21) всё верно, совпадающих нет
23 ShoGUN
 
12.03.14
11:28
(21) Которая содержит только несовпадающие строки.
24 Валидатор
 
12.03.14
11:30
ясно, япсасибо
Основная теорема систематики: Новые системы плодят новые проблемы.