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

По теме из базы знаний
Найденные решения
(6)
Думал сами увидите, после наводящих вопросов. Всё же очевидно.
я понял, что вы имеете ввиду записывать объект. Но в объекте нет такой таблицы значений ТаблицаВидыСтажа
. Оказалось я не в ту таблицу объекта данные пытался записать, когда пробовал через НовыйСотрудник записывать. Я пытался записи в таблицу ТрудовойСтаж делать, а нужно было в ВидыСтажа. Спасибо!
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Что значит не получилось?
м_Лет, м_Мес, м_Дн у вас равны нулю. Вы их на сегодня записали. Записи со стажем изменились.
Есть только две строки, так как только они были по наименованию найдены.
Если ничего не поменялось, то все 4-ре вдиа стажа не нашлись.
...ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа")...
В вашем коде может быть и предусмотрено добавление строк с видами стажей, но где-то выше. В приведенном коде нет.
м_Лет, м_Мес, м_Дн у вас равны нулю. Вы их на сегодня записали. Записи со стажем изменились.
Есть только две строки, так как только они были по наименованию найдены.
Если ничего не поменялось, то все 4-ре вдиа стажа не нашлись.
...ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа")...
В вашем коде может быть и предусмотрено добавление строк с видами стажей, но где-то выше. В приведенном коде нет.
(2)
(2)
При этом если я в базе через кнопку Расчет стажа делаю, то из открывшейся формы все нормально переносится. Через кнопку находит строки для этих значений , программно не находит ни одного ни в случае создания нового сотрудника, ни в случае уже существующего.
м_Лет, м_Мес, м_Дн у вас равны нулю.
я стаж из другой базы получаю, и пытаюсь перенести в эту базу. Но тут, как вы и подметили, всегда л_СтрокаСтажа = Неопределено для всех 4 видов стажа.
(2)
Если ничего не поменялось, то все 4-ре вдиа стажа не нашлись.
...ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа")...
...ТаблицаВидыСтажа.Найти(п_ВидСтажа,"ВидСтажа")...
При этом если я в базе через кнопку Расчет стажа делаю, то из открывшейся формы все нормально переносится. Через кнопку находит строки для этих значений
ПеренестиСтаж("Общий трудовой стаж", м_Лет, м_Мес, м_Дн, СтажНаДату, ФормаСправочника);
ПеренестиСтаж("Страховой стаж (для расчета больничного)", м_ЛетН, м_МесН, м_ДнН, СтажНаДату, ФормаСправочника);
Прикрепленные файлы:

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

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