Как сделать срез последних помесячно #468388


#0 by misha122062
Есть запрос, он делает выборку, где есть параметры ДатаЗначения и Сотрудник и надо соеденить с регистром сведений РаботникиОрганизаций с целью получения должности на указанную дату. Что то не пойму как сделать. Или сделать выгрузку в ТЗ сотрудника и нужной даты, а потом в качестве параметра в отдельный запрос и потом соединять через временные таблицы. Проблема в том, что в выборке у каждого сотрудника куча дат для получения среза его должности на дату. Подскажите, кто знает, как это сделать. |ЛЕВОЕ СОЕДИНЕНИЕ
#1 by Defender aka LINN
;
#2 by misha122062
спасибо, посмотрю
#3 by misha122062
Не очень понял - зачем 2 раза левое соединение - поясните смысл, плиз. И еще в приведенном примере запроса, как я понимаю, слово МАКСИМУМ можно не использовать - т.к. интересует на конкретную дату?
#4 by Defender aka LINN
На бумажке нарисуй себе таблички, и проследи, что сервер делает. Многое поймешь.
#5 by misha122062
Пробовал разобраться, соединения часто использую. Но здесь туплю. Поясни, не сложно?
#6 by misha122062
пра. с табличками понял
#7 by 73
Срез последних - это не реальная таблица, а виртуальная. По сути вложенный запрос. В показано, как срез представить запросом по реальной таблице и при этом добавить то, что не реализовано в виртуальной.
#8 by misha122062
Не идет - пишет "Поле не входит в группу "РаботникиОрганизаций.Период"    ЛЕВОЕ СОЕДИНЕНИЕ <<?>> РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций" К чему это, кто в курсе? Сделал как впримере.
#9 by 73
* - нехорошо. Раз есть МАКСИМУМ, должно быть и СГРУППИРОВАТЬ по остальным полям.
#10 by misha122062
А что же в примере тогда (ВЫБРАТЬ ЗаказПокупателя.Ссылка КАК СсылкаДок, ЗаказПокупателя.Дата КАК ДатаДок, ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Валюты  ПО Валюты.Период <= ЗаказПокупателя.Дата И     Валюты.Валюта = ЗаказПокупателя.ВалютаДокумента СГРУППИРОВАТЬ ПО ЗаказПокупателя.Ссылка ) КАК Таб1 Где неверно? Почему там нет группировки по ЗаказПокупателя.Дата, ЗаказПокупателя.ВалютаДокумента
#11 by misha122062
Переделал . Ошибка - таже. Не пойму зачем требует группировать по РаботникиОрганизаций.Период? Простое левое соединение
#12 by Defender aka LINN
потому что агрегатная функция есть. ВСЕ остальные поля должны быть в "СГРУППИРОВАТЬ ПО"
#13 by 73
* - это все поля, и Период в том числе. Т.е. в ты Период и в Максимум записал и в Сгруппировать, а надо либо туды, либо сюда.
#14 by 73
+ Еще к : Там нет группировок по Дата и (что-там еще), потому что там - документ. Достаточно сгруппировать по Ссылке. Если же тот запрос пропустить через конструктор, то он добавит.
#15 by misha122062
А почему же во 2 запросе прокатывает |СчетДт, Затраты, КодЗатрат, Сотрудник, Период, ПериодСтрокой,
#16 by 73
Потому что корректно записал: Поля - либо в Сгруппировать, либо в агрегатных функциях.
#17 by 73
+ Смотри: 7 полей. 6 - СчетДт, Затраты, КодЗатрат, Сотрудник, Период, ПериодСтрокой и здесь они же 6: СГРУППИРОВАТЬ ПО СчетДт, Затраты, КодЗатрат, Сотрудник, Период, ПериодСтрокой 7-е в агрегатной ф-ции: СУММА(СуммаЗатрат)
#18 by misha122062
наверно конструктор не понял Период это ВложенныйЗапрос2.Период, а в МАКСИМУМ - РаботникиОрганизаций.Период. Наверно нужен другой псевдоним
#19 by misha122062
это я понял - конструктор не понял, про какой я период
#20 by misha122062
Написал ВложенныйЗапрос2.Период - вроде схавал
#21 by misha122062
Спсибо - работает, но немного не так - период ПериодРаботникиОрганизаций пустой - NULL/ Почему так и не пойму.
#22 by misha122062
Т.е. МАКСИМУМ(РаботникиОрганизаций.Период) возращает NULL
#23 by 73
По-моему, наоборот надо. Твою основную таблицу что в описал как ДатаЗначения и Сотрудник, а к ней Левым прикручивать Регистр вложенными, делая срез.
#24 by 73
+ Вообще, что-то я не все понимаю сегодня...
#25 by misha122062
Немного не понял - а зачем вообще функция МАКСИМУМ? Но! ведь написано РаботникиОрганизаций.Период <=  ВложенныйЗапрос2.КонМесяца. Получается зачем функция МАКСИМУМ, если ВложенныйЗапрос2.КонМесяца всегда больше?
#26 by 73
Ну а что такое Срез? Запись с максимальным Периодом, который <= заданной даты. Для того и Максимум.
#27 by misha122062
так я так и делал. Делаю основной запрос - там есть даты концов месяцев работы сотрудников. К ней ЛЕВЫМ соединением привязываю Срез по их должностям на эти концы месяцев
#28 by misha122062
РаботникиОрганизаций.Период = 01.09.09 Должность Слесарь РаботникиОрганизаций.Период = 30.09.09 Должность Сборщик РаботникиОрганизаций.Период = 01.10.09 Должность Монтажник Разве СрезПоследних по должностям  = ВложенныйЗапрос2.КонМесяца = Концу месяца не даст результат на конец Сентября и Октября? зачем МАКСИМУМ тогда?
#29 by misha122062
Подскажите, а почему в лоб по простому нельзя? Точнее не идет - долность NULL. Мы же получаем на какую то дату, которая есть у нас. Или в параметрах среза надо задавать?
#30 by 73
Общий совет(туплю сегодня): Посмотри в во что разворачивается срез в зависимости от периодичности и т.п. Попробуй в консоли воспроизвести это для твоего регистра. Проверь чтоб работал. То что получится прилепи к твоему основному запросу. Вместо параметра &Дата поставь поле из основной таблицы(по которому срез хочешь).
#31 by 73
+ В после слов "Для общего развития"
#32 by misha122062
,Это понятно. Но не дает в соединении указать Дату из запроса Типа неверные параметры
#33 by 73
Не используй виртуальную таблицу. Напиши ее аналог.
#34 by 73
+ И потом условие по периоду здесь лишнее. Срез в качестве периода не всегда последнюю дату дает.
#35 by misha122062
Это как? Сделать временную таблицу ипотом ее прицепить?
#36 by misha122062
Ну по простому то идет
#37 by 73
Ну говорю же смотри: (ВЫБРАТЬ И тогда уже здесь прописываешь поле.
#38 by misha122062
Очень тяжело понятно.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С