Как исправить синтаксическую ошибку в пользовательском поле-выражении отчета 1С:ЗУП 3?

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

При работе с отчетами в программе 1С:Зарплата и управление персоналом 3 (ЗУП 3) пользователи часто сталкиваются с необходимостью добавить собственные расчетные показатели. Система компоновки данных (СКД) позволяет создавать "Пользовательские поля-выражения", однако малейшая неточность в написании формулы приводит к ошибке Data.SetExpressionsPresentation. Рассмотрим на конкретном примере, как правильно составить выражение для расчета срока замены паспорта и какие нюансы следует учитывать, чтобы избежать синтаксических ошибок.

Анализ исходной проблемы

Рассмотрим ситуацию: в кадровом отчете (например, "Личные данные сотрудников") требуется вычислить дату, когда сотруднику необходимо заменить паспорт (в 20 и 45 лет). Пользователь пытается использовать конструкцию ВЫБОР в сочетании с функцией ДобавитьКДате. Типичное выражение выглядит следующим образом:


Выбор
    Когда Возраст < 20
    Тогда ДобавитьКДате([Дата рождения], "год", 14)
    Когда Возраст >= 20 И Возраст < 45
    Тогда ДобавитьКДате([Дата рождения], "год", 20)
    Когда Возраст >= 45
    Тогда ДобавитьКДате([Дата рождения], "год", 45)
Конец

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

Правильное использование кавычек и раскладки

Разберем по шагам, как работать со строковыми параметрами в функциях СКД. Функция ДобавитьКДате принимает три параметра: исходную дату, тип интервала и количество единиц. Тип интервала (например, год, месяц или день) должен передаваться строго как строка.

Важные правила написания:

  1. Тип кавычек: Используйте только прямые двойные кавычки ". Если вы копируете формулу из текстовых редакторов типа Word, там могут стоять кавычки-елочки или кавычки-лапки. Для 1С это недопустимые символы.
  2. Регистр и язык: Параметр интервала можно писать как на русском языке "Год", так и на английском "Year". Хотя СКД часто нечувствительна к регистру, рекомендуется писать название с большой буквы для обеспечения совместимости.
  3. Раскладка: Убедитесь, что кавычки введены в английской раскладке. Иногда визуально похожие символы из других кодировок могут вызывать ошибку Поле не найдено "год", так как система воспринимает слово без правильных кавычек как имя поля данных, а не как литерал.

Определение переменной Возраст

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

Для вычисления возраста на текущую дату или дату отчета используем функцию РазностьДат. Рассмотрим пример вычисления:

РазностьДат([Дата рождения], &Период, "Год")

Здесь &Период — это стандартный параметр отчета, указывающий на дату формирования данных. Если мы хотим видеть возраст на сегодня, можно применить функцию ТекущаяДата().

Комплексное решение для расчета срока замены паспорта

С учетом всех технических нюансов и правил синтаксиса, итоговое рабочее выражение для пользовательского поля будет выглядеть так:


Выбор
    Когда РазностьДат([Дата рождения], &Период, "Год") < 20
    Тогда ДобавитьКДате([Дата рождения], "Год", 20)
    Когда РазностьДат([Дата рождения], &Период, "Год") >= 20 И РазностьДат([Дата рождения], &Период, "Год") < 45
    Тогда ДобавитьКДате([Дата рождения], "Год", 45)
    Иначе ДатаВремя(1, 1, 1)
Конец

Обратите внимание: Согласно законодательству РФ, паспорт подлежит замене по достижении возраста 20 и 45 лет. Это значит, что если сотруднику исполнилось 20, он должен заменить паспорт. В формуле выше мы рассчитываем именно дату наступления этого события. Для решения этой задачи можно использовать готовый отчет со списком работников с просроченными паспортами.

Учет особенностей законодательства (90 дней)

Проанализируем современные требования законодательства РФ. С 2021 года паспорт остается действительным еще в течение 90 дней после достижения возраста 20 или 45 лет. Если нам нужно построить отчет, который показывает крайний срок действия документа, мы должны добавить еще 90 дней к полученной дате.

Рассмотрим пример модифицированной формулы:


ДобавитьКДате(
    Выбор
        Когда РазностьДат([Дата рождения], &Период, "Год") < 20 Тогда ДобавитьКДате([Дата рождения], "Год", 20)
        Иначе ДобавитьКДате([Дата рождения], "Год", 45)
    Конец, 
    "День", 90
)

Типичные ошибки и способы их устранения

Если при сохранении выражения система продолжает выдавать "Синтаксическую ошибку", проверим следующие моменты:

Альтернативный метод: Вычисляемые поля

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

Таким образом, создание пользовательских полей-выражений — это мощный инструмент кастомизации отчетов в ЗУП 3 без привлечения программиста для изменения конфигурации. Главное — строго соблюдать правила написания функций СКД и следить за чистотой используемых символов.

← На главную