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

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)
Думал сами увидите, после наводящих вопросов. Всё же очевидно.
я понял, что вы имеете ввиду записывать объект. Но в объекте нет такой таблицы значений
ТаблицаВидыСтажа
. Оказалось я не в ту таблицу объекта данные пытался записать, когда пробовал через НовыйСотрудник записывать. Я пытался записи в таблицу ТрудовойСтаж делать, а нужно было в ВидыСтажа. Спасибо!
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)