@David138

Как вычилить вознаграждение мастеру за оказанные им услуги при проведении документа Оказание услуг?

Всем привет. Изучаю 1с по радченко и наткнулся на такую задачу после 14того занятия:

Необходимо доработать конфигурацию так, чтобы обеспечить расчет вознаграждения мастеру за оказанные им услуги при проведении документа «Оказание услуг». Вознаграждение высчитывается как процент от общей суммы, предоставленных по данному документу услуг (без учёта проданных товаров) и составляет:
5% сумма меньше 1 000 руб.
10% сумма от 1 000 до 5 000 руб.
15% сумма больше 5 000 руб.
Требуется разработать структуру данных для хранения накопленного вознаграждения.
Разработать отчет, позволяющий получить общие суммы вознаграждений по каждому мастеру за произвольно выбранный период.
Пример отчета:
Период: 01.01.2013 – 15.05.2013
Мастер Сумма
Иванов Иван 1000
Петров Пётр 1500

Как в обработчике посчитать вознаграждение мастеру за оказанные им услуги при проведении документа Оказание услуг? Ниже мой код:

// Регистр Вознаграждения    
		Сумма=0;
		Если ВыборкаДетальныеЗаписи.СуммаВДокументе < 1000 Тогда
			Сумма=(Сумма+ВыборкаДетальныеЗаписи.СуммаВДокументе)*0.05;
		ИначеЕсли ВыборкаДетальныеЗаписи.СуммаВДокументе >= 1000 И ВыборкаДетальныеЗаписи.СуммаВДокументе <= 5000 Тогда
			Сумма=(Сумма+ВыборкаДетальныеЗаписи.СуммаВДокументе)*0.1;
		Иначе  
			Сумма=(Сумма+ВыборкаДетальныеЗаписи.СуммаВДокументе)*0.15;
		КонецЕсли;  
		Движение = Движения.Вознаграждения.Добавить();
		Движение.Период = Дата;
		Движение.Мастер = Мастер;
		//Движение.Вознаграждение = ВыборкаДетальныеЗаписи.СуммаВДокументе;
		Движение.Сумма = ВыборкаДетальныеЗаписи.СуммаВДокументе;
  • Вопрос задан
  • 364 просмотра
Пригласить эксперта
Ответы на вопрос 3
@Materializator
На первый взгляд нормально.
Я бы завёл новую переменную, чтоб каждый раз ВыборкаДетальныеЗаписи.СуммаВДокументе не дёргать из базы.
Второе условие упростил бы, его первая часть всегда выполнится.
Ответ написан
Комментировать
@kalapanga
Не видя внутренностей Вашего документа, регистров и т.п., по этому вырванному куску кода ничего сказать нельзя.
Что такое "ВыборкаДетальныеЗаписи"? Почему Вы рассчитываете "Сумма" и нигде её не используете?
Видимо в документе есть какая-то табличная часть с товарами и услугами. Или две разные? Ну, допустим, одна общая. Тогда нужно пробежаться по ней (возможно ваша ВыборкаДетальныеЗаписи это оно и есть, но сейчас это непонятно совсем) и просуммировать стоимости услуг, а товары пропускать. По полученной сумме рассчитать вознаграждение мастера. И уже это рассчитанное вознаграждение записать в Ваш регистр.
Ответ написан
Комментировать
@Dementor
программист, архитектор, аналитик
Расчет суммы какой-то странный. Почему не сделать как написано в задании? Одно вознаграждение на один документ! Без всяких попыток рассчитать итоги за период - это пусть отчет делает.

Вознаграждение = СуммаДокумента * 
    ?(СуммаДокумента<1000, 0.05, ?(СуммаДокумента<=5000, 0.1, 0.15));
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы