Продвинутый курс. Домашнее задание №17
Эта запись посвящена первому потоку продвинутого курса по программированию.
Заключительное задание по расчету.
Для выполнения рекомендуется изучить следующие главы 3-го блока.
Глава 5. Перерасчеты
Глава 6. Диаграмма Ганта
К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте
— залогиньтесь.
— залогиньтесь.
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись —
напишите нам на e-mail поддержки.
Задание выполнил.
Создал основной вид расчета “Отпуск”, документ “Отпуск”, реализовал нужные алгоритмы.
Вот с диаграммой Ганта были сложности. Честно скажу что подглядывал в решение.
Многие моменты расчетных алгоритмов стали намного понятнее.
Но в ближайшее время планирую пересмотреть четвертый блок начиная с базового курса и решить ещё раз домашние задания для окончательного закрепления материала.
ДЗ 17 выполнено. В план видов расчета Основные начисления добавлен новый предопределенный вид Отпуск, вытесняющий оклад и больничный лист. Для расчета отпускных в регистр расчета Основные начисления добавлен ресурс Количество дней. Так же модифицированы универс алгоритмы для получения базы для расчета отпускных.
Для редактирования в форме документа добавлена кнопка “рассчитать зп” и колонка результат в таб части начисления. Заполнение регистров расчета вынесено в экспортную функцию, которая и заполняет результат в табличной части. При проведении выдается вопрос об автоматическом провдении или сохранении отредактированных результатов.
Отчет создается при помощи запроса с итогами по подразделениям. для редактирования интервалов обрабатывается событие ДиаграммаПриОкончанииРедактированияИнтервала()
Подразделение берется из диаграммы Интервал.значение.точка.родитель.значение, аналогично берется сотрудник и вид расчета. Даты приводятся к началу и концу дня соответственно. Для передачи регистратора в расшифровку помещается ВыборкаДетальныеЗаписи.Регистратор.УникальныйИдентификатор(). Затем из обработчика события вызываетя серверная процедура, корректирующая регистр расчета.
Задание выполнено…
Добавил ВР Основные начисления – Отпуск.
Создал документ “Отпуск”. В документе указываем сотрудника, дату начала, окончания отпуска. А так же расчетные реквизиты: ДнейОтпуска, СреднедневнойЗаработок, Результат. По кнопке “Рассчитать” выполняем расчет ср. заработка.
Отчет “Начисления сотрудникам” – больших проблем не возникло…
Создан новый вид расчета По среднему, настроены вытеснения, алгоритмы проведения начисления доделаны для нового вида расчета. Добавлены новые реквизиты Результат и Отработано дней в документ начисления.
С диаграммой Ганта пришлось разобраться после выложенного решения.
Задание давно выполнил, но оказывается забыл отчитаться – очень не хватает пропавшей функции “мои комментарии”.
1. Расчет отпускных оказался самой легкой частью задания:
– в перечисление “Способ расчета” добавлен новый элемент “по среднему заработку”
– в регистре расчета добавлен ресурс “ОтработаноДней” для всех видов расчетов обеспечено заполнение ресурса
– в план видов расчета добавлен новый вид расчета “Отпуск”, настроено вытеснение для “Оклада” и “Больничного листа”
2. Для просмотра и редактирования результатов расчета зарплаты:
– в документ “Начисление зарплаты” добавлены реквизиты “Результат” и “ОтработаноДней”
– на форму добавлена кнопка “Рассчитать”, которая производит расчет записей регистра расчета, добавлен флаг “Ручная корректировка”, который заполняется если пользователь исправляет результат вручную. При проведении документа для таких записей производится корректировка в регистре расчета по данным табличной части.
3. А вот с диаграммой Ганта пришлось серьезно помучиться, но просмотрев еще раз последнюю главу – все получилось.
Задание выполнил.
Добавил новые вид и способ расчета “Отпускные”. Настроил вытеснение оклада и больничного.
Ручная корректировка и просмотр результата возможна посредственно в документе “Начисление отпуска”.
С диаграммой Ганта возникли сложности. Сделал только после просмотра решения.
Сделала.
Новый вид расчета – Отпуск, база по окладу, вытесняет б/л и оклад, корректируем оклад и б/л по вытеснению. Новый способ расчета – Отпускные. В регистре расчета Основные начисления – новый ресурс для отработанных дней. Настроила в Основные начисления предприятия Вид расчета Отпуск – способ расчета. В общем модуле откорректировала расчет зарплаты. РассчитатьЗаписиРегистраРасчета – добавила про отработанные дни. ПолучитьСтруктуруНеобходимыхДанных – добавила перечисления для отпускных и отдельное условие для отпуска при процентах. В ПолучитьДанныеДляРасчета – в запрос добавила базу от фактической отработки по дням и исключила про дополнительные начисления.
В ОбработкаПроведения – добавила базовый период 3 месяца для вида расчета Отпуск.
Для документа НачислениеЗаработнойПлаты в ТЧ начислений и удержаний добавила реквизиты Результат и отработано дней в ТЧ начислений и команду Рассчитать, которые добавляем на форму.
Далее сделала по эталону функцию РассчитатьЗарплату и новую ОбработкуПроведения, а расчет ЗП выгрузила в форму документа. Сделала Отчет Начисления сотрудникам. Поработала с диаграммой Ганта – раньше в кодировке не использовала.
Задание выполнил.
Часть задания, касающаяся расчета отпускных и изменения алгоритма расчета ЗП для отображения результата расчета
в табличной части Документа не составила затруднений.
Сложность возникли с передачей данных документа в диаграмме ганта. Расшифовка не работает при помещении в нее ссылочного
значения. Метод получения по индексу (Диаграмма.Серии.Индекс(Интервал.Значение.Серия.Родитель)) работает не на всех версиях платформы.
Я делал задание на версии 8.2.9.356 и у меня он вылетал с ошибкой.
Для решения задачи передавал в расшифровку значения интервала уникальный идентификатор ссылки,
а в серверной процедуре ОбработатьИзменениеИнтервала вызываемой из обработчика события
ДиаграммаПриОкончанииРедактированияИнтервала получал из него ссылку на документ.
Задание выполнено.
В перечисления Способы расчета добавлен элемент «по средней»
В регистр расчета ОсновныеНачисления добавлен ресурс ОтработанныеДни и обеспечено его заполнение.
В регистр сведений ГрафикиРаботы дабавлен ресурс Дни и обеспечено его заполнение.
В ПВР ОсновныеНачисления добавлен Отпуск, указаны вытеснения.
В алгоритмы добавлены ветки, соответствующие новому способу расчета.
В табличную часть док НачислениеЗарплаты добавлены реквизиты Результат и ОтработаноДней
На форму добавлена кнопка «Рассчитать». По кнопке в серверной процедуре преобразуем Док=РеквизитФормыВЗначение(«Объект»). Записываем данные из табличной части в Движения.ОсновныеНачисления, рассчитываем в процедуре общего модуля, а потом считываем и отыскиваем в табличной части нужные строки и указываем Результат и ОтработанныеДни. Обратное преобразование. ЗначениеВРеквизитФормы(Док, «Объект»).
Сделан отчет «Диаграмма Ганта». При формировании данных в расшифровку помещаем из запроса значение регистратора.
В клиентской процедуре ДГПриОкончанииРедактированияИнтервала извлекаем необходимую информацию Сотрудник=Интервал.Значение.Точка.Значение; ВидРасчета=Интервал.Значение.Серия.Значение; Регистратор=Интервал.Значение.Расшифровка; Начало=Интервал.Начало; Конец=Интервал.Конец;
Здесь же организуем контроль корректности Начало и Конец
Затем вызываем серверную процедуру для считывания набора записей и его перерасчета.
В Перечисления.СпособыРасчета + Отпуск и расчет.Отпуск в ДополнительныеНачисления.
В проведение док.НачислениеЗарплаты при Перечисление.СпособыРасчета.Отпуск прописываю БазовыйПериодНачало и БазовыйпериодКонец
В РасчетЗП + способ расчета Отпуска(использование Базы).
К регистрам расчета + ресурс.ОтработаноДней, дорабатываем запрос: ЕСТЬNULL(ДополнительныеНачисленияБазаДополнительныеНачисления.ОтработаноДнейБаза, 0) + ЕСТЬNULL(ДополнительныеНачисленияБазаОсновныеНачисления.ОтработаноДнейБаза, 0) КАК БазаДни
и получаем базовое количество дней в месте с базовой суммой.
Редактирование интервалов расчетов событием ДиаграммаПриОкончанииРедактированияИнтервалов. Предварительно в: Интервал.Значение.Расшифровка,
Интервал.Значение.Серия.Серии.Родитель.Расшифровка и Интервал.Расшифровка прячем Регистратор,Сотрудник,Подразделение.
Структурой воспользоваться не удалось – при второй коректировке интервалов слетали данные.
Таким образом после редактирования интервала узнаем Где, что и какой интервал должно иметь. Корректируем, перепроводим и контролируем Перерасчеты.
Контроль за сохранением интервала в пределах месяца без затруднений.
ДЗ № 17 выполнила.
1) Добавила в Перечисление.СпособыРасчета значение ПоСреднему.
Добавила в ПВР ОсновныеНачисления вид расчета Отпуск. Установила для него способ расчета ПоСреднему.
В видах расчета Оклад И Больничный лист добавила Отпуск в вытесняющие ВР.
2) В Табличную часть документа “Начисление ЗП” Добавила реквизиты БазовыйПериодНачало и БазовыйПериодКонец. В алгоритмах расчета ЗП добавила обработку способа расчета ПоСреднему для расчета начислений по отпуску.
3) В табличную часть документа “Начисление ЗП” добавила реквизиты: РучнаяКорректировка (тип Булево) и Результат.
В обработке проведения после формирования движений в регистры расчета делаю заполнение реквизита Результат данными из регистра расчета. Настроила условное оформление формы документа так, что если РучнаяКорректировка = Истина, то можно редактировать поле Результат, иначе нельзя. При проведении сделала проверку, если была ручная корректировка, то в регистр расчета записывается не расчетное значение, а проставленное вручную.
4) Создала отчет “Начисления сотрудникам” в виде диаграммы Ганта. Добавила возможность редактирования интервалов пользователем.
Если выбран корректный интервал (начало и конец интервала в пределах месяца и года), то программно меняю интервал в документе по виду расчета и провожу документ.
Сделал. С диаграммой Ганта проблем нет – сталкивался на проектах.
Создан документ Отпуск и вид расчета. Реализован алгоритм расчета и отчет.
Создан новый вид расчета и способ расчета, а также документ для начисления отпуска. Реализован расчет и вывод результатов в форме документа. С диаграммой Ганта проблем не возникло.
Задание выполнено.
Добавил новый способ расчета. Изменил алгоритмы расчета в соответствии с новым способом. Для расчета количества отработанных дней создал новый ресурс в РР “Основные начисления”, который заполняю при расчете записей по данным значений ФПД – это позволит в последующем получить базу по отработанным дням при расчете отпуска.
С диаграммой Ганта и перерасчетом поступил как учили =).
Домашнее задание выполнено.
1. Для возможности ручного редактирования документа Начисленияя заработной платы» добавил в ТЧ «Начисления» реквизиты РучнаяКорректировка(булево) и Результат (Число). При этом доступность поля результат зависит от галочки РучнаяКорректировка. Для этой возможность переписал алгоритм проведения документа и в расчете указал заполнение поля результат.
2. Начисление отпуска: Добавил новый вид расчета Оплата по отпуску (Основные начисления), указал требуемые настройки. Также добавил новый документ «Начисление отпуска» в котором в шапке указывается основные поля, а для наглядности добавил ТЧ «Расчет среднего заработка», в котором и показывалась база по среднему заработку и Среднедневной заработок. Написал алгоритм расчет среднего заработка согласно условию. С ним сложностей не возникло. Только вот количество дней считал как разность дней, через данные графика видимо никак.
3. Отчет «Начисления сотрудникам». Сам отчет очень похож на пример из последней главы, так что с его формированием справился быстро. Со 2 частью задания пришлось повозиться. В обработчике «ПриОкончанииРедактированияИнтервала» Добавил такую проверку
Если Интервал.Конец < Интервал.Начало ИЛИ Месяц(Интервал.Начало) <> Месяц(Интервал.Конец) Тогда
ОтменаРедактирования = Истина;
Сообщить(“Некооректный период”);
Иначе
…..<Алгорит пересчета>
КонецЕсли;
Перерасчет производил через документы. В зависимости от типа документа вызывал экспортные процедуры модулей документов для перерасчета, только перед этим редактировал период действия у необходимых строк и записывал. Конечно есть минус данного решения, что перерассчитывается весь документ, и если в нем приличное количество записей, то задержка может быть ощутимой.
Домашнее задание выполнено.
1. Для возможности ручного редактирования документа Начисленияя заработной платы» добавил в ТЧ «Начисления» реквизиты РучнаяКорректировка(булево) и Результат (Число). При этом доступность поля результат зависит от галочки РучнаяКорректировка. Для этой возможность переписал алгоритм проведения документа и в расчете указал заполнение поля результат.
2. Начисление отпуска: Добавил новый вид расчета Оплата по отпуску (Основные начисления), указал требуемые настройки. Также добавил новый документ «Начисление отпуска» в котором в шапке указывается основные поля, а для наглядности добавил ТЧ «Расчет среднего заработка», в котором и показывалась база по среднему заработку и Среднедневной заработок. Написал алгоритм расчет среднего заработка согласно условию. С ним сложностей не возникло. Только вот количество дней считал как разность дней, через данные графика видимо никак.
3. Отчет «Начисления сотрудникам». Сам отчет очень похож на пример из последней главы, так что с его формированием справился быстро. Со 2 частью задания пришлось повозиться. В обработчике «ПриОкончанииРедактированияИнтервала» Добавил такую проверку
Если Интервал.Конец < Интервал.Начало ИЛИ Месяц(Интервал.Начало) <> Месяц(Интервал.Конец) Тогда
ОтменаРедактирования = Истина;
Сообщить(“Некооректный период”);
Иначе…..<Алгорит пересчета>
КонецЕсли;
Перерасчет производил через документы. В зависимости от типа документа вызывал экспортные процедуры модулей документов для перерасчета, только перед этим редактировал период действия у необходимых строк и записывал. Конечно есть минус данного решения, что перерассчитывается весь документ, и если в нем приличное количество записей, то задержка может быть ощутимой.
Задание выполнил.
Ввел перечисление ВидУчетаВремени (по дням, по часам).
С этим типом добавил реквизиты в РС Графики работы, в план видов расчетов и регистр расчета “Основные начисления”
Реквизит регистра расчета связал с реквизитом графика.
Модифицировал алгоритм проведения с учетом нового разреза по виду времени.
Для получения данных по дням задублировал записи регистра по основным начислениям.
Добавил требуемые поля в запрос.
Количество дней получил как разность между значением базового периода и суммой дней больничных. Сумму дней больничных получал отдельным запросом к данным графика.
С просмотром данных расчета в форме документа и диаграммой Ганта проблем не возникло.
Документ-объект передал в общий модуль РасчетЗП, расчитал с использованием отработанных алгоритмов, заполнил табличную часть, очистил движения и передал объект обратно в форму.
Диаграмму Ганта строил по таблице фактического периода действия. Группировкой убрал “лишние” записи. Данные для изменения документа передавал структурой.
Изменения:
1)Добавлен документ НачисленияОтпуска, Добавлен новый способ расчета: ПоСредему, исправлен общий модуль для расчета по среднему
Добавлена кнопка Расчитать, которая получает данные по среднему заработку и заносит их в ТЧ.СреднийЗаработок
– http://s07.radikal.ru/i180/1104/e4/999251c9b260.jpg
– закладка Средний заработок http://s42.radikal.ru/i095/1104/8c/808b84ee5884.jpg
2) Создан Отчет НачисленияСотрудникам.
Обеспечил перерасчет КонкретнойЗаписи при изменнии интервала. Также сделал проверку интервала.
– http://s013.radikal.ru/i322/1104/18/45e8492858c4.jpg
Правильно ли я понял, что следующее задание будет финальным?
Да, верно.
ДЗ №17
Добавил в Перечисление.СпособыРасчета значение «ПоСреднему»
Добавил в план видов расчета «Основные начисления» элемент Отпуск со способом расчета По Среднему. Базовым для него является Оклад. Отпуск вытесняет оклад и больничный.
В док. НачислениеЗП в тч Начисления добавил реквизиты: БазовыйПериодНачало и БазовыйПериодКонец.
Внес изменения в общий алгоритм расчетов с учетом способа расчета «ПоСреднему»
В форме док. НачислениеЗП добавил закладки, которые показывают движения по рег. Расчета Основные начисления и доп. Начисления.
В док. НачислениеЗП в тч Начисления добавил реквизиты Результат (типа число) и «РучнаяПравка» типа Булево, до первого проведения реквизит Результат = 0, а ручная правка = ложь, после проведения док. в реквизит Результат записывается рассчитанное с помощью универсальных процедур значение результата (которое идет в регистр расчета). Пользователь может вручную изменить значение этого реквизита для каждой строчки тч (при этом он должен проставить галочку РучнаяПравка). При проведении док. происходит проверка: если поле Результат больше 0 и РучнаяПравка = истина, то в регистр расчета записывается значение реквизита Результат, независимо от того, что при расчете по универсальным алгоритмам может получиться другое значение результата.
Добавлен отчет НачисленияСотрудникам в виде диаграммы Ганта. В запросе используется таблица РегистрРасчета.ОсновныеНачисления.ФактическийПериодДействия. Информация выводится в разрезе подразделений и сотрудников. Показываются виды расчета и их периоды действия.
Пользователю открыта возможность редактировать интервалы. В процедуре Процедура ДиаграммаПриОкончанииРедактированияИнтервала происходит проверка: если после изменений пользователя начало и конец интервала для оклада находятся в разных месяцах, то выдается сообщение об ошибке и действие пользователя отменяется (ОтменаРедактирования = истина).
Если проверка допустимости изменения интервалов прошла успешно, то получаем необходимые значения: докРегистратор = Интервал.Значение.Расшифровка; ВидРасчета = Интервал.Значение.Серия.Значение; Сотрудник = Интервал.Значение.Точка.Значение; Подразделение = Интервал.Значение.Точка.родитель.Значение; ДатаНачала = Интервал.Начало; ДатаОкончания = Интервал.Конец. Далее вызываем серверную процедуру, передаем ей эти параметры. В ней получаем документ объект регистратор, находим в нем необходимую строку в тч Начисления, правим в ней дату начала и дату окончания для начисления (в соответствии с интерактивными изменениями пользователя), далее программно перепроводим документ регистратор, при этом автоматически перерасчитывается результат, и в регистр расчета попадают уже обновленные данные.
Добавила отпуск в основные начисления. Для Оклада и больничного добавила отпуск в Вытесняющие начисления.
Создала документ ОплатаОтпуска. В табличной части задаю сотрудников, Дата начала, дата окончания, средняя зарплата и результат. На панель инструментов выводиться кнопка рассчитать среднее по которой рассчитывается средний заработок за 3 предыдущих месяца и результат.
Для отображения результата расчета в документе добавила два реквизита формы ОсновныеНачисления и ДополнительныеНачисления с Типами соответствующих регистров. Обеспечила заполнение данных реквизитов в процедуре ПриЧтенииНаСервере.
В процедуре проведения сравниваю запись регистра и данные таблицы на форме – если данные отличаются – запись выполняю по данным реквизитов формы.
При решении задания по отображению данных о начислении зарплаты в виде диаграммы Ганта возникли следующие сложности
Если вывести в виде диаграммы данные по таблице ОсновныеНачисленияФактическийПериодДействия – получается красивая картинка, но тут непонятно как выполнять действия по записи в регистр, если перетащить интервал, например, по окладу, так чтобы он совмещался с интервалом по больничному листу.
Если вывести данные по таблице ОсновныеНачисления, то картинка не очень красивая, но тут легче отслеживать правильность изменения интервалов.
Пересчет после изменения интервалов выполнить не смогла.
Редактирование интервалов расчетов происходит в док.НачислениеЗаработнойПлаты? А то по контексту в отчете т.е. не типовое решение.
После корректировки док перепроводится – типовое решение. Корректируется запись в проведенном документе и в регистре – не типовое решение. Хотел спросить применяем типовые решения?
Правильнее применить типовые решения.