Расчетные задачи
X

Привет дорогой друг

Наш сайт существует и развиваетется за счет рекламы. Пожалуйста, отключите блокировку рекламы AdBlock или подобное, для нашего сайта. Спасибо!
Показано с 1 по 1 из 1
  1. #1
    Гость форума

    Регистрация
    18.11.2021
    Сообщений
    3
    Сказал(а) спасибо
    0
    Поблагодарили 1 раз в 1 сообщении

    По умолчанию Расчетные задачи

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

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

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

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

  2. Пользователь сказал cпасибо:

    klugg (30.09.2022)

Похожие темы

  1. Расчетные листки
    от postlogic в разделе Конфигурирование, программирование 1С - Предприятие
    Ответов: 2
    Последнее сообщение: 06.05.2014, 07:31
  2. расчетные листки
    от postlogic в разделе Общие вопросы по 1С - Бухгалтерии
    Ответов: 0
    Последнее сообщение: 12.03.2014, 03:24

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •