Как исправить ошибку «Неверное имя колонки» при заполнении документа «Резервы отпусков» в 1С:ЗУП 3.1

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

При работе в программе 1С:Зарплата и управление персоналом 8 (редакция 3.1) пользователи часто сталкиваются с ситуацией, когда после очередного обновления конфигурации стандартные механизмы начинают выдавать критические ошибки. Одной из таких проблем является ошибка «Неверное имя колонки» при попытке автоматического заполнения документа Резервы отпусков (или Начисление оценочных обязательств по отпускам в зависимости от версии). Давайте подробно разберем, почему это происходит и как устранить неисправность несколькими способами.

Анализ технической причины ошибки

Проанализируем текст ошибки, который выводится в окне сообщения. Обычно он выглядит следующим образом:

{ОбщийМодуль.РезервОтпусков.Модуль(1973)}: ТаблицаОстатковСотрудника.Сортировать("СтатьяФинансирования");

Выясним причину такого поведения системы. Проблема кроется в логике формирования временных таблиц в общем модуле РезервОтпусков. Когда программа пытается собрать данные о накопленных остатках отпусков и обязательств, она вызывает функцию ПолучитьВходящиеОстатки. В некоторых случаях — например, если в базе ведется учет по статьям финансирования, но по конкретному сотруднику или подразделению на начало периода остатки отсутствуют — эта функция возвращает таблицу с неполной структурой. В этой структуре физически отсутствует колонка СтатьяФинансирования.

Следовательно, когда код доходит до строки ТаблицаОстатковСотрудника.Сортировать("СтатьяФинансирования"), метод Сортировать не находит указанную колонку в таблице значений и прерывает выполнение операции с системной ошибкой. Эта проблема официально признана ошибкой конфигурации (номер ошибки 10221376).

Способ 1: Исправление программного кода (для программистов)

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

  1. Откроем Конфигуратор и перейдем в дерево метаданных.
  2. Найдем общий модуль РезервОтпусков.
  3. Внутри модуля найдем процедуру ДополнитьТаблицуНакопленнымиРезервами.
  4. Проанализируем строку вызова функции получения остатков. Нам нужно добавить третий параметр Истина, который заставит систему принудительно создавать необходимые колонки в структуре таблицы, даже если данных по ним нет.

Найдем следующую строку кода:


ТаблицаОстатков = ПолучитьВходящиеОстатки(СтруктураПараметровРасчета, ПараметрыРасчетаОбязательств);

И заменим ее на исправленный вариант:


// Добавляем третий параметр "Истина" для корректного формирования структуры таблицы
ТаблицаОстатков = ПолучитьВходящиеОстатки(СтруктураПараметровРасчета, ПараметрыРасчетаОбязательств, Истина);

После внесения правок необходимо сохранить конфигурацию и обновить базу данных. Этот метод гарантирует, что таблица значений всегда будет содержать колонку СтатьяФинансирования, и метод Сортировать отработает без ошибок.

Способ 2: Установка официального патча или обновление конфигурации

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

Вариант А: Установка патча (EF_10221376)

Если в вашей программе включена «Интернет-поддержка», вы можете загрузить исправление автоматически. Разберем этот процесс:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Выберем пункт Обновление программы — Установка исправлений (патчей).
  3. Найдем в списке патч с кодом EF_10221376 (или аналогичный для вашего релиза).
  4. Нажмем Установить. После перезапуска программы ошибка исчезнет.

Вариант Б: Обновление до актуального релиза

Данная ошибка была исправлена в последующих выпусках программы. Рекомендуется обновить конфигурацию до следующих версий (или более новых):

Способ 3: Ручной обход проблемы через корректировку остатков

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

Проанализируем ситуацию: ошибка возникает из-за отсутствия данных в регистре «Оценочные обязательства по сотрудникам». Попробуем выполнить следующие действия:

  1. Создадим документ Корректировка остатков (в подразделе учета резервов).
  2. Выберем вид операции «Корректировка обязательств и резервов».
  3. Попробуем заполнить табличную часть «Обязательства и резервы по сотрудникам» хотя бы фиктивными или нулевыми значениями по тем статьям финансирования, которые используются в организации.
  4. После записи такого документа функция ПолучитьВходящиеОстатки увидит записи в регистре и сформирует колонку СтатьяФинансирования в итоговой таблице.

Важно: Этот метод является временным и трудозатратным, поэтому мы рекомендуем использовать Способ 1 или Способ 2.

Особенности файлового и клиент-серверного вариантов

Посмотрим на ситуацию с точки зрения архитектуры базы данных. В сообщении автора указано, что база файловая. В файловом варианте текст ошибки выводится максимально подробно, что позволяет нам сразу увидеть имя модуля и номер строки.

В случае, если бы база была клиент-серверной, ошибка могла бы выглядеть как неопределенное сообщение «Ошибка выполнения фонового задания». В такой ситуации для диагностики мы рекомендуем заглянуть в Журнал регистрации (раздел Администрирование — Обслуживание). Там в событии «Ошибка» будет содержаться тот же самый стек вызовов, указывающий на модуль РезервОтпусков.

Заключение

Мы проанализировали типовую ошибку в 1С:ЗУП 3.1, связанную с некорректным формированием таблицы остатков резервов. Выяснили, что основной причиной является отсутствие обязательного параметра в функции ПолучитьВходящиеОстатки, что приводит к отсутствию колонки СтатьяФинансирования. Для решения проблемы лучше всего использовать установку патчей через интернет-поддержку или обновить программу до актуального релиза. Если же требуется мгновенное исправление в коде, достаточно добавить Истина в вызов соответствующей функции в общем модуле.

← На главную