Как в Камин Зарплата при печати сделать так, чтобы не объединял Сотрудника
Добрый день! Нужна ваша помощь.
1С-КАМИН: Зарплата для бюджетных учреждений. Версия 5.5 (5.5.73.3)
При печати документа Табель учета рабочего времени он объединяет сотрудника с одним ФИО по принципу основное время работы или он замещает другого сотрудника.
На файле "Табель" Видно что есть сотрудница Лебедева и по ней 4 записи
1. Ее основное время работы
2, 3, 4 она замещала кого-то.
Но при печати "ТабельПечать" видно что стало 2 записи
первая запись это ее основное время работы и вторая это замещение суммарно.
Не могу понять как сделать так что бы записи выводились все отдельно.
Вот процедура формирования печатного документа
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));
КонецЕсли;
КонецЦикла;
Для Каждого ТекКлюч Из МассивУдаляемыхПолей Цикл
ПараметрыОбласти.Удалить(ТекКлюч);
КонецЦикла;
Если ПараметрыОбласти.Свойство("ПодписьИсполнителяБухгалтера") И Не ПараметрыОбласти.Свойство("ДолжностьИсполнителяБухгалтера") Тогда
// Иключение вывода должности из старых данных.
ПараметрыОбласти.Вставить("ДолжностьИсполнителяБухгалтера", "");
КонецЕсли;
ОбластьПодвал.Параметры.Заполнить(ПараметрыОбласти);
ТабДок.Вывести(ОбластьПодвал);
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
КонецПроцедуры
ПоказатьПрикрепленные файлы:


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