Помогите с запросом, срез последних на каждый день + дополнение из регистра #804223


#0 by breezee
Добрый день! Готовлюсь к спецу по платформе, есть документ "РасчетЗП" и регистр "Сведения о сотрудниках". Мне надо получить данные по сотруднику и подразделению из регистра "Сведения о сотрудниках". Я получаю данные по окладу на даты в документе "РасчетЗП" и Даты изменения из регистра с окладами. А что дальше делать с данными не понимаю. Подскажите, пожалуйста, как полученными мной "интервалами" разбить периоды. То есть получается таблица вида: Бельдыев    Бухгалтерия    04.09.2017    08.09.2017    30.09.2017    Да    100,00 Бельдыев    Бухгалтерия    15.09.2017    Не важно что за дата    Не важно что за дата    Нет    20,00 Бельдыев    Бухгалтерия    17.09.2017    Не важно что за дата    Не важно что за дата    Нет    14,00 А мне нужна: Бельдыев    Бухгалтерия    08.09.2017    30.09.2017    Да    100,00 Бельдыев    Бухгалтерия    15.09.2017    17.09.2017    Нет    20,00 Бельдыев    Бухгалтерия    17.09.2017    30.09.2017    Нет    14,00 Как это сделать? Текущий запрос: ВЫБРАТЬ     НачислениеЗарплатыОсновныеНачисления.Сотрудник КАК Сотрудник,     НачислениеЗарплатыОсновныеНачисления.Подразделение КАК Подразделение,     Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления     ЛОЖЬ ИЗ             И (СведенияОСотрудниках.Период МЕЖДУ ВТ_Документа.ДатаНачала И ВТ_Документа.ДатаОкончания) ;
#1 by breezee
Извините, нужна таблица вида: Бельдыев    Бухгалтерия    08.09.2017    15.09.2017       100,00 Бельдыев    Бухгалтерия    15.09.2017    17.09.2017    20,00 Бельдыев    Бухгалтерия    17.09.2017    30.09.2017    14,00
#2 by Хрыч
Зачем тебе документ, если в РС вся необходимая информация есть?
#3 by breezee
Нет там необходимой информации. В регистре хранится только сведений об окладе. Сведения о выходе/невыходе в документе. То есть инфа о том что сотрудник работал с 04.09 по 08.09 хранится только в ТЧ Документа
#4 by breezee
На случай если я плохо описал задачу, вот из билета: Сотрудники предприятия получают оплату по окладу пропорционально отработанному времени в часах. Часовая ставка рассчитывается как начальное значение оклада, деленное на количество рабочих часов в том же периоде, что и фактически отработанные часы. В течение расчетного периода первоначальное значение оклада может быть неоднократно изменено. В информационной базе необходимо хранить историю его изменения. Расчет должен проводиться исходя из действующего на рассчитываемую дату начального значения оклада. Например, если начальное значение оклада изменилось 10 августа, то до 10 августа при расчете берется старое значение, а начиная с 10 августа – новое. Помогите, плз, весь день над ней бьюсь
#5 by Хрыч
то бишь в ТЧ документа есть список работников с периодами их фактической работы, а в РС оклад, и надо начислить зарплату?
#6 by breezee
Да, все верно
#7 by Хрыч
Здесь сразу нужно допустить, что по одному работнику может быть несколько строк с непересекающимися интервалами. Например, Петров с 01.08 по 10.08 и с 11.08 по 30.08. просто потому, что это учебная задача, и экзаменатор от тебя извращений не ждет.
#8 by breezee
Спасибо, интервалы действительно не пересекаются, но вот оклад может изменяться хот тыщу раз и эти строки нужны в результате. И как это в запросе разбить я ума не приложу(
#9 by breezee
Если есть идеи - подскажите, пожалуйста, можно на словах, не кодом
#10 by Хрыч
Я имею в виду, что дата изменения оклада никогда не попадает в середину интервала. То есть строки документа дробить не надо.
#11 by Хрыч
А дальше читаешь строки документа, связываешь с регистром по сотруднику и подразделению и для начала каждого периода выбираешь последнюю дату изменения.
#12 by Хрыч
То есть максимум даты, предшествующей началу интервала
#13 by Хрыч
По этим трем ключевым признакам: подразделение, сотрудник, дата изменения - получаешь соответствующую запись регистра с окладом
#14 by breezee
Срез последних на дату? Это я сделал) А потом мне балл за упрощению снимут :D И так 1 раз не сдал уже(по другой причине)
#15 by Хрыч
Нет, срез последних не получится, потому что у тебя список сотрудников, и у каждого свой интервал. Надо брать основную таблицу регистра и связываеть его со строками документа по подразделению (равно), сотруднику (равно) и дате (не больше), группировать по подразделению и сотруднику с функцией максимум для периода. Так получишь временную таблицу с последними изменениями для каждого подразделение+сотрудник+интервал
#16 by Хрыч
нет, такую упрощенку допускает сам Белоусов на консультации. Просто тупо пишет две строки, исходя из того, что изменился оклад
#17 by Хрыч
Эту временную таблицу опять связываешь с регистром (только теперь все равно) и получаешь соответвующую запись с окладом для каждого  Подразделение+Сотрудник+Интервал
#18 by Хрыч
группировать по подразделению, сотруднику и интервалу конечно
#19 by Хрыч
#20 by breezee
Понял, спасибо!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

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