[ Разбор вопросов ] Расчетные механизмы на аттестации 1С:Специалист по платформе 8.3

Задачи по расчетным механизмам являются самыми сложными и коварными на аттестации 1С:Специалист по платформе 8.3. Слушателям бывает трудно сходу определить верную структуру регистров. Ошибки, допущенные на аттестации, подробно разбираются в Мастер-группе совместно с тренером.

 

Вопрос №1: Почему конструкция Запись.ВидРасчета.Приоритет не считается запросом в цикле?

Почему маловероятно то, что экзаменатор сочтет запись Запись.ВидРасчета.Приоритет запросом в цикле? Ведь это же запрос в цикле, так ведь?

Если Запись.ВидРасчета.Приоритет <> Приоритет Тогда
            Продолжить;
КонецЕсли;

Этот код точно не нарушает запрет на использование запросов в цикле?

Ответ

Это неявное выполнение запроса в цикле, и его главное отличие от явного в том, что в данном случае будет использоваться механизм кэширования. Для каждого вида расчета будет получен объект и сохранен в кэш на 20 сек., то есть запрос для каждого вида расчета будет выполнен только один раз, далее данные будут получены из кэша.
 
Так что, если объект не является большим (большое число реквизитов и табличных частей), а также их не много, то это скорее всего не будет приводить к проблемам производительности. Я думаю, что в требованиях имеется в виду именно явное выполнение запроса в цикле, а не получение реквизитов от ссылки.

Уточняющий вопрос

Правильно ли я понимаю, что если бы мы в данном примере использовали запрос в явном виде, то это бы 100% привело к снижению оценки (потому что мы бы тем самым отказались от использования механизма кэширования)? А если в данном случае задействовать модуль с использованием повторяющихся значений на время вызова?

Ответ

Думаю, это привело бы к необоснованному увеличению сложности кода, а значит дополнительным временным затратам (100% гарантии, что за это будут сниматься баллы, я дать не могу). Иногда от запросов в цикле сложно уйти, например, обход выборки по приоритетам и расчет начислений по каждому приоритету тоже можно считать запросом в цикле, ведь в процедуре ПроведениеРасчетов.Рассчитать выполняется запрос.
 
Я лично не слышал, чтобы на экзамене снижали оценку за получение реквизитов от ссылки в цикле, тем более, если сложно придумать альтернативу. В конце концов, если будут вопросы по этому пункту, можно защитить свое решение, объяснив механизм кэширования и тем, что кэшируемых объектов (видов расчета) в целом немного.

 

Вопрос №2: Как реализовать расчет надбавки в виде процента от зарплаты за предыдущий месяц на экзамене 1С:Специалист по платформе 8.3?

Я решал задачу “Как рассчитать надбавку как процент от зарплаты сотрудников подразделения за предыдущий месяц” на экзамене и решил неправильно.
 
Ошибка такая: “Подразделение должно быть определено как измерение (совместительство допускается).” Соответственно неверно определена структура перерасчетов. Я сделал подразделение не измерением, а реквизитом. При этом премия рассчиталась правильно.
 
Теперь хочу разобраться, в каких случаях Подразделение делать ресурсом, а в каких – реквизитом. Можете дать такие рекомендации, пожалуйста? Если совместительство допускается, то – измерение, а если не допускается, то – ресурс? И как настраивать перерасчеты в обоих случаях?

Ответ

Если совместительство допускается, то подразделение должно быть измерением регистра, так как по одному сотруднику может быть несколько записей в регистре: по основной работе, а также по совместительству. Если совместительство в задаче не упоминается, то подразделение должно быть реквизитом регистра расчета (вытеснение должно работать только в разрезе сотрудника, без учета подразделения).

Что касается перерасчетов, то нужно связать все имеющиеся измерения регистра с измерениями перерасчета, то есть при совместительстве это будут измерения Сотрудник и Подразделение, без совместительства – одно измерение Сотрудник.

 

Вопрос №3: Как настроить регистр сведений ГрафикиРаботы, если известно, что сотрудники работают по графику, установленному для каждого подразделения отдельно, и при этом отпуска рассчитываются по шестидневному графику?

Подскажите, пожалуйста, такой момент – часто в задачах встречается такое условие: “Сотрудники работают по графику работы, установленному для каждого подразделения отдельно. При этом отпуска рассчитываются по шестидневному графику.” Как в данном случае настраивать регистр ГрафикиРаботы? И как потом настраивать связь с графиком в регистре расчета?

Ответ

В этом случае у регистра сведений ГрафикиРаботы будут три измерения: Дата, Подразделение и ГрафикРаботы. Для записей графика по подразделениям заполняется Подразделение, при этом измерение ГрафикРаботы не заполняется, для записей по шестидневке наоборот заполняется ГрафикРаботы, а измерение Подразделение будет пустой ссылкой.

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

Уточняющий вопрос слушателя

А как быть, если в отчете есть колонка Подразделение? Я завел в регистре два ресурса Подразделение (связь с графиком, при больничном не заполнено) и ПодразделениеСотрудника (для отчета, заполнено всегда) . Правильно так?

Ответ

Да, хорошее решение, только не ресурсы, а измерения/реквизиты (в зависимости от того, разрешено ли совместительство).

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Вход на сайт

Зарегистрироваться

Подтверждение регистрации будет отправлено на указанный e-mail.

Я подтверждаю, что ознакомлен(а) с Пользовательским соглашением, принимаю его условия и даю свое согласие на обработку моих персональных данных.

Восстановить доступ

E-mail или логин

Ссылка на создание нового пароля будет отправлена на указанный e-mail.