Разминка для ума-3. Расчет
Многие без труда выполнили первое задание по расчету, это хорошо.
Предлагаю немного позаниматься запросами, а именно механизмом заполнения документа “Начисление заработной платы”.
Возьмите выгрузку ИБ после 4-го блока. Увольте Иванова 20 марта 2010 года (можно исправить дату увольнения в существующем документе).
Выполните автоматическое заполнение документа начисления за март. Вы увидите, что система “обижает” Иванова.
Задача – исправить запрос автоматического заполнения, так чтобы данные заполнялись корректно.
Также следует проверить и такую ситуацию: Иванова 23 марта вновь восстановили в должности (приняли на работу), а 29 марта опять уволили (не повезло человеку). Во всех случаях система должна выдавать корректный результат.
ps. Свое решение этой задачи приведу в рамках сегодняшней сессии мастер-группы.
Я по ходу опоздал..
Де “не правильный” исходник?!..
Та “правильный” заходник…
Каков вопрос, таков ответ
Попробуем еще раз?
Евгений, Ваше решение не отлавливает изменение оклада, если оно проводилось 2 раза за период. Мне кажется, что раз возникают такие проблемы при заполнении документов и нужны такие непростые запросы, то правильнее доработать регистры сведений и процедуру проведения документа перемещение. Изменение графика у нас тоже не отрабатывает корректно, т.к. при проведении – про изменение регистра “Работники организаций” мы забыли:))
Сейчас провел тест. Сделал еще одно изменение оклада Сидорова 16 марта. Теперь по нему появляются 3 записи в документе.
Кажется, что все ОК.
По поводу изменения структуры регистров – согласен.
Точно.Извиняюсь, после разминки ума не те даты ставила. Еще вопрос: Зачем нам таблица среза последних на дату окончания? Почему недостаточно Среза на начало и изменений?
Да, вы правы, можно было и без среза последних обойтись.
Сделано. Ум размялся))). Основная проблема была с изменением оклада
Сделал! Уже после увольнения 29.03 я его еще раз принял 30.03 и все равно считает правильно! Ура товарищи!
Сделал 2мя запросами. Первый запрос соединением физ.таблиц РАботникиОрганизация, второй – срез последних на дату конца месяца, чтобы учесть работу на конец месяца.
Евгений, а виртуальную таблицу же нельзя же параметризовать по данным самого запроса? Параметр обязательно должен быть внешним? А то можно было бы например выловить все даты увольнений в течении месяца и соединить со срезом последних на дату увольнения…
В период нельзя передавать данные из внешнего запроса. К сожалению.
:)
Евгений, не грузите пожалуйста пока решение… Дайте подумать :) Задача действительно инетерсная и нужная.
Решение уже загружено, но ссылки пока не опубликованы :)
Давайте хотя бы до вечера подождем… А то решение убивает мыслительную активность :)
Давайте так – даю еще 3 часа, после опубликую свое решение.
Ура. Сделала. Пришлось помучиться. Но зато теперь все как положено :)
Да уж, задал Иванов задачу), то работаю, то не работаю, а нам заморачиваться))). Сделал еще один запрос для ТНачисления на основе физической таблицы регистра сведений и двух виртуальных (наверное перебор), вроде отлавливаются эти увольнения. А если оклад (тариф) в течении месяца у сотрудника раза три поменяется? Вообщем жду правильного решения.
Это, пожалуй, тот основной вопрос, который мне не удалось осознать по лекциям – как все сделать именно и только запросом.
У меня получается, что, если считать, что сотрудник может быть многократно принят и уволен за период расчета, например, за месяц, а также, перемещен, то, без циклов не обойтись, так как заранее мы не знаем, сколько таких интервалов было по каждому виду начисления или удержания.
Пока тоже не получается только одним запросом :(
Хотя для счастья и обходом хватает :)
Но в этом как раз, как я понимаю, две большие разницы – ОДНИМ ЗАПРОСОМ или РАЗНЫМИ ЗАПРОСАМИ И ЦИКЛАМИ ПО НИМ
Хорошая задачка. :)
Если учесть что кроме периода работы до увольнения не учитываются кадровые перемещения с изменением оклада и графика то запрос (на мой взгляд) нужно серьезно переписывать.
Основной проблемой для меня стало определить начало периода после кадрового перемещения в одной строке результата запроса при таком построении системы.
Жду решения учителя.
Разумеется все кадровые перемещения нужно тоже учитывать )
Глава 5 урок 9: вы создали документ перемещение и создали два реквизита ПодразделениеОткуда, ПодразделениеКуда, затем по ним создали два движения в регистр сведений “РаботникиОрганизаций”. Например:
11.04.2010 Цех1
20.09.2010 Бухгалтерия
Но в жизни, не всё так просто, наступило 21 число 9 месяца, и сотрудника решили продлить временно, скажем до 20.10.2010 г. в Цех1, что в этом случае можно сделать? Можно сделать новое движение на 21 число 9 месяца, но тогда история будет показывать, что сотрудник вначале был 11.04 в Цех1, потом 20.09 в бухгалтерии, а потом 21.09 снова в Цехе 1 и 20.10 вернулся в бухгалтерию. При этом проводимый документ на 11.04 должен отражать действительную запись, что его временно брали с 11.04 по 20.09, т.е. в документе нельзя корректировать 20.09 дату перемещения и менять ее на 20.10.2010. При этом хотелось бы, чтобы компьютер 20.09.2010 года перевел сотрудника автоматически в бухгалтерию, а кадровик если что, должен продлить, если всё-таки сотрудник остался. Как поступить в такой ситуации?
или, например, может быть такая ситуация, сотрудника временно перевели в другой цех с 01.04.2010 по 01.09.2010, т.е. документ мы провели, а потом оказалось, что его увольняют 01.09.2010 г., т.е. получается тоже не стыковка данных. :(
Этот момент должен учитывать документ “Увольнение”, он должен подчистить за собой все “хвосты”.
По логике в этой ситуации создается еще один приказ. То есть нужно оформить новый документ.
Новый вид документа для этой цели создавать не хочется.
Например, такое решение: прежний приказ не перемещение отсторнировать, и создать новый с 01.04 по 20.10.
Тогда и старый приказ останется и данные будут корректные.
Думаю, задача сводится к тому, чтобы научиться брать “срез последних” на проивольную дату …
… естественно “в лоб” через вирт. таблицу “СрезПоследних” этого не сделать … нужно реализовать срез самому (знаю как минимум 2 варианта как это сделать … они похожи между собой).
Наверняка задача имеет не один вариант решения.
Тот, который продемонстрирую я, является простым (на мой взгляд).
C этим тяжело не согласится :)
P.S. Вроде сделал … Иванов доволен :)
Отлично ))
А можно чуть не в тему? Вроде понедельный расчет зарплаты обещали… :) Будет? Или в рамках продвинутого?
Будет, в рамках продвинутого :)
Может отложить выкладывание, решения этой задачи – до определнного количества ответов, чтоб был стимул разобраться самим?!..
Решение выложим не раньше, чем через 6 часов..