Экзаменационные билеты можно скачать здесь. Задачника для этого экзамена пока нет. Публикацию "Пример решения задач Специалист ЗУП 3.0" не смортел, так как её обнаружил после сдачи экзамена и своей публикации.
На основе метериалов (более 90% ник demos) форума Аттестация "1С:Специалист" ЗУП, "Конфигурирование подсистем расчета зарплаты и управления персоналом в прикладных решениях "1С:Предприятия 8" (редакция 3.0) и для консультантов 1С:Специалист-консультант Зарплата и управление персоналом 8 ред.3.0 собрал материалы:
- Выгрузки ИБ 6 билетов. Сделано на демо релиза 3.0.23.143, но на экзамене надо делать на пустой.
- Методики графически — см. картинки к публикации по билетам: Доплаты за время работы, Премии по проектам, Компенсации квартплаты, Графики работ, Натуральный доход работников.
- Ключевые алгоритмы, где применил типовой механизм "подмены" текстов запросов, общий модуль для расчета показателей, для отчетов таблицу "ДанныеГрафика" и регистр "ГрафикиРаботыПоВидамВремен", метод "ВыполнитьПакет()" при отладке и выполнении сложных запросов.
Ключеные алгоритмы:
- Решать всё с произвольными показателями — меньше работаем с конфигуратором в отличие от ЗУП 2.5. Подробное описание: www.zup1c.ru . В некоторых билетах показатель достаточно выбрать предопределенный и свои не создавать.
- В отчетах использовать "Представления_" — механизм "подмены" текстов запросов.
- Коды алгоритмов: Билет 1, Билет 2, Билет 3, Билет 4, Билет 5, Билет 6.
БИЛЕТ 1
1. Конфигуратор:
- Подсистема — РС.ПлановыеНачисления, РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, 2 документа, отчет.
- Док.ГрафикРаботыВОсобыхУсловиях движения РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.ДатаНачала КАК Период,
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.ДатаОкончания КАК ДействуетДо,
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.Ссылка.Организация,
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо,
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.Сотрудник,
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.Ссылка.Показатель,
| РАЗНОСТЬДАТ(ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.ДатаНачала, ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.ДатаОкончания, ДЕНЬ) + 1 КАК Значение
|ИЗ
| Документ.ГрафикРаботыВОсобыхУсловиях_1.ТаблицаПериодов КАК ГрафикРаботыВОсобыхУсловияхТаблицаПериодов
|ГДЕ
| ГрафикРаботыВОсобыхУсловияхТаблицаПериодов.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Записывать = Истина;
Пока Выборка.Следующий() Цикл
Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
КонецЦикла;
КонецПроцедуры
#КонецЕсли
- Док.ВводПоказанийУсловийСреды движения РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудникови РС.ПлановыеНачисления, МФ:
&НаКлиенте
Процедура Заполнить(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ТаблицаУсловий.Очистить();
ТекстФайла = Новый ТекстовыйДокумент;
ТекстФайла.Прочитать( ДиалогОткрытияФайла.ВыбранныеФайлы[0] );
ТекстФайла = ТекстФайла.ПолучитьТекст();
Для Счетчик = 1 По СтрЧислоСтрок( ТекстФайла ) Цикл
ТекСтрока = СтрПолучитьСтроку( ТекстФайла, Счетчик );
МассивСтроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекСтрока,";");
Строка = Объект.ТаблицаУсловий.Добавить();
Строка.Дата = Дата(МассивСтроки[0]+" 00:00:00");
Строка.Условие = МассивСтроки[1];
КонецЦикла;
КонецЕсли;
КонецПроцедуры
МО
#Если Не ТолстыйКлиентУправляемоеПриложение Или Сервер Тогда
Процедура ОбработкаПроведения(Отказ, Режим)
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ДаннныеДляПроведения = получитьДанныеДляПроведения();
РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, ДаннныеДляПроведения);
КонецПроцедуры
Функция получитьДанныеДляПроведения()
Если ТаблицаУсловий.Количество()>0 Тогда
Дата1 = НачалоМесяца(ТаблицаУсловий[0].Дата);
Дата2 = КонецМесяца(ТаблицаУсловий[0].Дата);
иначе
Отказ = Истина;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МИНИМУМ(ВводПоказанийУсловийСредыТаблицаУсловий.Дата) КАК ДатаСобытия,
| МАКСИМУМ(ВводПоказанийУсловийСредыТаблицаУсловий.Дата) КАК ДействуетДо,
| РС.Регистратор.Организация КАК Организация,
| РС.Сотрудник,
| РС.ФизическоеЛицо,
| СРЕДНЕЕ(ВЫБОР
| КОГДА ВводПоказанийУсловийСредыТаблицаУсловий.Условие = 0
| ТОГДА 30
| ИНАЧЕ ВЫБОР
| КОГДА ВводПоказанийУсловийСредыТаблицаУсловий.Условие = 1
| ТОГДА 40
| ИНАЧЕ 50
| КОНЕЦ
| КОНЕЦ) КАК Значение,
| ВводПоказанийУсловийСредыТаблицаУсловий.Ссылка
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.ВводПоказанийУсловийСреды_1.ТаблицаУсловий КАК ВводПоказанийУсловийСредыТаблицаУсловий
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников КАК РС
| ПО ВводПоказанийУсловийСредыТаблицаУсловий.Ссылка.Организация = РС.Регистратор.Организация
| И (ВводПоказанийУсловийСредыТаблицаУсловий.Дата МЕЖДУ РС.Период И РС.ДействуетДо)
|ГДЕ
| РС.Показатель = &ПоказательГрафика
| И РС.Период МЕЖДУ &Дата1 И &Дата2
|
|СГРУППИРОВАТЬ ПО
| РС.Сотрудник,
| РС.ФизическоеЛицо,
| РС.Регистратор.Организация
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.ДатаСобытия,
| ДОБАВИТЬКДАТЕ(ВТ.ДействуетДо, ДЕНЬ, 1) КАК ДействуетДо,
| ВТ.Сотрудник,
| &Начисление КАК Начисление,
| ВТ.ФизическоеЛицо,
| ""1"" КАК Значение,
| ИСТИНА КАК Используется,
| ВТ.Сотрудник.ГоловнаяОрганизация КАК ГоловнаяОрганизация,
| ВТ.Ссылка КАК ДокументОснование
|ИЗ
| ВТ КАК ВТ
|;
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.ДатаСобытия,
| КОНЕЦПЕРИОДА(ВТ.ДействуетДо, МЕСЯЦ) КАК ДействуетДо,
| ВТ.Организация,
| ВТ.Сотрудник,
| ВТ.ФизическоеЛицо,
| &ПоказательПроцент КАК Показатель,
| ВТ.Значение
|ИЗ
| ВТ КАК ВТ";
Запрос.УстановитьПараметр("ПоказательГрафика", ПоказательГрафика);
Запрос.УстановитьПараметр("ПоказательПроцент", ПоказательПроцент);
Запрос.УстановитьПараметр("Начисление", Начисление);
Запрос.УстановитьПараметр("Дата1", Дата1);
Запрос.УстановитьПараметр("Дата2", Дата2);
РезультатЗапроса = Запрос.ВыполнитьПакет();
ДаннныеДляПроведения = Новый Структура;
// Набор данных для формирования плановых начислений
ПлановыеНачисления = РезультатЗапроса[1].Выгрузить();
ДаннныеДляПроведения.Вставить("ДанныеОПлановыхНачислениях", ПлановыеНачисления);
// Набор данных для формирования плановых начислений
ЗначенияПоказателей = РезультатЗапроса[2].Выгрузить();
ДаннныеДляПроведения.Вставить("ЗначенияПоказателей", ЗначенияПоказателей);
Возврат ДаннныеДляПроведения
КонецФункции
#КонецЕсли
- Отчет МО для "Представление_"
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) ЗарплатаКадрыОбщиеНаборыДанных.ЗаполнитьОбщиеИсточникиДанныхОтчета(ЭтотОбъект); КонецПроцедуры #КонецЕсли
СКД
ВЫБРАТЬ
НачисленияДанныеГрафика.ПериодДействияНачало,
НачисленияДанныеГрафика.ПериодРегистрации КАК Период,
НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия,
НачисленияДанныеГрафика.Сотрудник КАК Сотрудник,
НачисленияДанныеГрафика.Результат
ПОМЕСТИТЬ ВТНачисления
ИЗ
РегистрРасчета.Начисления.ДанныеГрафика(
ПериодРегистрации МЕЖДУ &НачалоПериода И &КонецПериода
И ВидРасчета = &ВидРасчета) КАК НачисленияДанныеГрафика
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация,
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность
ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников
ИЗ
ВТНачисления КАК ВТНачисления
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗЛИЧНЫЕ
Представления_СрезПоследних_КадроваяИсторияСотрудников.Должность КАК Должность,
ВТНачисления.Сотрудник КАК Сотрудник,
ВТНачисления.Период КАК Период,
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Значение КАК ЗапланированоДнейРаботВОсобыхУсловиях,
ВТНачисления.ОсновноеЗначениеФактическийПериодДействия КАК ФактическиОтработаноДнейВОсобыхУсловиях,
ВТНачисления.Результат КАК НачисленоДоплаты,
НАЧАЛОПЕРИОДА(ВТНачисления.ПериодДействияНачало, МЕСЯЦ) КАК Месяц,
ВТНачисления.Результат / ВТНачисления.ОсновноеЗначениеФактическийПериодДействия КАК СреднийРазмерДоплатыЗаОдинДеньРаботы
ИЗ
ВТНачисления КАК ВТНачисления
ЛЕВОЕ СОЕДИНЕНИЕ Представления_СрезПоследних_КадроваяИсторияСотрудников КАК Представления_СрезПоследних_КадроваяИсторияСотрудников
ПО ВТНачисления.Сотрудник = Представления_СрезПоследних_КадроваяИсторияСотрудников.Сотрудник
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников КАК ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
ПО ВТНачисления.Сотрудник = ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Сотрудник
И (ВТНачисления.Период = НАЧАЛОПЕРИОДА(ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Период, МЕСЯЦ))
ГДЕ
ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Показатель = &Показатель
2. Клиент:
- Откл "Штатное р.", вкл."Использовать тарифные группы", документа «Утверждение тарифной сетки», Принять на работу.
- Создать ВР копированием ВР "За наставничество". Формула "_СреднийПроцентНадбавкиЗаУсловия_1 / 100 * РасчетнаяБаза"
БИЛЕТ 2
1. Конфигуратор:
- Подсистема — РН.Отгулы, РН.ДанныеИндивидуальныхГрафиковСотрудников, РН.ДанныеТабельногоУчетаРабочегоВремениСотрудников, 2 документа, Отчет.
- !!Вариант решения второй(сложный), когда надо расчитывать свой показатель "_КоличествоЧасовВыполненияВредныхРабот_2". Если его заменить на типовой "ВремяВЧасах", то этот код не нужен!!! ОбщийМодуль.РасчетЗарплатыРасширенныйПереопределяемый проц. ЗаполнитьЗначенияДополнительныхПоказателей() расчет показателя при заполнении начислений.
//1. Вычисляемые показатели (что нужно заполнить значениями ИдентификаторНужногоПоказателя = "_КоличествоЧасовВыполненияВредныхРабот_2"; //2. Для получения данных запросом создаем таблицу значений с колонками явно заданного типа ИсходныеДанные = Новый ТаблицаЗначений; ИсходныеДанные.Колонки.Добавить("ДатаНачала", Новый ОписаниеТипов("Дата")); ИсходныеДанные.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); //3.Обработаем строки из ДополнительныеПоказатели Для каждого СтрокаПоказателей Из ДополнительныеПоказатели Цикл //4. Исключим заполненные значение показателей Если СтрокаПоказателей.ЗначениеОпределено Тогда Продолжить; КонецЕсли; Если ЗарплатаКадрыРасширенный.ИдентификаторПоказателя(СтрокаПоказателей.Показатель) <> ИдентификаторНужногоПоказателя Тогда Продолжить; КонецЕсли; НоваяСтрока = ИсходныеДанные.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаПоказателей); КонецЦикла; Если ИсходныеДанные.Количество() = 0 Тогда Возврат; КонецЕсли; ТекстЗапроса = "ВЫБРАТЬ | ИсходныеДанные.Сотрудник, | ИсходныеДанные.ДатаНачала |ПОМЕСТИТЬ ВТИсходныеДанные |ИЗ | &ИсходныеДанные КАК ИсходныеДанные |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТИсходныеДанные.Сотрудник, | ВТИсходныеДанные.ДатаНачала, | СУММА(ЕСТЬNULL(РабочееВремяСотрудников.Часы, 0)) КАК СтажВредныхРабот |ИЗ | ВТИсходныеДанные КАК ВТИсходныеДанные | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ДанныеИндивидуальныхГрафиковСотрудников КАК РабочееВремяСотрудников | ПО ВТИсходныеДанные.Сотрудник = РабочееВремяСотрудников.Сотрудник | И ВТИсходныеДанные.ДатаНачала = РабочееВремяСотрудников.ПериодРегистрации |ГДЕ | РабочееВремяСотрудников.ВидУчетаВремени = &ВидУчетаВремени | |СГРУППИРОВАТЬ ПО | ВТИсходныеДанные.Сотрудник, | ВТИсходныеДанные.ДатаНачала"; Запрос = Новый Запрос(ТекстЗапроса); Запрос.УстановитьПараметр("ИсходныеДанные",ИсходныеДанные); Запрос.УстановитьПараметр("ВидУчетаВремени",Справочники.ВидыИспользованияРабочегоВремени.НайтиПоНаименованию("Работа в кислотном цеху")); ТаблицаРезультат = Запрос.Выполнить().Выгрузить(); Для каждого СтрокаПоказателей Из ДополнительныеПоказатели Цикл Если ЗарплатаКадрыРасширенный.ИдентификаторПоказателя(СтрокаПоказателей.Показатель) <> ИдентификаторНужногоПоказателя Тогда Продолжить; КонецЕсли; СтрокаТаблицыРезультат = ТаблицаРезультат.Найти(СтрокаПоказателей.Сотрудник, "Сотрудник"); Если СтрокаТаблицыРезультат <> Неопределено Тогда Если СтрокаТаблицыРезультат.ДатаНачала = СтрокаПоказателей.ДатаНачала Тогда СтрокаПоказателей.Значение = СтрокаТаблицыРезультат.СтажВредныхРабот; СтрокаПоказателей.ЗначениеОпределено = Истина; КонецЕсли; КонецЕсли; КонецЦикла;
- Док.ДанныеПропускнойСистемы движения РН.Отгулы, РН.ДанныеИндивидуальныхГрафиковСотрудников двумя строками, МФ:
&НаКлиенте Процедура ЗагрузитьИзФайла() Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); Если ДиалогОткрытияФайла.Выбрать() Тогда Объект.ДанныеОВремени.Очистить(); ТекстФайла = Новый ТекстовыйДокумент; ТекстФайла.Прочитать( ДиалогОткрытияФайла.ВыбранныеФайлы[0] ); ТекстФайла = ТекстФайла.ПолучитьТекст(); Для Счетчик = 1 По СтрЧислоСтрок( ТекстФайла ) Цикл ТекСтрока = СтрПолучитьСтроку( ТекстФайла, Счетчик ); МассивСтроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекСтрока,";"); Строка = Объект.ДанныеОВремени.Добавить(); Строка.Сотрудник = УзнатьСотрудника(МассивСтроки[0]); Строка.Дата = Дата(МассивСтроки[1]+":00"); Строка.ВремяВхода = Дата(МассивСтроки[1]+":00"); Строка.ВремяВыхода = Дата(МассивСтроки[2]+":00"); КонецЦикла; КонецЕсли; КонецПроцедуры &НаСервере Функция УзнатьСотрудника(Строка) Возврат Справочники.Сотрудники.НайтиПоКоду(Строка); КонецФункции
МО:
#Если Не ТолстыйКлиентУправляемоеПриложение Или Сервер Тогда
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ДанныеДляПроведения = ТаблицаДанныхОВремени();
УчетРабочегоВремени.ЗарегистрироватьДанныеИндивидуальногоГрафика(Движения, ДанныеДляПроведения, НачалоМесяца(Месяц));
КонецПроцедуры
Функция ТаблицаДанныхОВремени()
ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокТЧ.Сотрудник,
| СУММА(РАЗНОСТЬДАТ(ДокТЧ.ВремяВхода, ДокТЧ.ВремяВыхода, МИНУТА) / 60) КАК Часов,
| ДокТЧ.Дата
|ИЗ
| Документ.ДанныеПропускнойСистемы_2.ДанныеОВремени КАК ДокТЧ
|ГДЕ
| ДокТЧ.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ДокТЧ.Сотрудник,
| ДокТЧ.Дата";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = ВыборкаДетальныеЗаписи.Дата;
ДанныеПоВидуВремениНаДату.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
ДанныеПоВидуВремениНаДату.ВидВремени = ВидВремени;
ДанныеПоВидуВремениНаДату.Дней = 1;
ДанныеПоВидуВремениНаДату.Часов = ВыборкаДетальныеЗаписи.Часов;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = ВыборкаДетальныеЗаписи.Дата;
ДанныеПоВидуВремениНаДату.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
ДанныеПоВидуВремениНаДату.ВидВремени = Справочники.ВидыИспользованияРабочегоВремени.Явка;
ДанныеПоВидуВремениНаДату.Дней = 1;
ДанныеПоВидуВремениНаДату.Часов = 12;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
КонецЦикла;
ТЗ = РезультатЗапроса.Выгрузить();
Если ТЗ.Количество() > 0 Тогда
ТЗ.Свернуть("Сотрудник","Часов");
Движения.Отгулы_2.Записывать = Истина;
Для каждого ВыборкаДетальныеЗаписи Из ТЗ Цикл
Движение = Движения.Отгулы_2.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Месяц;
Движение.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движение.Часов = ВыборкаДетальныеЗаписи.Часов;
КонецЦикла;
КонецЕсли;
Возврат ТаблицаДанныхОВремени;
КонецФункции
#КонецЕсли
- Док.Отгул движения РН.Отгулы, РН.ДанныеТабельногоУчетаРабочегоВремениСотрудников одной строкой, МО:
#Если Не ТолстыйКлиентУправляемоеПриложение Или Сервер Тогда
перем ТЗ;
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ДанныеДляПроведения = ТаблицаДанныхОВремени();
Если ТЗ.Количество() > 0 Тогда
ТЗ.Свернуть("Сотрудник","ЧасовОстаток");
Движения.Отгулы_2.Записывать = Истина;
Для каждого ВыборкаДетальныеЗаписи Из ТЗ Цикл
Движение = Движения.Отгулы_2.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = ДеньОтгула;
Движение.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
Движение.Часов = 4;
КонецЦикла;
иначе
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "У сотрудника "+Сотрудник+" осталось не достаточно часов для отгула на "+ ДеньОтгула;
Сообщение.Сообщить();
Отказ = Истина;
КонецЕсли;
УчетРабочегоВремени.ЗарегистрироватьДанныеТабеля(Движения, ДанныеДляПроведения, НачалоМесяца(ДеньОтгула));
КонецПроцедуры
Функция ТаблицаДанныхОВремени()
ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево"));
ТаблицаДанныхОВремени.Колонки.Добавить("Территория", Новый ОписаниеТипов("СправочникСсылка.ТерриторииВыполненияРабот"));
ТаблицаДанныхОВремени.Колонки.Добавить("УсловияТруда", Новый ОписаниеТипов("СправочникСсылка.УсловияТруда"));
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Отгулы_2Остатки.Сотрудник,
| Отгулы_2Остатки.ЧасовОстаток
|ИЗ
| РегистрНакопления.Отгулы_2.Остатки(&ДеньОтгула, Сотрудник = &Сотрудник) КАК Отгулы_2Остатки
|ГДЕ
| Отгулы_2Остатки.ЧасовОстаток >= 4";
Запрос.УстановитьПараметр("ДеньОтгула", ДеньОтгула);
Запрос.УстановитьПараметр("Сотрудник", Сотрудник);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = ДеньОтгула;
ДанныеПоВидуВремениНаДату.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
ДанныеПоВидуВремениНаДату.ВидВремени = ВидВремени;
ДанныеПоВидуВремениНаДату.Дней = 1;
ДанныеПоВидуВремениНаДату.Часов = 12;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
КонецЕсли;
ТЗ = РезультатЗапроса.Выгрузить();
Возврат ТаблицаДанныхОВремени;
КонецФункции
#КонецЕсли
- Отчет СКД:
ВЫБРАТЬ НачисленияДанныеГрафика.ПериодРегистрации КАК Период, НачисленияДанныеГрафика.Сотрудник КАК Сотрудник, НачисленияДанныеГрафика.ОсновноеЗначениеПериодДействия КАК ОсновноеЗначениеПериодДействия, // Вариант решения второй(сложнее), когда надо расчитывать свой показатель "_КоличествоЧасовВыполненияВредныхРабот_2" //НачисленияДанныеГрафика.НачисленияДанныеГрафика.ДополнительноеЗначениеПериодДействия КАК ОсновноеЗначениеПериодДействия, НачисленияДанныеГрафика.ВидУчетаВремени КАК Доплата, НачисленияДанныеГрафика.Результат КАК Результат ПОМЕСТИТЬ ВТДоплаты ИЗ РегистрРасчета.Начисления.ДанныеГрафика( ВидУчетаВремени = &ВРДоплата И (ПериодДействия МЕЖДУ &Дата1 И &Дата2)) КАК НачисленияДанныеГрафика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТДоплаты.Период, ВТДоплаты.Сотрудник ПОМЕСТИТЬ ВТНачисления ИЗ ВТДоплаты КАК ВТДоплаты ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников ИЗ ВТНачисления КАК ВТНачисления ГДЕ "ТолькоРазрешенные" = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НачисленияДанныеГрафика.ПериодРегистрации КАК Период, НачисленияДанныеГрафика.Сотрудник КАК Сотрудник, НачисленияДанныеГрафика.ВидУчетаВремени КАК Доплата, НачисленияДанныеГрафика.ДополнительноеЗначениеПериодДействия КАК ПредоставленоОтгулов, НачисленияДанныеГрафика.Результат КАК Результат ПОМЕСТИТЬ ВТОтгулы ИЗ РегистрРасчета.Начисления.ДанныеГрафика( ВидУчетаВремени = &ВРОтгул И (ПериодДействия МЕЖДУ &Дата1 И &Дата2)) КАК НачисленияДанныеГрафика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ВТДоплаты.Период КАК Месяц, ВТДоплаты.Сотрудник КАК Сотрудник, ВТДоплаты.ОсновноеЗначениеПериодДействия КАК ОтработаноЧасовВКислотномЦеху, ВТДоплаты.Результат КАК НачисленоДоплаты, ВТОтгулы.Результат КАК НачисленоЗаОтгулы, ВТОтгулы.ПредоставленоОтгулов, ЕСТЬNULL(Отгулы_2ОстаткиИОбороты.ЧасовНачальныйОстаток, 0) / 4 КАК ОстатокОтгуловНаНачалоПериода, ЕСТЬNULL(Отгулы_2ОстаткиИОбороты.ЧасовКонечныйОстаток, 0) / 4 КАК ОстатокОтгуловНаКонецПериода, Представления_СрезПоследних_КадроваяИсторияСотрудников.Должность ИЗ ВТДоплаты КАК ВТДоплаты ЛЕВОЕ СОЕДИНЕНИЕ ВТОтгулы КАК ВТОтгулы ПО (ВТОтгулы.Сотрудник = ВТДоплаты.Сотрудник) И ВТДоплаты.Период = ВТОтгулы.Период ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Отгулы_2.ОстаткиИОбороты(&Дата1, &Дата2, Месяц, , ) КАК Отгулы_2ОстаткиИОбороты ПО ВТДоплаты.Сотрудник = Отгулы_2ОстаткиИОбороты.Сотрудник И ВТДоплаты.Период = Отгулы_2ОстаткиИОбороты.Период ЛЕВОЕ СОЕДИНЕНИЕ Представления_СрезПоследних_КадроваяИсторияСотрудников КАК Представления_СрезПоследних_КадроваяИсторияСотрудников ПО ВТДоплаты.Сотрудник = Представления_СрезПоследних_КадроваяИсторияСотрудников.Сотрудник
2. Клиент:
- Откл "Штатное р.", вкл."Использовать тарифные группы", документа «Утверждение тарифной сетки».
- Создать график работы. Принятьна работу:
- Создать ВР "Отгулы за работы в кислотном цеху" копированием ВР "За наставничество". Формула "ТарифнаяСтавкаЧасовая * ОтработаноЧасовВПределахНормыВремени", только если введен вид времени "Отгулы за работы в кислотном цеху".
- Создать ВР "Доплата за работу в кислотном цеху" копированием ВР "За наставничество". Формула "ВремяВЧасах* 50 / 100 * ТарифнаяСтавкаЧасовая", только если введен вид времени "Работа в кислотном цеху".
БИЛЕТ 3
1. Конфигуратор:
- Подсистема — движения РС.РаботыВПроектах, РС.ПлановыеНачисления, РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников
- Док.ФормированиеРабочейГруппыПроекта движения РС.ПлановеНачисления и РС.РаботаВПроектах МО:
#Если Не ТолстыйКлиентУправляемоеПриложение Или Сервер Тогда Процедура ОбработкаПроведения(Отказ, Режим) ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДаннныеДляПроведения = получитьДанныеДляПроведения(); РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, ДаннныеДляПроведения); Движения.РаботаВПоектах_3.Записывать = Истина; Для Каждого ТекСтрокаТаблицаУчастников Из ТаблицаУчастников Цикл Движение = Движения.РаботаВПоектах_3.Добавить(); Движение.Сотрудник = ТекСтрокаТаблицаУчастников.Сотрудник; Движение.Проект = Проект; Движение.Роль = ТекСтрокаТаблицаУчастников.Роль; Движение.Период = ТекСтрокаТаблицаУчастников.ДатаСобытия; Движение.ДатаОкончания = ТекСтрокаТаблицаУчастников.ДействуетДо; КонецЦикла; КонецПроцедуры Функция получитьДанныеДляПроведения() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.Сотрудник, | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.Ссылка.Начисление, | ИСТИНА КАК Используется, | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.ДатаСобытия, | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.ДействуетДо, | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.Ссылка КАК ДокументОснование, | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.Сотрудник.ГоловнаяОрганизация КАК ГоловнаяОрганизация |ИЗ | Документ.ФормированиеРабочейГруппыПроекта_3.ТаблицаУчастников КАК ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников |ГДЕ | ФормированиеРабочейГруппыПроекта_3ТаблицаУчастников.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.ВыполнитьПакет(); ДаннныеДляПроведения = Новый Структура; // Набор данных для формирования плановых начислений ПлановыеНачисления = РезультатЗапроса[0].Выгрузить(); ДаннныеДляПроведения.Вставить("ДанныеОПлановыхНачислениях", ПлановыеНачисления); Возврат ДаннныеДляПроведения КонецФункции #КонецЕсли
- Док.ИсключениеИзРабочейГруппыПроекта движения РС.ПлановеНачисления и РС.РаботаВПроектах МО:
#Если Не ТолстыйКлиентУправляемоеПриложение Или Сервер Тогда Процедура ОбработкаПроведения(Отказ, Режим) ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДаннныеДляПроведения = получитьДанныеДляПроведения(); РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, ДаннныеДляПроведения); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РаботаВПоектах_3СрезПоследних.Сотрудник, | РаботаВПоектах_3СрезПоследних.Проект, | РаботаВПоектах_3СрезПоследних.Роль |ИЗ | РегистрСведений.РаботаВПоектах_3.СрезПоследних(&Дата, ) КАК РаботаВПоектах_3СрезПоследних |ГДЕ | РаботаВПоектах_3СрезПоследних.Сотрудник = &Сотрудник"; Запрос.УстановитьПараметр("Сотрудник", Сотрудник); Запрос.УстановитьПараметр("Дата", ДатаСобытия); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Движения.РаботаВПоектах_3.Записывать = Истина; Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Движение = Движения.РаботаВПоектах_3.Добавить(); Движение.Сотрудник = Сотрудник; Движение.Проект = Проект; Движение.Роль = ВыборкаДетальныеЗаписи.Роль; Движение.Период = ДатаСобытия; Движение.ДатаОкончания = ДатаСобытия; КонецЦикла; КонецПроцедуры Функция получитьДанныеДляПроведения() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ИсключениеИзРабочейГруппыПроекта_3.Сотрудник, | ИсключениеИзРабочейГруппыПроекта_3.Начисление, | ЛОЖЬ КАК Используется, | ИсключениеИзРабочейГруппыПроекта_3.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | ИсключениеИзРабочейГруппыПроекта_3.ДатаСобытия, | ИсключениеИзРабочейГруппыПроекта_3.Ссылка КАК ДокументОснование, | ИсключениеИзРабочейГруппыПроекта_3.Сотрудник.ГоловнаяОрганизация КАК ГоловнаяОрганизация |ИЗ | Документ.ИсключениеИзРабочейГруппыПроекта_3 КАК ИсключениеИзРабочейГруппыПроекта_3"; Запрос.УстановитьПараметр("Ссылка", Ссылка); РезультатЗапроса = Запрос.ВыполнитьПакет(); ДаннныеДляПроведения = Новый Структура; ПлановыеНачисления = РезультатЗапроса[0].Выгрузить(); ДаннныеДляПроведения.Вставить("ДанныеОПлановыхНачислениях", ПлановыеНачисления); Возврат ДаннныеДляПроведения КонецФункции #КонецЕсли
- Док.ОценкаРаботПоПроекту движение РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников МФ
&НаСервере Процедура ЗаполнитьНаСервере() ОбъектФормы = РеквизитФормыВЗначение("Объект"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РаботаВПоектах_3СрезПоследних.Проект, | РаботаВПоектах_3СрезПоследних.Сотрудник, | РаботаВПоектах_3СрезПоследних.ДатаОкончания |ИЗ | РегистрСведений.РаботаВПоектах_3.СрезПоследних(&ДатаОкончания, ) КАК РаботаВПоектах_3СрезПоследних |ГДЕ | РаботаВПоектах_3СрезПоследних.Роль = &Роль | И РаботаВПоектах_3СрезПоследних.Проект = &Проект | И РаботаВПоектах_3СрезПоследних.ДатаОкончания >= &ДатаОкончания"; Запрос.УстановитьПараметр("ДатаОкончания", НачалоМесяца( ОбъектФормы.Месяц ) ); Запрос.УстановитьПараметр("Роль", ОбъектФормы.Режим); Запрос.УстановитьПараметр("Проект", ОбъектФормы.Проект); Если ОбъектФормы.Режим = Перечисления.Роли_3.Исполнитель Тогда Запрос.Текст = СтрЗаменить(Запрос.Текст,"И РаботаВПоектах_3СрезПоследних.Проект = &Проект",""); ОбъектФормы.Проект = Справочники.Проекты_3.ПустаяСсылка(); КонецЕсли; Запрос.УстановитьПараметр("Проект", ОбъектФормы.Проект); РезультатЗапроса = Запрос.Выполнить(); ОбъектФормы.Оценки.Загрузить( РезультатЗапроса.Выгрузить() ); ЗначениеВРеквизитФормы(ОбъектФормы,"Объект"); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедуры
МО
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ТЧ.Ссылка.Месяц, МЕСЯЦ) КАК Период,
| ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ТЧ.Ссылка.Месяц, МЕСЯЦ), ДЕНЬ, 1) КАК ДействуетДо,
| ТЧ.Ссылка.Организация,
| ТЧ.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо,
| ТЧ.Сотрудник,
| ТЧ.Ссылка.Показатель,
| ВЫБОР
| КОГДА ТЧ.Ссылка.Режим = ЗНАЧЕНИЕ(Перечисление.Роли_3.Исполнитель)
| ТОГДА ВЫБОР
| КОГДА ТЧ.Проект.СтепеньСекретности = 1
| ТОГДА 50
| ИНАЧЕ ВЫБОР
| КОГДА ТЧ.Проект.СтепеньСекретности = 2
| ТОГДА 70
| ИНАЧЕ 90
| КОНЕЦ
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА ТЧ.Проект.СтепеньСекретности = 1
| ТОГДА 40
| ИНАЧЕ ВЫБОР
| КОГДА ТЧ.Проект.СтепеньСекретности = 2
| ТОГДА 60
| ИНАЧЕ 80
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ * ЕСТЬNULL(ТЧ.Срок, 0) * ЕСТЬNULL(ТЧ.Качество, 0) КАК Значение
|ИЗ
| Документ.ОценкаРаботПоПроекту_3.Оценки КАК ТЧ
|ГДЕ
| ТЧ.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Движения.РС..Записывать = Истина;
Пока Выборка.Следующий() Цикл
Движение = Движения.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.Добавить();
ЗаполнитьЗначенияСвойств(Движение, Выборка);
КонецЦикла;
КонецПроцедуры
#КонецЕсли
- Отчет СКД:
ВЫБРАТЬ НачисленияДанныеГрафика.Результат КАК Результат, НачисленияДанныеГрафика.ОтработаноДней КАК ОтработаноДней, НачисленияДанныеГрафика.Сотрудник КАК Сотрудник, НачисленияДанныеГрафика.ВидРасчета КАК ВидРасчета, НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия КАК ОсновноеЗначениеФактическийПериодДействия, НачисленияДанныеГрафика.ОсновноеЗначениеПериодДействия КАК ОсновноеЗначениеПериодДействия, НачисленияДанныеГрафика.ПериодРегистрации КАК ПериодРегистрации ПОМЕСТИТЬ ВТПремия ИЗ РегистрРасчета.Начисления.ДанныеГрафика( ПериодРегистрации МЕЖДУ &Дата1 И &Дата2 И ВидРасчета = &ВидРасчетаПремия) КАК НачисленияДанныеГрафика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТПремия.ПериодРегистрации КАК Период, ВТПремия.Сотрудник ПОМЕСТИТЬ ВТНачисления ИЗ ВТПремия КАК ВТПремия ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников ИЗ ВТНачисления КАК ВТНачисления ГДЕ "ТолькоРазрешенные" = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ НачисленияДанныеГрафика.Результат КАК Результат, НачисленияДанныеГрафика.ОтработаноДней КАК ОтработаноДней, НачисленияДанныеГрафика.Сотрудник КАК Сотрудник, НачисленияДанныеГрафика.ВидРасчета КАК ВидРасчета, НачисленияДанныеГрафика.ПериодРегистрации КАК ПериодРегистрации ПОМЕСТИТЬ ВТДневнаяСтавка ИЗ РегистрРасчета.Начисления.ДанныеГрафика( ПериодРегистрации МЕЖДУ &Дата1 И &Дата2 И ВидРасчета = &ВидРасчетаПоДневнойСтавке) КАК НачисленияДанныеГрафика ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ВТДневнаяСтавка.ПериодРегистрации КАК ПериодРегистрации, РаботаВПоектах_3СрезПоследних.Проект КАК Проект, ВТПремия.Сотрудник КАК Сотрудник, РаботаВПоектах_3СрезПоследних.Роль КАК Роль, Представления_СрезПоследних_КадроваяИсторияСотрудников.Должность, ВТПремия.ОсновноеЗначениеФактическийПериодДействия КАК ОтработаноДней, ВТДневнаяСтавка.Результат КАК НачисленоПоДневнойСтавке, ВТПремия.Результат / ВТДневнаяСтавка.Результат * 100 КАК ФактическийПроцент, ВТПремия.Результат КАК НачисленоПремии ИЗ ВТПремия КАК ВТПремия ЛЕВОЕ СОЕДИНЕНИЕ ВТДневнаяСтавка КАК ВТДневнаяСтавка ПО (ВТДневнаяСтавка.Сотрудник = ВТПремия.Сотрудник) И ВТПремия.ПериодРегистрации = ВТДневнаяСтавка.ПериодРегистрации ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботаВПоектах_3.СрезПоследних(&Дата2, ) КАК РаботаВПоектах_3СрезПоследних ПО ВТПремия.Сотрудник = РаботаВПоектах_3СрезПоследних.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ Представления_СрезПоследних_КадроваяИсторияСотрудников КАК Представления_СрезПоследних_КадроваяИсторияСотрудников ПО ВТПремия.Сотрудник = Представления_СрезПоследних_КадроваяИсторияСотрудников.Сотрудник
2. Клиент:
- Вкл. Использовать подневную оплату:
- Создать ВР "Премия за проекты".В текущем месяце:
- Из редактировать форму создаём показатель:
- Вести документ "Формирование рг", "Исключение из рг", "Оценка", "Начисление".
БИЛЕТ 4
1. Конфигуратор:
- Подсистема — движения РН.Лимиты, РС.ПлановыеНачисления, РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.
- Док.ВозмещениеСоциальныхРасходов движение РН.Лимиты МО:
Процедура ОбработкаПроведения(Отказ, Режим) Движения.Лимиты_4.Записывать = Истина; // закрываем все предыдущие лимиты Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) КАК ВидДвижения, | ДОБАВИТЬКДАТЕ(ЛимитыОстатки.Год, ГОД, 1) КАК Период, | ЛимитыОстатки.Сотрудник, | ЛимитыОстатки.Год, | ЕСТЬNULL(ЛимитыОстатки.СуммаОстаток, 0) КАК Сумма |ИЗ | РегистрНакопления.Лимиты_4.Остатки(&КонецПериода, ) КАК ЛимитыОстатки"; Запрос.УстановитьПараметр("КонецПериода", НачалоГода(Дата) - 1 ); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Движения.Лимиты.Загрузить( РезультатЗапроса.Выгрузить() ); КонецЕсли; // пишем новые записи Для Каждого ТекСтрокаДанныеРасходов Из ДанныеРасходов Цикл Движение = Движения.Лимиты_4.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Приход; Движение.Период = Дата; Движение.Сотрудник = ТекСтрокаДанныеРасходов.Сотрудник; Движение.Год = НачалоГода(Дата); Движение.Сумма = ТекСтрокаДанныеРасходов.Расход; КонецЦикла; КонецПроцедуры
- Док.РасчетЛимитов движения РС.ПлановеНачисления, РН.Лимиты РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников МФ:
&НаСервере Процедура ЗаполнитьНаСервере() ОбъектФормы = РеквизитФормыВЗначение("Объект"); ПараметрыПолученияСотрудников = КадровыйУчет.ПараметрыПолученияСотрудниковОрганизацийПоСпискуФизическихЛиц(); ПараметрыПолученияСотрудников.Организация = ОбъектФормы.Организация; ПараметрыПолученияСотрудников.Подразделение = ОбъектФормы.Подразделение; ПараметрыПолученияСотрудников.НачалоПериода = НачалоМесяца(ОбъектФормы.Месяц); ПараметрыПолученияСотрудников.ОкончаниеПериода = КонецМесяца(ОбъектФормы.Месяц); Сотрудники = КадровыйУчет.СотрудникиОрганизации(Истина, ПараметрыПолученияСотрудников); ТаблицаСотрудников = Сотрудники.Скопировать( ,"Сотрудник"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КадроваяИсторияСотрудниковСрезПоследних.Должность, | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник, | ПлановыеНачисленияСрезПоследних.Размер КАК Оклад, | ЕСТЬNULL(СуммаВыплатПоДолжностям.КратностьСуммыВыплат, 0) КАК КратностьСуммыВыплат, | РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ), КОНЕЦПЕРИОДА(&Период, МЕСЯЦ), ДЕНЬ) + 1 КАК ДнейВМесяце, | ЕСТЬNULL(ВложенныйЗапрос.ОтработаноДней, 0) КАК ДнейВОтпуске |ИЗ | РегистрСведений.КадроваяИсторияСотрудников.СрезПоследних(&Период, Сотрудник В (&ВТСотрудники)) КАК КадроваяИсторияСотрудниковСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисления.СрезПоследних(, Начисление = &Начисление) КАК ПлановыеНачисленияСрезПоследних | ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ПлановыеНачисленияСрезПоследних.Сотрудник | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СуммаВыплатПоДолжностям_4 КАК СуммаВыплатПоДолжностям | ПО КадроваяИсторияСотрудниковСрезПоследних.Должность = СуммаВыплатПоДолжностям.Должность | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ОтработанноеВремяПоСотрудникам.Сотрудник КАК Сотрудник, | ОтработанноеВремяПоСотрудникам.ОтработаноДней КАК ОтработаноДней | ИЗ | РегистрНакопления.ОтработанноеВремяПоСотрудникам КАК ОтработанноеВремяПоСотрудникам | ГДЕ | ОтработанноеВремяПоСотрудникам.Регистратор ССЫЛКА Документ.ОтпускБезСохраненияОплаты | И ОтработанноеВремяПоСотрудникам.ПериодДействия = НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)) КАК ВложенныйЗапрос | ПО КадроваяИсторияСотрудниковСрезПоследних.Сотрудник = ВложенныйЗапрос.Сотрудник | |СГРУППИРОВАТЬ ПО | КадроваяИсторияСотрудниковСрезПоследних.Должность, | КадроваяИсторияСотрудниковСрезПоследних.Сотрудник, | ПлановыеНачисленияСрезПоследних.Размер, | СуммаВыплатПоДолжностям.КратностьСуммыВыплат, | ЕСТЬNULL(ВложенныйЗапрос.ОтработаноДней, 0)"; Запрос.УстановитьПараметр("ВТСотрудники", ТаблицаСотрудников.ВыгрузитьКолонку("Сотрудник")); Запрос.УстановитьПараметр("Начисление", ОбъектФормы.НачислениеПоОкладу); Запрос.УстановитьПараметр("Период", КонецДня(ОбъектФормы.Месяц)); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); ОбъектФормы.ВыплатыПоРаботникам.Очистить(); Пока Выборка.Следующий() Цикл СтрокаТЧ = ОбъектФормы.ВыплатыПоРаботникам.Добавить(); СтрокаТЧ.Сотрудник = Выборка.Сотрудник; СтрокаТЧ.РазмерОклада = Выборка.Оклад; СтрокаТЧ.КатегорияДолжности = Выборка.Должность.РазрядКатегория; СтрокаТЧ.ПлановыйЛимит = (Выборка.Оклад * Выборка.КратностьСуммыВыплат)/12; СтрокатЧ.КоэффициентВремени = (Выборка.ДнейВМесяце-Выборка.ДнейВОтпуске)/Выборка.ДнейВМесяце; СтрокаТЧ.ЗаработанныйЛимит = СтрокаТЧ.ПлановыйЛимит*СтрокатЧ.КоэффициентВремени; КонецЦикла; ЗначениеВРеквизитФормы(ОбъектФормы, "Объект"); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедуры
МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Процедура ОбработкаПроведения(Отказ, РежимПроведения) ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДанныеДляПроведения = ПолучитьДанныеДляПроведения(); РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, ДанныеДляПроведения); Движения.Лимиты_4.Записывать = Истина; Для каждого Стр Из ДанныеДляПроведения.ЗначенияПоказателей Цикл Если Стр.Показатель = ПоказательСумма Тогда Движение = Движения.Лимиты_4.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.Сотрудник = Стр.Сотрудник; Движение.Год = НачалоГода(Дата); Движение.Сумма = Стр.Значение; КонецЕсли; КонецЦикла; КонецПроцедуры Функция ПолучитьДанныеДляПроведения() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Начисление, | ИСТИНА КАК Используется, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Месяц КАК ДатаСобытия |ИЗ | Документ.РасчетЛимитов_4.ВыплатыПоРаботникам КАК РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам |ГДЕ | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка = &Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник.ФизическоеЛицо КАК ФизическоеЛицо, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Месяц КАК ДатаСобытия, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Организация, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.ПоказательСумма КАК Показатель, | ВЫБОР | КОГДА ЕСТЬNULL(РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.ПлановыйЛимит, 0) > ЕСТЬNULL(Лимиты_4Остатки.СуммаОстаток, 0) | ТОГДА ЕСТЬNULL(Лимиты_4Остатки.СуммаОстаток, 0) | ИНАЧЕ ЕСТЬNULL(РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.ПлановыйЛимит, 0) | КОНЕЦ КАК Значение, | ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Месяц, МЕСЯЦ), СЕКУНДА, 1) КАК ДействуетДо |ИЗ | Документ.РасчетЛимитов_4.ВыплатыПоРаботникам КАК РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Лимиты_4.Остатки(&КонецПериода, ) КАК Лимиты_4Остатки | ПО РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник = Лимиты_4Остатки.Сотрудник |ГДЕ | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка = &Ссылка | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Сотрудник.ФизическоеЛицо, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Месяц, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Организация, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.ПоказательКоэффициент, | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.КоэффициентВремени, | ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка.Месяц, МЕСЯЦ), СЕКУНДА, 1) |ИЗ | Документ.РасчетЛимитов_4.ВыплатыПоРаботникам КАК РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам |ГДЕ | РасчетИНачислениеСуммСоциальныхВыплатВыплатыПоРаботникам.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(Месяц)); РезультатЗапроса = Запрос.ВыполнитьПакет(); ДанныеДляПроведения = Новый Структура; //Набор данных для формирования плановых начислений ПлановыеНачисления = РезультатЗапроса[0].Выгрузить(); ДанныеДляПроведения.Вставить("ДанныеОПлановыхНачислениях", ПлановыеНачисления); //Набор данных для формирования значений показателей ЗначенияПоказателей = РезультатЗапроса[1].Выгрузить(); ДанныеДляПроведения.Вставить("ЗначенияПоказателей", ЗначенияПоказателей); Возврат ДанныеДляПроведения; КонецФункции // () #КонецЕсли
- Отчет СКД:
ВЫБРАТЬ Начисления.ПериодДействия, Начисления.Сотрудник, ЛимитыОстаткиИОбороты.СуммаНачальныйОстаток КАК ОстатокЛимитаНаНачалоПериода, ЛимитыОстаткиИОбороты.СуммаРасход КАК ЗаработаноЛимитаЗаПериод, ЛимитыОстаткиИОбороты.СуммаПриход КАК ПодтвержденныеРасходы, Начисления.Результат КАК ФактическиВозмещенныеРасходы, ЛимитыОстаткиИОбороты.СуммаКонечныйОстаток КАК ОстатокЛимитаНаКонецПериода ПОМЕСТИТЬ ВТ ИЗ РегистрРасчета.Начисления КАК Начисления ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Лимиты_4.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, , ) КАК ЛимитыОстаткиИОбороты ПО Начисления.ПериодРегистрации = ЛимитыОстаткиИОбороты.Период И Начисления.Сотрудник = ЛимитыОстаткиИОбороты.Сотрудник ГДЕ Начисления.ВидРасчета = &ВидРасчета ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ.ПериодДействия КАК Период, ВТ.Сотрудник ПОМЕСТИТЬ ВТНачисления ИЗ ВТ КАК ВТ ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) КАК Организация, ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник, ЗНАЧЕНИЕ(Справочник.ПодразделенияОрганизаций.ПустаяСсылка) КАК Подразделение, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность ПОМЕСТИТЬ Представления_СрезПоследних_КадроваяИсторияСотрудников ИЗ ВТНачисления КАК ВТНачисления ГДЕ "ТолькоРазрешенные" = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ ВТ.ПериодДействия, ВТ.Сотрудник, ВТ.ОстатокЛимитаНаНачалоПериода, ВТ.ЗаработаноЛимитаЗаПериод, ВТ.ПодтвержденныеРасходы, ВТ.ФактическиВозмещенныеРасходы, ВТ.ОстатокЛимитаНаКонецПериода, Представления_СрезПоследних_КадроваяИсторияСотрудников.Должность ИЗ ВТ КАК ВТ ЛЕВОЕ СОЕДИНЕНИЕ Представления_СрезПоследних_КадроваяИсторияСотрудников КАК Представления_СрезПоследних_КадроваяИсторияСотрудников ПО ВТ.Сотрудник = Представления_СрезПоследних_КадроваяИсторияСотрудников.Сотрудник
БИЛЕТ 5
1. Конфигуратор:
- Подсистема — движения РН.ДанныеИндивидуальныхГрафиковСотрудников, РН.ДанныеТабельногоУчетаРабочегоВремениСотрудников, РС.ГрупповыеЗанятия:
- Док.РасписаниеГрупповыхЗанятий движение РС.ГрупповыеЗанятия и РН.ДанныеИндивидуальныхГрафиковСотрудников МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Функция ПустаяТаблицаДанныхОВремени() ТаблицаДанныхОВремени = Новый ТаблицаЗначений; ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата")); ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени")); ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число")); ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число")); ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево")); ТаблицаДанныхОВремени.Колонки.Добавить("Территория", Новый ОписаниеТипов("СправочникСсылка.ТерриторииВыполненияРабот")); ТаблицаДанныхОВремени.Колонки.Добавить("УсловияТруда", Новый ОписаниеТипов("СправочникСсылка.УсловияТруда")); Возврат ТаблицаДанныхОВремени; КонецФункции Процедура ОбработкаПроведения(Отказ, Режим) ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект); ДанныеДляПроведения = получитьДанныеДляПроведения(); УчетРабочегоВремени.ЗарегистрироватьДанныеИндивидуальногоГрафика(Движения, ДанныеДляПроведения, НачалоМесяца(ДатаНачалаПериода)); КонецПроцедуры Функция получитьДанныеДляПроведения() ДатаНачалаПериода = НачалоМесяца(ДатаНачалаПериода); ДатаОкончанияПериода = КонецМесяца(ДатаОкончанияПериода); ВыборкаДанныхОВремени = Документы.ИндивидуальныйГрафик.ДанныеОВремениСотрудников(ЭтотОбъект); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РасписаниеГрупповыхЗанятийТаблицаРасписания.Тренер КАК Тренер, | ЧАС(РасписаниеГрупповыхЗанятийТаблицаРасписания.ДатаНачала) * 60 * 60 + МИНУТА(РасписаниеГрупповыхЗанятийТаблицаРасписания.ДатаНачала) * 60 КАК ВремяНачала, | ЧАС(РасписаниеГрупповыхЗанятийТаблицаРасписания.ДатаОкончания) * 60 * 60 + МИНУТА(РасписаниеГрупповыхЗанятийТаблицаРасписания.ДатаОкончания) * 60 КАК ВремяОкончания, | ВЫБОР | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Понедельник) | ТОГДА 1 | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Вторник) | ТОГДА 2 | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Среда) | ТОГДА 3 | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Четверг) | ТОГДА 4 | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Пятница) | ТОГДА 5 | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Суббота) | ТОГДА 6 | КОГДА РасписаниеГрупповыхЗанятийТаблицаРасписания.ДеньЗанятия = ЗНАЧЕНИЕ(Перечисление.ДниНедели_5.Воскресенье) | ТОГДА 7 | КОНЕЦ КАК ДеньЗанятия, | РасписаниеГрупповыхЗанятийТаблицаРасписания.Занятие |ПОМЕСТИТЬ ВТТаблицаРасписания |ИЗ | Документ.РасписаниеГрупповыхЗанятий_5.ТаблицаРасписания КАК РасписаниеГрупповыхЗанятийТаблицаРасписания |ГДЕ | РасписаниеГрупповыхЗанятийТаблицаРасписания.Ссылка = &Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДанныеОВремениСотрудников.Сотрудник КАК Сотрудник, | ДанныеОВремениСотрудников.Дата, | ДанныеОВремениСотрудников.Часы |ПОМЕСТИТЬ ВТДанныеОВремениСотрудников |ИЗ | &ДанныеОВремениСотрудников КАК ДанныеОВремениСотрудников |ГДЕ | ДанныеОВремениСотрудников.ВидУчетаВремени = &ВидУчетаВремениЯвка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТДанныеОВремениСотрудников.Дата, | ВТТаблицаРасписания.Тренер КАК Тренер, | ДОБАВИТЬКДАТЕ(ВТДанныеОВремениСотрудников.Дата, СЕКУНДА, ВТТаблицаРасписания.ВремяНачала) КАК ДатаНачала, | ДОБАВИТЬКДАТЕ(ВТДанныеОВремениСотрудников.Дата, СЕКУНДА, ВТТаблицаРасписания.ВремяОкончания) КАК ДатаОкончания, | ВТТаблицаРасписания.Занятие, | ВТТаблицаРасписания.ВремяОкончания - ВТТаблицаРасписания.ВремяНачала КАК ВремяЗанятия, | ВТДанныеОВремениСотрудников.Часы |ПОМЕСТИТЬ ВТИтоговыеДанные |ИЗ | ВТТаблицаРасписания КАК ВТТаблицаРасписания | ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДанныеОВремениСотрудников КАК ВТДанныеОВремениСотрудников | ПО (ВТТаблицаРасписания.ДеньЗанятия = ДЕНЬНЕДЕЛИ(ВТДанныеОВремениСотрудников.Дата)) | И ВТТаблицаРасписания.Тренер = ВТДанныеОВремениСотрудников.Сотрудник |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТИтоговыеДанные.Тренер, | ВТИтоговыеДанные.ДатаНачала, | ВТИтоговыеДанные.ДатаОкончания, | ВТИтоговыеДанные.Занятие |ИЗ | ВТИтоговыеДанные КАК ВТИтоговыеДанные |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТИтоговыеДанные.Дата, | ВТИтоговыеДанные.Тренер КАК Сотрудник, | СУММА(ВТИтоговыеДанные.ВремяЗанятия) КАК ВремяЗанятия, | ВТИтоговыеДанные.Часы КАК ЧасыЯвка |ИЗ | ВТИтоговыеДанные КАК ВТИтоговыеДанные | |СГРУППИРОВАТЬ ПО | ВТИтоговыеДанные.Тренер, | ВТИтоговыеДанные.Дата, | ВТИтоговыеДанные.Часы"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ДанныеОВремениСотрудников", ВыборкаДанныхОВремени.Владелец().Выгрузить() ); Запрос.УстановитьПараметр("ВидУчетаВремениЯвка", ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка") ); РезультатыЗапроса = Запрос.ВыполнитьПакет(); // пишем в РС ГрупповыеЗанятия Движения.ГрупповыеЗанятия_5.Записывать = Истина; Движения.ГрупповыеЗанятия_5.Загрузить( РезультатыЗапроса[3].Выгрузить() ); // пишем в РН РабочееВремяСотрудников ТаблицаДанныхОВремени = ПустаяТаблицаДанныхОВремени(); Выборка = РезультатыЗапроса[4].Выбрать(); Пока Выборка.Следующий() Цикл Часов = Выборка.ВремяЗанятия / 60 / 60; Если Выборка.ЧасыЯвка >= Часов Тогда ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить(); ДанныеПоВидуВремениНаДату.Дата = Выборка.Дата; ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Сотрудник; ДанныеПоВидуВремениНаДату.ВидВремени = ВидВремени; ДанныеПоВидуВремениНаДату.Дней = 1; ДанныеПоВидуВремениНаДату.Часов = Часов; ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь; ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить(); ДанныеПоВидуВремениНаДату.Дата = Выборка.Дата; ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Сотрудник; ДанныеПоВидуВремениНаДату.ВидВремени = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка"); ДанныеПоВидуВремениНаДату.Дней = 1; ДанныеПоВидуВремениНаДату.Часов = Выборка.ЧасыЯвка - Часов; ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь; Иначе Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Больше "+Выборка.ЧасыЯвка+" часов не сможет работать сотрудник: "+Выборка.Сотрудник+" в этот день: "+Выборка.Дата; Сообщение.Сообщить(); Отказ = Истина; КонецЕсли; КонецЦикла; Возврат ТаблицаДанныхОВремени КонецФункции #КонецЕсли
- Док.ПерсональныеТренировки движения РН.ДанныеТабельногоУчетаРабочегоВремениСотрудников МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Функция ПустаяТаблицаДанныхОВремени()
ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево"));
ТаблицаДанныхОВремени.Колонки.Добавить("Территория", Новый ОписаниеТипов("СправочникСсылка.ТерриторииВыполненияРабот"));
ТаблицаДанныхОВремени.Колонки.Добавить("УсловияТруда", Новый ОписаниеТипов("СправочникСсылка.УсловияТруда"));
Возврат ТаблицаДанныхОВремени;
КонецФункции
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ДатаНачалаПериода = ПериодРегистрации;
ДатаОкончанияПериода = ПериодРегистрации;
ВыборкаДанныхОВремени = Документы.ТабельУчетаРабочегоВремени.ДанныеОВремениСотрудников(ЭтотОбъект);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПерсональныеТренировкиТаблицаТренировок.НомерСтроки,
| ПерсональныеТренировкиТаблицаТренировок.Тренер КАК Тренер,
| ДОБАВИТЬКДАТЕ(&Дата, СЕКУНДА, ЧАС(ПерсональныеТренировкиТаблицаТренировок.ДатаНачала) * 60 * 60 + МИНУТА(ПерсональныеТренировкиТаблицаТренировок.ДатаНачала) * 60) КАК ДатаНачала,
| ДОБАВИТЬКДАТЕ(&Дата, СЕКУНДА, ЧАС(ПерсональныеТренировкиТаблицаТренировок.ДатаОкончания) * 60 * 60 + МИНУТА(ПерсональныеТренировкиТаблицаТренировок.ДатаОкончания) * 60) КАК ДатаОкончания
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.ПерсональныеТренировки_5.ТаблицаТренировок КАК ПерсональныеТренировкиТаблицаТренировок
|ГДЕ
| ПерсональныеТренировкиТаблицаТренировок.Ссылка = &Ссылка
|
|ИНДЕКСИРОВАТЬ ПО
| Тренер
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВыборкаДанныхОВремени.Сотрудник,
| ВыборкаДанныхОВремени.Часы КАК Часов
|ПОМЕСТИТЬ ВТВыборкаДанныхОВремени
|ИЗ
| &ВыборкаДанныхОВремени КАК ВыборкаДанныхОВремени
|ГДЕ
| ВыборкаДанныхОВремени.ВидУчетаВремени = &ВидУчетаВремениЯвка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВыборкаДанныхОВремени.Сотрудник,
| ВыборкаДанныхОВремени.Часы КАК Часов
|ПОМЕСТИТЬ ВТВыборкаДанныхОВремениГруппа
|ИЗ
| &ВыборкаДанныхОВремени КАК ВыборкаДанныхОВремени
|ГДЕ
| ВыборкаДанныхОВремени.ВидУчетаВремени = &ВидВремениДляГрупповых
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.Тренер,
| РАЗНОСТЬДАТ(ВТ.ДатаНачала, ВТ.ДатаОкончания, СЕКУНДА) КАК ВремяЗанятия,
| ВЫБОР
| КОГДА ЕСТЬNULL(ГрупповыеЗанятия.НомерСтроки, 0) = 0
| ТОГДА 0
| ИНАЧЕ ВТ.НомерСтроки
| КОНЕЦ КАК НомерОшибки
|ПОМЕСТИТЬ ВТРезультат
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрупповыеЗанятия_5 КАК ГрупповыеЗанятия
| ПО ВТ.Тренер = ГрупповыеЗанятия.Тренер
| И (ГрупповыеЗанятия.Активность = ИСТИНА)
| И (ГрупповыеЗанятия.ДатаНачала >= ВТ.ДатаНачала
| И ГрупповыеЗанятия.ДатаНачала < ВТ.ДатаОкончания
| ИЛИ ВТ.ДатаНачала >= ГрупповыеЗанятия.ДатаНачала
| И ВТ.ДатаНачала < ГрупповыеЗанятия.ДатаОкончания)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРезультат.НомерОшибки
|ИЗ
| ВТРезультат КАК ВТРезультат
|ГДЕ
| ВТРезультат.НомерОшибки > 0
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРезультат.Тренер,
| СУММА(ВТРезультат.ВремяЗанятия) КАК ВремяЗанятия,
| ВТВыборкаДанныхОВремени.Часов,
| ЕСТЬNULL(ВТВыборкаДанныхОВремениГруппа.Часов, 0) КАК ЧасовГруппа
|ИЗ
| ВТРезультат КАК ВТРезультат
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВыборкаДанныхОВремени КАК ВТВыборкаДанныхОВремени
| ПО ВТРезультат.Тренер = ВТВыборкаДанныхОВремени.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ ВТВыборкаДанныхОВремениГруппа КАК ВТВыборкаДанныхОВремениГруппа
| ПО ВТРезультат.Тренер = ВТВыборкаДанныхОВремениГруппа.Сотрудник
|
|СГРУППИРОВАТЬ ПО
| ВТРезультат.Тренер,
| ВТВыборкаДанныхОВремени.Часов,
| ЕСТЬNULL(ВТВыборкаДанныхОВремениГруппа.Часов, 0)";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("Дата", ПериодРегистрации);
Запрос.УстановитьПараметр("ВыборкаДанныхОВремени", ВыборкаДанныхОВремени.Владелец().Выгрузить() );
Запрос.УстановитьПараметр("ВидУчетаВремениЯвка", ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка") );
Запрос.УстановитьПараметр("ВидВремениДляГрупповых", ВидВремениДляГрупповых );
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатыЗапроса[4].Выбрать();
Пока Выборка.Следующий() Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "В это время тренер занят на групповых тренировках!";
Сообщение.Поле = "ТаблицаТренировок["+(Выборка.НомерОшибки-1)+"].Тренер";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Отказ = Истина;
КонецЦикла;
Если Отказ = Ложь Тогда
ТаблицаДанныхОВремени = ПустаяТаблицаДанныхОВремени();
Выборка = РезультатыЗапроса[5].Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = ПериодРегистрации;
ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Тренер;
ДанныеПоВидуВремениНаДату.ВидВремени = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка");
ДанныеПоВидуВремениНаДату.Дней = 1;
ДанныеПоВидуВремениНаДату.Часов = Выборка.Часов - Выборка.ВремяЗанятия / 60 / 60;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = ПериодРегистрации;
ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Тренер;
ДанныеПоВидуВремениНаДату.ВидВремени = ВидВремени;
ДанныеПоВидуВремениНаДату.Дней = 1;
ДанныеПоВидуВремениНаДату.Часов = Выборка.ВремяЗанятия / 60 / 60;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
Если Выборка.ЧасовГруппа > 0 Тогда
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = ПериодРегистрации;
ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Тренер;
ДанныеПоВидуВремениНаДату.ВидВремени = ВидВремениДляГрупповых;
ДанныеПоВидуВремениНаДату.Дней = 1;
ДанныеПоВидуВремениНаДату.Часов = Выборка.ЧасовГруппа;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
КонецЕсли;
КонецЦикла;
УчетРабочегоВремени.ЗарегистрироватьДанныеТабеля(Движения, ТаблицаДанныхОВремени, НачалоМесяца(ПериодРегистрации));
//УчетРабочегоВремени.ЗарегистрироватьДанныеИндивидуальногоГрафика(Движения, ТаблицаДанныхОВремени, НачалоМесяца(ДатаНачалаПериода));
КонецЕсли;
КонецПроцедуры
#КонецЕсли
- Отчет СКД:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
НачисленияДанныеГрафика.ПериодДействия,
НачисленияДанныеГрафика.Сотрудник,
НачисленияДанныеГрафика.Результат,
НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия,
СУММА(ВЫБОР
КОГДА НачисленияДанныеГрафика.ОсновноеЗначениеНормаФактическийПериодДействия = 0
ТОГДА ГрафикиРаботыПоВидамВремени.ОсновноеЗначениеНорма
ИНАЧЕ НачисленияДанныеГрафика.ОсновноеЗначениеНормаФактическийПериодДействия
КОНЕЦ) КАК ОсновноеЗначениеНормаФактическийПериодДействия
ПОМЕСТИТЬ ВТДежурство
ИЗ
РегистрРасчета.Начисления.ДанныеГрафика(
ВидРасчета = &Дежурство
И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
ПО (ГрафикиРаботыПоВидамВремени.Месяц = НачисленияДанныеГрафика.ПериодДействия)
И (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени.Наименование = "Рабочее время")
И (ГрафикиРаботыПоВидамВремени.ГрафикРаботы = НачисленияДанныеГрафика.Сотрудник)
И (ГрафикиРаботыПоВидамВремени.ВремяВЧасах = ИСТИНА)
ГДЕ
НачисленияДанныеГрафика.Активность = ИСТИНА
И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
СГРУППИРОВАТЬ ПО
НачисленияДанныеГрафика.ПериодДействия,
НачисленияДанныеГрафика.Сотрудник,
НачисленияДанныеГрафика.Результат,
НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
НачисленияДанныеГрафика.ПериодДействия,
НачисленияДанныеГрафика.Сотрудник,
НачисленияДанныеГрафика.Результат,
НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия
ПОМЕСТИТЬ ВТГрупповыеЗанятия
ИЗ
РегистрРасчета.Начисления.ДанныеГрафика(
ВидРасчета = &ГрупповыеЗанятия
И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
ГДЕ
НачисленияДанныеГрафика.Активность = ИСТИНА
И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
НачисленияДанныеГрафика.ПериодДействия,
НачисленияДанныеГрафика.Сотрудник,
НачисленияДанныеГрафика.Результат,
НачисленияДанныеГрафика.ОсновноеЗначениеФактическийПериодДействия
ПОМЕСТИТЬ ВТПерсональныеТренировки
ИЗ
РегистрРасчета.Начисления.ДанныеГрафика(
ВидРасчета = &ПерсональныеТренировки
И (ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода)) КАК НачисленияДанныеГрафика
ГДЕ
НачисленияДанныеГрафика.Активность = ИСТИНА
И НачисленияДанныеГрафика.Сторно = ЛОЖЬ
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТДежурство.ПериодДействия,
ВТДежурство.Сотрудник,
ВТДежурство.ОсновноеЗначениеНормаФактическийПериодДействия КАК ЧасовПоГрафикуРаботы,
ВТДежурство.ОсновноеЗначениеФактическийПериодДействия КАК ЧасовДежурства,
ВТДежурство.Результат КАК Начислено1,
ВТГрупповыеЗанятия.ОсновноеЗначениеФактическийПериодДействия КАК ЧасовЗанятий,
ВТГрупповыеЗанятия.Результат КАК Начислено2,
ВТПерсональныеТренировки.ОсновноеЗначениеФактическийПериодДействия КАК ЧасовПерсональныхТренировок,
ВТПерсональныеТренировки.Результат КАК Начислено3
ПОМЕСТИТЬ ВТРезультат
ИЗ
ВТДежурство КАК ВТДежурство
ЛЕВОЕ СОЕДИНЕНИЕ ВТГрупповыеЗанятия КАК ВТГрупповыеЗанятия
ПО ВТДежурство.ПериодДействия = ВТГрупповыеЗанятия.ПериодДействия
И ВТДежурство.Сотрудник = ВТГрупповыеЗанятия.Сотрудник
ЛЕВОЕ СОЕДИНЕНИЕ ВТПерсональныеТренировки КАК ВТПерсональныеТренировки
ПО ВТДежурство.ПериодДействия = ВТПерсональныеТренировки.ПериодДействия
И ВТДежурство.Сотрудник = ВТПерсональныеТренировки.Сотрудник
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТРезультат.Сотрудник,
ВТРезультат.ПериодДействия КАК Период
ПОМЕСТИТЬ ВТСотрудники
ИЗ
ВТРезультат КАК ВТРезультат
СГРУППИРОВАТЬ ПО
ВТРезультат.Сотрудник,
ВТРезультат.ПериодДействия
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник,
ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность,
ВТСотрудники.Период
ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников
ИЗ
ВТСотрудники КАК ВТСотрудники
ГДЕ
"ТолькоРазрешенные" = ИСТИНА
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТРезультат.ПериодДействия,
Представления_КадровыеДанныеСотрудников.Должность,
ВТРезультат.Сотрудник,
ВТРезультат.ЧасовПоГрафикуРаботы,
ВТРезультат.ЧасовДежурства,
ВТРезультат.Начислено1,
ВТРезультат.ЧасовЗанятий,
ВТРезультат.Начислено2,
ВТРезультат.ЧасовПерсональныхТренировок,
ВТРезультат.Начислено3
ИЗ
ВТРезультат КАК ВТРезультат
ЛЕВОЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК Представления_КадровыеДанныеСотрудников
ПО ВТРезультат.ПериодДействия = Представления_КадровыеДанныеСотрудников.Период
И ВТРезультат.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник
- Создать график "4 дня по 10 часов в неделю":
- Создать ВР "Оплата за групповые" из типового "Оплаты по часовому тарифу": формула "ЧасовойТарифПоДолжности_5 * ОтработаноЧасовВПределахНормыВремени", Ежемесячно, ), вид времени "Групповые тренировки"; и ВР "Оплата за персональные": формула "…*20/100", если введен вид времени "Персоналная тренировка".
- Создать показатель. При приеме указать ВР и показатель:
- Ввести документ отпуск без сохранения, док."Расписание групп", док "Персональные тренировки", Больничный, Начисление.
БИЛЕТ 6
1. Конфигуратор:
- Подсистема — движения РС.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников, РН.ДанныеТабельногоУчетаРабочегоВремениСотрудников, РН.Бонусы:
- Док. ДанныеОЗвонках движения РС.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников, РН.ДанныеТабельногоУчетаРабочегоВремениСотрудников МФ:
&НаКлиенте Процедура ЗагрузитьИзФайла(Команда) Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим); Если ДиалогОткрытияФайла.Выбрать() Тогда Объект.ТаблицаЗвонков.Очистить(); ТекстФайла = Новый ТекстовыйДокумент; ТекстФайла.Прочитать( ДиалогОткрытияФайла.ВыбранныеФайлы[0] ); ТекстФайла = ТекстФайла.ПолучитьТекст(); Для Счетчик = 1 По СтрЧислоСтрок( ТекстФайла ) Цикл ТекСтрока = СтрПолучитьСтроку( ТекстФайла, Счетчик ); МассивСтроки = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ТекСтрока,";"); Звонок = Объект.ТаблицаЗвонков.Добавить(); Звонок.ВремяНачала = Дата(МассивСтроки[0]+":00"); Звонок.ВремяОкончания = Дата(МассивСтроки[1]+":00"); Звонок.КодОператора = МассивСтроки[2]; Звонок.Оценка = МассивСтроки[3]; КонецЦикла; КонецЕсли; КонецПроцедуры
МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Функция ПустаяТаблицаДанныхОВремени()
ТаблицаДанныхОВремени = Новый ТаблицаЗначений;
ТаблицаДанныхОВремени.Колонки.Добавить("Дата", Новый ОписаниеТипов("Дата"));
ТаблицаДанныхОВремени.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВидВремени", Новый ОписаниеТипов("СправочникСсылка.ВидыИспользованияРабочегоВремени"));
ТаблицаДанныхОВремени.Колонки.Добавить("Дней", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("Часов", Новый ОписаниеТипов("Число"));
ТаблицаДанныхОВремени.Колонки.Добавить("ВЦеломЗаПериод", Новый ОписаниеТипов("Булево"));
ТаблицаДанныхОВремени.Колонки.Добавить("Территория", Новый ОписаниеТипов("СправочникСсылка.ТерриторииВыполненияРабот"));
ТаблицаДанныхОВремени.Колонки.Добавить("УсловияТруда", Новый ОписаниеТипов("СправочникСсылка.УсловияТруда"));
Возврат ТаблицаДанныхОВремени;
КонецФункции
Процедура ОбработкаПроведения(Отказ, Режим)
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);
ДатаНачалаПериода = НачалоМесяца(Дата);
ДатаОкончанияПериода = КонецМесяца(Дата);
ПериодРегистрации = Дата;
ВыборкаДанныхОВремени = Документы.ТабельУчетаРабочегоВремени.ДанныеОВремениСотрудников(ЭтотОбъект);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаЗвонков.КодОператора,
| ТаблицаЗвонков.Оценка,
| РАЗНОСТЬДАТ(ТаблицаЗвонков.ВремяНачала, ТаблицаЗвонков.ВремяОкончания, СЕКУНДА) КАК Время,
| НАЧАЛОПЕРИОДА(ТаблицаЗвонков.ВремяНачала, ДЕНЬ) КАК Дата
|ПОМЕСТИТЬ ВТТаблицаЗвонков
|ИЗ
| &ТаблицаЗвонков КАК ТаблицаЗвонков
|
|ИНДЕКСИРОВАТЬ ПО
| ТаблицаЗвонков.КодОператора
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВыборкаДанныхОВремени.Сотрудник КАК Сотрудник,
| ВыборкаДанныхОВремени.Дата КАК Дата,
| ВыборкаДанныхОВремени.ВидУчетаВремени,
| ВыборкаДанныхОВремени.Дни,
| ВыборкаДанныхОВремени.Часы
|ПОМЕСТИТЬ ВТВыборкаДанныхОВремени
|ИЗ
| &ВыборкаДанныхОВремени КАК ВыборкаДанныхОВремени
|ГДЕ
| ВыборкаДанныхОВремени.ВидУчетаВремени = &ВидУчетаВремениЯвка
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| Дата
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СотрудникиДополнительныеРеквизиты.Ссылка КАК Сотрудник,
| ВТТаблицаЗвонков.Оценка КАК Оценка,
| ВТТаблицаЗвонков.Время КАК Время,
| ВТТаблицаЗвонков.Дата
|ПОМЕСТИТЬ ВТЗвонкиПоСотрудникам
|ИЗ
| ВТТаблицаЗвонков КАК ВТТаблицаЗвонков
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники.ДополнительныеРеквизиты КАК СотрудникиДополнительныеРеквизиты
| ПО ВТТаблицаЗвонков.КодОператора = СотрудникиДополнительныеРеквизиты.Значение
| И (СотрудникиДополнительныеРеквизиты.Свойство = &Свойство)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТЗвонкиПоСотрудникам.Сотрудник,
| СРЕДНЕЕ(ВТЗвонкиПоСотрудникам.Оценка) КАК Оценка,
| СУММА(ВТЗвонкиПоСотрудникам.Время) КАК Время
|ИЗ
| ВТЗвонкиПоСотрудникам КАК ВТЗвонкиПоСотрудникам
|
|СГРУППИРОВАТЬ ПО
| ВТЗвонкиПоСотрудникам.Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТВыборкаДанныхОВремени.Сотрудник,
| ВТВыборкаДанныхОВремени.Дата,
| ВТВыборкаДанныхОВремени.Дни,
| ВТВыборкаДанныхОВремени.Часы,
| СУММА(ВТЗвонкиПоСотрудникам.Время) КАК Время
|ИЗ
| ВТВыборкаДанныхОВремени КАК ВТВыборкаДанныхОВремени
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЗвонкиПоСотрудникам КАК ВТЗвонкиПоСотрудникам
| ПО ВТВыборкаДанныхОВремени.Дата = ВТЗвонкиПоСотрудникам.Дата
| И ВТВыборкаДанныхОВремени.Сотрудник = ВТЗвонкиПоСотрудникам.Сотрудник
|
|СГРУППИРОВАТЬ ПО
| ВТВыборкаДанныхОВремени.Дни,
| ВТВыборкаДанныхОВремени.Часы,
| ВТВыборкаДанныхОВремени.Сотрудник,
| ВТВыборкаДанныхОВремени.Дата";
Запрос.УстановитьПараметр("ТаблицаЗвонков", ТаблицаЗвонков);
Запрос.УстановитьПараметр("Свойство", ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Код оператора (билет 6)"));
Запрос.УстановитьПараметр("ВыборкаДанныхОВремени", ВыборкаДанныхОВремени.Владелец().Выгрузить() );
Запрос.УстановитьПараметр("ВидУчетаВремениЯвка", ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка") );
ТаблицаДанныхОВремени = ПустаяТаблицаДанныхОВремени();
РезультатыЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатыЗапроса[3].Выбрать();
Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Записывать = истина;
Пока Выборка.Следующий() Цикл
Если Выборка.Оценка >= 4 Тогда
Показатель = Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Добавить();
Показатель.ПериодДействия = НачалоМесяца(Дата);
Показатель.Сотрудник = Выборка.Сотрудник;
Показатель.Показатель = ПоказательСредняяОценкаЗаЗвонки;
Показатель.Организация = Организация;
Показатель.Значение = Выборка.Оценка ;
КонецЕсли;
КонецЦикла;
Выборка = РезультатыЗапроса[4].Выбрать();
Пока Выборка.Следующий() Цикл
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = Выборка.Дата;
ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Сотрудник;
ДанныеПоВидуВремениНаДату.ВидВремени = ВидВремени;
ДанныеПоВидуВремениНаДату.Дней = Выборка.Дни;
ДанныеПоВидуВремениНаДату.Часов = Выборка.Время / 60 / 60;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
ДанныеПоВидуВремениНаДату = ТаблицаДанныхОВремени.Добавить();
ДанныеПоВидуВремениНаДату.Дата = Выборка.Дата;
ДанныеПоВидуВремениНаДату.Сотрудник = Выборка.Сотрудник;
ДанныеПоВидуВремениНаДату.ВидВремени = ОбщегоНазначенияКлиентСервер.ПредопределенныйЭлемент("Справочник.ВидыИспользованияРабочегоВремени.Явка");
ДанныеПоВидуВремениНаДату.Дней = Выборка.Дни;
ДанныеПоВидуВремениНаДату.Часов = Выборка.Часы;
ДанныеПоВидуВремениНаДату.ВЦеломЗаПериод = Ложь;
КонецЦикла;
УчетРабочегоВремени.ЗарегистрироватьДанныеТабеля(Движения, ТаблицаДанныхОВремени, НачалоМесяца(ПериодРегистрации) );
КонецПроцедуры
#КонецЕсли
- Док. НачислениеБонусов РН.Бонусы МФ:
&НаСервере Процедура ЗаполнитьНаСервере() ОбъектФорма = РеквизитФормыВЗначение("Объект"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НачисленияДанныеГрафика.Сотрудник, | СУММА(ВЫБОР | КОГДА НачисленияДанныеГрафика.ВидРасчета = &ВидРасчетаРабота | ТОГДА НачисленияДанныеГрафика.ДополнительноеЗначениеФактическийПериодДействия | ИНАЧЕ 0 | КОНЕЦ) КАК ОтработаноЧасов, | СУММА(ВЫБОР | КОГДА НачисленияДанныеГрафика.ВидРасчета = &ВидРасчетаЗвонки | ТОГДА НачисленияДанныеГрафика.ДополнительноеЗначениеФактическийПериодДействия | ИНАЧЕ 0 | КОНЕЦ) КАК ДлительностьОбработанныхЗвонков |ПОМЕСТИТЬ ВТ |ИЗ | РегистрРасчета.Начисления.ДанныеГрафика( | ПериодДействия = &ПериодДействия | И (ВидРасчета = &ВидРасчетаРабота | ИЛИ ВидРасчета = &ВидРасчетаЗвонки) | И Сторно = ЛОЖЬ | И Активность = ИСТИНА) КАК НачисленияДанныеГрафика | |СГРУППИРОВАТЬ ПО | НачисленияДанныеГрафика.Сотрудник |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВТ.Сотрудник, | ВТ.ОтработаноЧасов, | ВТ.ДлительностьОбработанныхЗвонков, | ВТ.ДлительностьОбработанныхЗвонков * 100 КАК НачисленоБонусов |ИЗ | ВТ КАК ВТ |ГДЕ | ВТ.ДлительностьОбработанныхЗвонков >= ВТ.ОтработаноЧасов * 60 / 100"; Запрос.УстановитьПараметр("ВидРасчетаЗвонки", ОбъектФорма.НачислениеЗвонки); Запрос.УстановитьПараметр("ВидРасчетаРабота", ОбъектФорма.НачислениеОклад ); Запрос.УстановитьПараметр("ПериодДействия", НачалоМесяца(ДобавитьМесяц(ОбъектФорма.Дата,-1)) ); РезультатЗапроса = Запрос.Выполнить(); ОбъектФорма.ТаблицаНачислений.Загрузить( РезультатЗапроса.Выгрузить() ); ЗначениеВРеквизитФормы( ОбъектФорма, "Объект" ); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедуры
МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр Бонусы Приход
Движения.Бонусы_6.Записывать = Истина;
Для Каждого ТекСтрокаТаблицаНачислений Из ТаблицаНачислений Цикл
Движение = Движения.Бонусы_6.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Сотрудник = ТекСтрокаТаблицаНачислений.Сотрудник;
Движение.Количество = ТекСтрокаТаблицаНачислений.НачисленоБонусов;
КонецЦикла;
КонецПроцедуры
#КонецЕсли
- Док. СписаниеБонусов РН.Бонусы и РС.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников МФ:
&НаСервере Процедура ЗаполнитьНаСервере() ОбъектФорма = РеквизитФормыВЗначение("Объект"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | БонусыОстатки.Сотрудник, | СУММА(ЕСТЬNULL(БонусыОстатки.КоличествоОстаток, 0)) КАК ИзрасходованоБонусов, | СУММА(ЕСТЬNULL(БонусыОстатки.КоличествоОстаток, 0)) КАК СуммаДохода |ИЗ | РегистрНакопления.Бонусы_6.Остатки(&КонецМесяца, ) КАК БонусыОстатки | |СГРУППИРОВАТЬ ПО | БонусыОстатки.Сотрудник"; Запрос.УстановитьПараметр("ВидРасчетаЗвонки", ОбъектФорма.НачислениеЗвонки); Запрос.УстановитьПараметр("ВидРасчетаРабота", ОбъектФорма.НачислениеОклад ); Запрос.УстановитьПараметр("КонецМесяца", КонецМесяца(ОбъектФорма.Дата) ); РезультатЗапроса = Запрос.Выполнить(); ОбъектФорма.ТаблицаСписаний.Загрузить( РезультатЗапроса.Выгрузить() ); ЗначениеВРеквизитФормы( ОбъектФорма, "Объект" ); КонецПроцедуры &НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); КонецПроцедуры
МО:
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.Бонусы_6.Записать();
Движения.Бонусы_6.Записывать = Истина;
Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Очистить();
Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СписаниеБонусовТаблицаСписаний.Сотрудник КАК Сотрудник,
| СУММА(ЕСТЬNULL(СписаниеБонусовТаблицаСписаний.ИзрасходованоБонусов, 0)) КАК ИзрасходованоБонусов,
| СУММА(ЕСТЬNULL(СписаниеБонусовТаблицаСписаний.СуммаДохода, 0)) КАК СуммаДохода
|ПОМЕСТИТЬ ВТТаблицаСписания
|ИЗ
| Документ.СписаниеБонусов_6.ТаблицаСписаний КАК СписаниеБонусовТаблицаСписаний
|ГДЕ
| СписаниеБонусовТаблицаСписаний.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| СписаниеБонусовТаблицаСписаний.Сотрудник
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| БонусыОстатки.Сотрудник,
| ЕСТЬNULL(БонусыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ВТТаблицаСписания.ИзрасходованоБонусов,
| ВТТаблицаСписания.СуммаДохода
|ИЗ
| ВТТаблицаСписания КАК ВТТаблицаСписания
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.Бонусы_6.Остатки(
| &КонецМесяца,
| Сотрудник В
| (ВЫБРАТЬ
| ВТТаблицаСписания.Сотрудник
| ИЗ
| ВТТаблицаСписания КАК ВТТаблицаСписания)) КАК БонусыОстатки
| ПО ВТТаблицаСписания.Сотрудник = БонусыОстатки.Сотрудник";
Запрос.УстановитьПараметр("КонецМесяца", КонецМесяца(Дата) );
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Если Выборка.КоличествоОстаток < Выборка.ИзрасходованоБонусов Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "У сотрудника "+Выборка.Сотрудник+" осталось только "+Выборка.КоличествоОстаток+" бонусов в этом месяце";
Сообщение.Сообщить();
Отказ = Истина;
Иначе
Движение = Движения.Бонусы_6.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Сотрудник = Выборка.Сотрудник;
Движение.Количество = Выборка.ИзрасходованоБонусов;
Показатель = Движения.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников.Добавить();
Показатель.ПериодДействия = НачалоМесяца(Дата);
Показатель.Сотрудник = Выборка.Сотрудник;
Показатель.Показатель = Справочники.ПоказателиРасчетаЗарплаты.НайтиПоРеквизиту("Идентификатор", "НатуральныйДоход");
Показатель.Организация = Организация;
Показатель.Значение = Выборка.ИзрасходованоБонусов;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецЕсли
- Отчет СКД:
ВЫБРАТЬ НачисленияДанныеГрафика.ПериодДействия КАК ПериодДействия, НачисленияДанныеГрафика.Сотрудник КАК Сотрудник, СУММА(ВЫБОР КОГДА НачисленияДанныеГрафика.ВидРасчета = &ОплатаПоОкладу ТОГДА ЕСТЬNULL(НачисленияДанныеГрафика.ОтработаноЧасов, 0) ИНАЧЕ 0 КОНЕЦ) КАК ОтработаноЧасов, СУММА(ВЫБОР КОГДА НачисленияДанныеГрафика.ВидРасчета = &ОплатаПоОкладу ТОГДА ЕСТЬNULL(НачисленияДанныеГрафика.Результат, 0) ИНАЧЕ 0 КОНЕЦ) КАК НачисленоПоОкладу, СУММА(ВЫБОР КОГДА НачисленияДанныеГрафика.ВидРасчета = &ОплатаЗаЗвонки ТОГДА ЕСТЬNULL(НачисленияДанныеГрафика.Результат, 0) ИНАЧЕ 0 КОНЕЦ) КАК НачисленоПремии, СУММА(ВЫБОР КОГДА НачисленияДанныеГрафика.ВидРасчета = &ОплатаЗаЗвонки ТОГДА ЕСТЬNULL(НачисленияДанныеГрафика.ДополнительноеЗначениеФактическийПериодДействия, 0) ИНАЧЕ 0 КОНЕЦ) КАК ДлительностьЗвонков, СУММА(ВЫБОР КОГДА НачисленияДанныеГрафика.ВидРасчета = &НатуральныйДоход ТОГДА ЕСТЬNULL(НачисленияДанныеГрафика.Результат, 0) ИНАЧЕ 0 КОНЕЦ) КАК СуммаНатуральногоДохода, ЕСТЬNULL(ЗначенияПоказателейНачислений.Значение, 0) КАК СредняяОценкаКлиентов ПОМЕСТИТЬ ВТНачисления ИЗ РегистрРасчета.Начисления.ДанныеГрафика( ПериодДействия МЕЖДУ &НачалоПериода И &КонецПериода И Сторно = ЛОЖЬ И Активность = ИСТИНА) КАК НачисленияДанныеГрафика ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияРазовыхПоказателейРасчетаЗарплатыСотрудников КАК ЗначенияПоказателейНачислений ПО (ЗначенияПоказателейНачислений.Активность = ИСТИНА) И (ЗначенияПоказателейНачислений.Показатель = &СредняяОценка) И (ЗначенияПоказателейНачислений.Сотрудник = НачисленияДанныеГрафика.Сотрудник) И (ЗначенияПоказателейНачислений.ПериодДействия = НачисленияДанныеГрафика.ПериодДействия) СГРУППИРОВАТЬ ПО НачисленияДанныеГрафика.ПериодДействия, НачисленияДанныеГрафика.Сотрудник, ЕСТЬNULL(ЗначенияПоказателейНачислений.Значение, 0) ИНДЕКСИРОВАТЬ ПО ПериодДействия, Сотрудник ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТРезультат.Сотрудник, ВТРезультат.ПериодДействия КАК Период ПОМЕСТИТЬ ВТСотрудники ИЗ ВТНачисления КАК ВТРезультат СГРУППИРОВАТЬ ПО ВТРезультат.Сотрудник, ВТРезультат.ПериодДействия ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗРЕШЕННЫЕ ЗНАЧЕНИЕ(Справочник.Сотрудники.ПустаяСсылка) КАК Сотрудник, ЗНАЧЕНИЕ(Справочник.Должности.ПустаяСсылка) КАК Должность, ВТСотрудники.Период ПОМЕСТИТЬ Представления_КадровыеДанныеСотрудников ИЗ ВТСотрудники КАК ВТСотрудники ГДЕ "ТолькоРазрешенные" = ИСТИНА ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТНачисления.ПериодДействия, ВТНачисления.Сотрудник, ВТНачисления.ОтработаноЧасов, ВТНачисления.НачисленоПоОкладу, ВТНачисления.СредняяОценкаКлиентов, ВТНачисления.НачисленоПремии, ВТНачисления.ДлительностьЗвонков, ЕСТЬNULL(БонусыОстаткиИОбороты.КоличествоПриход, 0) КАК НачисленоБонусов, ЕСТЬNULL(БонусыОстаткиИОбороты.КоличествоНачальныйОстаток, 0) КАК ОстатокБонусовНаНачалоПериода, ЕСТЬNULL(БонусыОстаткиИОбороты.КоличествоРасход, 0) КАК ПотраченоБонусов, ВТНачисления.СуммаНатуральногоДохода, ЕСТЬNULL(БонусыОстаткиИОбороты.КоличествоКонечныйОстаток, 0) КАК ОстатокБонусовНаКонецПериода, Представления_КадровыеДанныеСотрудников.Должность ИЗ ВТНачисления КАК ВТНачисления ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Бонусы_6.ОстаткиИОбороты( &НачалоПериода, &КонецПериода, Месяц, , Сотрудник В (ВЫБРАТЬ ВТНачисления.Сотрудник ИЗ ВТНачисления КАК ВТНачисления)) КАК БонусыОстаткиИОбороты ПО ВТНачисления.ПериодДействия = БонусыОстаткиИОбороты.Период И ВТНачисления.Сотрудник = БонусыОстаткиИОбороты.Сотрудник ЛЕВОЕ СОЕДИНЕНИЕ Представления_КадровыеДанныеСотрудников КАК Представления_КадровыеДанныеСотрудников ПО ВТНачисления.Сотрудник = Представления_КадровыеДанныеСотрудников.Сотрудник
- Создать ВР "Премия за звонки" как новый. Создать показатели:
- Создать ВР "Доход в натуральной форме". Установить флаг в настройках:
- 1 -й месяц ввести документ "Данные о звонках", док."Начисление ЗП". 2-й месяц ввести документ "Данные о звонках", док "Начисление Бонусов", док "Списание бонусов", потом "Начисление ЗП".
P.S. Решения в выгруженных ИБ и методики могут быть неверными.
Related Posts
- Получение логина и пароля техподдержки 1С из базы
- Класс для вывода отчета в Excel
- Счет-фактура для УПП
- Библиотека классов для создания внешней компоненты 1С на C#
- Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
- Прайс-лист с артикулом в отдельной колонке
Добрый день.
Потратил пару месяцев на подготовку к экзамену. Надеюсь, что публикация будет полезна.
С уважением, Игорь.
На экзамене попадаются эти билеты? Или очень похожие?
(2) darkmessiahan, Очень похожие. Не сложнее. Чуть проще, например, дали билет 3(в задачнике 2) там тоже самое, но не было категорий. Подробнее здесьсм. пост 4 .
Некоторые детали могу в личку написать.
Я бы все таки избавился от сокращений с:
Подсистема — РС.ПлановыеНачисления, РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, 2 документа, отчет.
Док.ГрафикРаботыВОсобыхУсловиях движения РС.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, МО:
на:
Подсистема — РегистрСведений.ПлановыеНачисления (что это значит не понял), Используем РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, Добавить 2 документа и отчет.
Документ первый — ГрафикРаботыВОсобыхУсловиях движения: РегистрСведений.ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, МодульОбъекта:
ВР это что? Вид Работ? который как бы вид начисления?
(5) darkmessiahan, ВР происходит от древнего из 77 Виды расчетов 🙂
На экзамене как лучше. С начало внести доработки в конфигураторе, потом данные программу или наоборот?
Я бы еще добавил в описание реквизиты, которые есть у добавленных документов, получиться полноценная шпора, а то приходиться свою шпору писать.
и тут ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудникови пробел пропущен.
(7) darkmessiahan, Конфигуратор первым — там всё до конца и нужно(для меня так) найти в лок. сети консоль отчетов и добавить её. Отчет все-таки у меня с первого раза не получался.
Иначе это будет творчество, которого не должно быть на экзамене :).
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.РасчетЗарплатыРасширенный.Модуль(660)}: Поле объекта не обнаружено (ГоловнаяОрганизация)
НоваяСтрока.ГоловнаяОрганизация = Строка.ГоловнаяОрганизация;
Это на последнем релизе, там этот общий модуль значительно изменился.
(10) darkmessiahan, На каком примере (билете)?
(11) Только когда сегодня утром проснулся, вспомнил что забыл написать в каком билете. Билет первый! Документ ВводПоказанийУсловийСреды по моему.
Если найду решением сам выложу. А так попробуй обновить ЗУП до последнего. Или проделать все дополнения на последней версии ЗУПа.
На экзамене дают последнюю конфигурацию ЗУПа? и ее нужно доработать?
(13) user_2010, Естественно Ватсон.
Доработать и внести типовой пример, минимум 2 месяца с двумя работниками.
Учитывая что ЗУП 3.0 это сырое Г… то переделывать билеты придется долго и мучительно после каждого обновления.
(13) user_2010, Пустую.Не демо.
Так работает, хз правильно ли
Показать
(16) darkmessiahan, Обновил до релиза 3.0.24.125 и получил ошибку. Ошибка в документах которые в обработке проведения применяют функцию «РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, ДаннныеДляПроведения)»: док.ВводПоказанийУсловийСреды_1, док.ФормированиеРабочейГруппыПроекта_3 и док.ИсключениеИзРабочейГруппыПроекта_3.
Ты прав — надо добавить это строки в запросе:
Обновил коды в публикации и добавил выгрузки ИБ. Добавил т.к. может ещё что-нить вылезти.
Во втором билете есть ошибочка, кадровый перевод устанавливает Сидоров Игорю час тариф ставку 100р. час, в условии 150р. час для 2 категории.
Во втором билете отгулы не трогал?
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.УчетРабочегоВремени.Модуль(3963)}: Поле объекта не обнаружено (ДанныеТабельногоУчетаРабочегоВремениСотрудников)
Запись = Движения.ДанныеТабельногоУчетаРабочегоВремениСотрудников.Добавить();
Нашел свою ошибку, не те движения выбрал
2 Билет. Что то у меня Зарплата не видит Отгулы и работу в цеху. После обновления заполнение Начисления ЗП работает нормально?
Как включить отработаночасоввпределахнормывремени ?
(21) darkmessiahan, при обновлении релизом 3.0.24 заменился на показатель «ВремяВЧасах». В типовом начислении по окладу(время в часах) и в «самопальном» для экзамена.
(22) В остальном второй билет работает! =).
Интересно, приду такой на экзамен, 1С показатели заменили. И хз че делать. В описании про показатели отработаночасоввпределахнормывремени до сих пор есть.
(20) darkmessiahan, При обновлении создалось новое начисление и без зависимостей. Надо настроить зависимости или в кадровом документе поправить.
(24) ДА вроде и без зависимостей ЗП начислялась, смотря на что они влияют.
(25) darkmessiahan, Спасибо. Будет время проверить все билеты надо. А лучше теперь подождать пока 25 релиз.
IgorXml, что есть в запросе для документа «Ввод показаний условий среды» параметры: ПоказательГрафика, ПоказательПроцент, Начисление? Что эти показатели представляют из себя в самом документе?
Начисление — Оплата по дневному тарифу не исчезал? Вид времени не менялся?
Опять не могу найти
нашел, при заполнении, начальных настроек
3 билет, формирование раб группы
Ошибка при выполнении обработчика — ‘ОбработкаПроведения’
по причине:
{ОбщийМодуль.РасчетЗарплатыРасширенный.Модуль(660)}: Поле объекта не обнаружено (ГоловнаяОрганизация)
НоваяСтрока.ГоловнаяОрганизация = Строка.ГоловнаяОрганизация;
Показать
(29) darkmessiahan, У меня нет ошибки. Так проводится:
Так как в типовом док. «ИзменениеПлановыхНачислений» берется из сотрудника.
Рекомендую веб-курс по ЗУП 3.0http://www.profbuh8.ru/?utm_partner=7040 . Если зарегистрироваться, то можно посмотреть бесплатные видеоматериалы. Все материалы ведет Грянина Е. — экзаменатор ЗУП.
http://forum.infostart.ru/forum34/topic138822/ .
Можно организовывать совместную покупку как я делал здесь
В первом билете: если в документе ГрафикРаботыВОсобыхУсловиях ввести для одного сотрудника 2 периода, например, с 5.02.2015 по 5.02.2015 и с 9.02.2015 по 9.02.2015, то в документе начисление зарплаты, доплата начисляется за три дня (5,6 и 9 февраля). Если кто-нибудь исправил эту ошибку, подскажите как это сделали.
1) спасибо, за подробный разбор. Даже после прочтения книжки начать решать задачи не получалось.
2) Билет 2. Никак не получается начислить зарплату по введенным начислениям. Мало того, даже в приведенной базе «заполнить» приводит только к пересчету по тарифу, остальных начислений нет.
Насколько я понимаю, это вводилось не вручную. База файловая…Если не сложно, прокомментируйте, пожалуйста.
Добрый вечер, вопрос — зачем в 3 билете измерения проект и роль в РС??? В задании ведь сказано что сотрудник может участвовать только в одном проекте? Или просто задание поменялось с того времени? Может лучше сделать проверку при проведении документа на участие сотрудника в проектах и случае участия программно формировать документ исключение из проектной группы и включать его в новый проект?
mitia.mackarevich для того чтобы сотрудник в один день мог завершить работу на проекте в роли руководитель и начать на этом же проекте с ролью исполнитель если периодичность регистра «День». Я делал периодичность регистра «По позиции регистратора» и измерение проект для получения среза при проверки работает ли сотрудник по данному проекту при исключении из рабочий группы
(33) StudentTr,
Насколько я понимаю, это вводилось не вручную. База файловая…Если не сложно, прокомментируйте, пожалуйста.
Проверил. Снять все с проведения. Лучше кадровые тоже. Потом документы расчетов надо последовательно в одном месяце «Данные пропускной системы» -> «Документ отгул» -> «Начисление». На перерасчетах наверно не пройдет, но на экзамене не слышал чтобы кто-то перерасчеты требовал. Я дальше не стат разбираться.
А вот в отчете это поле «НачисленияДанныеГрафика.ОсновноеЗначениеПериодДействия» должно заполняться, но не заполняется после обновления. Может в новых релизах заполнится.
Спасибо!)
(37) StudentTr, Для подготовки мне помог курс1C:Образование за 1350 руб.
(35) mrBart, однако такая структура противоречит логике(в том плане что допускает возможность что сотрудника каким то образом можно занести на два разных проекта одновременно) как ни крути на Спец по платформе за такое бы сняли баллы),я имею в виду структуру. А если сотрудник завершил работу и перешел на другую роль — и все в один день? Зачем?
Если будет одно измерение сотрудник — срез по нему даст нам проект(последний) на котором он работает и в качестве кого (для этой задачи этого достаточно). Хотя если честно для меня это уже неважно) Я так понял самое главное — правильно организовать логику решения — использовать регистры и стандартные механизмы «правильно»( как рекомендует 1с) в сочетании со своими доработками.
Спасибо, за ответ
(39) mitia.mackarevich,
Спасибо, за ответ
Вот и я все решения просматривал через пояснения в курсеhttp://www.edu.1c.ru
(41) еще один вопрос возник почему в первом билете в отличие от второго и третьего — мы используем средний процент? Ведь если в середине месяца будет КП на другую ставку то результат будет неверным???Я разобрал все билеты лишь по одному этому вопрос)))) Попробывал закинуть значение показателей на каждый день для сотрудника — получил верный результат но много строк в документе начисление зарплаты. Поэтому возник вопрос по среднему проценту????
(42) mitia.mackarevich,
Это я слишком упростил. Думал проскочит :). Я планировал на 3 сдать. Этот билет не попался. 🙂
Еще один вопрос возник. 5 билет. Если в один и тот же день, сотрудник ведет и группу и индивидуальную тренировку(время не перекрывается), то начисления за ведение группы не происходит. Это я не правильно условия понимаю, или здесь надо что-то изменить?
(44) StudentTr, Почему? Ведь мы же проверяем на групповое время и если оно есть пишем в ДанныеТабльногоУчета?
(45) mitia.mackarevich, Спасибо! Понял в чем проблема. Попробую.
Спасибо! Ваши материалы очень пригодились в подготовке!
Решение 1-го билета некорректное (экзаменатор ответил что нельзя в нем использовать плановые начисления и средний процент). Поэтому возникает вопрос — как связать конкретный день с показателем условия работы на этот день?
(48) alres, посмотрите форум чистова недавно выкладывал пример реализации, на экзамене мне его зачли
А что такое МО в описании объектов?
(49) mitia.mackarevich, а какой у Вас ник на форуме Чистова, чтобы найти ваше решение, ну или ссылку скиньте пожалуйста.
(50) Kaval88, Модуль объекта я так понял)
…выброшенные на ветер 3 СМ.
посмотрел решения 1 и 2 билетов, на экзамене это твердая 2.
забавное сведение ресурсов в отчете 2 билета левыми соединениями по периоду — автор предполагает, что если в периоде расчета не было начислений по работам в особых условиях, то и отгулов тоже не может быть…
(53) 3 года назад можно было сдать и сам сдал по этим билетам. Сейчас похоже эти решения устарели.