Материалы курса «Подготовка к Аттестации по Платформе 8.2» – Раздел 3, задача 3.13
Это еще одна задача раздела “Расчетные задачи” – задача 3.13
- Изучите материалы задачи.
- Вопросы, возникшие в ходе изучения этих материалов, задавайте в комментариях на текущей странице. Ответы преподавателя и комментарии других участников будут Вам доступны, только если Вы залогинены и у Вас есть доступ в Мастер-группу.
- Общие вопросы по курсу (в т.ч. организационные) задавайте на стартовой странице.
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (58):
Комментарии закрыты
Можно ли при расчете премии связать каждую виртуальную таблицу с физической по номеру строки и в условии сделать отбор по регистратору и виду расчета в физ.таблице. Или это не оптимально?
Не понятен вопрос.
отбор где? Если отбор только в физтаблице – то плохо, так как виртуальные будут полностью рассчитываться.
В видео 2 виртуальные таблицы связывались. Я спросила про связь 2 этих таблиц с физической. Параметры в виртуальных, конечно, задаю.
А зачем еще одна связь тогда? Связи таблиц – это по сути перебор строк в цикле, в цикле (повезет, если индексы есть). Чем меньше связей – тем лучше.
Есть условно похожие задачи в которых допустим Сотрудник работает на разных Авто, а каждый авто ездит по своему графику, а отпуск рассчитывается по пятидневке. Можно, конечно, для каждого авто кроме своего графика заполнить график работы с пятидневками. Но из-за того что сотрудник ездил на разных авто, как получить базу по их совокупности при расчете отпуска? А если авто не привязывать к графику то можно просто получить базу по сотруднику вроде.
При получении базы можно не учитывать разрез по авто. Тогда база будет получена консолидированно.
Таким образом
1) Можно в ГрафикеРабот не заполнять для каждого авто ещё и тип графика пятидневку ?
2) Можно убрать из ГрафикаРабот измерение Авто ?
А в начислении зарплаты “визуально” связывать авто и тип графика
– Иванов Авто1 ТипГрафика1 с 1.03 по 5.03
– Иванов Авто2 ТипГрафика2 с 6.03 по 8.03
– Петров Авто1 ТипГрафика1 с 6.03 по 8.03
3)Вы не могли бы уточнить для чего в принципе нужна привязка подразделения к графику работы (если вид графика и так привязан), что она даёт?
1,2 я так задачу не решал и ответить на это однозначно не могу.
3. Это если в задаче есть условие: Подразделения работают по своему графику. То есть Пятидневка для отдела 1 и отдела 2 – это разные графики. Хотя как элемент аналитики – один.
Здравствуйте.
1. Правильно ли набор записей регистра расчета уже в общем модуле всегда (в рамках экзамена) записывать командой “НаборЗаписей.Записать(, ,Истина);” (в видео видимо опечатка – “НаборЗаписей.Записать(, Истина);”) – чтобы не пересчитывать фактический период действия и всегда регистрировать перерасчеты (даже если по условиям задачи они не нужны)?
2. Что означает фраза в тексте «…с использованием метода отклонений» (вопрос уже задавался ниже в топике, но в ответе “Ответил почтой”)?
3. В описанном решении стаж получается через запрос вида “ВЫБРАТЬ
| НачислениеЗарплатыДополнительныеНачисления.Сотрудник,
| …
| РАЗНОСТЬДАТ(ДанныеСотрудников.ДатаПриема, &НачалоМесяца, ГОД) + ДанныеСотрудников.НачальныйСтаж КАК Стаж ИЗ …”
– думаю, тут правильнее рассчитывать в месяцах (так как “ВЫБРАТЬ РАЗНОСТЬДАТ(ДатаВремя(2011,12,31), ДатаВремя(2012,1,1), ГОД) КАК Стаж “ – вернет 1).
1. Да.
2. Метод отклонения – это когда вводят данные об отклонении от нормы. Если данных нет, считаем, что сотрудник работал. Еще есть табель – там по факту вводят когда работал, а когда нет.
1. Как я понял, все же каркасной конфигурацией стоит пользоваться, в этом задании она использована? Хотя иногда все же глюки с ней бывают, когда надо что-то серьезное поменять.
2. Допустимо ли хранить дату приема на работу и стаж в самом справочнике Сотрудники(ФизЛица), ведь информация статичная? А затем к ней добавлять разность между периодом регистрации и датой приема на работу?
3. Допустимо ли оклад записывать при формировании документа параметром, как это сделано в других задачах, или корректней все же использовать регистр сведений?
4. нужно ли учитывать, что графики могут быть не только по 8 часов расчитанные по неделе, но и по 12 и по 24 1/3, 2/2? Или не стоит этим заморачиваться на экзамене? Я лично обработку поменял, чтобы могла по разным часам в день считать.
5. Зачем расчет делать в общем модуле? Ведь используется он только в одном документе. Или таков стандарт?
6. Допустимо ли стаж вычислять уже в расчетах? Или обязательно при записи?
1. Использовать или нет каркасную решать Вам.
2. Мне кажется, что лучше использовать РС. Хотя и с Вашими доводами я согласен.
3. Да, даже лучше.
4. Не стоит делать того, чего нет в задании. Время – важный фактор на сертификации.
5. Нужно использовать единую точку входа для расчета всех видов. Это стандарт. Лучше всего подходит общий модуль, кроме того его можно сделать серверным и использовать там кеш функций для повторного использования рассчитанных значений.
6. Если честно, я бы и стаж параметром вручную заносил. Нигде не требуется расчет автоматизировать.
Спасибо – все по полочкам разложено, от начала до конца.
Добрый день.
Почему Подразделение – это изменение?
В отчете указано, что премия считается в разрезе подразделений, следовательно базу нужно получать в этом-же разрезе.
Добрый день!
Не совсем понятно зачем мы делаем проверку Оклада на Сторно = ?(Запись.Сторно, -1, 1), если нигде в коде нет ПолучитьДополнение(), а также проверяем на сторно КомпенсацияОбеды и Премия, хотя они не имеют периода действия…
Это общий прием при расчетах. Если он Вас смущает – можете его не использовать в задачах, где нет записей дополнения.
Здравствуйте!
Период больничного в задаче 3.13 считается в часах. Означает ли это “с точностью до часа”? Если да, тогда график нужно тоже заполнять с точностью до часа. Просто указать количество часов в смене не достаточно. По графику с восьмерками можно отмерить только “целосменные” интервалы , т.е. кратные продолжительности рабочего дня.
Нужно ли в подобных задачах вводить график с точностью до часа (указывая рабочие часы, а не дни)?
С уважением,
Антон
Нет. Часы считаются по шестидневному графику. Меньше дня сотрудник болеть не может.
Тогда, почему бы не использовать один ресурс в графике работы (только количество часов)? Отношение фактического периода к норме времени от этого не изменится.
Для чего в графике нужны два ресурса (дни и часы)?
А кто сказал, что в одном дне всегда 7 или 8 часов?
На каждый вид расчета в задаче используется перебор всех записей в наборе.
В каждой итерации проверяется ВидРасчета и, если он соответствует необходимому ВР, то в текущую строку набора записывается результат расчета.
Почему нельзя обратиться к строке набора записей по индексу НомерСтроки-1 в цикле по обходу выборки (тем самым отказавшись от перебора всех записей набора)?
Почему нельзя? :) Можно.
Во всех Ваших задач, на курсе у Белоусова (конкретно этот вопрос забыл спросить лично), в двухтомнике “проф разработка” – нигде не видел, чтобы обращались по индексу. Начал думать, в каких же ситуациях обращение по индексу может отработать неверно :)
Пока предполагаю только 1 вариант: если мы в каком-то случае получаем набор данных не только по регистратору, но и измерениям -> можем выйти за границы набора или неправильно позиционироваться.
Мне тоже больше нравится обращение по индексу НомерСтроки-1! Но Евгений в доп.материалах в конце этого видео 1CAttestation-Spec8ru-03-Salary-UFM/Spec8ru-Salary-part06 говорит, что сделать такой алгоритм будет считаться ошибкой при решении расчетных задач… Если отсортировать запрос по номеру строки почему нельзя?!
Так можно или нельзя?
Всё-таки в общем случае так делать нельзя.
На экзамене это будет признано ошибкой – возможно снижение оценки на 1 балл.
Логика здесь такая. После записи набора в БД порядок записей может быть изменен разработчиком.
Ведь при доработке конфигурации разработчиков может вставить код по формированию новых движений после метода “Движения.Записать()”.
Более того это может происходить неявно в модуле набора записей (в событии ПриЗаписи).
Поэтому нужно идти “длинным” путем, чтобы сдать аттестацию.
В задачах, которые подразумевают РС, (наподобие этой) стоит считать, что если в условии сказано про стаж, оклад (да что угодно, что хранится в РС), то мы полагаем при расчете, что такое значение там обязательно будет, т.е. не стоит предусматривать обработку каких-то внештатных ситуаций. Или же считаем, что наличие регистра еще не означает наличия в нем данных?
Ну в задачах на сертификации на подобные мелочи я не стал бы уделять много времени. Всех проверок от некорректного ввода данных не сделаешь.
Добрый день!
Очень часто в задачах встречается такой момент
«Все сотрудники работают по графику работы, установленному для каждого подразделения отдельно»
И из-за этого, в ресурсы графика работы и регистров расчета добавляется дополнительный элемент — Подразделение… хотя по сути он и не сильно то нужен, нет никакой необходимости в дальнейшем получать какие-то данные в разрезе подразделений и нигде не сказано, что сотрудник может работать в нескольких подразделениях.
Не будет ли ошибкой просто создать для каждого подразделения свой график? Например «График бухгалтерии» , «График отдела внедрения» и т.д.
Будет ошибкой. Проверяют именно понимание работы связи измерений “по графику”.
Добрый день. По условию задачи при расчете больничного необходимо полученный оклад (база) разделить на плановое количество рабочих часов в месяце (значит по пятидневке). В решении задачи по сути оклад (база) делится на плановое количество часов в месяце по графику больничного (шестидневка) и умножается на факт.часов больничного. Как получить плановое количество часов по окладу (по пятидневке) для расчета больничного?
Мне кажется что в задача формулировка звучит как: Средняя часовая ставка определяется как сумма начисленного в том же месяце оклада, поделенная на количество рабочих часов в этом месяце. В случае получения сотрудником пособия начисление по окладу не производится.
И следовательно знаменатель у нас будет кол часов по периоду регистрации.
Добрый день. Решаю похожую задачу 3.12. При расчете больничного не рассчитывается фактический период действия, все сотрудники из одного подразделения, график заведен, запись движений происходит по Движения.Записать(); Если возможно, посмотрите мое решение:https://yadi.sk/d/cFsaswCdWYBaj
Вероятно у Вас период действия не совпадает с периодом регистрации. Используйте механизм сторно-записей.
ПР Оклада 01.07.2014, ПД 01.07.2014-31.07.2014.
ПР Больничного 01.07.2014, ПД 09.07.2014-22.07.2014
Факт период Больничного не считается. Сторно записи не формируются.
Возможно глюк платформы. Откройте в режиме “Предприятие” виды расчета, поменяйте названия или коды, сохраните (тут главное добиться перезаписи элемента ПВР).
Здравствуйте Павел. Хочу узнать, часто в начале текста расчетной задачи встречается фраза: “…с использованием метода отклонений”, например в этой-же 3_13: “Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно с использованием метода отклонений. “. Что это за метод отклонений такой?
И еще вопрос, не знаю корректный или нет в контексте курса подготовки к специалисту, но все-равно задам :)
Я начал изучать механизм расчета не так давно, и не пойму такой момент: когда в задаче создается регистр сведений с данными графика, у него задается 2 ресурса: “ЗначенияДни” и “ЗначенияЧасы”. При этом в регистре расчета в качестве значения поля “Значение графика” указывается “ЗначениеДни”. Но в виртуальной таблице есть и поле “ДанныеГрафикаЗначенияДни” и “ДанныеГрафикаЗначенияЧасы”. Если с днями все понятно, то откуда часы взялись? Я же нигде в регистре с этим ресурсом связи не делаю. Выходит, сколько полей ресурсов в регистр сведений с графиком не добавляй, все они в ВТ попадут?
Ответил почтой
Добрый день. Евгений.
Очень рад, что Вы приняли участие в решении данной задачи.
Ваш стиль изложения материала, лично мне, очень нравится, вы решаете задачи до мелочей, детальней объясняете причины тех или иных решений, автоматизируете все требования из задачи, и на все это у Вас уходит столько же времени как и у Павла.
Похвала закончилась, теперь вопросы . Как я понимаю, на вопросы отвечает Павел, поэтому буду обращаться к Павлу.
1. Евгений при решении задачи автоматизирует все условия задачи, начиная от расчета премии от стажа, хранит информацию по окладу в регистрах сведений, производит установку графика «Шестидневка» из предопределенного элемента и т.д.
Я понимаю, что на все это уходит уйма времени (хотя у Евгения на все ушел час), правильно ли решать задачу таким способом, или достаточно обеспечить выполнение алгоритмов расчета, а рабочие наборы данных, просто заполнить в соответствии с задачей?
2. При решении данной задачи, Евгений обеспечил соблюдение последовательности расчетов, вначале записал «Оклад», затем приступил к расчету «Больничного». На экзамене необходимо соблюдать эти условия, или достаточно в рабочем наборе данных руками выстроить данную последовательность в табличной части документа.
3. Вопрос по задаче:
«В случае болезни сотрудник получает пособие, размер которого определяется как количество часов болезни умноженное на среднюю часовую ставку. Часы болезни рассчитываются по шестидневному графику. Средняя часовая ставка определяется как сумма начисленного в том же месяце оклада, поделенная на количество рабочих часов в этом месяце.»
При решении подзадачи Евгений выбрал
«Количество часов болезни» из ДанныеГрафика. ФактическийПериодДействия (понятно)
«Сумма начисленного оклада» из БазаОсновныеНачисления.РезультатБаза, (понятно)
«Количество рабочих часов в этом месяце» из ДанныеГрафика. ПериодДействия,(не понятно) Ведь период действия Вида расчета «Больничный» не весь месяц, а выбранный интервал Больничного. Или в данное поле всегда попадает Плановое значение рабочих часов по периодичности регистра расчета?
1. Достаточно, автоматизировать все не надо. Останется время, будете “плюшки” делать.
2. Я так понимаю больничный брал оклад как базу, следовательно он уже должен быть в базе.
3. ПериодДействия – это интервал больничного. Думаю Евгений имел в виду ПериодРегистрации и просто опечатался.
3) Интервал больничного – это ДанныеГрафика.ФактическийПериодДействия.
А в данном случае ДанныеГрафика.ПериодДействия=ДанныеГрафика.ПериодРегистрации=ДанныеГрафика.БазовыйПериод. Принципиально ли, что нужно использовать кол часов по периоду регистрации как норму-часов в этом месяце? Напишите, пожалуйста, почему?
Потому что период регистрации может не совпадать с периодом действия и базовым периодом.
Почему именно периодрегистрации?
В поле “Период регистрации” будет количество нормо.часов, не отработанных, не базовых, а именно тех которые планировались.
А в периоде действия? Правильно я понимаю, что если у ПВР установлена зависимость по периоду регистрации, то когда базу получаем по РР с этим ПВР, в периоде регистрации будут норма-часы (или дни), а если по периоду действия, то в Периоде действия, соответственно? Или нет такого правила? Тогда какое?
Что-то я запутался. База – это база, она собирается либо по зависимости от того в каком периоде зарегистрировано базовое начисление, либо когда базовое начисление действует, эта зависимость задается в ПВР.
Нормочасы – это данные графика, это не база.
Здравствуйте, Павел.
В задачах есть такие формулировки “первоначальное значение
оклада может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода” и другие похожие. Исходя из этой формулировки можно просто несколькими записями внести данные в документ начисления или необходимо автоматизировать его заполнение?
Можно руками.
Добрый день.
Иногда в билетах встречается формулировка, что в одном документе НачислениеЗП могут быть данные за несколько расчетных периодов.
Понятно, что в этом случае Период регистрации будет выступать в табличной части документа.
Как выход из ситуации, можно ли процедуру общего модуля , куда по умолчанию передаются параметры – ссылка документа, набор записей регистра и период регистрации , вызывать в цикле при переборе массива ? Элементами массива будут периоды регистраций из документа Начисление Зарплаты. Этот массив получается выгрузкой колонки ПериодовРегистрации в таблицу с последующим сворачиванием.
Изменения в коде минимальные и сложностей никаких. Но можно ли такой подход формально считать – “запросом в цикле” и рассматриваться как ошибка на экзамене, так как в общем модуле запросом получаются и оклады , и базы и все остальное только для конкретного периода регистрации?
Период регистрации и расчетный период – разные вещи. Приведите конкретный текст задачи – я прокомментирую.
Например вот
“Ввод всех начислений происходит документом «Начисление зарплаты». Документ в расчетном периоде может быть один (сразу для всех видов расчета), а может быть несколько (по одному для каждого отдельного вида расчета). Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление оклада с 10.01 по 31.01, а запись оклад: с 10.01 по 03.02 вводить нельзя. В одном документе могут быть данные за разные расчетные периоды.”
Тут период действия будет разный, а период регистрации один.
Это понятно. Но , например документ Начисление ЗП от 31.08.2013
в нем делаем две записи оклада
с 01.08 по 31.08
с 01.07 по 31.07
И запись премии, пусть будет за июль
Премия – по базе от оклада за предыдущий месяц. Этот вид расчета не зависит от периода действия.
Как указать , за какой расчетный период должна браться премия , чтобы рассчитать базовый период?
В табличной части завести реквизиты “БазовыйПериодНачало” и “БазовыйПериодКонец”.
Добрый день Павел.
Иногда в задачах с понедельным начислением ЗП появляется фраза
“Один календарный месяц в году сотрудникам предоставляется оплачиваемый отпуск”
Имеется в виду, нам надо как-то контролировать длительность отпуска, что не два месяца? И какой месяц, 30 или 31 день?
Или контролировать не надо и для экономии времени оставить выбор длительности начисления на совести пользователя ?
Добрый день. Ели явно в задаче не указано, то контролировать не надо. Календарный месяц – это с 1 по последнее число.
Добрый день.
Возникли вопросы по задаче 3.14
1.
Оклад – по дням
Больничный – при расчете ставки нужны ОТРАБОТАННЫЕ ЧАСЫ
Компенсация за лекарства за каждый день болезни – т.е еще нужно хранить количество ОТРАБОТАННЫХ ДНЕЙ
Как при такой постановке организовать связь производственного календаря(РС) и регистра расчета(РР) ?
а)
В РС 2 ресурса – КоличествоДней, КоличествоЧасов
в РР 3 ресурса – Значение (КоличествоДней), ОтработаноЧасов (КоличествоЧасов) и ОтработаноДней(КоличествоДней)
б)
В РС 2 ресурса – КоличествоДней, КоличествоЧасов
в РР 2 ресурса – Значение (КоличествоДней), ОтработаноЧасов (КоличествоЧасов)
а отработано дней получать делением отработано часов на 8. Наскольо верно будет это деление на 8 ?
2.
Сказано “Компенсация за лекарства за каждый день болезни” – т.е получается, что имеет протяженность во времени и зависит по базе от больничного.
Можно ли в этом случае указать флаг – Период действия является базовым для компенсации?
3.
В условии есть фраза “За произвольный период отработанного времени (должен указываться в документе и может быть меньше периода ведения расчетов, например, всего несколько дней) сотрудникам компании начисляется премия процентом от всех начислений, сделанных в предыдущем же расчетном периоде”
Как ее понять ?
С одной стороны говорится , что база это произвольный период отработанного времени
с другой – процент от всех начислений сделанных в ПРЕДЫДУЩЕМ периоде, то есть явно указывается, что база – предыдущий месяц
1. А.
2. Можно.
3. :) Не знаю.