Получение в коде должности из классификатора по коду ОКПДТР

31.10.25

Разработка - Универсальные функции

В статье рассказывается, как программно получить наименование должности из классификаторов по коду ОКПДТР в ЗУП Корп.

В практике кадровых аналитиков нередко возникают нестандартные задачи, требующие нетиповых решений. Одной из таких задач является необходимость извлечения наименований должностей в отчеты не из привычных справочников системы 1С, а непосредственно из общероссийских классификаторов, таких как ОКПДТР (Общероссийский классификатор профессий рабочих, должностей служащих и тарифных разрядов). Данные классификаторы хранятся в общих макетах программы в формате XML, что создает определенные технические сложности при работе с ними.

 

 

Для извлечения информации из таких макетов необходимо использовать встроенные механизмы БСП для работы с XML-документами.

 

Программная реализация поиска по коду ОКПДТР

 

Представленное решение состоит из трех взаимосвязанных функций, которые обеспечивают полный цикл работы с классификатором. Главная функция ДолжностьПоОКПДТРИзКлассификаторов принимает на вход код ОКПДТР и возвращает соответствующее наименование должности. Функция последовательно обращается к двум классификаторам — должностей и профессий ОКПДТР, что обеспечивает полноту поиска по всему спектру возможных наименований.

Вспомогательная функция ДеревоЗаполненноеКлассификатором выполняет задачу преобразования XML-структуры классификатора в дерево значений 1С. Она извлекает текст макета, преобразует его в табличную форму с помощью функции БСП ПрочитатьXMLВТаблицу, а затем строит иерархическое дерево с сохранением всех уровней вложенности. Такой подход позволяет эффективно работать с данными классификатора, сохраняя их структуру и связи между элементами.

Функция НайтиИмяВДереве реализует рекурсивный алгоритм поиска по построенному дереву классификатора. Она сравнивает первые пять символов кода должности с кодами в дереве, так как в справочники типовой конфигурации при типовой загрузке попадают именно первые 5 символов кода.

// Ищет по коду ОКПДТР в классификаторах и возвращает наименование должности
//
// Параметры:
//  ОКПДТРКод - Строка - Код ОКПДТР
// 
// Возвращаемое значение:
//  НаименованиеДолжности - Строка - найденное в классификаторе наименование должности
//
Функция ДолжностьПоОКПДТРИзКлассификаторов(ОКПДТРКод) Экспорт
	
	Если НЕ ЗначениеЗаполнено(ОКПДТРКод) Тогда
		
		Возврат "";
		
	КонецЕсли;
	
	НаименованиеДолжности = "";
	
	ДеревоДолжностей = ДеревоЗаполненноеКлассификатором("КлассификаторОКПДТРДолжности");
	
	НаименованиеДолжности = НайтиИмяВДереве(ДеревоДолжностей.Строки, ОКПДТРКод);
	
	Если ЗначениеЗаполнено(НаименованиеДолжности) Тогда
		Возврат НаименованиеДолжности;
	КонецЕсли;
	
	ДеревоДолжностей = ДеревоЗаполненноеКлассификатором("КлассификаторОКПДТРПрофессии");
	
	НаименованиеДолжности = НайтиИмяВДереве(ДеревоДолжностей.Строки, ОКПДТРКод);
	
	Возврат НаименованиеДолжности;
	
КонецФункции

Функция ДеревоЗаполненноеКлассификатором(ИмяКлассификатора)
	
	КлассификаторXML = ПолучитьОбщийМакет(ИмяКлассификатора).ПолучитьТекст();
	КлассификаторОКПДТР = ОбщегоНазначения.ПрочитатьXMLВТаблицу(КлассификаторXML).Данные;
	КлассификаторДерево = Новый ДеревоЗначений;
	КлассификаторДерево.Колонки.Добавить("Code");
	КлассификаторДерево.Колонки.Добавить("Name");
	КлассификаторДерево.Колонки.Добавить("Категория");
		
	ТекущийУровень = 0;
	ТекущаяСтрока = Неопределено;
	Для Каждого СтрокаКлассификатора Из КлассификаторОКПДТР Цикл
		Уровень = Число(СтрокаКлассификатора.level);
		Если Уровень > ТекущийУровень Тогда
			Строка = ТекущаяСтрока.Строки.Добавить();
		Иначе
			Строка = КлассификаторДерево.Строки.Добавить();
			ТекущийУровень = Уровень;
			ТекущаяСтрока  = Строка;
		КонецЕсли;
		Строка.Code = СтрокаКлассификатора.Code;
		Строка.Name = СтрокаКлассификатора.Name;
		Если ИмяКлассификатора = "КлассификаторОКПДТРДолжности" Тогда
			Строка.Категория = СтрокаКлассификатора.Категория;
		КонецЕсли;
	КонецЦикла;
	
	Возврат КлассификаторДерево;
	
КонецФункции

Функция НайтиИмяВДереве(СтрокиДерева, ОКПДТРКод)
	
	Результат = "";
	
	ДлинаКода = 5;
	
	Для каждого СтрокаДерева Из СтрокиДерева Цикл
		
		Если ОКПДТРКод = Лев(СтрокаДерева.Code, ДлинаКода) Тогда
			Возврат СтрокаДерева.Name;
		КонецЕсли;
		
		Результат = НайтиИмяВДереве(СтрокаДерева.Строки, ОКПДТРКод);
		
		Если ЗначениеЗаполнено(Результат) Тогда
			Возврат Результат;
		КонецЕсли;
		
	КонецЦикла;

	Возврат Результат;
	
КонецФункции

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

Вступайте в нашу телеграмм-группу Инфостарт

ОКПДТР Должность ЗУП

См. также

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

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

27.12.2024    21518    Begemoth80    33    

91

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

Статистическая выборка сценариев и точек изменения отчетов на общей форме ФормаОтчета в типовых конфигурациях. Примеры кода.

03.06.2024    13325    SergDobrodelov    40    

129

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

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    44229    dimanich70    83    

160

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    54210    atdonya    31    

67

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

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    9880    mrXoxot    11    

115

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8272    ke.92@mail.ru    17    

67

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

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    21561    ids79    29    

87
Для отправки сообщения требуется регистрация/авторизация