Как убрать выделение жирным шрифтом в табличной части документа «Начисление зарплаты» в 1С:ЗУП 3.1?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

В типовой конфигурации 1С:Зарплата и Управление Персоналом 3.1 реализован механизм визуального контроля ручных изменений. Когда расчетчик правит время или результат начисления непосредственно в табличной части документа НачислениеЗарплаты, соответствующая строка выделяется жирным шрифтом. Это сигнализирует системе, что данные «зафиксированы» и не должны автоматически перезаписываться при общих пересчетах. Однако возникают ситуации, когда такое выделение мешает (например, при массовых корректировках определенных категорий сотрудников) и его требуется отключить или настроить выборочно.

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

Разберем механизм работы «жирного шрифта»

Прежде чем приступать к коду, проанализируем ситуацию. Жирный шрифт — это не жесткое свойство ячейки, а результат работы Условного оформления формы. В ЗУП 3.1 оно формируется динамически при открытии документа. Система отслеживает так называемые «контролируемые поля». Для каждого такого поля в табличной части существуют скрытые реквизиты (флаги фиксации), названия которых обычно начинаются с префикса Фикс (например, ФиксОтработано, ФиксРезультат).

Алгоритм работы системы следующий:

  1. При изменении значения в колонке «Отработано» срабатывает обработчик, который устанавливает скрытый флаг ФиксОтработано в значение Истина.
  2. В коллекции УсловноеОформление формы существует правило: если ФиксОтработано равно Истина, то установить шрифт «Жирный» для текущей строки или ячейки.
  3. Списки этих зависимостей хранятся в служебном реквизите формы КонтролируемыеПоляНачисления.

Основная логика по настройке этого оформления сосредоточена в общем модуле РасчетЗарплатыРасширенныйФормы, а именно в процедуре ДокументыВыполненияНачисленийУстановитьУсловноеОформление.

Решение 1: Модификация условного оформления в форме документа

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

Для этого найдем процедуру ПриСозданииНаСервере и добавим код в самом конце. Посмотрим на пример реализации, где мы обходим коллекцию оформления и добавляем условие «Сотрудник не входит в определенный список»:


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

Важно понимать: если вы просто удалите элементы оформления, они могут восстановиться при интерактивном пересчете строк, поэтому модификация условий — более надежный путь.

Решение 2: Использование расширения (рекомендуемый способ)

Чтобы не снимать конфигурацию с поддержки, выясним, как реализовать это через расширение. Нам нужно перехватить процедуру в общем модуле РасчетЗарплатыРасширенныйФормы. Проанализируем ситуацию: процедура ДокументыВыполненияНачисленийУстановитьУсловноеОформление принимает параметры Форма и ОписаниеТаблицыВидовРасчета.

Создадим в расширении метод с аннотацией &После:


&После("ДокументыВыполненияНачисленийУстановитьУсловноеОформление")
Процедура ИТ_ДокументыВыполненияНачисленийУстановитьУсловноеОформление(Форма, ОписаниеТаблицыВидовРасчета)
    
    // Аналогично первому решению, корректируем уже созданное оформление
    Для Каждого Элемент Из Форма.УсловноеОформление.Элементы Цикл
        // Проверяем, что это оформление относится к нашей ТЧ Начисления
        Для Каждого ОформляемоеПоле Из Элемент.Поля.Элементы Цикл
            Если СтрНайти(Строка(ОформляемоеПоле.Поле), "Начисления") > 0 Тогда
                // Добавляем фильтр по сотруднику или подразделению
                // ... (логика добавления условия как в примере выше)
                Прервать;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    
КонецПроцедуры

Использование Дополнительных сведений для гибкой настройки

Чтобы не «зашивать» конкретные фамилии сотрудников в программный код, проанализируем возможность использования Дополнительных сведений. Это позволит бухгалтеру самостоятельно управлять списком сотрудников, у которых не должен появляться жирный шрифт.

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

Риски и важные замечания

Проанализируем возможные последствия отключения жирного шрифта. Жирный шрифт в ЗУП выполняет роль индикатора «Зафиксировано». Если вы уберете его:

Таким образом, самым безопасным и корректным методом является именно добавление исключающего условия в существующие элементы УсловноеОформление, не затрагивая при этом состав КонтролируемыеПоляНачисления и значения скрытых колонок фиксации.

← На главную