Надо помочь разобраться в алгоритме поставленной задачи.

1. 22.02.21 20:24 Сейчас в теме
Всем привет! Есть такая задачка:
В документе «ДоходВНатуральнойФорме» подменить процедуру формы документа «ОбработатьИзменениеПоказателейНаСервере». Алгоритм : для вида расчета «Оплата питания»
Сумма*30% на первые три месяца начисления этого вида расчета. После трех месяцев использования
компенсации за питание сотрудник начинает оплачивать питание в полном объеме.

Подменить могу, вид расчета "Оплата питания" вытащу из ВидРасчетаИнфо = ЗарплатаКадрыРасширенныйПовтИсп.ПолучитьИнформациюОВидеРасчета(Объект.Начисление); в указанной процедуре. Но что дальше не соображу никак. Сам документ "ДоходВНатуральнойФорме делает разовое начисление. А в задачке , по сути, целый график выплат надо, или условия где-то прописать.
Я учусь, не судите строго плз...
Найденные решения
16. LittleBig 23.02.21 15:38 Сейчас в теме
В общем у меня все получилось:
Ошибка была в тексте запроса:
| Начисления.ФизическоеЛицо.Наименование = &ФИОСотрудника

надо было
| Начисления.Сотрудник = &ФИОСотрудника


и

присвоение параметра было не правильного типа:
Запрос.УстановитьПараметр("ВидНачисления", "Оплата питания");

надо было
Запрос.УстановитьПараметр("ВидНачисления", Объект.Начисление);


Если кому интересно))
Всех благодарю за помощь!
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. uriah 12 22.02.21 20:42 Сейчас в теме
(1)
В документе «ДоходВНатуральнойФорме» подменить процедуру формы документа «ОбработатьИзменениеПоказателейНаСервере». Алгоритм : для вида расчета «Оплата питания»
Сумма*30% на первые три месяца начисления этого вида расчета. После трех месяцев использования
компенсации за питание сотрудник начинает оплачивать питание в полном объеме.

Может лучше отдельное начисление сделать, с показателями для расчета.
3. LittleBig 22.02.21 21:45 Сейчас в теме
Да, так и есть.
Как я понял теперь надо проверять значение поля формы "Вид дохода" - "Оплата питания" или нет...
и еще, видимо, надо запрос делать по регистру расчета по каждому сотруднику, было ли у него начисление с видом дохода оплата питания в промежутке предыдущих 3х месяцев...
4. uriah 12 22.02.21 22:14 Сейчас в теме
(3)
Как я понял теперь надо проверять значение поля формы "Вид дохода" - "Оплата питания" или нет...
и еще, видимо, надо запрос делать по регистру расчета по каждому сотруднику, было ли у него начисление с видом дохода оплата питания в промежутке предыдущих 3х месяцев...

Нет, лучше проверять не документ проверять, а начисление у сотрудника.
5. LittleBig 22.02.21 23:44 Сейчас в теме
(4) Так начисления еще нет. Происходит только заполнение документа.
Короче надо создать начисление новое, с заполнением фиксированной суммой. Потом вводим сумму в кнопке "Заполнить показатели". Если вид начисления выбран "Оплата питания" то сумму, которую ввели в кнопке "Заполнить показатели" умножаем на 30%. Как-то так..
Теперь надо запрос наваять
6. uriah 12 23.02.21 00:23 Сейчас в теме
(5)
"Заполнить показатели". Если вид начисления выбран "Оплата питания" то сумму, которую ввели в кнопке "Заполнить показатели" умножаем на 30%. Как-то так..
Теперь надо запрос наваять

Нужно проверить есть ли расчеты по этому сотруднику и виду начислению за прошлые периоды..
7. user_2010 559 23.02.21 10:12 Сейчас в теме
(5) Зачем вводить какую-то сумму, которую потом нужно умножать на 30%? Почему нельзя сразу ввести сумму, уже умноженную на 30%? В чем принципиальность?
8. LittleBig 23.02.21 12:10 Сейчас в теме
(7) Таково условие задачи, я ни при чем

Почти доделал, но затык:

Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	Начисления.ФизическоеЛицо.Наименование КАК ФизическоеЛицоНаименование,
	               |	Начисления.Результат КАК Результат,
	               |	Начисления.ПериодРегистрации КАК ПериодРегистрации
	               |ИЗ
	               |	РегистрРасчета.Начисления КАК Начисления
	               |ГДЕ
	               |	Начисления.ФизическоеЛицо.Наименование = &ФИОСотрудника
	               |	И Начисления.ПериодРегистрации < &ДатаНачалаПериода
	               |	И Начисления.ВидРасчета = &ВидНачисления";
	
	НачПер = ДатаПолученияДохода - 7603200;
	Запрос.УстановитьПараметр("ФИОСотрудника", ФИОСотрудник);
	Запрос.УстановитьПараметр("ДатаНачалаПериода", НачПер);
	Запрос.УстановитьПараметр("ВидНачисления", "Оплата питания");
Показать


Что не так с этим запросом? Вид начисления какого типа должен быть?

В общем записи в регистре раньше даты точно есть. Но почему-то они не выводятся.((
9. papami 42 23.02.21 12:24 Сейчас в теме
(8) Создается вид начисления (если подобного еще нет), в формуле которого используется показатель, который вносится ежемесячно. В документе, который вводит показатель делается внешняя обработка заполнения. И уже в обработку заполнения заносите бизнес-логику расчета показателя. Путь этот показатель будет - как раз процент или конечная сумма. Не важно.
В документе начисления все заполнится как следует.
Не надо переписывать типовой функционал из-за подобных задач.

P.S.: Тип - план видов расчета
12. user_2010 559 23.02.21 13:33 Сейчас в теме
(8) Это тестовое задание? Или реальное для реальной базы?
Может быть стоит задать вопросы - это тоже будет говорить о вашей квалификации.... имхо
15. LittleBig 23.02.21 14:00 Сейчас в теме
(12) Это тестовое задание
Алгоритм следующий, надо с помощью запроса найти записи раньше чем 3 месяца относительно текущей даты. Если такие записи есть - значит начисление Оплата питания не начисляем, если таких записей нет - то начисляем (сумма * 30%)

Дата создаваемого документа 11.05.2016
Откатываем 3 месяца, смотрим в регистр начислений - записи есть:


Вот запрос, который должен выводить эти записи:

Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ
	               |	Начисления.ФизическоеЛицо.Наименование КАК ФизическоеЛицоНаименование,
	               |	Начисления.Результат КАК Результат,
	               |	Начисления.ПериодРегистрации КАК ПериодРегистрации
	               |ИЗ
	               |	РегистрРасчета.Начисления КАК Начисления
	               |ГДЕ
	               |	Начисления.ФизическоеЛицо.Наименование = &ФИОСотрудника
	               |	И Начисления.ПериодРегистрации < &ДатаНачалаПериода
	               |	И Начисления.ВидРасчета = &ВидНачисления";
	
	НачПер = ДатаПолученияДохода - 7603200;
	Запрос.УстановитьПараметр("ФИОСотрудника", ФИОСотрудник);
	Запрос.УстановитьПараметр("ДатаНачалаПериода", НачПер);
	//Запрос.УстановитьПараметр("ВидНачисления", Объект.Начисление.Наименование);
	ТестПеременная = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оплата питания");
	Запрос.УстановитьПараметр("ВидНачисления", ТестПеременная);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();
	
	Если Выборка.Следующий() Тогда
		Возврат Истина;
	Иначе
		Возврат Ложь;	
	КонецЕсли;
Показать

Если точкой останова посмотреть переменные, то получается что
НачПер = 13.02.2016
ФИОСотрудник = Ваньков ...
ТестПеременная = Оплата питания
Короче все ок, записи раньше даты есть. Но запрос их почему-то не выводит.
Почему?
10. LittleBig 23.02.21 12:51 Сейчас в теме
Как правильно написать эту строчку?:

Запрос.УстановитьПараметр("ВидНачисления", "Оплата питания");

Вместо "Оплата питания" ссылка должна быть?
Вот как ее записать?

ПланыВидовРасчета.Начисления...... а дальше?
11. LittleBig 23.02.21 13:08 Сейчас в теме
Запрос.УстановитьПараметр("ВидНачисления", ПланыВидовРасчета.Начисления.НайтиПоКоду("ОП"));

Запрос.УстановитьПараметр("ВидНачисления", ПланыВидовРасчета.Начисления.НайтиПоКоду("Оплата питания"));
Тоже не работает((
14. user_2010 559 23.02.21 13:55 Сейчас в теме
(11) НатиПоНаименованию.
Но у вас же в документе этот вид начисления в шапке есть - можете оттуда брать.
16. LittleBig 23.02.21 15:38 Сейчас в теме
В общем у меня все получилось:
Ошибка была в тексте запроса:
| Начисления.ФизическоеЛицо.Наименование = &ФИОСотрудника

надо было
| Начисления.Сотрудник = &ФИОСотрудника


и

присвоение параметра было не правильного типа:
Запрос.УстановитьПараметр("ВидНачисления", "Оплата питания");

надо было
Запрос.УстановитьПараметр("ВидНачисления", Объект.Начисление);


Если кому интересно))
Всех благодарю за помощь!
Оставьте свое сообщение
Вопросы с вознаграждением