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