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