В программе «1С:Зарплата и управление персоналом 8» ведётся учёт права сотрудников на отпуск и расчёт остатков отпусков. Наряду с основным отпуском отдельным категориям работников в соответствии с законодательством РФ предоставляются ежегодные дополнительные отпуска с сохранением среднего заработка.
Продолжительность ежегодного отпуска определённого вида в программе задаётся тремя способами:
- в целом для всех сотрудников организации;
- для сотрудников, занимающих определённую должность;
- для отдельных сотрудников.
Собственно в этом и проблема, необходимо было прикрутить дополнительный отпуск к подразделению, так как варианты с дублями должностей отдел кадров совсем не устраивал.
Решение проблемы
Идем в конфигуратор и из справочника должности организации копируем табличную часть "" в справочник подразделения организации.
Выводим ее на форму элемента.
Для нужного подразделения добавляем дополнительный отпуск и проставляем количество дней.
Далее находим в конфигураторе в модуле "ОстаткиОтпусков" процедуру "ИсходныеДанныеДляРасчетаОстатков" и исправляем там запрос на следующий.
Запрос.Текст = "ВЫБРАТЬ | ТаблицаДанных.ИндексСтроки КАК ИндексСтроки, | ВЫРАЗИТЬ(ТаблицаДанных.Сотрудник КАК Справочник.СотрудникиОрганизаций) КАК Сотрудник, | КОНЕЦПЕРИОДА(ТаблицаДанных.ДатаОстатков, ДЕНЬ) КАК ДатаОстатков, | ТаблицаДанных.ЭтоРасчетПриУвольнении КАК ЭтоРасчетПриУвольнении, | ТаблицаДанных.ЭтоЗапланированныйОтпуск КАК ЭтоЗапланированныйОтпуск, | ТаблицаДанных.ДатаДокумента КАК ДатаДокумента, | ТаблицаДанных.ДатаНачала КАК ДатаНачалаПериода, | ТаблицаДанных.ДатаОкончания КАК ДатаОкончанияПериода, | ТаблицаДанных.ТекущийРегистратор КАК ТекущийРегистратор, | ВЫРАЗИТЬ(ТаблицаДанных.ОтборПоВидуЕжегодногоОтпуска КАК Справочник.ВидыЕжегодныхОтпусков) КАК ОтборПоВидуЕжегодногоОтпуска |ПОМЕСТИТЬ ВТТаблицаДанных |ИЗ | &ТаблицаДанных КАК ТаблицаДанных | |ИНДЕКСИРОВАТЬ ПО | ИндексСтроки, | Сотрудник, | ДатаОстатков, | ЭтоРасчетПриУвольнении |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаДанных.Сотрудник КАК Сотрудник, | ТаблицаДанных.ДатаНачалаПериода КАК ДатаНачалаПериода, | ТаблицаДанных.ДатаОкончанияПериода КАК ДатаОкончанияПериода, | СУММА(ЕСТЬNULL(ПроизводственныйКалендарь.КалендарныеДни, 0)) КАК КоличествоКалендарныхДнейВПериоде, | СУММА(ЕСТЬNULL(ПроизводственныйКалендарь.Шестидневка, 0)) КАК КоличествоРабочихДнейВПериоде |ПОМЕСТИТЬ ВТКоличествоДнейВПериодах |ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ТаблицаДанных.Сотрудник КАК Сотрудник, | ТаблицаДанных.ДатаНачалаПериода КАК ДатаНачалаПериода, | ТаблицаДанных.ДатаОкончанияПериода КАК ДатаОкончанияПериода | ИЗ | ВТТаблицаДанных КАК ТаблицаДанных | ГДЕ | ТаблицаДанных.ДатаНачалаПериода <> ДАТАВРЕМЯ(1, 1, 1) | И ТаблицаДанных.ДатаОкончанияПериода <> ДАТАВРЕМЯ(1, 1, 1)) КАК ТаблицаДанных | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК ПроизводственныйКалендарь | ПО (ПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ ТаблицаДанных.ДатаНачалаПериода И ТаблицаДанных.ДатаОкончанияПериода) | |СГРУППИРОВАТЬ ПО | ТаблицаДанных.Сотрудник, | ТаблицаДанных.ДатаНачалаПериода, | ТаблицаДанных.ДатаОкончанияПериода | |ИНДЕКСИРОВАТЬ ПО | Сотрудник, | ДатаНачалаПериода, | ДатаОкончанияПериода |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ | ТаблицаДанных.Сотрудник КАК Сотрудник, | ТаблицаДанных.Сотрудник.Физлицо КАК ФизическоеЛицо, | ТаблицаДанных.Сотрудник.ДатаПриемаНаРаботу КАК ДатаПриема, | ТаблицаДанных.Сотрудник.ДатаУвольнения КАК ДатаУвольнения, | ТаблицаДанных.Сотрудник.ТекущееОбособленноеПодразделение КАК ТекущаяОрганизация, | ТаблицаДанных.Сотрудник.ТекущееПодразделениеОрганизации КАК ТекущееПодразделение, | ТаблицаДанных.Сотрудник.ТекущаяДолжностьОрганизации КАК ТекущаяДолжность, | ВЫБОР | КОГДА ТаблицаДанных.ОтборПоВидуЕжегодногоОтпуска.ИдентификаторЭлемента = ""ДляТрудовыхДоговоровНаСрокДоДвухМесяцев"" | ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням) | КОГДА НЕ УвольнениеИзОрганизацийРаботникиОрганизации.ПорядокРасчетаОтпуска ЕСТЬ NULL | ТОГДА ВЫБОР | КОГДА УвольнениеИзОрганизацийРаботникиОрганизации.ПорядокРасчетаОтпуска = ЗНАЧЕНИЕ(Перечисление.ПорядокРасчетаОтпуска.ПоШестидневке) | ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоКалендарнымДням) | КОНЕЦ | КОГДА ВЫБОР | КОГДА ТаблицаДанных.Сотрудник.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ ТаблицаДанных.Сотрудник.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1) | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ | И ДОБАВИТЬКДАТЕ(ТаблицаДанных.Сотрудник.ДатаНачала, МЕСЯЦ, 2) >= ТаблицаДанных.Сотрудник.ДатаОкончания | ТОГДА ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням) | ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоКалендарнымДням) | КОНЕЦ КАК СпособРасчетаОтпусковПоТрудовомуДоговору |ПОМЕСТИТЬ ВТТекущиеКадровыеДанныеСотрудников |ИЗ | ВТТаблицаДанных КАК ТаблицаДанных | ЛЕВОЕ СОЕДИНЕНИЕ Документ.УвольнениеИзОрганизаций.РаботникиОрганизации КАК УвольнениеИзОрганизацийРаботникиОрганизации | ПО ТаблицаДанных.Сотрудник = УвольнениеИзОрганизацийРаботникиОрганизации.Сотрудник | И ТаблицаДанных.Сотрудник.ДатаУвольнения = УвольнениеИзОрганизацийРаботникиОрганизации.ДатаУвольнения | И (УвольнениеИзОрганизацийРаботникиОрганизации.Ссылка.Проведен) | И (НЕ УвольнениеИзОрганизацийРаботникиОрганизации.Сторно) | |ИНДЕКСИРОВАТЬ ПО | Сотрудник |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ОстаткиОтпусковОрганизацийОстатки.Ссылка.Сотрудник КАК Сотрудник, | ОстаткиОтпусковОрганизацийОстатки.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, | ОстаткиОтпусковОрганизацийОстатки.ДатаОкончанияРабочегоГода КАК ДатаНачальныхОстатков, | ОстаткиОтпусковОрганизацийОстатки.Количество КАК КоличествоДней |ПОМЕСТИТЬ ВТНачальныеОстаткиОтпусков |ИЗ | Справочник.ОстаткиОтпусковОрганизаций.Остатки КАК ОстаткиОтпусковОрганизацийОстатки | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | МАКСИМУМ(ОстаткиОтпусковОрганизаций.ДатаАктуальности) КАК ДатаАктуальности | ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник | ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск) КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ОстаткиОтпусковОрганизаций КАК ОстаткиОтпусковОрганизаций | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = ОстаткиОтпусковОрганизаций.Сотрудник | | СГРУППИРОВАТЬ ПО | СотрудникиБезПраваНаОтпуск.Сотрудник) КАК СрезПоследнихОстатковОтпусков | ПО ОстаткиОтпусковОрганизацийОстатки.Ссылка.Сотрудник = СрезПоследнихОстатковОтпусков.Сотрудник | И ОстаткиОтпусковОрганизацийОстатки.Ссылка.ДатаАктуальности = СрезПоследнихОстатковОтпусков.ДатаАктуальности | |ИНДЕКСИРОВАТЬ ПО | Сотрудник, | ВидЕжегодногоОтпуска |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СостояниеРаботниковОрганизаций.Сотрудник КАК Сотрудник, | СостояниеРаботниковОрганизаций.ДатаНачалаОтсутствия КАК ДатаНачалаОтсутствия, | ДОБАВИТЬКДАТЕ(СостояниеРаботниковОрганизаций.ДатаОкончанияОтсутствия, ДЕНЬ, -1) КАК ДатаОкончанияОтсутствия, | ВЫБОР | КОГДА СостояниеРаботниковОрганизаций.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЯвляетсяОтпускомБезСохраненияЗарплаты, | СостояниеРаботниковОрганизаций.Состояние КАК ПричинаОтсутствия, | СостояниеРаботниковОрганизаций.Регистратор КАК Регистратор |ПОМЕСТИТЬ ВТИсключаемыеИзОстатковОтпусковПериоды |ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ЗаписиОтклонений.Сотрудник КАК Сотрудник, | ЗаписиОтклонений.Период КАК ДатаНачалаОтсутствия, | ВЫБОР | КОГДА ЗаписиОтклонений.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1) | И (ЗаписиОтклоненийЗавершения.Период ЕСТЬ NULL | ИЛИ ЗаписиОтклоненийЗавершения.Период > ЗаписиОтклонений.ПериодЗавершения) | ТОГДА ЗаписиОтклонений.ПериодЗавершения | КОГДА ЕСТЬNULL(ЗаписиОтклоненийЗавершения.Период, ДАТАВРЕМЯ(1, 1, 1)) <> ДАТАВРЕМЯ(1, 1, 1) | ТОГДА ЗаписиОтклоненийЗавершения.Период | ИНАЧЕ ЗаписиОтклонений.ДатаОстатков | КОНЕЦ КАК ДатаОкончанияОтсутствия, | ЗаписиОтклонений.Состояние КАК Состояние, | ЗаписиОтклонений.Регистратор КАК Регистратор | ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | СотрудникиБезПраваНаОтпуск.ДатаОстатков КАК ДатаОстатков, | СостояниеРаботниковОрганизаций.Период КАК Период, | СостояниеРаботниковОрганизаций.Состояние КАК Состояние, | СостояниеРаботниковОрганизаций.ПериодЗавершения КАК ПериодЗавершения, | СостояниеРаботниковОрганизаций.СостояниеЗавершения КАК СостояниеЗавершения, | СостояниеРаботниковОрганизаций.Регистратор КАК Регистратор | ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = СостояниеРаботниковОрганизаций.Сотрудник | И СотрудникиБезПраваНаОтпуск.ДатаОстатков >= СостояниеРаботниковОрганизаций.Период | И (СостояниеРаботниковОрганизаций.Состояние В (ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты), ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком), ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Прогулы)))) КАК ЗаписиОтклонений | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ЗаписиОтклонений.Сотрудник КАК Сотрудник, | ЗаписиОтклонений.ПериодНачала КАК ПериодНачала, | СостояниеРаботниковОрганизацийЗавершения.Период КАК Период, | СостояниеРаботниковОрганизацийЗавершения.Состояние КАК Состояние | ИЗ | (ВЫБРАТЬ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | СостояниеРаботниковОрганизаций.Период КАК ПериодНачала, | МИНИМУМ(СостояниеРаботниковОрганизацийЗавершения.Период) КАК ДатаСреза | ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизаций | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизацийЗавершения | ПО СостояниеРаботниковОрганизаций.Сотрудник = СостояниеРаботниковОрганизацийЗавершения.Сотрудник | И СостояниеРаботниковОрганизаций.Период < СостояниеРаботниковОрганизацийЗавершения.Период | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = СостояниеРаботниковОрганизаций.Сотрудник | И (СостояниеРаботниковОрганизаций.Состояние В (ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускБезСохраненияЗарплаты), ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.ОтпускПоУходуЗаРебенком), ЗНАЧЕНИЕ(Перечисление.СостоянияРаботникаОрганизации.Прогулы))) | | СГРУППИРОВАТЬ ПО | СотрудникиБезПраваНаОтпуск.Сотрудник, | СостояниеРаботниковОрганизаций.Период) КАК ЗаписиОтклонений | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций КАК СостояниеРаботниковОрганизацийЗавершения | ПО ЗаписиОтклонений.Сотрудник = СостояниеРаботниковОрганизацийЗавершения.Сотрудник | И ЗаписиОтклонений.ДатаСреза = СостояниеРаботниковОрганизацийЗавершения.Период) КАК ЗаписиОтклоненийЗавершения | ПО ЗаписиОтклонений.Сотрудник = ЗаписиОтклоненийЗавершения.Сотрудник | И ЗаписиОтклонений.Период < ЗаписиОтклоненийЗавершения.Период | И ЗаписиОтклонений.Период = ЗаписиОтклоненийЗавершения.ПериодНачала) КАК СостояниеРаботниковОрганизаций | |ИНДЕКСИРОВАТЬ ПО | Сотрудник, | ДатаНачалаОтсутствия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаДанных.Сотрудник, | ВидыЕжегодныхОтпусков.Ссылка КАК ВидЕжегодногоОтпуска, | ВидыЕжегодныхОтпусков.КоличествоДнейОтпускаВГод КАК КоличествоДнейОтпускаВГод, | ВЫБОР | КОГДА ОсновныеВидыОтпусков.ВидЕжегодногоОтпуска ЕСТЬ NULL | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ КАК ОсновнойОтпуск |ПОМЕСТИТЬ ВТВидыЕжегодныхОтпусков |ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ТаблицаДанных.Сотрудник КАК Сотрудник, | ОсновныеНачисленияОрганизаций.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпускаДляИсключения | ИЗ | ВТТаблицаДанных КАК ТаблицаДанных | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций | ПО (ВЫБОР | КОГДА ТекущиеКадровыеДанныеСотрудников.СпособРасчетаОтпусковПоТрудовомуДоговору = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням) | ТОГДА ОсновныеНачисленияОрганизаций.Ссылка = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни) | ИНАЧЕ ОсновныеНачисленияОрганизаций.Ссылка = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпШестидневка) | КОНЕЦ) | ПО ТаблицаДанных.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник) КАК ТаблицаДанных | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВидыЕжегодныхОтпусков КАК ВидыЕжегодныхОтпусков | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ | ОсновныеНачисленияОрганизаций.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска | ИЗ | ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций | ГДЕ | НЕ ОсновныеНачисленияОрганизаций.ВидЕжегодногоОтпуска = ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка) | И ОсновныеНачисленияОрганизаций.Ссылка В (ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни), ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпШестидневка))) КАК ОсновныеВидыОтпусков | ПО ВидыЕжегодныхОтпусков.Ссылка = ОсновныеВидыОтпусков.ВидЕжегодногоОтпуска | ПО (НЕ ВидыЕжегодныхОтпусков.ПометкаУдаления) | И ТаблицаДанных.ВидЕжегодногоОтпускаДляИсключения <> ВидыЕжегодныхОтпусков.Ссылка | |ИНДЕКСИРОВАТЬ ПО | ВидЕжегодногоОтпуска, | ОсновнойОтпуск |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудников.Период, | КадроваяИсторияСотрудников.Должность, | КадроваяИсторияСотрудников.ПериодЗавершения, | КадроваяИсторияСотрудников.ДолжностьЗавершения, | КадроваяИсторияСотрудников.ПодразделениеОрганизации |ПОМЕСТИТЬ ВТКадроваяИсторияСотрудников |ИЗ | РегистрСведений.РаботникиОрганизаций КАК КадроваяИсторияСотрудников |ГДЕ | КадроваяИсторияСотрудников.Сотрудник В | (ВЫБРАТЬ РАЗЛИЧНЫЕ | ТаблицаДанных.Сотрудник | ИЗ | ВТТаблицаДанных КАК ТаблицаДанных) | И НЕ КадроваяИсторияСотрудников.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение) | |ИНДЕКСИРОВАТЬ ПО | Сотрудник |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | СотрудникиБезПраваНаОтпуск.ДатаОстатков, | СотрудникиБезПраваНаОтпуск.ЭтоРасчетПриУвольнении, | ТекущиеКадровыеДанныеСотрудников.ДатаПриема, | ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения |ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник | |УПОРЯДОЧИТЬ ПО | Сотрудник |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаДанных.ИндексСтроки КАК ИндексСтроки, | ТаблицаДанных.Сотрудник КАК Сотрудник, | ТаблицаДанных.ДатаОстатков КАК ДатаОстатков, | ТаблицаДанных.ЭтоРасчетПриУвольнении, | ТаблицаДанных.ДатаНачалаПериода, | ТаблицаДанных.ДатаОкончанияПериода, | ВЫБОР | КОГДА ВЫБОР | КОГДА НЕ ТаблицаДанных.ОтборПоВидуЕжегодногоОтпуска = ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка) | ТОГДА ТаблицаДанных.ОтборПоВидуЕжегодногоОтпуска.СпособРасчетаОстаткаОтпуска | ИНАЧЕ ТекущиеКадровыеДанныеСотрудников.СпособРасчетаОтпусковПоТрудовомуДоговору | КОНЕЦ = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОстаткаОтпуска.ПоРабочимДням) | ТОГДА КоличествоДнейВПериодах.КоличествоРабочихДнейВПериоде | ИНАЧЕ КоличествоДнейВПериодах.КоличествоКалендарныхДнейВПериоде | КОНЕЦ КАК КоличествоДнейВПериоде, | ТекущиеКадровыеДанныеСотрудников.ДатаПриема, | ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения, | ВЫБОР | КОГДА ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1) | ИЛИ ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения > НАЧАЛОПЕРИОДА(ТаблицаДанных.ДатаОстатков, ДЕНЬ) | ТОГДА ЛОЖЬ | ИНАЧЕ ИСТИНА | КОНЕЦ КАК СотрудникУволен, | ТекущиеКадровыеДанныеСотрудников.ТекущаяОрганизация КАК ТекущаяОрганизация, | ТекущиеКадровыеДанныеСотрудников.ТекущееПодразделение КАК ТекущееПодразделение, | ТекущиеКадровыеДанныеСотрудников.ТекущаяДолжность КАК ТекущаяДолжность, | ТекущиеКадровыеДанныеСотрудников.ФизическоеЛицо.Пол КАК Пол, | ТаблицаДанных.ОтборПоВидуЕжегодногоОтпуска |ИЗ | ВТТаблицаДанных КАК ТаблицаДанных | ЛЕВОЕ СОЕДИНЕНИЕ ВТТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников | ПО ТаблицаДанных.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник | ЛЕВОЕ СОЕДИНЕНИЕ ВТКоличествоДнейВПериодах КАК КоличествоДнейВПериодах | ПО ТаблицаДанных.Сотрудник = КоличествоДнейВПериодах.Сотрудник | И ТаблицаДанных.ДатаНачалаПериода = КоличествоДнейВПериодах.ДатаНачалаПериода | И ТаблицаДанных.ДатаОкончанияПериода = КоличествоДнейВПериодах.ДатаОкончанияПериода | |УПОРЯДОЧИТЬ ПО | Сотрудник, | ДатаОстатков, | ИндексСтроки |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВидыЕжегодныхОтпусков.Сотрудник, | ВидыЕжегодныхОтпусков.ВидЕжегодногоОтпуска, | ВидыЕжегодныхОтпусков.КоличествоДнейОтпускаВГод |ИЗ | ВТВидыЕжегодныхОтпусков КАК ВидыЕжегодныхОтпусков | |УПОРЯДОЧИТЬ ПО | ВидыЕжегодныхОтпусков.ОсновнойОтпуск УБЫВ, | ВидыЕжегодныхОтпусков.ВидЕжегодногоОтпуска.Наименование |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | НачальныеОстаткиОтпусков.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, | НачальныеОстаткиОтпусков.ДатаНачальныхОстатков КАК ДатаНачальныхОстатков, | НачальныеОстаткиОтпусков.КоличествоДней |ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачальныеОстаткиОтпусков КАК НачальныеОстаткиОтпусков | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = НачальныеОстаткиОтпусков.Сотрудник | |УПОРЯДОЧИТЬ ПО | Сотрудник, | ВидЕжегодногоОтпуска, | ДатаНачальныхОстатков |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | РАЗНОСТЬДАТ(ИсключаемыеИзОстатковОтпусковПериоды.ДатаНачалаОтсутствия, ДОБАВИТЬКДАТЕ(ИсключаемыеИзОстатковОтпусковПериоды.ДатаОкончанияОтсутствия, ДЕНЬ, 1), ДЕНЬ) КАК КоличествоДнейОтсутствия, | РАЗНОСТЬДАТ(ИсключаемыеИзОстатковОтпусковПериоды.ДатаНачалаОтсутствия, ДОБАВИТЬКДАТЕ(ИсключаемыеИзОстатковОтпусковПериоды.ДатаОкончанияОтсутствия, ДЕНЬ, 1), ДЕНЬ) КАК КоличествоДнейПродления, | ИсключаемыеИзОстатковОтпусковПериоды.ДатаНачалаОтсутствия КАК ДатаНачалаОтсутствия, | ИсключаемыеИзОстатковОтпусковПериоды.ДатаОкончанияОтсутствия КАК ДатаОкончанияОтсутствия, | ИсключаемыеИзОстатковОтпусковПериоды.ПричинаОтсутствия, | ИсключаемыеИзОстатковОтпусковПериоды.ЯвляетсяОтпускомБезСохраненияЗарплаты, | ИсключаемыеИзОстатковОтпусковПериоды.Регистратор КАК Документ, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ИсключаемыеИзОстатковОтпусковПериоды.Регистратор) КАК ПредставлениеДокумента |ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТИсключаемыеИзОстатковОтпусковПериоды КАК ИсключаемыеИзОстатковОтпусковПериоды | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = ИсключаемыеИзОстатковОтпусковПериоды.Сотрудник | И СотрудникиБезПраваНаОтпуск.ДатаОстатков >= ИсключаемыеИзОстатковОтпусковПериоды.ДатаНачалаОтсутствия | |УПОРЯДОЧИТЬ ПО | Сотрудник, | ДатаНачалаОтсутствия |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | СотрудникиСВидамиОтпусков.Сотрудник КАК Сотрудник, | СотрудникиСВидамиОтпусков.ДатаДействия КАК ДатаДействия, | СотрудникиСВидамиОтпусков.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, | ЕСТЬNULL(СотрудникиОрганизацийЕжегодныеОтпуска.КоличествоДнейОтпускаВГод, ЕСТЬNULL(ПодразделенияОрганизацийЕжегодныеОтпуска.КоличествоДнейОтпускаВГод, ВЫБОР | КОГДА СотрудникиСВидамиОтпусков.ВидЕжегодногоОтпуска.ПредоставлятьОтпускВсемСотрудникам | ТОГДА СотрудникиСВидамиОтпусков.КоличествоДнейОтпускаВГод | ИНАЧЕ 0 | КОНЕЦ)) КАК КоличествоДнейОтпускаВГод, | ВЫБОР | КОГДА ЕСТЬNULL(СотрудникиОрганизацийЕжегодныеОтпуска.КоличествоДнейОтпускаВГод, ЕСТЬNULL(ПодразделенияОрганизацийЕжегодныеОтпуска.КоличествоДнейОтпускаВГод, ВЫБОР | КОГДА СотрудникиСВидамиОтпусков.ВидЕжегодногоОтпуска.ПредоставлятьОтпускВсемСотрудникам | ТОГДА СотрудникиСВидамиОтпусков.КоличествоДнейОтпускаВГод | ИНАЧЕ 0 | КОНЕЦ)) <> 0 | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Предоставляется, | ВЫБОР | КОГДА НЕ СотрудникиОрганизацийЕжегодныеОтпуска.КоличествоДнейОтпускаВГод ЕСТЬ NULL | ТОГДА ""(персональный)"" | КОГДА НЕ ПодразделенияОрганизацийЕжегодныеОтпуска.КоличествоДнейОтпускаВГод ЕСТЬ NULL | ТОГДА ""(по должности)"" | КОГДА СотрудникиСВидамиОтпусков.ВидЕжегодногоОтпуска.ПредоставлятьОтпускВсемСотрудникам | ТОГДА ""(общефирменный)"" | ИНАЧЕ """" | КОНЕЦ КАК ТипЕжегодногоОтпуска |ИЗ | (ВЫБРАТЬ | СотрудникиБезПраваНаОтпуск.Сотрудник КАК Сотрудник, | ПериодыИзмененияДолжностей.ДатаДействия КАК ДатаДействия, | ПериодыИзмененияДолжностей.Должность КАК Должность, | ВидыЕжегодныхОтпусков.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, | ВидыЕжегодныхОтпусков.КоличествоДнейОтпускаВГод КАК КоличествоДнейОтпускаВГод, | ВидыЕжегодныхОтпусков.ОсновнойОтпуск КАК ОсновнойОтпуск, | ПериодыИзмененияДолжностей.ПодразделениеОрганизации КАК ПодразделениеОрганизации | ИЗ | ВТСотрудникиБезПраваНаОтпуск КАК СотрудникиБезПраваНаОтпуск | ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | КадроваяИсторияСотрудников.Сотрудник КАК Сотрудник, | КадроваяИсторияСотрудников.Период КАК ДатаДействия, | КадроваяИсторияСотрудников.Должность КАК Должность, | КадроваяИсторияСотрудников.ПодразделениеОрганизации КАК ПодразделениеОрганизации | ИЗ | ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ | КадроваяИсторияСотрудников.Сотрудник, | КадроваяИсторияСотрудников.ПериодЗавершения, | КадроваяИсторияСотрудников.ДолжностьЗавершения, | КадроваяИсторияСотрудников.ПодразделениеОрганизации | ИЗ | ВТКадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников | ГДЕ | КадроваяИсторияСотрудников.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1)) КАК ПериодыИзмененияДолжностей | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = ПериодыИзмененияДолжностей.Сотрудник | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВидыЕжегодныхОтпусков КАК ВидыЕжегодныхОтпусков | ПО СотрудникиБезПраваНаОтпуск.Сотрудник = ВидыЕжегодныхОтпусков.Сотрудник) КАК СотрудникиСВидамиОтпусков | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПодразделенияОрганизаций.ЕжегодныеОтпуска КАК ПодразделенияОрганизацийЕжегодныеОтпуска | ПО СотрудникиСВидамиОтпусков.ВидЕжегодногоОтпуска = ПодразделенияОрганизацийЕжегодныеОтпуска.ВидЕжегодногоОтпуска | И СотрудникиСВидамиОтпусков.ПодразделениеОрганизации = ПодразделенияОрганизацийЕжегодныеОтпуска.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций.ЕжегодныеОтпуска КАК СотрудникиОрганизацийЕжегодныеОтпуска | ПО СотрудникиСВидамиОтпусков.Сотрудник = СотрудникиОрганизацийЕжегодныеОтпуска.Ссылка | И СотрудникиСВидамиОтпусков.ВидЕжегодногоОтпуска = СотрудникиОрганизацийЕжегодныеОтпуска.ВидЕжегодногоОтпуска | |УПОРЯДОЧИТЬ ПО | Сотрудник, | СотрудникиСВидамиОтпусков.ОсновнойОтпуск УБЫВ, | ВидЕжегодногоОтпуска, | ДатаДействия УБЫВ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ | ТаблицаДанных.ИндексСтроки КАК ИндексСтроки, | ТаблицаДанных.Сотрудник КАК Сотрудник, | ТаблицаДанных.ДатаОстатков КАК ДатаОстатков, | ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, | ФактическиеОтпуска.Количество КАК КоличествоДнейОтпуска, | ФактическиеОтпуска.Период КАК ДатаНачалаОтпуска, | ФактическиеОтпуска.ДатаОкончания КАК ДатаОкончанияОтпуска, | ФактическиеОтпуска.Компенсация, | ФактическиеОтпуска.Регистратор КАК Документ, | ПРЕДСТАВЛЕНИЕССЫЛКИ(ФактическиеОтпуска.Регистратор) КАК ПредставлениеДокумента, | ФактическиеОтпуска.ДатаРегистрации, | ВЫБОР | КОГДА ФактическиеОтпуска.Компенсация | ТОГДА ФактическиеОтпуска.Период | ИНАЧЕ ФактическиеОтпуска.ДатаОкончания | КОНЕЦ КАК ДатаДляСортировки, | ВЫБОР | КОГДА ФактическиеОтпуска.Количество < 0 | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК Сторно |ИЗ | ВТТаблицаДанных КАК ТаблицаДанных | ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ФактическиеОтпускаОрганизаций КАК ФактическиеОтпуска | ЛЕВОЕ СОЕДИНЕНИЕ ВТНачальныеОстаткиОтпусков КАК НачальныеОстаткиОтпусков | ПО ФактическиеОтпуска.Сотрудник = НачальныеОстаткиОтпусков.Сотрудник | И ФактическиеОтпуска.ВидЕжегодногоОтпуска = НачальныеОстаткиОтпусков.ВидЕжегодногоОтпуска | И (ВЫБОР | КОГДА ФактическиеОтпуска.Компенсация | ТОГДА ФактическиеОтпуска.Период | ИНАЧЕ ФактическиеОтпуска.ДатаОкончания | КОНЕЦ < НачальныеОстаткиОтпусков.ДатаНачальныхОстатков) | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников | ПО ФактическиеОтпуска.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник | ПО ТаблицаДанных.Сотрудник = ФактическиеОтпуска.Сотрудник | И (ВЫБОР | КОГДА ТаблицаДанных.ЭтоЗапланированныйОтпуск | ТОГДА ТаблицаДанных.ДатаДокумента >= ФактическиеОтпуска.Период | КОГДА НЕ ТаблицаДанных.ЭтоРасчетПриУвольнении | И НЕ ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1) | И ТекущиеКадровыеДанныеСотрудников.ДатаУвольнения = ФактическиеОтпуска.Период | КОНЕЦ) | И (НЕ(ТаблицаДанных.ЭтоРасчетПриУвольнении | И ФактическиеОтпуска.Регистратор ССЫЛКА Документ.РасчетПриУвольненииРаботникаОрганизаций)) | И ТаблицаДанных.ТекущийРегистратор <> ФактическиеОтпуска.Регистратор | И (ТаблицаДанных.ОтборПоВидуЕжегодногоОтпуска В (ЗНАЧЕНИЕ(Справочник.ВидыЕжегодныхОтпусков.ПустаяСсылка), ФактическиеОтпуска.ВидЕжегодногоОтпуска)) | И (ВЫБОР | КОГДА ТаблицаДанных.ДатаНачалаПериода <> ДАТАВРЕМЯ(1, 1, 1) | ТОГДА ТаблицаДанных.ДатаНачалаПериода <> ФактическиеОтпуска.Период | ИНАЧЕ ИСТИНА | КОНЕЦ) | И (ВЫБОР | КОГДА ТаблицаДанных.ДатаОкончанияПериода <> ДАТАВРЕМЯ(1, 1, 1) | ТОГДА ТаблицаДанных.ДатаОкончанияПериода <> ФактическиеОтпуска.ДатаОкончания | ИНАЧЕ ИСТИНА | КОНЕЦ) |ГДЕ | НачальныеОстаткиОтпусков.КоличествоДней ЕСТЬ NULL | |УПОРЯДОЧИТЬ ПО | Сотрудник, | ДатаОстатков, | ИндексСтроки, | ДатаДляСортировки, | ВидЕжегодногоОтпуска, | Сторно УБЫВ, | ДатаНачалаОтпуска";
Если не хотите менять процедуру в конфигурации можно сделать отчет. где будет выводиться количество дней доп отпуска.
Пример результата отчета.
отчетик
предложенный отчетик будет работать без изменения типовой конфигурации?
(2) TrinitronOTV, Необходимо будет добавить таб часть Ежегодные отпуска в подразделения организации. На обновления это ни как не повлияет
Спасибо ! Очень полезная методика, правда я немного поправил, чтобы отпуска должностей тоже учитывались
(4) рад что пригодилось