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

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

```1c
    | Начисления.ФизическоеЛицо.Наименование = &ФИОСотрудника
```

надо было

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

и

присвоение параметра было не правильного типа:

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

надо было

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

Если кому интересно))
Всех благодарю за помощь!
---
В документе «ДоходВНатуральнойФорме» подменить процедуру формы документа «ОбработатьИзменениеПоказателейНаСервере». Алгоритм : для вида расчета «Оплата питания»
Сумма*30% на первые три месяца начисления этого вида расчета. После трех месяцев использования
компенсации за питание сотрудник начинает оплачивать питание в полном объеме.
Может лучше отдельное начисление сделать, с показателями для расчета.
---
Добрый день! Вы не могли бы поделиться всем кодом?
Я новичок и еще не разобралась с расширениями в 1с. А по учебному материалу не удается разобраться
---
Добрый день, у Вас получилось решить задачу?
---
Да, так и есть.
Как я понял теперь надо проверять значение поля формы "Вид дохода" - "Оплата питания" или нет...
и еще, видимо, надо запрос делать по регистру расчета по каждому сотруднику, было ли у него начисление с видом дохода оплата питания в промежутке предыдущих 3х месяцев...
---
Как я понял теперь надо проверять значение поля формы "Вид дохода" - "Оплата питания" или нет...
и еще, видимо, надо запрос делать по регистру расчета по каждому сотруднику, было ли у него начисление с видом дохода оплата питания в промежутке предыдущих 3х месяцев...
Нет, лучше проверять не документ проверять, а начисление у сотрудника.
---
Так начисления еще нет. Происходит только заполнение документа.
Короче надо создать начисление новое, с заполнением фиксированной суммой. Потом вводим сумму в кнопке "Заполнить показатели". Если вид начисления выбран "Оплата питания" то сумму, которую ввели в кнопке "Заполнить показатели" умножаем на 30%. Как-то так..
Теперь надо запрос наваять
---
"Заполнить показатели". Если вид начисления выбран "Оплата питания" то сумму, которую ввели в кнопке "Заполнить показатели" умножаем на 30%. Как-то так..
Теперь надо запрос наваять
Нужно проверить есть ли расчеты по этому сотруднику и виду начислению за прошлые периоды..
---
Зачем вводить какую-то сумму, которую потом нужно умножать на 30%? Почему нельзя сразу ввести сумму, уже умноженную на 30%? В чем принципиальность?
---
Таково условие задачи, я ни при чем

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

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

    НачПер = ДатаПолученияДохода - 7603200;
    Запрос.УстановитьПараметр("ФИОСотрудника", ФИОСотрудник);
    Запрос.УстановитьПараметр("ДатаНачалаПериода", НачПер);
    Запрос.УстановитьПараметр("ВидНачисления", "Оплата питания");
```

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

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

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

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

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

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

    НачПер = ДатаПолученияДохода - 7603200;
    Запрос.УстановитьПараметр("ФИОСотрудника", ФИОСотрудник);
    Запрос.УстановитьПараметр("ДатаНачалаПериода", НачПер);
    //Запрос.УстановитьПараметр("ВидНачисления", Объект.Начисление.Наименование);
    ТестПеременная = ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Оплата питания");
    Запрос.УстановитьПараметр("ВидНачисления", ТестПеременная);

    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();

    Если Выборка.Следующий() Тогда
    Возврат Истина;
    Иначе
    Возврат Ложь;
    КонецЕсли;
```

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

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

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

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

Запрос.УстановитьПараметр("ВидНачисления", ПланыВидовРасчета.Начисления.НайтиПоКоду("Оплата питания"));
Тоже не работает((
---
НатиПоНаименованию.
Но у вас же в документе этот вид начисления в шапке есть - можете оттуда брать.
---
В общем у меня все получилось:
Ошибка была в тексте запроса:

```1c
    | Начисления.ФизическоеЛицо.Наименование = &ФИОСотрудника
```

надо было

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

и

присвоение параметра было не правильного типа:

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

надо было

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

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