Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 ноя 2024, 12:16

Выражение в СКД (расчет срока нахождения)

Автор Алексей_1985_06, 18 янв 2021, 16:08

0 Пользователей и 1 гость просматривают эту тему.

LexaK

так сделайте как вам писали выше, как на примере расчета возраста, одну глобальную функцию ПолучитьСтаж(Дата) куда передаете ДатуДолжности а она возвращает готовую строку
Цитировать2 года 6 мес. 14 дн.
если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 19 янв 2021, 12:28
так сделайте как вам писали выше, как на примере расчета возраста, одну глобальную функцию ПолучитьСтаж(Дата) куда передаете ДатуДолжности а она возвращает готовую строку
Цитировать2 года 6 мес. 14 дн.

Ок попробую.... спасибо!
Добавлено: 19 янв 2021, 14:31


Цитата: Алексей_1985_06 от 19 янв 2021, 12:41
Цитата: LexaK от 19 янв 2021, 12:28
так сделайте как вам писали выше, как на примере расчета возраста, одну глобальную функцию ПолучитьСтаж(Дата) куда передаете ДатуДолжности а она возвращает готовую строку
Цитировать2 года 6 мес. 14 дн.

Ок попробую.... спасибо!

LexaK вынужден обратиться за помощью к Вам ! Вот нашел уже готовое решение, сделал функцию в общем модуле (она работает):
Функция ПолучитьСтажСотрудника(ДатаНазначения) Экспорт                                 
Лет = 0;
Месяцев = 0;
Дней = 0;
Сутки = 60*60*24;
ДатаН = ДатаНазначения;

Пока ДатаН <= ТекущаяДата() Цикл
ДатаН = ДобавитьМесяц(ДатаН,1);
Если Месяц(ДатаН) = 3 И Не День(ДатаН) = День(ДатаНазначения)
Тогда ДатаН = ДатаН + Сутки;
КонецЕсли;
Месяцев = Месяцев+1;
КонецЦикла;

Месяцев = Месяцев-1;
Лет = Цел(Месяцев/12);
Месяцев = Месяцев-Лет*12;
Дней = Цел((ТекущаяДата()-ДобавитьМесяц(ДатаН,-1))/Сутки);



// Только лет месяцев и дней
Если Лет <> 0 И Месяцев <> 0 И Дней <> 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 год;; %1 года; %1 лет;", Лет, ВидЧисловогоЗначения.Количественное, "L=ru") + " " +
СтрокаСЧислом("; %1 месяц;; %1 месяца; %1 месяцев;", Месяцев, ВидЧисловогоЗначения.Количественное, "L=ru") + " " +
СтрокаСЧислом("; %1 день;; %1 дня; %1 дней;", Дней, ВидЧисловогоЗначения.Количественное, "L=ru")
// Только лет и месяцев
ИначеЕсли Лет <> 0 И Месяцев <> 0 И Дней = 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 год;; %1 года; %1 лет;", Лет, ВидЧисловогоЗначения.Количественное, "L=ru") + " " +
СтрокаСЧислом("; %1 месяц;; %1 месяца; %1 месяцев;", Месяцев, ВидЧисловогоЗначения.Количественное, "L=ru")
// Только лет и дней
ИначеЕсли Лет <> 0 И Месяцев = 0 И Дней <> 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 год;; %1 года; %1 лет;", Лет, ВидЧисловогоЗначения.Количественное, "L=ru") + " " +
СтрокаСЧислом("; %1 день;; %1 дня; %1 дней;", Дней, ВидЧисловогоЗначения.Количественное, "L=ru")
// Только месцев и дней
ИначеЕсли Лет = 0 И Месяцев <> 0 И Дней <> 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 месяц;; %1 месяца; %1 месяцев;", Месяцев, ВидЧисловогоЗначения.Количественное, "L=ru") + " " +
СтрокаСЧислом("; %1 день;; %1 дня; %1 дней;", Дней, ВидЧисловогоЗначения.Количественное, "L=ru")
// Только лет
ИначеЕсли Лет <> 0 И Месяцев = 0 И Дней = 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 год;; %1 года; %1 лет;", Лет, ВидЧисловогоЗначения.Количественное, "L=ru")
// Только месяцев
ИначеЕсли Лет = 0 И Месяцев <> 0 И Дней = 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 месяц;; %1 месяца; %1 месяцев;", Месяцев, ВидЧисловогоЗначения.Количественное, "L=ru")
// Только дней
ИначеЕсли Лет = 0 И Месяцев = 0 И Дней <> 0 Тогда
КоличествоДней = СтрокаСЧислом("; %1 день;; %1 дня; %1 дней;", Дней, ВидЧисловогоЗначения.Количественное, "L=ru")
Иначе
КоличествоДней = ""
КонецЕсли;
Возврат (КоличествоДней)

КонецФункции


В СКД создал вычисляемое поле СтажСотрудника и выражение: ВызовСервера.ПолучитьСтажСотрудника(ДатаНазначенияНаДолжность)

Но при формировании отчета возникает ошибка:
Ошибка исполнения отчета
по причине:
Ошибка получения данных
по причине:
Ошибка при вычислении функции "ВызовСервера.ПолучитьСтажСотрудника"
по причине:
Ошибка вычисления функции "ВызовСервера.ПолучитьСтажСотрудника"
по причине:
{ОбщийМодуль.ВызовСервера.Модуль(220)}: Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
   Пока ДатаН <= ТекущаяДата() Цикл

Подскажите, в чем загвоздка.....

LexaK

проверяете параметр ДатаНазанчения

Функция ПолучитьСтажСотрудника(ДатаНазначения) Экспорт                                 

Если ТипЗнч(ДатаНазначения) = Тип("Дата") и ЗначениеЗаполнено(ДатаНазначения)  Тогда

    Лет = 0;
    Месяцев = 0;
    Дней = 0;
    Сутки = 60*60*24;
    ДатаН = ДатаНазначения;
   
    Пока ДатаН <= ТекущаяДата() Цикл

...
Иначе
     КоличествоДней = "";
КонецЕсли;
    Возврат КоличествоДней;

КонецФункции

если помогло нажмите: Спасибо!

Алексей_1985_06

Цитата: LexaK от 19 янв 2021, 15:09
проверяете параметр ДатаНазанчения

Функция ПолучитьСтажСотрудника(ДатаНазначения) Экспорт                                 

Если ТипЗнч(ДатаНазначения) = Тип("Дата") и ЗначениеЗаполнено(ДатаНазначения)  Тогда

    Лет = 0;
    Месяцев = 0;
    Дней = 0;
    Сутки = 60*60*24;
    ДатаН = ДатаНазначения;
   
    Пока ДатаН <= ТекущаяДата() Цикл

...
Иначе
     КоличествоДней = "";
КонецЕсли;
    Возврат КоличествоДней;

КонецФункции




LexaK Ну наконец-то заработало.... Очередной раз Огромное Вам спасибо!!!
P.S. Без лести...Вы настоящим профессионал своего дела !!!

LexaK

Да ни чего сложного, пользуйтесь отладчиком, проверяйте данные и их типы, и у вас тоже все будет получаться!!!  :zebzdr:
Добавлено: 20 янв 2021, 10:00


ЦитироватьНу наконец-то заработало....
Не факт, рано расслабляться.
Новая вводная:
Сотрудник, продвигается по карьерной лестнице, переходит/работает из одной должности в другую.
Необходимо рассчитать стаж для каждой должности.
что надо доделать в вашем отчете для такой задачи?
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск