Имя: Пароль:
1C
1С v8
Выражение представления в СКД
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) нет