Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
12 дек 2024, 05:03

Работа с запросом

Автор Nosferatu112, 14 окт 2024, 10:51

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

Добрый день, есть у меня такой запрос
ВЫБРАТЬ
ПереносыЗаказов.Водитель КАК Водитель,
НАЧАЛОПЕРИОДА(ПереносыЗаказов.СтараяДатаОтгрузки, НЕДЕЛЯ) КАК Неделя,
СУММА(1) КАК Количество
ПОМЕСТИТЬ ВТ_Переносы
ИЗ
РегистрСведений.ПереносыЗаказов КАК ПереносыЗаказов
ГДЕ
ПереносыЗаказов.ВидПереноса.ВинаВодителя
И КОНЕЦПЕРИОДА(ПереносыЗаказов.СтараяДатаОтгрузки, НЕДЕЛЯ) МЕЖДУ &ДатаНачала И &ДатаОкончания

СГРУППИРОВАТЬ ПО
ПереносыЗаказов.Водитель,
НАЧАЛОПЕРИОДА(ПереносыЗаказов.СтараяДатаОтгрузки, НЕДЕЛЯ)

ИНДЕКСИРОВАТЬ ПО
Водитель,
Неделя
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВЗ.Водитель КАК Сотрудник,
ВЗ.Должность КАК Должность,
НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВЗ.Неделя, ДЕНЬ, 6), МЕСЯЦ) КАК ПериодМесяц,
ВЗ.Неделя КАК НачалоНедели,
ДОБАВИТЬКДАТЕ(ВЗ.Неделя, ДЕНЬ, 6) КАК Дата,
ЗНАЧЕНИЕ(Справочник.вд_НачисленияМотиваций.НедельнаяПремия) КАК НачислениеОбщее,
ВЫБОР
КОГДА ВЗ.ВВыходные > 0
И (НЕ ВЗ.ЕздилЗаМКАД
И ВЫБОР
КОГДА ВЗ.ВсегоТочек > 0
ТОГДА ЕСТЬNULL(ВТ_Переносы.Количество, 0) * 100 / ВЗ.ВсегоТочек
ИНАЧЕ 0
КОНЕЦ <= 1.5
ИЛИ ВЗ.ЕздилЗаМКАД
И ВЫБОР
КОГДА ВЗ.ВсегоТочек > 0
ТОГДА ЕСТЬNULL(ВТ_Переносы.Количество, 0) * 100 / ВЗ.ВсегоТочек
ИНАЧЕ 0
КОНЕЦ <= 2)
ТОГДА ВЫБОР
КОГДА ВЗ.ОтработалДней = 5
ТОГДА ЗНАЧЕНИЕ(Справочник.вд_НачисленияМотиваций.НедельнаяПремия5_2)
КОГДА ВЗ.ОтработалДней = 6
ТОГДА ЗНАЧЕНИЕ(Справочник.вд_НачисленияМотиваций.НедельнаяПремия6_1)
КОГДА ВЗ.ОтработалДней = 7
ТОГДА ЗНАЧЕНИЕ(Справочник.вд_НачисленияМотиваций.НедельнаяПремия7_0)
ИНАЧЕ ЗНАЧЕНИЕ(Справочник.вд_НачисленияМотиваций.ПустаяСсылка)
КОНЕЦ
ИНАЧЕ ЗНАЧЕНИЕ(Справочник.вд_НачисленияМотиваций.ПустаяСсылка)
КОНЕЦ КАК Премия,
ВЗ.ВсегоТочек КАК ВсегоТочек,
ВЗ.ВВыходные КАК ВВыходные,
ВЗ.ОтработалДней КАК ОтработалДней,
ВЗ.ЕздилЗаМКАД КАК ЕздилЗаМКАД,
ЕСТЬNULL(ВТ_Переносы.Количество, 0) КАК Переносов,
ВЫБОР
КОГДА ВЗ.ВсегоТочек > 0
ТОГДА ЕСТЬNULL(ВТ_Переносы.Количество, 0) * 100 / ВЗ.ВсегоТочек
ИНАЧЕ 0
КОНЕЦ КАК ПроцентПереносов
ПОМЕСТИТЬ ВТ_Расчет
ИЗ
(ВЫБРАТЬ
ВозвратПутевогоЛистаЗаявки.Ссылка.Водитель КАК Водитель,
ВозвратПутевогоЛистаЗаявки.Ссылка.Водитель.Должность КАК Должность,
НАЧАЛОПЕРИОДА(ВозвратПутевогоЛистаЗаявки.Ссылка.Дата, НЕДЕЛЯ) КАК Неделя,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВозвратПутевогоЛистаЗаявки.Заказ) КАК ВсегоТочек,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВЫБОР
КОГДА ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Суббота)
ИЛИ ДанныеПроизводственногоКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Воскресенье)
ТОГДА ВозвратПутевогоЛистаЗаявки.Заказ
КОНЕЦ) КАК ВВыходные,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДЕНЬНЕДЕЛИ(ВозвратПутевогоЛистаЗаявки.Ссылка.Дата)) КАК ОтработалДней,
МАКСИМУМ(ЕСТЬNULL(ВозвратПутевогоЛистаЗаявки.Заказ.АдресДоставки.ЗонаПланированияМаксоптра.ЗаМКАД, ЛОЖЬ)) КАК ЕздилЗаМКАД
ИЗ
РегистрСведений.ДолжностиСотрудниковОтделаДоставки.СрезПоследних(&ДатаОкончания, ) КАК ДолжностиСотрудниковОтделаДоставкиСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратПутевогоЛиста.Заявки КАК ВозвратПутевогоЛистаЗаявки
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ПО (НАЧАЛОПЕРИОДА(ВозвратПутевогоЛистаЗаявки.Ссылка.Дата, ДЕНЬ) = ДанныеПроизводственногоКалендаря.Дата)
ПО ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Сотрудник = ВозвратПутевогоЛистаЗаявки.Ссылка.Водитель
ГДЕ
КОНЕЦПЕРИОДА(ВозвратПутевогоЛистаЗаявки.Ссылка.Дата, НЕДЕЛЯ) МЕЖДУ &ДатаНачала И &ДатаОкончания
И ВозвратПутевогоЛистаЗаявки.Ссылка.Водитель.Автомобиль <> ЗНАЧЕНИЕ(Справочник.Автомобили.ПустаяСсылка)
И ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Должность.ТипДолжности = ЗНАЧЕНИЕ(Перечисление.ТипыДолжностейОтделаДоставки.Водитель)
И ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Должность.ДолжностьДляМотивации.УчаствуетВРасчетеЭффективности = ИСТИНА
И ВозвратПутевогоЛистаЗаявки.Ссылка.Дата > ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Период

СГРУППИРОВАТЬ ПО
ВозвратПутевогоЛистаЗаявки.Ссылка.Водитель,
НАЧАЛОПЕРИОДА(ВозвратПутевогоЛистаЗаявки.Ссылка.Дата, НЕДЕЛЯ),
ВозвратПутевогоЛистаЗаявки.Ссылка.Водитель.Должность) КАК ВЗ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Переносы КАК ВТ_Переносы
ПО ВЗ.Водитель = ВТ_Переносы.Водитель
И ВЗ.Неделя = ВТ_Переносы.Неделя
ГДЕ
ВЗ.ОтработалДней >= 5
И ВЗ.ВВыходные > 0
И (НЕ ВЗ.ЕздилЗаМКАД
И ВЫБОР
КОГДА ВЗ.ВсегоТочек > 0
ТОГДА ЕСТЬNULL(ВТ_Переносы.Количество, 0) * 100 / ВЗ.ВсегоТочек
ИНАЧЕ 0
КОНЕЦ <= 1.5
ИЛИ ВЗ.ЕздилЗаМКАД
И ВЫБОР
КОГДА ВЗ.ВсегоТочек > 0
ТОГДА ЕСТЬNULL(ВТ_Переносы.Количество, 0) * 100 / ВЗ.ВсегоТочек
ИНАЧЕ 0
КОНЕЦ <= 2)
И (&Сотрудник = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
ИЛИ ВЗ.Водитель = &Сотрудник)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Расчет.Сотрудник КАК Сотрудник,
ВТ_Расчет.ПериодМесяц КАК ПериодМесяц,
ВТ_Расчет.Дата КАК Дата,
ЕСТЬNULL(Премии.Ссылка, ЗНАЧЕНИЕ(Документ.Премия.ПустаяСсылка)) КАК Документ,
ВТ_Расчет.НачислениеОбщее КАК НачислениеОбщее,
ВТ_Расчет.Премия.ВидНачисления КАК ВидНачисления,
ВТ_Расчет.Премия КАК Начисление,
Премии.Начисление КАК Начисление1,
ДолжностиНачисления.Стоимость КАК Сумма
ИЗ
ВТ_Расчет КАК ВТ_Расчет
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Должности.Начисления КАК ДолжностиНачисления
ПО ВТ_Расчет.Должность = ДолжностиНачисления.Ссылка
И ВТ_Расчет.Премия = ДолжностиНачисления.Начисление
И (ДолжностиНачисления.Стоимость > 0)
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Премия.Сотрудник КАК Сотрудник,
Премия.ВидПремии.Начисление КАК Начисление,
МАКСИМУМ(Премия.Ссылка) КАК Ссылка,
Премия.ПериодВыплаты КАК ПериодВыплаты
ИЗ
Документ.Премия КАК Премия
ГДЕ
Премия.ПериодВыплаты МЕЖДУ &ДатаНачала И &ДатаОкончания
И НЕ Премия.ПометкаУдаления

СГРУППИРОВАТЬ ПО
Премия.Сотрудник,
Премия.ВидПремии.Начисление,
Премия.ПериодВыплаты) КАК Премии
ПО (Премии.Сотрудник = ВТ_Расчет.Сотрудник)
И (Премии.Начисление = ВТ_Расчет.НачислениеОбщее)

УПОРЯДОЧИТЬ ПО
ВТ_Расчет.Сотрудник.Наименование,
Дата
Работает отлично но попросили внести доработку так как в объекте РегистрСведений.ДолжностиСотрудниковОтделаДоставки.СрезПоследних может быть такая ситуация
Сегодня у сотрудника должность Водитель ЛА(Участвует в расчете) через неделю Водитель НА(Не учавствует в расчете) ещё через неделю снова водитель ЛА
При таком раскладе премия считается не верно расчет только по последней должности
Как правильно можно проверять какая роль была у сотрудника каждый день в течении месяца
Пытался сделать как то так, но должности всё равно привязываются к тому числу в которое они были установлены
Как правильно организовать такой запрос?
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
ПОМЕСТИТЬ ВТ_ДНИ
{ВЫБРАТЬ
Период}
ИЗ
(ВЫБРАТЬ
0 КАК a

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК aa
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК b

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК bb
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК c

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК cc
ПО (ИСТИНА)
ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
0 КАК d

ОБЪЕДИНИТЬ

ВЫБРАТЬ
1

ОБЪЕДИНИТЬ

ВЫБРАТЬ
2

ОБЪЕДИНИТЬ

ВЫБРАТЬ
3

ОБЪЕДИНИТЬ

ВЫБРАТЬ
4

ОБЪЕДИНИТЬ

ВЫБРАТЬ
5

ОБЪЕДИНИТЬ

ВЫБРАТЬ
6

ОБЪЕДИНИТЬ

ВЫБРАТЬ
7

ОБЪЕДИНИТЬ

ВЫБРАТЬ
8

ОБЪЕДИНИТЬ

ВЫБРАТЬ
9) КАК dd
ПО (ИСТИНА)
ГДЕ
aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДолжностиСотрудниковОтделаДоставки.Должность КАК Должность,
ДолжностиСотрудниковОтделаДоставки.Период КАК ПериодИзменения,
ДолжностиСотрудниковОтделаДоставки.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ ВТ_Данные2
ИЗ
ВТ_ДНИ КАК ВТ_ДНИ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДолжностиСотрудниковОтделаДоставки КАК ДолжностиСотрудниковОтделаДоставки
ПО (ДолжностиСотрудниковОтделаДоставки.Сотрудник = &Сотрудник)

СГРУППИРОВАТЬ ПО
ДолжностиСотрудниковОтделаДоставки.Должность,
ДолжностиСотрудниковОтделаДоставки.Сотрудник,
ДолжностиСотрудниковОтделаДоставки.Период
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Период КАК Период,
ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Сотрудник КАК Сотрудник,
ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Должность КАК Должность,
ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Автор КАК Автор
ПОМЕСТИТЬ втСрезПоследнихДолжности
ИЗ
РегистрСведений.ДолжностиСотрудниковОтделаДоставки.СрезПоследних КАК ДолжностиСотрудниковОтделаДоставкиСрезПоследних
ГДЕ
ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Период < &НачалоПериода
И ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Должность.ДолжностьДляМотивации.УчаствуетВРасчетеЭффективности = ИСТИНА
И ДолжностиСотрудниковОтделаДоставкиСрезПоследних.Сотрудник = &Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_ДНИ.Период КАК Период,
ВТ_Данные2.Должность КАК Должность,
ВТ_Данные2.ПериодИзменения КАК ПериодИзменения,
ВТ_Данные2.Сотрудник КАК Сотрудник
ПОМЕСТИТЬ втДанные
ИЗ
ВТ_ДНИ КАК ВТ_ДНИ
ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные2 КАК ВТ_Данные2
ПО ВТ_ДНИ.Период = ВТ_Данные2.ПериодИзменения

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
НАЧАЛОПЕРИОДА(&НачалоПериода, МЕСЯЦ),
втСрезПоследнихДолжности.Должность,
втСрезПоследнихДолжности.Период,
втСрезПоследнихДолжности.Сотрудник
ИЗ
втСрезПоследнихДолжности КАК втСрезПоследнихДолжности
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втДанные.Период КАК Период,
МАКСИМУМ(втДанные.Должность) КАК Должность,
МАКСИМУМ(втДанные.ПериодИзменения) КАК ПериодИзменения,
втДанные.Сотрудник КАК Сотрудник
ИЗ
втДанные КАК втДанные

СГРУППИРОВАТЬ ПО
втДанные.Период,
втДанные.Сотрудник

УПОРЯДОЧИТЬ ПО
Период

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск