Выход редакции 1С:ЗУП 3.1.10 стал знаковым событием для пользователей и разработчиков. Эта версия получила статус LTS (Long Term Support) — ветки с длительным сроком поддержки, которая пришла на смену устаревшей версии 3.1.5. Переход на LTS-релизы всегда сопряжен с надеждами на стабильность, однако на практике первые сборки принесли немало сюрпризов. Пользователи столкнулись с серьезными архитектурными изменениями в учете штатного расписания, расчете НДФЛ и механизмах контроля данных.
В этой статье мы подробно проанализируем ключевые проблемы, возникшие при обновлении на ЗУП 3.1.10, выясним их технические причины и разберем по шагам готовые решения для исправления ошибок в работающих базах данных.
Одной из самых обсуждаемых проблем перехода стала полная перестройка логики учета занятости позиций штатного расписания. Разработчики 1С отказались от старого регистра накопления ЗанятыеПозицииШтатногоРасписания. Вместо него в конфигурацию были внедрены периодические регистры сведений:
ЗанятостьПозицийШтатногоРасписанияЗанятостьПозицийШРИнтервальныйСуть проблемы: Сразу после обновления пользователи обнаружили, что отчет "Штатная расстановка" перестал видеть сотрудников, которые были приняты в программу с помощью документа НачальнаяШтатнаяРасстановка (Начальная расстановка сотрудников). Программа ошибочно проставляла дату окончания действия интервала для этих записей, из-за чего в отчетах позиции выглядели свободными.
Как решить проблему:
Для исправления ситуации в базах, обновленных до релиза 3.1.10.50, разработчики рекомендуют использовать встроенный механизм принудительного перезаполнения интервальных регистров. Выполним следующие действия по шагам:
Занятость позиций ШР интервальный.Если этот способ по каким-то причинам не сработал на вашем релизе, применим проверенный обходной путь: откроем документы НачальнаяШтатнаяРасстановка, отменим их проведение и проведем заново. Это инициирует корректное формирование записей в новых интервальных регистрах сведений.
Связанная с переходом на интервальные регистры ошибка проявилась при оформлении отпусков. Если в программе регистрировался отпуск сотрудника с установленным флагом освобождения занимаемой ставки на время отсутствия, то после окончания отпуска сотрудник не возвращался на свою позицию автоматически.
Проанализируем ситуацию: в регистре сведений ЗанятостьПозицийШРИнтервальный запись возврата формировалась с некорректным видом занятости (вместо "Занята" фиксировалось значение "Свободно"). Из-за этого отчеты показывали ложные свободные ставки, пугая кадровиков и руководство компании.
Способ исправления: Данная ошибка носит платформенно-кодный характер и была исправлена в последующих сборках (начиная с релиза 3.1.10.78). Если вы вынуждены работать на более ранних релизах, временно поможет только ручная корректировка записей регистра возврата или временный отказ от использования флага "Освобождать ставку" в документах отклонений до момента установки актуального патча.
После обновления кадровики начали массово жаловаться на появление желтых предупреждающих треугольников ("индикаторов ошибок") на кадровых документах прошлых лет (вплоть до 2017 года). При попытке открыть или перепровести старые кадровые приказы (например, увольнения) программа выдавала сообщения о незаполненных реквизитах или ошибках в последовательности регистрации приказов.
Причина поведения системы: В ЗУП 3.1.10 была интегрирована обновленная версия Библиотеки стандартных подсистем (БСП) с механизмом «Контроль ведения учета». Программа в фоновом режиме начала автоматически сверять данные базы по жестким правилам валидации. Однако старые документы, созданные до внедрения этих правил или перенесенные из прошлых версий программ, не всегда соответствуют новым строгим требованиям.
Решение проблемы: Чтобы избавить пользователей от ложной паники и бесконечных проверок исторических данных, мы можем гибко перенастроить правила автоматического контроля:
Не менее критичная ошибка коснулась расчета заработной платы и исчисления НДФЛ за июнь и июль. Бухгалтеры столкнулись с тем, что стандартные и социальные налоговые вычеты в документах начисления зарплаты перестали отображаться на вкладках расчета налога, хотя итоговая сумма НДФЛ рассчитывалась математически верно (с учетом вычетов). В следующем же месяце программа "сходила с ума" и предоставляла эти вычеты в двойном размере, либо полностью игнорировала их.
Выясним причину: Разработчики изменили структуру регистра сведений ПредоставленныеСтандартныеВычетыФизическимЛицам (и сопутствующих регистров НДФЛ), добавив новое ключевое измерение — МесяцПредоставленияВычета. В процессе обновления существующие исторические записи не всегда корректно сконвертировались под новую структуру данных. Программа потеряла связь между налоговым периодом и фактическим месяцем предоставления вычета.
Как исправить ситуацию в текущем периоде:
Если вы обнаружили, что в июньских или июльских документах начисления зарплаты вычеты "растворились" или задвоились, выполните следующие действия:
НачислениеЗарплатыИВзносов.При попытке создать документ Отсутствие (болезнь, прогул, неявка) на список сотрудников пользователи сталкивались с аварийным завершением работы формы и ошибкой:
Поле объекта не обнаружено (ВидВремениЗамещаемыйПредставление)
Причина: Данный сбой (официально зарегистрированный разработчиками под номером 10212226) произошел из-за банальной опечатки в коде экранной формы списочного документа. Разработчики расширили возможности работы со списочными неявками, но забыли объявить соответствующее представление замещаемого времени в общем модуле.
Решение: Проблема полностью решается установкой официального исправления (патча) или обновлением конфигурации до версии 3.1.10.78 и выше. В качестве временной альтернативы кадровикам рекомендуется оформлять индивидуальные документы Отсутствие (болезнь, прогул, неявка) на каждого сотрудника отдельно вместо использования списочной формы.
Для программистов 1С, сопровождающих измененные и нетиповые конфигурации, переход на 3.1.10 также готовит немало работы. Рассмотрим технические аспекты оптимизации кода конфигурации:
ОбщегоНазначенияКлиентСервер в модуль ОбщегоНазначения в связи с требованиями оптимизации новой БСП. Нам потребуется провести глобальный поиск по конфигурации и обновить ссылки в наших доработках.Начисление оценочных обязательств по отпускам переименован в Резервы отпусков. Если в ваших внешних обработках или механизмах интеграции использовалось обращение к метаданным этого документа по старому имени, обязательно скорректируйте код.Проанализируем пример того, как изменились вызовы некоторых стандартных функций:
// Старый вариант вызова в ЗУП 3.1.5 - 3.1.9:
Значение = ОбщегоНазначенияКлиентСервер.ПолучитьЗначениеРеквизитаОбъекта(Ссылка, "ИмяРеквизита");
// Новый оптимизированный вариант в ЗУП 3.1.10:
Значение = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "ИмяРеквизита");
Переход на версию 3.1.10 (LTS) — шаг неизбежный, так как поддержка старых веток прекращается. Однако, учитывая масштабность изменений в регистрах штатного расписания и НДФЛ, выполнять это обновление на работающей базе "в лоб" крайне опасно.
Рекомендуемый регламент перехода: