Вычисления стажа работы в организации запросом. Вычисление разности дат в годах, днях и месяцах запросом. Вычисление знака зодиака. Статистика окладов по знакам зодиака.
Задача: вывести в отчете «Списки сотрудников организаций» в поля «Лет», «Месяцев», «Дней», объединенных группой «Стаж в организации» разность между двумя датами в годах, месяцах и днях, используя компоновку данных, но не добавляя функции в общие модули (т.к. конфигурация на поддержке)
- Описание
- Подробнее
Описание
Исходные данные:
1) [Параметры.Период]— дата формирования отчета, т.е. дата на которую вычисляется стаж
2) [Дата приема]– дата приема, т.е. дата с которой считается стаж
Порядок выполнения:
1) открываем отчет (Кадровый учет->Списки сотрудников организаций);
2) нажимаем в правом нижнем углу: Настройка варианта отчета -> Настройка структуры;
3) в левом нижнем углу окна «Настройка структуры отчета» включаем флаг «Расширенная настройка», переходим на закладку «Пользовательские поля»;
4) добавляем пользовательское поле-выражение . В открывшемся окне заполняем заголовок «Стаж в организации (Лет)», в поле выражения детальных записей вводим листинг, приведенный ниже. Аналогично добавляем поля-выражения «Стаж в организации (Месяцев)» и «Стаж в организации (Дней)»;
5) в окне настройки структуры отчета переходим на закладку «Поля» и добавляем в таблицу используемых полей созданные пользовательские поля;
6) в окне настройки структуры отчета (сверху) настраиваем структуру отчета для вывода.
Схема вычисления поля «Лет».
| А = | Выбор Когда День([Параметры.Период]) < День([Дата приема]) Тогда ДобавитьКДате([Параметры.Период], «МЕСЯЦ», -1) Иначе [Параметры.Период] Конец |
| В = | Выбор Когда Месяц( А ) < Месяц([Дата приема]) Тогда ДобавитьКДате( А , «МЕСЯЦ», -12) Иначе А Конец |
| С = | Выбор Когда Год( В ) — Год([Дата приема]) > 0 Тогда Год( В ) — Год([Дата приема]) Иначе 0 Конец
|
С – это разность между датами [Параметры.Период] и [Дата приема] в годах.
Листинг:
//&ПарамДата — дата на которую требуется рассчитать стаж работы в организации
//РаботникиОрганизацийСрезПервых.Период — дата приема в организацию
//для пользовательского поля в СКД в выражение заменить на <ДобавитьКДате(&ПарамДата, «МЕСЯЦ», -1)>
Выбор Когда Год(Выбор Когда Месяц(Выбор Когда День(&ПарамДата) < День(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(&ПарамДата, МЕСЯЦ, —1)
Иначе &ПарамДата
Конец) < Месяц(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(Выбор Когда День(&ПарамДата) < День(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(&ПарамДата, МЕСЯЦ, —1)
Иначе &ПарамДата
Конец, МЕСЯЦ, —12)
Иначе Выбор Когда День(&ПарамДата) < День(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(&ПарамДата, МЕСЯЦ, —1)
Иначе &ПарамДата
Конец
Конец) — Год(РаботникиОрганизацийСрезПервых.Период) > 0
Тогда Год(Выбор Когда Месяц(Выбор Когда День(&ПарамДата) < День(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(&ПарамДата, МЕСЯЦ, —1)
Иначе &ПарамДата
Конец) < Месяц(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(Выбор Когда День(&ПарамДата) < День(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(&ПарамДата, МЕСЯЦ, —1)
Иначе &ПарамДата
Конец, МЕСЯЦ, —12)
Иначе Выбор Когда День(&ПарамДата) < День(РаботникиОрганизацийСрезПервых.Период)
Тогда ДобавитьКДате(&ПарамДата, МЕСЯЦ, —1)
Иначе &ПарамДата
Конец
Конец) — Год(РаботникиОрганизацийСрезПервых.Период)
Иначе 0
Конец
Схема вычисления поля «Месяцев».
| А = | Выбор Когда День([Параметры.Период]) < День([Дата приема]) Тогда ДобавитьКДате([Параметры.Период], «МЕСЯЦ», -1) Иначе [Параметры.Период] Конец |
| В = | Выбор Когда Месяц(А) < Месяц([Дата приема]) Тогда 12 Иначе 0 Конец + Месяц(Выбор Когда Месяц(А) < Месяц([Дата приема]) Тогда ДобавитьКДате(А, «МЕСЯЦ», -12) Иначе А Конец) — Месяц([Дата приема]) |
| С = | Выбор Когда В>0 Тогда В Иначе 0 Конец |
С – это разность между датами [Параметры.Период] и [Дата приема] в месяцах.
Листинг:
//&ПарамДата — дата на которую требуется рассчитать стаж работы в организации
//РаботникиОрганизацийСрезПервых.Период — дата приема в организацию
//для пользовательского поля в СКД в выражение заменить на <ДобавитьКДате(&ПарамДата, «МЕСЯЦ», -1)>
ВЫБОР
КОГДА ВЫБОР
КОГДА МЕСЯЦ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ) < МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА 12
ИНАЧЕ 0
КОНЕЦ + МЕСЯЦ(ВЫБОР
КОГДА МЕСЯЦ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ) < МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ, МЕСЯЦ, —12)
ИНАЧЕ ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ
КОНЕЦ) — МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период) > 0
ТОГДА ВЫБОР
КОГДА МЕСЯЦ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ) < МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА 12
ИНАЧЕ 0
КОНЕЦ + МЕСЯЦ(ВЫБОР
КОГДА МЕСЯЦ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ) < МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ, МЕСЯЦ, —12)
ИНАЧЕ ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ
КОНЕЦ) — МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ИНАЧЕ 0
КОНЕЦ
Схема вычисления поля «Дней».
| А1 = | Выбор Когда День([Параметры.Период]) < День([Дата приема]) Тогда РазностьДат(ДобавитьКДате([Параметры.Период], «МЕСЯЦ», -1), [Параметры.Период], «ДЕНЬ») Иначе 0 Конец |
| А2 = | Выбор Когда День([Параметры.Период]) < День([Дата приема]) Тогда ДобавитьКДате([Параметры.Период], «МЕСЯЦ», -1) Иначе [Параметры.Период] Конец |
| В = | А1 + День(Выбор Когда Месяц(А2) Тогда ДобавитьКДате(А2,»Месяц»,-12) Иначе А2 ) — День([Дата приема]) |
| С = | Выбор Когда В>0 Тогда В Иначе 0 Конец |
С – это разность между датами [Параметры.Период] и [Дата приема] в днях.
Листинг:
//&ПарамДата — дата на которую требуется рассчитать стаж работы в организации
//РаботникиОрганизацийСрезПервых.Период — дата приема в организацию
//для пользовательского поля в СКД в выражение заменить на
ВЫБОР
КОГДА ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1), &ПарамДата, ДЕНЬ)
ИНАЧЕ 0
КОНЕЦ + ДЕНЬ(ВЫБОР
КОГДА МЕСЯЦ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ) < МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ, МЕСЯЦ, —12)
ИНАЧЕ ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ
КОНЕЦ) — ДЕНЬ(РаботникиОрганизацийСрезПервых.Период) > 0
ТОГДА ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА РАЗНОСТЬДАТ(ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1), &ПарамДата, ДЕНЬ)
ИНАЧЕ 0
КОНЕЦ + ДЕНЬ(ВЫБОР
КОГДА МЕСЯЦ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ) < МЕСЯЦ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ, МЕСЯЦ, —12)
ИНАЧЕ ВЫБОР
КОГДА ДЕНЬ(&ПарамДата) < ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ТОГДА ДОБАВИТЬКДАТЕ(&ПарамДата, МЕСЯЦ, —1)
ИНАЧЕ &ПарамДата
КОНЕЦ
КОНЕЦ) — ДЕНЬ(РаботникиОрганизацийСрезПервых.Период)
ИНАЧЕ 0
КОНЕЦ
Полезные ссылки: http://www.kb.mista.ru/article.php?id=664
Схема вычисления поля «Знак зодиака».
Выбор
Когда Месяц([Дата рождения]) = 12 И День([Дата рождения]) >= 22 Или Месяц([Дата рождения]) = 1 И День([Дата рождения])
Тогда «Козерог»
Когда Месяц([Дата рождения]) = 11 И День([Дата рождения]) >= 23 Или Месяц([Дата рождения]) = 12 И День([Дата рождения])
Тогда «Стрелец»
Когда Месяц([Дата рождения]) = 10 И День([Дата рождения]) >= 24 Или Месяц([Дата рождения]) = 11 И День([Дата рождения])
Тогда «Скорпион»
Когда Месяц([Дата рождения]) = 9 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 10 И День([Дата рождения])
Тогда «Весы»
Когда Месяц([Дата рождения]) = 8 И День([Дата рождения]) >= 22 Или Месяц([Дата рождения]) = 9 И День([Дата рождения])
Тогда «Дева»
Когда Месяц([Дата рождения]) = 7 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 8 И День([Дата рождения])
Тогда «Лев»
Когда Месяц([Дата рождения]) = 6 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 7 И День([Дата рождения])
Тогда «Рак»
Когда Месяц([Дата рождения]) = 5 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 6 И День([Дата рождения])
Тогда «Близнецы»
Когда Месяц([Дата рождения]) = 4 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 5 И День([Дата рождения])
Тогда «Телец»
Когда Месяц([Дата рождения]) = 3 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 4 И День([Дата рождения])
Тогда «Овен»
Когда Месяц([Дата рождения]) = 2 И День([Дата рождения]) >= 20 Или Месяц([Дата рождения]) = 3 И День([Дата рождения])
Тогда «Рыбы»
Когда Месяц([Дата рождения]) = 1 И День([Дата рождения]) >= 21 Или Месяц([Дата рождения]) = 2 И День([Дата рождения])
Тогда «Водолей»
Иначе «——«
Конец

