![]() |
|
Алгоритм. Оклады | ☑ | ||
---|---|---|---|---|
0
wwwqwert2014
29.06.14
✎
20:14
|
Никак не могу придумать нормальный алгоритм. Постоянно ерунда какая-то получается. Не хочется изобретать велосипед. Можете подсказать как бы вы правильно и рационально реализовали данную задачу.
Необходимо начислять оклад документом начислениеЗарплаты. в документе могут быть данные за разные отчетные периоды. Значение оклада берётся из РС. То есть например, сотруднику Бельдыев начисляется оклад за период с 01.04 по 30.04, а сотруднику Васина за период 01.05 - 31.05. Это условие на позволяет на РС в запросе наложить условия начала и конца периода. Очень важная деталь. Значения окладов могут меньяться каждый день. Это нужно учесть при расчете зарплаты. Я кое-как написал алгоритм, но мне кажется, что это Велосипед. Подскажите, как бы вы написали. Спрашиваю с той целью, чтобы сэкономить время на экзамене: Процедура ОбработкаПроведения(Отказ, РежимПроведения) // Вставить содержимое обработчика. Движения.ОсновначНачисления.Записывать = Истина; //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НачислениеЗарплатыОсновныеНачисления.Сотрудник, | НачислениеЗарплатыОсновныеНачисления.Подразделение, | НачислениеЗарплатыОсновныеНачисления.ВидРасчета, | НачислениеЗарплатыОсновныеНачисления.ДатаНачала, | НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, | НачислениеЗарплатыОсновныеНачисления.График |ПОМЕСТИТЬ ВТ_ТЧОклад |ИЗ | Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления |ГДЕ | НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка | И НачислениеЗарплатыОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Оклад) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ_ТЧ.Сотрудник КАК Сотрудник, | ВТ_ТЧ.Подразделение КАК Подразделение, | ВТ_ТЧ.ВидРасчета, | ВТ_ТЧ.ДатаНачала, | ВТ_ТЧ.ДатаОкончания, | ЕСТЬNULL(СведенияОСотрудниках.Оклад, 0) КАК Оклад, | СведенияОСотрудниках.Период, | ВТ_ТЧ.График |ИЗ | ВТ_ТЧОклад КАК ВТ_ТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСотрудниках КАК СведенияОСотрудниках | ПО ВТ_ТЧ.Сотрудник = СведенияОСотрудниках.Сотрудник | И ВТ_ТЧ.Подразделение = СведенияОСотрудниках.Подразделение |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | НачислениеЗарплатыОсновныеНачисления.Сотрудник, | НачислениеЗарплатыОсновныеНачисления.Подразделение, | НачислениеЗарплатыОсновныеНачисления.ВидРасчета, | НачислениеЗарплатыОсновныеНачисления.ДатаНачала, | НачислениеЗарплатыОсновныеНачисления.ДатаОкончания, | НачислениеЗарплатыОсновныеНачисления.Размер, | НачислениеЗарплатыОсновныеНачисления.График |ИЗ | Документ.НачислениеЗарплаты.ОсновныеНачисления КАК НачислениеЗарплатыОсновныеНачисления |ГДЕ | НачислениеЗарплатыОсновныеНачисления.Ссылка = &Ссылка | И НачислениеЗарплатыОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисления.Командировка) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Графики.Ссылка КАК ГрафикПятидневка |ИЗ | Справочник.Графики КАК Графики |ГДЕ | Графики.Наименование ПОДОБНО ""Пятидневка"""; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.ВыполнитьПакет(); ГрафикПятидневкаВыборка = РезультатЗапроса[3].Выбрать(); Если ГрафикПятидневкаВыборка.Следующий() Тогда ГрафикПятидневка = ГрафикПятидневкаВыборка.ГрафикПятидневка; КонецЕсли; ТЗОклад = РезультатЗапроса[1].Выгрузить(); Сч = 0; КоличествоЭлементов = ТЗОклад.Количество(); Пока Сч < КоличествоЭлементов Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи Строка = ТЗОклад[Сч]; ПредыдущаяСтрока = Новый Структура("Сотрудник, Подрразделение"); СледующаяСтрока = Новый Структура("Сотрудник, Подрразделение"); Попытка ПредыдущаяСтрока = ТЗОклад[Сч-1]; Исключение КонецПопытки; Попытка СледующаяСтрока = ТЗОклад[Сч+1]; Исключение КонецПопытки; Движение = Движения.ОсновначНачисления.Добавить(); Движение.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад; Движение.График = Строка.График; Движение.ПериодДействияНачало = Строка.ДатаНачала; Движение.ПериодДействияКонец = КонецДня(Строка.ДатаОкончания); Если ПредыдущаяСтрока.Сотрудник = Строка.Сотрудник И ПредыдущаяСтрока.Подразделение = Строка.Подразделение Тогда Если Строка.Период > Строка.ДатаНачала Тогда Движение.ПериодДействияНачало = Строка.Период; КонецЕсли; КонецЕсли; Если СледующаяСтрока.Сотрудник = Строка.Сотрудник И СледующаяСтрока.Подразделение = Строка.Подразделение Тогда Если СледующаяСтрока.Период < Строка.ДатаОкончания Тогда Движение.ПериодДействияКонец = СледующаяСтрока.Период-1; КонецЕсли; КонецЕсли; Движение.ПериодРегистрации = Строка.ДатаНачала; Движение.Подразделение = Строка.Подразделение; Движение.Регистратор = Ссылка; Движение.Сотрудник = Строка.Сотрудник; Движение.Размер = Строка.Оклад; Сч = Сч + 1; КонецЦикла; ТЗКомандировка = РезультатЗапроса[2].Выгрузить(); Для Каждого Строка ИЗ ТЗКомандировка Цикл Движение = Движения.ОсновначНачисления.Добавить(); Движение.БазовыйПериодНачало = НачалоМесяца(ДобавитьМесяц(Строка.ДатаНАчала, -2)); Движение.БазовыйПериодКонец = НАчалоМЕсяца(Строка.ДатаНачала) - 1; Движение.ПериодДействияНачало = Строка.ДатаНачала; Движение.ПериодДействияКонец = КонецДня(Строка.ДатаОкончания); Движение.ПериодРегистрации = Строка.ДатаНачала; Движение.Регистратор = Ссылка; Движение.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Командировка; Движение.Сотрудник = Строка.Сотрудник; Движение.Подразделение = Строка.Подразделение; Движение.Сторно = Ложь; Движение.График = ГрафикПятидневка; КонецЦикла; Движения.ОсновначНачисления.Записать(); РассчитатьОсновныеНачисления(Движения.ОсновначНачисления, Ссылка); КонецПроцедуры |
|||
1
wwwqwert2014
29.06.14
✎
20:14
|
полное условие задачи:
Начисление зарплаты сотрудникам предприятия осуществляется ежемесячно с использованием метода отклонений. Каждый сотрудник может работать одновременно в нескольких подразделениях компании, то есть совместительство допускается. Все сотрудники работают по пятидневному графику работы, однако в решении необходимо предусмотреть возможность работы по нескольким различным графикам. Сотрудники предприятия получают оплату по окладу пропорционально отработанному времени в часах. Часовая ставка рассчитывается как начальное значение оклада, деленное на количество рабочих часов в том же периоде, что и фактически отработанные часы. Первоначальное значение оклада может изменяться не чаще, чем один раз в день, но берется на начало расчетного периода. В информационной базе необходимо хранить историю его изменения. По мере необходимости любой сотрудник может быть отправлен в командировку. В этом случае начисление по окладу не происходит. Часы, проведенные в командировке, определяются по пятидневному графику работы. Часовая ставка для расчета командировки определяется как сумма всех начислений за два предыдущих месяца, деленная на количество отработанных часов в двух предыдущих месяцах. Следует учесть, что данные о командировке могут вводиться в систему задним числом. Механизм перерасчетов в рамках данной задачи использовать не надо. Ввод всех начислений происходит документом «Начисление зарплаты». Документ в расчетном периоде может быть один (сразу для всех видов расчета), а может быть несколько (по одному для каждого отдельного вида расчета). Считать, что все данные вводятся только в пределах одного месяца, например, можно указать начисление оклада с 10.01 по 31.01, а запись оклад: с 10.01 по 03.02 вводить нельзя. В одном документе могу быть данные за разные расчетные периоды. |
|||
2
wwwqwert2014
29.06.14
✎
20:20
|
вот сам dt-шник http://gfile.ru/aa7rO
|
|||
3
ИсчадиеADO
29.06.14
✎
20:22
|
сходи на форум Чистова, там все эти задачи решенные
|
|||
4
wwwqwert2014
29.06.14
✎
20:27
|
(3) на чистове прорешены все задачи из этого сборника, а прогрешанные актуальные билеты я не обнаружил. В сборнике пролистал все задачи, нет строчки:В одном документе могу быть данные за разные расчетные периоды. Ни в одной задаче
|
|||
5
wwwqwert2014
29.06.14
✎
20:27
|
задачи на экзамене малость видоизменены. А это видоизменение окаалось существенным и хотелось бы узнать кто как бы составил алгоритм
|
|||
6
ИсчадиеADO
29.06.14
✎
20:37
|
(4) были такие задания, не во всех конечно, но были
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |