Выгрузка готового отчета «Остатки отпусков»

В данной статье продемонстрирован пример выгрузки готового отчета «Остатки отпусков» с помощью Экстрактора 1С.

Это видео доступно:

В данной статье продемонстрирован пример получения текста запроса, который в последствии можно использовать для формирования проекта выгрузки отчета «ОстаткиОтпусков». Итак, приступим.

Получение текста запроса из Конфигуратора

Примечание:

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

Открываем «Конфигуратор» и конфигурацию в нем.

Находим отчет «ОстаткиОтпусков», выбираем его и, в открывшемся окне, нажимаем кнопку «Действия», затем — «Открыть модуль объекта».

Теперь необходимо найти текст запроса, который мы будем использовать в проекте в Экстракторе 1С. В данном случае, нам нужна Процедура ПриКомпоновкеРезультата, разворачиваем ее и находим ПроцессорВывода (здесь три строчки) ставим курсор на первую строчку и нажимаем кнопку «Точка останова».

Проверим подключение перед отладкой. Заходим в меню «Отладка», затем выбираем «Подключение…».

В открывшемся окне нажимаем кнопку «Автоматическое подключение…» и проверяем, чтобы стояли флаги «Клиентские и внешние соединения на сервере» и «Фоновые задания», нажимаем «ОК», затем «Закрыть».

Теперь выполним отладку. Снова заходим в меню «Отладка» и нажимаем «Перезапустить».

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

И с помощью поисковой строки находим «Остатки отпусков (Отчеты)»

В открывшемся окне нажимаем кнопку «Сформировать» и интерфейс перекинет нас в Конфигуратор. На отметке «Точка останова» в конфигураторе должна появится стрелка — это значит, что процесс отладки прошел успешно.

Теперь находим в тексте слово Инициализировать и проверяем, что инициализируется в данном случае: МакетКомпоновки. Далее нажимаем кнопку «Вычислить выражение».

Здесь, в МакетКомпоновки и находится нужный нам текст запроса. Разворачиваем его, переходим в «НаборыДанных» и находим «Запрос». Дважды кликаем левой кнопкой мыши по запросу и нажимаем кнопку «Открыть», из открывшегося окна копируем текст запроса.

Закрываем окно и в меню «Отладка» нажимаем «Продолжить отладку»

Возвращаемся в основной интерфейс 1С и открываем консоль запросов, здесь мы проверим работу полученного запроса.

В открывшемся окне, в соответствующее поле, добавляем ранее скопированный запрос.

Текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ ВидыОтпусков.Ссылка КАК ВидЕжегодногоОтпуска ПОМЕСТИТЬ ВТЕжегодныеОтпуска ИЗ Справочник.ВидыОтпусков КАК ВидыОтпусков ГДЕ ВидыОтпусков.ОтпускЯвляетсяЕжегодным = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ЗаработанныеПраваНаОтпуска.Сотрудник КАК Сотрудник, ЗаработанныеПраваНаОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, ЗаработанныеПраваНаОтпуска.ДатаНачала КАК ДатаНачала, ЗаработанныеПраваНаОтпуска.ДатаОкончания КАК ДатаОкончания, ЗаработанныеПраваНаОтпуска.Период КАК Период, ЗаработанныеПраваНаОтпуска.КоличествоДней КАК КоличествоДней ПОМЕСТИТЬ ВТЗаработанныеПрава ИЗ РегистрСведений.ЗаработанныеПраваНаОтпуска КАК ЗаработанныеПраваНаОтпуска ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЕжегодныеОтпуска КАК ЕжегодныеОтпуска ПО ЗаработанныеПраваНаОтпуска.ВидЕжегодногоОтпуска = ЕжегодныеОтпуска.ВидЕжегодногоОтпуска ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники ПО ЗаработанныеПраваНаОтпуска.Сотрудник = Сотрудники.Ссылка ГДЕ ЗаработанныеПраваНаОтпуска.Период <= &ДатаОтчета ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТЗаработанныеПрава.Сотрудник КАК Сотрудник, ВТЗаработанныеПрава.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, МАКСИМУМ(ВТЗаработанныеПрава.Период) КАК Период ПОМЕСТИТЬ ВТУказателиПоследних ИЗ ВТЗаработанныеПрава КАК ВТЗаработанныеПрава СГРУППИРОВАТЬ ПО ВТЗаработанныеПрава.Сотрудник, ВТЗаработанныеПрава.ВидЕжегодногоОтпуска ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ПоложенныеВидыЕжегодныхОтпусковСрезПоследних.Сотрудник КАК Сотрудник, ПоложенныеВидыЕжегодныхОтпусковСрезПоследних.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска ПОМЕСТИТЬ ВТТекущиеПраваНаОтпуска ИЗ РегистрСведений.ПоложенныеВидыЕжегодныхОтпусков.СрезПоследних( &ДатаОтчета, (Сотрудник, ВидЕжегодногоОтпуска) В (ВЫБРАТЬ ВТУказателиПоследних.Сотрудник, ВТУказателиПоследних.ВидЕжегодногоОтпуска ИЗ ВТУказателиПоследних КАК ВТУказателиПоследних)) КАК ПоложенныеВидыЕжегодныхОтпусковСрезПоследних ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТЗаработанныеПрава.Сотрудник КАК Сотрудник, ВТЗаработанныеПрава.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, ВТЗаработанныеПрава.Период КАК Период ПОМЕСТИТЬ ВТЗаработанныеОтпускаПоследние ИЗ ВТЗаработанныеПрава КАК ВТЗаработанныеПрава ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУказателиПоследних КАК ВТУказателиПоследних ЛЕВОЕ СОЕДИНЕНИЕ ВТТекущиеПраваНаОтпуска КАК ВТТекущиеПраваНаОтпуска ПО ВТУказателиПоследних.Сотрудник = ВТТекущиеПраваНаОтпуска.Сотрудник И ВТУказателиПоследних.ВидЕжегодногоОтпуска = ВТТекущиеПраваНаОтпуска.ВидЕжегодногоОтпуска ПО ВТЗаработанныеПрава.Сотрудник = ВТУказателиПоследних.Сотрудник И ВТЗаработанныеПрава.ВидЕжегодногоОтпуска = ВТУказателиПоследних.ВидЕжегодногоОтпуска И ВТЗаработанныеПрава.Период = ВТУказателиПоследних.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаработанныеПрава.Сотрудник КАК Сотрудник, ЗаработанныеПрава.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, ЗаработанныеПрава.ДатаНачала КАК ДатаНачала, ЗаработанныеПрава.ДатаОкончания КАК ДатаОкончания, МАКСИМУМ(ЗаработанныеПрава.Период) КАК Период ПОМЕСТИТЬ ВТУказателиОкончанийРабочихЛетСотрудников ИЗ ВТЗаработанныеПрава КАК ЗаработанныеПрава СГРУППИРОВАТЬ ПО ЗаработанныеПрава.Сотрудник, ЗаработанныеПрава.ВидЕжегодногоОтпуска, ЗаработанныеПрава.ДатаНачала, ЗаработанныеПрава.ДатаОкончания ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаработанныеПрава.Сотрудник КАК Сотрудник, ЗаработанныеПрава.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, ЗаработанныеПрава.ДатаНачала КАК ДатаНачала, ЗаработанныеПрава.КоличествоДней КАК Дней, ЗаработанныеПрава.Период КАК Период ПОМЕСТИТЬ ВТЗаработанныеОтпускаПоГодам ИЗ ВТЗаработанныеПрава КАК ЗаработанныеПрава ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТУказателиОкончанийРабочихЛетСотрудников КАК ПериодыСотрудников ПО ЗаработанныеПрава.Сотрудник = ПериодыСотрудников.Сотрудник И ЗаработанныеПрава.ВидЕжегодногоОтпуска = ПериодыСотрудников.ВидЕжегодногоОтпуска И ЗаработанныеПрава.ДатаНачала = ПериодыСотрудников.ДатаНачала И ЗаработанныеПрава.ДатаОкончания = ПериодыСотрудников.ДатаОкончания И ЗаработанныеПрава.Период = ПериодыСотрудников.Период ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ НачальныеОстаткиОтпусков.Сотрудник КАК Сотрудник, МАКСИМУМ(НачальныеОстаткиОтпусков.ДатаОстатка) КАК ДатаОстатка ПОМЕСТИТЬ ВТНачальныеОстатки ИЗ РегистрСведений.НачальныеОстаткиОтпусков КАК НачальныеОстаткиОтпусков СГРУППИРОВАТЬ ПО НачальныеОстаткиОтпусков.Сотрудник ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ФактическиеОтпуска.Сотрудник КАК Сотрудник, ФактическиеОтпуска.ВидЕжегодногоОтпуска КАК ВидЕжегодногоОтпуска, СУММА(ФактическиеОтпуска.Количество) КАК Отгуляно ПОМЕСТИТЬ ВТУчитываемыеОтпускаСотрудников ИЗ РегистрНакопления.ФактическиеОтпуска КАК ФактическиеОтпуска ЛЕВОЕ СОЕДИНЕНИЕ ВТНачальныеОстатки КАК ВТНачальныеОстатки ПО ФактическиеОтпуска.Сотрудник = ВТНачальныеОстатки.Сотрудник ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЕжегодныеОтпуска КАК ВТЕжегодныеОтпуска ПО ФактическиеОтпуска.ВидЕжегодногоОтпуска = ВТЕжегодныеОтпуска.ВидЕжегодногоОтпуска ГДЕ ФактическиеОтпуска.Период >= ЕСТЬNULL(ВТНачальныеОстатки.ДатаОстатка, ДАТАВРЕМЯ(1, 1, 1)) И ФактическиеОтпуска.Период <= КОНЕЦПЕРИОДА(&ДатаОтчета, ДЕНЬ) И НЕ ФактическиеОтпуска.Регистратор В (&НеучитываемыйРегистраторОтпусков) СГРУППИРОВАТЬ ПО ФактическиеОтпуска.Сотрудник, ФактическиеОтпуска.ВидЕжегодногоОтпуска ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗаработанныеОтпускаПоГодам.Сотрудник КАК Сотрудник, ЗаработанныеОтпускаПоГодам.ВидЕжегодногоОтпуска КАК ВидОтпуска, ЗаработанныеОтпускаПоГодам.ДатаНачала КАК ДатаНачала, ЗаработанныеОтпускаПоГодам.Период КАК Период, ЗаработанныеОтпускаПоГодам.Дней - ЕСТЬNULL(ВТУчитываемыеОтпускаСотрудников.Отгуляно, 0) КАК Остаток ПОМЕСТИТЬ ВТРабочиеГодаСотрудников ИЗ ВТЗаработанныеОтпускаПоГодам КАК ЗаработанныеОтпускаПоГодам ЛЕВОЕ СОЕДИНЕНИЕ ВТУчитываемыеОтпускаСотрудников КАК ВТУчитываемыеОтпускаСотрудников ПО ЗаработанныеОтпускаПоГодам.Сотрудник = ВТУчитываемыеОтпускаСотрудников.Сотрудник И ЗаработанныеОтпускаПоГодам.ВидЕжегодногоОтпуска = ВТУчитываемыеОтпускаСотрудников.ВидЕжегодногоОтпуска ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РабочиеГодаСотрудников.Сотрудник КАК Сотрудник, РабочиеГодаСотрудников.ВидОтпуска КАК ВидОтпуска, РабочиеГодаСотрудников.ДатаНачала КАК РабочийГодДатаНачала, МАКСИМУМ(ЕСТЬNULL(РабочиеГодаСотрудниковПредыдущие.ДатаНачала, РабочиеГодаСотрудников.ДатаНачала)) КАК ПредыдущийРабочийГодДатаНачала ПОМЕСТИТЬ ВТУказателиРабочихЛет ИЗ ВТРабочиеГодаСотрудников КАК РабочиеГодаСотрудников ЛЕВОЕ СОЕДИНЕНИЕ ВТРабочиеГодаСотрудников КАК РабочиеГодаСотрудниковПредыдущие ПО РабочиеГодаСотрудников.Сотрудник = РабочиеГодаСотрудниковПредыдущие.Сотрудник И РабочиеГодаСотрудников.ВидОтпуска = РабочиеГодаСотрудниковПредыдущие.ВидОтпуска И РабочиеГодаСотрудников.ДатаНачала > РабочиеГодаСотрудниковПредыдущие.ДатаНачала СГРУППИРОВАТЬ ПО РабочиеГодаСотрудников.Сотрудник, РабочиеГодаСотрудников.ВидОтпуска, РабочиеГодаСотрудников.ДатаНачала ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ УказателиРабочихЛет.Сотрудник КАК Сотрудник, УказателиРабочихЛет.ВидОтпуска КАК ВидОтпуска, ВЫБОР КОГДА РабочиеГодаСотрудников.Остаток < 0 ТОГДА ВЫБОР КОГДА НЕ ВТЗаработанныеОтпускаПоследние.Сотрудник ЕСТЬ NULL ТОГДА РабочиеГодаСотрудников.Остаток ИНАЧЕ 0 КОНЕЦ КОГДА УказателиРабочихЛет.РабочийГодДатаНачала = УказателиРабочихЛет.ПредыдущийРабочийГодДатаНачала ТОГДА РабочиеГодаСотрудников.Остаток КОГДА РабочиеГодаСотрудниковПредыдущие.Остаток < 0 ТОГДА РабочиеГодаСотрудников.Остаток ИНАЧЕ РабочиеГодаСотрудников.Остаток - РабочиеГодаСотрудниковПредыдущие.Остаток КОНЕЦ КАК ОстатокГода ПОМЕСТИТЬ ВТИтоговыеРабочиеГодаОтпусков ИЗ ВТУказателиРабочихЛет КАК УказателиРабочихЛет ЛЕВОЕ СОЕДИНЕНИЕ ВТРабочиеГодаСотрудников КАК РабочиеГодаСотрудников ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаработанныеОтпускаПоследние КАК ВТЗаработанныеОтпускаПоследние ПО РабочиеГодаСотрудников.Сотрудник = ВТЗаработанныеОтпускаПоследние.Сотрудник И РабочиеГодаСотрудников.ВидОтпуска = ВТЗаработанныеОтпускаПоследние.ВидЕжегодногоОтпуска И РабочиеГодаСотрудников.Период = ВТЗаработанныеОтпускаПоследние.Период ПО УказателиРабочихЛет.Сотрудник = РабочиеГодаСотрудников.Сотрудник И УказателиРабочихЛет.ВидОтпуска = РабочиеГодаСотрудников.ВидОтпуска И УказателиРабочихЛет.РабочийГодДатаНачала = РабочиеГодаСотрудников.ДатаНачала ЛЕВОЕ СОЕДИНЕНИЕ ВТРабочиеГодаСотрудников КАК РабочиеГодаСотрудниковПредыдущие ПО УказателиРабочихЛет.Сотрудник = РабочиеГодаСотрудниковПредыдущие.Сотрудник И УказателиРабочихЛет.ВидОтпуска = РабочиеГодаСотрудниковПредыдущие.ВидОтпуска И УказателиРабочихЛет.ПредыдущийРабочийГодДатаНачала = РабочиеГодаСотрудниковПредыдущие.ДатаНачала ЛЕВОЕ СОЕДИНЕНИЕ ВТЗаработанныеОтпускаПоследние КАК ТекущееДнейЕжегодно ПО УказателиРабочихЛет.Сотрудник = ТекущееДнейЕжегодно.Сотрудник И УказателиРабочихЛет.ВидОтпуска = ТекущееДнейЕжегодно.ВидЕжегодногоОтпуска ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ РабочиеГодаСотрудников.Сотрудник КАК Сотрудник, РабочиеГодаСотрудников.ОстатокГода КАК ДниОстаток, NULL КАК ЧасыОстаток, РабочиеГодаСотрудников.ВидОтпуска КАК ВидОтпуска ПОМЕСТИТЬ ВТИтоговыеСотрудники ИЗ ВТИтоговыеРабочиеГодаОтпусков КАК РабочиеГодаСотрудников ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ДниЧасыОтгуловОстатки.Сотрудник, ДниЧасыОтгуловОстатки.ДниОстаток, ДниЧасыОтгуловОстатки.ЧасыОстаток, NULL ИЗ РегистрНакопления.ДниЧасыОтгулов.Остатки(&ДатаОтчета, ) КАК ДниЧасыОтгуловОстатки ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ Сотрудники.Ссылка КАК Сотрудник, &ДатаОтчета КАК Период ПОМЕСТИТЬ ВТСотрудники ИЗ Справочник.Сотрудники КАК Сотрудники ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ТаблицаОтборов.Период КАК Период, ТаблицаОтборов.Сотрудник КАК Сотрудник, ВЫРАЗИТЬ(ТаблицаОтборов.Сотрудник КАК Справочник.Сотрудники).ГоловнойСотрудник КАК ГоловнойСотрудникТаблицыРазличных ПОМЕСТИТЬ ВТОтборовРазличныхСотрудников ИЗ ВТСотрудники КАК ТаблицаОтборов ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК СправочникСотрудники ПО ТаблицаОтборов.Сотрудник = СправочникСотрудники.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ РегистрСведений.Сотрудник КАК Сотрудник, ИзмеренияДаты.Период КАК Период, РегистрСведений.ВидЗанятости КАК ВидЗанятости ПОМЕСТИТЬ ВТСведенияОВидахЗанятостиСотрудников ИЗ ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ВидыЗанятостиСотрудниковИнтервальный КАК РегистрСведений ПО (РегистрСведений.ДатаНачала <= ВЫБОР КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1) ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59) ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период, ДЕНЬ) КОНЕЦ) И (РегистрСведений.ДатаОкончания >= ВЫБОР КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1) ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59) ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период, ДЕНЬ) КОНЕЦ) И (РегистрСведений.Сотрудник = ИзмеренияДаты.Сотрудник) ИНДЕКСИРОВАТЬ ПО Сотрудник ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ИзмеренияДаты.Сотрудник КАК Сотрудник, ИзмеренияДаты.Период КАК Период, РегистрСведений.Организация КАК Организация, РегистрСведений.Подразделение КАК Подразделение, РегистрСведений.Должность КАК Должность ПОМЕСТИТЬ ВТСведенияКадровойИсторииСотрудников ИЗ ВТОтборовРазличныхСотрудников КАК ИзмеренияДаты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КадроваяИсторияСотрудниковИнтервальный КАК РегистрСведений ПО (РегистрСведений.ДатаНачала <= ВЫБОР КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1) ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59) ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период, ДЕНЬ) КОНЕЦ) И (РегистрСведений.ДатаОкончания >= ВЫБОР КОГДА ИзмеренияДаты.Период = ДАТАВРЕМЯ(1, 1, 1) ТОГДА ДАТАВРЕМЯ(3999, 12, 31, 23, 59, 59) ИНАЧЕ КОНЕЦПЕРИОДА(ИзмеренияДаты.Период, ДЕНЬ) КОНЕЦ) И (РегистрСведений.Сотрудник = ИзмеренияДаты.Сотрудник) И (РегистрСведений.ФизическоеЛицо = ИзмеренияДаты.Сотрудник.ФизическоеЛицо) ИНДЕКСИРОВАТЬ ПО Сотрудник ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ТаблицаОтборов.Сотрудник КАК Сотрудник, КадроваяИсторияСотрудников.Организация КАК Организация, КадроваяИсторияСотрудников.Подразделение КАК Подразделение, КадроваяИсторияСотрудников.Должность КАК Должность, СведенияОВидахЗанятостиСотрудников.ВидЗанятости КАК ВидЗанятости, ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) КАК ДАТАПРИЕМА, ЕСТЬNULL(ТекущиеКадровыеДанныеГоловныхСотрудников.ДатаУвольнения, ДАТАВРЕМЯ(1, 1, 1)) КАК ДАТАУВОЛЬНЕНИЯ ПОМЕСТИТЬ ПредставленияКадровыеДанныеСотрудников ИЗ ВТОтборовРазличныхСотрудников КАК ТаблицаОтборов ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеСотрудников ПО ТаблицаОтборов.Сотрудник = ТекущиеКадровыеДанныеСотрудников.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТекущиеКадровыеДанныеСотрудников КАК ТекущиеКадровыеДанныеГоловныхСотрудников ПО ТаблицаОтборов.ГоловнойСотрудникТаблицыРазличных = ТекущиеКадровыеДанныеГоловныхСотрудников.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияКадровойИсторииСотрудников КАК КадроваяИсторияСотрудников ПО ТаблицаОтборов.Сотрудник = КадроваяИсторияСотрудников.Сотрудник И ТаблицаОтборов.Период = КадроваяИсторияСотрудников.Период ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияОВидахЗанятостиСотрудников КАК СведенияОВидахЗанятостиСотрудников ПО ТаблицаОтборов.Сотрудник = СведенияОВидахЗанятостиСотрудников.Сотрудник И ТаблицаОтборов.Период = СведенияОВидахЗанятостиСотрудников.Период ГДЕ (ЕСТЬNULL(ТекущиеКадровыеДанныеГоловныхСотрудников.ДатаУвольнения, ДАТАВРЕМЯ(1, 1, 1)) >= &ДатаОтчета ИЛИ (ЕСТЬNULL(ТекущиеКадровыеДанныеГоловныхСотрудников.ДатаУвольнения, ДАТАВРЕМЯ(1, 1, 1)) = ДАТАВРЕМЯ(1, 1, 1) ИЛИ ЕСТЬNULL(ТекущиеКадровыеДанныеГоловныхСотрудников.ДатаУвольнения, ДАТАВРЕМЯ(1, 1, 1)) ЕСТЬ NULL)) И (ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) <= &ДатаОтчета И (ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) <> ДАТАВРЕМЯ(1, 1, 1) И ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) ЕСТЬ НЕ NULL ) ИЛИ (ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) = ДАТАВРЕМЯ(1, 1, 1) ИЛИ ЕСТЬNULL(ТекущиеКадровыеДанныеСотрудников.ДатаПриема, ДАТАВРЕМЯ(1, 1, 1)) ЕСТЬ NULL) И (СведенияОВидахЗанятостиСотрудников.ВидЗанятости <> &П И СведенияОВидахЗанятостиСотрудников.ВидЗанятости ЕСТЬ НЕ NULL )) ; //////////////////////////////////////////////////////////////////////////////// УНИЧТОЖИТЬ ВТСведенияКадровойИсторииСотрудников ; //////////////////////////////////////////////////////////////////////////////// УНИЧТОЖИТЬ ВТСведенияОВидахЗанятостиСотрудников ; //////////////////////////////////////////////////////////////////////////////// УНИЧТОЖИТЬ ВТОтборовРазличныхСотрудников ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Сотрудники.Сотрудник КАК Сотрудник ПОМЕСТИТЬ ВТНеучтенныеСотрудники ИЗ ВТСотрудники КАК Сотрудники ЛЕВОЕ СОЕДИНЕНИЕ ВТИтоговыеСотрудники КАК ИтоговыеСотрудники ПО Сотрудники.Сотрудник = ИтоговыеСотрудники.Сотрудник ГДЕ ИтоговыеСотрудники.Сотрудник ЕСТЬ NULL ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ПоложенныеВидыЕжегодныхОтпусковСрезПоследних.Сотрудник КАК Сотрудник, ПоложенныеВидыЕжегодныхОтпусковСрезПоследних.ВидЕжегодногоОтпуска КАК ВидОтпуска ПОМЕСТИТЬ ВТПраваНаОтпускаНеучтенныхСотрудников ИЗ РегистрСведений.ПоложенныеВидыЕжегодныхОтпусков.СрезПоследних( &ДатаОтчета, Сотрудник В (ВЫБРАТЬ НеучтенныеСотрудники.Сотрудник ИЗ ВТНеучтенныеСотрудники КАК НеучтенныеСотрудники)) КАК ПоложенныеВидыЕжегодныхОтпусковСрезПоследних ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ИтоговыеСотрудники.Сотрудник КАК Сотрудник, ИтоговыеСотрудники.ВидОтпуска КАК ВидОтпуска, ВЫБОР КОГДА ИтоговыеСотрудники.ВидОтпуска ЕСТЬ NULL ТОГДА 3 КОГДА ИтоговыеСотрудники.ВидОтпуска = &ОсновнойОтпуск ТОГДА 1 ИНАЧЕ 2 КОНЕЦ КАК ПриоритетВидаОтпуска, ВЫБОР КОГДА ИтоговыеСотрудники.ВидОтпуска ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ КАК ЭтоОтпуск, ВЫБОР КОГДА ИтоговыеСотрудники.ВидОтпуска ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ЭтоОтгул, КадровыеДанныеСотрудников.Организация КАК ТекущаяОрганизация, КадровыеДанныеСотрудников.Подразделение КАК Подразделение, КадровыеДанныеСотрудников.Должность КАК Должность, ИтоговыеСотрудники.ВидОтпуска.Наименование КАК ВидОтпускаНаименование, СУММА(ИтоговыеСотрудники.ДниОстаток) КАК ДниСумма, ПРЕДСТАВЛЕНИЕССЫЛКИ(КадровыеДанныеСотрудников.Должность) КАК ДолжностьПредставление, КадровыеДанныеСотрудников.Должность.РеквизитДопУпорядочивания КАК ДолжностьРеквизитДопУпорядочивания, ПРЕДСТАВЛЕНИЕССЫЛКИ(КадровыеДанныеСотрудников.Подразделение) КАК ПодразделениеПредставление, КадровыеДанныеСотрудников.Подразделение.Наименование КАК ПодразделениеНаименование, КадровыеДанныеСотрудников.Подразделение.РеквизитДопУпорядочивания КАК ПодразделениеРеквизитДопУпорядочивания, ПРЕДСТАВЛЕНИЕССЫЛКИ(ИтоговыеСотрудники.Сотрудник) КАК СотрудникПредставление, ИтоговыеСотрудники.Сотрудник.Наименование КАК СотрудникНаименование, ПРЕДСТАВЛЕНИЕССЫЛКИ(КадровыеДанныеСотрудников.Организация) КАК ТекущаяОрганизацияПредставление, КадровыеДанныеСотрудников.Организация.Наименование КАК ТекущаяОрганизацияНаименование, СУММА(ИтоговыеСотрудники.ЧасыОстаток) КАК ЧасыСумма, ВЫБОР КОГДА КадровыеДанныеСотрудников.Организация.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ТекущаяОрганизацияПолеУпорядочивания1, ВЫБОР КОГДА КадровыеДанныеСотрудников.Подразделение.РеквизитДопУпорядочивания ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ПодразделениеРеквизитДопУпорядочиванияПолеУпорядочивания1, ВЫБОР КОГДА КадровыеДанныеСотрудников.Подразделение.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ПодразделениеПолеУпорядочивания1, ВЫБОР КОГДА КадровыеДанныеСотрудников.Должность.РеквизитДопУпорядочивания ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК ДолжностьРеквизитДопУпорядочиванияПолеУпорядочивания1, ВЫБОР КОГДА ИтоговыеСотрудники.Сотрудник.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ КАК СотрудникПолеУпорядочивания1 ИЗ ВТИтоговыеСотрудники КАК ИтоговыеСотрудники ЛЕВОЕ СОЕДИНЕНИЕ ПредставленияКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников ПО ИтоговыеСотрудники.Сотрудник = КадровыеДанныеСотрудников.Сотрудник ГДЕ (КадровыеДанныеСотрудников.ДАТАУВОЛЬНЕНИЯ >= &ДатаОтчета ИЛИ (КадровыеДанныеСотрудников.ДАТАУВОЛЬНЕНИЯ = ДАТАВРЕМЯ(1, 1, 1) ИЛИ КадровыеДанныеСотрудников.ДАТАУВОЛЬНЕНИЯ ЕСТЬ NULL)) И (КадровыеДанныеСотрудников.ДАТАПРИЕМА <= &ДатаОтчета И (КадровыеДанныеСотрудников.ДАТАПРИЕМА <> ДАТАВРЕМЯ(1, 1, 1) И КадровыеДанныеСотрудников.ДАТАПРИЕМА ЕСТЬ НЕ NULL ) ИЛИ (КадровыеДанныеСотрудников.ДАТАПРИЕМА = ДАТАВРЕМЯ(1, 1, 1) ИЛИ КадровыеДанныеСотрудников.ДАТАПРИЕМА ЕСТЬ NULL) И (КадровыеДанныеСотрудников.ВидЗанятости <> &П И КадровыеДанныеСотрудников.ВидЗанятости ЕСТЬ НЕ NULL )) СГРУППИРОВАТЬ ПО ИтоговыеСотрудники.Сотрудник, ИтоговыеСотрудники.ВидОтпуска, КадровыеДанныеСотрудников.Организация, КадровыеДанныеСотрудников.Подразделение, КадровыеДанныеСотрудников.Должность, ИтоговыеСотрудники.ВидОтпуска.Наименование, КадровыеДанныеСотрудников.Должность.РеквизитДопУпорядочивания, КадровыеДанныеСотрудников.Подразделение.Наименование, КадровыеДанныеСотрудников.Подразделение.РеквизитДопУпорядочивания, ИтоговыеСотрудники.Сотрудник.Наименование, КадровыеДанныеСотрудников.Организация.Наименование, ВЫБОР КОГДА КадровыеДанныеСотрудников.Организация.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА КадровыеДанныеСотрудников.Подразделение.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА ИтоговыеСотрудники.Сотрудник.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник, ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска, ВЫБОР КОГДА ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска ЕСТЬ NULL ТОГДА 3 КОГДА ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска = &ОсновнойОтпуск ТОГДА 1 ИНАЧЕ 2 КОНЕЦ, ВЫБОР КОГДА ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска ЕСТЬ NULL ТОГДА ЛОЖЬ ИНАЧЕ ИСТИНА КОНЕЦ, ВЫБОР КОГДА ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска ЕСТЬ NULL ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ, КадровыеДанныеСотрудников.Организация, КадровыеДанныеСотрудников.Подразделение, КадровыеДанныеСотрудников.Должность, ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска.Наименование, СУММА(0), ПРЕДСТАВЛЕНИЕССЫЛКИ(КадровыеДанныеСотрудников.Должность), КадровыеДанныеСотрудников.Должность.РеквизитДопУпорядочивания, ПРЕДСТАВЛЕНИЕССЫЛКИ(КадровыеДанныеСотрудников.Подразделение), КадровыеДанныеСотрудников.Подразделение.Наименование, КадровыеДанныеСотрудников.Подразделение.РеквизитДопУпорядочивания, ПРЕДСТАВЛЕНИЕССЫЛКИ(ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник), ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник.Наименование, ПРЕДСТАВЛЕНИЕССЫЛКИ(КадровыеДанныеСотрудников.Организация), КадровыеДанныеСотрудников.Организация.Наименование, СУММА(0), ВЫБОР КОГДА КадровыеДанныеСотрудников.Организация.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА КадровыеДанныеСотрудников.Подразделение.РеквизитДопУпорядочивания ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА КадровыеДанныеСотрудников.Подразделение.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА КадровыеДанныеСотрудников.Должность.РеквизитДопУпорядочивания ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ ИЗ ВТПраваНаОтпускаНеучтенныхСотрудников КАК ПраваНаОтпускаНеучтенныхСотрудников ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПредставленияКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников ПО ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник = КадровыеДанныеСотрудников.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ ВТИтоговыеСотрудники КАК ИтоговыеСотрудники ПО ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник = ИтоговыеСотрудники.Сотрудник И ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска = ИтоговыеСотрудники.ВидОтпуска ГДЕ ИтоговыеСотрудники.ВидОтпуска ЕСТЬ NULL СГРУППИРОВАТЬ ПО ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник, ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска, КадровыеДанныеСотрудников.Организация, КадровыеДанныеСотрудников.Подразделение, КадровыеДанныеСотрудников.Должность, ПраваНаОтпускаНеучтенныхСотрудников.ВидОтпуска.Наименование, КадровыеДанныеСотрудников.Должность.РеквизитДопУпорядочивания, КадровыеДанныеСотрудников.Подразделение.Наименование, КадровыеДанныеСотрудников.Подразделение.РеквизитДопУпорядочивания, ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник.Наименование, КадровыеДанныеСотрудников.Организация.Наименование, ВЫБОР КОГДА КадровыеДанныеСотрудников.Организация.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА КадровыеДанныеСотрудников.Подразделение.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ, ВЫБОР КОГДА ПраваНаОтпускаНеучтенныхСотрудников.Сотрудник.Ссылка ЕСТЬ NULL ТОГДА 0 ИНАЧЕ 1 КОНЕЦ УПОРЯДОЧИТЬ ПО ТекущаяОрганизацияПолеУпорядочивания1, ТекущаяОрганизацияНаименование, ТекущаяОрганизация, ПодразделениеРеквизитДопУпорядочиванияПолеУпорядочивания1, ПодразделениеРеквизитДопУпорядочивания, ПодразделениеПолеУпорядочивания1, ПодразделениеНаименование, Подразделение, ДолжностьРеквизитДопУпорядочиванияПолеУпорядочивания1, ДолжностьРеквизитДопУпорядочивания, СотрудникПолеУпорядочивания1, СотрудникНаименование, Сотрудник

И для заполнения параметров нажимаем кнопку «».

Теперь нам необходимо заполнить данные параметры:

  • в колонке «Значение» для параметра «ДатаОтчета»— указываем вчерашнюю дату;

  • в колонке «Тип» для параметра «ОсновнойОтпуск» — указываем «Вид Отпуска»;

  • в колонке «Значение» для параметра «ОсновнойОтпуск» — указываем «Основной».

Как мы нашли тип для параметра «ОсновнойОтпуск» и его значение?

Тип параметра «ОсновнойОтпуск» можно найти следующим образом:

  • Переходим в Конфигуратор и открываем схему компоновки данных.

  • Переходим во вкладку «Параметры» и находим тип у интересующего нас параметра,в данном случае: ВидыОтпусков.

  • Однако, данный тип в списке типов в консоли запросов не находится. Значит поищем верное наименование этого типа в поисковой строке «Конфигурация». Вводим туда «ВидыОтпусков». Находим нужный справочник и находим в нем поле «Представление объекта» — «Вид отпуска». Это нужный нам тип.

  • Находим нужное значение отпуска в колонке «Выражение». Здесь у нас «Основной»

Нажимаем кнопку «Выполнить» для проверки работы запроса.

Остается только скопировать этот запрос и создать проект с типом источника данных «Запрос» обычным способом.

Создание проекта для выгрузки отчета «Остатки отпусков»

Открываем как обычно Экстрактор 1С, заходим в «Проекты», нажимаем «Создать» и выбираем тип источника данных «Запрос».

Выбираем тип источника данных «Запрос».

В открывшемся окне вставляем полученный ранее запрос.

Переходим к настройке набора данных на вкладку «Параметры» и устанавливаем необходимые значения. В данном случае такие:

Возвращаемся на вкладку «Поля» и снимаем флаги для этих параметров, оставляем только «Параметр.ДатаОтчета»

Пропускаем этап настройки вычисляемых полей. Затем выбираем подключение и создаем таблицу-приемник (6 и 7 этапы инструкции по созданию проекта). На этапе сопоставления полей оставляем данные без изменений.

Этап расширенных настроек пропускаем и завершаем настройку проекта.

Затем задаем наименование проекту в соответствующем поле и поочередно нажимаем кнопки «Записать», «Сформировать очередь» и «Выполнить проект».

Наша выгрузка выглядит следующим образом: