|
Запрос к периодическому РС - свернуть в таблицу "начало-окончание" | ☑ | ||
---|---|---|---|---|
0
mikhailovaew
09.10.13
✎
10:41
|
ПРошу подсказать, как правильно написать запрос к периодическому регистру сведений, чтобы на выходе получалась таблица вида Измерение - Начало - Окончание.
Помещаю движения регистра в ВТ, соединяю ее с собой по неравенству периода - получаются лишние записи. То есть такой текст: //////////////////////////////////////////////////////////////////////ВЫБРАТЬ РС.Период, РС.Сотрудник, РС.Подразделение ПОМЕСТИТЬ ВТ_Перемещения ИЗ РегистрСведений.Сотрудники КАК РС ; //////////////////////////////////////////////////////////////////////ВЫБРАТЬ ВТ1.Сотрудник, ВТ1.Подразделение, ВТ1.Период КАК Начало, ВТ2.Период КАК Окончание ИЗ ВТ_Перемещения КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Перемещения КАК ВТ2 ПО ВТ1.Сотрудник = ВТ2.Сотрудник И ВТ1.Период < ВТ2.Период при наличии в регистре 3 записей по сотруднику (перемещения 01.04, 01.08, 01.10) дает 3 строки: 1) 01.04-01.08 2) 01.04-01.10 (лишняя строка!) 3) 01.08-01.10 а нужно 2: 1) 01.04-01.08 2) 01.08-01.10 Как правильно составить запрос? |
|||
1
Sabbath
09.10.13
✎
10:47
|
(0) сгруппировать по минимум(начало) максимум(окончание)
|
|||
2
Sabbath
09.10.13
✎
10:48
|
+(1) а, не так задачу понял, думал одна строка нужна
|
|||
3
mikhailovaew
09.10.13
✎
10:49
|
(2) нужно разбить РС на периоды
|
|||
4
Rovan
гуру
09.10.13
✎
10:49
|
ВТ1.Сотрудник,
ВТ1.Подразделение, ВТ1.Период КАК Начало, МАКСИМУМ(ВТ2.Период) КАК Окончание |
|||
5
Sabbath
09.10.13
✎
10:50
|
тогда можно сделать два таких запроса в одном группировка два раза по минимум в другом два раза по максимуму и объединить их
|
|||
6
mikhailovaew
09.10.13
✎
10:52
|
(4) тогда получается так:
1) 01.04-01.10 2) 01.08-01.10 |
|||
7
Sabbath
09.10.13
✎
10:52
|
(4) не прокатит с другими данными
|
|||
8
mikhailovaew
09.10.13
✎
10:53
|
(5) не совсем поняла, не могли бы Вы привести полный текст запроса?
|
|||
9
mikhailovaew
09.10.13
✎
10:53
|
(7) оно и с текущими не прокатывает, не те периоды получаются...
|
|||
10
Rie
09.10.13
✎
10:54
|
(8) Посмотри v8: Сделать отчет по времени сопровождения клиентов
там - аналогичная задача. |
|||
11
Ненавижу 1С
гуру
09.10.13
✎
10:54
|
ВТ1.Сотрудник,
ВТ1.Подразделение, ВТ1.Период КАК Начало, MIN(ВТ2.Период) КАК Окончание ИЗ ВТ_Перемещения КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Перемещения КАК ВТ2 ПО ВТ1.Сотрудник = ВТ2.Сотрудник И ВТ1.Период < ВТ2.Период СГРУППИРОВАТЬ ПО ВТ1.Сотрудник, ВТ1.Подразделение, ВТ1.Период |
|||
12
mikhailovaew
09.10.13
✎
10:55
|
(11) да, то, что нужно! спасибо!
|
|||
13
Sabbath
09.10.13
✎
10:59
|
(5)
ВЫБРАТЬ РС.Период, РС.Сотрудник, РС.Подразделение ПОМЕСТИТЬ ВТ_Перемещения ИЗ РегистрСведений.Сотрудники КАК РС ; ////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ1.Сотрудник, ВТ1.Подразделение, ВТ1.Период КАК Начало, ВТ2.Период КАК Окончание ПОМЕСТИТЬ ВТ_Периоды ИЗ ВТ_Перемещения КАК ВТ1 ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Перемещения КАК ВТ2 ПО ВТ1.Сотрудник = ВТ2.Сотрудник И ВТ1.Период < ВТ2.Период ////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.Сотрудник, ВТ.Подразделение, МИНИМУМ(ВТ.Начало) КАК Начало, МИНИМУМ(ВТ.Окончание) КАК Окончание ИЗ ВТ_Периоды КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Сотрудник, ВТ.Подразделение ОБЪЕДИНИТЬ ВЫБРАТЬ ВТ.Сотрудник, ВТ.Подразделение, МАКСИМУМ(ВТ.Начало) КАК Начало, МАКСИМУМ(ВТ.Окончание) КАК Окончание ИЗ ВТ_Периоды КАК ВТ СГРУППИРОВАТЬ ПО ВТ.Сотрудник, ВТ.Подразделение |
|||
14
mikhailovaew
09.10.13
✎
11:04
|
(13) спасибо Вам за помощь. Решение (11) мне пока нравится больше, оно на 2 запроса короче, его работоспособность я уже проверила.
Есть ситуации, когда Ваше решение отработает лучше? |
|||
15
Sabbath
09.10.13
✎
11:12
|
(11) написал как (4)
Не прокатит если будет вот так 01.04-01.08 01.04-01.05 01.04-01.10 01.05-01.08 01.05-01.10 01.08-01.10 в результате будет три строки 01.04-01.08 01.05-01.08 01.08-01.10 Я так понимаю надо две строки первую и последнюю |
|||
16
Sabbath
09.10.13
✎
11:14
|
+(15) (14) Перечитал задачу, сплю. Задача не в этом и (11) правильно
|
|||
17
mikhailovaew
09.10.13
✎
11:18
|
(16) да, я прогнала на тестовых данных (11), получила как раз что надо:
1) 01.04-01.08 2) 01.08-01.10 3) 01.10-null (что тоже неплохо, хоть в первоначальной постановке не озвучено) |
|||
18
ProgAL
09.10.13
✎
11:36
|
А зачем лишние соединения.
ВЫБРАТЬ РС.Товар, РС.Контрагент, МИНИМУМ(РС.Период), МАКСИМУМ(РС.Период) ИЗ РегистрСведений.РС КАК РС СГРУППИРОВАТЬ ПО РС.Товар, РС.Контрагент |
|||
19
Sabbath
09.10.13
✎
11:39
|
(18) так ты получишь одну строку, а надо несколько последовательных периодов как бы
|
|||
20
Sabbath
09.10.13
✎
11:40
|
(17) да, я просто понял задачу, что нужен первый и последний период, а нужны и промежуточные. Так что с (11) все ок
|
|||
21
Sabbath
09.10.13
✎
11:41
|
(17) последнюю строку можно отсеять условием не есть Null кстати, если не нужна
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |