Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Выражение представления в СКД

Выражение представления в СКД
Я
   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
ставлю, на то, что там ресурс МАКСИМУМ
   gu_viktoria
 
2 - 30.05.18 - 13:34
(1) тогда бы 18 выводил,нет?
   gu_viktoria
 
3 - 30.05.18 - 13:35
Ресурсы--->Выражение
УправлениеКадрами.РазобратьРазностьДат2(Сумма(СтажМИД),ДатаОкончания) (1)
   Ненавижу 1С
 
4 - 30.05.18 - 13:54
(2) нет

Список тем форума
Рекламное место пустует  Рекламное место пустует
Прочитай, хотя бы, Митичкина "Разработка в системе 1С:Предприятие 8". Волшебник
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует