При работе в программе «1С:Зарплата и управление персоналом» (версия 3) пользователи иногда сталкиваются с пугающим поведением интерфейса: открывая справочник Должности, они обнаруживают, что абсолютно все элементы списка отображаются зачеркнутым шрифтом. При этом настройки ведения штатного расписания могут быть отключены, а сами должности активно используются в кадровом учете. Данная ситуация вызывает множество вопросов у кадровиков и бухгалтеров, ведь зачеркнутые элементы часто пропадают из списков выбора в кадровых документах.
В этой статье мы подробно разберем, почему возникает этот визуальный эффект, проанализируем технические причины его появления (включая платформенные баги и особенности миграции данных) и рассмотрим пошаговые сценарии исправления ситуации.
Для начала давайте разберем механизм визуализации, заложенный разработчиками в платформу 1С. В управляемых формах зачеркивание текста в динамических списках справочников обычно сигнализирует об одном из двух состояний:
ИсключенаИзШтатногоРасписания (в пользовательском интерфейсе он чаще отображается как флаг «Должность больше не используется»).Даже если ведение штатного расписания отключено в настройках программы, сам реквизит физически присутствует в таблице базы данных и продолжает влиять на отображение элементов в формах списков.
Проанализируем техническую проблему, которая наиболее часто приводила к массовому зачеркиванию должностей без видимых на то причин. Данная проблема была официально зарегистрирована фирмой 1С под кодом 10203056.
Суть ошибки заключалась в некорректной работе механизма динамических списков на платформе версии 8.3.13. Платформа неверно обрабатывала условное оформление списков справочников Должности и Подразделения. В результате, если хотя бы один элемент справочника подходил под условие «Больше не используется» (или даже при отсутствии таких элементов из-за сбоя кэша отрисовки), стиль «Зачеркнутый» ошибочно применялся ко всем строкам списка в интерфейсе пользователя.
Как решить проблему с платформой:
Выясним причину, связанную с переносом данных. Часто массовое зачеркивание позиций происходит сразу после перехода с устаревшей конфигурации «Зарплата и управление персоналом 2.5» на актуальную редакцию 3.1. При переносе данных по правилам конвертации система анализирует актуальность штатных единиц.
Если на дату переноса данных по конкретной должности отсутствовали действующие сотрудники и не было открытых вакансий в штатном расписании, алгоритм переноса автоматически устанавливает для такой должности реквизит ИсключенаИзШтатногоРасписания = Истина. При этом, если в новой базе ЗУП 3.1 отключено ведение штатного расписания, флаг «Должность больше не используется» скрывается из карточки должности. Пользователь не видит этот флаг на форме элемента, но в самой базе данных он заполнен, что и приводит к зачеркиванию шрифта в списке.
Рассмотрим по шагам практические способы исправления данных, если проблема кроется не в платформенном баге, а в некорректно установленных флагах неиспользования должностей.
Это самый быстрый и безопасный способ вернуть должностям нормальный вид без ручного редактирования каждого элемента. Проанализируем этот процесс детально:
Должности.ИсключенаИзШтатногоРасписания).Если вам не хочется использовать групповые обработки, или нужно точечно отредактировать несколько элементов вручную, применим следующий метод:
Должности и откроем карточку зачеркнутого элемента. Теперь на форме отобразится скрытый ранее флаг Должность больше не используется.Для разработчиков и администраторов баз данных рассмотрим пример того, как быстро сбросить данный признак у всех элементов справочника с помощью программного кода. Мы можем запустить этот код в контексте внешней обработки или в режиме отладки через консоль кода:
ВыборкаДолжностей = Справочники.Должности.Выбрать();
Пока ВыборкаДолжностей.Следующий() Цикл
Если ВыборкаДолжностей.ИсключенаИзШтатногоРасписания Тогда
ОбъектДолжность = ВыборкаДолжностей.ПолучитьОбъект();
ОбъектДолжность.ИсключенаИзШтатногоРасписания = Ложь;
// Отключаем обмен данными при необходимости ускорения процесса
ОбъектДолжность.ОбменДанными.Загрузка = Истина;
Попытка
ОбъектДолжность.Записать();
Сообщить("Успешно обновлена должность: " + ОбъектДолжность.Наименование);
Исключение
Сообщить("Ошибка записи должности: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецЦикла;
Использование свойства ОбменДанными.Загрузка = Истина позволит обойти избыточные проверки при записи объекта, что существенно ускорит выполнение процедуры в базах данных с большим количеством элементов.
Важно понимать, к каким последствиям приводит игнорирование этой проблемы. Зачеркнутые должности в 1С:ЗУП 3 автоматически скрываются из стандартных списков быстрого выбора при заполнении кадровых документов, таких как ПриемНаРаботу, КадровыйПеревод или ДоговорРаботыУслуги. Если кадровик попытается ввести название такой должности вручную в поле выбора, программа выдаст предупреждение о том, что элемент не найден, либо просто проигнорирует ввод. Проведение вышеописанных процедур исправления вернет должностям их нормальный статус и сделает их доступными для выбора во всех кадровых и расчетных документах организации.