Продвинутый курс. Домашнее задание №16
Эта запись посвящена второму потоку продвинутого курса по программированию.
Первое задание по расчету.
Для выполнения рекомендуется изучить следующие главы 4-го блока.
Глава 1. Настройки объектов расчета
Глава 2. Графики работы
Глава 3. Универсальные алгоритмы
Глава 4. Задача сторнирования
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.
Задание выполнил.
Добавил перечисление СпособыРасчета со значениями ПоОтработанномуВремени, Процентом, Больничный, Сдельно. В планах видов расчета ОсновныеНачисления и ДополнительныеНачисления добавил реквизит СпособРасчета типа ПеречислениеСсылка.СпособыРасчета. В плане видов расчета ДополнительныеНачисления установил свойство «Зависимость от базы» в значение «Зависит по периоду регистрации».
В пользовательском режиме создал требуемые виды расчета:
в плане видов расчета ОсновныеНачисления –
«Оклад по часам» (Категория расчета = 0, Способ расчета = По отработанному времени, Вытесняющие виды расчета – «Больничный»);
«Больничный» (Категория расчета = 0, Способ расчета = Больничный)
в плане видов расчета ДополнительныеНачисления –
«Надбавка за вредность» (Категория расчета = 1, Способ расчета = Процентом, Базовые виды расчетов – «Оклад по часам», Ведущие виды расчетов – «Оклад по часам»)
«Сдельная оплата» (Категория расчета = 0, Способ расчета = Сдельно).
При проведении документа «Начисление заработной платы» вводятся записи регистров расчета и осуществляется их расчет:
Добавил общий модуль РасчетЗП, в котором реализовал универсальные алгоритмы расчета:
Для начисления сдельной оплаты доработал документ «Выпуск продукции». Добавил в документ реквизит ВидРасчета (тип ПланВидовРасчетаСсылка.ДополнительныеНачисления), в котором нужно указывать вид расчета «Сдельная оплата». Добавил табличную часть Исполнители с реквизитами Сотрудник (тип СправочникСсылка.ФизическиеЛица) и КТУ (тип Число). В табличную часть Продукция добавил реквизит Расценка (тип Число). Ввод записей в регистр расчета и их расчет происходят одновременно при проведении документа. В обработку проведения был добавлен код:
Код стал выглядеть как-то не очень читаемо. Посоветуйте как лучше оформлять фрагменты кода.
Других вариантов пока нет..
Выполнил.
Создал предопределенные виды расчета, указанные в задании. Оклад и БольничныйЛист в ПВР ОсновныеНачисления, НадбавкаЗаВредность и СдельнаяОплата соответсвенно в ПВР ДополнительныеНачисления. Создал перечисления ПорядокРасчета со значениями Первичное, ЗависимоеПервогоУровня и СпособыРасчетаОплатыТруда со значениями ПоОтработанномуВремени, Процентом, ПоБольничномуЛисту. Добавил в реквизиты обоих ПВР.
Изменил обработку по заполнению графика, для заполнения количества часов.
Доработал документ ВыпускПродукции. В ТЧ продукция добавил реквизит Расценка. Создал ТЧ Исполнители с реквизитами Сотрудник и КТУ. Реализовал расчет сдельной оплаты в соответствии с заданием. При проведении рассчитанные данные записываются в набор записей РР Дополнительные начисления.
При реализации универсального механизма расчета обращался к материалам базового курса.
Задание выполнил. За основу взял универсальные алгоритмы базового курса. Для решения определил два ПВР: ОсновныеНачисления с поддержкой периода действия без базы, в него вошли Оклад, Больничный (вытесняет Оклад), ДополнительныеНачисления без поддержки периода действия, но с базой ОсновныеНачисления, в него вошли НадбавкаЗаВредность (база Оклад) и СдельнаяОплата. Записи по СделнаяОплата вводятся непосредственно документом ВыпускПродукции.
Сдельную оплату нужно было встроить в выпуск продукции? Вроде написано, что все цифры для расчёта вводит расчётчик ЗП?
На Ваш выбор.
значит сделал в полном объёме.
Задание выполнил.
Создал перечисление ВидыРасчета добавил туда записи по видам расчета. Добавил новый реквизит в Планы видов расчета СпособоРасчета. Добавил предопределенные элементы в планы расчета.
Доработал документ выпуск продукции – добавил поле Расценка, и табл часть для указания исполнителей и КТУ. Проведение по рег.расчета сделал в модуле документа ВыпускПродукции.
Универсальные алгоритмы взял из конфигурации с примерами 4 го блока. Доработал в соотв со способами расчета.
Задание выполнено.
1. Очистил РС ГрафикиРаботы, внес изменения в обработку ЗаполнениеГрафика для реализации почасового учета и заполнил графики.
2. Создал перечисление КатегорияРасчета со значениями: Первичное, ЗависимоеПервогоУровня и добавил в ПВР ОсновныеНачисления и Дополнительные Начисления. Также создал перечисление СпособыРасчета со значениями: ФиксированнойСуммой, Процентом, ПоСтавке и добавил реквизит со ссылкой на это перечисление в ПВР.
3. Добавил предопределенные элементы в ПВР Основные начисления:
– Оклад по часам, способ расчета – ПоСтавке, категория – Первичное, вытесняется ВР – Оплата по Больничному листу.
– Оплата по больничному листу, способ расчета – Процентом, категория – Зависимое первого уровня (базовый и ведущий ВР: Оклад по часам),
4. Добавил предопределенные элементы в ПВР Дополнительные начисления:
– Надбавка за вредность, способ расчета – Процентом, категория – Зависимое первого уровня (базовый ВР: Оклад по часам), зависимость от базы в ПВР – “Зависит по периоду регистрации”.
– Сдельная оплата, способ расчета – Фиксированной суммой (рассчитанное значение передается в РР в виде готовой суммы), категория – Первичное.
5. Для универсального расчета ЗП в общем серверном модуле РасчетЗП создал функцию РасчитатьЗаписьРегистраРасчета(), в которой в зависимости от вида расчета (ОсновныеНачисления или ДополнительныеНачисления) и категории расчета, формируется запрос (во многом скопировал его с запроса в базовом курсе, внеся небольшие изменения). На основании полученного результата запроса и в зависимости от способа расчета вычисляю результат.
6. Добавил справочник СдельныеРасценкиРабот.
7. Для расчета сдельной заработной платы использовал документ ВыпускПродукции из прошлого ДЗ. Добавил в него ТЧ Сотрудники с реквизитами Сотрудник и КТУ. В ТЧ Продукция добавил реквизит СдельнаяРасценка. При проведении получаю общую стоимость выпущенной продукции и распределяю по КТУ. Полученный результат записывается в НаборЗаписейДополнительныеНачисления.
1.Создал перечисление “СпособрРасчёта”, заполнил перечисление 4 именами методов расчёта новых арсчётов. Создал одноимённый реквизит в 2 планах видов расчёта. Создал общий модуль – серверный “РасчётЗП”. Cоздал новый план видов расчёта “”ДополнительныеНачисленияПериодРегисьтрации” настроеный на расчёт по периоду регистрации. Создал одноимённый регистр расчёта аналогичный “ДополнительныеНачисления” , но с ещё 1 реквизитом (Участие – Число 6.4).
2.В документе “НачислениеЗаработнойПлаты” добавил 2 абличных части “ДополнительныеНачисления” и “”ДополнительныеНачисленияПериодРегистрации” заполненых реквизитами соответствующим образом и доработал процедуру “ОбработкаПроведения” на сохранение данных из 2 добавленых таблиц. Запустил программу. Создал новые виды расчёта и настроил их (способ, категория, база, вытесняющие и т.п….). 3.Реализовал универсальный алгоритм расчёта записей регистра расчёта (как и в
учебном примере (через 2 процедуры и 2 функции)). Процедуру “РасчитатьРегистрРасчёта”
вызываю 3 раза (по кол-ву регистров начисления) из процедуры “ОбработкаПроведения” документа “РасчетЗП” после сохранения движений по регистрам. В базовом курсе мы очень похожий универсальный механизм реализовывали, но немного по другому (не использовали метаданные и т.п.).
есть вопрос: образцовые решения теперь смотрим из публикаций для потока №1?
Можно взять и оттуда :)
А вообще и для вашего потока такие же решения будут появляться :)
Ещё 2 вопроса: сколько ДЗ осталось?
Глава №7 (“Кейсы”) последняя?
Осталось ДЗ№17.
Глава 7 – последняя.
Видимо 2 поток не успею дождаться – уже предупредили, что для окончания доступа к МГ осталось 7 дней.
Для выполнения финала доспут буден продлён?
Да, продлим.
Выполнил.
1.В ПВР ОсновныеНачисления создал предопределенные виды расчета: БольничныйЛист и ОкладПоЧасам (вытесняющие,ведущие – БольничныйЛист), и в ПВР ДополнительныеНачисления – НадбавкаЗаВредность (базовые – ОкладПоЧасам, ведущие – оба ВР из ПВР ОсновныеНачисления) и СдельнаяОплата. В оба ПВР добавил реквизит СпособРасчета – ссылка на перечисление(ПоОтработанномуВремени, ПоБольничномуЛисту, Процентом).
2.Подправил обработку ЗаполнениеГрафика – в Значение заносится количество рабочих часов.
3.Для расчета ЗП по ВР СдельнаяОплата скорректировал документ ВыпускПродукции – в ТЧ Продукция добавил реквизит Расценка и добавил ТЧ Оплата(сотрудник,КТУ). При проведении заполняю и записываю набор записей РР.
4.В документ НачислениеЗП добавил ТЧ ДопНачисления (без типа графика и дат). При проведении для ВР БольничныйЛист заменяю тип графика на пятидневку, для вычисления базы для надбавки – заполняю базовый период как начало и конец месяца от ПериодРегистрации.
5.Универсальный алгоритм расчета ЗП был взят из базового курса. Внес в него мелкие изменения по больничному листу.
Создал перечисление «Способы расчета» и добавил его как реквизит во все планы видов расчета.
Скопировал из базового курса общий модуль расчет ЗП. В плане видов расчета «Основные начисления» убрал зависимость от базы и добавил предопределенные виды расчета «Оклад по часам», «Больничный лист» и «Сдельная». И хотя вид расчета «Сдельная оплата» не использует период действия, но, посчитав, что отдельный план видов расчета для него создавать избыточно, к тому же по логике его можно отнести к основным начислениям, добавил его именно в этот план. Для ВР оклад настроил его вытеснение больничным листом.
В план видов расчета «Дополнительные начисления» добавил вид расчета «Надбавка за вредность». Поскольку в задании сказано: «Рассчитывается как процент от начисленного оклада в текущем периоде», зависимость от базы для ПВР установил в «Зависит по периоду регистрации». В качестве базы для надбавки указал оклад.
Подкорректировал процедуру «РассчитатьРегистрРасчета» из общего модуля «Расчет ЗП» отразил специфику расчета оклада и больничного, обеспечил вызов этой процедуры в обработке проведения документа «Начисление ЗП».
Для ввода надбавки использовал документ «Регистрация разовых начислений», который довольно успешно скопировал из конфигурации базового курса (да здравствует Копипаст J).
Осталось реализовать последний вид расчета «Сдельная оплата» для его записи идеально подходит документ «Выпуск продукции», созданный при выполнении прошлых ДЗ. Причем рассчитывать данный вид расчета, также имеет смысл в обработке проведения данного документа, а не в общей процедуре поскольку этот вид расчета не использует ни данные базы, ни данные графика, то реализовывать его расчет в универсальных алгоритмах можно, но вряд ли нужно, поскольку кроме усложнения алгоритмов больше никаких преимуществ это не даст. В документ «Выпуск продукции» в ТЧ «Продукция» добавил реквизиты «Расценка выпуска цена» и Расценка выпуска сумма», и новую ТЧ «Работники» с реквизитами «Сотрудник» и «КТУ».
Поскольку вид расчета «Сдельная оплата» не использует период действия и для него имеет смысл запись и расчет проводить в один этап, хотел использовать команду Записать в виде Записать(,Истина). Но при выполнении данной команды появилось сообщение «Необходим перерасчет фактического периода действия», т.е. все таки надо сначала просто Записать без параметров, что и сделал рассчитав и заполнив сразу результат, дабы не записывать второй раз. При следующем проведении получил сообщение об ошибке «Неверно задан период действия», пришлось при записи движений указывать ПериодДействияНачало и ПериодДействияКонец хотя он не имеет смысла для данного вида расчета, но как говорится издержки производства, раз добавил его в ПВР использующий период действия значит надо заполнять. После соответствующих изменений все заработало.