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

Подарок (разовая премия) не ложится в базу

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

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

Дмитрий357

Добрый день! Задача посчитать премию, которая равна произведению процента, задаваемым пользователем, и суммы оклада (основное начисление) и подарка (допначисление, задается пользователем вручную в документе начисление зарплаты). Не считает правильно поскольку в запросе при проверке точкой останова результатбаза по допначсилениям (т.е. по подарку) равен нулю.
Движения.ДополнительныеНачисления.Записывать=Истина;
    Для Каждого ТекСтрокаНачисленияДоп Из НачисленияДоп Цикл
        Движение2=Движения.ДополнительныеНачисления.Добавить();
        Движение2.Сторно=Ложь;
        ЗаполнитьЗначенияСвойств(Движение2, ТекСтрокаНачисленияДоп);
        Движение2.ВидРасчета=ТекСтрокаНачисленияДоп.ВидНачисления;
        Движение2.ПериодРегистрации=Дата;
        Если Движение2.ВидРасчета=ПланыВидовРасчета.ДополнительныеНачисления.Премия ИЛИ Движение2.ВидРасчета=ПланыВидовРасчета.ДополнительныеНачисления.Подарок Тогда
            ПрошлыйМесяц=ДобавитьМесяц(Дата, -1);
            Движение2.БазовыйПериодНачало=НачалоМесяца(ПрошлыйМесяц);
            Движение2.БазовыйПериодКонец=КонецМесяца(ПрошлыйМесяц);
        Иначе
            Движение2.БазовыйПериодНачало=НачалоМесяца(Дата);
            Движение2.БазовыйПериодКонец=КонецМесяца(Дата);
        КонецЕсли;
        Если Движение2.ВидРасчета=ПланыВидовРасчета.ДополнительныеНачисления.Подарок Тогда
            Движение2.Результат=ТекСтрокаНачисленияДоп.Размер;
        КонецЕсли;
    КонецЦикла;
    Движения.ДополнительныеНачисления.Записать();
   

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


   
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   
    Движения.ДополнительныеНачисления.Записать();

Дмитрий357

Задача для настоящих 1с программистов

Теги:

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

Рейтинг@Mail.ru

Поиск