Автор Тема: Билет 12. Спец по платформе V8  (Прочитано 30120 раз)

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

Aluvika

  • Пользователь
  • **
  • Сообщений: 27
Re: Билет 12. Спец по платформе V8
« Ответ #75 : Ноябрь 24, 2016, 04:18:48 pm »
alex1248, теперь понятно почему именно такая формула
Спасибо огромное!

verbatium80

  • Пользователь
  • **
  • Сообщений: 22
Re: Билет 12. Спец по платформе V8
« Ответ #76 : Декабрь 16, 2016, 11:57:25 am »
Мой обновленный вариант решения...
Буду рад критике
Я думаю что, на счете ПрибылиУбытки количественный учет не обязателен. Количество проданного для отчета можно со счетов Товары и Материалы получить.


verbatium80

  • Пользователь
  • **
  • Сообщений: 22
Re: Билет 12. Спец по платформе V8
« Ответ #77 : Декабрь 16, 2016, 11:58:59 am »
Мой вариант решения. Буду рад любой критике. На  автозаполнение табличных частей Документов прошу не обращать внимания. Это сделано для  контроля наличия
« Последнее редактирование: Декабрь 16, 2016, 12:01:20 pm от verbatium80 »

pasha3005

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Павел
Re: Билет 12. Спец по платформе V8
« Ответ #78 : Декабрь 30, 2016, 04:14:59 pm »
Коллеги, снова подниму вопрос про 1000 часов в СПР.
Знаю, что уже неоднократно обсуждалось, и, вроде как, за эталон было принято решение уважаемого SAE с вот такой вот конструкцией для расчета премии:

Если (Окр((Выборка.ЧасыКонец/1000),2,1)-Окр((Выборка.ЧасыНачало/1000),2,1)) > 0 тогда
       Запись.Результат = Выборка.База*Выборка.Процент/100;
КонецЕсли;

Предположим, что сейчас я ввожу первое начисление ЗП сотруднику. Указываю, что он отработал 120 часов, и тут же начисляю премию, в этом же документе.
По предложенной формуле получается, что премия ему будет начислена, хотя никаких 1000 часов он не наездил. Так как 120/1000 больше, чем 0/1000.

Подскажите пожалуйста, я чего-то не понимаю, или предложенное решение не совсем корректно себя ведет?

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 12. Спец по платформе V8
« Ответ #79 : Декабрь 30, 2016, 05:26:21 pm »
...вроде как, за эталон было принято решение уважаемого SAE с вот такой вот конструкцией для расчета премии:

Если (Окр((Выборка.ЧасыКонец/1000),2,1)-Окр((Выборка.ЧасыНачало/1000),2,1)) > 0 тогда
       Запись.Результат = Выборка.База*Выборка.Процент/100;
КонецЕсли;
Про эталоны не слышал (надеюсь, SAE не обидится). Формула не похожа на корректную для данной ситуации.

pasha3005

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Павел
Re: Билет 12. Спец по платформе V8
« Ответ #80 : Декабрь 30, 2016, 07:48:58 pm »
Про эталоны не слышал (надеюсь, SAE не обидится). Формула не похожа на корректную для данной ситуации.

Согласен, что не похожа. Я с этой задачей второй день сижу, всё пытался найти идеальное решение через оборотный регистр накопления с факт часами.
К сожалению, получается, что ни представленная формула, ни её вариации, типа округления в меньшую сторону без знаков после запятой и пр. - не удовлетворяют условию задачи в полной мере, если мы трактуем её таким образом (об этом Вы написали на предыдущей странице):

Трактовка экзаменаторов именно такая - каждая очередная наезженная 1000 км влечет начисление компенсации именно в том месяце, в котором эта 1000 была достигнута. Пока нет следующей 1000, начисления нет. Где-то на этом форуме есть отзывы тех, кому на экз попадалась эта задача, так что это не моё ИМХО, а достаточно надежная информация.

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

В общем, решить удалось только через регистр остатков - каждый раз увеличиваем ФактЧасы, и тут же проверяем, не превысили ли они 1000. Если да - делаем расход на 1000.
Вроде бы, всё правильно. Решение всего билета прикрепляю, вдруг кому понадобится.

Если заметите какие-либо недочёты - буду очень признателен!

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 12. Спец по платформе V8
« Ответ #81 : Декабрь 30, 2016, 08:17:29 pm »
... решить удалось только через регистр остатков - каждый раз увеличиваем ФактЧасы, и тут же проверяем, не превысили ли они 1000. Если да - делаем расход на 1000.
Я именно так и решал при подготовке. Считаю, что это оптимальный вариант.
Подкорректировал старое сообщение, где под напором коллег соглашался с использованием оборотного РН.  :)

ПС. Часы надо проверять не на превышение 1000, а на больше или равно.
« Последнее редактирование: Декабрь 30, 2016, 08:19:00 pm от alex1248 »

Liya_Anubis

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Liya
Re: Билет 12. Спец по платформе V8
« Ответ #82 : Январь 17, 2017, 05:18:41 pm »
В задаче СПР в для начисления компенсации за ремонт нет условия, что компенсация должна быть начислена за каждые 1000 часов наезда. Вероятно, что факт наезда 1000 часов дает сотруднику право на получение компенсации, т.е. с того месяца как пошло превышение ему может быть начислена эта компенсация. А начислять её или нет решает пользователь когда в документе Начисление ЗП заводит соответствующий вид расчета. Также возможно, во всех периодах в течение которых он наезжал свои 1000 часов у него были прогулы, тогда по условию задачи ему компенсация не положена и право на эту компенсацию может возникнуть только на 5000 часов.
Также в задаче сказано "наездил", а не отработал, потому копить часы по данным рабочего времени не правильно, просится отдельный документ, который будет делать движения только в регистр накопления.

erdem.badluev

  • Проверенный
  • ***
  • Сообщений: 139
Re: Билет 12. Спец по платформе V8
« Ответ #83 : Февраль 01, 2017, 12:59:07 pm »
Мой вариант решения. 1000 часов сделал на регистре расчета отдельным видом расчета.
Но если начислять за каждые 1000, то решение не верное.
Ориентировался по условию: "Если водитель в расчетном периоде наездил больше 1000 часов, то ему должна быть начислена компенсация" - то есть данные должны браться за начисляемый период (месяц), значит регистр оборотный должен быть, а не остатки (которые использовались бы для каждых 1000), и компенсация должна быть вроде как одна...

Использовал механизм базы и в ресурс для базы записывал то самое значение выработки, и в базу для компенсации указывал эту выработку за текущий период расчета, также базой для компенсации сделал штраф - для галки был штраф или нет. при расчете базу по виду расчета разрезаю и проверяю выработка или штраф (по тексту запроса станет более понятно).

Буду рад критике
 :)

alex1248

  • Призрак форума
  • *****
  • Сообщений: 714
Re: Билет 12. Спец по платформе V8
« Ответ #84 : Февраль 01, 2017, 04:48:06 pm »
... то есть данные должны браться за начисляемый период (месяц) ...
Т.е вы имеете ввиду, что начисляете тогда, когда 1000 часов наезжено именно в течение расчетного месяца - с 1-го по последнее число этого месяца?   :)
« Последнее редактирование: Февраль 01, 2017, 04:49:39 pm от alex1248 »

Liya_Anubis

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Liya
Re: Билет 12. Спец по платформе V8
« Ответ #85 : Февраль 01, 2017, 08:56:17 pm »
erdem.badluev, а зачем условие по периоду регистрации?

Цитировать
         |ИЗ
         |   РегистрРасчета.Начисления.ДанныеГрафика(
         |         Регистратор = &Регистратор
         |            И ПериодРегистрации = &ПериодРегистрации) КАК НачисленияДанныеГрафика
Цитировать
      Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(Ссылка.Дата));
      Запрос.УстановитьПараметр("Регистратор", Ссылка);

Liya_Anubis

  • Новичок
  • *
  • Сообщений: 4
  • ФИО: Liya
Re: Билет 12. Спец по платформе V8
« Ответ #86 : Февраль 01, 2017, 09:25:08 pm »
Зачем в компенсации со штрафом извращаться, ведь в условии задачи сказано
Цитировать
Компенсация начисляется только в случае отсутствия невыходов, однако контролировать программным образом данное обстоятельство не требуется.
Вид расчета "Выработка", для хранения времени это совсем уже извращение, так делать нельзя.
Штраф в допначислениях, по-моему, тоже ни туда ни сюда, лучше в основных сделать, там данные графика получать нужно, а в допначислениях данные о количестве дней не получить и настроена зависимость от базы, которая не нужна штрафу
« Последнее редактирование: Февраль 01, 2017, 09:34:53 pm от Liya_Anubis »

erdem.badluev

  • Проверенный
  • ***
  • Сообщений: 139
Re: Билет 12. Спец по платформе V8
« Ответ #87 : Февраль 02, 2017, 04:09:13 am »
... то есть данные должны браться за начисляемый период (месяц) ...
Т.е вы имеете ввиду, что начисляете тогда, когда 1000 часов наезжено именно в течение расчетного месяца - с 1-го по последнее число этого месяца?   :)
Да. По условию задачи так понимаю.

erdem.badluev

  • Проверенный
  • ***
  • Сообщений: 139
Re: Билет 12. Спец по платформе V8
« Ответ #88 : Февраль 02, 2017, 04:10:09 am »
erdem.badluev, а зачем условие по периоду регистрации?

Цитировать
         |ИЗ
         |   РегистрРасчета.Начисления.ДанныеГрафика(
         |         Регистратор = &Регистратор
         |            И ПериодРегистрации = &ПериодРегистрации) КАК НачисленияДанныеГрафика
Цитировать
      Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(Ссылка.Дата));
      Запрос.УстановитьПараметр("Регистратор", Ссылка);

Индекс у регистров расчета построен по регистратору и периоду регистрации, так быстрее сработает.

erdem.badluev

  • Проверенный
  • ***
  • Сообщений: 139
Re: Билет 12. Спец по платформе V8
« Ответ #89 : Февраль 02, 2017, 04:42:54 am »
Зачем в компенсации со штрафом извращаться, ведь в условии задачи сказано
Цитировать
Компенсация начисляется только в случае отсутствия невыходов, однако контролировать программным образом данное обстоятельство не требуется.
Вид расчета "Выработка", для хранения времени это совсем уже извращение, так делать нельзя.
Штраф в допначислениях, по-моему, тоже ни туда ни сюда, лучше в основных сделать, там данные графика получать нужно, а в допначислениях данные о количестве дней не получить и настроена зависимость от базы, которая не нужна штрафу
Я сделал зависимость по базе у компенсации от штрафа для определения был штраф или нет, чтобы потом его в отчет вытащить. Штраф зависит от НеВыхода, который в результат записывает количество дней, а штраф умножает это количество дней не выхода на 5000.
В отчете галку БылШтраф правильней было бы устанавливать в запросе по наличию начисления Штраф.
Вид расчет Выработка сделан для ввода тех самых 1000 часов.
Логика была такая: если мы проверяем наездил ли сотрудник в текущем месяце начисления более 1000 часов без учета ранее наезженного (без накопления остатков), тогда нужен оборотный регистр для учета тех самых часов. Но, зачем это делать на оборотном регистре, если регистр расчета прекрасно с этой задачей справится: вводим Выработку, обороты по ней по текущему месяцу начисления получим через базу для компенсации, что и требовалось нам для вывода сколько было наезжено в отчете.

Это решение с оговоркой: мы проверяем количество наезженных часов за текущий месяц начисления без накопления часов за предыдущие периоды.

Вопрос у меня такой: моя реализация с этой оговоркой на регистрах расчета правильна ли, или всё же нужно использовать оборотный регистр? И в требованиях одна из ошибок: "Решение задач накопления на регистре расчета" - но в этом решении выработка не накапливается, а проверяются обороты за конкретный период расчета.

Сейчас думаю, что всё же решение не верное  :( у SAE на оборотном регистре сделано.