Вывод предыдущего графика работ при кадровом переводе списком

1. AndrewUs 11 26.05.23 09:54 Сейчас в теме
Добрый день!
Конфигурация ERP 2.5/

Есть внешняя печатная для документа кадровый перевод списком, в которой отображается предыдущий график работы и новый график работы. Однако, если в предыдущем переводе сотрудника фигурировала дата возврата, то график с которого переводят отражается неверно.

Это цикл, который выводит на печать графики текущий и предыдущий:
Для Каждого ДанныеДетальныхЗаписей Из ДанныеСсылок.Строки Цикл
			
			СтруктураПоиска = Новый Структура;
			СтруктураПоиска.Вставить("Период", ДанныеДетальныхЗаписей.РаботаДатаНачалаПеревода);
			СтруктураПоиска.Вставить("Сотрудник", ДанныеДетальныхЗаписей.РаботаСотрудник);
			
			ДанныеПользовательскихПолей = ЗарплатаКадрыОтчеты.ЗначенияЗаполненияПользовательскихПолей(РезультатКомпоновки.ИдентификаторыМакета, ДанныеДетальныхЗаписей);
			
			ОбластьСтроки = РезультатКомпоновки.МакетПечатнойФормы.ПолучитьОбласть("Строка");
			ЗарплатаКадрыОтчеты.ЗаполнитьПараметрыОбластиМакета(ОбластьСтроки,
				ДанныеСсылок,
				ДанныеДетальныхЗаписей,
				ДанныеПользовательскихПолей);
					
			СтруктураГрафиковРабот = РегистрыСведений.ГрафикРаботыСотрудников.ПолучитьПоследнее(ДанныеДетальныхЗаписей.РаботаДатаНачалаПеревода - 1, Новый Структура("Сотрудник, ГоловнаяОрганизация", ДанныеДетальныхЗаписей.РаботаСотрудник, ДанныеДетальныхЗаписей.РаботаОрганизацияПрежняя));
			ОбластьСтроки.Параметры.ГрафикПрежний = СтруктураГрафиковРабот.ГрафикРаботы;
			СтруктураГрафиковРабот = РегистрыСведений.ГрафикРаботыСотрудников.ПолучитьПоследнее(КонецДня(ДанныеДетальныхЗаписей.РаботаДатаНачалаПеревода), Новый Структура("Сотрудник, ГоловнаяОрганизация", ДанныеДетальныхЗаписей.РаботаСотрудник, ДанныеДетальныхЗаписей.РаботаОрганизацияПрежняя));
			ОбластьСтроки.Параметры.РаботаГрафикРаботы = СтруктураГрафиковРабот.ГрафикРаботы;
			//Сообщить(ДанныеДетальныхЗаписей.РаботаДатаНачалаПеревода);
			
			СписокУмещаемыхОбластей = Новый Массив;
			СписокУмещаемыхОбластей.Добавить(ОбластьСтроки);
			СписокУмещаемыхОбластей.Добавить(ОбластьПодвал);
			
			Если НЕ ДокументРезультат.ПроверитьВывод(СписокУмещаемыхОбластей) Тогда
				
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
				ДокументРезультат.Вывести(ОбластьШапкиТаблицы);
				
			КонецЕсли;
			
			ДокументРезультат.Вывести(ОбластьСтроки);
			
		КонецЦикла;
Показать


Вся проблема в строке
СтруктураГрафиковРабот = РегистрыСведений.ГрафикРаботыСотрудников.ПолучитьПоследнее(ДанныеДетальныхЗаписей.РаботаДатаНачалаПеревода - 1, Новый Структура("Сотрудник, ГоловнаяОрганизация", ДанныеДетальныхЗаписей.РаботаСотрудник, ДанныеДетальныхЗаписей.РаботаОрганизацияПрежняя));


Подскажите, пожалуйста, как можно выбрать из РС "ГрафикРаботыСотрудников" график, не учитывая строки, где заполнено значение ДействуетДо?
По теме из базы знаний
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. Vitaly1C8 26.05.23 10:11 Сейчас в теме
(1) Покажите запрос. Проверьте, в запросе записи должны быть сгруппированы/отсортированы по Дате
6. AndrewUs 11 26.05.23 11:48 Сейчас в теме
(4)Полная процедура формирования

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

			
			СписокУмещаемыхОбластей = Новый Массив;
			СписокУмещаемыхОбластей.Добавить(ОбластьСтроки);
			СписокУмещаемыхОбластей.Добавить(ОбластьПодвал);
			
			Если НЕ ДокументРезультат.ПроверитьВывод(СписокУмещаемыхОбластей) Тогда
				
				ДокументРезультат.ВывестиГоризонтальныйРазделительСтраниц();
				ДокументРезультат.Вывести(ОбластьШапкиТаблицы);
				
			КонецЕсли;
			
			ДокументРезультат.Вывести(ОбластьСтроки);
			
		КонецЦикла;
		
		ДокументРезультат.Вывести(ОбластьПодвал);
		
		Если ОбъектыПечати <> Неопределено Тогда
			УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ДокументРезультат, ПерваяСтрокаПечатнойФормы, ОбъектыПечати, ДанныеСсылок.СсылкаНаОбъект);
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
Показать
2. AndrewUs 11 26.05.23 09:57 Сейчас в теме
Так выглядит регистр по одному из сотрудников и так заполняется кадровый перевод в поле предыдущий график работы
Прикрепленные файлы:
3. AndrewUs 11 26.05.23 09:59 Сейчас в теме
Цикл находится в модуле объекта
5. laperuz 46 26.05.23 10:56 Сейчас в теме
Как-то так

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


Это, естественно, вне цикла, в цикле поиск по итоговой таблице значений по сотруднику.
7. AndrewUs 11 26.05.23 15:58 Сейчас в теме
Вопрос решён. Спасибо.
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

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