Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 18:10

РезультатБаза не дает расчет

Автор Дмитрий357, 06 ноя 2021, 14:50

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

Дмитрий357

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

Дмитрий357


Дмитрий357


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск