Как программно заполнить должность сотрудника в 1С, если учет зарплаты ведется во внешней программе?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

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

В этой статье мы подробно разберем архитектуру хранения кадровых данных в 1С:Предприятие 8.3, выясним, почему стандартные кадровые документы не применяются при внешнем учете зарплаты, и научимся правильно записывать данные о должности программным путем.

Особенности архитектуры хранения кадровых данных

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

  1. Полноценный кадровый учет в 1С: При проведении документов ПриемНаРаботу или КадровыйПеревод данные записываются в периодический регистр сведений КадроваяИсторияСотрудников. Из этого регистра система считывает актуальные кадровые данные на требуемую дату.
  2. Учет зарплаты и кадров ведется во внешней программе: В этом режиме стандартные кадровые документы не используются и не формируют движений. Попытки записать данные напрямую в регистры кадровой истории не дают результата на форме элемента справочника.

Выясним причину: при отключенном кадровом учете форма элемента справочника Сотрудники считывает актуальные сведения из специализированного вспомогательного регистра сведений — ТекущиеКадровыеДанныеСотрудников.

Пошаговый алгоритм программного заполнения должности

Проанализируем задачу по шагам. Чтобы программно заполнить и сохранить должность сотрудника при загрузке из внешнего файла, необходимо выполнить два основных действия: найти или создать запись в справочнике Должности, а затем внести запись в регистр сведений ТекущиеКадровыеДанныеСотрудников.

Шаг 1. Получение ссылки на справочник «Должности»

Реквизит ТекущаяДолжность принимает значение типа СправочникСсылка.Должности. Поэтому перед заполнением регистра необходимо сначала найти существующую должность по наименованию или создать новую.

Рассмотрим пример кода для поиска и создания должности:


// Поиск должности по наименованию из внешнего файла
НаименованиеДолжности = СокрЛП(СтрокаФайла.Должность);
СсылкаДолжность = Справочники.Должности.НайтиПоНаименованию(НаименованиеДолжности);

// Если должность не найдена, создаем новый элемент
Если Не ЗначениеЗаполнено(СсылкаДолжность) Тогда
    ОбъектДолжность = Справочники.Должности.СоздатьЭлемент();
    ОбъектДолжность.Наименование = НаименованиеДолжности;
    ОбъектДолжность.Записать();
    СсылкаДолжность = ОбъектДолжность.Ссылка;
КонецЕсли;

Шаг 2. Запись данных в регистр сведений «ТекущиеКадровыеДанныеСотрудников»

После того как сотрудник создан или найден в информационной базе, сформируем набор записей для регистра сведений ТекущиеКадровыеДанныеСотрудников с установкой отбора по конкретному сотруднику.

Разберем пример кода для записи кадровых данных:


// Формируем набор записей регистра сведений
НаборЗаписей = РегистрыСведений.ТекущиеКадровыеДанныеСотрудников.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Сотрудник.Установить(СсылкаСотрудник);

// Создаем новую запись
Запись = НаборЗаписей.Добавить();
Запись.Сотрудник = СсылкаСотрудник;
Запись.ТекущаяДолжность = СсылкаДолжность;

// Заполняем сопутствующие кадровые реквизиты для корректной работы отчетов
Запись.ТекущаяОрганизация = СсылкаОрганизация;
Запись.ТекущееПодразделение = СсылкаПодразделение;

// Записываем набор данных в базу
НаборЗаписей.Записать();

Важные нюансы и рекомендации

При выполнении интеграции и массовой загрузки сотрудников обратите внимание на следующие моменты:

  1. Заполнение обязательных ресурсов регистра: Заполняйте не только поле ТекущаяДолжность, но и ТекущаяОрганизация и ТекущееПодразделение. Это предотвратит ошибки при формировании печатных форм и аналитических отчетов.
  2. Связь с физическим лицом: Убедитесь, что у созданного объекта справочника Сотрудники корректно заполнен реквизит ФизическоеЛицо. В противном случае сопоставление кадровых данных в некоторых механизмах конфигурации может работать некорректно.
  3. Обновление кэша кадровых данных: В современных конфигурациях 1С при необходимости можно вызывать служебные процедуры обновления кадровой информации из общих модулей подсистемы (например, ОбновитьТекущиеКадровыеДанныеСотрудников), если стандартное отображение требует принудительного пересчета.

Использование регистра сведений ТекущиеКадровыеДанныеСотрудников позволяет корректно передавать и отображать кадровые данные сотрудников в условиях, когда кадровый учет ведут во внешней программе.

← На главную