При работе в программе 1С:Зарплата и управление персоналом 8 (редакция 3.1) пользователи часто сталкиваются с ситуацией, когда после очередного обновления конфигурации стандартные механизмы начинают выдавать критические ошибки. Одной из таких проблем является ошибка «Неверное имя колонки» при попытке автоматического заполнения документа Резервы отпусков (или Начисление оценочных обязательств по отпускам в зависимости от версии). Давайте подробно разберем, почему это происходит и как устранить неисправность несколькими способами.
Проанализируем текст ошибки, который выводится в окне сообщения. Обычно он выглядит следующим образом:
{ОбщийМодуль.РезервОтпусков.Модуль(1973)}: ТаблицаОстатковСотрудника.Сортировать("СтатьяФинансирования");
Выясним причину такого поведения системы. Проблема кроется в логике формирования временных таблиц в общем модуле РезервОтпусков. Когда программа пытается собрать данные о накопленных остатках отпусков и обязательств, она вызывает функцию ПолучитьВходящиеОстатки. В некоторых случаях — например, если в базе ведется учет по статьям финансирования, но по конкретному сотруднику или подразделению на начало периода остатки отсутствуют — эта функция возвращает таблицу с неполной структурой. В этой структуре физически отсутствует колонка СтатьяФинансирования.
Следовательно, когда код доходит до строки ТаблицаОстатковСотрудника.Сортировать("СтатьяФинансирования"), метод Сортировать не находит указанную колонку в таблице значений и прерывает выполнение операции с системной ошибкой. Эта проблема официально признана ошибкой конфигурации (номер ошибки 10221376).
Если вы имеете возможность вносить изменения в конфигурацию (база находится на поддержке с возможностью изменения), этот способ является самым быстрым и эффективным. Рассмотрим по шагам, что необходимо изменить.
РезервОтпусков.ДополнитьТаблицуНакопленнымиРезервами.Истина, который заставит систему принудительно создавать необходимые колонки в структуре таблицы, даже если данных по ним нет.Найдем следующую строку кода:
ТаблицаОстатков = ПолучитьВходящиеОстатки(СтруктураПараметровРасчета, ПараметрыРасчетаОбязательств);
И заменим ее на исправленный вариант:
// Добавляем третий параметр "Истина" для корректного формирования структуры таблицы
ТаблицаОстатков = ПолучитьВходящиеОстатки(СтруктураПараметровРасчета, ПараметрыРасчетаОбязательств, Истина);
После внесения правок необходимо сохранить конфигурацию и обновить базу данных. Этот метод гарантирует, что таблица значений всегда будет содержать колонку СтатьяФинансирования, и метод Сортировать отработает без ошибок.
Фирма «1С» оперативно выпустила исправления для данной ошибки. Рассмотрим, как решить проблему без прямого редактирования кода, что предпочтительнее для баз на типовой поддержке.
Вариант А: Установка патча (EF_10221376)
Если в вашей программе включена «Интернет-поддержка», вы можете загрузить исправление автоматически. Разберем этот процесс:
EF_10221376 (или аналогичный для вашего релиза).Вариант Б: Обновление до актуального релиза
Данная ошибка была исправлена в последующих выпусках программы. Рекомендуется обновить конфигурацию до следующих версий (или более новых):
Если у вас нет возможности редактировать код или обновлять программу прямо сейчас, можно попробовать «обмануть» алгоритм, создав данные, которых не хватает системе для формирования правильной структуры таблицы. Рассмотрим, как это сделать.
Проанализируем ситуацию: ошибка возникает из-за отсутствия данных в регистре «Оценочные обязательства по сотрудникам». Попробуем выполнить следующие действия:
ПолучитьВходящиеОстатки увидит записи в регистре и сформирует колонку СтатьяФинансирования в итоговой таблице.Важно: Этот метод является временным и трудозатратным, поэтому мы рекомендуем использовать Способ 1 или Способ 2.
Посмотрим на ситуацию с точки зрения архитектуры базы данных. В сообщении автора указано, что база файловая. В файловом варианте текст ошибки выводится максимально подробно, что позволяет нам сразу увидеть имя модуля и номер строки.
В случае, если бы база была клиент-серверной, ошибка могла бы выглядеть как неопределенное сообщение «Ошибка выполнения фонового задания». В такой ситуации для диагностики мы рекомендуем заглянуть в Журнал регистрации (раздел Администрирование — Обслуживание). Там в событии «Ошибка» будет содержаться тот же самый стек вызовов, указывающий на модуль РезервОтпусков.
Мы проанализировали типовую ошибку в 1С:ЗУП 3.1, связанную с некорректным формированием таблицы остатков резервов. Выяснили, что основной причиной является отсутствие обязательного параметра в функции ПолучитьВходящиеОстатки, что приводит к отсутствию колонки СтатьяФинансирования. Для решения проблемы лучше всего использовать установку патчей через интернет-поддержку или обновить программу до актуального релиза. Если же требуется мгновенное исправление в коде, достаточно добавить Истина в вызов соответствующей функции в общем модуле.