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

неправильный запрос

Автор dima.karpov, 07 янв 2018, 15:41

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

dima.karpov

Есть ДокументРасходДенежныхСредств


Есть РегистрСведенийСотрудникиПодразделений


У них общее поле Сотрудник.
Сотрудники сегодня они могут работать в одном подразделении, завтра - в другом. Их перемещение по подразделениям фиксируется с помощью  РегистрСведенийСотрудникиПодразделений.
Например, Иванов работал Бухгалтером вчера и ему выделили деньги из бюджета 5000 (это фиксируется в ДокументРасходДенежныхСредств), завтра он будет программистом и ему выделят 7000. 
Нужно, вывести выплаты подразделениям за все время (не сотрудникам!).
Написал такой запрос (явно что-то не хватает), не могу понять как что подправить тут.

ВЫБРАТЬ
СотрудникиПодразделений.Сотрудник,
СотрудникиПодразделений.Подразделение,
СотрудникиПодразделений.Период,
РасходДенежныхСредств.Дата КАК ДатаРасхода,
РасходДенежныхСредств.СуммаДокумента КАК СуммаДокумента
ИЗ
РегистрСведений.СотрудникиПодразделений КАК СотрудникиПодразделений
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходДенежныхСредств КАК РасходДенежныхСредств
ПО СотрудникиПодразделений.Сотрудник = РасходДенежныхСредств.Контрагент


Результат:


Как правильно составить запрос?
если что-то не понятно/ неправильно, сильно пожалуйста не судите.

IL2016

Цитата: dima.karpov от 07 янв 2018, 15:41Нужно, вывести выплаты подразделениям за все время (не сотрудникам!).
для этого логичнее использовать регистр расчета либо рег.накопления с видом регистра обороты.На виртуальную таблицу регистра можно установить параметры и условия.
Но если просто сделать отчет за все время, то можно использовать просто ваш рег.сведений.

в скд на платформе 8.3 легко можно сделать.
получится отчет как на скрине (условный пример, немного абстракции к данным отчета, типа Склад это Подразделение, и т.д.).

Использую учебную платформу 1С:Предприятие 8.3

dima.karpov

Цитата: IL2016 от 08 янв 2018, 12:19
Цитата: dima.karpov от 07 янв 2018, 15:41Нужно, вывести выплаты подразделениям за все время (не сотрудникам!).
для этого логичнее использовать регистр расчета либо рег.накопления с видом регистра обороты.На виртуальную таблицу регистра можно установить параметры и условия.
Но если просто сделать отчет за все время, то можно использовать просто ваш рег.сведений.

в скд на платформе 8.3 легко можно сделать.
получится отчет как на скрине (условный пример, немного абстракции к данным отчета, типа Склад это Подразделение, и т.д.).

да, нужно использовать только рег.сведений.
но я все равно не понял, какие мне нужно условия добавить..

LexaK

да, вы правильно начали решать задачу (имея исходные данные такие, какие они есть)
но вы соединили данные двух регистров только по одному параметру, по Сотруднику(отсюда у вас пошло задвоение сумм),
а по условию необходимо еще использовать связь по Датам.
Период в который сотрудник был в том или ином подразделении
и Дата документа по которому был расход

поэтому в запросе сначала надо построить таблицу с датой начала и окончания нахождения сотрудника в подразделении
затем по сотруднику и по полученному периоду присоединить расходы. вот примерный вид запроса,
(проверен на тестовых данных, работает и при условии что у вас правильные данные)
данный запрос всего лишь пример, возможны варианты, например отбор по периоду, учет уволенных сотрудников и/или работающих по совместительству и т.д.

ВЫБРАТЬ
    Рег.Сотрудник,
    Рег.Подразделение,
    Рег.Период,
    Док.Дата КАК ДатаРасхода,
    Док.СуммаДокумента КАК СуммаДокумента
ИЗ
    РегистрСведений.СотрудникиПодразделений КАК Рег
   
//формируем периоды работы Сотрудник - Подразделение
левое соединение РегистрСведений.СотрудникиПодразделений Рег1
по Рег.Сотрудник = Рег1.Сотрудник
и Рег.Период < Рег1.Период

левое соединение РегистрСведений.СотрудникиПодразделений Рег2
по Рег.Сотрудник = Рег2.Сотрудник
и Рег.Период < Рег2.Период
и Рег1.Период > Рег2.Период
   
   
левое соединение Документ.РасходДенежныхСредств Док
//соединение по сотруднику
по Рег.Сотрудник = Док.Контрагент
//привязка документа по периоду работы сотрудника в подразделении
и Док.Дата между Рег.Период и ЕстьNull(Рег1.Период,Док.Дата)

где
Рег2.Период есть Null
и Док.СуммаДокумента есть Не Null
если помогло нажмите: Спасибо!

dima.karpov

Цитата: LexaK от 08 янв 2018, 21:08
да, вы правильно начали решать задачу (имея исходные данные такие, какие они есть)
но вы соединили данные двух регистров только по одному параметру, по Сотруднику(отсюда у вас пошло задвоение сумм),
а по условию необходимо еще использовать связь по Датам.
Период в который сотрудник был в том или ином подразделении
и Дата документа по которому был расход

поэтому в запросе сначала надо построить таблицу с датой начала и окончания нахождения сотрудника в подразделении
затем по сотруднику и по полученному периоду присоединить расходы. вот примерный вид запроса,
(проверен на тестовых данных, работает и при условии что у вас правильные данные)
данный запрос всего лишь пример, возможны варианты, например отбор по периоду, учет уволенных сотрудников и/или работающих по совместительству и т.д.

ВЫБРАТЬ
    Рег.Сотрудник,
    Рег.Подразделение,
    Рег.Период,
    Док.Дата КАК ДатаРасхода,
    Док.СуммаДокумента КАК СуммаДокумента
ИЗ
    РегистрСведений.СотрудникиПодразделений КАК Рег
   
//формируем периоды работы Сотрудник - Подразделение
левое соединение РегистрСведений.СотрудникиПодразделений Рег1
по Рег.Сотрудник = Рег1.Сотрудник
и Рег.Период < Рег1.Период

левое соединение РегистрСведений.СотрудникиПодразделений Рег2
по Рег.Сотрудник = Рег2.Сотрудник
и Рег.Период < Рег2.Период
и Рег1.Период > Рег2.Период
   
   
левое соединение Документ.РасходДенежныхСредств Док
//соединение по сотруднику
по Рег.Сотрудник = Док.Контрагент
//привязка документа по периоду работы сотрудника в подразделении
и Док.Дата между Рег.Период и ЕстьNull(Рег1.Период,Док.Дата)

где
Рег2.Период есть Null
и Док.СуммаДокумента есть Не Null



человеческое спасибо!!!!!
очень помогли новичку ;)

Теги:

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

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

Поиск