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

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 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

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

10000 руб.

02.09.2020    152573    836    397    

846

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

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

16.08.2024    6905    user1840182    5    

28

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

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2116    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    7313    implecs_team    6    

46

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

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3212    andrey_sag    10    

35

Запросы СКД Программист Стажер Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    7341    KawaNoNeko    23    

26

Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2996    3    Yashazz    0    

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