При расчете заработной платы в программных продуктах на платформе 1С (особенно в конфигурациях семейства «1С-КАМИН: Расчет заработной платы» версии 3.0 или других решениях на обычных формах) пользователи иногда сталкиваются с неожиданным сбоем. Ошибка возникает в самый неподходящий момент — при попытке добавить сотрудников в документ Начисление заработной платы или при автоматическом заполнении табличной части. Программа выдает системное сообщение: «Не задано значение параметра "парамМесяц"» или «Должен быть задан параметр "парамМесяц"».
В этой статье мы подробно разберем техническую природу данной ошибки, выясним, почему она внезапно появляется (даже если программа не менялась несколько лет), и рассмотрим пошаговые алгоритмы её самостоятельного исправления без привлечения программистов.
Для того чтобы понять суть проблемы, проанализируем внутреннее поведение системы 1С. Когда бухгалтер нажимает кнопку заполнения списка сотрудников или вводит людей в документ расчета вручную, программа не просто добавляет строки. В фоновом режиме запускается сложный SQL-запрос к базе данных. Этот запрос собирает информацию по каждому сотруднику: его актуальный оклад, тарифную ставку, график работы и норму времени на выбранный месяц начисления.
Для корректного отбора данных механизму платформы обязательно нужно передать в запрос временную границу — период, за который производится расчет. В коде конфигурации этот период передается через специальную переменную-параметр. Обычно он называется парамМесяц или парам_Месяц.
Если в коде происходит сбой, или если в базе данных отсутствуют необходимые настройки времени на текущий расчетный год, этот параметр передается в запрос пустым (как Неопределено или пустая дата). База данных не может выполнить запрос с пустым ключевым параметром и аварийно завершает работу, выдавая пользователю ошибку.
Типичный пример проблемного участка программного кода в конфигураторе выглядит следующим образом:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| НормыВремени.Период,
| НормыВремени.РабочихДней
|ИЗ
| РегистрСведений.НормыВремени КАК НормыВремени
|ГДЕ
| НормыВремени.Период = &парамМесяц";
// Если переменная "ВыбранныйМесяц" пустая или не определена системой,
// параметр запроса не устанавливается, что приводит к ошибке выполнения.
Если ЗначениеЗаполнено(ВыбранныйМесяц) Тогда
Запрос.УстановитьПараметр("парамМесяц", ВыбранныйМесяц);
КонецЕсли;
Рассмотрим подробнее три основные практические методики устранения этой неисправности.
Самая распространенная причина сбоя — наступление нового рабочего года при отсутствии в системе актуального календаря. Если конфигурация долгое время не обновлялась, в ней отсутствуют настройки праздничных дней, переносов и рабочих смен на новые периоды. Программа пытается определить норму времени для сотрудника по графику, обращается к календарю, видит там «пустоту» и не может рассчитать дату периода, возвращая пустой параметр в запрос.
Выполним по шагам процедуру актуализации временных настроек в программе:
Перейдем в главное меню программы. Найдем раздел Справочники, далее выберем подраздел Прочие (в некоторых интерфейсах он находится в меню Предприятие) и откроем справочник Периоды.
В верхней панели открывшегося списка найдем и нажмем кнопку «Заполнить периоды на...». В появившемся окне укажем текущий рабочий год (например, 2024 или 2025) и подтвердим автоматическое создание записей. Система должна сгенерировать строки для каждого месяца указанного года.
Перейдем в меню через пункт Операции -> Регистры сведений (или через общие настройки программы в интерфейсе) и найдем регистр под названием Календарь (также он может называться Производственный календарь).
Выберем нужный календарный год в верхней части формы настройки. Нажмем кнопку «Заполнить по умолчанию» или «Заполнить календарь». Программа автоматически распределит рабочие и выходные дни. После заполнения обязательно нажмем кнопку Записать и закрыть, чтобы зафиксировать изменения в базе данных.
В конфигурациях «КАМИН» расчет зарплаты критически зависит от специального технологического документа — Начало месяца. Именно он утверждает нормы времени на конкретный расчетный период.
Убедимся, что для месяца, в котором начисляется заработная плата, создан, заполнен и проведен документ Начало месяца. Без проведенного документа нормы времени программа не сможет сопоставить графики сотрудников с периодом начисления.
Если календари заполнены, но ошибка «парамМесяц» все равно продолжает появляться на одном конкретном компьютере, дело может быть в локальном кэше платформы 1С. Временные файлы кэша имеют свойство накапливать ошибки позиционирования данных на форме, из-за чего параметры документов могут передаваться некорректно.
Для быстрой и безопасной очистки кэша проделаем следующие действия:
1С:Предприятие (окно со списком баз данных).Иногда сбой параметра происходит не из-за общих настроек программы, а из-за повреждения кадровых данных конкретного человека. Например, у сотрудника может быть некорректно заполнена дата приема на работу, увольнения, или в его истории перемещений отсутствует привязка к графику работы.
Проанализируем ситуацию и локализуем источник проблемы:
Вместо того чтобы добавлять в документ Начисление заработной платы сразу всех сотрудников кнопкой автоматического подбора, попробуем вводить людей по одному вручную (через кнопку Добавить). Нам нужно внимательно отследить момент, на каком именно сотруднике программа выдаст ошибку парамМесяц.
Как только «проблемный» сотрудник будет определен, откроем его карточку в справочнике Сотрудники и проверим:
Исправление некорректной записи в истории кадровых перемещений сотрудника сразу снимет проблему с передачей параметров расчета.