При переходе на релиз 1.3.154.1 конфигурации "Управление производственным предприятием" пользователи столкнулись с рядом критических ошибок, связанных с внедрением прогрессивной ставки НДФЛ 15%. Эти ошибки блокируют расчет зарплаты, некорректно отражают суммы во взаиморасчетах и препятствуют печати кадровых документов. В данной статье мы подробно разберем причины возникновения этих проблем и способы их устранения до обновления на исправленный релиз.
Первая проблема проявляется при попытке расчета сотрудника, чей доход превышает порог в 5 миллионов рублей. Система выдает сообщение об ошибке: {ОбщийМодуль.ПроведениеРасчетов.Модуль(7779)}: Преобразование значения к типу Число не может быть выполнено. Проанализируем ситуацию и выясним причину.
Ошибка вызвана банальной опечаткой в коде, допущенной разработчиками при объявлении и использовании переменных для налога с превышения. В строке 7779 используется переменная, которая ранее не была инициализирована должным образом или имеет неверное имя. Рассмотрим, как внести исправление в конфигураторе:
ПроведениеРасчетов.НалогИсчисленныйСПревышения.Корректный код должен выглядеть следующим образом:
// Было:
НалогИсчисленныйСПревышения = НалогИсчисленныйСПревышения + НалогСДоходаСПревышения;
// Стало (правильный вариант):
НалогСПревышенияИсчисленный = НалогСПревышенияИсчисленный + НалогСДоходаСПревышения;
После замены переменной ошибка преобразования типа исчезнет, так как система начнет обращаться к уже объявленному числовому значению.
Многие бухгалтеры заметили, что после обновления в документе "Начисление зарплаты" суммы НДФЛ во взаиморасчетах стали попадать без копеек (округленными до целого рубля), хотя в самом расчете копейки присутствуют. Это приводит к расхождениям в выплатах и сальдо по сотрудникам.
Причина кроется в процедуре СформироватьВзаиморасчетыСРаботниками. В одном из запросов, использующих объединение (ОБЪЕДИНИТЬ ВСЕ), платформа 1С неявно приводит типы суммируемых полей к целому числу, если не указано явное приведение типов. Разберем, как это исправить программно.
Нам необходимо найти запрос в модуле документа и добавить функцию ВЫРАЗИТЬ для полей, где вычисляется налог. Рассмотрим пример изменения части запроса:
ВЫБРАТЬ
ЗплНДФЛ.ФизЛицо,
// Добавляем явное приведение к числу с 2 знаками после запятой
ВЫРАЗИТЬ(
-ЗплНДФЛ.Налог + ВЫБОР
КОГДА ЕСТЬNULL(НДФЛКЗачету.СуммаНДФЛКЗачету, 0) > ЗплНДФЛ.Налог
ТОГДА ЗплНДФЛ.Налог
ИНАЧЕ ЕСТЬNULL(НДФЛКЗачету.СуммаНДФЛКЗачету, 0)
КОНЕЦ
КАК ЧИСЛО(15, 2)) КАК Налог
ИЗ
ВТНДФЛ КАК ЗплНДФЛ
ЛЕВОЕ СОЕДИНЕНИЕ ВТНДФЛКЗачету КАК НДФЛКЗачету
ПО ЗплНДФЛ.ФизЛицо = НДФЛКЗачету.ФизЛицо
Важно выполнить такое преобразование во всех блоках объединения запроса, где фигурируют суммы налога. Это гарантирует, что платформа сохранит точность до копеек при формировании временных таблиц.
При попытке распечатать форму Т-61 из документа "Расчет при увольнении сотрудника организации" в релизе 1.3.154.1 возникает синтаксическая ошибка запроса: Ожидается выражение ")". Это происходит из-за пропущенной закрывающей скобки в тексте запроса внутри программного модуля.
Рассмотрим порядок исправления:
РасчетПриУвольненииРаботникаОрганизацийДополнительный.СуммаНалога.Пример исправления в коде:
// В тексте запроса в районе строки 607 найдите фрагмент:
// КОНЕЦ * (НДФЛРасчетыСБюджетом.Налог + НДФЛРасчетыСБюджетом.НалогСПревышения) КАК СуммаНалога
// В некоторых местах может не хватать скобки при умножении или в операторе ВЫБОР.
// Убедитесь, что все открытые скобки закрыты перед использованием псевдонима поля КАК.
Обычно ошибка заключается в том, что в выражении ВЫБОР...КОНЕЦ расчетная формула не была полностью обернута в скобки перед присвоением псевдонима. Исправление данной синтаксической ошибки позволит бухгалтерии беспрепятственно печатать записки-расчеты.
Еще один нюанс, выявленный в ходе эксплуатации релиза, связан с установкой параметра ПериодРегистрации в запросах расчета НДФЛ. В типовом решении параметр устанавливался на КонецМесяца, что в определенных сценариях приводило к некорректному захвату данных из регистров накопления.
Проанализируем строку 12589 модуля документа "Начисление зарплаты". Опытным путем программисты установили, что использование начала месяца более стабильно для получения остатков по НДФЛ к зачету:
// Рекомендуемое исправление:
Запрос.УстановитьПараметр("ПериодРегистрации", НачалоМесяца(ПериодРегистрации));
// Вместо:
// Запрос.УстановитьПараметр("ПериодРегистрации", КонецМесяца(ПериодРегистрации));
Однако стоит соблюдать осторожность: если в течение одного месяца уже были движения по регистру НДФЛКЗачету, смена параметра может повлиять на итоговый результат. Рекомендуется сначала проверить это на тестовой базе.
Релиз 1.3.154.1 оказался богат на ошибки "ручного ввода", связанные с поспешным внедрением законодательных изменений. Если ваша организация еще не обновилась, крайне рекомендуется пропустить этот релиз и сразу переходить на 1.3.154.2, где большинство указанных проблем (включая опечатки и ошибки в Т-61) были официально исправлены фирмой "1С".
Если же работа в базе уже ведется, воспользуйтесь приведенными выше рекомендациями по правке кода. Помните: любые изменения в типовой конфигурации требуют снятия с поддержки или использования механизма расширений (если позволяет режим совместимости платформы), поэтому обязательно делайте резервную копию базы данных перед началом работ.