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

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С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

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

27.12.2024    24099    Begemoth80    33    

93

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

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

03.06.2024    15446    SergDobrodelov    40    

130

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

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

21.05.2024    48208    dimanich70    83    

169

Универсальные функции Программист 1С:Предприятие 8 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    7257    6    John_d    13    

59

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

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

12.02.2024    60139    atdonya    31    

69

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

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

28.12.2023    10938    mrXoxot    11    

117

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

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

30.11.2023    9034    ke.92@mail.ru    17    

68

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

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

08.11.2023    23206    ids79    30    

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