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