|
Сравнение ТЗ | ☑ | ||
---|---|---|---|---|
0
TwoWorld
31.10.11
✎
13:23
|
Подскажите как оптимизировать! Есть 2 ТЗ, с одинаковой колонкой "Ссылка", как мне определить, каких ссылок нет во 2 ТЗ?
|
|||
1
TwoWorld
31.10.11
✎
13:23
|
(0) кроме как перебора 1 тз и поска ссылки во 2 Тз
|
|||
2
Maxus43
31.10.11
✎
13:26
|
чем не нравится перебор? можно и запросом конечно
|
|||
3
DrShad
31.10.11
✎
13:26
|
запрос?
|
|||
4
Поручик
31.10.11
✎
13:26
|
(0) Пакетным запросом.
|
|||
5
TwoWorld
31.10.11
✎
13:28
|
Запрос1 = Новый Запрос;
Запрос1.Текст = "ВЫБРАТЬ | ПоследовательностьДокументов.Регистратор, | ПоследовательностьДокументов.Период |ИЗ | Последовательность.ОбщаяПоследовательность КАК ПоследовательностьДокументов |ГДЕ | ПоследовательностьДокументов.Период МЕЖДУ &ПериодНач И &ПериодКон"; Запрос1.УстановитьПараметр("ПериодНач", НачалоДня(НачПериода)); Запрос1.УстановитьПараметр("ПериодКон", КонецДня(КонПериода)); РезультатЗапроса = Новый ТаблицаЗначений; РезультатЗапроса = Запрос1.Выполнить().Выгрузить(); // ЗАпрос по партионному учету Запрос2 = Новый Запрос; Запрос2.УстановитьПараметр("ПериодНач", НачалоДня(НачПериода)); Запрос2.УстановитьПараметр("ПериодКон", КонецДня(КонПериода)); Запрос2.Текст = "ВЫБРАТЬ | ПартионныйУчет.Регистратор, | ПартионныйУчет.Период |ИЗ | Последовательность.ПартионныйУчет КАК ПартионныйУчет |ГДЕ | ПартионныйУчет.Период МЕЖДУ &ПериодНач И &ПериодКон"; РезультатЗапроса2 = Новый ТаблицаЗначений; РезультатЗапроса2 = Запрос2.Выполнить().Выгрузить(); Для каждого ТС из РезультатЗапроса Цикл СтрокаПоиска = РезультатЗапроса2.Найти(ТС.Регистратор,"Регистратор"); если СтрокаПоиска = Неопределено Тогда Сообщить(ТС.Ссылка); Иначе Продолжить; КонецЕсли; КонецЦикла; |
|||
6
Alexandr Puzakov
31.10.11
✎
13:28
|
Можно обои выгрузить в массив, затем перебирая один искать во втором, найдя удалять элементы во втором.
|
|||
7
DrShad
31.10.11
✎
13:30
|
(5) что это и для чего?
|
|||
8
TwoWorld
31.10.11
✎
13:31
|
сравнение документов попавших в последовательность
|
|||
9
DrShad
31.10.11
✎
13:32
|
(8) есть сомнения что не все попадают?
|
|||
10
DrShad
31.10.11
✎
13:33
|
(8) сразу запросом нельзя получить что хочешь? зачем выгрухать в ТЗ?
|
|||
11
Alexandr Puzakov
31.10.11
✎
13:33
|
+(6) итераций получится значительно меньше, чем при поиске в ТЗ.
|
|||
12
Starhan
31.10.11
✎
13:34
|
Соеденяй запросы в 1, связ по регистратору. И условие где таблица2.Регистратор Есть NULL
|
|||
13
Starhan
31.10.11
✎
13:35
|
в зависсимости от того что ищешь полное или левое соединение.
|
|||
14
TwoWorld
31.10.11
✎
13:44
|
Запрос1.Текст = "ВЫБРАТЬ
| ПоследовательностьДокументов.Регистратор, | ПоследовательностьДокументов.Период, | ВложенныйЗапрос.Регистратор КАК Регистратор1 |ИЗ | Последовательность.ОбщаяПоследовательность КАК ПоследовательностьДокументов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ПартионныйУчет.Регистратор КАК Регистратор, | ПартионныйУчет.Период КАК Период | ИЗ | Последовательность.ПартионныйУчет КАК ПартионныйУчет | ГДЕ | ПартионныйУчет.Период МЕЖДУ &Период И &Период) КАК ВложенныйЗапрос | ПО ПоследовательностьДокументов.Регистратор = ВложенныйЗапрос.Регистратор |ГДЕ | ПоследовательностьДокументов.Период МЕЖДУ &ПериодНач И &ПериодКон | И ВложенныйЗапрос.Регистратор ЕСТЬ NULL "; Запрос1.УстановитьПараметр("ПериодНач", НачалоДня(НачПериода)); Запрос1.УстановитьПараметр("ПериодКон", КонецДня(КонПериода)); РезультатЗапроса2 = Запрос1.Выполнить().Выбрать(); Пока РезультатЗапроса2.Следующий() Цикл Сообщить(РезультатЗапроса2.Регистратор1); КонецЦикла; |
|||
15
Ненавижу 1С
гуру
31.10.11
✎
13:46
|
(14)
1. соединение левое 2. не нужен тут подзапрос |
|||
16
vde69
31.10.11
✎
13:51
|
лучше запросом, но можно и так Книга знаний: v8: Алгоритм синхронизации (сравнения) двух таблиц (по текстовому полю)
|
|||
17
TwoWorld
31.10.11
✎
13:51
|
не понял?
|
|||
18
Starhan
31.10.11
✎
13:51
|
(14) Если разово проверяешь. Используй консоль запросов.
|
|||
19
TwoWorld
31.10.11
✎
13:54
|
(15) почему подзапрос не нужен, а как иначе?
|
|||
20
TwoWorld
31.10.11
✎
13:57
|
(14) тож взлетит без труда
|
|||
21
Byasha
31.10.11
✎
14:04
|
Менеджер временных таблиц предлагали?
|
|||
22
Поручик
31.10.11
✎
14:10
|
(21) Это для лошар, пакетные запросы рулят.
|
|||
23
mishgan75
31.10.11
✎
14:11
|
А не проще "построителем отчетов" воспользоваться?
Создаешь построитель отчетов. -В качестве источника данных подсовываешь ему первую таблицу. -Добавляешь отбор по колонке "Ссылка". ВидСравнения = неВСписке -В качестве значения Отбора выгрузка списокЗначений из Ссылок Второй таблицы. - Выполнить. В Результате получишь искомую таблицу |
|||
24
МихаилМ
31.10.11
✎
14:27
|
в каждую тз
удалить повторы те свернуть добавить числовое поле в ТЗ1 заполнить 1 в ТЗ2 заполнить 2 выгрузить в тз3 свернуть с суммой по числовому полю где в поле = 3 совпадения где 1 - есть в тз1 но нет в тз2 где 2 - есть в тз2 но нет в тз1 |
|||
25
Kashemir
31.10.11
✎
14:41
|
ВЫБРАТЬ
ТЗ1.СсылкаТЗ1 КАК СсылкаТЗ1 ПОМЕСТИТЬ ТЗ1 ИЗ &ТЗ1 КАК ТЗ1 ИНДЕКСИРОВАТЬ ПО СсылкаТЗ1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ2.СсылкаТЗ2 ПОМЕСТИТЬ ТЗ2 ИЗ &ТЗ2 КАК ТЗ2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТЗ2.СсылкаТЗ2 ИЗ ТЗ2 КАК ТЗ2 ГДЕ (НЕ ТЗ2.СсылкаТЗ2 В (ВЫБРАТЬ ТЗ1.СсылкаТЗ1 ИЗ ТЗ1 КАК ТЗ1)) |
|||
26
vde69
31.10.11
✎
15:32
|
еще вариант без создания временных таблиц
// В Массиве - полный список всех элементов ролевой адресации, теперь его нужно сравнить с установлеными значениями Запрос = Новый Запрос( "ВЫБРАТЬ | 1 КАК Поле1 |ИЗ | (ВЫБРАТЬ | СУММА(ВЫБОР | КОГДА ВложенныйЗапрос.Доступ В (&МассивДоступов) | ТОГДА 1 | ИНАЧЕ 0 | КОНЕЦ) КАК Совпадения, | СУММА(ВЫБОР | КОГДА ВложенныйЗапрос.Доступ В (&МассивДоступов) | ТОГДА 0 | ИНАЧЕ 1 | КОНЕЦ) КАК Различия | ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | РолевойДоступОбъектов.Доступ КАК Доступ | ИЗ | РегистрСведений.РолевойДоступОбъектов КАК РолевойДоступОбъектов | ГДЕ | РолевойДоступОбъектов.Объект = &Объект) КАК ВложенныйЗапрос) КАК ВложенныйЗапрос |ГДЕ | ВложенныйЗапрос.Различия = 0 | И ВложенныйЗапрос.Совпадения = &КоличествоЭлементов"); Запрос.УстановитьПараметр("Объект", Источник.Ссылка); Запрос.УстановитьПараметр("МассивДоступов", Массив); Запрос.УстановитьПараметр("КоличествоЭлементов", Массив.Количество()); Если Запрос.Выполнить().Пустой() Тогда Источник.ДополнительныеСвойства.Вставить("ОбновитьДоступ", Истина); Источник.ДополнительныеСвойства.Вставить("МассивХешей", Массив); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |