Внедрение отчетности СЗВ-ТД в начале 2020 года для пользователей конфигурации «Управление производственным предприятием» (УПП), редакция 1.3, сопровождалось выпуском ряда релизов (1.3.132.1, 1.3.132.2), в которых содержались критические ошибки. Проанализируем основные технические проблемы, с которыми столкнулись специалисты, и разберем способы их решения с помощью корректировки программного кода.
При обновлении на версию 1.3.132.1 многие пользователи столкнулись с исключением: Метод объекта не обнаружен (ИсправитьВычетыНДФЛ_2020). Это происходит, если при обновлении были пропущены промежуточные релизы (1.3.130.2 или 1.3.131.1). Выясним причину: процедура вызывается механизмом обновления информационной базы, но физически отсутствует в общем модуле.
Для решения проблемы необходимо добавить недостающие процедуры в общий модуль ПроцедурыОбновленияИнформационнойБазы. Посмотрим на код, который должен быть добавлен:
Процедура ИсправитьВычетыНДФЛ_2020() Экспорт
ОписатьКодВычетаНДФЛ_2016("Код511", "511", "Вычет из суммы материальной помощи...",,, "-", "-", "-", "620");
УстановитьНаименованияДляДубляВычетаНДФЛ("117");
УстановитьНаименованияДляДубляВычетаНДФЛ("121");
УстановитьНаименованияДляДубляВычетаНДФЛ("507");
УстановитьНаименованияДляДубляВычетаНДФЛ("511");
УстановитьНаименованияДляДубляВычетаНДФЛ("601");
КонецПроцедуры
Процедура УстановитьНаименованияДляДубляВычетаНДФЛ(Код)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ВычетыНДФЛ.Ссылка ИЗ Справочник.ВычетыНДФЛ КАК ВычетыНДФЛ
|ГДЕ ВычетыНДФЛ.ПометкаУдаления И НЕ ВычетыНДФЛ.Предопределенный И ВычетыНДФЛ.Код = &Код";
Запрос.УстановитьПараметр("Код", Код);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ТекОбъект = Выборка.Ссылка.ПолучитьОбъект();
ТекОбъект.Код = "я" + СокрЛП(ТекОбъект.Код);
ТекОбъект.Наименование = "(удалить) " + СокрЛП(ТекОбъект.Наименование);
ТекОбъект.ОбменДанными.Загрузка = Истина;
ТекОбъект.Записать();
КонецЕсли;
КонецПроцедуры
Распространенная ситуация: сотрудник уволен 31 января, но в документ СЗВ-ТД за январь он не попадает. Рассмотрим причину: в 1С:УПП документ УвольнениеИзОрганизаций делает движения в регистре сведений РаботникиОрганизаций с периодом, равным следующему дню (01 февраля), так как увольнение считается завершенным в конце дня. Запрос автозаполнения в релизах 132.1 и 132.2 не учитывал это смещение.
Чтобы исправить это, проанализируем запрос в процедуре Автозаполнение документа СведенияОТрудовойДеятельностиРаботниковСЗВ_ТД. Нам необходимо расширить интервал выборки для документов увольнения. Найдем блок создания временной таблицы ВТРегистраторы и добавим условие ДОБАВИТЬКДАТЕ(&ДатаОкончания, ДЕНЬ, 1) для типа документа увольнения:
// В процедуре Автозаполнение заменить часть запроса формирования ВТРегистраторы
"ВЫБРАТЬ РАЗЛИЧНЫЕ РаботникиОрганизаций.Регистратор
|ПОМЕСТИТЬ ВТРегистраторы
|ИЗ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаНачала, Организация = &ГоловнаяОрганизация) КАК РаботникиОрганизаций
|ГДЕ ВЫБОР
| КОГДА ТИПЗНАЧЕНИЯ(РаботникиОрганизаций.Регистратор) = ТИП(Документ.УвольнениеИзОрганизаций)
| ТОГДА РаботникиОрганизаций.Период МЕЖДУ &ДатаНачала И ДОБАВИТЬКДАТЕ(&ДатаОкончания, ДЕНЬ, 1)
| ИНАЧЕ РаботникиОрганизаций.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
|КОНЕЦ"
Согласно правилам заполнения СЗВ-ТД, при первом кадровом событии в 2020 году нужно передать данные о последнем событии до 2020 года (обычно это прием на работу). Если данные были перенесены из других баз документами Перенос данных, штатный механизм может их не видеть. Проанализируем решение проблемы через замену использования Регистратор на ПервичныйДокумент.
В коде автозаполнения найдем формирование таблицы ВТРегистраторыПредистории и внесем правку:
// Заменяем выборку регистратора на первичный документ для корректного подтягивания перенесенных данных
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| РаботникиОрганизаций.ПервичныйДокумент КАК Регистратор,
| РаботникиОрганизаций.Сотрудник.Физлицо КАК ФизЛицо
|ПОМЕСТИТЬ ВТРегистраторыПредистории
|ИЗ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
|ГДЕ РаботникиОрганизаций.Организация = &ГоловнаяОрганизация
| И РаботникиОрганизаций.Сотрудник.Физлицо В(&ФизЛицаСПредисторией)"
В документе КадровоеПеремещениеОрганизаций при открытии формы может возникать ошибка обращения к полю ВидЗанятости. Это связано с тем, что функция СформироватьЗапросПоДаннымРаботникаДоНазначения в модуле документа не выбирает это поле. Разберем, как дополнить запрос. В тексте запроса функции необходимо добавить получение поля из справочника сотрудников:
// Добавляем выборку Вида занятости в запрос кадрового перемещения
| ДанныеПоРаботникуДоНазначения.ДолжностьЗавершения КАК ДолжностьЗавершения,
| ДанныеПоРаботникуДоНазначения.Сотрудник.ВидЗанятости КАК ВидЗанятости
По умолчанию программа выводит только конечное подразделение. Если ПФР требует полную иерархию (например, "Цех 1; Участок 2"), необходимо модифицировать процедуру формирования представления. Рассмотрим пошагово:
СЗВ-ТД убедимся, что получается ссылка на подразделение (ПодразделениеСсылка).Строка(Подразделение) на обращение к полному наименованию.Пример кода для вывода иерархии через точку или точку с запятой:
ПредсталениеФункции = ?(ЗначениеЗаполнено(ПредсталениеФункции), ПредсталениеФункции + "; ", "")
+ Строка(ВыборкаДанных.ПодразделениеСсылка.ПолноеНаименование());
Важно: Для корректной выгрузки в XML после правок кода документ СЗВ-ТД необходимо перепровести, так как файл выгрузки формируется в момент записи/проведения документа в некоторых версиях конфигурации.
При работе с СЗВ-ТД в УПП 1.3 рекомендуем обратить внимание на следующие моменты:
ОснованияУвольненияИзОрганизации должны быть четко заполнены поля "Статья", "Часть" и "Пункт", иначе выгрузка в XML будет некорректной.ОбщегоНазначения.ПолучитьНомерНаПечать.СЗВ-ТД, чтобы программа подтянула "последнее событие" безусловно.Соблюдение этих рекомендаций и внесение указанных правок позволит успешно сформировать и сдать отчетность СЗВ-ТД в условиях нестабильных релизов переходного периода.