Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
02 дек 2021, 06:16

Помогите с запросом в СКД

Автор Алексей_1985_06, 04 янв 2021, 22:08

0 Пользователей и 1 гость просматривают эту тему.

Алексей_1985_06

Сразу к вопросу! Есть справочник ШтатныеДолжности и РС Послужнойсписок, необходимо в отчете выводить:
1. Общее количество должностей по подразделению;
2. Количество занятых должностей по подразделению;
3. Количество вакантных должностей по подразделению;
Сделал в СКД простой макет в который нужно выводить значения этих полей.

Реализовал только последний номер (3) - где подсчитывается количество вакантных должностей. Подскажите как сделать в чтоб в наборе данных в СКД получить сведения пунктов 1 и 2 и совместить это в одну таблицу ???


ВЫБРАТЬ
ШтатныеДолжности.Ссылка КАК ВакантныеДолжности,
ШтатныеДолжности.Владелец КАК Подразделение_ВК
ИЗ
Справочник.ШтатныеДолжности КАК ШтатныеДолжности
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
И ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)
УПОРЯДОЧИТЬ ПО
ШтатныеДолжности.Владелец

LexaK

все неправильно.
почему у вас справочник ШтатныеДолжности через владельца связан с подразделением?
в справочнике должны быть уникальные не повторяющиеся элементы (а у вас получается 100 Инструкторов, по одному на кафедру)

должно быть штатное расписание, где как раз связываются
Подразделение  --- Должность --- количество мест (это данные для п.п.1)
из РегистрСведений.ПослужнойСписок.СрезПоследних --- наоборот берете количество фактически занятых должностей (п.п.2)
разница между п.п.1 и п.п.2 даст вам п.п.3
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 05 янв 2021, 12:02
все неправильно.
почему у вас справочник ШтатныеДолжности через владельца связан с подразделением?
в справочнике должны быть уникальные не повторяющиеся элементы (а у вас получается 100 Инструкторов, по одному на кафедру)

должно быть штатное расписание, где как раз связываются
Подразделение  --- Должность --- количество мест (это данные для п.п.1)
из РегистрСведений.ПослужнойСписок.СрезПоследних --- наоборот берете количество фактически занятых должностей (п.п.2)
разница между п.п.1 и п.п.2 даст вам п.п.3

LexaK Поправьте пожалуйста, если что не так. Поясню: справочник ШтатныеДолжности подчиненный, в нем владелец - это подразделение в которой есть эта должность (может быть несколько одинаковых должностей, скрин вовложении) - отсюда хочу получить общее количество должностей за организацию:
ВЫБРАТЬ
ШтатныеДолжности.Ссылка КАК Ссылка
ИЗ
Справочник.ШтатныеДолжности КАК ШтатныеДолжности
ГДЕ
ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)



Так получаю количество занятых должностей:
ВЫБРАТЬ
ШтатныеДолжности.Ссылка КАК Ссылка,
ПослужнойСписокСрезПоследних.Должность КАК Должность
ИЗ
Справочник.ШтатныеДолжности КАК ШтатныеДолжности
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
ПослужнойСписокСрезПоследних.Должность ЕСТЬ НЕ NULL
И ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)


Теперь как от общего количества отнять количество занятых и сделать это в СКД? Или я что-то не понял?

LexaK

еще раз, нужно штатное расписание
одной и той-же должности на разных кафедрах может быть разное количество мест,
например Замов может быть и 2 и 3 и много
конечно если вы распишите
Зам1,Зам2,Зам3,Зам4,Зам5,... - для каждого места свой элемент справочника (!!!)
тогда просто считайте количество элементов, примерно так

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение,
    Количество(1) как КоличествоДолжностей
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
сгруппировать по
    ШтатныеДолжности.Владелец

получите общее количество должностей по каждому подразделению (п.п.1)
(не понятно тогда как разбивать на должности - Зам, Инструктор, Препод)


Добавлено: 05 янв 2021, 13:33


или такой запрос используйте, поместите в СКД, просуммируйете ресурсы Место и МестоЗанято, получите между ними разность -- МестоСвободно

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение_ВК
    ШтатныеДолжности.Ссылка КАК Должность,
1 как Место, //место по расписанию
Выбор Когда ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
Тогда 0 Иначе 1
Конец как МестоЗанято
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
        ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
    ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)
УПОРЯДОЧИТЬ ПО
    ШтатныеДолжности.Владелец

ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: LexaK от 05 янв 2021, 13:07
еще раз, нужно штатное расписание
одной и той-же должности на разных кафедрах может быть разное количество мест,
например Замов может быть и 2 и 3 и много
конечно если вы распишите
Зам1,Зам2,Зам3,Зам4,Зам5,... - для каждого места свой элемент справочника (!!!)
тогда просто считайте количество элементов, примерно так

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение,
    Количество(1) как КоличествоДолжностей
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
сгруппировать по
    ШтатныеДолжности.Владелец

получите общее количество должностей по каждому подразделению (п.п.1)
(не понятно тогда как разбивать на должности - Зам, Инструктор, Препод)


Добавлено: 05 янв 2021, 13:33


или такой запрос используйте, поместите в СКД, просуммируйете ресурсы Место и МестоЗанято, получите между ними разность -- МестоСвободно

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение_ВК
    ШтатныеДолжности.Ссылка КАК Должность,
1 как Место, //место по расписанию
Выбор Когда ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
Тогда 0 Иначе 1
Конец как МестоЗанято
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
        ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
    ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)
УПОРЯДОЧИТЬ ПО
    ШтатныеДолжности.Владелец




LexaK да , у меня так и есть, для каждого места (должности) свой элемент справочника (специфика такая: например не зам.нач.кафедры - а зам.нач.22 кафедры - и это уникальное значение). Спасибо за код по подсчету общего количества. Но проблема в том, как объединить эти запросы для формирования отчета в СКД:
1. Подсчет общего количества должностей.
2.Подсчет количества занятых должностей.
3. Вычесть одно из другого.
Чтобы получить макет с колонками таблицы (во вложении без колонок "Общее количество" и "Количество занятых") в которой эти данные будут прописываться? Сейчас колонка только с количеством вакантных должностей..

LexaK

так вот же выложил вам запрос, просто вставьте в СКД, в ресурсах просуммируйте колонки Место, Занято, Свободно

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение_ВК
    ШтатныеДолжности.Ссылка КАК Должность,
    1 как Место, //место по расписанию
   
Выбор Когда ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
    Тогда 0 Иначе 1
    Конец как Занято,

Выбор Когда ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
    Тогда 1 Иначе 0
    Конец как Свободно
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
        ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
    ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)
ответ Понравился? (в смысле пригодился?)

Алексей_1985_06

Цитата: Алексей_1985_06 от 05 янв 2021, 13:52
Цитата: LexaK от 05 янв 2021, 13:07
еще раз, нужно штатное расписание
одной и той-же должности на разных кафедрах может быть разное количество мест,
например Замов может быть и 2 и 3 и много
конечно если вы распишите
Зам1,Зам2,Зам3,Зам4,Зам5,... - для каждого места свой элемент справочника (!!!)
тогда просто считайте количество элементов, примерно так

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение,
    Количество(1) как КоличествоДолжностей
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
сгруппировать по
    ШтатныеДолжности.Владелец

получите общее количество должностей по каждому подразделению (п.п.1)
(не понятно тогда как разбивать на должности - Зам, Инструктор, Препод)


Добавлено: 05 янв 2021, 13:33


или такой запрос используйте, поместите в СКД, просуммируйете ресурсы Место и МестоЗанято, получите между ними разность -- МестоСвободно

ВЫБРАТЬ
    ШтатныеДолжности.Владелец КАК Подразделение_ВК
    ШтатныеДолжности.Ссылка КАК Должность,
1 как Место, //место по расписанию
Выбор Когда ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
Тогда 0 Иначе 1
Конец как МестоЗанято
ИЗ
    Справочник.ШтатныеДолжности КАК ШтатныеДолжности
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
        ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
    ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)
УПОРЯДОЧИТЬ ПО
    ШтатныеДолжности.Владелец




LexaK да , у меня так и есть, для каждого места (должности) свой элемент справочника (специфика такая: например не зам.нач.кафедры - а зам.нач.22 кафедры - и это уникальное значение). Спасибо за код по подсчету общего количества. Но проблема в том, как объединить эти запросы для формирования отчета в СКД:
1. Подсчет общего количества должностей.
2.Подсчет количества занятых должностей.
3. Вычесть одно из другого.
Чтобы получить макет с колонками таблицы (во вложении без колонок "Общее количество" и "Количество занятых") в которой эти данные будут прописываться? Сейчас колонка только с количеством вакантных должностей..

LexaK извините, не увидел последний блок с кодом, да все отлично получилось как надо! Большое Вам спасибо! Подскажите только пожалуйста как в вычисляемом поле правильно написать разность полей, чтоб посчитать количество занятых должностей?
ВЫБРАТЬ
ШтатныеДолжности.Ссылка КАК ШтатнаяДолжность,
ШтатныеДолжности.Владелец КАК ШтатноеПодразделение,
1 КАК КоличествоДолжностей,
ВЫБОР
КОГДА ПослужнойСписокСрезПоследних.Должность ЕСТЬ NULL
ТОГДА 0
ИНАЧЕ 1
КОНЕЦ КАК ДолжностьЗанята
ИЗ
Справочник.ШтатныеДолжности КАК ШтатныеДолжности
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПослужнойСписок.СрезПоследних КАК ПослужнойСписокСрезПоследних
ПО (ПослужнойСписокСрезПоследних.Должность = ШтатныеДолжности.Ссылка)
ГДЕ
ШтатныеДолжности.КлассификацияДолжности = ЗНАЧЕНИЕ(Перечисление.КлассификацияДолжности.Военная)

УПОРЯДОЧИТЬ ПО
ШтатныеДолжности.Владелец

LexaK

Цитироватьчтоб посчитать количество занятых должностей?
на закладке Ресурсы
Сумма(ДолжностьЗанята) - это и будет количество занятых должностей в разрезе группировок
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск