Небольшое введение и предпосылки данного материала
Привет всем! Небольшая "залетная" задачка по программному продукту 1С:Зарплата и управление персоналом 3.1 (ЗУП 3.1) сподвигла меня на написание небольшой выжимки по "вшитым" возможностям данной конфигурации.
В данном материале я постараюсь подробно описать работу с профилями пользователей, получение данных по профилю и в том числе - ролей, бонусом добавлю инструкцию как добавить роль в профиль типовыми методами ЗУП 3.1.
А во второй части я опишу работу с физическими лицами - это достаточно известные функции и процедуры, но пусть, как говориться, будут здесь - "на всякий пожарный".
Для данного обзора используется последняя версия (на первую декаду апреля 2025 г.) ЗУП 3.1.32.66 на платформе 1С:Предприятие 8.3.24.1586.
В публикации рассмотренные полезные функции и процедуры, которые вы сможете использовать сразу по факту.
1.Функции работы с профилями пользователей
Например, если такая интересная штука как работа с профилями пользователей, применяется вот так:
Профиль = ЗарплатаКадрыРасширенный.ОписаниеПрофиляКадровикБезДоступаКЗарплате()
На выходе я получаю структуру профиля (см. рис.1)
Рис.1. Структура получаемого профиля пользователя ЗУП 3.1.
Как видно - из данной структуры могу получить список всех ролей, которые включены в профиль и получить их:
Профиль.Роли.Количество() // например, 109 ролей
Возможно работать вот с таким перечнем профилей пользователей:
ОписаниеПрофиляКадровикБезДоступаКЗарплате(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляКадровик(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляСтаршийКадровик(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляРасчетчик(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляСтаршийРасчетчик(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляТабельщик(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляАудитор(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляКадровикРасчетчик(ПраваНаИнтерфейс = Ложь) Экспорт
ОписаниеПрофиляСтаршийКадровикРасчетчик(ПраваНаИнтерфейс = Ложь) Экспорт
Далее рассмотрим, как добавить в собственный профиль роль штатным методом:
// создаем новый пустой профиль
ОписаниеПрофиля = УправлениеДоступом.НовоеОписаниеПрофиляГруппДоступа();
ОписаниеПрофиля.Идентификатор = Справочники.ПрофилиГруппДоступа.НайтиПоНаименованию("МойНовый").УникальныйИдентификатор();
ОписаниеПрофиля.Наименование = НСтр("ru = 'Мой новый профиль'");
// Добавляем обязательные роли пользователя в описание профиля
ЗарплатаКадрыРасширенный.ДобавитьВОписаниеПрофиляОбязательныеРоли(ОписаниеПрофиля);
Сообщить(ОписаниеПрофиля.Роли.Количество()); // 1 - список обязательных ролей
// Добавляем роль админа в описание профиля
ЗарплатаКадрыРасширенный.ДобавитьВОписаниеПрофиляРоль(ОписаниеПрофиля,"Администрирование");
Сообщить(ОписаниеПрофиля.Роли.Количество()); // 2 - плюс админ
Смотрим, действительно в профиле "МойНовый" появилась роль "Администрирование", см. рис.2.
Рис.2 Добавлена роль "Администрирование".
В принципе, этот механизм мне потребовался из-за того, что я хотел понять, какие роли пользователя являются базовыми для запуска приложения вообще. Далее рассмотрим более простые и очень актуальные функции по физическим лицам и сотрудникам.
Функции работы с физическими лицами, которые нужны всем программистам
1. Расшифровка подписи физического лица:
ФизическиеЛицаЗарплатаКадры.РасшифровкаПодписи("Васильев Петр Иванович");
//П. И. Васильев
2. Просклонять фамилию, имя и отчество:
ФизическиеЛицаЗарплатаКадры.Просклонять("Васильев Петр Иванович", 2,,1); // возврат ложь или истина
// результат склонения см. встроенную функцию:
Функция Просклонять(Знач ФИО, Знач Падеж, Результат, Знач Пол = Неопределено, СсылкаНаОбъект = Неопределено) Экспорт
ПолЧислом = Неопределено;
Если ТипЗнч(Пол) = Тип("Число") Тогда
ПолЧислом = Пол;
Иначе
Если Пол = Перечисления.ПолФизическогоЛица.Мужской Тогда
ПолЧислом = 1;
ИначеЕсли Пол = Перечисления.ПолФизическогоЛица.Женский Тогда
ПолЧислом = 2;
КонецЕсли;
КонецЕсли;
Результат = СклонениеПредставленийОбъектов.ПросклонятьФИО(ФИО, Падеж, СсылкаНаОбъект, ПолЧислом);
Если ЗначениеЗаполнено(Результат) Тогда
Возврат Истина;
Иначе
Результат = ФИО;
Возврат Ложь;
КонецЕсли;
КонецФункции
3. Получить пользователя физического лица:
ФизическиеЛицаЗарплатаКадры.ПользовательФизическогоЛица(ФизическоеЛицо); // ФизЛицо - Барсукова Инна Александровна
// Результат - Инна
4. Получить возраст физического лица (элементарная функция, которая считает ваш возраст по ТекущуюДатуСеанса):
Функция Возраст(ДатаРождения, ДатаВозраста = Неопределено) Экспорт
Если ДатаВозраста = Неопределено Тогда
ДатаВозраста = ТекущаяДатаСеанса();
КонецЕсли;
Возврат ФизическиеЛицаЗарплатаКадрыКлиентСервер.Возраст(ДатаРождения, ДатаВозраста);
КонецФункции
5. Сформировать представление возраста человека (25 лет, 31 год и т.п.). Вот эта функция - также может быть вам полезна и может часто применяться:
Функция ПредставлениеВозраста(ДатаРождения, ДатаВозраста = Неопределено) Экспорт
Если ДатаВозраста = Неопределено Тогда
ДатаВозраста = ТекущаяДатаСеанса();
КонецЕсли;
Возврат ФизическиеЛицаЗарплатаКадрыКлиентСервер.ПредставлениеВозраста(ДатаРождения, ДатаВозраста);
КонецФункции
6. Получить физическое лицо по СНИЛС (здесь полное описание физического лица с документами, семейным положением и прочей информацией - одной строчкой):
АА = ФизическиеЛицаЗарплатаКадры.ФизическоеЛицоПоСНИЛСИлиФИО("НомерСНИЛСА","", "", "");
// возвращается структура с полными данными физического лица
7. Получить данные физического лица для регламентированной отчетности:
АА =ФизическиеЛицаЗарплатаКадры.ДанныеФизическогоЛицаДляРегламентированнойОтчетности(ЭтаФорма.Реквизит2, Неопределено, ТекущаяДата());
// возврат структура, функция сама имеет дополнительные параметры, кому интересно и выглядит вот так:
Функция ДанныеФизическогоЛицаДляРегламентированнойОтчетности(ФизическоеЛицо, ИменаПолейБРО, ДатаЗначения) Экспорт
// Имена показателей БЗК см. в комментарии к функциям
// КадровыйУчетВнутренний.ЗапросВТКадровыеДанныеФизическихЛиц
// КадровыйУчетВнутренний.ЗапросВТПостоянныеКадровыеДанныеФизическихЛиц.
ИменаПолейБЗК = Новый Массив;
БыстрыйПоискПолейБЗК = Новый Соответствие;
БыстрыйПоискПолейБЗК.Вставить("ИНН", "ИНН");
БыстрыйПоискПолейБЗК.Вставить("Фамилия", "Фамилия");
БыстрыйПоискПолейБЗК.Вставить("Имя", "Имя");
БыстрыйПоискПолейБЗК.Вставить("Отчество", "Отчество");
БыстрыйПоискПолейБЗК.Вставить("ТелефонРабочий", "ТелефонРабочийПредставление");
БыстрыйПоискПолейБЗК.Вставить("ТелефонДомашний", "ТелефонДомашнийПредставление");
БыстрыйПоискПолейБЗК.Вставить("АдресЭлектроннойПочты", "EMailПредставление");
Если ИменаПолейБРО = Неопределено Тогда
ИменаПолейБРО = Новый Массив;
Для Каждого КлючИЗначение Из БыстрыйПоискПолейБЗК Цикл
ИменаПолейБРО.Добавить(КлючИЗначение.Ключ);
ИменаПолейБЗК.Добавить(КлючИЗначение.Значение);
КонецЦикла;
Иначе
Для Каждого ИмяПоляБРО Из ИменаПолейБРО Цикл
ИмяПоляБЗК = БыстрыйПоискПолейБЗК[ИмяПоляБРО];
Если ИмяПоляБЗК <> Неопределено Тогда
ИменаПолейБЗК.Добавить(ИмяПоляБЗК);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ДатаЗначения = Неопределено Тогда
ДатаЗначения = ТекущаяДатаСеанса();
КонецЕсли;
КадровыеДанные = КадровыйУчет.КадровыеДанныеФизическогоЛица(Истина, ФизическоеЛицо, ИменаПолейБЗК, ДатаЗначения);
ЕстьКадровыеДанные = (КадровыеДанные <> Неопределено);
РезультатБРО = Новый Структура;
Для Каждого ИмяПоляБРО Из ИменаПолейБРО Цикл
ИмяПоляБЗК = БыстрыйПоискПолейБЗК[ИмяПоляБРО];
Если ИмяПоляБЗК = Неопределено Тогда
ЗначениеБРО = ""; // Поле не поддерживается функцией КадровыеДанныеФизическогоЛица.
ИначеЕсли Не ЕстьКадровыеДанные Тогда
ЗначениеБРО = ""; // Нет кадровых данных по физлицу.
Иначе
ЗначениеБРО = КадровыеДанные[ИмяПоляБЗК];
Если ЗначениеБРО = Null Или ЗначениеБРО = Неопределено Тогда
ЗначениеБРО = ""; // Не введена контактная информация в карточке физлица.
КонецЕсли;
КонецЕсли;
РезультатБРО.Вставить(ИмяПоляБРО, ЗначениеБРО);
КонецЦикла;
Возврат РезультатБРО;
КонецФункции
После выполнения данной функции получаем структуру такого формата:
Рис.3 Структура данных физического лица для регламентированной отчетности.
По инструментам пока все, теперь немного опишу техническую задачу, которую решал подобными описанными методами (есть и другие, но эти более наглядны и понятны большинству). Досталась ЗУП 3.1 база от заказчика после кучи программистов - консультантов в плачевном состоянии - десятки непонятных профилей, куча задвоенных или затроенных физических лиц, непонятные пользователи с непонятными правами... в идеале нужно оценить возможность корректного переноса в чистую базу и возможность сделать все "красиво". Решил начать именно с физических лиц - посмотреть, представить данные в "общепонятном" виде, чтобы самому правильно задать вопросы и обсудить трудозатраты.
Решил действовать типовыми методами (это даже не БСП), поэтому часть из них - разместил в виде текущей статьи - материала для ознакомления с возможностями - "памяткой", чтобы самому не забыть.
Что далее? Посмотрим по актуальным сотрудникам, а затем - и по документам... вероятно - так же опишу методы работы с этим функционалом в качестве подобных мануалов.
Пожалуй, на этом все, перейдем к заключению.
Заключение
Данный материал совершенно не планировался - появился спонтанно, поэтому решено было его "закрепить" данной публикаций. Уверен, что этот материал будет полезен многим, поскольку по ЗУП достаточно мало (в десятки раз) меньше информации, чем по типовым бухгалтерским и тем более управленческим решениям. Спасибо за внимание. Ознакомьтесь с другими материалами автора.
Другие публикации автора
Также вы можете ознакомиться с другими публикациями (в том числе и обработками) автора. Мы обладаем большой практической библиотекой знаний, которая размещается здесь на портале или телеграмм канале. Добро пожаловать!
Бухгалтерские отчеты:
Отчет по основным средствам для Бухгалтерии 3.0
Сборка доходов и расходов по счетам хозрасчетного плана для 1С:БП 3.0 (март 2025)
Классические примеры:
Использование собственных макетов в СКД на примере УТ 11.5
Классический корректный пример внешней печатной формы с печатью и подписями на БСП 3.1.10
Торговое оборудование (через БПО):
Работа с эмулятором дисплея покупателя через БПО
Произвольная текстовая строка в кассовом чеке ККМ по стандарту БПО