# Форум 1С > Конфигурирование, программирование 1С - Предприятие >  Расчетные задачи

## Дмитрий357

Добрый день! Не могу решить расчетные задачи в общем и по частям. Текст задания: Список сотрудников хранится в справочнике "Физические лица". Каждому сотруднику полагается оклад, рассчитываемый как индивидуальная месячная ставка оклада, умноженная на количество отработанных дней и делённая на количество рабочих дней в месяце.

Сотрудникам могут выплачиваться разовые премии (подарки) произвольной величины. Расчётчик просто указывает размер подарка для данного сотрудника в документе начисления зарплаты.

Также сотрудникам выплачивается премия, зависящая от величины основных выплат (оклад + подарок) за прошлый месяц и вычисляемая как определённый процент от этой суммы. Величина процента указывается в документе начисления зарплаты.

Первую часть задания (оклад) я решил. Вот код:


```
    Движения.ОсновныеНачисления.Записывать=Истина;
    Для Каждого ТекСтрокаНачисления Из Начисления Цикл
        Движение=Движения.ОсновныеНачисления.Добавить();
        Движение.Сторно=Ложь;
        ЗаполнитьЗначенияСвойств (Движение, ТекСтрокаНачисления);
        Движение.ВидРасчета=ТекСтрокаНачисления.ВидНачисления;
        Движение.ПериодДействияНачало=ТекСтрокаНачисления.ДатаНачала;
        Движение.ПериодДействияКонец=КонецДня (ТекСтрокаНачисления.ДатаОкончания);
        Движение.ПериодРегистрации=Дата;
    КонецЦикла;
    Движения.ОсновныеНачисления.Записать();
    
         //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    //Расчет Оклада
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    ОсновныеНачисленияДанныеГрафика.Сотрудник КАК Сотрудник,
        |    ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки,
        |    ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеДниПериодДействия, 0) КАК ПланДни,
        |    ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеДниФактическийПериодДействия, 0) КАК ФактДни
        |ПОМЕСТИТЬ ВТ_ДанныеГрафика
        |ИЗ
        |    РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
        |            Регистратор = &Ссылка
        |                И ВидРасчета = &Оклад) КАК ОсновныеНачисленияДанныеГрафика
        |
        |ИНДЕКСИРОВАТЬ ПО
        |    Сотрудник
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    ВТ_ДанныеГрафика.НомерСтроки КАК НомерСтроки,
        |    ЕСТЬNULL(ОкладыСотрудниковСрезПоследних.Оклад, 0) КАК Оклад,
        |    ВТ_ДанныеГрафика.ПланДни КАК ПланДни,
        |    ВТ_ДанныеГрафика.ФактДни КАК ФактДни
        |ИЗ
        |    ВТ_ДанныеГрафика КАК ВТ_ДанныеГрафика
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыСотрудников.СрезПоследних(
        |                &Дата,
        |                Сотрудник В
        |                    (ВЫБРАТЬ
        |                        ВТ_ДанныеГрафика.Сотрудник КАК Сотрудник
        |                    ИЗ
        |                        ВТ_ДанныеГрафика КАК ВТ_ДанныеГрафика)) КАК ОкладыСотрудниковСрезПоследних
        |        ПО ВТ_ДанныеГрафика.Сотрудник = ОкладыСотрудниковСрезПоследних.Сотрудник";
    
    Запрос.УстановитьПараметр("Дата", НачалоМесяца(Дата));
    Запрос.УстановитьПараметр("Оклад", ПланыВидовРасчета.ОсновныеНачисления.Оклад);
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Для Каждого СтрДвижение Из Движения.ОсновныеНачисления Цикл
            Если ВыборкаДетальныеЗаписи.Оклад=0 Тогда 
                Сообщить ("Оклад для сотрудника "+ВыборкаДетальныеЗаписи.Сотрудник+" не задан");
                Отказ=Истина;
            КонецЕсли;
        ВыборкаДетальныеЗаписи.Сбросить();
        ВыборкаДетальныеЗаписи.НайтиСледующий(СтрДвижение.НомерСтроки, "НомерСтроки");
        СтрДвижение.Факт=ВыборкаДетальныеЗаписи.ФактДни;
        СтрДвижение.Результат=ВыборкаДетальныеЗаписи.ФактДни/ВыборкаДетальныеЗаписи.ПланДни*ВыборкаДетальныеЗаписи.Оклад;
    КонецЦикла;
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    Движения.ОсновныеНачисления.Записать(,Истина);
```

Остальные части очень сложно идут. Либо неправильно идет расчет (выдает неправильное значение премии, не складывая с окладом размер подарка), либо возникают ошибки в коде. Подарок у меня является основным начислениям. Премия зависит от оклада и подарка, все настроено в планах видов расчета. Версия программы 1С:Предприятие 8.3, учебная версия (8.3.14.169

----------

klugg (30.09.2022)

----------

