Как в Камин Зарплата при печати сделать так, чтобы не объединял Сотрудника

1. user1495014 01.03.23 09:13 Сейчас в теме
Добрый день! Нужна ваша помощь.
1С-КАМИН: Зарплата для бюджетных учреждений. Версия 5.5 (5.5.73.3)

При печати документа Табель учета рабочего времени он объединяет сотрудника с одним ФИО по принципу основное время работы или он замещает другого сотрудника.
На файле "Табель" Видно что есть сотрудница Лебедева и по ней 4 записи
1. Ее основное время работы
2, 3, 4 она замещала кого-то.
Но при печати "ТабельПечать" видно что стало 2 записи
первая запись это ее основное время работы и вторая это замещение суммарно.
Не могу понять как сделать так что бы записи выводились все отдельно.

Вот процедура формирования печатного документа
// Вывод на печать одного документа по форме № 0504421 
Процедура ПечатьОдногоДокумента0504421(ТабДок, ДанныеДляПечати, ДатаНачала, ДатаОкончания, Бланк, ИндексСтроки) Экспорт
	
	ВидыВремени = ПолучитьИспользуемыеВидыВремени();
	
	ГрафикиРаботыСотрудников = ПолучитьГрафикиРаботы(ДанныеДляПечати, ДатаНачала, ДатаОкончания); 
	
	Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.ТабельУчетаРабочегоВремени.ПФ_MXL_Форма0504421_30032015");
	
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	                              	
	ПараметрыОбласти = Новый Структура("запериод, Номер, ДатаСоставления, ОКПО, Организация, НомерКорректировки");
	
	Если ТипЗнч(ДанныеДляПечати) = Тип("Структура") И ДанныеДляПечати.Свойство("ДатаНачала") Тогда
		ТекДатаНачалаПериод = ДанныеДляПечати.ДатаНачала; 
	Иначе
		ТекДатаНачалаПериод = ДатаНачала;
	КонецЕсли;
	
	ПараметрыОбласти.ЗаПериод = "За период с " + Формат(ТекДатаНачалаПериод, "ДФ=d") + " по " + Формат(ДатаОкончания, "ДФ=d") + " " +
	НРег(ОбщегоНазначенияСервер.СклонятьСлово(Формат(ДатаОкончания, "Л=ru_RU; ДФ=MMMM"), "Р", Перечисления.ПолФизическогоЛица.Мужской, , Ложь)) + " " + 
	Формат(ДатаОкончания, "ДФ=yyyy") + " г.";
	ПараметрыОбласти.Номер = ДанныеДляПечати.Номер;
	ПараметрыОбласти.ДатаСоставления	= Формат(ДанныеДляПечати.Дата, "ДФ=dd.MM.yyyy");
	ПараметрыОбласти.ОКПО = ДанныеДляПечати.ОКПО;
	ПараметрыОбласти.Организация = ДанныеДляПечати.ОрганизацияНаименованиеПолное;
	ПараметрыОбласти.НомерКорректировки = ДанныеДляПечати.НомерКорректировки;
	ОбластьШапка.Параметры.Заполнить(ПараметрыОбласти);                              	
	
	Если Не ДанныеДляПечати.ФлажокВыводитьДанныеНаПечатьВЦеломПоУчреждению Тогда
		ПараметрыОбласти = Новый Структура("Подразделение");
		ПараметрыОбласти.Подразделение = ДанныеДляПечати.Подразделение;
		ОбластьШапка.Параметры.Заполнить(ПараметрыОбласти);
	КонецЕсли;
	
	ПараметрыОбласти = Новый Структура("ВидТабеля");
	Если ДанныеДляПечати.НомерКорректировки > 0 Тогда
		ПараметрыОбласти.ВидТабеля = "корректирующий";
	Иначе
		ПараметрыОбласти.ВидТабеля = "первичный";
	КонецЕсли;
	ОбластьШапка.Параметры.Заполнить(ПараметрыОбласти);
	
	ТабДок.Вывести(ОбластьШапка);
	
	СекцияШапка = Макет.ПолучитьОбласть("ШапкаТаблицы");
	ТабДок.Вывести(СекцияШапка);
	
	ЗаполнятьВЧасахИМинутах = ДанныеДляПечати.Организация.ЗаполнятьТабельУчетаРабочегоВремениВЧасахИМинутах;
		
	НомерСтроки = 0;
	Для Каждого ТекСтрока Из ДанныеДляПечати.ТаблицаСотрудников Цикл
		
		НомерСтроки = НомерСтроки + 1;
		
		ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
		
		ПараметрыОбласти = Новый Структура("ТабНомер, Сотрудник, Должность, СтатусРаботы, КоличествоСтавок");
		ПараметрыОбласти.ТабНомер = ТекСтрока.ТабНомер;
		ПараметрыОбласти.СтатусРаботы = ТекСтрока.СтатусРаботы;
		ПараметрыОбласти.КоличествоСтавок = ТекСтрока.КоличествоСтавок;
		ПараметрыОбласти.Сотрудник = Формат(НомерСтроки, "ЧГ=0") + ". " + ОбщегоНазначенияСервер.ФИО(ТекСтрока.Сотрудник, ?(ДанныеДляПечати.ВыводитьФИОСотрудниковПолностью0505521, 0, 1));
		ПараметрыОбласти.Должность = СокрЛП(ТекСтрока.Должность); 
		
		
				Если ТекСтрока.Замещение = 2 Тогда
			ПараметрыОбласти.Должность = СокрЛП(ПараметрыОбласти.Должность) + " (дежурство)";
		ИначеЕсли ТекСтрока.Замещение = 1 Тогда
		 	ПараметрыОбласти.Должность = СокрЛП(ПараметрыОбласти.Должность) + " (замещение)";
		КонецЕсли;
		
		ОбластьСтрока.Параметры.Заполнить(ПараметрыОбласти);
		
		Если Бланк Тогда
			МасивОбластей = Новый Массив(2);
			МасивОбластей[0] = ОбластьСтрока;
			МасивОбластей[1] = Макет.ПолучитьОбласть("Подвал");
			Если НЕ ТабДок.ПроверитьВывод(МасивОбластей) Тогда
				ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
				ТабДок.Вывести(СекцияШапка);
			КонецЕсли;
			
			ТабДок.Вывести(ОбластьСтрока);
			
			Продолжить;
		КонецЕсли;
		
		ТЗИтоги = Новый ТаблицаЗначений;
		ТЗИтоги.Колонки.Добавить("ВидВремени");
		ТЗИтоги.Колонки.Добавить("Дни");
		ТЗИтоги.Колонки.Добавить("ДниПолМесяца");
		ТЗИтоги.Колонки.Добавить("Часы");
		ТЗИтоги.Колонки.Добавить("ЧасыПолМесяца");
		
		ТекДата = ДатаНачала;
		НомерКолонки = 1;
		Пока ТекДата <= ДатаОкончания Цикл
			
			СтрокаВидВремени = "";
			Часы = 0;
			
			Отбор = Новый Структура("Сотрудник, Должность, Подразделение, Табель, СтатусРаботы, Замещение");
			ЗаполнитьЗначенияСвойств(Отбор, ТекСтрока, "Сотрудник, Должность, Подразделение, Табель, СтатусРаботы, Замещение");
			Отбор.Вставить("Дата", ТекДата);
			НайденныеСтроки = ГрафикиРаботыСотрудников.НайтиСтроки(Отбор);		
			
			
			Для Каждого ТекНайденнаяСтрока Из НайденныеСтроки Цикл
				
				Если ТекНайденнаяСтрока.ВидВремени.Код = "Я" И Не ДанныеДляПечати.ВыводитьЯвки Тогда
					Продолжить;
				КонецЕсли;                  				
				
				Если ТекНайденнаяСтрока.ВидВремени <> ВидыВремени.ВыходныеДни И ТекНайденнаяСтрока.ВидВремени <> ПланыВидовРасчета.ВидыВремени.ПустаяСсылка() Тогда
					
					//И Не ЭтоНевыходСЧасами(ТекНайденнаяСтрока.ВидВремени) Тогда
					СтрокаТЗИтоги = ТЗИтоги.Добавить();
					СтрокаТЗИтоги.ВидВремени = ТекНайденнаяСтрока.ВидВремени;
					Если ЭтоНевыходСЧасами(ТекНайденнаяСтрока.ВидВремени) Тогда
						СтрокаТЗИтоги.Дни = 0;
					Иначе
						СтрокаТЗИтоги.Дни = 1;
					КонецЕсли;
					СтрокаТЗИтоги.Часы = ТекНайденнаяСтрока.Часы;
					Если НомерКолонки <= 15 Тогда
						СтрокаТЗИтоги.ДниПолМесяца = СтрокаТЗИтоги.Дни;
						СтрокаТЗИтоги.ЧасыПолМесяца = ТекНайденнаяСтрока.Часы;
					КонецЕсли;
				КонецЕсли; 	
				
				Если НайденныеСтроки.Количество() = 1 Тогда
					СтрокаВидВремени = ТекНайденнаяСтрока.ВидВремени.Код4421;	
				ИначеЕсли НайденныеСтроки.Количество() > 1 Тогда
					
					СтрокаВидВремени = СтрокаВидВремени + ?(СтрокаВидВремени = "", "", " ") + ТекНайденнаяСтрока.ВидВремени.Код4421;
					Если ЗаполнятьВЧасахИМинутах Тогда
						СтрокаВидВремени = СтрокаВидВремени + ?(ТекНайденнаяСтрока.Часы <> 0, "/" 
						+ Формат(ПолучитьВремяВМинутах(ТекНайденнаяСтрока.Часы), "ЧДЦ=2; ЧРД=:"), "");
					Иначе
						СтрокаВидВремени = СтрокаВидВремени + ?(ТекНайденнаяСтрока.Часы <> 0, "/" + СокрЛП(ТекНайденнаяСтрока.Часы),"");
					КонецЕсли;
					
				КонецЕсли;
				
				Если ТекНайденнаяСтрока.Часы <> 0 И Не ЭтоНевыходСЧасами(ТекНайденнаяСтрока.ВидВремени) Тогда
					Если ТекНайденнаяСтрока.ВидВремени = ВидыВремени.РаботаНочныеЧасы Тогда
						Если НайденныеСтроки.Количество() = 1 Тогда
							// Если в строке только ночные часы вывод информации о количестве этих часов.
							Часы = Часы + ТекНайденнаяСтрока.Часы;
						КонецЕсли;
					Иначе 
						Часы = Часы + ТекНайденнаяСтрока.Часы;
					КонецЕсли;
				КонецЕсли;
				
				Если ТекНайденнаяСтрока.ВидВремени.Код = "Я" И ДанныеДляПечати.ВыводитьЯвки И ДанныеДляПечати.ВыводитьЯвкиТолькоИтоги Тогда
					СтрокаВидВремени = "";
				КонецЕсли;
				
			КонецЦикла;
			
			// Заполняется, если есть отклонение. Время выводится сверху.
			Если СтрокаВидВремени <> "" Тогда
				ПараметрыОбласти = Новый Структура("Дн" + СокрЛП(НомерКолонки) + ", " + "Час" + СокрЛП(НомерКолонки));	
				ПараметрыОбласти["Дн" + СокрЛП(НомерКолонки)] = СтрокаВидВремени;
				Если ЗаполнятьВЧасахИМинутах Тогда
					ПараметрыОбласти["Час" + СокрЛП(НомерКолонки)] = ?(Часы = 0, "", Формат(ПолучитьВремяВМинутах(Часы), "ЧДЦ=2; ЧРД=:"));
				Иначе
					ПараметрыОбласти["Час" + СокрЛП(НомерКолонки)] = ?(Часы = 0, "", Строка(Часы));
				КонецЕсли;
				ОбластьСтрока.Параметры.Заполнить(ПараметрыОбласти);
			КонецЕсли;
			
			ТекДата = ТекДата + 60*60*24;
			НомерКолонки = НомерКолонки + 1;
		КонецЦикла;
		
		ПолМесяцаЯвокНеявокДней = "";
		МесяцЯвокНеявокДней = "";
		ПолМесяцаЯвокНеявокЧасов = "";
		МесяцЯвокНеявокЧасов = "";					
		
		Если ТЗИтоги.Количество() > 0 Тогда
			ТЗИтоги.Свернуть("ВидВремени", "Дни,ДниПолМесяца,Часы,ЧасыПолМесяца");			
			Для Каждого СтрокаТЗИтоги Из ТЗИтоги Цикл
				Если СтрокаТЗИтоги.ДниПолМесяца > 0 Тогда 
					ПолМесяцаЯвокНеявокДней = ПолМесяцаЯвокНеявокДней + ?(ПолМесяцаЯвокНеявокДней = "", "", ", ") + СтрокаТЗИтоги.ВидВремени.Код4421 + "/" + СтрокаТЗИтоги.ДниПолМесяца;
				КонецЕсли;
				Если СтрокаТЗИтоги.ЧасыПолМесяца > 0 Тогда 
					ПолМесяцаЯвокНеявокЧасов = ПолМесяцаЯвокНеявокЧасов + ?(ПолМесяцаЯвокНеявокЧасов = "", "", ", ") + СтрокаТЗИтоги.ВидВремени.Код4421 + "/" + Окр(СтрокаТЗИтоги.ЧасыПолМесяца,2);
				КонецЕсли;
				Если СтрокаТЗИтоги.Дни > 0 Тогда 
					МесяцЯвокНеявокДней = МесяцЯвокНеявокДней + ?(МесяцЯвокНеявокДней = "", "", ", ") + СтрокаТЗИтоги.ВидВремени.Код4421 + "/" + СтрокаТЗИтоги.Дни;
				КонецЕсли;
				
				Если СтрокаТЗИтоги.Часы > 0 Тогда 
					МесяцЯвокНеявокЧасов = МесяцЯвокНеявокЧасов + ?(МесяцЯвокНеявокЧасов = "", "", ", ") + СтрокаТЗИтоги.ВидВремени.Код4421 + "/" + Окр(СтрокаТЗИтоги.Часы,2);
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		
		ПараметрыОбласти = Новый Структура("ПолМесяцаЯвокНеявокДней, МесяцЯвокНеявокДней, ПолМесяцаЯвокНеявокЧасов, МесяцЯвокНеявокЧасов");	
		ПараметрыОбласти.ПолМесяцаЯвокНеявокДней = ПолМесяцаЯвокНеявокДней;
		ПараметрыОбласти.МесяцЯвокНеявокДней = МесяцЯвокНеявокДней;
		ПараметрыОбласти.ПолМесяцаЯвокНеявокЧасов = ПолМесяцаЯвокНеявокЧасов;
		ПараметрыОбласти.МесяцЯвокНеявокЧасов = МесяцЯвокНеявокЧасов;						
		ОбластьСтрока.Параметры.Заполнить(ПараметрыОбласти);
		
		Если НомерСтроки = ДанныеДляПечати.ТаблицаСотрудников.Количество() Тогда
			МасивОбластей = Новый Массив(2);
			МасивОбластей[0] = ОбластьСтрока;
			МасивОбластей[1] = Макет.ПолучитьОбласть("Подвал");
		Иначе
			МасивОбластей = Новый Массив(1);
			МасивОбластей[0] = ОбластьСтрока;
		КонецЕсли;
		
		Если НЕ ТабДок.ПроверитьВывод(МасивОбластей) Тогда
			ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
			ТабДок.Вывести(СекцияШапка);
		КонецЕсли;
		
		
		ТабДок.Вывести(ОбластьСтрока);
		
	КонецЦикла;
	
	ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
	ДолжностныеЛица = РегистрыСведений.ДолжностныеЛица.ПолучитьПоследнее(ДанныеДляПечати.Дата, Новый Структура("Организация", ДанныеДляПечати.Организация));
	
	ПараметрыОбласти = Новый Структура("ПодписьИсполнителяБухгалтера, ДолжностьИсполнителяБухгалтера");	
	ПараметрыОбласти.ПодписьИсполнителяБухгалтера = ОбщегоНазначенияСервер.ФИОВизирующего(ДолжностныеЛица.ГлавныйБухгалтер, ?(ДанныеДляПечати.ВыводитьФИОСотрудниковПолностью0505521, 0, 1));
	ПараметрыОбласти.ДолжностьИсполнителяБухгалтера = "";
	
	ТекСтатусРаботыПоУмолчанию = Константы.СтатусРаботыПоУмолчанию.Получить();
	
	// Должность главного бухгалтера.
	Если ЗначениеЗаполнено(ДолжностныеЛица.ГлавныйБухгалтер) Тогда
		ТаблицаРаботы = ОбщегоНазначенияСервер.ТаблицаРаботыСотрудника(ДанныеДляПечати.Организация, ДолжностныеЛица.ГлавныйБухгалтер, ДанныеДляПечати.Дата,, Истина,,, Ложь);
		Отбор = Новый Структура("Сотрудник, СтатусРаботы", ДолжностныеЛица.ГлавныйБухгалтер, ТекСтатусРаботыПоУмолчанию);
		НайденныеСтроки = ТаблицаРаботы.НайтиСтроки(Отбор);
		Если НайденныеСтроки.Количество() > 0 Тогда
			ПараметрыОбласти.ДолжностьИсполнителяБухгалтера = НайденныеСтроки[0].Должность; 
		ИначеЕсли ТаблицаРаботы.Количество() > 0 Тогда
			ПараметрыОбласти.ДолжностьИсполнителяБухгалтера = ТаблицаРаботы[0].Должность; 
		КонецЕсли;
	КонецЕсли;
	ОбластьПодвал.Параметры.Заполнить(ПараметрыОбласти);
	
	// Визирование.
	ПараметрыОбласти = Новый Структура("ПодписьИсполнителяБухгалтера, ДолжностьИсполнителяБухгалтера, Ответственный, ДолжностьОтветственного, Исполнитель, ДолжностьИсполнителя");	
	СтруктураПараметров = Новый Структура;
	СтруктураПараметров.Вставить("Бухгалтер", "ПодписьИсполнителяБухгалтера");
	СтруктураПараметров.Вставить("БухгалтерДолжность", "ДолжностьИсполнителяБухгалтера");
	СтруктураПараметров.Вставить("Ответственный", "Ответственный");
	СтруктураПараметров.Вставить("ОтветственныйДолжность", "ДолжностьОтветственного");
	СтруктураПараметров.Вставить("Исполнитель", "Исполнитель");
	СтруктураПараметров.Вставить("ИсполнительДолжность", "ДолжностьИсполнителя");
	МодульДокументовСервер.УстановитьВизирующего(ДанныеДляПечати.Организация, Перечисления.ОбъектыДляВизирования.ТабельУчетаРабочегоВремени, ПараметрыОбласти, СтруктураПараметров, ДанныеДляПечати.Подразделение);
	
	Если ЗначениеЗаполнено(ДанныеДляПечати.Исполнитель0504421) Тогда
		// Заполнение исполнителя из настроек.
		ПараметрыОбласти.Исполнитель = ОбщегоНазначенияСервер.ФИОВизирующего(ДанныеДляПечати.Исполнитель0504421, ?(ДанныеДляПечати.ВыводитьФИОСотрудниковПолностью0505521, 0, 1));
		ТаблицаРаботы = ОбщегоНазначенияСервер.ТаблицаРаботыСотрудника(ДанныеДляПечати.Организация, ДанныеДляПечати.Исполнитель0504421, ДанныеДляПечати.Дата,, Истина,,, Ложь);
		Отбор = Новый Структура("Сотрудник, СтатусРаботы", ДанныеДляПечати.Исполнитель0504421, ТекСтатусРаботыПоУмолчанию);
		НайденныеСтроки = ТаблицаРаботы.НайтиСтроки(Отбор);
		Если НайденныеСтроки.Количество() > 0 Тогда
			ПараметрыОбласти.ДолжностьИсполнителя = НайденныеСтроки[0].Должность; 
		ИначеЕсли ТаблицаРаботы.Количество() > 0 Тогда
			ПараметрыОбласти.ДолжностьИсполнителя = ТаблицаРаботы[0].Должность;
		Иначе
			ПараметрыОбласти.ДолжностьИсполнителя = "";	
		КонецЕсли;	
	КонецЕсли;
	Если ЗначениеЗаполнено(ДанныеДляПечати.ОтветственныйИсполнитель0504421) Тогда
		// Заполнение ответственного исполнителя из настроек.
		ПараметрыОбласти.Ответственный = ОбщегоНазначенияСервер.ФИОВизирующего(ДанныеДляПечати.ОтветственныйИсполнитель0504421, ?(ДанныеДляПечати.ВыводитьФИОСотрудниковПолностью0505521, 0, 1));
		ТаблицаРаботы = ОбщегоНазначенияСервер.ТаблицаРаботыСотрудника(ДанныеДляПечати.Организация, ДанныеДляПечати.ОтветственныйИсполнитель0504421, ДанныеДляПечати.Дата,, Истина,,, Ложь);
		Отбор = Новый Структура("Сотрудник, СтатусРаботы", ДанныеДляПечати.ОтветственныйИсполнитель0504421, ТекСтатусРаботыПоУмолчанию);
		НайденныеСтроки = ТаблицаРаботы.НайтиСтроки(Отбор);
		Если НайденныеСтроки.Количество() > 0 Тогда
			ПараметрыОбласти.ДолжностьОтветственного = НайденныеСтроки[0].Должность; 
		ИначеЕсли ТаблицаРаботы.Количество() > 0 Тогда
			ПараметрыОбласти.ДолжностьОтветственного = ТаблицаРаботы[0].Должность;
		Иначе
			ПараметрыОбласти.ДолжностьОтветственного = "";	
		КонецЕсли;	
	КонецЕсли;
	
	МассивУдаляемыхПолей = Новый Массив;
	Для Каждого ТекЭлемент Из ПараметрыОбласти Цикл
		Если Не ЗначениеЗаполнено(ТекЭлемент.Значение) Тогда
			МассивУдаляемыхПолей.Добавить(ТекЭлемент.Ключ);
		ИначеЕсли ТипЗнч(ТекЭлемент.Значение) = Тип("СправочникСсылка.Сотрудники") Тогда
			ПараметрыОбласти[ТекЭлемент.Ключ] = ОбщегоНазначенияСервер.ФИОВизирующего(ТекЭлемент.Значение, ?(ДанныеДляПечати.ВыводитьФИОСотрудниковПолностью0505521, 0, 1));
		КонецЕсли;
	КонецЦикла;
	Для Каждого ТекКлюч Из МассивУдаляемыхПолей Цикл
		ПараметрыОбласти.Удалить(ТекКлюч);
	КонецЦикла;
	
	Если ПараметрыОбласти.Свойство("ПодписьИсполнителяБухгалтера") И Не ПараметрыОбласти.Свойство("ДолжностьИсполнителяБухгалтера") Тогда
		// Иключение вывода должности из старых данных.
		ПараметрыОбласти.Вставить("ДолжностьИсполнителяБухгалтера", "");
	КонецЕсли;
	
	ОбластьПодвал.Параметры.Заполнить(ПараметрыОбласти);
	
	ТабДок.Вывести(ОбластьПодвал);
	ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
	
КонецПроцедуры
Показать
Прикрепленные файлы:
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
Оставьте свое сообщение

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