Обновление информации в справочнике по текущей дате отчёта, настраиваемого через СКД

1. user2038652 22.09.24 12:18 Сейчас в теме
Добрый день. Есть справочник "СведенияОСтаже" в котором рассчитывается стаж сотрудника по кнопке "Рассчитать стаж"
При изменении даты для расчёты, даты увольнения пересчитывается табличная часть (лет. месяцев, дней). Форма данного справочника показана на первом скриншоте.

В общем модуле "СведенияОСтаже" есть процедура для пересчёта табличной части справочника "СведенияОСтаже"
Процедура РасчётСтажаПоСтроке(Стр, ДатаДляРасчёта) Экспорт  
	
	Если Стр.ДатаУвольнения = Дата('00010101') Тогда  
		ДатаУвольнения = ДатаДляРасчёта;
	ИначеЕсли Стр.ДатаУвольнения > ДатаДляРасчёта Тогда
		ДатаУвольнения = ДатаДляРасчёта;
	Иначе
		ДатаУвольнения = Стр.ДатаУвольнения; 
	КонецЕсли;
	
	Лет = Год(ДатаУвольнения) - Год(Стр.ДатаПриёма);
	Мес = Месяц(ДатаУвольнения) - Месяц(Стр.ДатаПриёма);
	Если Мес < 0 Тогда
		Лет = Лет - 1;
		Мес = 12 - Месяц(Стр.ДатаПриёма) + Месяц(ДатаУвольнения);
	КонецЕсли;	  
	КоличествоДней = День(ДатаУвольнения) - День(Стр.ДатаПриёма);
	Если КоличествоДней < 0 Тогда
		Мес = Мес - 1;
		КоличествоДней = День(КонецМесяца(Стр.ДатаПриёма)) + КоличествоДней;
	КонецЕсли;                        	
	
	//Вывод результата
	Стр.Лет = Лет;
	Стр.Месяцев = Мес;
	Стр.Дней = КоличествоДней;
КонецПроцедуры    
Показать


а также функция для расчёта общего стажа по столбцам в табличной части
Функция РасчётОбщегоСтажаПоСтолбцам(ТабличнаяЧасть) Экспорт 
	
	СуммаЛет = 0; 
	СуммаМесяцев = 0;
	СуммаДней = 0;
	
	Для Каждого Строка из ТабличнаяЧасть Цикл 
		СуммаЛет = СуммаЛет + Строка.Лет; 
		СуммаМесяцев = СуммаМесяцев + Строка.Месяцев;
		Если СуммаМесяцев > 12 Тогда
			СуммаЛет = СуммаЛет + 1;
			СуммаМесяцев = СуммаМесяцев - 12;
		КонецЕсли;	
		СуммаДней = СуммаДней + Строка.Дней;
		Если СуммаДней > 30 Тогда
			СуммаМесяцев = СуммаМесяцев + 1;
			СуммаДней = СуммаДней - 30;
		ИначеЕсли СуммаДней > 365 Тогда
			СуммаЛет = СуммаЛет + 1;
			СуммаДней = СуммаДней - 365;
		КонецЕсли;
	КонецЦикла;                      
		
	Возврат Новый Структура("СуммаЛет, СуммаМесяцев, СуммаДней", СуммаЛет, СуммаМесяцев, СуммаДней); 
КонецФункции
Показать


В самом справочнике "СведенияОСтаже" затем вызывается так:
&НаКлиенте
Процедура РасчётТрудовогоСтажаДатаПриёмаПриИзменении(Элемент)
	СведенияОСтаже.РасчётСтажаПоСтроке(Элементы.РасчётТрудовогоСтажа.ТекущиеДанные, Объект.ДатаДляРасчёта);
КонецПроцедуры



Подскажите. пожалуйста, как в отчёте СКД, который формируется по дате сделать так, чтобы по сотруднику в поля (лет, месяцев, дней) подставлялся общий расчёт стажа по столбцам табличной части "СведенияОСтаже"

Мне получается по формируемой дате отчёта нужно каким-то образом обновить табличную часть справочника "СведенияОСтаже" по сотрудникам на дату формирования отчёта.. как это реализовать:?

затем нужно рассчитать в отчёте поля по общим(лет. месяцев, дней) сотрудника.. как можно такое сделать?
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vudix 1 22.09.24 18:14 Сейчас в теме
Привет, только что проснулся, мог что-то упустить или неправильно понять, извиняюсь заранее.

Что нужно сделать:

Пересчитай стаж на дату отчета: Перед формированием отчета пройдись по справочнику "СведенияОСтаже" и пересчитай стаж для всех сотрудников на нужную дату.

Вызови пересчет перед отчетом: В модуле, где вызываешь отчет, перед этим вставь вызов процедуры пересчета стажа.

Добавь в СКД суммарный стаж: В отчете добавь вычисляемое поле для суммарного стажа с использованием твоей функции РасчётОбщегоСтажаПоСтолбцам.

Потом отчет должен показывать актуальный стаж на нужную дату. Отпиши, если что-то не сработает!
3. пользователь 22.09.24 21:57
Сообщение было скрыто модератором.
...
Оставьте свое сообщение

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