gifts2017

Ремонт автотранспорта

Опубликовал Вячеслав Туев (qzaam) в раздел Программирование - Практика программирования

Реализован механизм начисления "Ремонт автотранспорта", если необходимо получить правильную норму дней для расчета среднего заработка

 Если сотрудник находится на ремонте хотя бы один день, то в расчете среднего заработка норма дней учитывается неверно

ВАЖНО!!! не предназначено для использования лицам не имеющим простейшего опыта конфигурирования.
За основу взят документ "Ввод сведений о плановых начислениях работников организации"
в документе добавляем движения в регистры накопления: ВзаиморасчетыСРаботникамиОрганизации
                                                                                         ЗарплатаЗаМесяцОрганизации
                                                                                         НДФЛСведенияОДоходах
                                                              регистр расчета: ОсновныеНачисленияРаботниковОрганизации

Далее в процедуре "ОбработкаПроведения" модуля объекта дописываем следующее:

ОбработкаКомментариев.ПоказатьСообщения();
выборка = новый таблицазначений;

Выборка = Ссылка.ОсновныеНачисления.Выгрузить();
для каждого стр из выборка цикл


Если Стр.ДатаДействияконец <> Дата(1, 1, 1) тогда


Запрос = новый запрос;
Запрос.Текст = "ВЫБРАТЬ
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчета,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Период,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Регистратор,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Валюта1,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель2,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Валюта2,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Организация,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ВидРасчетаИзмерение,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Действие,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения,
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ДатаНачалаСобытия
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&дата, ) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних
|ГДЕ
| ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник = &сотрудник";
Запрос.УстановитьПараметр("сотрудник",Стр.Сотрудник);
Запрос.УстановитьПараметр("Дата",Дата);
выбрать = Запрос.Выполнить();
Вборка=Выбрать.Выбрать();
Пока Вборка.Следующий() Цикл
Если (Вборка.ВидРасчета.наименование = "Ремонт автотранспорта") Тогда
ВидРасчета = Вборка.ВидРасчета;
Показатель = Вборка.показатель1;
КонецЕсли;

КонецЦикла;


РН = движения.НДФЛСведенияОДоходах.Добавить();

РН.Активность = Истина;
РН.Организация = Вборка.организация;

РН.Период=Стр.ДатаДействия;
РН.ПериодРегистрации=Стр.ДатаДействия;

РН.СуммаДохода =(((Стр.ДатаДействияКонец-Стр.ДатаДействия) /60/60/24)+1)*Стр.Показатель1;
рн.КодДохода = Стр.ВидРасчета.КодДоходаНДФЛ;
РН.ДатаПолученияДохода =НачалоМесяца(Стр.ДатаДействия);
РН.ФизЛицо=Вборка.сотрудник.физлицо;
РН.ОбособленноеПодразделение = Вборка.организация;
Рн.ПодразделениеОрганизации = Вборка.Сотрудник.подразделениеорганизации;
рн.ИсчисленоИзЗарплаты = Истина;

 

НС = движения.ОсновныеНачисленияРаботниковОрганизаций.Добавить();

нс.Активность = Истина;
НС.Организация = Вборка.организация;
НС.Сотрудник=Вборка.сотрудник;

НС.ПериодРегистрации=Стр.ДатаДействия;
НС.ПериодДействияКонец = КонецДня(Стр.ДатаДействияКонец);
Нс.ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоДням;
НС.ПериодДействияНачало =Стр.ДатаДействия;
НС.Результат =(((Стр.ДатаДействияКонец-Стр.ДатаДействия) /60/60/24)+1)*Стр.Показатель1;

Нс.ДатаНачалаСобытия =НачалоМесяца(Стр.ДатаДействия);
НС.ФизЛицо=Вборка.сотрудник.физлицо;
НС.ОбособленноеПодразделение = Вборка.организация;
НС.ДатаНачалаСобытия = Стр.ДатаДействия ;

нс.ГрафикРаботы = Стр.Сотрудник;


НС.Авторасчет = Истина;

Нс.ВидРасчета = Стр.ВидРасчета;
Нс.Показатель1 = Стр.Показатель1;

 

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

 

Резуль = Запрос.Выполнить().Выбрать();
ДнейВсего = 0;
ЧасовВсего =0;
Пока Резуль.Следующий()цикл
ДнейВсего = ДнейВсего+ резуль.часы;
ЧасовВсего =ЧасовВсего+Резуль.ДополнительноеЗначение;

КонецЦикла;

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

РН2 = движения.ЗарплатаЗаМесяцОрганизаций.Добавить();

РН2.Активность = Истина;
РН2.ХарактерВыплаты = Перечисления.ХарактерВыплатыЗарплаты.Зарплата;

РН2.Организация = Вборка.организация;

РН2.Период=КонецМесяца(Стр.ДатаДействия);
РН2.ПериодВзаиморасчетов=Стр.ДатаДействия;

РН2.СуммаВзаиморасчетов =(((Стр.ДатаДействияКонец-Стр.ДатаДействия) /60/60/24)+1)*Стр.Показатель1;

РН2.ФизЛицо=Вборка.сотрудник.физлицо;

РН2 = движения.ВзаиморасчетыСРаботникамиОрганизаций.Добавить();

РН2.Активность = Истина;
РН2.Организация = Вборка.организация;

РН2.Период=КонецМесяца(Стр.ДатаДействия);
РН2.ПериодВзаиморасчетов=Стр.ДатаДействия;

РН2.СуммаВзаиморасчетов =(((Стр.ДатаДействияКонец-Стр.ДатаДействия) /60/60/24)+1)*Стр.Показатель1;

РН2.ФизЛицо=Вборка.сотрудник.физлицо;

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

?И ОБЯЗАТЕЛЬНО закомментировать строку
ДобавитьСтрокуВДвиженияПоРегистрамСведений(ВыборкаПоШапкеДокумента, ВыборкаПоРаботникиОрганизации);

 

ДАЛЕЕ
Переходим к документу "НачислениеЗарплатыРаботникамОрганизации"
В модуле объекта процедуры "ВыполнитьАвтозаполнение" находим строки
| ВЫБОР
| КОГДА &ЭтоПерерасчет
| ТОГДА ЛОЖЬ
| КОГДА ОсновныеНачисления.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК УжеПроведен,

и меняем их на

| ВЫБОР
| КОГДА &ЭтоПерерасчет
| ТОГДА ЛОЖЬ
| КОГДА ОсновныеНачисленияОрганизаций.Код = ""99999""
| ТОГДА ЛОЖЬ
| КОГДА ОсновныеНачисления.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК УжеПроведен,

ДАЛЕЕ идем в общий модуль "ПроведениеРасчетов" процедура "ДописатьАлгоритмВЗапрос"

находим строки

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

Меняем их на

|ВЫБРАТЬ
| ОсновныеНачисленияОрганизаций.Ссылка КАК ВидРасчета
|ПОМЕСТИТЬ ВТБазовыеРасчетыОтпуска
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
|ГДЕ
| ОсновныеНачисленияОрганизаций.ЗачетНормыВремени
| И (ОсновныеНачисленияОрганизаций.ВидВремени = ЗНАЧЕНИЕ(Перечисление.ВидыВремени.ОтработанноеВПределахНормы)
| ИЛИ ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.Прогулы)
| И ОсновныеНачисленияОрганизаций.ВидВремени = ЗНАЧЕНИЕ(Перечисление.ВидыВремени.ЦелодневноеНеотработанное))
| И ОсновныеНачисленияОрганизаций.Ссылка <> ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ДниНеоплачиваемыеСогласноТабелю)
| ИЛИ ОсновныеНачисленияОрганизаций.Ссылка.код = ""99999""
|
|ИНДЕКСИРОВАТЬ ПО
| ВидРасчета
|;


Все, на этом манипуляции в конфигураторе закончены, перейдем к настройке вида расчета.

В 1С предприятии создаем ?Основной вид расчета ? с наименованием "Ремонт Автотранспорта" и кодом 99999
На вкладке "Расчеты"
Первичное начисление, способ расчета определяете вы сами, в моем случае расчитывается "По дневной тарифной ставке"
На вкладке "Время"
Галочку ставим "Начисление за работу полную смену в пределах нормы времени"
создаем новый вид времени по классификатору и обзовем его "ремонт автотранспорта" с буквенным кодом "РЕ" и установим галочку "рабочее время"
добавим в средний заработок этот вид расчета.

Все, на этом настройка закончена, если этот вариант вас устироит, тогда можете для более удобного запролнения документа "ввод сведений о плановых начислениях" скачать Текстовый файл с более полным описанием процесса корый прикреплен к публикации.

Скачать файлы

Наименование Файл Версия Размер
полный 2
.txt 11,87Kb
22.09.14
2
.txt 11,87Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.