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

Решения расчетных задач на экзамене 1С:Специалист по платформе 8.3. многовариантны. Поэтому наши слушатели при подготовке к данному экзамену активно советуются с тренером в Мастер-группе, просят оценить и/или покритиковать их способы решения задач. Например, из данной подборки вопросов вы сможете узнать, как быть, если в качестве расчетного периода выбрана Неделя и как можно корректно выполнить расчет удержаний за каждые 15 минут опоздания. Вариантов решений много, но самый оптимальный всегда один!

 

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

К сожалению, в учебных материалах не увидел вариант, когда в качестве расчетного периода берется Неделя.В экзаменационном сборнике такие задачи встречаются. Буду признателен, если на примере покажете, как решать такой вариант.

Ответ

У регистра расчета нет периодичности Неделя, есть только День (среди тех, что меньше месяца). Но периодичность День нам не подходит, так как вытеснение должно работать в течение недели, а не дня (при периодичности День, все что выходит за рамки дня будет считаться другим расчетным периодом), при этом при периодичности Месяц, вытеснение будет работать корректно. Поэтому какой-то особой разницы с тем как, если бы расчет выполнялся помесячно, нет, просто вместо одной записи за месяц, будет 4 записи по неделям. Базовый период для расчета больничных, премий и т.д. также указывается Неделя.

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

Подскажите, сочтут ли такой код достаточным на экзамене? Еще хотел бы уточнить, в своем решении я программно разбиваю неделю переходящую на две записи. Можно ли этого не делать, подразумевая, что пользователь будет это делать вручную? В таком случае меньше времени уйдет на реализацию задачи.

Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ОсновныеНачисления.Записывать = Истина;
    Движения.ДополнительныеНачисления.Записывать = Истина;
    
    Для Каждого ТекСтрокаОсновныеНачисления Из ОсновныеНачисления Цикл
        
        Если Месяц(ТекСтрокаОсновныеНачисления.ДатаНачала) <> Месяц(ТекСтрокаОсновныеНачисления.ДатаОкончания) Тогда           
            Движение = Движения.ОсновныеНачисления.Добавить();
            Движение.Сторно = Ложь;
            Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
            Движение.ПериодДействияНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
            Движение.ПериодДействияКонец = КонецМесяца(ТекСтрокаОсновныеНачисления.ДатаНачала);
            Движение.ПериодРегистрации = ПериодРегистрации;
            Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
            Движение.График = ТекСтрокаОсновныеНачисления.График;
            
            Если ТекСтрокаОсновныеНачисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Больничный Тогда
                Движение.БазовыйПериодНачало = НачалоНедели(ТекСтрокаОсновныеНачисления.ДатаНачала)-7*24*60*60;
                Движение.БазовыйПериодКонец = КонецНедели(ТекСтрокаОсновныеНачисления.ДатаНачала-1);
            КонецЕсли;      
            
            Движение = Движения.ОсновныеНачисления.Добавить();
            Движение.Сторно = Ложь;
            Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
            Движение.ПериодРегистрации = ПериодРегистрации;
            Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
            Движение.График = ТекСтрокаОсновныеНачисления.График;
            
            Движение.ПериодДействияНачало = НачалоМесяца(ТекСтрокаОсновныеНачисления.ДатаОкончания);
            Движение.ПериодДействияКонец = КонецДня(ТекСтрокаОсновныеНачисления.ДатаОкончания);
            
            Если ТекСтрокаОсновныеНачисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Больничный Тогда
                Движение.БазовыйПериодНачало = НачалоНедели(ТекСтрокаОсновныеНачисления.ДатаНачала)-7*24*60*60;
                Движение.БазовыйПериодКонец = КонецНедели(ТекСтрокаОсновныеНачисления.ДатаНачала-1);
            КонецЕсли;
        Иначе
            Движение = Движения.ОсновныеНачисления.Добавить();
            Движение.Сторно = Ложь;
            Движение.ВидРасчета = ТекСтрокаОсновныеНачисления.ВидРасчета;
            Движение.ПериодДействияНачало = ТекСтрокаОсновныеНачисления.ДатаНачала;
            Движение.ПериодДействияКонец = КонецДня(ТекСтрокаОсновныеНачисления.ДатаОкончания);
            Движение.ПериодРегистрации = ПериодРегистрации;
            Движение.Сотрудник = ТекСтрокаОсновныеНачисления.Сотрудник;
            Движение.График = ТекСтрокаОсновныеНачисления.График;
            
            Если ТекСтрокаОсновныеНачисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Больничный Тогда
                Движение.БазовыйПериодНачало = НачалоНедели(ТекСтрокаОсновныеНачисления.ДатаНачала)-7*24*60*60;
                Движение.БазовыйПериодКонец = КонецНедели(ТекСтрокаОсновныеНачисления.ДатаНачала-1);
            КонецЕсли;
            
        КонецЕсли;    
        
    КонецЦикла;

Ответ

Думаю, что код достаточный. В решении даже предусмотрена некоторая автоматизация (разбивка недели переходящей из месяца в месяц). Единственный момент, признак Сторно можно не указывать, так как он по умолчанию уже равен значению Ложь.

Да, неделю можно программно не разбивать, а вводить периоды полностью вручную.

 

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

В условии расчетной задачи сказано: “Если сотрудник опоздал на работу, то за каждые целые 15 минут опоздания начисляется штраф в размере 50 руб.” Подскажите, как лучше это реализовать? Мне приходит на ум следующее:

Вариант 1: Вводить количество минут вручную (по имеющейся информации экзаменатору данный вариант не нравится)

Вариант 2: РС Опоздания, по которому собирать количество целых 15 минуток

Вариант 3: РН оборотный + документ “Опоздания”, и по РН собирать количество целых 15 минуток

Вариант 4: РР Удержания, завести ресурс Минуты, документом “Опоздание” записывать туда, кто опоздал за месяц и на сколько, ПВР Удержания “Штраф”, ставим базовым расчетом “Штраф” :) При расчете в таблице УдержанияБазаУдержания поле МинутыБаза и будет нашими минутами, которые делим на 15 и берем целую часть.

Думаю вариант 4 будет разумнее :) Как считаете?

Ответ

Четвертый вариант кажется самым разумным, но на мой взгляд, хранить минуты опоздания лучше в оборотном РН, а не регистре расчета.

В этом случае при расчете штрафа будет удобно получать данные за месяц из этого РН, которые затем нужно будет разделить на 15 и умножить на размер штрафа.

В этом случае, не нужно делать Штраф базовым для самого себя, можно сразу рассчитывать штраф, исходя из данных в РН.

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

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

Вход на сайт

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

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

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

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

E-mail или логин

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