|
Выражение представления в СКД | ☑ | ||
---|---|---|---|---|
0
gu_viktoria
30.05.18
✎
13:27
|
Есть отчет,необходимо выводить стаж работников, непонятно считает.
Есть две функции // Процедура вычисляет количество лет, месяцев и дней между двумя датами // // Параметры // Дата1 – дата, первая дата (более поздняя, часто текущая, стаж определяется по состоянию на эту дату) // Дата2 – дата, вторая дата (ранняя дата, с нее начинается "течение" стажа) // Лет – Число, в этот параметр будет записано кол-во лет между двумя датами (Дата1-Дата2) // Месяцев – Число, в этот параметр будет записано кол-во месяцев между двумя датами (Дата1-Дата2) // Дней – Число, в этот параметр будет записано кол-во дней между двумя датами (Дата1-Дата2) // ФУнкция РазобратьРазностьДат1(Дата1, Дата2) Экспорт Если Дата1 = '00010101' тогда Дата1 = ТекущаяДата(); КонецЕсли; Лет = 0; Месяцев = 0; Дней = 0; Если Дата1 > Дата2 Тогда ВременнаяДата = Дата1; Если День(ВременнаяДата) < День(Дата2) Тогда Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400; ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1); КонецЕсли; Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12); Месяцев = 12; КонецЕсли; Лет = Макс( Год(ВременнаяДата) - Год(Дата2), 0); Месяцев = Макс(Месяцев + Месяц(ВременнаяДата) - Месяц(Дата2), 0); Дней = Макс(Дней + День(ВременнаяДата) - День(Дата2), 0); // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1)))); КонецЕсли; КонецЕсли; Возврат Строка(Лет) + " лет " +Строка(Месяцев) + " месяцев " +Строка(Дней) + " дней"; КонецФункции // РазобратьРазностьДат Функция РазобратьРазностьДат2(СуммаДней,Дата1) Экспорт Если Дата1 = '00010101' тогда Дата1 = ТекущаяДата(); КонецЕсли; // Через сумму дней получаем дату начальную Дата2 = Дата1 - СуммаДней *24*60*60; Лет = 0; Месяцев = 0; Дней = 0; Если Дата1 > Дата2 Тогда ВременнаяДата = Дата1; Если День(ВременнаяДата) < День(Дата2) Тогда Дней = (ВременнаяДата - ДобавитьМесяц(ВременнаяДата,-1))/86400; ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1); КонецЕсли; Если Месяц(ВременнаяДата) < Месяц(Дата2) Тогда ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12); Месяцев = 12; КонецЕсли; Лет = Макс( Год(ВременнаяДата) - Год(Дата2), 0); Месяцев = Макс(Месяцев + Месяц(ВременнаяДата) - Месяц(Дата2), 0); Дней = Макс(Дней + День(ВременнаяДата) - День(Дата2), 0); // // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах Если Дата2 <> (ДобавитьМесяц(Дата1,-Лет*12-Месяцев)-Дней*86400) Тогда Дней = Дней + (День(КонецМесяца(Дата2)) - День(НачалоМесяца(Дата2))) - (День(КонецМесяца(ДобавитьМесяц(Дата1,-1))) - День(НачалоМесяца(ДобавитьМесяц(Дата1,-1)))); КонецЕсли; // КонецЕсли; Возврат Строка(Лет) + " лет " +Строка(Месяцев) + " месяцев " +Строка(Дней) + " дней"; //Возврат СуммаДней ;// (Лет) + " лет " +Строка(Месяцев) + " месяцев " +Строка(Дней) + " дней"; КонецФункции // РазобратьРазностьДат ________________________ В СКД Вычисляемые поля--->Выражение представления УправлениеКадрами.РазобратьРазностьДат1(ДатаОкончания,ДатаНачала) и Ресурсы--->Выражение УправлениеКадрами.РазобратьРазностьДат2(Сумма(СтажМИД),ДатаОкончания) С представлением выводит только последнюю строчку,а не сумму дней http://prntscr.com/johaxl Без представления показывает нужное количество дней ..в чем может быть проблема? |
|||
1
Ненавижу 1С
гуру
30.05.18
✎
13:30
|
ставлю, на то, что там ресурс МАКСИМУМ
|
|||
2
gu_viktoria
30.05.18
✎
13:34
|
(1) тогда бы 18 выводил,нет?
|
|||
3
gu_viktoria
30.05.18
✎
13:35
|
Ресурсы--->Выражение
УправлениеКадрами.РазобратьРазностьДат2(Сумма(СтажМИД),ДатаОкончания) (1) |
|||
4
Ненавижу 1С
гуру
30.05.18
✎
13:54
|
(2) нет
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |