Имя: Пароль:
1C
1С v8
ТабельУчетаРабочегоВремениОрганизации RLS ошибка SQL 256 таблиц
0 skaparez
 
02.10.12
11:12
Может кому нибудь пригодится, если есть RLS и при проведении ругается на extremely complex queries - это ограничение 256 таблиц, за месяц там собирается 144 таблицы + RLS = решение создать таблички поменьше, а потом их объединить, код тута:
2.5.54.1 - 2.5.56.1
использую внешний модуль...

Процедура Документы_ТабельУчетаРабочегоВремениОрганизации_Модуль_СформироватьЗапросДляРегистраРасчета(Запрос, ДатаНачалаПериода, ДатаОкончанияПериода) Экспорт
   
   Делитель = 7;
   ФлЭтоНачалоЗапроса = Истина;
   Итератор = 0;
   Счетчик = 0;
   ФлЭтоПервыйВывод = Истина;
   
   Для ИндексДня =  День(ДатаНачалаПериода) ПО День(ДатаОкончанияПериода) Цикл
       СтрИндексДня = Строка(ИндексДня);
       
       Если Счетчик % Делитель = 0 Тогда
           
           ФлЭтоНачалоЗапроса = Истина;
           Итератор = Итератор + 1;
           
           Если НЕ ФлЭтоПервыйВывод Тогда
               
               Запрос.Текст = Запрос.Текст +
               "    ИНДЕКСИРОВАТЬ ПО
                   |    Сотрудник, ДеньМесяца, ВидВремени ;
                   |    ";
                   
               Запрос.Выполнить();
           Иначе
               ФлЭтоПервыйВывод = Ложь;
           КонецЕсли;
           
       Иначе
           ФлЭтоНачалоЗапроса = Ложь;
       КонецЕсли;
       
       Счетчик = Счетчик + 1;
       
       Если ФлЭтоНачалоЗапроса Тогда
           
           Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник КАК Сотрудник,
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйВидВремени"+СтрИндексДня+" КАК ВидВремени,
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйЧасов"+СтрИндексДня+" КАК Часов,
       |    "+СтрИндексДня+" КАК ДеньМесяца
       |ПОМЕСТИТЬ ВТВсеДниТабеля" + Итератор + "
       |ИЗ
       |    Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |ГДЕ
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |    И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |
       |    ОБЪЕДИНИТЬ ВСЕ
       |
       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВторойВидВремени"+СтрИндексДня+",
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВторойЧасов"+СтрИндексДня+",
       |        "+СтрИндексДня+"
       |    ИЗ
       |        Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |    ГДЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |        И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВторойВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |    
       |    ОБЪЕДИНИТЬ ВСЕ
       |    
       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ТретийВидВремени"+СтрИндексДня+",
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ТретийЧасов"+СтрИндексДня+",
       |        "+СтрИндексДня+"
       |    ИЗ
       |        Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |    ГДЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |        И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ТретийВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |    
       |    ОБЪЕДИНИТЬ ВСЕ
       |    
       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ЧетвертыйВидВремени"+СтрИндексДня+",
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ЧетвертыйЧасов"+СтрИндексДня+",
       |        "+СтрИндексДня+"
       |    ИЗ
       |        Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |    ГДЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |        И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ЧетвертыйВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |    ";
       Иначе
           Запрос.Текст = Запрос.Текст + "    ОБЪЕДИНИТЬ ВСЕ
       |ВЫБРАТЬ РАЗЛИЧНЫЕ
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник КАК Сотрудник,
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйВидВремени"+СтрИндексДня+" КАК ВидВремени,
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйЧасов"+СтрИндексДня+" КАК Часов,
       |    "+СтрИндексДня+" КАК ДеньМесяца
       |ИЗ
       |    Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |ГДЕ
       |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |    И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ПервыйВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |
       |    ОБЪЕДИНИТЬ ВСЕ
       |
       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВторойВидВремени"+СтрИндексДня+",
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВторойЧасов"+СтрИндексДня+",
       |        "+СтрИндексДня+"
       |    ИЗ
       |        Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |    ГДЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |        И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВторойВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |    
       |    ОБЪЕДИНИТЬ ВСЕ
       |    
       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ТретийВидВремени"+СтрИндексДня+",
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ТретийЧасов"+СтрИндексДня+",
       |        "+СтрИндексДня+"
       |    ИЗ
       |        Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |    ГДЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |        И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ТретийВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |    
       |    ОБЪЕДИНИТЬ ВСЕ
       |    
       |    ВЫБРАТЬ РАЗЛИЧНЫЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ЧетвертыйВидВремени"+СтрИндексДня+",
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ЧетвертыйЧасов"+СтрИндексДня+",
       |        "+СтрИндексДня+"
       |    ИЗ
       |        Документ.ТабельУчетаРабочегоВремениОрганизации.ОтработанноеВремя КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
       |    ГДЕ
       |        ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Ссылка = &ДокументСсылка
       |        И ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ЧетвертыйВидВремени"+СтрИндексДня+" <> ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ПустаяСсылка)
       |    ";
       
       КонецЕсли;
   
   КонецЦикла;
   
   Запрос.Текст = Запрос.Текст +
   "    ИНДЕКСИРОВАТЬ ПО
       |    Сотрудник, ДеньМесяца, ВидВремени ;
       |    ";
   
   Запрос.Выполнить();
   
   ФлЭтоНачалоЗапроса = Истина;
   Итератор = 0;
   Счетчик = 0;
   
   Для ИндексДня =  День(ДатаНачалаПериода) ПО День(ДатаОкончанияПериода) Цикл
       СтрИндексДня = Строка(ИндексДня);
       
       Если Счетчик % Делитель = 0 Тогда
           Итератор = Итератор + 1;
           
           Если ФлЭтоНачалоЗапроса Тогда
               
               Запрос.Текст = "ВЫБРАТЬ
           |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник КАК Сотрудник,
           |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВидВремени КАК ВидВремени,
           |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Часов КАК Часов,
           |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ДеньМесяца КАК ДеньМесяца
           |ПОМЕСТИТЬ ВТВсеДниТабеля
           |ИЗ    ВТВсеДниТабеля" + Итератор + " КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
           |
           |";
           
           Иначе
               
               Запрос.Текст = Запрос.Текст + "    ОБЪЕДИНИТЬ ВСЕ
               |ВЫБРАТЬ
               |ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Сотрудник,
               |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ВидВремени,
               |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.Часов,
               |    ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя.ДеньМесяца
               |ИЗ    ВТВсеДниТабеля" + Итератор + " КАК ТабельУчетаРабочегоВремениОрганизацииОтработанноеВремя
               |";
               
           КонецЕсли;
   
           Если ФлЭтоНачалоЗапроса Тогда
               ФлЭтоНачалоЗапроса = Ложь;
           КонецЕсли;
           
       КонецЕсли;
       
       Счетчик = Счетчик + 1;
   
   КонецЦикла;
   
   Запрос.Текст = Запрос.Текст +
       "    ИНДЕКСИРОВАТЬ ПО
           |    Сотрудник, ДеньМесяца, ВидВремени ;
           |    ";
   
   Запрос.Текст = Запрос.Текст +
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    ВсеДниТабеля.Сотрудник,
   |    ВсеДниТабеля.ДеньМесяца,
   |    ВсеДниТабеля.ВидВремени,
   |    СУММА(ВсеДниТабеля.Часов) КАК Часов
   |    ПОМЕСТИТЬ ВТСуммированныеВсеДниТабеля
   |ИЗ ВТВсеДниТабеля КАК ВсеДниТабеля
   |    СГРУППИРОВАТЬ ПО
   |    Сотрудник, ДеньМесяца, ВидВремени;
   |    ";
   
   Запрос.Текст = Запрос.Текст    +
   "ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    ВсеДниТабеля.Сотрудник,
   |    ВсеДниТабеля.ДеньМесяца,
   |    ВсеДниТабеля.ВидВремени,
   |    ВсеДниТабеля.Часов
   |ПОМЕСТИТЬ ВТПропущенныеДни    
   |    
   |ИЗ ВТСуммированныеВсеДниТабеля КАК ВсеДниТабеля
   |    ЛЕВОЕ СОЕДИНЕНИЕ ВТСуммированныеВсеДниТабеля КАК ФильтрацияЦелодневныхНеявок
   |ПО ФильтрацияЦелодневныхНеявок.Сотрудник = ВсеДниТабеля.Сотрудник
   |    И ФильтрацияЦелодневныхНеявок.ДеньМесяца = ВсеДниТабеля.ДеньМесяца
   |    И ФильтрацияЦелодневныхНеявок.ВидВремени <> ВсеДниТабеля.ВидВремени
   |ГДЕ ФильтрацияЦелодневныхНеявок.Сотрудник ЕСТЬ NULL
   |    И ВсеДниТабеля.ВидВремени В(ВЫБРАТЬ ВТСписокПропусков.Ссылка ИЗ ВТСписокПропусков)
   |ИНДЕКСИРОВАТЬ ПО
   |    ВсеДниТабеля.Сотрудник,
   |    ВсеДниТабеля.ДеньМесяца,
   |    ВсеДниТабеля.ВидВремени";
   
КонецПроцедуры
1 skaparez
 
02.10.12
11:14
перед выполнением - перезапись текста запроса в строке 3588 в модуле табеля
2 skaparez
 
02.10.12
11:15
тест тега код
3 Defender aka LINN
 
02.10.12
11:15
А еще можно сменить СУБД
4 skaparez
 
02.10.12
11:53
(3) на какую - стоит SQL 2k8
5 kolanych
 
02.10.12
11:58
в 2012 вроде как неограничено