Подготовка к аттестации. Задача 14 “Командировки”

Начинаем решать расчетные задачи.

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

Итак, задача 3.6…

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментария 23 на “Подготовка к аттестации. Задача 14 “Командировки””

  1. BelyaninSN 09.07.2012 в 18:54

    В какой задаче рисовали диаграмму Ганта? Не в расчетной? Можно номер? (а то я часть задач пропустил иду по расчетным.)

  2. BelyaninSN 09.07.2012 в 18:51

    Как сторнировать премию, если командировка вытесняет оклад задним числом?

    • Премия попадет в таблицу перерасчетов.

  3. BelyaninSN 09.07.2012 в 18:42

    3. Как-то в одном из уроков Вы сказали, что требуется реализовывать алгоритмы не привязанные к предопределенным видам начислений. И реализовывали через Перечисление. Это обязательное требование для всех задач? Или такое требование может присутствовать в тексте задачи?

    • Требование в тексте задачи “Требуется дать возможность пользователю самостоятельно создавать виды расчета и привязывать их к стандартным алгоритмам”.

  4. BelyaninSN 09.07.2012 в 18:39

    2. Для расчета даты использовал такой цикл в обработке проведения:
    .
    Для каждого Стр Из ОсновныеНачисления Цикл

    Движение = Движения.ОсновныеНачисления.Добавить();
    ЗаполнитьЗначенияСвойств(Движение, Стр);
    Движение.ПериодРегистрации = Дата;

    Если Движение.ВидРасчета.ВидРасчета = ПредопределенноеЗначение(“Перечисление.ВидыРасчета.Командировка”) Тогда

    Пока НачалоМесяца(Движение.ПериодДействияНачало)<>НачалоМесяца(Движение.ПериодДействияКонец) Цикл

    ДубльДвижение = Движения.ОсновныеНачисления.Добавить();
    ЗаполнитьЗначенияСвойств(ДубльДвижение, Движение);
    ДубльДвижение.ПериодДействияКонец = КонецМесяца(Движение.ПериодДействияНачало);
    Движение.ПериодДействияНачало = КонецМесяца(Движение.ПериодДействияНачало)+24*60*60;

    КонецЦикла;

    КонецЕсли;

    КонецЦикла;
    .

     Чем это грозит? Допустима ли такая реализация? (можно поправить на КонецДня, принципиально алгоритм не изменится)

    • На что тут надо обратить внимание? Куда хотите писать “КонецДня”?

      • BelyaninSN 10.07.2012 в 11:19

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

        • Извините, но я правда не понимаю в чем рационализаторство… Можно задачу решить просто перебирая дни, часы, секунды… Разность в месяцах быстрее и удобнее рассчитать в запросе.

          • BelyaninSN 10.07.2012 в 12:49

            На мой взгляд мой вариант ни более и не менее рационален чем Ваш.
            В Вашем варианте запрос, и дополнительные вычисления для начала и конца месяца, в которых нет “разделения” на строчки.
            В моем варианте цикл будет попадать в тело цикла реже, т.к. только пир выполнении условия требуется заменять дату.
            Количество итераци при проходе по “разделяющимся” строчкам одинаково.
            .
            Думаю разницу в производительности можно будет отследить на документах с количеством строк превышающих тысячи, может сотни тысяч строк – не ранее. (хотя я конечно не тестировал производительность).
            .
            Вопрос:
            1)  присутствуют ли в моем решении очевидные недостатки, которых я не заметил?
            2)  Чем “быстрее и удобнее рассчитать в запросе”?

            • У нас курс “подготовка к аттестации”, а не “красота кода и производительность”.

              Запрос исполняется средствами SQL сервера, код – средствами сервера приложений. Что быстрее – проверьте сами, введите тестовый пример на нормальном тест-стенде, проведите нагрузочное тестирование, поделитесь результатами. У меня тест-стенда под рукой нет. Красота кода и удобство – дело субъективное.

              Про скорость: у Вас бОльшее количество операторов используется: приведение дат к началу/концу месяца, проверка равенства дат, непонятно зачем использована функция ПредопределенноеЗначение. Думаю, что Ваш код будет существенно уступать в производительности моему.

  5. BelyaninSN 09.07.2012 в 18:37

    1. Добавил Ресурс ОтработаноЧасов в ОсновныеНачисления, в результате считаю базу по часам “пятидневки” для командировки в шестидневке без всякого разделения на Пяти-шести-дневные ресурсы РС РабочийКалендарь. Это правомочно?
     

    • Пожалуйста приводите контекст вопроса, мне довольно сложно переключаться между почти 40 разобранными задачами.
      Добавление ресурса в РР даст возможность получать фактически отработанные часы в базовом периоде.

      • BelyaninSN 10.07.2012 в 11:16

        Четырнадцатая задача. Вы говорите, что-то вроде “что бы делить начисления прошлого периода на “пятидневные” часы прошлого периода и умножать на “шестидневные” часы текущего периода для начисления командировки – необходимо вводить два ресурса в регистре сведений”.
        Я же решаю ту же задачу через добаление ресурса в РР. Чем это черевато? 

        • И как Вы получаете “количество рабочих часов в предыдущем месяце” не “отработанных“, а рабочих? Если сотрудник вообще не работал в прошлом месяце?

          • BelyaninSN 10.07.2012 в 12:51

            Какой-то странный глюк форума. Не могу отправить ответ
            “Понял. Благодарю.”

            выдает абракадабру в какой-то неверной кодировке. 

            Или это защита от коротких ответов так настроена? 

  6. Денис Попов 01.06.2012 в 16:56

    Простите, никак не могу понять фразу:
    ” Сумма начисления по окладу определяется как начальное значение оклада, деленное на количество отработанных часов в том же периоде, что и фактически отработанные часы.” 
    Как все-таки оклад считается?

    • Денис Попов 01.06.2012 в 17:05

      почитал оригинал, стало яснее.. прошу прощения.

  7. Patio-5Element 27.05.2012 в 22:06

    Добрый день.
    Предлагаю задачу 3.31

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

    • На сертификации это не должно повлечь изменение оценки. В реальности я рекомендую все данные для расчета хранить в регистре расчета.