Содержание:
2. Решение задачи с использованием расширения 1С NAC_Доработки
1. Реализация присвоения категорий "Participant" и "Exit" в конфигурации ЗУП 3.1
Требуется разработать обработку для изменения категории URSA для принятых сотрудников.
При проведении документа кадрового приема (при синхронизации с базами источниками) необходимо присваивать новым сотруднику категорию "Participant".
При повторном приеме сотрудника также присваивается категория "Participant".
Если у документа ПриемНаРаботу установлен булевый признак NOE_ТехническийПрием то процедуру присваивания не производим.
Требуется разработать обработку для изменения категории URSA для уволенных сотрудников.
При проведении документа кадрового увольнения (при синхронизации с базами источниками) базы Консолидации необходимо присваивать уволенным сотрудникам категорию "Exit"
Если у документа Увольнение установлен булевый признак NOE_ТехническоеУвольнение то процедуру присваивания не производим.
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 Тогда
ЭтоМембер = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат ЭтоМембер;
КонецФункции
Специалист компании ООО "Кодерлайн"
Марс Айзатуллов