Автор Тема: Задача 3.35  (Прочитано 19377 раз)

0 Пользователей и 1 Гость просматривают эту тему.

napan

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Alexey
Задача 3.35
« : Июль 30, 2010, 02:52:14 pm »
Мое решение. Может кто второй отчет попроще сделать?
Вложения:
3.35.dt

Bublik

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Приходько Александр Владимирович
Задача 3.35
« Ответ #1 : Август 30, 2010, 05:45:11 pm »
несколько раз у тебя замечал, что ты делаешь функцию с запросом в цикле. думаю это грубая ошибка. хотя ты наверно уже сдал))


palax

  • Пользователь
  • **
  • Сообщений: 45
  • ФИО: Алексей
Задача 3.35
« Ответ #2 : Сентябрь 08, 2010, 11:00:17 pm »
napan, я согласен с Bublik, снизят непременно. Я так делал :
 Функция ТарифнаяСтавка(ТЗ,Значение)Экспорт;
    
    Для Каждого ТекСтрока из ТЗ Цикл
       Если Значение>=ТекСтрока.Мин и Значение<ТекСтрока.Макс тогда
          Возврат ТекСтрока.Процент;
       КонецЕсли;
    КонецЦикла;
    Возврат 0;

КонецФункции
 
 ТЗ получал перед запросом в расчете и все....

Сам как ты делал, пока замечание не получил от imagoman (спасибо ему большое!), так что меняй расчет пока не привык, не то я долго с собой боролся, т.к очень нравилось расчет строить именно так как ты в своем решении сделал.


baksha_bni

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Nikita
Задача 3.35
« Ответ #3 : Октябрь 21, 2010, 08:50:50 am »
napan, регистр сведений "СведенияОСотрудниках" в данной задачи не к чему, как и видрасчета премия в данной задачи не нужно реализовывать...достаточно ТарифнойСтавки и ПроцентаКомпенсации...
 Компенсацию не мы в документе вводим и проверяем не больше ли 100 часов отработано и только тогда записываем результат, а она автоматически должна вводиться если больше 100 часов отработано по окладу...
 результат компенсация тоже неправильно считается, должна "процент от начисленной в том же периоде оплаты по тарифу(т.е. окладу)", в твоем решение "         ИначеЕсли СтрокаНабора.ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисления.Компенсация Тогда
             Если ВыборкаДетальныеЗаписи.ОтработанноЧасов > 100 Тогда
              СтрокаНабора.Результат = ВыборкаДетальныеЗаписи.ОтработанноЧасов * СтрокаНабора.Размер / 100;
             Иначе
                СтрокаНабора.Результат = 0;
             КонецЕсли;
             
          КонецЕсли;"
 и это только на первый взгляд...

baksha_bni

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Nikita
Задача 3.35
« Ответ #4 : Октябрь 21, 2010, 01:31:26 pm »
мне показалась подозрительно простой задачей )))
Вложения:
3.35_Baksha_bni.dt

ccgm

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей Ковалев
Задача 3.35
« Ответ #5 : Декабрь 25, 2010, 03:44:40 pm »
По решению napan верные замечания сделали palax и Bublik. К тому, что уже сказали, добавлю следующее:
 а) Неверно задавать процент компенсации по сотруднику. По условию задачи сказано: "Процент компенсации общий для всех сотрудников". Поэтому нужно использовать отдельный регистр сведений.
 б) штраф за прогул не записывается.
 в) ошибочно принята граница начисления компенсации. Должно быть именно 1000 часов, а не 100.
 г) по отчету Компенсации. Использование вложенных запросов не лучшим образом влияет на производительность. Поэтому правильнее использовать временные таблицы. В моем решение запрос достаточно простой. Во временную таблицу я поместил всех сотрудников по заданному периоду, а затем из трех таблиц левым соединением подтянул необходимые данные. Может быть по количеству символов запрос получился сравнимым, но зато структурно более простым.

По решению baksha_bni:
 а) начислять зарплату со знаком плюс за прогулы – это не есть хорошо, в том числе и по условиям задачи. Штрафы за прогул надо записывать в Удержания.
 б) почему-то, как и в предыдущем решении в качестве порогового значения при начислении компенсации ошибочно принято 100 часов, а не 1000. Для реализации этого условия задачи необходимо учитывать наработку водителей в регистре накопления.
 в) ответственность за ввод компенсации в решении возложена на пользователя. Формально это не противоречит условиям задачи. Однако если пользователь забудет ввести компенсацию, то водителю она и не начислится. Поэтому логичнее и правильнее начислять компенсацию автоматически на основании оклада.
 г) в модуле расчета зарплаты дважды выполняется один и тот же запрос. Это строка - Запрос.Выполнить().Выгрузить(). Исправляется легко и лучше не допускать этого на экзамене, чтобы не вызывать лишних замечаний.
 д) прикольно наблюдать в тексте модулей последствия неработающей клавиши Shift.

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

В своем решении компенсацию и штраф я рассчитываю автоматически на основании оклада и прогула соответственно. При расчете компенсации учитываю наработку водителей в регистре накопления. Чтобы обеспечить корректный расчет зарплаты, в каждом ПВР ввел реквизит КатегорияРасчета.

Мое решение задачи 3.35:


Вложения:
ccgm_3_35.dt
« Последнее редактирование: Декабрь 25, 2010, 03:46:53 pm от Сергей Ковалев »

unknown181538

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Алексей
Задача 3.35
« Ответ #6 : Январь 11, 2011, 04:34:53 am »
Quote (ccgm)
в) ошибочно принята граница начисления компенсации. Должно быть именно 1000 часов, а не 100.

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

Matcoder

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: алекс
Задача 3.35
« Ответ #7 : Январь 20, 2011, 11:00:36 pm »
ccgm,
 Ошибка в твоем решении. В качестве базы для расчета компенсации берутся фактические+наработанные часы, а не сумма начислений. В твоей базе посмотри, начислено за сентябрь оплаты по тарифу - 5320, а компенсация(10%) - 102,40. Нужно в расчете оплаты по тарифу оставить заполнение компенсации, а расчет компенсации нужно добавить отдельным условием.
 В целом мне понравилось решение, только все же может лучше вынести запрос в отдельную процедуру. Это будет лучше выглядеть, а то "Для каждого" и потом сразу "Запрос.Выполнить()". В глаза бросается wink

unknown181538, раздели на количество часов в день по графику.

Добавлено (20.01.2011, 23:00)
---------------------------------------------
ccgm, Да, и регистр накопления наверное логичнее оборотный.


Matcoder

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: алекс
Задача 3.35
« Ответ #8 : Январь 21, 2011, 12:43:44 am »
Мое решение. Прсмотрите, плиз, кто-нибудь...
Вложения:
3_35_Matcoder.dt
« Последнее редактирование: Январь 21, 2011, 01:21:43 am от алекс »

AndreiPiter

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.35
« Ответ #9 : Февраль 14, 2011, 09:01:36 pm »
Matcoder, Как быть со штрафами (5000руб за день прогула) если допустим сотрудник работает разное количество часов в день, т.е не по 8 часов часов в день.
 ОтработаноЧасовБаза/8 не подходит. Дошёл до этого момента, задумался...

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 3.35
« Ответ #10 : Февраль 15, 2011, 03:20:28 pm »
AndreiPiter, Заведи ресурс в РС ГрафикиРабот еще один 1 - если рабочий, 0 если не рабочий.
 В Проф. разработке предлагается ввести еще одно измерение ВидУчетаРабочегоВремени типа Перечисления: ПоДням, ПоЧасам.

AndreiPiter

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.35
« Ответ #11 : Февраль 16, 2011, 08:13:39 pm »
SergTH000, мысль хорошая.
 Какая то запутка...Завел два ресурса в РС ГрафикиРаботы: Часы, Дни. В таблице ДанныеГрафика соответсвенно появились Часы и Дни. Тогда я не понимаю, что мы указываем в свойстве "Значение графика", если всё равно в ДанныхГрафика подсчитываются все ресурсы???

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 3.35
« Ответ #12 : Февраль 16, 2011, 11:47:48 pm »
AndreiPiter, Такая вот штука=) Один ресурс надо указать, остальные подтянутся=)

AndreiPiter

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Андрей
Задача 3.35
« Ответ #13 : Февраль 17, 2011, 08:24:52 pm »
моё решение
Вложения:
AP_3.35.dt

AnderS

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Andrej Seregin
Задача 3.35
« Ответ #14 : Март 02, 2011, 03:19:46 pm »
ccgm,
 Спасибо за идею считать Штраф базой от Прогула. Хотел поставить тебе за нее плюсик в репутацию, но промахнулся с галочкой. Завтра обязательно исправлю. А в целом в решении много спорного. Главное: вряд - ли стоит использовать регистр накопления для учета наработки водителей. Думаю экзаменаторы этого не оценят. Ведь в задаче проверяется умение работать с механизмами расчетов. Тем более что регистр расчета может посчитать наработку более легко и красиво.
 AndreiPiter, к вопросу: "Тогда я не понимаю, что мы указываем в свойстве "Значение графика", если всё равно в ДанныхГрафика подсчитываются все ресурсы???"
 1) Ресурс регистра сведений ДанныеГрафика, отмеченный как "Значение графика" в свойстве регистра расчета можно получать объектной моделью с помощью функции ПолучитьДанныеГрафика()
 2) и это главное (этот ответ есть у Гилева в разборе расчетной задачи и где - то в "Профессиональной разработке ...", но не очень четко) - Если в качестве базового периода задан период не кратный расчетному периоду, то база будет рассчитываться пропорционально сумме именно того ресурса регистра регистра ДанныеГрафика, который отмечен как "Значение графика" регистра расчета за период пересечения базового периода рассчитываемой записи и Фактических периодов действия базовых видов расчета, относительно относительно сумме ресурса за фактические периоды действия базовых видов расчета. Т. О. если использовать табличную модель получения базы и базовый период состоит из целого числа расчетных периодов, то не важно какой ресурс Данных графика отметить как "Значение графика" ( если ресурсов несколько).
 Комментарии к решению задачи:
 -в этой задаче действительно лучше использовать дополнительное измерение регистра ДанныеГрафика а не дополнительный ресурс. дополнительное измерение меньше грузит систему, чем ресурс. А я первоначально хотел использовать именно ресурс.
 -элегантный способ получения ставки. Возьму его на вооружение. я раньше использовал нечто похожее но немного сложнее. Однако в запросе есть два косяка:
 а) запрос нужно упорядочить по убыванию поля "РазмерСтавки.ЧасовОт", иначе считается не правильно,
 б) совсем крошечное замечание - в условии соединения должно быть отношение ">=" а не ">".
 - Штраф все же лучше поместить в отдельный ПланВидовРасчета, чтобы начисления с удержаниями не смешивать и считать его например базой от ресурса ОтработаноДней вида расчета Невыход, как сделано у ccgm.