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

01.07.10

Разработка - Запросы

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Вычисление поля ЛЕТ
.txt 2,23Kb
250
250 Скачать (1 SM) Купить за 1 850 руб.
Вычисление поля МЕСЯЦЕВ
.txt 2,26Kb
33
33 Скачать (1 SM) Купить за 1 850 руб.
Вычисление поля ДНЕЙ
.txt 2,07Kb
31
31 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

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

Конец

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    183433    1020    403    

966

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

2 стартмани

06.02.2025    2128    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5594    artemusII    11    

23

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13004    sergey279    18    

65

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    8107    XilDen    36    

90

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3103    PROSTO-1C    0    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    10678    user1840182    5    

29
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. albert 568 18.05.10 17:34 Сейчас в теме
Может лучше листинг в файле сделать? ;)
2. RailMen 829 18.05.10 19:31 Сейчас в теме
3. RailMen 829 19.05.10 12:14 Сейчас в теме
Оптимизировано вычесление поля "Знак гороскопа"
4. andy-cj 56 22.07.10 12:17 Сейчас в теме
Недавно столкнулся с похожей задачей, нужно было вывести в отчет стаж в формате "х лет. х мес. х дней". Я реализовал отчет по стажу сотрудников на СКД с использованием функции общего модуля "ПроведениеРасчетов" в конфигурации ЗУП для Украины. Если кому интересно вот адрес публикации http://infostart.ru/public/73299/
5. Kontakt 109 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 152 23.09.11 11:34 Сейчас в теме
Плюс за
Вычисление знака зодиака. Статистика окладов по знакам зодиака.
Улыбнуло :)
8. KrakoZyabl 77 11.04.12 15:08 Сейчас в теме
Спасибо за урок! внедрил в запрос :)
9. vladir 115 20.02.13 09:38 Сейчас в теме
Спасибо, очень пригодилось для настройки варианта отчета "Списки сотрудников организаций" (Конф. "Комплексная автоматизация 1.1")
10. пользователь 21.03.13 07:11
Никогда бы не подумал, что кадровикам нужно будет стаж в разрезе знаков зодиака смотреть =)))

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

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

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