Как вывести ставку сотрудника десятичной дробью, а не обычной, в отчетах 1С:ЗУП/ЗКГУ?

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

В конфигурациях «1С:Зарплата и управление персоналом» (ЗУП) и «1С:Зарплата и кадры государственного учреждения» (ЗКГУ) редакции 3.1 пользователи часто сталкиваются с особенностью отображения количества занимаемых ставок. По умолчанию система стремится показывать эти данные в виде обычной дроби, например, 1/2, 1/4 или комбинированном виде 1 (1/2), что означает 1,5 ставки. Однако для многих кадровых и бухгалтерских отчетов, а также для выгрузок в сторонние системы, требуется строгий десятичный формат: 0,5, 0,25, 1,5.

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

Почему не работает стандартное форматирование?

Прежде чем переходить к решениям, давайте разберемся в природе данных. Многие пользователи пытаются изменить формат через Условное оформление в настройках отчета, задавая формат поля как число с определенной точностью. Часто это работает в отчете «Анализ штатного расписания» и инструментах проверки отклонений тарифных ставок и штатного расписания, но не срабатывает в отчете «Штатные сотрудники».

Причина кроется в типах данных. В разных отчетах и документах поле «Количество ставок» может быть представлено по-разному:

  1. Число: В регистрах, где хранится штатное расписание, ставки хранятся как числа. Поэтому к ним легко применяется стандартное форматирование (установка точности, разделителей).
  2. Строка: В большинстве кадровых отчетов (например, «Штатные сотрудники») система использует специальную функцию для преобразования числа в «красивое» представление. Число 0.5 превращается в строку "1/2".

Поскольку в отчет попадает уже текстовая строка "1/2", попытка применить к ней числовой формат (например, «ЧДЦ=2») игнорируется платформой, так как текст нельзя округлить математически средствами оформления.

Способ 1. Настройка отчетов через Пользовательские поля (без программирования)

Этот метод подходит, если вам нужно изменить вид ставок в конкретном отчете (например, «Штатные сотрудники» или «Свод кадровых изменений»), не внося изменений в конфигурацию. Мы будем использовать механизм Системы Компоновки Данных (СКД).

Нам необходимо создать новое поле, которое принудительно преобразует значение ставки обратно в число и округлит его до нужного количества знаков.

Шаг 1. Создание детального поля

Зайдем в настройки отчета (кнопка «Настройки», затем переключимся в «Расширенный» вид). Перейдем на вкладку Пользовательские поля.

  1. Добавим «Новое поле выражение».
  2. В заголовке укажем понятное имя, например, Ставка (десятичная).
  3. В поле «Выражение детальных записей» пропишем формулу:

Окр([Количество ставок], 2)

Эта формула берет значение ставки и математически округляет его до двух знаков после запятой. Если исходное поле было числом, оно просто округлится. Если это было поле, которое СКД может интерпретировать как число, функция Окр вернет нам десятичное значение.

Шаг 2. Нюанс с итогами (важно!)

Если мы оставим настройку только для детальных записей, то в строках с сотрудниками мы увидим красивые числа «0,5», «1,0». Однако при формировании итогов по подразделениям или организации поле может вести себя некорректно: либо будет пустым, либо превратится в измерение группировки вместо того, чтобы суммироваться.

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

Вариант А (Суммирование округленного):

В поле «Выражение итоговых записей» пишем:

Сумма(Окр([Количество ставок], 2))

Логика работы: система сначала округлит ставку каждого сотрудника до сотых, а потом сложит эти округленные значения. Это предотвращает появление «хвостов» вида 0,333333 в итогах.

Вариант Б (Суммирование исходного):

В поле «Выражение итоговых записей» пишем:

Сумма([Количество ставок])

В этом случае система сложит исходные значения, а затем выведет результат. Чтобы результат выглядел как десятичная дробь, к этому пользовательскому полю нужно будет дополнительно применить Условное оформление с форматом «ЧДЦ=2».

Мы рекомендуем Вариант А, так как он сразу гарантирует нужный формат данных на уровне вычислений.

Шаг 3. Замена поля в отчете

После создания пользовательского поля перейдите на вкладку Поля (или Выбранные поля) в настройках отчета. Уберите галочку со стандартного поля Количество ставок и добавьте ваше новое созданное поле Ставка (десятичная).

Способ 2. Программное изменение (через Расширение конфигурации)

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

В типовых конфигурациях ЗУП/ЗКГУ за формирование текстового представления ставки (той самой дроби "1/2") отвечает общий модуль.

Давайте определим, где именно происходит преобразование. Обычно это общий модуль КадровыйУчетКлиентСервер или КадровыйУчетРасширенныйКлиентСервер (в зависимости от версии релиза название и расположение может незначительно меняться, но суть остается прежней).

Функция, которую нам нужно переопределить, называется ПредставлениеКоличестваСтавок.

Алгоритм реализации расширения

  1. Создаем новое расширение конфигурации. Снимаем галочку «Безопасный режим», если это потребуется для работы с конкретными модулями (обычно для общих модулей с пометкой КлиентСервер это не критично, но нужно проверять).
  2. Находим в основной конфигурации общий модуль КадровыйУчетКлиентСервер.
  3. Добавляем его в расширение.
  4. Находим функцию ПредставлениеКоличестваСтавок. Она принимает входящий параметр КоличествоСтавок.
  5. Создаем аннотацию &Вместо (или &After / &После, если логика позволяет, но чаще для полной замены вывода используется &Вместо).

Код функции в расширении будет выглядеть следующим образом:


&Вместо("ПредставлениеКоличестваСтавок")
Функция Расш1_ПредставлениеКоличестваСтавок(Знач КоличествоСтавок) Экспорт
	
	// Принудительно возвращаем строковое представление числа,
	// округленного до 3 знаков (или 2, как принято в вашей организации).
	// Функция Строка() преобразует число в строку без дробных черт.
	
	ПредставлениеСтавки = Строка(Окр(КоличествоСтавок, 3));
	
	Возврат ПредставлениеСтавки;
	
КонецФункции

Рассмотрим, что делает этот код:

После применения такого расширения и перезапуска сеанса во всех местах программы (списки сотрудников, документ «Прием на работу», отчет «Штатные сотрудники»), где вызывается эта функция, вы увидите десятичные дроби.

Дополнительный способ: Использование регистра «Кадровая история»

Если вы не хотите писать код и настройки пользовательских полей кажутся сложными, есть третий путь — использование Универсального отчета или добавление полей через связь таблиц.

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

Однако, как показывает практика, этот метод имеет недостатки. Например, если добавить поле Рабочее место регистратор.Колич. ставок, то данные могут отобразиться только для тех сотрудников, у кого есть документы «Прием на работу» или «Кадровый перевод» в текущей базе. Для сотрудников, перенесенных через документ «Начальная штатная расстановка», это поле может оказаться пустым или недоступным, так как структура хранения данных переноса отличается.

Резюме

Подведем итог выбора метода решения:

← На главную