![]() |
![]() |
![]() |
|
Группировка дат в запросе | ☑ | ||
---|---|---|---|---|
0
Frank13
30.07.19
✎
23:27
|
*********Приветствую коллеги!!!**********
Возникла сложность вывода данных в отчете. Ситуация такая: есть сотрудник Иванов И.И. его принимали на работу и увольняли каждый месяц. Дата приема Дата увольнения 1. 15.01.2019 31.01.2019 2. 01.02.2019 28.02.2019 3. 04.03.2019 работает Если разница в днях 1 день от Даты приема и Даты увольнения (пример выше), то в отчет выводить одной строкой минимум(датаПриема) максимум(дата увольения), т.е. получается: Дата приема Дата увольнения 1. 15.01.2019 28.02.2019 2. 04.03.2019 (в данном случае, случае разница больше 1 дня). В отчет все как надо выходит Затруднение вышло в данном случае: Дата приема Дата увольнения 1. 15.01.2019 31.01.2019 2. 01.02.2019 28.02.2019 3. 01.03.2019 работает В отчете выходит Дата приема Дата увольнения 1. 15.01.2019 28.02.2019 что есть не правильно, правильно 15.01.2019 - работает(пустая дата) ПОДСКАЖИТЕ КАК МОЖНО еще решить данную задачу |
|||
1
Ёпрст
гуру
30.07.19
✎
23:38
|
(0) Нам отсюда не видно, как выводишь в отчет и текст запроса
|
|||
2
Frank13
30.07.19
✎
23:54
|
(1) Получил таблицу значений, потом в цикле перебрал данные проверяя разницу м/у Датой приема и Датой увольнения предыдущей и текущей строки, присваивая значение НовыйСотрудник(Истина,Ложь), если разница м/у Датой приема текущей строки и ДатойУвольнения предыдущей строки равна или больше 1). Добавил во временную таблицу, где сделал группировку Минимум(ДатаПриема), Максимум(ДатаУвольнения):
Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТЗсотрудники",ДанныеПоСотрудникам); Запрос.Текст = "ВЫБРАТЬ | ТЗсотрудники.Сотрудник КАК Сотрудник, | ТЗсотрудники.ФизическоеЛицо КАК ФизическоеЛицо, | ТЗсотрудники.ФОТ КАК ФОТ, | ТЗсотрудники.УсловияТруда КАК УсловияТруда, | ТЗсотрудники.Тариф КАК Тариф, | ТЗсотрудники.ТабельныйНомер КАК ТабельныйНомер, | ТЗсотрудники.Ставка КАК Ставка, | ТЗсотрудники.Состояние КАК Состояние, | ТЗсотрудники.Подразделение КАК Подразделение, | ТЗсотрудники.Организация КАК Организация, | ТЗсотрудники.Оклад КАК Оклад, | ТЗсотрудники.НовыйСотрудник КАК НовыйСотрудник, | ТЗсотрудники.Должность КАК Должность, | ТЗсотрудники.ДатаУвольнения КАК ДатаУвольнения, | ТЗсотрудники.ДатаПриема КАК ДатаПриема, | ТЗсотрудники.ГруппаФЗ КАК ГруппаФЗ, | ТЗсотрудники.ГрафикРаботы КАК ГрафикРаботы, | ТЗсотрудники.ГоловнаяОрганизация КАК ГоловнаяОрганизация, | ТЗсотрудники.ВидЗанятости КАК ВидЗанятости, | ТЗсотрудники.ПоказательТарифнойСтавки КАК ПоказательТарифнойСтавки |ПОМЕСТИТЬ ВТ |ИЗ | &ТЗсотрудники КАК ТЗсотрудники |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.ФизическоеЛицо КАК ФизическоеЛицо, | ВТ.Тариф КАК Тариф, | ВТ.ТабельныйНомер КАК ТабельныйНомер, | ВТ.Ставка КАК Ставка, | ВТ.Подразделение КАК Подразделение, | ВТ.Организация КАК Организация, | ЕСТЬNULL(ВТ.Оклад, 0) КАК Оклад, | ВТ.НовыйСотрудник КАК НовыйСотрудник, | ВТ.Должность КАК Должность, | МАКСИМУМ(ВТ.ДатаУвольнения) КАК ДатаУвольнения, | МИНИМУМ(ВТ.ДатаПриема) КАК ДатаПриема, | ВТ.ГруппаФЗ КАК ГруппаФЗ, | ВТ.ГрафикРаботы КАК ГрафикРаботы, | ВТ.ГоловнаяОрганизация КАК ГоловнаяОрганизация, | ВТ.Состояние КАК Состояние |ИЗ | ВТ КАК ВТ | |СГРУППИРОВАТЬ ПО | ВТ.ФизическоеЛицо, | ВТ.Тариф, | ВТ.ТабельныйНомер, | ВТ.Ставка, | ВТ.Подразделение, | ВТ.Организация, | ВТ.НовыйСотрудник, | ВТ.Должность, | ВТ.ГруппаФЗ, | ВТ.ГоловнаяОрганизация, | ВТ.ГрафикРаботы, | ЕСТЬNULL(ВТ.Оклад, 0), | ВТ.Состояние | |УПОРЯДОЧИТЬ ПО | ТабельныйНомер, | ДатаПриема"; тзВыборка = Запрос.Выполнить().Выгрузить(); |
|||
3
kumena
31.07.19
✎
00:14
|
Раз пять раз перечитал, пока понял что вместо даты текст. Почему вместо текста текущую дату или дату окончания отчета не может - не понятно!
|
|||
4
kumena
31.07.19
✎
00:19
|
Выбор Когда ДатаОкончания = ДатаВремя(1,1,1) Тогда &ТекущаяДата Конец КАК ДатаОкончания
|
|||
5
Frank13
31.07.19
✎
00:24
|
(3) В дате увольнения, либо есть дата либо она пустая, никакого текста( просто обозначил, что сотрудник работает).
Варианты с текущей датой или датой отчета - не вариант. |
|||
6
Frank13
31.07.19
✎
00:28
|
(4) Запрос срабатывает нормально, если разница больше 1 дня и выводит как нужно, но загвоздка появилось,когда все равны 1 и Дата увольнения = ПустаяДата. Как подсказать или вывести строку в данном случае
|
|||
7
hhhh
31.07.19
✎
00:38
|
(6) если дата увольнения пустая, тогда берешь ее 3999 год
|
|||
8
kumena
31.07.19
✎
00:41
|
> Варианты с текущей датой или датой отчета - не вариант.
это как раз более правильный вариант. > если дата увольнения пустая, тогда берешь ее 3999 год ха ха, и замазываешь её условным оформлением на работает\пустая дата! ))) |
|||
9
kumena
31.07.19
✎
00:44
|
7 я подозреваю, что автор на 3.0 пользуется штатными функциями, которые возвращают пустую дату.
но вобщем в цикле подменит. |
|||
10
Frank13
31.07.19
✎
00:54
|
(7) (8) Спасибо.Совсем с головы вылетело, что можно ставить 3999. Буду пробовать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |