Помогите по запросу
17.06.2009
10:12
#1
"Подскажите как сформировать дополнительный запрос в готовом запросе т.е. сформировали 1 запроспо данным за месяц и теперь надо к ним добавить данные среднее за три месяца, я что-то сделал но что-то не так , подскажите в чем мой косяк:
ТекстЗапроса =
"//{{ЗАПРОС(НачислениеОтпускных)
|Период с Мес3 по Мес1;
|Обрабатывать НеПомеченныеНаУдаление;
|Сумма = Документ.НачислениеОтпускных.Сумма;
|Функция СуммаСреднее = Среднее(Сумма);
|"//}}ЗАПРОС
;
Получается он сортирует сотрудников у которых есть -их и выводит а остальных нет."
ТекстЗапроса =
"//{{ЗАПРОС(НачислениеОтпускных)
|Период с Мес3 по Мес1;
|Обрабатывать НеПомеченныеНаУдаление;
|Сумма = Документ.НачислениеОтпускных.Сумма;
|Функция СуммаСреднее = Среднее(Сумма);
|"//}}ЗАПРОС
;
Получается он сортирует сотрудников у которых есть -их и выводит а остальных нет."
17.06.2009
13:14
#2
"Вообще, обычно принято обрабатывать результат проведения документов, а не сами документы, то есть записи в журналах расчетов, движения регистров, проводки... ну да ладно, раз вас такое устраивает, пробуйте так:
//НачДата1 и КонДата1 описывают диапазон выборки сведений за месяцы, по которым вычисляется средний
НачДата1=Дата("01.01.2009");
КонДата1=Дата("31.03.2009");
//НачДата2 и КонДата2 описывают диапазон выборки сведений за месяц, по которому нужно получить отдельные данные
НачДата2=Дата("01.04.2009");
КонДата2=Дата("30.04.2009");
//НачДата и КонДата - вычисляем так, чтобы они полностью охватили весь нужный диапазон и у нас получилось бы получить нужные нам данные в одном запросе, а не в двух, хотя не факт, что это быстрее
НачДата=Мин(НачДата1,НачДата2);
КонДата=Макс(КонДата1,КонДата2);
ТекстЗапроса="Период с НачДата По КонДата;
|ОбрабатыватьДокументы Проведенные;
|НачислениеОтпускных=Документ.НачислениеОтпускных.ТекущийДокумент;
|Сотрудник=Документ.НачислениеОтпускных.Сотрудник;
|Сумма=Документ.НачислениеОтпускных.Сумма;
|Функция СуммаСреднее=Среднее(Сумма) когда ((НачислениеОтпускных.ДатаДок>=НачДата1) и (НачислениеОтпускных.ДатаДок<=КонДата1));
|Функция СуммаЗаОтдельныйМесяц=Сумма(Сумма) когда ((НачислениеОтпускных.ДатаДок>=НачДата2) и (НачислениеОтпускных.ДатаДок<=КонДата2));
|Группировка Сотрудник без групп упорядочить по Сотрудник.Наименование;";
P.S. Не тестирую, но, наверное, работать должно"
//НачДата1 и КонДата1 описывают диапазон выборки сведений за месяцы, по которым вычисляется средний
НачДата1=Дата("01.01.2009");
КонДата1=Дата("31.03.2009");
//НачДата2 и КонДата2 описывают диапазон выборки сведений за месяц, по которому нужно получить отдельные данные
НачДата2=Дата("01.04.2009");
КонДата2=Дата("30.04.2009");
//НачДата и КонДата - вычисляем так, чтобы они полностью охватили весь нужный диапазон и у нас получилось бы получить нужные нам данные в одном запросе, а не в двух, хотя не факт, что это быстрее
НачДата=Мин(НачДата1,НачДата2);
КонДата=Макс(КонДата1,КонДата2);
ТекстЗапроса="Период с НачДата По КонДата;
|ОбрабатыватьДокументы Проведенные;
|НачислениеОтпускных=Документ.НачислениеОтпускных.ТекущийДокумент;
|Сотрудник=Документ.НачислениеОтпускных.Сотрудник;
|Сумма=Документ.НачислениеОтпускных.Сумма;
|Функция СуммаСреднее=Среднее(Сумма) когда ((НачислениеОтпускных.ДатаДок>=НачДата1) и (НачислениеОтпускных.ДатаДок<=КонДата1));
|Функция СуммаЗаОтдельныйМесяц=Сумма(Сумма) когда ((НачислениеОтпускных.ДатаДок>=НачДата2) и (НачислениеОтпускных.ДатаДок<=КонДата2));
|Группировка Сотрудник без групп упорядочить по Сотрудник.Наименование;";
P.S. Не тестирую, но, наверное, работать должно"
17.06.2009
13:22
#5
"Я пишу отдельную программку для хитрых расчетов, которые не поддерживает 1с.
написано очень хорошо но у меня загвоздка вот такая, мне надо взять среднее за 3 месяца:
ИначеЕсли ЗначениеМесяца = 6 Тогда
КЧ = "167 часов";
Дни = "21 день";
Мес1 =ЗначениеМесяца;
Мес2 =Мес1-1 ;//5
Мес3 =Мес2-1 ; //4 т.е. делаю проверку на месяц и нахожу период, т.е. если июнь тогда нам надо : июнь, май, апрель, получаем период с Мес3 по Мес1(с апреля по июнь), , находим нужные документы и получаем среднее, а сотрудник у нас идет из первого запроса, т.е. находим по готовому сотруднику его средний.
А если делать как вы написали, то плучается мне надо прописать сравнение сотрудника с сотрудником.Мне кажется я неправильно делаю выборку на месяц."
написано очень хорошо но у меня загвоздка вот такая, мне надо взять среднее за 3 месяца:
ИначеЕсли ЗначениеМесяца = 6 Тогда
КЧ = "167 часов";
Дни = "21 день";
Мес1 =ЗначениеМесяца;
Мес2 =Мес1-1 ;//5
Мес3 =Мес2-1 ; //4 т.е. делаю проверку на месяц и нахожу период, т.е. если июнь тогда нам надо : июнь, май, апрель, получаем период с Мес3 по Мес1(с апреля по июнь), , находим нужные документы и получаем среднее, а сотрудник у нас идет из первого запроса, т.е. находим по готовому сотруднику его средний.
А если делать как вы написали, то плучается мне надо прописать сравнение сотрудника с сотрудником.Мне кажется я неправильно делаю выборку на месяц."
17.06.2009
13:45
#7
""сотрудник у нас идет из первого запроса" + "находим по готовому сотруднику его средний", значит можно не мудрить(?):
ТекстЗапроса="Период с Мес3 По Мес1;
|ОбрабатыватьДокументы Проведенные;
|НачислениеОтпускных=Документ.НачислениеОтпускных.ТекущийДокумент;
|Сотрудник=Документ.НачислениеОтпускных.Сотрудник;
|Сумма=Документ.НачислениеОтпускных.Сумма;
|Функция СуммаСреднее=Среднее(Сумма);
|Условие(Сотрудник=НужныйСотрудник);
|Группировка Сотрудник без групп без упорядочивания;";
Запрос=СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда
СуммаСреднее=Запрос.СуммаСреднее;
...
"
ТекстЗапроса="Период с Мес3 По Мес1;
|ОбрабатыватьДокументы Проведенные;
|НачислениеОтпускных=Документ.НачислениеОтпускных.ТекущийДокумент;
|Сотрудник=Документ.НачислениеОтпускных.Сотрудник;
|Сумма=Документ.НачислениеОтпускных.Сумма;
|Функция СуммаСреднее=Среднее(Сумма);
|Условие(Сотрудник=НужныйСотрудник);
|Группировка Сотрудник без групп без упорядочивания;";
Запрос=СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=1 Тогда
СуммаСреднее=Запрос.СуммаСреднее;
...
"
Внедрение 1С УПП 8.1При выполнении на стороне сервера - "В данной транзакции уже происходили ошибки!"
Читают тему
(гостей: 1)