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

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

Автор Дмитрий357, 17 ноя 2021, 16:32

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

Дмитрий357

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

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

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

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

//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

//Расчет Оклада
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияДанныеГрафика.Сотрудник КАК Сотрудник,
| ОсновныеНачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеДниПериодДействия, 0) КАК ПланДни,
| ЕСТЬNULL(ОсновныеНачисленияДанныеГрафика.ЗначениеДниФактическийПериодДействия, 0) КАК ФактДни
|ПОМЕСТИТЬ ВТ_ДанныеГрафика
|ИЗ
| РегистрРасчета.ОсновныеНачисления.ДанныеГрафика(
| Регистратор = &Ссылка
| И ВидРасчета = &Оклад) КАК ОсновныеНачисленияДанныеГрафика
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_ДанныеГрафика.НомерСтроки КАК НомерСтроки,
| ЕСТЬNULL(ОкладыСотрудниковСрезПоследних.Оклад, 0) КАК Оклад,
| ВТ_ДанныеГрафика.ПланДни КАК ПланДни,
| ВТ_ДанныеГрафика.ФактДни КАК ФактДни
|ИЗ
| ВТ_ДанныеГрафика КАК ВТ_ДанныеГрафика
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыСотрудников.СрезПоследних(
| &Дата,
| Сотрудник В
| (ВЫБРАТЬ
| ВТ_ДанныеГрафика.Сотрудник КАК Сотрудник
| ИЗ
| ВТ_ДанныеГрафика КАК ВТ_ДанныеГрафика)) КАК ОкладыСотрудниковСрезПоследних
| ПО ВТ_ДанныеГрафика.Сотрудник = ОкладыСотрудниковСрезПоследних.Сотрудник";

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

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

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

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

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

Дмитрий357

Могу скинуть базу

Теги:

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

Рейтинг@Mail.ru

Поиск