Стаж работы на предприятии (количество лет, месяцев, дней) от даты приема до даты отчета

09.06.21

Учетные задачи - Зарплата

Доработка отчета "Личные данные сотрудников" путем настройки трех пользовательских полей системы компоновки данных, в режиме 1С:Предприятие. Конфигуратор не требуется. Конфигурации: ЗУП 3.1, ЗГУ 3.1, с 3.1.14. Проверял на ЗУП 3.1.17.171.

Постановка задачи

Сформировать список работающих по трудовому договору сотрудников, для каждого из них вывести ФИО, дату приема, должность и стаж работы на предприятии - количество лет, месяцев и дней, прошедших с даты приема.

Пример (на дату 08.06.2021)
Иванов Иван Иванович, принят 21.11.2019, стаж 1 год 6 месяцев 18 дней

Почему пришлось написать новую статью

Сначала я искал готовые решения на Инфостарте и других ресурсах. Нашел файлы самописных отчетов, и ни один из них меня не устроил.

Первый попавшийся отчет строился на регистре «ТекущиеКадровыеДанныеСотрудников» - закрыл эту статью сразу же.

Второй был построен грамотнее, показатели считались в запросе, и формулы были выложены в статье. Но вот с формулами там было что-то напутано, нужный мне результат не смог получить, рассчитывая по этим формулам вручную. Кроме того, статья была довольно старая, и нет гарантии, что заработает в актуальном релизе.

При этом мне известно, что типовой отчет "Личные данные сотрудников" уже умеет отделять работающих сотрудников от уволенных, а также не учитывает договора подряда.

Поэтому я решил, что будет правильнее доработать типовой готовый отчет, путем добавления трех пользовательских полей.

Настройку отчета можно будет сохранить, а если она «слетит» при очередном обновлении – так же легко можно будет и восстановить, так как формулы расчета сохранил у себя в файле и в этой статье.

Формулы расчета стажа на языке выражений СКД

Для решения задачи у нас есть следующие исходные данные

1. Дата, по состоянию на которую формируется отчет (это параметр отчета "Личные данные").

2. Дата приема сотрудника.

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

Первое, что нужно рассчитать – это количество полных месяцев с даты приема до даты отчета. В нашем примере (с 21.11.2019) получается 18 полных месяцев. Если прибавить 18 месяцев к дате приема, получаем 21.05.2021, что меньше даты отчета (08.06.2021).

В языке выражений СКД есть функция РазностьДат(), в нашем приемер она дает 19 месяцев между датами отчета и датой приема. Поэтому при расчеете нужно проверять: если к дате приема прибавляем разность дат и полученная дата больше даты отчета, нужно отнять один месяц.

Формула на языке выражений СКД будет выглядеть так:
 

ВЫБОР КОГДА НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ") ТОГДА -1 ИНАЧЕ 0 КОНЕЦ + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")
 

Обратите внимание, что при сравнении дат обе приводятся к началу дня. Полученный показатель назову условно КолМесяцев, чтобы использовать его для пояснения алгоритма расчета в других формулах.

Теперь можно рассчитать количество полных лет, которые сотрудник отработал на предприятии: это количество полных месяцев, деленное на 12. От полученного числа нужно взять целую часть. Упрощенно формула выглядит так:

Цел(КолМесяцев/12)

Подставляем выражение расчета количества полных месяцев, получаем формулу расчета отработанных лет на языке выражений СКД:

Цел((ВЫБОР КОГДА НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ") ТОГДА -1 ИНАЧЕ 0 КОНЕЦ + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ"))/12)

Зная количество отработанных лет и количество полных месяцев стажа, легко рассчитать количество месяцев стажа, исключая отработанные годы: КолМесяцев-СтажЛет*12

Формула на языке СКД для количества месяцев стажа:

ВЫБОР КОГДА НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата],"ДЕНЬ") ТОГДА -1 ИНАЧЕ 0 КОНЕЦ +РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ") - 12 * Цел((Выбор Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ") Тогда -1 Иначе 0 Конец + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")) / 12)

Наконец, осталось посчитать количество дней, по следующему алгоритму: к дате приема добавляем количество полных месяцев, а затем считаем разницу в днях между датой отчета и полученной датой.

РазностьДат(ДобавитьКДате([Дата приема], "МЕСЯЦ", Выбор Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ") Тогда -1   Иначе 0 Конец + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), [Параметры.Дата], "ДЕНЬ")

Доработка варианта отчета, сохранение варианта

 

Для доработки варианта отчета открываем раздел «Кадры» - «Кадровые отчеты» - «Личные данные сотрудников». На форме отчета есть кнопка «Еще» - нажимаем еще, выбираем «Прочее» - «Изменить вариант отчета».

 

 

Переходим на вкладку «Пользовательские поля», нажимаем кнопку «Добавить», тип поля – выражение, и создаем поле «Стаж работы на предприятии, лет». В заголовок пишем произвольный заголовок поля, в выражение детальных записей – формулу расчета количества лет, см. выше. Выражение итоговых записей не заполняем. Нажимаем кнопку ОК.

Точно так же добавляем поля расчета месяцев и дней.

 

В итоге мы добавили в отчет три пользовательских поля, нажимаем кнопку «Завершить редактирование». Но это еще не все, требуется добавить наши поля в список полей отчета.

 

 

Для добавления полей на форме отчета нужно нажать кнопку «Настройка» - откроется окно настройки, сразу же переключаемся в расширенный режим, и на вкладке «Поля и сортировки» добавляем только что созданные пользовательские поля – стаж работы на предприятии. Теперь можно нажать кнопку «Закрыть и сформировать».



 

Чтобы настройка отчета сохранилась для последующего использования, нужно сохранить вариант отчета – нажать маленькую кнопочку справа от кнопки «Настройка» и выбрать пункт «Сохранить вариант отчета».  Далее потребуется присвоить имя варианту отчета, я указал – «Личные данные сотрудников – стаж работы на предприятии».


 

После сохранения настройки отчет можно легко найти в списке кадровых отчетов:

 

Расчет стажа от даты приема

См. также

Зарплата Регламентированный учет и отчетность Кадровый учет Обновление 1С Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 Бухгалтерский учет Налоговый учет Управленческий учет Акцизы ЕНВД ЕСН Земельный налог ИП, ПБОЮЛ, КФХ Налог на имущество Налог на прибыль НДС НДФЛ ФОМС, ЕФС Транспортный налог УСН ПСН (патентная система налогообложения) Платные (руб)

Обновления для конфигураций: КА 1.1; ЗУП 2.5; БУХ 2.0; КА 1.1 Комплексная автоматизация торговли алкогольной продукцией; КА 1.1 Комплексный учет сельскохозяйственного предприятия

27900 руб.

01.04.2020    147101    649    360    

235

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

48000 руб.

24.04.2017    51027    100    165    

89

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    25035    23    1    

25

Зарплата Производство готовой продукции (работ, услуг) Учет рабочего времени Рабочее место Бизнес-аналитик Пользователь Руководитель проекта Платформа 1С v8.3 1С:Управление торговлей 10 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Торговля и склад 7.7 Бытовые услуги, сервис Оптовая торговля, дистрибуция, логистика Электротехника и микроэлектроника Управленческий учет Платные (руб)

Модуль или расширение «Сервисный центр для 1С» позволяет принимать в ремонт оборудование (компьютеры, бытовая техника и т.п.), оформлять заявки инженеров на посещение клиентов и вести начисление заработной платы для сотрудников. Позволяет наладить автоматизированный учет в сервисном центре на уже существующей базе.

14800 руб.

01.11.2012    94138    115    1    

117

SALE! 20%

Зарплата Роли и права Системный администратор Бухгалтер Платформа 1С v8.3 Бухгалтерский учет Управление правами 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Комплексная автоматизация 2.х Молдова Россия Казахстан Бухгалтерский учет Платные (руб)

Расширение позволяет максимально полно ограничить доступ пользователей к данным по заработной плате, а именно закрывает доступ к документам начисления и выплаты заработной платы, не позволяет просматривать бухгалтерские отчеты по счету учета зарплаты а также убирает зарплатные проводки из журнала проводок. Расширение запрещает просматривать платежные документы на выплату зарплаты, так же не доступны регламентные отчеты в ПФР и ИФНС. Расширение предлагает готовые настроенные профили "Бухгалтер без зарплаты", "Только просмотр без зарплаты".

5940 4752 руб.

27.05.2021    37568    264    92    

205

Перенос данных 1C Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Государственные, бюджетные структуры Россия Бюджетный учет Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет зарплаты для бюджетных учреждений 3.5» и «КАМИН:Зарплата для бюджетных учреждений 5.5» на конфигурацию «Зарплата и кадры государственного учреждения».

12000 руб.

28.07.2016    60710    153    141    

129

SALE! 30%

Зарплата Программист Бизнес-аналитик Бухгалтер Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

При заполнении ведомости на выплату зарплаты вылазят задолженности прошлых периодов, которых быть не должно? Наша обработка позволяется убрать эти доходы прошлых периодов за пару секунд. Больше не нужно тратить часы на анализ каждого такого случая.

33600 23520 руб.

14.09.2022    15740    70    26    

72
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dmit66 94 15.06.21 10:26 Сейчас в теме
А если сотрудник увольнялся и принимался вновь?
2. VinnieThePOOH 159 15.06.21 12:48 Сейчас в теме
(1) Физическое лицо будет то же самое, а сотрудник - другой, будет другой табельный номер, другая дата приема, другой элемент справочника сотрудников.

Расчет стажа выполняется в разрезе элементов справочника "Сотрудники" (а не справочника "Физические лица").

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

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

Задачу интерпретации отчета я не ставил.
3. Gaffer 85 09.09.21 22:40 Сейчас в теме
Дополню расчет лет стажа:
- корректный расчет по уволенным (если их будут выводить в отчет);
- округление до десятых долей года. Внимание, это НЕ МЕСЯЦЫ, а доли года!;
- корректный расчет в случае, когда сотрудник принимался и увольнялся в одном и том же месяце;

Выразить((Выбор
		Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ")
			Тогда -1
		Иначе 0
	Конец + РазностьДат([Дата приема], Выбор
			Когда [Дата увольнения] > ДатаВремя(1, 1, 1)
				Тогда [Дата увольнения]
			Иначе [Параметры.Дата]
		Конец, "МЕСЯЦ")) / 12 * Выбор
		Когда НачалоПериода([Дата приема], "месяц") = НачалоПериода([Дата увольнения], "месяц")
			Тогда 0
		Иначе 1
	Конец, "Число(3,1)")
Показать
user1488047; VinnieThePOOH; +2 Ответить
8. user1488047 10.02.22 16:51 Сейчас в теме
(3) Добрый день. А как можно сделать расчет, если сотрудник уволен 31 , а принят 1. Стаж берется с последней даты приема.
9. VinnieThePOOH 159 10.02.22 18:50 Сейчас в теме
(8) Это будет другой сотрудник.
4. dubovenko_m 71 19.11.21 12:33 Сейчас в теме
Спасибо. Хорошее решение. В последних релизах Прочие настройки спрятали - Настройки- Еще -Настройки для технического специалиста.
Прикрепленные файлы:
KirinaAS; VinnieThePOOH; +2 Ответить
5. RizhkovSergio 38 21.12.21 10:16 Сейчас в теме
От себя добавлю кому может пригодится тоже самое в запрос:
В запросе:
ВЫРАЗИТЬ(
       (ВЫБОР
			КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_.ДатаМин, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_.ДатаМакс, ДЕНЬ)
				ТОГДА -1
			ИНАЧЕ 0
		КОНЕЦ + РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)) / 12 - 0.5 КАК ЧИСЛО(15, 0)) КАК СтажЛет,

	ВЫБОР
		КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_.ДатаМин, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_.ДатаМакс, ДЕНЬ)
			ТОГДА -1
		ИНАЧЕ 0
	КОНЕЦ + РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ) - 12 * (ВЫРАЗИТЬ((ВЫБОР
			КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_.ДатаМин, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_.ДатаМакс, ДЕНЬ)
				ТОГДА -1
			ИНАЧЕ 0
		КОНЕЦ + РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)) / 12 - 0.5 КАК ЧИСЛО(15, 0))) КАК СтажМесяцев,

	РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ВТ_.ДатаМин, МЕСЯЦ, ВЫБОР
				КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_.ДатаМин, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_.ДатаМакс, ДЕНЬ)
					ТОГДА -1
				ИНАЧЕ 0
			КОНЕЦ + РАЗНОСТЬДАТ(ВТ_.ДатаМин, ВТ_.ДатаМакс, МЕСЯЦ)), ВТ_.ДатаМакс, ДЕНЬ) КАК СтажДней
Показать
6. RizhkovSergio 38 21.12.21 11:58 Сейчас в теме
(5)

ВТ_Свод.ДатаПриема КАК ДатаПриема,
ВТ_Свод.ДатаУвольнения КАК ДатаУвольнения,
ВЫРАЗИТЬ(ВЫБОР
			КОГДА (ВЫБОР
					КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
										КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
											ТОГДА &ДатаСреза
										ИНАЧЕ ВТ_Свод.ДатаУвольнения
									КОНЕЦ, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_Свод.ДатаУвольнения, ДЕНЬ)
						ТОГДА -1
					ИНАЧЕ 0
				КОНЕЦ + РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
						КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
							ТОГДА &ДатаСреза
						ИНАЧЕ ВТ_Свод.ДатаУвольнения
					КОНЕЦ, МЕСЯЦ)) / 12 - 0.5 < 0
				ТОГДА 0
			ИНАЧЕ (ВЫБОР
					КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
										КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
											ТОГДА &ДатаСреза
										ИНАЧЕ ВТ_Свод.ДатаУвольнения
									КОНЕЦ, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_Свод.ДатаУвольнения, ДЕНЬ)
						ТОГДА -1
					ИНАЧЕ 0
				КОНЕЦ + РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
						КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
							ТОГДА &ДатаСреза
						ИНАЧЕ ВТ_Свод.ДатаУвольнения
					КОНЕЦ, МЕСЯЦ)) / 12 - 0.5
		КОНЕЦ КАК ЧИСЛО(15, 0)) КАК СтажЛет,

ВЫБОР
	КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
							КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
								ТОГДА &ДатаСреза
							ИНАЧЕ ВТ_Свод.ДатаУвольнения
						КОНЕЦ, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВЫБОР
					КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
						ТОГДА &ДатаСреза
					ИНАЧЕ ВТ_Свод.ДатаУвольнения
				КОНЕЦ, ДЕНЬ)
			ТОГДА -1
		ИНАЧЕ 0
	КОНЕЦ + РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
			КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
				ТОГДА &ДатаСреза
			ИНАЧЕ ВТ_Свод.ДатаУвольнения
		КОНЕЦ, МЕСЯЦ) - 12 * (ВЫРАЗИТЬ(ВЫБОР
			КОГДА (ВЫБОР
					КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
										КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
											ТОГДА &ДатаСреза
										ИНАЧЕ ВТ_Свод.ДатаУвольнения
									КОНЕЦ, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_Свод.ДатаУвольнения, ДЕНЬ)
						ТОГДА -1
					ИНАЧЕ 0
				КОНЕЦ + РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
						КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
							ТОГДА &ДатаСреза
						ИНАЧЕ ВТ_Свод.ДатаУвольнения
					КОНЕЦ, МЕСЯЦ)) / 12 - 0.5 < 0
				ТОГДА 0
			ИНАЧЕ (ВЫБОР
					КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
										КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
											ТОГДА &ДатаСреза
										ИНАЧЕ ВТ_Свод.ДатаУвольнения
									КОНЕЦ, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВТ_Свод.ДатаУвольнения, ДЕНЬ)
						ТОГДА -1
					ИНАЧЕ 0
				КОНЕЦ + РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
						КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
							ТОГДА &ДатаСреза
						ИНАЧЕ ВТ_Свод.ДатаУвольнения
					КОНЕЦ, МЕСЯЦ)) / 12 - 0.5
		КОНЕЦ КАК ЧИСЛО(15, 0))) КАК СтажМесяцев,

РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, ВЫБОР
				КОГДА НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ВТ_Свод.ДатаПриема, МЕСЯЦ, РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
									КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
										ТОГДА &ДатаСреза
									ИНАЧЕ ВТ_Свод.ДатаУвольнения
								КОНЕЦ, МЕСЯЦ)), ДЕНЬ) > НАЧАЛОПЕРИОДА(ВЫБОР
							КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
								ТОГДА &ДатаСреза
							ИНАЧЕ ВТ_Свод.ДатаУвольнения
						КОНЕЦ, ДЕНЬ)
					ТОГДА -1
				ИНАЧЕ 0
			КОНЕЦ + РАЗНОСТЬДАТ(ВТ_Свод.ДатаПриема, ВЫБОР
					КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
						ТОГДА &ДатаСреза
					ИНАЧЕ ВТ_Свод.ДатаУвольнения
				КОНЕЦ, МЕСЯЦ)), ВЫБОР
			КОГДА ВТ_Свод.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
				ТОГДА &ДатаСреза
			ИНАЧЕ ВТ_Свод.ДатаУвольнения
		КОНЕЦ, ДЕНЬ) КАК СтажДней
Показать
user824528; Vinzor; +2 Ответить
7. user1731619 21.01.22 12:38 Сейчас в теме
Спасибо. У автора некорректно считается кол-во лет (16.10.2019 прием, увольнение -15.01.2020 = 1 год, ошибка). Помог комментарий, оставленный Gaffer
11. olga10121982 2 17.10.23 12:10 Сейчас в теме
(7) Подскажите пожалуйста, как вы исправили ошибку? не получается почему-то (можно в лс)
10. Nuzhnaya 23.01.23 15:17 Сейчас в теме
Спасибо большое!!!Очень помогло)
12. olga10121982 2 17.10.23 12:55 Сейчас в теме
Может кто поможет: Как вывести данные стаж месяц дни в одной колонке?
те в одной колонке 2 года 10 мес 5 дн
13. VinnieThePOOH 159 17.10.23 13:32 Сейчас в теме
(12) сгруппируйте колонки в настройке в одну. Вывод "вместе".
14. AneJIbcuH 40 13.04.24 08:31 Сейчас в теме
Все методы, если Дата начала и дата окончания в рамках одно месяца (и года), выдают ерунду
15. SOM4 30.10.24 12:59 Сейчас в теме
Уважаемый Владимир (@VinnieThePOOH), огромное спасибо за эту практическую статью!

Для меня Ваша статья -- первый опыт ощутить мощь СКД: у до этого имел дело с 1С7.7 более 10 лет назад. Учусь заново, так сказать. :)

Если позволите хочу поделиться доделкой блоков расчёта для случая запуска ЗУП 3.0 не с "нуля", когда поле "Дата приёма" у "сотрудника" пуста (например после начальной штатной расстановки, как в нашем случае).


Для числа лет:

Выбор
	Когда [Дата приема] <> ДатаВремя(1, 1, 1)
		Тогда Цел((Выбор
					Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ")
						Тогда -1
					Иначе 0
				Конец + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")) / 12)
	Иначе 0
Конец
Показать



Для числа месяцев:

Выбор
	Когда [Дата приема] <> ДатаВремя(1, 1, 1)
		Тогда Выбор
				Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ")
					Тогда -1
				Иначе 0
			Конец + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ") - 12 * Цел((Выбор
					Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ")
						Тогда -1
					Иначе 0
				Конец + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")) / 12)
	Иначе 0
Конец
Показать



Для числа дней:

Выбор
	Когда [Дата приема] <> ДатаВремя(1, 1, 1)
		Тогда РазностьДат(ДобавитьКДате([Дата приема], "МЕСЯЦ", Выбор
						Когда НачалоПериода(ДобавитьКДате([Дата приема], "Месяц", РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), "ДЕНЬ") > НачалоПериода([Параметры.Дата], "ДЕНЬ")
							Тогда -1
						Иначе 0
					Конец + РазностьДат([Дата приема], [Параметры.Дата], "МЕСЯЦ")), [Параметры.Дата], "ДЕНЬ")
	Иначе 0
Конец
Показать



С уважением, Сергей Масленников
16. mart-sha 296 02.11.24 14:06 Сейчас в теме
Спасибо за работу. Стал делать но увидел что фирма 1с добавила такие поля. Благодаря этой статье.
Оставьте свое сообщение