Получить интервалы по Табелю в разрезе учета времени

1. user645801_yyyuuu123q 23.10.23 09:21 Сейчас в теме
Всем привет.
Не могу разобраться как получить периоды по рабочему времени.
Уже сделал:
Процедура ТабельУчетаРабВремМежВахта_ОбработкаПроведения(Отказ, РежимПроведения)

	// Проведение документа
	ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);

	ПараметрыПолученияФО = Новый Структура("Организация", Организация);
	ИспользуютсяТерритории = ПолучитьФункциональнуюОпцию("ИспользоватьОбособленныеТерритории", ПараметрыПолученияФО);
	ИспользуютсяУсловияТруда = ПолучитьФункциональнуюОпцию("ИспользоватьОсобыеУсловияТрудаВОрганизации", ПараметрыПолученияФО);

	СотрудникиСИсправленнымиДанными = Неопределено;
	ПолучатьДанныеТолькоПоСотрудникамСИсправлениями = Ложь;
	Если ЗначениеЗаполнено(ИсправленныйДокумент) Тогда
		СотрудникиСИсправленнымиДанными = СотрудникиСИсправленнымиДанными();
		ПолучатьДанныеТолькоПоСотрудникамСИсправлениями = Истина;
	КонецЕсли;	

	РеквизитыДляПроведения = Новый Структура();
	РеквизитыДляПроведения.Вставить("ПериодРегистрации", ПериодРегистрации);
	РеквизитыДляПроведения.Вставить("ИсправленныйДокумент", ИсправленныйДокумент);
	РеквизитыДляПроведения.Вставить("СотрудникиСИсправленнымиДанными", СотрудникиСИсправленнымиДанными);

	ДанныеДляПроведения = ТаблицаДанныхОВремени(ИспользуютсяТерритории, ИспользуютсяУсловияТруда, ПолучатьДанныеТолькоПоСотрудникамСИсправлениями, СотрудникиСИсправленнымиДанными);
	Если ПолучатьДанныеТолькоПоСотрудникамСИсправлениями Тогда
		СтруктураОтбора = Новый Структура("ИсправленныйСотрудник", Истина);
		УчетРабочегоВремениРасширенный.ЗарегистрироватьДанныеТабеля(Движения, ДанныеДляПроведения.Скопировать(СтруктураОтбора), ПериодРегистрации);
	Иначе
		УчетРабочегоВремениРасширенный.ЗарегистрироватьДанныеТабеля(Движения, ДанныеДляПроведения, ПериодРегистрации);
	КонецЕсли;

	ИсправлениеДокументовЗарплатаКадры.ПриПроведенииИсправления(Ссылка, Движения, РежимПроведения, Отказ, РеквизитыДляПроведения,, ЭтотОбъект);

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


Реузльтат не совсем корректный если человек работа 2 и 3 - а дальше не работал то некорректно получаю его период.
Прикрепленные файлы:
По теме из базы знаний
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот