Имя: Пароль:
1C
 
Формула в калькуляторе стажа
0 Tolstiy Beremenniy
 
02.12.18
08:56
Подскажите пожалуйста по формуле.
Табличная часть, в которую вводится дата начала, дата окончания.
Это сколько проработал тот или иной сотрудник.
Вводятся все его рабочие места.
Нужно что бы при вводе 2х дат выводилось года, месяца и дни,
сколько отработал сотрудник. Как это лучше сделать?
1 PuhUfa
 
02.12.18
09:00
Я думаю, что лучше это посчитать
2 Tolstiy Beremenniy
 
02.12.18
09:07
(1) Форма, табличная часть
в шапке сотрудник, в табличной части места и даты начала и окончания работ в них.
Нужно просто формула рассчитывающая года, месяца и дни между двумя датами.
3 Гость из Мариуполя
 
гуру
02.12.18
09:34
в типовой ЗУП 2.5 есть
Процедура РазобратьРазностьДат(Дата1, Дата2, Лет = 0, Месяцев = 0, Дней = 0) Экспорт

за ЗУП 3.1. ничего не скажу, не копался

(0) >>Как это лучше сделать?
ИМХО, взять типовую и не париться.
Потому что при нефиксированнызх единицах измерения разночтения неизбежны.
Простой пример (приводился на исе)  - разница между 01.03. и 31.01 - это сколько?
1 месяц и 1 день?
или 0 мес и 29 дней?
4 Гость из Мариуполя
 
гуру
02.12.18
09:38
а так хоть будет какое-то единообразие с типовой.
5 Tolstiy Beremenniy
 
02.12.18
09:46
(4) Ну понял, посмотрю это в этой конфигурации.
Как то все же не соображу как правильно. Так как не знаю всех моментов.
6 SleepyHead
 
гуру
02.12.18
12:54
В ЗУП 3.1 есть методы работы с расчетом стажа, я делал так:

// расчет стажа общего и научно-педагогического
МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    
// сначала в таблицу ВТИсходныеДанные поместить поля Дата, ФизическоеЛицо, Сотрудник, ВидСтажа
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("МассивСотрудников", МассивСотрудников);
Запрос.УстановитьПараметр("Период", КонецПериода);
Запрос.УстановитьПараметр("СтажОбщий", Справочники.ВидыСтажа.НайтиПоРеквизиту("КатегорияСтажа", Перечисления.КатегорииСтажа.Общий));
Запрос.УстановитьПараметр("СтажНаучный", Справочники.ВидыСтажа.НайтиПоРеквизиту("КатегорияСтажа", Перечисления.КатегорииСтажа.ОбщийНаучноПедагогический));
Запрос.Текст =
"ВЫБРАТЬ
|    Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
|    Сотрудники.Ссылка КАК Сотрудник,
|    &Период КАК Дата,
|    &СтажОбщий КАК ВидСтажа
|ПОМЕСТИТЬ ВТИсходныеДанные
|ИЗ
|    Справочник.Сотрудники КАК Сотрудники
|ГДЕ
|    Сотрудники.Ссылка В(&МассивСотрудников)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
|    Сотрудники.ФизическоеЛицо,
|    Сотрудники.Ссылка,
|    &Период,
|    &СтажНаучный
|ИЗ
|    Справочник.Сотрудники КАК Сотрудники";
Запрос.Выполнить();

// расчет стажа указанного вида
КадровыйУчетРасширенный.СоздатьВТСтажиСотрудников(Запрос.МенеджерВременныхТаблиц);

// выбрать стаж в месяцах из полученных данных
Запрос.Текст = "
|ВЫБРАТЬ
|   ВТСтажиСотрудников.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо,
|   ВТСтажиСотрудников.Дата КАК Период,
|   ВТСтажиСотрудников.ВидСтажа.КатегорияСтажа КАК КатегорияСтажа,
|   ВТСтажиСотрудников.РазмерМесяцев КАК РазмерМесяцев
|ИЗ ВТСтажиСотрудников";
    
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// мне нужен был размер стажа только в месяцах
// но если прочитать описания в модулях, выбирай что нужно
КонецЦикла;
7 mikecool
 
02.12.18
14:33
у расчета стада есть нюансы, не помню уже какие, но есть
надо посоветоваться с кадровиком прежде, чем писать функции
8 SleepyHead
 
гуру
02.12.18
14:41
(7) Они расскажут, ага :)
9 Tolstiy Beremenniy
 
03.12.18
09:29
вызываю вот эту функцию

ОбщегоНазначения.РазобратьРазностьДат(ЭлементыФормы.ПриемУвольнение.ТекущаяСтрока.ДатаНачала, ЭлементыФормы.ПриемУвольнение.ТекущаяСтрока.ДатаОкончания, Лет, Месяцев, Дней);


передаю 2 даты, в Лет, Месяцев и дней стоят нули, почему она не работает?
10 Tolstiy Beremenniy
 
03.12.18
09:35
Мне нужно получить значения лет, месяцев и дней.
Между двумя датами.
как это сделать?
11 Tolstiy Beremenniy
 
03.12.18
09:59
Если вызывать вот так. возвращает количество дней, но
не возвращает количество месяцев и лет


    Дата1 = ЭлементыФормы.ПриемУвольнение.ТекущаяСтрока.ДатаНачала;
    Дата2 = ЭлементыФормы.ПриемУвольнение.ТекущаяСтрока.ДатаОкончания;
    ОбщегоНазначения.РазобратьРазностьДат(Дата2, Дата1, Лет, Месяцев, Дней);
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший