Как исправить ошибки заполнения и расчета зарплаты после обновления 1С:ЗУП на релиз 3.1.9.106?

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

Переход на новые версии программного продукта 1С:Зарплата и управление персоналом 8 (ред. 3) нередко преподносит пользователям неприятные сюрпризы. Одним из наиболее резонансных обновлений своего времени стал релиз 3.1.9.106. Сразу после его установки многие системные администраторы и бухгалтеры столкнулись с невозможностью провести привычный ежемесячный расчет заработной платы и аванса.

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

Проанализируем ситуацию пошагово, разделив проблемы на ключевые блоки.

---

Проблема №1: Ошибка заполнения удержаний и ограничений взысканий

При попытке автоматического заполнения документа Начисление зарплаты и взносов программа внезапно прекращала работу, выдавая одну из следующих системных ошибок в модуле менеджера расчета:


{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(10141)}: Поле объекта не обнаружено (ВидРасчета)
Отбор.ВидРасчета = СтрокаЗадолженнсти.Удержание;

В других случаях база данных сигнализировала об ошибке выполнения запроса из-за отсутствия обязательного параметра:


{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(2672)}: Ошибка при вызове метода контекста (Выполнить)
ИспольнительныеДокументы = Запрос.Выполнить.Выгрузить.ВыгрузитьКолонку("ИсполнительныйДокумент");
по причине:
{(4, 75)}: Не задано значение параметра "МесяцНачисления"
РегистрСведений.УсловияУдержанияПоИсполнительномуДокументу.СрезПоследних(&&МесяцНачисления, ИсполнительныйДокумент В (&ОтборОснований)) КАК УсловияУдержанияПоИсполнительномуДокументу

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

Данный сбой происходит из-за грубой опечатки разработчиков в коде нового оптимизированного алгоритма расчета. Проанализируем ошибочный участок кода:


Отбор = Новый Структура("Удержание, ДокументОснование");
Задолженность = ЗадолженностьПоУдержаниямФизическихЛиц;
Для Каждого СтрокаЗадолженнсти Из Задолженность Цикл
    Отбор.ВидРасчета = СтрокаЗадолженнсти.Удержание; // Ошибка здесь!
КонецЦикла;

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

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

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

Способ временного устранения ошибки в коде:

Если у вас есть возможность вносить изменения в конфигурацию (или создать расширение), замените ошибочное обращение:

Отбор.ВидРасчета = СтрокаЗадолженнсти.Удержание;

на корректный вариант:

Отбор.Удержание = СтрокаЗадолженнсти.Удержание; ---

Проблема №2: Сбой таблицы «ПолученияПериодическихДанныхСотрудников» при расчете аванса (Bug 10207110)

Вторая массовая проблема возникала при расчете начислений за первую половину месяца (аванса). Бухгалтеры получали сообщение об ошибке следующего вида:


{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(2086)}: Ошибка при вызове метода контекста (Выполнить)
РанееОплаченныеПериоды = Запрос.Выполнить.Выгрузить;
по причине:
{(19, 24)}: Таблица не найдена "ПолученияПериодическихДанныхСотрудников"
Внутреннее СОЕДИНЕНИЕ ПолученияПериодическихДанныхСотрудников КАК СотрудникиПериоды

Анализ ситуации:

Опытным путем пользователи выяснили удивительную закономерность: если рассчитывать подразделение, в котором числится менее 50 сотрудников, документ заполняется и рассчитывается абсолютно нормально. Если же сотрудников больше 50 — программа сразу выдает ошибку отсутствия таблицы ПолученияПериодическихДанныхСотрудников.

Это связано с тем, что в релизе 3.1.9.106 был кардинально изменен механизм расчета заработной платы. Разработчики разделили алгоритм на два независимых механизма:

  1. МенеджерРасчетаЗарплатыАрхивный — старый, проверенный и стабильный алгоритм из ветки 3.1.8.
  2. МенеджерРасчетаЗарплаты — новый, оптимизированный, но содержащий массу критических упущений в динамическом построении SQL-запросов к СУБД. При обработке пакетов данных объемом более 50 сотрудников менеджер оптимизации не успевал корректно сгенерировать временную таблицу ПолученияПериодическихДанныхСотрудников во временных таблицах запроса, что приводило к аварийному завершению транзакции.

Решение проблемы без программирования:

К счастью, разработчики 1С оставили «путь отхода» для тех систем, на которых оптимизированный расчет дает сбои. Для этого в системе предусмотрена специальная константа ВыполнятьРасчетЗарплатыБезОптимизации.

Давайте пошагово разберем, как отключить новый оптимизированный алгоритм и вернуться к стабильному расчету:

  1. Откройте программу под пользователем с правами Администратор.
  2. Перейдите в главное меню программы и выберите пункт Все функции (в более новых версиях платформы этот пункт называется Функции для технического специалиста). Если данный пункт скрыт, включите его отображение через Настройки -> Параметры -> Отображать команду "Все функции".
  3. В открывшемся окне найдите раздел Константы.
  4. Найдите в списке константу с именем Выполнять расчет зарплаты без оптимизации (в конфигураторе она соответствует объекту ВыполнятьРасчетЗарплатыБезОптимизации).
  5. Установите флаг (значение константы в Истина) и сохраните изменения.

После включения этой константы программа принудительно переключается на использование МенеджерРасчетаЗарплатыАрхивный. Все расчеты начинают выполняться по старому, надежному алгоритму, и ошибка с таблицей ПолученияПериодическихДанныхСотрудников полностью исчезает.

---

Проблема №3: Некорректный («бешеный») перерасчет НДФЛ за прошлые периоды

Многие пользователи, успешно обновившиеся на релиз 106, столкнулись с неожиданным поведением системы при расчете текущего налога. При заполнении документов за январь или февраль 2019 года на вкладке НДФЛ внезапно регистрировались гигантские отрицательные или положительные суммы перерасчетов за прошлый 2018 год.

Выясним причину:

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

Решение:

Для исправления этой проблемы требовалось либо точечно корректировать регистры сведений по НДФЛ, либо дождаться релиза 3.1.9.108, где логика сопоставления доходов была скорректирована. Как временная мера — бухгалтерам приходилось вручную удалять строки с некорректными перерасчетами налога за прошлый год непосредственно из табличной части документа начисления.

---

Проблема №4: Ошибка компиляции «Переменная не определена ДвумерныеШтрихкоды»

При переходе в списки документов или при открытии журнала «Все начисления» некоторые администраторы получали критическую ошибку компиляции кода формы:

Переменная не определена ДвумерныеШтрихкоды...

Причина и решение:

Данная ошибка связана с тем, что конфигурация 1С:ЗУП версии 3.1.9.106 использует новые методы интеграции с библиотеками печати двухмерных штрихкодов, встроенными в современные версии платформы «1С:Предприятие 8.3». Если ваша технологическая платформа устарела (например, используется версия ниже рекомендованной в файле Readme к релизу), система не сможет распознать данные методы.

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

---

Ради чего стоило обновляться на ветку 3.1.9?

Несмотря на обилие критических ошибок («детских болезней» релиза), переход на новую линейку 3.1.9 для многих компаний был вынужденным шагом. Проанализируем ключевые полезные изменения, которые появились в этой версии:

---

Какую стратегию обновлений выбрать в будущем?

История с релизом 3.1.9.106 в очередной раз доказывает старое правило работы с программными продуктами фирмы 1С. Сформулируем основные рекомендации для минимизации рисков при обновлении баз:

  1. Не спешите устанавливать «пятничные» релизы. Когда выходит глобальное обновление с изменением первой или второй цифры в номере релиза (например, переход с 3.1.8 на 3.1.9), это означает, что внутри конфигурации произошли масштабные архитектурные изменения. Дайте релизу «отлежаться» хотя бы 1-2 недели, пока другие пользователи не протестируют его на своих базах и разработчики не выпустят первый корректирующий хотфикс (как это случилось с выходом релиза 3.1.9.107 и последующего 3.1.9.108).
  2. Используйте тестовые базы. Никогда не выполняйте обновление сразу на рабочей базе данных. Разверните резервную копию на тестовом сервере (или локальном компьютере), выполните обновление и попробуйте рассчитать зарплату по нескольким крупным подразделениям. Это позволит выявить ошибки, подобные сбою таблицы ПолученияПериодическихДанныхСотрудников, еще до того, как с ними столкнутся реальные пользователи.
  3. Рассмотрите использование версий длительного сопровождения (LTS). Если вашей организации не требуются самые передовые функции и новые калькуляторы, оставайтесь на стабильных версиях длительной поддержки (таких как ветка 3.1.5 в свое время), для которых выпускаются только исправления критических ошибок и обновления законодательства.

Мы надеемся, что данный разбор помог вам успешно преодолеть трудности, связанные с расчетом заработной платы на релизе 3.1.9.106, и вооружил вас полезными инструментами для диагностики будущих обновлений вашей системы!

← На главную