Разминка для ума-3. Расчет

Многие без труда выполнили первое задание по расчету, это хорошо.

Предлагаю немного позаниматься запросами, а именно механизмом заполнения документа “Начисление заработной платы”.

Возьмите выгрузку ИБ после 4-го блока. Увольте Иванова 20 марта 2010 года (можно исправить дату увольнения в существующем документе).

Выполните автоматическое заполнение документа начисления за март. Вы увидите, что система “обижает” Иванова.

Задача – исправить запрос автоматического заполнения, так чтобы данные заполнялись корректно.

Также следует проверить и такую ситуацию: Иванова 23 марта вновь восстановили в должности (приняли на работу), а 29 марта опять уволили (не повезло человеку). Во всех случаях система должна выдавать корректный результат.

ps. Свое решение этой задачи приведу в рамках сегодняшней сессии мастер-группы.

комментария 34 на “Разминка для ума-3. Расчет”

  1. Я по ходу опоздал..
    Де “не правильный” исходник?!..

    • Та “правильный” заходник…

      Каков вопрос, таков ответ
      Попробуем еще раз?

  2. Евгений, Ваше решение не отлавливает изменение оклада, если оно проводилось 2 раза за период. Мне кажется, что раз возникают такие проблемы при заполнении документов и нужны такие непростые запросы, то правильнее доработать регистры сведений и процедуру проведения документа перемещение. Изменение графика у нас тоже не отрабатывает корректно, т.к. при проведении – про изменение регистра “Работники организаций” мы забыли:))

    • Сейчас провел тест. Сделал еще одно изменение оклада Сидорова 16 марта. Теперь по нему появляются 3 записи в документе.
      Кажется, что все ОК.
      По поводу изменения структуры регистров – согласен.

      • Точно.Извиняюсь, после разминки ума не те даты ставила. Еще вопрос: Зачем нам таблица среза последних на дату окончания? Почему недостаточно Среза на начало и изменений?

        • Да, вы правы, можно было и без среза последних обойтись.

  3. Сделано. Ум размялся))). Основная проблема была с изменением оклада

  4. Михайлов Сергей 26.08.2010 в 09:53

    Сделал! Уже после увольнения 29.03 я его еще раз принял 30.03 и все равно считает правильно! Ура товарищи!

    • Михайлов Сергей 26.08.2010 в 10:00

      Сделал 2мя запросами. Первый запрос соединением физ.таблиц РАботникиОрганизация, второй – срез последних на дату конца месяца, чтобы учесть работу на конец месяца.

    • Михайлов Сергей 26.08.2010 в 10:15

      Евгений, а виртуальную таблицу же нельзя же параметризовать по данным самого запроса? Параметр обязательно должен быть внешним? А то можно было бы например выловить все даты увольнений в течении месяца и соединить со срезом последних на дату увольнения…

      • В период нельзя передавать данные из внешнего запроса. К сожалению.

    • :)

  5. Михайлов Сергей 26.08.2010 в 08:43

    Евгений, не грузите пожалуйста пока решение… Дайте подумать :) Задача действительно инетерсная и нужная.

    • Решение уже загружено, но ссылки пока не опубликованы :)

      • Михайлов Сергей 26.08.2010 в 09:06

        Давайте хотя бы до вечера подождем… А то решение убивает мыслительную активность :)

        • Давайте так – даю еще 3 часа, после опубликую свое решение.

  6. Ура. Сделала. Пришлось помучиться. Но зато теперь все как положено :)

  7. Да уж, задал Иванов задачу), то работаю, то не работаю, а нам заморачиваться))). Сделал еще один запрос для ТНачисления на основе физической таблицы регистра сведений и двух виртуальных (наверное перебор), вроде отлавливаются эти увольнения. А если оклад (тариф) в течении месяца у сотрудника раза три поменяется? Вообщем жду правильного решения.

  8. progr-2008 25.08.2010 в 19:38

    Это, пожалуй, тот основной вопрос, который мне не удалось осознать по лекциям – как все сделать именно и только запросом.
    У меня получается, что, если считать, что сотрудник может быть многократно принят и уволен за период расчета, например, за месяц, а также, перемещен, то, без циклов не обойтись, так как заранее мы не знаем, сколько таких интервалов было по каждому виду начисления или удержания.

    • Пока тоже не получается только одним запросом :(
      Хотя для счастья и обходом хватает :)
      Но в этом как раз, как я понимаю, две большие разницы – ОДНИМ ЗАПРОСОМ или РАЗНЫМИ ЗАПРОСАМИ И ЦИКЛАМИ ПО НИМ

  9. Леонид 25.08.2010 в 19:07

    Хорошая задачка. :)
    Если учесть что кроме периода работы до увольнения не учитываются кадровые перемещения с изменением оклада и графика то запрос (на мой взгляд) нужно серьезно переписывать.
    Основной проблемой для меня стало определить начало периода после кадрового перемещения в одной строке результата запроса при таком построении системы.
    Жду решения учителя.

    • Разумеется все кадровые перемещения нужно тоже учитывать )

  10. Глава 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.
      Тогда и старый приказ останется и данные будут корректные.

  11. Думаю, задача сводится к тому, чтобы научиться брать “срез последних” на проивольную дату …

    … естественно “в лоб” через вирт. таблицу “СрезПоследних” этого не сделать … нужно реализовать срез самому (знаю как минимум 2 варианта как это сделать … они похожи между собой).

    • Наверняка задача имеет не один вариант решения.
      Тот, который продемонстрирую я, является простым (на мой взгляд).

  12. Михайлов Сергей 25.08.2010 в 14:49

    А можно чуть не в тему? Вроде понедельный расчет зарплаты обещали… :) Будет? Или в рамках продвинутого?

  13. Может отложить выкладывание, решения этой задачи – до определнного количества ответов, чтоб был стимул разобраться самим?!..

    • Решение выложим не раньше, чем через 6 часов..