Автор Тема: ЗИКГУ. Задача 2.4  (Прочитано 1676 раз)

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

Alexander

  • Пользователь
  • **
  • Сообщений: 33
  • ФИО: Kulikov Alexander
ЗИКГУ. Задача 2.4
« : Август 15, 2020, 02:31:13 pm »
Выкладываю свое решение по задаче. Очень надеюсь получить критические замечания, которые помогут на экзамене.

Суть задачи:
Работникам выплачивается должностной оклад плюс доплата за работу с секретностью (начисляется одним видом начисления). Размер доплаты зависит от вида секретности (Секретные – 20, Совершенно секретные – 35, Особой важности – 50 процентов).
Назначение и изменение доплаты происходит с даты допуска по каждому виду секретности. Учесть, что работник может иметь доступ к нескольким видам секретности по различным видам информации (гостайна, служебная тайна, военная тайна)
Отчет:

Работник                           Период1                                                      Период2   
              Количество доступов   Доплата за секретность   Количество доступов   Доплата за секретность
<Сотрудник> - всего,
           в том числе
            
<вид секретности>         

Суть решения:
В результате проведения всех наших документов сотруднику назначаются дополнительные плановые начисления (по одному ВР) на основании нашего документа, что позволяет отслеживать все назначения доплат за работу с секретными материалами. То есть, движения по документу происходят в «свой» регистр сведений (НЕ РН!) и типовые РС ПлановыеНачисления и ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников.
   

Подробное описание решения:

В приложении:
Добавляем вид начисления: Надбавка за секретность (экзамен), ежемесячное, с формулой расчета ПроцентДоплатыЗаСекретность / 100 * РасчетнаяБаза, который «поддерживает  несколько одновременно действующих начислений»
Расчетная База:  Должностной оклад то текущему месяцу.
ПроцентДоплатыЗаСекретность – Числовой показатель постоянного использования для сотрудника.

В Конфигурации:
Добавляем справочники: ВидыСекретности, ВидыИнформации с предопределенными элементами

Добавляем (можно периодический до дня) РС: ПроцентыДоплатыЗаСекретность с измерением ВидСекретности с ресурсом ПроцентНадбавки (может быть, было достаточно обойтись реквизитом справочника ВидыСекретности)

Добавляем документ ДоступКРаботеССекретнойИнформацией с реквизитами Организация, ДатаНачалаДействия. ТЧ Допуски с реквизитами Сотрудник, ВидИнформации, ВидСекретности
Движения: РС ПлановыеНачисления, ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников и собственный ДопускиКСекретам.

Добавляем РС ДопускиКСекретам с измерениями Сотрудник, ВидСекретности, ВидИнформации с ресурсом Действует (что позволят отследить каждый вид доступа).

В модуле документа

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
ДатаНачалаДействия = НачалоДня(ДатаНачалаДействия);
КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, Режим)

// Проведение документа
ПроведениеСервер.ПодготовитьНаборыЗаписейКРегистрацииДвижений(ЭтотОбъект);

ПроверкаДублирования(Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;

// регистр ДопускиКСекретам
Движения.ДопускиКСекретам.Записывать = Истина;
Для Каждого ТекСтрокаДопуски Из Допуски Цикл
Движение = Движения.ДопускиКСекретам.Добавить();
Движение.Период = ДатаНачалаДействия;
Движение.Сотрудник = ТекСтрокаДопуски.Сотрудник;
Движение.ВидИнформации = ТекСтрокаДопуски.ВидИнформации;
Движение.ВидСекретности = ТекСтрокаДопуски.ВидСекретности;
Движение.Действует = Истина;
КонецЦикла;

СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("ДанныеОПлановыхНачислениях", ТаблицаПлановыхНачислений());
СтруктураДанных.Вставить("ЗначенияПоказателей", ТаблицаЗначенийПоказателей());
РасчетЗарплаты.СформироватьДвиженияПлановыхНачислений(ЭтотОбъект, Движения, СтруктураДанных, Ложь);

КонецПроцедуры

            

Прочие процедуры модуля объекта документа

Функция ТаблицаПлановыхНачислений()

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

Запрос.УстановитьПараметр("Показатель", Справочники.ПоказателиРасчетаЗарплаты.НайтиПоРеквизиту("Идентификатор", "ПроцентДоплатыЗаСекретность"));
Запрос.УстановитьПараметр("Ссылка", Ссылка);

Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Функция ТаблицаЗначенийПоказателей()

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

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

Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Процедура ПроверкаДублирования(Отказ)

Движения.ДопускиКСекретам.Записать();

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

Запрос.УстановитьПараметр("Дата",   ЭтотОбъект.ДатаНачалаДействия);
Запрос.УстановитьПараметр("Ссылка", Ссылка);

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

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

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ТекстСообщения = СтрШаблон("Повторная установка доступа секретности %1, %2, %3"),
ВыборкаДетальныеЗаписи.Сотрудник,
ВыборкаДетальныеЗаписи.ВидИнформации,
ВыборкаДетальныеЗаписи.ВидСекретности);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,,,,Отказ);
КонецЦикла;

КонецПроцедуры


И, наконец, расширяем определяемые типы ОснованиеНачисления, ОснованиеНачисленияУдержания добавив наш документ.

ОТЧЕТ

Предполагаем, что ресурс «количество доступов» должен рассчитываться на конец каждого месяца отчета.
Поэтому создаем два набора данных

Начисления


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


Доступы


ВЫБРАТЬ
&Период КАК Месяц,
ДопускиКСекретамСрезПоследних.Сотрудник КАК Сотрудник,
ДопускиКСекретамСрезПоследних.ВидСекретности КАК ВидСекретности,
СУММА(1) КАК КоличествоДоступов
ИЗ
РегистрСведений.ДопускиКСекретам.СрезПоследних(КОНЕЦПЕРИОДА(&Период, МЕСЯЦ), ) КАК ДопускиКСекретамСрезПоследних
ГДЕ
ДопускиКСекретамСрезПоследних.Действует

СГРУППИРОВАТЬ ПО
НАЧАЛОПЕРИОДА(ДопускиКСекретамСрезПоследних.Период, МЕСЯЦ),
ДопускиКСекретамСрезПоследних.Сотрудник,
ДопускиКСекретамСрезПоследних.ВидСекретности

Связываем наборы по Сотрудник и Месяц (здесь во второй набор передаем параметр Период).

Настройки отчета:
Таблица с группировками Сотрудник, ВидСекретности в строках и Период в колонках
Выводимые ресурсы КоличествоДоступов, ДоплатаЗаСекретность

Для придания нужного вида можно добавить Пользовательское поле СотрудникВТомЧисле, с представлением Представление(Сотрудник) + " - итого, в том числе"
У реквизита ВидСекретности убираем отображениея в заголвке через условное оформление.

Кажется все.
« Последнее редактирование: Август 15, 2020, 02:38:00 pm от Alexander »