Возможности ЗУП 3.1, о которых многие не знают, а они есть

11.04.25

Разработка - Механизмы типовых конфигураций

Статья делает небольшой программный обзор на некоторые встроенные возможности типовой конфигурации ЗУП 3.1.

Небольшое введение и предпосылки данного материала

Привет всем! Небольшая "залетная" задачка по программному продукту 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

Торговое оборудование (через БПО):

Работа с эмулятором дисплея покупателя через БПО

Произвольная текстовая строка в кассовом чеке ККМ по стандарту БПО

зарплата кадры типовой функционал стандарт управление персоналом сотрудники организаций профили зуп

См. также

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В этой статье расскажу, как можно добавлять свои отборы в типовую обработку формирования заказов по потребностям с минимальными доработками.

27.02.2025    695    PROSTO-1C    1    

6

Механизмы типовых конфигураций HighLoad оптимизация Программист Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

Пример популярной пользовательской настройки плана счетов. К чему это может привести, почему «всё тормозит» и как это поправить.

18.02.2025    3220    pbelousov    10    

6

Механизмы типовых конфигураций Программист Платформа 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Расчет себестоимости в типовых конфигурациях 1С – для многих «черный ящик», работающий по жестко зашитым в него алгоритмам. Реализация этого «черного ящика» может меняться в зависимости от конкретной конфигурации – УПП, БП 3.0, ERP. Но принцип работы везде одинаковый. Расскажем о том, как устроен расчет себестоимости, как его дорабатывать, и какие методы могут быть эффективны и без доработок.

27.12.2024    13750    Begemoth80    32    

88

СКД Механизмы типовых конфигураций Запросы Программист Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Россия Бесплатно (free)

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3117    PROSTO-1C    0    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. yegorovnv 1 11.04.25 13:07 Сейчас в теме
По пункту Функции работы с профилями пользователей причем тут ЗУП?
Это же функционал БСП3.

По остальным пунктам согласен, это относится к базовому функционалу ЗУП.

Если уж писать статью о возможностях ЗУП, то как-то более развернуто.
2. aximo 2258 11.04.25 13:16 Сейчас в теме
(1) находится в общем модуле - ЗарплатаКадрыРасширенный - описаны несколько профилей, в статье перечислены
4. yegorovnv 1 11.04.25 13:29 Сейчас в теме
(2) Конечно там лежит, а не в УправлениеДоступом
Начни смотреть с этого модуля, и проследи как создаются профили при первом запуске, например профиль Администраторы, и затем как выполняются переходы к другим общим модулям, где создаются профили относящиеся к профильной конфигурации
Вижу что уровень пока недостаточен, чтобы учить других.
3. aximo 2258 11.04.25 13:17 Сейчас в теме
(1) так вот - тут зуп у меня лежит, смотреть буду - все что обнаружу полезного к применению - опишу в будущих статьях… посмотрим
5. aximo 2258 11.04.25 13:35 Сейчас в теме
(4) как создать профиль - это не первоочередная задача для меня была, а именно что в этот профиль понапихано… модуль, ЗУП указанный выше - полностью решил мой вопрос, в статье написано об этом

С БСП знаком плотно… можно и с обратной стороны зайти, согласен
6. biimmap 2044 11.04.25 16:27 Сейчас в теме
Тема практически бесконечная. Но полезная.
7. aximo 2258 11.04.25 16:45 Сейчас в теме
Короче, еще одна практическая тема по поводу профилей и ролей в них.

Один умелец - консультант нащелкал ролей в профиле в результате чего половина нужных функций и пользователя заблокировалось

Вот таким методом как в статье получил роли профиля и сравнил их с работающей копией… довольно быстро обнаружил расхождения

Чуть позже опубликую обработку для этого
8. TODD22 20 11.04.25 20:07 Сейчас в теме
(7)
Вот таким методом как в статье получил роли профиля и сравнил их с работающей копией… довольно быстро обнаружил расхождения

Так можно сохранить роли профиля в mxl файлы и сравнить стандартным механизмом сравнения файлов.
Прикрепленные файлы:
9. aximo 2258 11.04.25 20:18 Сейчас в теме
Оставьте свое сообщение