• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Интересный запрос

  • Автор темы SeverBap
  • Дата начала
S

SeverBap

Есть функция
Код:
//************************************************************************
Функция ПолучитьСводныйОстатокЗаДень(ГодОтбораДанных,МесяцОтбораДанных,ТипОтбораДанных,ЧислоДняОтбора,Измерение)
Перем ЗначениеВозврата, Запрос, ТекстЗапроса;
Если ТипОтбораДанных="ИРВСоставеППП" Тогда
ЗначениеВозврата=Регистр.НакоплениеВремени.СводныйОстаток(ГодОтбораДанных,МесяцОтбораДанных,,ЧислоДняОтбора,,Измерение);	
Иначе
ПодразделениеОтбора="";
Если ТипОтбораДанных="ИРВППП" Тогда
ПодразделениеОтбора=Перечисление.ТипПодразделения.Промышленное;
Иначе
ПодразделениеОтбора=Перечисление.ТипПодразделения.НеПромышленное;
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)
|ГодОтбора=Регистр.НакоплениеВремени.Год;
|МесяцОтбора=Регистр.НакоплениеВремени.Месяц;
|ТипПодразделения=Регистр.НакоплениеВремени.Подразделение.ТипПодразделения;
|ДеньОтбора=Регистр.НакоплениеВремени.День;"+СокрЛП("|"+Измерение+";")+
"|Группировка ГодОтбора;
|Группировка МесяцОтбора;
|Группировка ТипПодразделения;
|Группировка ДеньОтбора;
|Условие(ГодОтбора=ГодОтбораДанных);
|Условие(МесяцОтбора=МесяцОтбораДанных);
|Условие(ТипПодразделения = ПодразделениеОтбора);
|Условие(ДеньОтбора = ЧислоДняОтбора);"+СокрЛП("|Функция Результат = Сумма("+Измерение+");");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат 0;
КонецЕсли;
ЗначениеВозврата=Запрос.Результат;
КонецЕсли;	
Возврат ЗначениеВозврата;
КонецФункции
ошибка:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ИспользованиеРабочегоВремени.Форма.Модуль(41)}: ГодОтбора=Регистр.НакоплениеВремени. <<?>> Год;
Запрос[2] : Неожиданное выражение 'Год'

может не верно закрываю текст запроса???
 
K

kaa

а в регистре измерение год есть? и какой тип если есть?
 
S

SeverBap

все есть, год у меня числовой!!! - но это же измерение!!
потом месяц и день тоже измерение !!!

так же можно? или нельзя?
 
V

vitfil

Я могу ошибаться, но... Возможно, Год, Месяц, День, Неделя - это зарезервированные слова языка запросов, которые нельзя использовать в качестве измерений.
 
K

kaa

Вероятно потому-что есть жишь Группировки День/Месяц/Год
 
S

SeverBap

vitfil ТОгда почему я тогда нигде этого не нашел в описание языка запросов? Но всетаки я так думаю плохо закрываю запрос в целом там же пишет запрос [2] тоесть первый раз проходит!
 
V

vitfil

Это номер строки в запросе, в которой, как считает метапарсер, находится ошибка.

ТОгда почему я тогда нигде этого не нашел в описание языка запросов?
Плохо искали?
kaa ответил вам уже:

Вероятно потому-что есть жишь Группировки День/Месяц/Год
 
S

SeverBap

vitfil Поменял в регистре теперь ругается:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{Отчет.ИспользованиеРабочегоВремени.Форма.Модуль(42)}: <<?>> |ПриостановкаРаботы = Регистр.НакоплениеВремени.ПриостановкаРаботы;
Запрос[6] : Неизвестая ошибка '|'
сейчас функция такова:
Код:
Функция ПолучитьСводныйОстатокЗаДень(ГодОтбораДанных,МесяцОтбораДанных,ТипОтбораДанных,ЧислоДняОтбора,Измерение)
Перем ЗначениеВозврата, Запрос, ТекстЗапроса;
Если ТипОтбораДанных="ИРВСоставеППП" Тогда
ЗначениеВозврата=Регистр.НакоплениеВремени.СводныйОстаток(ГодОтбораДанных,МесяцОтбораДанных,,ЧислоДняОтбора,,Измерение);	
Иначе
ПодразделениеОтбора="";
Если ТипОтбораДанных="ИРВППП" Тогда
ПодразделениеОтбора=Перечисление.ТипПодразделения.Промышленное;
Иначе
ПодразделениеОтбора=Перечисление.ТипПодразделения.НеПромышленное;
КонецЕсли;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = 
"//{{ЗАПРОС(Сформировать)
|ГодОтбора=Регистр.НакоплениеВремени.ГодП;
|МесяцОтбора=Регистр.НакоплениеВремени.МесяцП;
|ТипПодразделения=Регистр.НакоплениеВремени.Подразделение.ТипПодразделения;
|ДеньОтбора=Регистр.НакоплениеВремени.ДеньП; "+Строка(Разделительстрок+"|"+Измерение+" = Регистр.НакоплениеВремени."+Измерение+";")+
"
|Группировка ГодОтбора;
|Группировка МесяцОтбора;
|Группировка ТипПодразделения;
|Группировка ДеньОтбора;
|Условие(ГодОтбора=ГодОтбораДанных);
|Условие(МесяцОтбора=МесяцОтбораДанных);
|Условие(ТипПодразделения = ПодразделениеОтбора);
|Условие(ДеньОтбора = ЧислоДняОтбора);"+СокрЛП("|Функция Результат = Сумма("+Измерение+");");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат 0;
КонецЕсли;
ЗначениеВозврата=Запрос.Результат;
КонецЕсли;	
Возврат ЗначениеВозврата;
КонецФункции
 
P

puh14

{Отчет.ИспользованиеРабочегоВремени.Форма.Модуль(42)}: <<?>> |ПриостановкаРаботы = Регистр.НакоплениеВремени.ПриостановкаРаботы;
Запрос[6] : Неизвестая ошибка '|'

Не врубается что такое РазделительСтрок. Попробуй тупо

|ДеньОтбора=Регистр.НакоплениеВремени.ДеньП;
|"+Строка(Измерение+" = Регистр.НакоплениеВремени."+Измерение+";")+
"
|Группировка ГодОтбора;
 
U

unknown181538

Разделительстрок+"|" замените на " ".
 
S

SeverBap

Я отказался от запроса и сделал вот так:
Код:
//************************************************************************
Процедура ПодготовитьДанные(ТипОтбораДанных)
ТаблицаДанных.УдалитьСтроки();
Если ТипОтбораДанных="ИРВСоставеППП" Тогда
Для Сч=1 По ДатаЧисло(КонМесяца(ДатаСтрока)) Цикл
ТаблицаДанных.НоваяСтрока();
ТаблицаДанных.ДеньМесяца=Сч;
НомерСтрокиОбработки=ТаблицаДанных.НомерСтроки;
Для Счк=1 По ТаблицаДанных.КоличествоКолонок() Цикл
КолонкаОбработки=СокрЛП(ТаблицаДанных.ПолучитьПараметрыКолонки(Счк));
Если (КолонкаОбработки<>"НомерСтрокиДокумента") И (КолонкаОбработки<>"ДеньМесяца") Тогда
ЗначениеУстановки=Регистр.НакоплениеВремени.СводныйОстаток(ДатаГод(ДатаСтрока),ДатаМесяц(ДатаСтрока),,Сч,,КолонкаОбработки);	
ТаблицаДанных.УстановитьЗначение(НомерСтрокиОбработки,КолонкаОбработки,ЗначениеУстановки);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Иначе
Если ТипОтбораДанных="ИРВППП" Тогда
ПодразделениеОтбора=Перечисление.ТипПодразделения.Промышленное;
Иначе
ПодразделениеОтбора=Перечисление.ТипПодразделения.НеПромышленное;
КонецЕсли;
СписокВхожденийПодразделений=СоздатьОбъект("СписокЗначений");
СправочникПодразделений=СоздатьОбъект("Справочник.Подразделение");
СправочникПодразделений.ВыбратьЭлементыПоРеквизиту("ТипПодразделения",ПодразделениеОтбора,0,0);
Пока СправочникПодразделений.ПолучитьЭлемент()=1 Цикл
СписокВхожденийПодразделений.ДобавитьЗначение(СправочникПодразделений.ТекущийЭлемент());
КонецЦикла;	
Для Сч=1 По ДатаЧисло(КонМесяца(ДатаСтрока)) Цикл
ТаблицаДанных.НоваяСтрока();
ТаблицаДанных.ДеньМесяца=Сч;
НомерСтрокиОбработки=ТаблицаДанных.НомерСтроки;
Для Счк=1 По ТаблицаДанных.КоличествоКолонок() Цикл
КолонкаОбработки=СокрЛП(ТаблицаДанных.ПолучитьПараметрыКолонки(Счк));
Если (КолонкаОбработки<>"НомерСтрокиДокумента") И (КолонкаОбработки<>"ДеньМесяца") Тогда
ЗначениеУстановки=0;
Для СчП=1 По СписокВхожденийПодразделений.РазмерСписка() Цикл
Подразделение=СписокВхожденийПодразделений.ПолучитьЗначение(СчП);
ЗначениеУстановки=ЗначениеУстановки+Регистр.НакоплениеВремени.СводныйОстато
к(ДатаГод(ДатаСтрока),ДатаМесяц(ДатаСтрока),Подразделение,Сч,,КолонкаОбработки);	
КонецЦикла;
ТаблицаДанных.УстановитьЗначение(НомерСтрокиОбработки,КолонкаОбработки,ЗначениеУстановки);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры	
//************************************************************************
Функция ПолучитьСводныйОстатокЗаДень(ЧислоДняОтбора,Измерение)
Перем ЗначениеВозврата,СтрокаДанныхВТаблице;
Если ТаблицаДанных.НайтиЗначение(ЧислоДняОтбора,СтрокаДанныхВТаблице,"ДеньМесяца")=1 Тогда
ЗначениеВозврата=ТаблицаДанных.ПолучитьЗначение(СтрокаДанныхВТаблице,Измерение);
Иначе
ЗначениеВозврата=0;
КонецЕсли;	
Возврат ЗначениеВозврата;
КонецФункции
Времени оставалось немного поэтому пришлось так писать результат выводит верно но скорость слабовата!!! :)
Можно еще как-нибудь это улучшить? :mellow:
 
S

SeverBap

unknown181538 пока думаю насчет возврата, сейчас конечно весьма удобно его реорганизовывать!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!