Помогите с запросом (объединить две таблицы по периодам)

1. Conon1980 21.11.17 12:10 Сейчас в теме
Добрый день!
Чот не могу понять как выполнить.
Есть две таблицы:
Первая это табель (Период, Сотрудник, часы) Период это 31 день.

01.01.2017 Иванов 8
02.01.2017 Иванов 8
03.01.2017 Иванов 8
04.01.2017 Иванов 8
05.01.2017 Иванов 8
06.01.2017 Иванов 8
07.01.2017 Иванов 8
08.01.2017 Иванов 8
09.01.2017 Иванов 8
10.01.2017 Иванов 8
11.01.2017 Иванов 8
12.01.2017 Иванов 8
13.01.2017 Иванов 8
14.01.2017 Иванов 8
15.01.2017 Иванов 8
16.01.2017 Иванов 8


Вторая, это когда менялись должности:

01.12.2016 Иванов Инженер
06.01.2017 Иванов Старший Инженер

Надо на выходе получить:
01.01.2017 Иванов 8 Инженер
02.01.2017 Иванов 8 Инженер
03.01.2017 Иванов 8 Инженер
04.01.2017 Иванов 8 Инженер
05.01.2017 Иванов 8 Инженер
06.01.2017 Иванов 8 Старший инженер
07.01.2017 Иванов 8 Старший инженер
08.01.2017 Иванов 8 Старший инженер
09.01.2017 Иванов 8 Старший инженер
10.01.2017 Иванов 8 Старший инженер
11.01.2017 Иванов 8 Старший инженер
12.01.2017 Иванов 8 Старший инженер
13.01.2017 Иванов 8 Старший инженер
14.01.2017 Иванов 8 Старший инженер
15.01.2017 Иванов 8 Старший инженер
16.01.2017 Иванов 8 Старший инженер

На T-SQL можно использовать SELECT в поле, а как в 1с сделать проще. Можно загорячиться и с временными табицами, но можно же как-то проще?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Conon1980 22.11.17 02:59 Сейчас в теме
3. Conon1980 22.11.17 04:43 Сейчас в теме
4. Kaspirovsky 215 22.11.17 05:04 Сейчас в теме
через СКД, объедините по по наимению, получиться ЛЕВОЕ СОЕДИНЕНИЕ типа Справочник.Сотрудники по Справочник = Ссылка, ну и выбрать добавляете Должности
5. Conon1980 22.11.17 09:03 Сейчас в теме
Где в СКД выбрать?
Я сделал всё проще, на уровне запроса
6. Release 22.11.17 10:12 Сейчас в теме
Ну, и поделились бы решением. Интересно глянуть, мне в свое время с подобной задачей пришлось сильно заморочиться, особенно для случая, когда в одном месяце было несколько кадровых изменений/перемещений по человеку.
гаврюша; alex-l19041; +2 Ответить
8. Conon1980 30.11.17 04:03 Сейчас в теме
(6) Извиняюсь, потерялся.
Вот моя заготовка:
ВЫБРАТЬ РАЗЛИЧНЫЕ
	1 КАК Вид,
	РаботникиОрганизаций.Период КАК Период,
	РаботникиОрганизаций.Сотрудник КАК Сотрудник,
	РаботникиОрганизаций.ПодразделениеОрганизации,
	РаботникиОрганизаций.Должность КАК Должность,
	РаботникиОрганизаций.ПричинаИзмененияСостояния
ПОМЕСТИТЬ ВТ_Должности
ИЗ
	РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций

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

ВЫБРАТЬ
	2,
	ДОБАВИТЬКДАТЕ(КадровоеПеремещениеОрганизацийРаботникиОрганизации.ДатаОкончания, ДЕНЬ, 1),
	РаботникиОрганизаций.Сотрудник,
	РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения,
	РаботникиОрганизаций.ДолжностьЗавершения,
	РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения
ИЗ
	РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
		ЛЕВОЕ СОЕДИНЕНИЕ Документ.КадровоеПеремещениеОрганизаций.РаботникиОрганизации КАК КадровоеПеремещениеОрганизацийРаботникиОрганизации
		ПО РаботникиОрганизаций.Регистратор = КадровоеПеремещениеОрганизацийРаботникиОрганизации.Ссылка
			И РаботникиОрганизаций.Сотрудник = КадровоеПеремещениеОрганизацийРаботникиОрганизации.Сотрудник
			И РаботникиОрганизаций.Период = КадровоеПеремещениеОрганизацийРаботникиОрганизации.ДатаНачала
ГДЕ
	РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)
	И НЕ ДОБАВИТЬКДАТЕ(КадровоеПеремещениеОрганизацийРаботникиОрганизации.ДатаОкончания, ДЕНЬ, 1) В
				(ВЫБРАТЬ
					ВТ_ПовторПериодов.Период
				ИЗ
					ВТ_ПовторПериодов
				ГДЕ
					ВТ_ПовторПериодов.Сотрудник = РаботникиОрганизаций.Сотрудник)

ИНДЕКСИРОВАТЬ ПО
	Сотрудник,
	Должность,
	Период
;

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

УПОРЯДОЧИТЬ ПО
	Сотрудник
Показать
7. AlexFort1961 1 22.11.17 11:24 Сейчас в теме
ВЫБРАТЬ
	РабочееВремяРаботниковОрганизаций.Период,
	РабочееВремяРаботниковОрганизаций.Сотрудник,
	МАКСИМУМ(РабочееВремяРаботниковОрганизаций.Период) КАК ПериодКадровый
ПОМЕСТИТЬ ВТ_Т1
ИЗ
	РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
		ПО 
			РабочееВремяРаботниковОрганизаций.Сотрудник = РаботникиОрганизаций.Сотрудник
			И
			РабочееВремяРаботниковОрганизаций.Период >= РаботникиОрганизаций.Период

ГДЕ
	РабочееВремяРаботниковОрганизаций.Период МЕЖДУ &Д1 И &Д2

СГРУППИРОВАТЬ ПО
	РабочееВремяРаботниковОрганизаций.Период,
	РабочееВремяРаботниковОрганизаций.Сотрудник
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
	ВТ_Т1.Период,
	ВТ_Т1.Сотрудник,
	РаботникиОрганизаций.Должность
ИЗ
	ВТ_Т1 КАК ВТ_Т1
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
		ПО ВТ_Т1.Сотрудник = РаботникиОрганизаций.Сотрудник
			И ВТ_Т1.ПериодКадровый = РаботникиОрганизаций.Период
Показать
9. zhkonst 01.12.17 14:42 Сейчас в теме
Я бы так сделал:

ВЫБРАТЬ
	РабочееВремя.Дата как ДатаРаботы,
	РабочееВремя.Фамилия как Фамилия,
	Максимум(Назначение.Дата) как ДатаНазначения,
	Максимум(Назначение.Должность) как Должность
ИЗ РабочееВремя
	ЛЕВОЕ СОЕДИНЕНИЕ Назначение 
	ПО	РабочееВремя.Фамилия = Назначение.Фамилия и
		РабочееВремя.Дата >= Назначение.Дата
СГРУППИРОВАТЬ ПО
	РабочееВремя.Дата,
	РабочееВремя.Фамилия
УПОРЯДОЧИТЬ ПО
	Фамилия,
	ДатаРаботы
Показать

Во вложении - выгруженный из консоли запрос с двумя табличками с исходными данными. Только в строковых полях таблиц в параметрах запроса после загрузки этого примера в консоль нужно будет длину ограничить, иначе ошибку выдаёт.

И это, сорян, если поздно.
P.S. Блин, не разобрался, как тут синтаксис подсветить.
Прикрепленные файлы:
ЗапросПроИнженеров.q1c
10. zhkonst 01.12.17 15:44 Сейчас в теме
Упс, погорячился. Я нуп и апазорился. Без вложенного запроса/временной таблички тут действительно никак. Вот правильный вариант:

ВЫБРАТЬ
	РабочееВремя.Дата как ДатаРаботы,
	РабочееВремя.Фамилия как Фамилия,
	Максимум(РабочееВремя.Часы),
	Максимум(Назначение.Дата) как ДатаНазначения
ПОМЕСТИТЬ ВремяРаботыСДатамиНазначения
ИЗ РабочееВремя
	ЛЕВОЕ СОЕДИНЕНИЕ Назначение 
	ПО	РабочееВремя.Фамилия = Назначение.Фамилия и
		РабочееВремя.Дата >= Назначение.Дата
СГРУППИРОВАТЬ ПО
	РабочееВремя.Дата,
	РабочееВремя.Фамилия;
ВЫБРАТЬ
	ВремяСДатами.ДатаРаботы,
	ВремяСДатами.Фамилия КАК Сотрудник,
	ВремяСДатами.Часы,
	Назначение.Должность
ИЗ 	ВремяРаботыСДатамиНазначения КАК ВремяСДатами
	ЛЕВОЕ СОЕДИНЕНИЕ Назначение
	ПО ВремяСДатами.ДатаНазначения = Назначение.Дата
УПОРЯДОЧИТЬ ПО
	Сотрудник,
	ДатаРаботы
Показать
11. Conon1980 05.12.17 10:44 Сейчас в теме
Во! Точно! Так и надо! СПС, буду переделывать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)