Как разработать методику обработки данных для...
-

Как разработать методику обработки данных для изменения категории URSA для принятых сотрудников

0
1808
13.05.2025 Марс Айзатуллов

Содержание:


1.    Реализация присвоения категорий "Participant" и "Exit" в конфигурации ЗУП 3.1

 

Требуется разработать обработку для изменения категории URSA для принятых сотрудников.

При проведении документа кадрового приема (при синхронизации с базами источниками) необходимо присваивать новым сотруднику категорию "Participant".

При повторном приеме сотрудника также присваивается категория "Participant".

Если у документа ПриемНаРаботу установлен булевый признак NOE_ТехническийПрием то процедуру присваивания не производим.

Требуется разработать обработку для изменения категории URSA для уволенных сотрудников.

При проведении документа кадрового увольнения (при синхронизации с базами источниками) базы Консолидации необходимо присваивать уволенным сотрудникам категорию "Exit"

Если у документа Увольнение установлен булевый признак NOE_ТехническоеУвольнение то процедуру присваивания не производим.

Конфигурация ЗУП 3.1 КОРП  


2.    Решение задачи с использованием расширения 1С NAC_Доработки

 

Задачу решаем с использования расширения NAC_Доработки.

Для документа ПриемНаРаботу:

1.    Создаем подписку на событие NAC_УстановкаУровниURSA_участник для

ДокументОбъект.ПриемНаРаботу на событие ОбработкаПроведения

обработчик NAC_УстановкаУровниURSA_участникОбработкаПроведения

 

2.    Создаем для подписки на событие NAC_УстановкаУровниURSA_участник общий модуль NAC_УстановкаУровниURSA

 

3.    В общем модуле создаем экспортную процедуру NAC_УстановкаУровниURSA_участникОбработкаПроведения

 

Для документа Увольнение:

1.    Создаем подписку на событие NAC_УстановкаУровниURSA_уволен для

ДокументОбъект. Увольнение на событие ОбработкаПроведения

обработчик NAC_УстановкаУровниURSA_уволенОбработкаПроведения

 

2.    В общем модуле NAC_УстановкаУровниURSA создаем экспортную процедуру

            NAC_УстановкаУровниURSA_уволенОбработкаПроведения

 

Процедуры и функции общего модуля расширения:

Процедура NAC_УстановкаУровниURSA_участникОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

   

    Если Источник.NOE_ТехническийПрием Тогда

       

        Возврат;

       

    КонецЕсли;

   

    ЭтоБазаКонсолидации = ПолучитьПризнакЭтоБазаКонсолидации();  

   

    //Сообщить("ЭтоБазаКонсолидации = " + ЭтоБазаКонсолидации);

   

    Если ЭтоБазаКонсолидации = Истина Тогда

       

        Возврат;

       

    КонецЕсли;

   

    ФизическоеЛицо = Источник.ФизическоеЛицо;

   

    НаборЗаписей = РегистрыСведений.NOE_СтатусЧленстваВURSA.СоздатьНаборЗаписей();

   

    УровеньURSA = Справочники.УровниURSA.НайтиПоНаименованию("Участник", Истина);

   

    НаборЗаписей.Отбор.ФизическоеЛицо.Установить(ФизическоеЛицо);

    НаборЗаписей.Прочитать();

   

    Если НаборЗаписей.Количество() = 0 Тогда

       

        МаксимальныйНомер = ПолучитьМаксимальныйНомер();

       

        МаксимальныйНомер = Формат(Число(МаксимальныйНомер), "ЧГ=0");

       

        Номер = Число(МаксимальныйНомер) + 1;

       

        Номер = Формат(Номер, "ЧГ=0");

       

    Иначе

       

        СтараяЗапись = НаборЗаписей[0];

       

        Номер = СтараяЗапись.Номер;

       

        МаксимальныйНомер = Номер;

       

    КонецЕсли;

   

    НоваяЗапись = Неопределено;

   

    ВидОперацииВступил = Перечисления.NOE_ВидДвиженияURSA.Вступил;

   

    Для каждого Запись Из НаборЗаписей Цикл

   

        Если Запись.Период = Источник.ДатаПриема и Запись.ВидОперации = ВидОперацииВступил Тогда

       

             НоваяЗапись = Запись;   

            

             Прервать;

       

        КонецЕсли;

   

   КонецЦикла;

   

    Если НоваяЗапись = Неопределено Тогда

   

        НоваяЗапись = НаборЗаписей.Добавить();

   

    КонецЕсли;

   

    URSABage = "P" + Номер;

   

    //Сообщить("МаксимальныйНомер = " + МаксимальныйНомер);

    //Сообщить("Номер = " + Номер);

   

    НоваяЗапись.УровеньURSA    = УровеньURSA;

    НоваяЗапись.Период         = Источник.ДатаПриема;

    НоваяЗапись.ФизическоеЛицо = ФизическоеЛицо;

    НоваяЗапись.ВидОперации    = ВидОперацииВступил;

    НоваяЗапись.Номер          = Номер;

    НоваяЗапись.URSABage       = URSABage;

   

    НаборЗаписей.Записать();

   

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

 

Процедура NAC_УстановкаУровниURSA_уволенОбработкаПроведения(Источник, Отказ, РежимПроведения) Экспорт

   

    Если Источник.NOE_ТехническоеУвольнение Тогда

       

        Возврат;

       

    КонецЕсли;

   

    ЭтоБазаКонсолидации = ПолучитьПризнакЭтоБазаКонсолидации();  

   

    //Сообщить("ЭтоБазаКонсолидации = " + ЭтоБазаКонсолидации);

   

    Если ЭтоБазаКонсолидации = Истина Тогда

       

        Возврат;

       

    КонецЕсли;

   

    ФизическоеЛицо = Источник.ФизическоеЛицо;

   

    НаборЗаписей = РегистрыСведений.NOE_СтатусЧленстваВURSA.СоздатьНаборЗаписей();

   

    УровеньURSA = Справочники.УровниURSA.НайтиПоНаименованию("Уволен", Истина);

   

    НаборЗаписей.Отбор.ФизическоеЛицо.Установить(ФизическоеЛицо);

    НаборЗаписей.Прочитать();  

   

    Если НаборЗаписей.Количество() > 0 Тогда

       

        Запись = НаборЗаписей[0];

       

        Номер = Запись.Номер;

       

        URSABage = "E" + Номер;

       

        НоваяЗапись = Неопределено;

       

        ВидОперацииВышел = Перечисления.NOE_ВидДвиженияURSA.Вышел;

       

        Для каждого Запись Из НаборЗаписей Цикл

           

            Если Запись.Период = Источник.ДатаУвольнения и Запись.ВидОперации = ВидОперацииВышел Тогда

               

                НоваяЗапись = Запись;   

               

                Прервать;

               

            КонецЕсли;

           

        КонецЦикла;

       

        Если НоваяЗапись = Неопределено Тогда

           

            НоваяЗапись = НаборЗаписей.Добавить();

           

        КонецЕсли;

       

        НоваяЗапись.УровеньURSA    = УровеньURSA;

        НоваяЗапись.Период         = Источник.ДатаУвольнения;

        НоваяЗапись.ФизическоеЛицо = ФизическоеЛицо;

        НоваяЗапись.ВидОперации    = ВидОперацииВышел;

        НоваяЗапись.Номер          = Номер;

        НоваяЗапись.URSABage       = URSABage;

       

        НаборЗаписей.Записать();

       

    КонецЕсли;

   

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

 

Функция ПолучитьМаксимальныйНомер() Экспорт

   

    МаксимальныйНомер = 0;

   

    Запрос = Новый Запрос;

    Запрос.Текст =

    "ВЫБРАТЬ ПЕРВЫЕ 1

    |    NOE_СтатусЧленстваВURSA.Номер КАК МаксимальныйНомер

    |ИЗ

    |    РегистрСведений.NOE_СтатусЧленстваВURSA КАК NOE_СтатусЧленстваВURSA

    |

    |УПОРЯДОЧИТЬ ПО

    |    Номер УБЫВ";

   

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

   

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

   

    Если Выборка.Следующий() Тогда

       

        МаксимальныйНомер = Выборка.МаксимальныйНомер;   

       

    КонецЕсли;  

   

    Возврат МаксимальныйНомер;

   

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

 

Функция ПолучитьПризнакЭтоБазаКонсолидации() Экспорт

   

    ЭтоБазаКонсолидации = Ложь;

   

    Запрос = Новый Запрос;

    Запрос.Текст = "ВЫБРАТЬ

    |    NAC_Константы.Значение КАК ЭтоБазаКонсолидации

    |ИЗ

    |    ПланВидовХарактеристик.NAC_Константы КАК NAC_Константы

    |ГДЕ

    |    NAC_Константы.Ссылка = ЗНАЧЕНИЕ(ПланВидовХарактеристик.NAC_Константы.NOE_ЭтоБазаКонсолидации)";

   

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

   

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

   

    Если Выборка.Следующий() Тогда

       

        ЭтоБазаКонсолидации = Выборка.ЭтоБазаКонсолидации;   

       

    КонецЕсли;  

   

    Возврат ЭтоБазаКонсолидации;

   

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

 

Функция ПолучитьПризнакЭтоМембер(УровеньURSA) Экспорт

   

    ЭтоМембер = Ложь;

   

    СпрУровниURSA = Справочники.УровниURSA;

   

    Массив = Новый Массив;

    Массив.Добавить(СпрУровниURSA.НайтиПоНаименованию("Главный Руководящий Член Сообщества (CECM)", Истина));

    Массив.Добавить(СпрУровниURSA.НайтиПоНаименованию("Руководящий Член Сообщества (ECM)", Истина));

    Массив.Добавить(СпрУровниURSA.НайтиПоНаименованию("Специальный Член Сообщества (SCM)", Истина));

    Массив.Добавить(СпрУровниURSA.НайтиПоНаименованию("Член Сообщества (CM)", Истина));

   

    Для каждого стр Из Массив Цикл

       

        Если стр = УровеньURSA Тогда

           

            ЭтоМембер = Истина;

           

            Прервать;

           

        КонецЕсли;

       

    КонецЦикла;    

   

    Возврат ЭтоМембер;

   

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

 

 

Специалист компании ООО "Кодерлайн"

Марс Айзатуллов

Обсудить статью в Telegram Задать вопрос автору статьи
Тема вопроса*
Ваше имя*
E-mail или телефон*
Ваш вопрос*
 

Добавить комментарий
Текст сообщения*
Защита от автоматических сообщений
 
Услуги программиста 1С
Получите специалиста
для решения всех задач
в области 1С
Программы 1С
Цены и подробное описание программ 1С:Предприятие 8.