Имя: Пароль:
1C
1С v8
Сравнение ТЗ
,
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
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
       |    И ВложенныйЗапрос.Совпадения = &КоличествоЭлементов");
       
   Запрос.УстановитьПараметр("Объект", Источник.Ссылка);    
   Запрос.УстановитьПараметр("МассивДоступов", Массив);    
   Запрос.УстановитьПараметр("КоличествоЭлементов", Массив.Количество());    
   
   Если Запрос.Выполнить().Пустой() Тогда
       Источник.ДополнительныеСвойства.Вставить("ОбновитьДоступ", Истина);        
       Источник.ДополнительныеСвойства.Вставить("МассивХешей", Массив);
   КонецЕсли;
Основная теорема систематики: Новые системы плодят новые проблемы.