При проведении документ формирует движения в РС «ПлановыеНачисления». Модуль объекта: Перем Сутки Процедура Провести(Стр,ДатаН,ДатаК)


Рабочие специализированной организации ЗАО «Особые Работы» трудятся по графику «две недели через две недели».
Для обеспечения непрерывности производственного процесса организовано две бригады. Первая бригада две недели работает без перерыва на выходные и праздничные дни, затем две недели отдыхает; вторая бригада – наоборот: две недели отдыхает, затем работает. Работники не могут переходить из одной бригады в другую.
Оплата труда рабочих производится исходя из дневной тарифной ставки за отработанные дни.
Отдельные работы носят особый характер. За их выполнение работникам выплачивается надбавка за сложность. Она установлена в процентах от дневной тарифной ставки в зависимости от «стажа» выполнения работником особых работ в организации (на начало месяца):

До 3 месяцев
5

От 3 до 15 месяцев
10

Свыше 15 месяцев
15


Не позднее 25 числа месяца в организации составляется график выполнения особых работ на следующий месяц. В нем по каждому работнику отмечаются календарные дни выполнения особых работ (отдельные колонки табличной части).
За дни болезни и иные отклонения, приходящиеся на дни выполнения особых работ по графику, надбавка за сложность не начисляется, т.е. она выплачивается за те дни, когда работник фактически выполнял особые работы.

Необходимо:

1). Создать документ «График выполнения особых работ» для регистрации графика выполнения работниками особых работ с табличной частью, в которой дни выполнения особых работ отмечаются «флажком» в соответствующей колонке.
2). Реализовать автоматизированный учет общего количества дней выполнения особых работ, определение размера процентной надбавки и расчет надбавки за сложность, а также учет надбавки для целей налогообложения (НДФЛ, ЕСН, взносами в ПФР и ФСС РФ (НС и ПЗ), налогом на прибыль). Учесть, что конфигурация может внедряться в действующей организации.
3) Создать настраиваемый (с использования схемы компоновки данных) отчет «Вознаграждения работников», позволяющий за произвольное количество расчетных периодов получать информацию следующего характера (форма отчета должна соответствовать образцу):
Отчет «Вознаграждения работников»
Работник
<Период 1>
<Период 2>


Начислено по окладу
Надбавка за сложность
Начислено по окладу
Надбавка за сложность

Бригада 1 - всего





<Работник>











Бригада 2 – всего





<Работник>











<Период 1>, <Период 2> и т.д. – месяц и год, к которому относятся данные, например, январь 2008, февраль 2008 и т.д.
4) Создать в интерфейсе «Полный» отдельное подменю «Выполнение особых работ» для работы с добавленными объектами.
5) Представленная к защите конфигурация должна содержать, как минимум, данные о начислениях за несколько расчетных периодов не менее чем для 2-х работников в каждой бригаде.






Заполнить производственный календарь. Создать и заполнить 2 графика работы (тип графика – сменный, точка отсчета – 01.01.10) с «зеркальным» заполнением.



Создать организацию ЗАО "Особые работы" и 2 подразделения – Бригада1 и Бригада2.

Создать приемы на работу сотрудников, вид расчета – «оплата по дневному тарифу», 500 руб.

Вводим новый предопределенный элемент в справочнике «Показатели схем мотивации» - СтажОсобыхРабот (в конфигураторе).



В справочник «Основные начисления» добавляем вид расчета «Надбавка за сложность», зависимое первого уровня, произвольная формула расчета. Заполнить базовые, вытесняющие начисления.
В справочник «Виды стажа» добавляем новый элемент «Стаж особых работ» и назначаем его физ. лицам.


В конфигураторе открываем модуль формы расчета из плана вида расчетов «Основные начисления», редактируем его, чтобы для нашего вида расчета был доступен реквизит «Вид стажа».

Процедура ОпределитьДоступностьРеквизитов()

// используем для показа одной из закладок Прочее
РасчетИмеетБазовыеНачисления = ВидРасчетаИмеетБазовыеНачисления();

// для предопределенного элемента справочника «Показатели схем мотивации»
// включаем доступность реквизита «Вид стажа»
Если Не ЭтоРасчетОтСтажа Тогда
Для Каждого СтрокаПоказателей Из Показатели Цикл
Показатель = СтрокаПоказателей.Показатель;
Если Показатель = Справочники.ПоказателиСхемМотивации.
СтажОсобыхРабот Тогда
ЭтоРасчетОтСтажа = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;


Описываем формулу расчета следующим образом:


Создаем новый документ «ГрафикВыполненияОсобыхРабот»

Реквизиты:
Организация
ПодразделениеОрганизации
ПериодРегистрации
ВидРасчета
Табличная часть «РаботникиОрганизаций»
Сотрудник
ФизЛицо
День1 – День31 (Булево)


При проведении документ формирует движения в РС «ПлановыеНачисления».
Модуль объекта:

Перем Сутки;
Процедура Провести(Стр,ДатаН,ДатаК)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ПлановыеНачисленияРаботниковОрганизаций
Движение = Движения.ПлановыеНачисленияРаботниковОрганизаций.Добавить();
Движение.Период = ДатаН;
Движение.Сотрудник = Стр.Сотрудник;
Движение.Организация = Организация;
Движение.ВидРасчетаИзмерение = ВидРасчета;
Движение.ВидРасчета = ВидРасчета;
Движение.Действие = Перечисления.ВидыДействияСНачислением.Начать;
Движение.ПериодЗавершения = ДатаК+Сутки;
Движение.ДействиеЗавершения = Перечисления.ВидыДействияСНачислением. Прекратить;
//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, Режим)
Если НЕ ЗначениеЗаполнено(Организация) Тогда Предупреждение("Не задана Организация");
Возврат;
Отказ=Истина;
КонецЕсли;

Для Каждого ТекСтр Из ГрафикРаботы Цикл
Если НЕ ЗначениеЗаполнено(ТекСтр.Сотрудник) Тогда
Предупреждение("Не задан Сотрудник");
Продолжить;
КонецЕсли;
ЗначениеПред = истина;
Для Колонка = 1 По День(КонецМесяца(ПериодРегистрации)) Цикл
Если Колонка = 1 Тогда //Первый день
Если ТекСтр["День"+Колонка] = Истина Тогда
ДатаН = НачалоМесяца(ПериодРегистрации);
КонецЕсли;
ИначеЕсли Колонка = День(КонецМесяца(ПериодРегистрации)) Тогда //Последний день
Если ЗначениеПред = истина И ТекСтр["День"+Колонка] = ложь Тогда
ДатаК = НачалоМесяца(ПериодРегистрации)+(Колонка-2)*Сутки;
Провести(ТекСтр,ДатаН,ДатаК);
ИначеЕсли ЗначениеПред = Ложь И ТекСтр["День"+Колонка] = Истина Тогда
ДатаН = НачалоМесяца(ПериодРегистрации)+(Колонка-1)*Сутки;
ДатаК = ДатаН;
Провести(ТекСтр,ДатаН,ДатаК);
ИначеЕсли ЗначениеПред = Истина И ТекСтр["День"+Колонка] = Истина Тогда
ДатаК = НачалоМесяца(ПериодРегистрации)+(Колонка-1)*Сутки;
Провести(ТекСтр,ДатаН,ДатаК);
КонецЕсли;
Иначе;

Если ЗначениеПред = истина И ТекСтр["День"+Колонка] = ложь Тогда
ДатаК = НачалоМесяца(ПериодРегистрации)+(Колонка-2)*Сутки;
Провести(ТекСтр,ДатаН,ДатаК);
ИначеЕсли ЗначениеПред = Ложь И ТекСтр["День"+Колонка] = Истина Тогда
ДатаН = НачалоМесяца(ПериодРегистрации)+(Колонка-1)*Сутки;
КонецЕсли;
КонецЕсли;

ЗначениеПред = ТекСтр["День"+Колонка];

КонецЦикла;
КонецЦикла;

КонецПроцедуры
Сутки = 86400;



Изменяем общий модуль «ПроведениеРасчетовПереопределяемый»

Функция ПолучитьСтруктуруНеобходимыхДанных(МассивСпособовРасчета, МассивПоказателей) Экспорт


НеобходимыеДанные.Вставить("ДоходыОблагаемыеЕСН", Ложь);

НеобходимыеДанные.Вставить("СтажОсобыхРабот", Ложь);

...
НеобходимыеДанные.ВсегоОтработаноВремени = НеобходимыеДанные.ВсегоОтработаноВремени Или Показатель = Справочники.ПоказателиСхемМотивации.ОтработаноВремениВДнях Или Показатель = Справочники.ПоказателиСхемМотивации.ОтработаноВремениВЧасах;

НеобходимыеДанные.СтажОсобыхРабот = НеобходимыеДанные.СтажОсобыхРабот Или Показатель = Справочники.ПоказателиСхемМотивации.СтажОсобыхРабот;


Функция ПолучитьДанныеДляРасчета(ИмяРегистра, КатегорияРасчета,
НеобходимыеДанные, Регистратор, Организация, ПериодРегистрации,
Перерасчет = Ложь, Физлица = Неопределено, КомментироватьРасчет = Ложь, ФормаКомментариев = НеОпределено) Экспорт



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


// Конец определения текстов вложенных запросов
/////////////////////////////////////////////////////////////////////

Запрос = Новый Запрос();
НеобходимаБаза = НеобходимыеДанные.База;
НеобходимГрафик = НеобходимыеДанные.НормаВремени ИЛИ НеобходимыеДанные.ОтработаноВремени ИЛИ НеобходимыеДанные.НормаВремениЗаМесяц;




ТекстЗапроса = ТекстЗапроса + "
|ИЗ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций Как Основной";

Если НеобходимыеДанные.СтажОсобыхРабот Тогда
Запрос.Текст = СтажОсобыхРаботТекст;
Запрос.Выполнить();

ТекстЗапроса = ТекстЗапроса + "
|ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОСтажеОсобыхРабот КАК ДанныеОСтажеОсобыхРабот
|ПО Основной.НомерСтроки = ДанныеОСтажеОсобыхРабот.НомерСтроки";
КонецЕсли;


Функция ПолучитьТекстПоказателя(НеобходимыеДанные, ВидПВР, Предопределенный = Ложь, КомментироватьРасчет)


МассивСтажей.Количество() > 0 или

НеобходимыеДанные.СтажОсобыхРабот или

НеобходимыеДанные.База Тогда






Показатель1Текст = Показатель1Текст +
?(НеобходимыеДанные.СтажОсобыхРабот, "
| КОГДА Показатели.Показатель1 = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.СтажОсобыхРабот)
| ТОГДА ЕСТЬNULL(ДанныеОСтажеОсобыхРабот.СтажОР,0)", "");

Показатель1Текст = Показатель1Текст +
?(НеобходимыеДанные.База, "
| КОГДА Показатели.Показатель1 = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.РасчетнаяБаза)
| ТОГДА ЕСТЬNULL(База.РезультатБаза,0)", "");






Отчет «Вознаграждения работников» (СКД)

Добавляю набор данных – запрос.

ВЫБРАТЬ
ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации КАК Период,
ОсновныеНачисленияРаботниковОрганизаций.Сотрудник,
ОсновныеНачисленияРаботниковОрганизаций.ПодразделениеОрганизации КАК Подразделение,
ВЫБОР
КОГДА ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифДневной)
ТОГДА ОсновныеНачисленияРаботниковОрганизаций.Результат
ИНАЧЕ 0
КОНЕЦ КАК НачисленоПоОкладу,
ВЫБОР
КОГДА ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = &ВидРасчета
ТОГДА ОсновныеНачисленияРаботниковОрганизаций.Результат
ИНАЧЕ 0
КОНЕЦ КАК НадбавкаЗаСложность
ИЗ
РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
ГДЕ
ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации МЕЖДУ &ДатаНач И &ДатаКон
И (ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ТарифДневной)
ИЛИ ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета = &ВидРасчета)




Рисунок 4Рисунок 115

Приложенные файлы

  • doc 7769405
    Размер файла: 223 kB Загрузок: 0

Добавить комментарий