#0
by location
Добрый день уважаемые форумчане. Подскажите плз как можно разбить период в запросе. Т.е. есть несколько периодов работы сотрудника. Необходимо исключить из этих периодов, те периоды когда сотрудник находился в определенном состоянии. Например Сотрудник1 имеет период работы с 07.12.15 по 31.12.16 и имеет еще один период работы с 01.01.17 по 01.03.17 далее имеет периоды состояния работника 02.06.16 по 19.06.16, данный период попадает в наш первый период работы поэтому все нормально а второй период по состояния с 20.06.16 по 01.03.17, вот этот период не попадает, и чтобы его исключить необходимо как то разбить периоды, чтобы он попал в период работы. пробовал сделать что то такое, но попадает только 1 период по состояниям, как я не крутил даты ничего не получилось. подскажите плз.
#2
by mistеr
Поточнее объясни, какой результат должен быть, на твоем примере хотя бы. Нужно из первого набора периодов исключить периоды из второго набора?
#3
by location
да либо исключить, либо период работника разбить чтобы дата начала совпадала с датой начала состояния и дата конца аналогично, когда у нас затрагивает несколько периодов по сотруднику.
#4
by Alexandr_U1982
Вам нужно построить подобную таблицу 07.12.2015 02.06.2016 02.06.2016 19.06.2016 Затем для каждого интервала нужно получить состояние, и затем по состоянию сотрудников исключить некоторые периоды.
#5
by Ildarovich
Навскидку: Я бы 1) развернул периоды на дни (соединением с производственным календарем), 2) нашел те дни, когда попадает в первый, не попадает во второй и любые более сложные условия, 3) а затем соединил бы оставшиеся дни опять в непрерывные периоды ( Задача 14).
#7
by Alexandr_U1982
ВЫБРАТЬ РАЗЛИЧНЫЕ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыРаботников.ДатаКон ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаНачСостояния ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаКонцаСостояния ВТПериоды_1.Физлицо, ГДЕ НЕ ВТПериоды_2.Период ЕСТЬ NULL СГРУППИРОВАТЬ ПО ВТПериоды_1.Физлицо, ВТПериоды_1.Период
#9
by location
спс большое, но у меня или мозги высушились или я уже совсем нафиг запутался, как теперь для этих интервалов получить состояния?
#12
by dezss
Я бы чуть модифицировал твой запрос вот так. Правда тут все равно не решен момент если особый период начался до начала рабочего. ВТПериодыРаботников.ДатаНач КАК Период, 0 Как Состояние ПОМЕСТИТЬ ВТПериоды ИЗ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыРаботников.Физлицо, ВТПериодыРаботников.ДатаКон, 0 ИЗ ВТПериодыРаботников КАК ВТПериодыРаботников ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаНачСостояния 1 ИЗ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаКонцаСостояния 1 ИЗ ГДЕ НЕ ВТПериоды_2.Период ЕСТЬ NULL И (ВТПериоды_1.Состояние = 0 ИЛИ ВТПериоды_2.Состояние = 0) СГРУППИРОВАТЬ ПО ВТПериоды_1.Физлицо, ВТПериоды_1.Период
#14
by Alexandr_U1982
ВЫБРАТЬ РАЗЛИЧНЫЕ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыРаботников.ДатаКон ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаНачСостояния ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаКонцаСостояния ВТПериоды_1.Физлицо, ГДЕ НЕ ВТПериоды_2.Период ЕСТЬ NULL СГРУППИРОВАТЬ ПО
#17
by dezss
Точна...надо больше параметров. Надо еще признак начала и конца периода проставить и все будет ок.
#18
by location
надо посчитать количество рабочих дней за вычетом тех дней где состояние не работает, т.е. отпуск и т.д., плюс надо еще разбить по каждой должности, т.е. необходимо посчитать количество дней по работнику на каждой должности по которой он работал за исключением дней, когда состояние у работника не равно работает.
#21
by dezss
А если вот так: ВТПериодыРаботников.ДатаНач КАК Период, 0 Как Начало, 0 Как Состояние ПОМЕСТИТЬ ВТПериоды ИЗ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыРаботников.ДатаКон, 1, 0 ИЗ ВТПериодыРаботников КАК ВТПериодыРаботников ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаНачСостояния, 1, 1 ИЗ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаКонцаСостояния, 0, 1 ИЗ ГДЕ НЕ ВТПериоды_2.Период ЕСТЬ NULL И (ВТПериоды_1.Состояние = 0 ИЛИ ВТПериоды_2.Состояние = 0)
#22
by kumena
а ну для 2.1 и не задумывалось, я её почти не застал даже. если хочешь могу доработать для твоей 2.1, но разумеется не на халяву. и делать лучше через календарь, так проще, по моему. по крайней мере у меня так сделано.
#27
by location
выбирает так Дата начала Дата окончания Состояние 07.12.2015 31.12.2016 NULL 01.01.2017 01.03.2017 Отпуск все больше ничего не выбирает, другие интервалы потерялись.
#28
by Alexandr_U1982
Я экспериментировал над периодами работы: 07.12.15 - 31.12.16 01.01.17 - 01.03.17 И периодами отпуска за свой счет: 02.06.16 - 19.06.16 20.06.16 - 01.03.17 Запрос из вернул таблицу: ДатаНачала ДатаОкончания Состояние 07.12.2015 02.06.2016 02.06.2016 19.06.2016 В отпуске без сохранения зарплаты 19.06.2016 20.06.2016 В отпуске без сохранения зарплаты 20.06.2016 31.12.2016 В отпуске без сохранения зарплаты 31.12.2016 01.01.2017 В отпуске без сохранения зарплаты 01.01.2017 01.03.2017 В отпуске без сохранения зарплаты В данном примере таблица правильная.
#30
by location
ВТПериодыРаботников Сотрудник ДатаНач Датакон Сотрудник1 01.01.17 01.03.17 Сотрудник1 07.12.15 31.12.16 ВТПериодыСостояний Сотрудник ДатаНач Датакон Сотрудник1 02.06.16 09.09.06 Сотрудник1 20.09.06 01.03.17 вот что выбирают временные таблицы
#35
by Alexandr_U1982
Вот полный текст запроса, на котором экспериментирую Попробуй сравнить результаты формирования каждой временной таблицы ВЫБРАТЬ ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыРаботников.ДатаКон ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаНачСостояния ОБЪЕДИНИТЬ ВЫБРАТЬ ВТПериодыСостояний.ДатаКонцаСостояния ВТПериоды_1.Физлицо, ГДЕ НЕ ВТПериоды_2.Период ЕСТЬ NULL СГРУППИРОВАТЬ ПО
#38
by location
а чтобы назад выбрать для сотрудника его должности и подразделения, я должен таким же методом пользоваться как и для состояний?
#39
by Alexandr_U1982
Не совсем понял вопрос. Если на каждый интервал нужно получить должность и подразделение, то можно использовать тот же метод, что и для построения последней таблицы из
#40
by location
подожди, а как потом соединить это все вместе, чтобы было должность, подразделение, состояние?
#41
by location
для этого случая, правильно интервалы разбил, а для другого получилось не ок. когда работник увольнялся работал с 10.09.13 по 02.08.14 и с 27.10.14 по 01.03.17 изначально ВТПериодыСотрудников выдавал 3 интервала в том числе и интервал когда сотрудник был уволен, добавил признак что причина изменения состояния не равно увольнение. но в последнем запросе выдает интервалы с 10.09.13 по 26.10.14 с 26.10.14 по 27.10.14 с 27.10.14 по 01.03.17 а надо исключить тот период когда он не работал.
#42
by Alexandr_U1982
В и приведено описание задачи. Отталкиваться будем от этого. Как я понял, посчитать нужно плановое количество рабочих дней. Из и непонятно, нужно определить количество рабочих дней по производственному календарю или по графику работы сотрудника? График работы может не совпадать с производственным календарем, поэтому количество рабочих дней по графику работы и по производственному календарю может получиться разным.
#43
by Alexandr_U1982
Построение запроса для получения периодов работы сотрудника. 1. Построим таблицу с кадровой историей сотрудника. Допустим таблица будет вот такая: Период Сотрудник Подразделение Должность Причина изменения состояния 07.12.2015 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу 01.01.2017 Сотрудник 1 Подразделение 1 Должность 2 Перемещение 01.03.2017 Сотрудник 1 Подразделение 1 Должность 2 Увольнение Пример запроса: ВЫБРАТЬ РаботникиОрганизаций.Сотрудник, РаботникиОрганизаций.Период, РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций ВЫБРАТЬ РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
#44
by Alexandr_U1982
2. Построим таблицу с состояниями сотрудника. Например вот такую: Период Сотрудник Состояние 02.06.2016 Сотрудник 1 В отпуске без сохранения оплаты 20.06.2016 Сотрудник 1 В отпуске без сохранения оплаты Пример запроса: ВЫБРАТЬ СостояниеРаботниковОрганизаций.Сотрудник, РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций ИЗ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций ГДЕ
#45
by Alexandr_U1982
3. Построим таблицу периодов: Период Сотрудник 07.12.2015 Сотрудник 1 02.06.2016 Сотрудник 1 20.06.2016 Сотрудник 1 01.01.2017 Сотрудник 1 01.03.2017 Сотрудник 1 Пример запроса ВЫБРАТЬ ВТКадроваяИстория.Сотрудник, ИЗ ВТСостояния КАК ВТСостояния
#46
by Alexandr_U1982
4. Для Каждого периода получим кадровые данные Период Сотрудник Подразделение Должность Причина изменения состояния 07.12.2015 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу 02.06.2016 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу 20.06.2016 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу 01.01.2017 Сотрудник 1 Подразделение 1 Должность 2 Перемещение 01.03.2017 Сотрудник 1 Подразделение 1 Должность 2 Увольнение Пример запроса ВЫБРАТЬ ДатыАктуальности.Сотрудник,
#47
by Alexandr_U1982
5. Для каждого периода получим состояние сотрудника Период Сотрудник Состояние 07.12.2015 Сотрудник 1 02.06.2016 Сотрудник 1 В отпуске без сохранения оплаты 20.06.2016 Сотрудник 1 В отпуске без сохранения оплаты 01.01.2017 Сотрудник 1 В отпуске без сохранения оплаты 01.03.2017 Сотрудник 1 В отпуске без сохранения оплаты Пример запроса ВЫБРАТЬ ДатыАктуальности.Сотрудник,
#48
by Alexandr_U1982
6. Собираем кадровые данные и состояния сотрудников в разрезе периодов в одну таблицу Период Сотрудник Подразделение Должность Причина изменения состояния Состояние 07.12.2015 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу 02.06.2016 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу В отпуске без сохранения оплаты 20.06.2016 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу В отпуске без сохранения оплаты 01.01.2017 Сотрудник 1 Подразделение 1 Должность 2 Перемещение В отпуске без сохранения оплаты 01.03.2017 Сотрудник 1 Подразделение 1 Должность 2 Увольнение В отпуске без сохранения оплаты Пример запроса ВЫБРАТЬ ВТПериодыКадроваяИстория.Сотрудник, ВТПериодыКадроваяИстория.Период, ВТПериодыКадроваяИстория.ПодразделениеОрганизации,
#49
by Alexandr_U1982
7. Строим таблицу интервалов Дата начала Дата окончания Сотрудник Подразделение Должность Причина изменения состояния Состояние 07.12.2015 02.06.2016 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу 02.06.2016 20.06.2016 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу В отпуске без сохранения оплаты 20.06.2016 01.01.2017 Сотрудник 1 Подразделение 1 Должность 1 Прием на работу В отпуске без сохранения оплаты 01.01.2017 01.03.2017 Сотрудник 1 Подразделение 1 Должность 2 Перемещение В отпуске без сохранения оплаты ВЫБРАТЬ ИЗ ГДЕ НЕ ВТКадроваяИсторияСостояния_2.Период ЕСТЬ NULL СГРУППИРОВАТЬ ПО
#50
by Alexandr_U1982
Ну а далее исключаем периоды отсутствия и соединяем с таблице с рабочими дня. Либо производственный календарь, либо регистр сведений "Графики работы по видам времени".
#52
by location
+ у меня не регистры организации, а просто работники и состояния работников, там нет периодов завершения.
#53
by Alexandr_U1982
Убирай тогда из запросов поля с завершениями, ну и регистры переименуй. У меня тут нет ЗУП 2.1, поэтому не могу составить точные запросы.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Как в звпросе разбить период на месяцы
- Разбить ОС на два
- Как разбить интервал дат на периоды?
- В указанном периоде отчета не вносились изменения в предыдущие налоговые периоды.
- Как получить из отдельных дат периоды в запросе?
- Как разбить файл с бэкапами на отдельные файлы?
- Обороты за разные периоды в одном запросе.
- Порешаем задачки? Как в запросе разбить год на периоды из списка дат?
- СКД: как разбить только определенные колонки (не все!) на периоды (например - месяц)?
В этой группе 1С
- Права доступа по организации
- Изменить текст запроса динамического списка
- Web-сервисы. Аутентификация ОС
- Количество отработанных дней в документе-исправления по начислению зарплаты
- Атол 55Ф как выключить Dhcp
- Подпись на экране ТСД.
- Порядок вывода параметров СКД в форму отчета
- ERP обновление на версию 2.2.3.135, регистр "Товары к поступлениию"
- УТ 11.3 загрузка цен поставщика
- Отключение basic авторизации для http сервисов в 1с 8
- 1С отчетность, перенести vipnet csp после смены ОС
- Настройка скидки Розница 1.0
- Офис 2013 - 2016 постоянно лезет в интернет. Запретить ему.
- Аварийное завершение 1С
- Зик и 6НДФЛ. Подскажите как сформировать
- УСН. КУДиР. Приходный кассовый ордер.
- УТ 11 Как внешний отчет включить в рассылку?
- УФ. Проверить, что документ проводится из формы
- Помогите создать внешний отчет
- v7: Конвертация данных. Перенос документа Операция из 7.7 в ОперацияБух8