Как исправить ошибку «Менеджер временных таблиц не найден» в 1С:ERP и ЗУП при пересчете страховых взносов

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

В процессе работы с актуальными релизами конфигураций 1С:ERP Управление предприятием 2 (2.5.24.48) и 1С:Зарплата и управление персоналом (3.1.34.xx) пользователи и технические специалисты часто сталкиваются с критической ошибкой при выполнении операции пересчета страховых взносов. В документе «Начисление зарплаты и взносов» при нажатии на кнопку «Пересчитать взносы» система прерывает работу с сообщением: «Менеджер временных таблиц не найден». Разберем природу этого сбоя и способы его устранения.

Выясним причину возникновения ошибки

Проанализируем техническую сторону вопроса. Ошибка напрямую связана с изменениями в механизмах корректировки ранее начисленных сумм, которые были внедрены в последних обновлениях. Проблема кроется в том, что при вызове локального пересчета взносов из формы документа контекст выполнения не всегда инициализирует объект МенеджерВременныхТаблиц.

Рассмотрим подробнее цепочку вызовов. Когда мы нажимаем кнопку пересчета, программа обращается к модулям, отвечающим за учет доходов и расчет взносов. В определенных случаях, особенно когда в документе присутствуют сторнируемые суммы или исправления прошлых периодов, система пытается вызвать процедуру корректировки. В коде это выглядит как обращение к структуре ИсходныеДанные, из которой ожидается получение ссылки на менеджер временных таблиц. Если эта ссылка оказывается Неопределено, любая последующая попытка проверить наличие временных таблиц в этом менеджере приводит к аварийному завершению сеанса.

Технический анализ кода в общем модуле

Посмотрим на пример кода, где локализована ошибка. Проблема обычно обнаруживается в общем модуле ОтражениеЗарплатыВБухучетеРасширенный (или аналогичных модулях в ЗУП КОРП). Проанализируем процедуру ВыполнитьКорректировкуРанееНачисленныхСумм.

В проблемных релизах код выглядел следующим образом:


Процедура ВыполнитьКорректировкуРанееНачисленныхСумм(БухучетТекущегоРасчета, ИсходныеДанные)
    
    МенеджерВТ = ИсходныеДанные.МенеджерВременныхТаблиц;
    
    // Ошибка возникает здесь, если МенеджерВТ равен Неопределено
    Если Не ЗарплатаКадры.ВТСуществует(МенеджерВТ, "ВТРанееНачисленоДляКорректировки") Тогда
        Возврат;
    КонецЕсли;

КонецПроцедуры

Как мы видим, в данном фрагменте отсутствует проверка самого объекта МенеджерВТ на валидность перед вызовом функции ВТСуществует. Кроме того, ситуация осложняется тем, что таблица ВТРанееНачисленоДляКорректировки может быть создана, но не содержать строк, что также должно обрабатываться корректно.

Разберем способы решения проблемы

Существует несколько подходов к исправлению данной ситуации в зависимости от возможности внесения изменений в конфигурацию и доступности обновлений.

1. Установка официальных патчей (исправлений)

Для конфигураций 1С:ERP 2.5.24 и ЗУП 3.1.34 фирма «1С» выпустила ряд оперативных исправлений. Рекомендуется зайти в раздел «Обслуживание» — «Обновление программы» — «Установленные исправления (патчи)» и проверить наличие патча с префиксом EF_60015942. Этот патч добавляет необходимые проверки в программный код и устраняет ошибку без необходимости дожидаться следующего минорного релиза.

2. Ручная корректировка кода (через расширение)

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


МенеджерВТ = ИсходныеДанные.МенеджерВременныхТаблиц;

Если МенеджерВТ = Неопределено 
    Или Не ЗарплатаКадры.ВТСуществует(МенеджерВТ, "ВТРанееНачисленоДляКорректировки") 
    Или Не ЗарплатаКадры.ВТСодержитСтроки(МенеджерВТ, "ВТРанееНачисленоДляКорректировки") Тогда
    Возврат;
КонецЕсли;

Добавление проверки МенеджерВТ = Неопределено позволяет безопасно выйти из процедуры, если контекст расчета не предполагает использование временных таблиц в данный момент. А функция ВТСодержитСтроки гарантирует, что мы не будем пытаться обрабатывать пустые данные.

3. Использование полного пересчета документа

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

Особенности учета и платформа

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

Также стоит обратить внимание на данные сотрудников, по которым возникает ошибка. Чаще всего это сотрудники, имеющие:

  1. Отрицательные начисления (сторнирование).
  2. Перерасчеты за прошлые месяцы, зарегистрированные в текущем периоде.
  3. Сложные распределения по способам отражения в бухучете.

Именно для этой категории лиц алгоритм заходит в процедуру ВыполнитьКорректировкуРанееНачисленныхСумм, где и происходит сбой.

Резюме

Подводя итог, можно сказать, что ошибка «Менеджер временных таблиц не найден» является следствием программной недоработки в логике проверки временных объектов. Для её устранения следует в первую очередь установить патчи 1С, а при невозможности — внести исправления в код через механизм расширений, добавив проверку на Неопределено для переменной МенеджерВТ.

← На главную