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

01.07.10

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

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

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

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

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

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

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

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

Конец

См. также

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

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

12000 руб.

02.09.2020    101965    565    385    

610

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    13622    skovpin_sa    14    

82

Нахождение уникальных наборов строк таблицы запросом

Запросы Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Решение задачи нахождения уникальных наборов строк таблицы запросом

23.07.2023    5102    tormozit    79    

39

Модель запроса SQL

Инструментарий разработчика Запросы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Следующее решение является развитием модели запроса 1С. В этой модели конструируется запрос на SQL с использованием таблиц БД на 1С и внешних источников. Можно использовать все типы запросов: выборка, изменение, удаление. В качестве источника данных можно указать таблицу значений. Работать с запросом SQL из 1С никогда еще не было так просто! :)

1 стартмани

22.06.2023    2730    kalyaka    8    

17

Структура запроса

Инструментарий разработчика Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

21.06.2023    4730    53    obmailok    35    

53

MS SQL Server: изучаем планы запросов

Запросы HighLoad оптимизация Запросы Бесплатно (free)

Многие знают, что для ускорения работы запроса нужно «изучить план». При этом сам план обычно обескураживает: куча разноцветных иконок и стрелочек; ничего не понятно, но очень интересно! Аналитик производительности Александр Денисов на конференции Infostart Event 2021 Moscow Premiere рассказал, как выполняется план запроса и что нужно сделать, чтобы с его помощью находить проблемы производительности.

20.06.2023    10944    Филин    37    

101

Как собрать отладчиком отдельные части запроса в один

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

Подробное описание функционала загрузки данных запроса из отладчика в консоли "Анализатор сложных запросов".

21.03.2023    3885    manuel    2    

20
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. albert 568 18.05.10 17:34 Сейчас в теме
Может лучше листинг в файле сделать? ;)
2. RailMen 823 18.05.10 19:31 Сейчас в теме
(1) можно
3. RailMen 823 19.05.10 12:14 Сейчас в теме
Оптимизировано вычесление поля "Знак гороскопа"
4. andy-cj 55 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 114 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 251 13.03.15 06:25 Сейчас в теме
(0), Спасибо за код. Реализовал в типовом отчете "Списки сотрудников организаций", в режиме предприятия. Файл схемы прилагаю.
Прикрепленные файлы:
СтажРаботникаВОрганизации.xml
SAE72; v_den_v; kauksi; +3 Ответить
15. helegas 25.11.15 15:56 Сейчас в теме
(14) killovolt, спасибо! Выше описанный код работает некорректно в ЗУП 2.5
Оставьте свое сообщение