Как исправить ошибку «Поле не найдено ТерриторияВыполненияРаботВОрганизации» в 1С:ЗГУ и ЗУП?

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

При работе в конфигурациях «Зарплата и государственное учреждение» (ЗГУ) или «Зарплата и управление персоналом» (ЗУП) редакции 3.1 после обновления на релиз 3.1.19.48 многие пользователи столкнулись с неприятной ситуацией. При попытке пересчитать сотрудника в документе Начисление зарплаты и взносов система выдает критическую ошибку, связанную с отсутствием поля ТерриторияВыполненияРаботВОрганизации во временных таблицах бухучета.

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

Разбор причины возникновения ошибки

Для начала проанализируем текст ошибки. Стек вызовов указывает на общий модуль ОтражениеЗарплатыВБухучетеРасширенный и процедуру СоздатьВТБухучетНачисленийРанееНачислено. Суть проблемы заключается в следующем: в ветке 3.1.19 разработчики фирмы «1С» проводили масштабный рефакторинг механизмов учета территорий и условий труда. Это было необходимо для более гибкого распределения затрат и корректного формирования отчетности в ПФР (ныне СФР).

В процессе этого рефакторинга в программном коде возник рассинхрон. При формировании пакета запросов в одном из вспомогательных алгоритмов временная таблица БухучетНачислений создается без колонки ТерриторияВыполненияРаботВОрганизации. Однако далее по коду основной запрос, отвечающий за сбор данных для отражения в бухгалтерском учете, пытается обратиться к этой колонке. Поскольку в структуре таблицы её нет, платформа 1С генерирует исключение: Поле не найдено.

Важно отметить, что эта ошибка чаще всего проявляется именно при порционном (выборочном) пересчете конкретного сотрудника. Это происходит потому, что при полном заполнении документа 1С использует одни процедуры формирования данных, а при пересчете отдельной строки — другие, оптимизированные механизмы, в которых и была допущена программная ошибка.

Способ 1: Установка оперативных исправлений (патчей)

Поскольку проблема носит массовый характер и признана разработчиками, первым делом нам необходимо проверить наличие официальных исправлений. Фирма «1С» оперативно выпускает небольшие расширения (патчи) для исправления подобных «детских болезней» новых релизов.

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

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

Для релиза 3.1.19.48 ищите исправления с кодом, начинающимся на EF_00..., в описании которых упоминается «БухучетНачислений» или «Отражение зарплаты». Установка такого патча — самый быстрый и безопасный способ решения проблемы без изменения конфигурации.

Способ 2: Полное перезаполнение документа

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

  1. Откройте проблемный документ Начисление зарплаты и взносов.
  2. Вместо использования правой кнопки мыши на конкретном сотруднике («Пересчитать сотрудника»), воспользуйтесь кнопкой Заполнить в шапке документа.

Внимание: Помните, что команда «Заполнить» полностью очистит документ и создаст строки заново. Если вы вносили ручные правки в начисления других сотрудников, они будут потеряны. Используйте этот метод с осторожностью.

Способ 3: Отключение функционала территорий

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

Для этого выполним следующее:

  1. Перейдем в меню Настройка — Расчет зарплаты.
  2. Найдем флаг Использовать территории и условия труда.
  3. Если он включен, попробуйте его снять (предварительно убедившись на копии базы, что это не затронет ваши кадровые данные).

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

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

Если вы являетесь техническим специалистом и вам нужно гарантированное решение «здесь и сейчас», разберем, как исправить код через расширение конфигурации. Нам нужно модифицировать процедуру СоздатьВТБухучетНачисленийРанееНачислено в общем модуле ОтражениеЗарплатыВБухучетеРасширенный.

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

В расширении это может выглядеть примерно так:


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

Добавление ЗНАЧЕНИЕ(Справочник.ТерриторииВыполненияРабот.ПустаяСсылка) позволит запросу успешно пройти компиляцию и выполнение, так как поле физически появится в таблице БухучетНачислений.

Заключение и рекомендации

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

Наши рекомендации:

  1. Если есть возможность, обновите конфигурацию до более высокого подрелиза ветки 3.1.19 (например, 3.1.19.80 или актуальных сборок 3.1.23 / 3.1.27), где этот баг уже исправлен в «коробке».
  2. Если обновление конфигурации сейчас невозможно (например, идет отчетный период), используйте автоматическую установку патчей.
  3. В крайнем случае, используйте полное перезаполнение документов вместо пересчета отдельных строк.

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

← На главную