Спасибо за урок. 1. Все таки обычно смены начинаются не в 00.00, но это так придирка. 2. Если все-таки четко следовать формулировке задачи, то ставка должна браться на каждый день своя, ведь когда ставка берется на начало месяца в других билетах, нам это явно сообщают. Для экзамена, наверное, прокатит, но в целом неверно.
выходные наверное можно с формы обработки убрать. а можно на экзамене сделать так: Шаг = Число(Сред(ГрафикРаботы.Наименование,СтрДлина(ГрафикРаботы.Наименование))); ?
А вопрос в постановке задаче написано что тарифная ставка может изменяться каждый день. Разве не нужно делать срез последних на каждую дату периода, и получать результат в запросе. Так получается решение не соответствует постановке.
Я всё-таки сомневаюсь, что в этой задаче можно просто взять ставку на период регистрации и всё, в других задачах, где так можно делать, обычно же пишется что-то типа "Первоначальное значение оклада может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода. " А здесь ничего такого не сказано и, по логике, зачем нужна возможность менять ставку каждый день, если она не будет никак учитываться в течение месяца?
можно и так, по Калинкину все пишется в модуле формы : &НаКлиенте Процедура ЗаполнитьГрафик(Команда) Если ПроверитьЗаполнение() Тогда ЗаполнитьГрафикНаСервере(Объект.Период.ДатаНачала, Объект.Период.ДатаОкончания, Объект.ГрафикРаботы, Объект.ВыходныеДни); ПоказатьОповещениеПользователя(,,"Заполнение завершено", БиблиотекаКартинок.ВводНаОсновании); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Процедура ЗаполнитьГрафикНаСервере(ДатаНачала, ДатаОкончания, ГрафикРаботы, ВыходныеДни) Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей(); Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы); Набор.Прочитать(); мСтрокиУдалить = Новый Массив; Для каждого Стр Из Набор Цикл Если Стр.Дата>=ДатаНачала и Стр.Дата
Горб с вычислением тарифа. Тариф может меняться каждый день, значит нельзя его исчислять на начало периода регистрации. И трудягам обидно и постановке задачи не соответствует.
Это здорово, что рассматриваются разные методы заполнения графиков. На любой вкус и цвет, как говорится.
Спасибо за занятие☺
Для заполнения графика можно использовать деление по модулю:
Запись.Значение = ?(Шаг % 3 = 1, 24, 0);
Шаг = Шаг + 1;
Заменяет две ветки условий
Спасибо за урок.
1. Все таки обычно смены начинаются не в 00.00, но это так придирка.
2. Если все-таки четко следовать формулировке задачи, то ставка должна браться на каждый день своя, ведь когда ставка берется на начало месяца в других билетах, нам это явно сообщают. Для экзамена, наверное, прокатит, но в целом неверно.
Васина пусть лучше не мягкая а упругая.
выходные наверное можно с формы обработки убрать. а можно на экзамене сделать так:
Шаг = Число(Сред(ГрафикРаботы.Наименование,СтрДлина(ГрафикРаботы.Наименование)));
?
А вопрос в постановке задаче написано что тарифная ставка может изменяться каждый день. Разве не нужно делать срез последних на каждую дату периода, и получать результат в запросе. Так получается решение не соответствует постановке.
В этой задаче не нужно. Сказано, что тарифная ставка может меняться каждый день - но не сказано, что это нужно учитывать при расчете зарплаты.
Я всё-таки сомневаюсь, что в этой задаче можно просто взять ставку на период регистрации и всё, в других задачах, где так можно делать, обычно же пишется что-то типа "Первоначальное значение оклада может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода. " А здесь ничего такого не сказано и, по логике, зачем нужна возможность менять ставку каждый день, если она не будет никак учитываться в течение месяца?
Можно начать с Шаг = 3 и потом проверять на Шаг % 3 = 0)
Моя версия обработки по методу Зайцева:
Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
ЧислоСекундВСутках = 86400;
Дат = ДатаНачала;
Пока Дат
можно и так, по Калинкину все пишется в модуле формы :
&НаКлиенте
Процедура ЗаполнитьГрафик(Команда)
Если ПроверитьЗаполнение() Тогда
ЗаполнитьГрафикНаСервере(Объект.Период.ДатаНачала, Объект.Период.ДатаОкончания, Объект.ГрафикРаботы, Объект.ВыходныеДни);
ПоказатьОповещениеПользователя(,,"Заполнение завершено", БиблиотекаКартинок.ВводНаОсновании);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьГрафикНаСервере(ДатаНачала, ДатаОкончания, ГрафикРаботы, ВыходныеДни)
Набор = РегистрыСведений.ГрафикиРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы);
Набор.Прочитать();
мСтрокиУдалить = Новый Массив;
Для каждого Стр Из Набор Цикл
Если Стр.Дата>=ДатаНачала и Стр.Дата
@@Рафаиль-я1к длинный код, у меня процедура сразу для 3 графиков заполняет
Запросы в циклах пошли. Надеюсь, никто по этому методу не делал на экзамене)
Горб с вычислением тарифа. Тариф может меняться каждый день, значит нельзя его исчислять на начало периода регистрации. И трудягам обидно и постановке задачи не соответствует.
Команда Навального...ясно от куда у ребяток в погонах твои данные