Подготовка к аттестации. Задача 14 “Командировки”
Начинаем решать расчетные задачи.
Для начала я выбрал не самую сложную задачу, однако в ней необходимо предусмотреть сторнирование записей и реализовать возможность ввода записей с “перетекающим” периодом действия записи, нарисовать диаграмму Ганта.
Итак, задача 3.6…
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.
В какой задаче рисовали диаграмму Ганта? Не в расчетной? Можно номер? (а то я часть задач пропустил иду по расчетным.)
https://mg.spec8.ru/2012/06/12/dev-att-15-vacations/
Как сторнировать премию, если командировка вытесняет оклад задним числом?
Премия попадет в таблицу перерасчетов.
3. Как-то в одном из уроков Вы сказали, что требуется реализовывать алгоритмы не привязанные к предопределенным видам начислений. И реализовывали через Перечисление. Это обязательное требование для всех задач? Или такое требование может присутствовать в тексте задачи?
Требование в тексте задачи “Требуется дать возможность пользователю самостоятельно создавать виды расчета и привязывать их к стандартным алгоритмам”.
2. Для расчета даты использовал такой цикл в обработке проведения:
.
Для каждого Стр Из ОсновныеНачисления Цикл
Движение = Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Стр);
Движение.ПериодРегистрации = Дата;
Если Движение.ВидРасчета.ВидРасчета = ПредопределенноеЗначение(“Перечисление.ВидыРасчета.Командировка”) Тогда
Пока НачалоМесяца(Движение.ПериодДействияНачало)<>НачалоМесяца(Движение.ПериодДействияКонец) Цикл
ДубльДвижение = Движения.ОсновныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(ДубльДвижение, Движение);
ДубльДвижение.ПериодДействияКонец = КонецМесяца(Движение.ПериодДействияНачало);
Движение.ПериодДействияНачало = КонецМесяца(Движение.ПериодДействияНачало)+24*60*60;
КонецЦикла;
КонецЕсли;
КонецЦикла;
.
.
Чем это грозит? Допустима ли такая реализация? (можно поправить на КонецДня, принципиально алгоритм не изменится)
На что тут надо обратить внимание? Куда хотите писать “КонецДня”?
У Вас реализация через запрос.
У меня реализация через сравнение один месяц или два разных и последующее последовательное смещение даты начала.
Прошу Вас оценить рационален / нет мой вариант решения.
(на”КоенцДня” можно не обращать внимание. я как раз и написал, что на него не следует обращать внимание.)
Извините, но я правда не понимаю в чем рационализаторство… Можно задачу решить просто перебирая дни, часы, секунды… Разность в месяцах быстрее и удобнее рассчитать в запросе.
На мой взгляд мой вариант ни более и не менее рационален чем Ваш.
В Вашем варианте запрос, и дополнительные вычисления для начала и конца месяца, в которых нет “разделения” на строчки.
В моем варианте цикл будет попадать в тело цикла реже, т.к. только пир выполнении условия требуется заменять дату.
Количество итераци при проходе по “разделяющимся” строчкам одинаково.
.
Думаю разницу в производительности можно будет отследить на документах с количеством строк превышающих тысячи, может сотни тысяч строк – не ранее. (хотя я конечно не тестировал производительность).
.
Вопрос:
1) присутствуют ли в моем решении очевидные недостатки, которых я не заметил?
2) Чем “быстрее и удобнее рассчитать в запросе”?
У нас курс “подготовка к аттестации”, а не “красота кода и производительность”.
Запрос исполняется средствами SQL сервера, код – средствами сервера приложений. Что быстрее – проверьте сами, введите тестовый пример на нормальном тест-стенде, проведите нагрузочное тестирование, поделитесь результатами. У меня тест-стенда под рукой нет. Красота кода и удобство – дело субъективное.
Про скорость: у Вас бОльшее количество операторов используется: приведение дат к началу/концу месяца, проверка равенства дат, непонятно зачем использована функция ПредопределенноеЗначение. Думаю, что Ваш код будет существенно уступать в производительности моему.
Понял. Благодарю за ответ.
1. Добавил Ресурс ОтработаноЧасов в ОсновныеНачисления, в результате считаю базу по часам “пятидневки” для командировки в шестидневке без всякого разделения на Пяти-шести-дневные ресурсы РС РабочийКалендарь. Это правомочно?
Пожалуйста приводите контекст вопроса, мне довольно сложно переключаться между почти 40 разобранными задачами.
Добавление ресурса в РР даст возможность получать фактически отработанные часы в базовом периоде.
Четырнадцатая задача. Вы говорите, что-то вроде “что бы делить начисления прошлого периода на “пятидневные” часы прошлого периода и умножать на “шестидневные” часы текущего периода для начисления командировки – необходимо вводить два ресурса в регистре сведений”.
Я же решаю ту же задачу через добаление ресурса в РР. Чем это черевато?
И как Вы получаете “количество рабочих часов в предыдущем месяце” не “отработанных“, а рабочих? Если сотрудник вообще не работал в прошлом месяце?
Какой-то странный глюк форума. Не могу отправить ответ
“Понял. Благодарю.”
выдает абракадабру в какой-то неверной кодировке.
Или это защита от коротких ответов так настроена?
Простите, никак не могу понять фразу:
” Сумма начисления по окладу определяется как начальное значение оклада, деленное на количество отработанных часов в том же периоде, что и фактически отработанные часы.”
Как все-таки оклад считается?
почитал оригинал, стало яснее.. прошу прощения.
Добрый день.
Предлагаю задачу 3.31
Тарифную шкалу реализовал в виде регистра сведений. Надо ли все параметры шкалы (отработано часов, ставка) заносить в регистр расчетов (для восстановления используемой шкалы) или достаточно ограничиться значением ставки?
На сертификации это не должно повлечь изменение оценки. В реальности я рекомендую все данные для расчета хранить в регистре расчета.