Расчет трудового стажа

1. user1671936 1 29.03.23 17:12 Сейчас в теме
Добрый день. Подскажите, пожалуйста, как программно произвести расчет Трудового стажа в базе КАМИН:Расчет заработной платы?
Пробовал сделать как считается при вызове формы расчета стажа, но не получилось.
			СтажНаДату = НачалоДня(ТекущаяДатаСеанса());
			ФормаСправочника = ПолучитьФорму("Справочник.Сотрудники.Форма.ФормаЭлемента", Новый Структура("Ключ", НовыйСотрудник.Ссылка));
			ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату, ФормаСправочника);
			ПеренестиСтаж("Страховой стаж (для расчета больничного)", м_ЛетН, м_МесН, м_ДнН, СтажНаДату, ФормаСправочника);
			ПеренестиСтаж("Трудовой стаж для расчета выслуги лет", м_ЛетВ, м_МесВ, м_ДнВ, СтажНаДату, ФормаСправочника);
			ПеренестиСтаж("Стаж государственной (муниципальной) службы", м_ЛетГ, м_МесГ, м_ДнГ, СтажНаДату, ФормаСправочника);
			ОбработкаСобытийФорм.СотрЗаписатьЗначениеВХранилище(СотрудникСсылка, "ТаблицаРасчетСтажа", л_Таб, Ложь);
			Оповестить("РассчитатьСтаж");
			НовыйСотрудник.Записать();
		КонецЕсли;
		
	КонецЕсли;                                                                                                   
	
КонецПроцедуры

Процедура ПеренестиСтаж(п_ВидСтажа, п_Лет, п_Месяцев, п_Дней, п_Дата, ФормаСправочника)
	л_СтрокаСтажа = ФормаСправочника.ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа");
	Если Не л_СтрокаСтажа <> Неопределено Тогда
		л_СтрокаСтажа.Лет = п_Лет;
		л_СтрокаСтажа.Месяцев = п_Месяцев;
		л_СтрокаСтажа.Дней = п_Дней;
		л_СтрокаСтажа.Дата = п_Дата;
	КонецЕсли;
КонецПроцедуры
Показать
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
4. Said-We 29.03.23 20:03 Сейчас в теме
(3) "ФормаСправочника" - это реальная форма или просто так называется, а на самом деле это СправочникОбъект?

Может всё-таки так?

ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату, НовыйСотрудник);
7. user1671936 1 30.03.23 09:16 Сейчас в теме
(6)
Думал сами увидите, после наводящих вопросов. Всё же очевидно.
я понял, что вы имеете ввиду записывать объект. Но в объекте нет такой таблицы значений
ТаблицаВидыСтажа
. Оказалось я не в ту таблицу объекта данные пытался записать, когда пробовал через НовыйСотрудник записывать. Я пытался записи в таблицу ТрудовойСтаж делать, а нужно было в ВидыСтажа. Спасибо!
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Said-We 29.03.23 17:47 Сейчас в теме
Что значит не получилось?
м_Лет, м_Мес, м_Дн у вас равны нулю. Вы их на сегодня записали. Записи со стажем изменились.

Есть только две строки, так как только они были по наименованию найдены.

Если ничего не поменялось, то все 4-ре вдиа стажа не нашлись.
...ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа")...

В вашем коде может быть и предусмотрено добавление строк с видами стажей, но где-то выше. В приведенном коде нет.
3. user1671936 1 29.03.23 18:56 Сейчас в теме
(2)
м_Лет, м_Мес, м_Дн у вас равны нулю.
я стаж из другой базы получаю, и пытаюсь перенести в эту базу. Но тут, как вы и подметили, всегда л_СтрокаСтажа = Неопределено для всех 4 видов стажа.
(2)
Если ничего не поменялось, то все 4-ре вдиа стажа не нашлись.
...ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа")...


При этом если я в базе через кнопку Расчет стажа делаю, то из открывшейся формы все нормально переносится. Через кнопку находит строки для этих значений
ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату, ФормаСправочника);
            ПеренестиСтаж("Страховой стаж (для расчета больничного)", м_ЛетН, м_МесН, м_ДнН, СтажНаДату, ФормаСправочника);
, программно не находит ни одного ни в случае создания нового сотрудника, ни в случае уже существующего.
Прикрепленные файлы:
4. Said-We 29.03.23 20:03 Сейчас в теме
(3) "ФормаСправочника" - это реальная форма или просто так называется, а на самом деле это СправочникОбъект?

Может всё-таки так?

ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату, НовыйСотрудник);
5. user1671936 1 29.03.23 22:36 Сейчас в теме
(4)
"ФормаСправочника" - это реальная форма или просто так называется, а на самом деле это СправочникОбъект?
тоно форма.
(4)
ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату, НовыйСотрудник);
не взлетит, это почти как в конфе самой, только там без НовыйСотрудник, Вот как в конфе реализовано это
Процедура ОсновныеДействияФормыОК(Кнопка)
	// перенесем данные в основную форму
	ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату);
	ПеренестиСтаж("Страховой стаж (для расчета больничного)", м_ЛетН, м_МесН, м_ДнН, СтажНаДату);
	ПеренестиСтаж("Трудовой стаж для расчета выслуги лет", м_ЛетВ, м_МесВ, м_ДнВ, СтажНаДату);
	ПеренестиСтаж("Стаж государственной (муниципальной) службы", м_ЛетГ, м_МесГ, м_ДнГ, СтажНаДату);
	
	ОбработкаСобытийФорм.СотрЗаписатьЗначениеВХранилище(ВладелецФормы.ЭтотОбъект, "ТаблицаРасчетСтажа", ТаблицаРасчетСтажа, Ложь);
  Оповестить("РассчитатьСтаж");
	Закрыть();
КонецПроцедуры

Процедура ПеренестиСтаж(п_ВидСтажа, п_Лет, п_Месяцев, п_Дней, п_Дата)
	л_СтрокаСтажа = ВладелецФормы.ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа");
	Если л_СтрокаСтажа <> Неопределено Тогда
		л_СтрокаСтажа.Лет = п_Лет;
		л_СтрокаСтажа.Месяцев = п_Месяцев;
		л_СтрокаСтажа.Дней = п_Дней;
		л_СтрокаСтажа.Дата = п_Дата;
	КонецЕсли;
КонецПроцедуры
Показать

Владелец формы это та же форма, которую я получаю в
ФормаСправочника = ПолучитьФорму("Справочник.Сотрудники.Форма.ФормаЭлемента", Новый Структура("Ключ", НовыйСотрудник.Ссылка));
Прикрепленные файлы:
6. Said-We 30.03.23 00:54 Сейчас в теме
Вам не нужна форма. Вам нужен объект. Объект в БД будет записываться, он содержит данные.

НовыйСотрудник.Записать();

Так же вы данные записываете.
Так что вы записываете, если у объекта ничего не меняли. Пробуйте как выше написано.
Думал сами увидите, после наводящих вопросов. Всё же очевидно.

Форма вам не нужна. Форму получают, когда нужен диалог. А диалог нужен, когда пользователю надо что-то показать или открыть эту форму. Если диалог не нужен, то и форму получать не к чему.
7. user1671936 1 30.03.23 09:16 Сейчас в теме
(6)
Думал сами увидите, после наводящих вопросов. Всё же очевидно.
я понял, что вы имеете ввиду записывать объект. Но в объекте нет такой таблицы значений
ТаблицаВидыСтажа
. Оказалось я не в ту таблицу объекта данные пытался записать, когда пробовал через НовыйСотрудник записывать. Я пытался записи в таблицу ТрудовойСтаж делать, а нужно было в ВидыСтажа. Спасибо!
Оставьте свое сообщение

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