gifts2017

Вычисления стажа работы в организации запросом. Вычисление разности дат в годах, днях и месяцах запросом. Вычисление знака зодиака. Статистика окладов по знакам зодиака.

Опубликовал Иван Пантелеев (RailMen) в раздел Программирование - Практика программирования

Задача: вывести в отчете «Списки сотрудников организаций» в поля «Лет», «Месяцев», «Дней», объединенных группой «Стаж в организации»  разность между двумя датами в годах, месяцах и днях, используя компоновку данных, но не добавляя функции в общие модули (т.к. конфигурация на поддержке)

Исходные данные:

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 И День([Дата рождения])

                                Тогда "Водолей"

                Иначе "-----"

Конец

 

 

 

 

 

 

 

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Вычисление поля ЛЕТ
.txt 2,23Kb
06.03.13
248
.txt 2,23Kb 248 Скачать
Вычисление поля МЕСЯЦЕВ
.txt 2,26Kb
06.03.13
32
.txt 2,26Kb 32 Скачать
Вычисление поля ДНЕЙ
.txt 2,07Kb
06.03.13
31
.txt 2,07Kb 31 Скачать

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Вячеслав Петрович (kozlovvp) (10.00 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Albert A (albert) 18.05.10 17:34
Может лучше листинг в файле сделать? ;)
2. MagIvan (RailMen) 18.05.10 19:31
3. MagIvan (RailMen) 19.05.10 12:14
Оптимизировано вычесление поля "Знак гороскопа"
4. Андрей Шиба (andy-cj) 22.07.10 12:17
Недавно столкнулся с похожей задачей, нужно было вывести в отчет стаж в формате "х лет. х мес. х дней". Я реализовал отчет по стажу сотрудников на СКД с использованием функции общего модуля "ПроведениеРасчетов" в конфигурации ЗУП для Украины. Если кому интересно вот адрес публикации http://infostart.ru/public/73299/
5. Andrey Ju (Kontakt) 22.12.10 15:49
Выходит ошибка.
Ошибка в схеме компоновки данных: ошибка в выражении
по причине:
Поле не найдено "РаботникиОрганизацийСрезПервых.Период"

Хочу построить отчеты по стажу в ЗУП 8.1 Зарплата и Управление Персоналом, редакция 2.5 (2.5.28.1)
6. Иван Махоткин (citnp) 21.07.11 12:32
Подскажите плиз, что нужно исправить в листинге, чтобы заработало на
1С:Предприятие 8.1 (8.1.15.14)УПП

А то ругается на "РаботникиОрганизацийСрезПервых.Период"
7. Роман Хусяинов (rom-x) 23.09.11 11:34
Плюс за
Вычисление знака зодиака. Статистика окладов по знакам зодиака.
Улыбнуло :)
8. Денис (KrakoZyabl) 11.04.12 15:08
Спасибо за урок! внедрил в запрос :)
9. Владимир (vladir) 20.02.13 09:38
Спасибо, очень пригодилось для настройки варианта отчета "Списки сотрудников организаций" (Конф. "Комплексная автоматизация 1.1")
10. Юрий Пермитин (YPermitin) 21.03.13 07:11
Никогда бы не подумал, что кадровикам нужно будет стаж в разрезе знаков зодиака смотреть =)))

+1.
11. Маргарита Михайлова (margo_m09) 27.03.13 11:21
спасибо за подробное описание запроса))))
12. Елена (milana5) 05.12.13 07:28
Спасибо, выручили!!!
Прикрепленные файлы:
13. Вячеслав Петрович (kozlovvp) 05.02.14 12:28
Подскажите, что нужно сделать с ошибкой:
Поле не найдено "РаботникиОрганизацийСрезПервых.Период"
при добавлении Пользовательского поля в настройке отчета
==
в ЗУПе 2.5
Заменяем РаботникиОрганизацийСрезПервых.Период на
[Сотрудник.Дата приема на работу]

&ПарамДата на &Период

P/S но все равно ошибка, при добавлении пользовательского поля "Дней" - "поле не найдено ДЕНЬ"
14. Сергей Афонькин (killovolt) 13.03.15 06:25
(0), Спасибо за код. Реализовал в типовом отчете "Списки сотрудников организаций", в режиме предприятия. Файл схемы прилагаю.
Прикрепленные файлы:
СтажРаботникаВОрганизации.xml
SAE72; v_den_v; kauksi; +3 Ответить 1
15. Алик С (helegas) 25.11.15 15:56
(14) killovolt, спасибо! Выше описанный код работает некорректно в ЗУП 2.5
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа