Переход на новые версии программного продукта 1С:Зарплата и управление персоналом 8 (ред. 3) нередко преподносит пользователям неприятные сюрпризы. Одним из наиболее резонансных обновлений своего времени стал релиз 3.1.9.106. Сразу после его установки многие системные администраторы и бухгалтеры столкнулись с невозможностью провести привычный ежемесячный расчет заработной платы и аванса.
В рамках этой статьи мы подробно разберем, с какими именно критическими ошибками пришлось столкнуться пользователям, выясним технические причины их возникновения и рассмотрим проверенные практические способы их решения как с помощью штатных настроек программы, так и посредством программного вмешательства.
Проанализируем ситуацию пошагово, разделив проблемы на ключевые блоки.
---
При попытке автоматического заполнения документа Начисление зарплаты и взносов программа внезапно прекращала работу, выдавая одну из следующих системных ошибок в модуле менеджера расчета:
{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(10141)}: Поле объекта не обнаружено (ВидРасчета)
Отбор.ВидРасчета = СтрокаЗадолженнсти.Удержание;
В других случаях база данных сигнализировала об ошибке выполнения запроса из-за отсутствия обязательного параметра:
{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(2672)}: Ошибка при вызове метода контекста (Выполнить)
ИспольнительныеДокументы = Запрос.Выполнить.Выгрузить.ВыгрузитьКолонку("ИсполнительныйДокумент");
по причине:
{(4, 75)}: Не задано значение параметра "МесяцНачисления"
РегистрСведений.УсловияУдержанияПоИсполнительномуДокументу.СрезПоследних(&&МесяцНачисления, ИсполнительныйДокумент В (&ОтборОснований)) КАК УсловияУдержанияПоИсполнительномуДокументу
Выясним причину возникновения ошибки:
Данный сбой происходит из-за грубой опечатки разработчиков в коде нового оптимизированного алгоритма расчета. Проанализируем ошибочный участок кода:
Отбор = Новый Структура("Удержание, ДокументОснование");
Задолженность = ЗадолженностьПоУдержаниямФизическихЛиц;
Для Каждого СтрокаЗадолженнсти Из Задолженность Цикл
Отбор.ВидРасчета = СтрокаЗадолженнсти.Удержание; // Ошибка здесь!
КонецЦикла;
Как мы видим, в структуре Отбор инициализируются свойства Удержание и ДокументОснование. Однако внутри цикла разработчик пытается обратиться к свойству ВидРасчета, которого в этой структуре просто нет. Платформа вполне логично сообщает, что поле объекта не обнаружено.
Эта ошибка проявляется не во всех базах, а только в тех, где ранее использовался механизм ограничения взысканий. Если в прошлых периодах по сотрудникам вводился документ Ограничение взысканий и в регистре сведений скопилась задолженность, то алгоритм активизирует этот блок кода и заполнение документа прерывается.
Для того чтобы функционал заработал, необходимо было активировать опцию ограничения удержаний в настройках расчета зарплаты (установить флаг Ограничивать сумму удержаний процентом от заработной платы), чтобы программа корректно инициализировала регистры, либо внести исправления в код модуля.
Способ временного устранения ошибки в коде:
Если у вас есть возможность вносить изменения в конфигурацию (или создать расширение), замените ошибочное обращение:
Отбор.ВидРасчета = СтрокаЗадолженнсти.Удержание;
на корректный вариант:
Отбор.Удержание = СтрокаЗадолженнсти.Удержание;
---
Вторая массовая проблема возникала при расчете начислений за первую половину месяца (аванса). Бухгалтеры получали сообщение об ошибке следующего вида:
{Обработка.МенеджерРасчетаЗарплаты.МодульОбъекта(2086)}: Ошибка при вызове метода контекста (Выполнить)
РанееОплаченныеПериоды = Запрос.Выполнить.Выгрузить;
по причине:
{(19, 24)}: Таблица не найдена "ПолученияПериодическихДанныхСотрудников"
Внутреннее СОЕДИНЕНИЕ ПолученияПериодическихДанныхСотрудников КАК СотрудникиПериоды
Анализ ситуации:
Опытным путем пользователи выяснили удивительную закономерность: если рассчитывать подразделение, в котором числится менее 50 сотрудников, документ заполняется и рассчитывается абсолютно нормально. Если же сотрудников больше 50 — программа сразу выдает ошибку отсутствия таблицы ПолученияПериодическихДанныхСотрудников.
Это связано с тем, что в релизе 3.1.9.106 был кардинально изменен механизм расчета заработной платы. Разработчики разделили алгоритм на два независимых механизма:
ПолученияПериодическихДанныхСотрудников во временных таблицах запроса, что приводило к аварийному завершению транзакции.Решение проблемы без программирования:
К счастью, разработчики 1С оставили «путь отхода» для тех систем, на которых оптимизированный расчет дает сбои. Для этого в системе предусмотрена специальная константа ВыполнятьРасчетЗарплатыБезОптимизации.
Давайте пошагово разберем, как отключить новый оптимизированный алгоритм и вернуться к стабильному расчету:
Настройки -> Параметры -> Отображать команду "Все функции".ВыполнятьРасчетЗарплатыБезОптимизации).Истина) и сохраните изменения.После включения этой константы программа принудительно переключается на использование МенеджерРасчетаЗарплатыАрхивный. Все расчеты начинают выполняться по старому, надежному алгоритму, и ошибка с таблицей ПолученияПериодическихДанныхСотрудников полностью исчезает.
---
Многие пользователи, успешно обновившиеся на релиз 106, столкнулись с неожиданным поведением системы при расчете текущего налога. При заполнении документов за январь или февраль 2019 года на вкладке НДФЛ внезапно регистрировались гигантские отрицательные или положительные суммы перерасчетов за прошлый 2018 год.
Выясним причину:
В новом релизе была изменена логика учета доходов и исчисления налога в разрезе дат получения дохода. Из-за некорректного анализа старых регистров в базах с длительной историей программа начинала путать плановые даты выплаты зарплаты с фактическими датами ведомостей, вследствие чего запускался автоматический перерасчет закрытых периодов прошлого года.
Решение:
Для исправления этой проблемы требовалось либо точечно корректировать регистры сведений по НДФЛ, либо дождаться релиза 3.1.9.108, где логика сопоставления доходов была скорректирована. Как временная мера — бухгалтерам приходилось вручную удалять строки с некорректными перерасчетами налога за прошлый год непосредственно из табличной части документа начисления.
---
При переходе в списки документов или при открытии журнала «Все начисления» некоторые администраторы получали критическую ошибку компиляции кода формы:
Переменная не определена ДвумерныеШтрихкоды...
Причина и решение:
Данная ошибка связана с тем, что конфигурация 1С:ЗУП версии 3.1.9.106 использует новые методы интеграции с библиотеками печати двухмерных штрихкодов, встроенными в современные версии платформы «1С:Предприятие 8.3». Если ваша технологическая платформа устарела (например, используется версия ниже рекомендованной в файле Readme к релизу), система не сможет распознать данные методы.
Для исправления этой ошибки настоятельно рекомендуется обновить технологическую платформу 1С до актуальной версии и полностью очистить локальный кэш конфигурации на рабочих станциях пользователей.
---
Несмотря на обилие критических ошибок («детских болезней» релиза), переход на новую линейку 3.1.9 для многих компаний был вынужденным шагом. Проанализируем ключевые полезные изменения, которые появились в этой версии:
---
История с релизом 3.1.9.106 в очередной раз доказывает старое правило работы с программными продуктами фирмы 1С. Сформулируем основные рекомендации для минимизации рисков при обновлении баз:
ПолученияПериодическихДанныхСотрудников, еще до того, как с ними столкнутся реальные пользователи.Мы надеемся, что данный разбор помог вам успешно преодолеть трудности, связанные с расчетом заработной платы на релизе 3.1.9.106, и вооружил вас полезными инструментами для диагностики будущих обновлений вашей системы!