При обслуживании конфигурации «1С:Зарплата и Управление Персоналом» (редакция 3.1) специалисты часто сталкиваются с ситуацией, когда на портале обновлений одновременно публикуются сборки разных подредакций: 3.1.2.хх, 3.1.3.хх, 3.1.4.хх и 3.1.5.хх. Разберем, чем обусловлено такое параллельное существование веток, как устроена политика поддержки фирмы «1С» и как безопасно выполнять обновление информационной базы без потери данных по НДФЛ и взносам.
Разработчики фирмы «1С» одновременно поддерживают не более двух подредакций конфигурации. Модель выпуска обновлений строится на разделении версий на две категории:
3.1.2.3.1.3 была текущей, затем ей на смену пришла 3.1.4, которую позже сменила 3.1.5.После завершения цикла текущей версии она снимается с поддержки, и фирма «1С» выпускает очередное обновление для длительной версии, либо объявляет новую стабильную подредакцию гарантированной версией длительного сопровождения на весь календарный год.
Проанализируем техническую причину, по которой при обновлении с подредакций 3.1.2 или 3.1.3 на 3.1.4 у многих пользователей возникли проблемы с расчетом НДФЛ. Главным архитектурным изменением подредакции 3.1.4 стал ввод обязательного учета разреза «Категория дохода» в регистрах накопления учета НДФЛ и выплатных документах.
При запуске процедуры обновления информационной базы автоматически срабатывают фоновые обработчики, которые заполняют реквизит КатегорияДохода в ранее проведенных документах и регистрах. Если в базе за прошлые периоды присутствовали межрасчетные начисления (отпуска, больничные, премии), ручные корректировки или вычеты, алгоритм обработчика мог ошибочно распределить категории. В результате при проведении новых документов расчета зарплаты система видела расхождения по категориям за прошлые месяцы и пыталась выполненить автоматический перерасчет (сторнирование) налога.
Посмотрим на пример кода из общего модуля УчетФактическиПолученныхДоходовРасширенный, который регистрирует специализированные обработчики обновления для заполнения и проверки категорий дохода:
Процедура ЗарегистрироватьОбработчикиОбновления()
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.4.170";
Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления();
Обработчик.Идентификатор = Новый УникальныйИдентификатор("bcec81c3-956c-43b8-b78b-b01fc1f46e2e");
Обработчик.Комментарий = НСтр("ru='Заполняет ""Категорию дохода"" в ведомостях'");
Обработчик.Процедура = "УчетФактическиПолученныхДоходовРасширенный.ВедомостиЗаполнитьКатегориюДоходаВНДФЛ";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.4.171";
Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления();
Обработчик.Идентификатор = Новый УникальныйИдентификатор("bcec81c3-956c-43b8-b78b-b01fc1f46e2e");
Обработчик.Комментарий = НСтр("ru='Проверяет заполнение категории дохода в ведомостях'");
Обработчик.Процедура = "УчетФактическиПолученныхДоходовРасширенный.ВедомостиУточнитьКатегориюДоходаВНДФЛ";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.4.165";
Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления();
Обработчик.Идентификатор = Новый УникальныйИдентификатор("457db1e7-c30b-4de3-9961-5191413b79d2");
Обработчик.Комментарий = НСтр("ru='Заполняет категорию дохода в строках НДФЛ зарегистрированных как перенос затрат'");
Обработчик.Процедура = "УчетФактическиПолученныхДоходовРасширенный.ЗаполнитьКатегорииДоходаВБухучетНачисленияУдержанияПереносаЗатрат";
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.4.166";
Обработчик.Процедура = "УчетФактическиПолученныхДоходовРасширенный.ИсправитьРаспределениеНДФЛВДокументах";
Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления();
Обработчик.Идентификатор = Новый УникальныйИдентификатор("ded281c4-b7db-4b22-959b-76b972832e3f");
Обработчик.Комментарий = НСтр("ru = 'Проверка распределения НДФЛ в документах после обновления НДФЛ.'");
Обработчик = Обработчики.Добавить();
Обработчик.Версия = "3.1.4.167";
Обработчик.Процедура = "УчетФактическиПолученныхДоходовРасширенный.ИсправитьДвиженияБухучетНДФЛДокуменов";
Обработчик.РежимВыполнения = ОбновлениеИнформационнойБазыЗарплатаКадрыБазовый.ОсновнойРежимВыполненияОбновления();
Обработчик.Идентификатор = Новый УникальныйИдентификатор("06f719c0-902d-4a18-a25e-b06019e6aceb");
Обработчик.Комментарий = НСтр("ru = 'Проверка распределения НДФЛ в движениях после обновления НДФЛ.'");
КонецПроцедуры
Эти процедуры последовательно модифицируют данные в регистрах. Если последовательность обновления была нарушена или использовался релиз со сырыми алгоритмами, обработчики завершались с ошибкой или фиксировали некорректные распределения.
Рассмотрим пошаговый порядок действий для безопасного перехода на новые версии ЗУП 3.1:
Учет доходов для исчисления НДФЛ и Расчеты налогоплательщиков с бюджетом по НДФЛ.3.1.4.167 и выше), в которых исправлены критические ошибки обработчиков.Операция учета НДФЛ, а не редактированием первичных начислений.