Переход с устаревшей конфигурации «Зарплата и кадры бюджетного учреждения 1.0» (ЗКБУ) на современную «Зарплата и кадры государственного учреждения 3.1» (ЗКГУ) — процесс трудоемкий и нередко сопровождающийся техническими сбоями. Одной из самых неприятных ошибок является внезапное прерывание выгрузки на этапе обработки кадровых данных. Рассмотрим ситуацию, когда система выдает сообщение: Ошибка в обработчике события ПередОбработкойПравилаВыгрузки ПВД = НачальнаяШтатнаяРасстановка с пояснением Задано неправильное имя атрибута структуры.
В этой статье мы разберем причины возникновения данной ошибки, проанализируем механизм работы правил обмена и выработаем алгоритм поиска и исправления проблемных данных в исходной базе.
Для начала проанализируем текст ошибки. Сообщение Задано неправильное имя атрибута структуры в контексте работы метода Вставить означает, что программный код пытается использовать в качестве ключа структуры строку, которая не соответствует правилам именования переменных в 1С. Ключ структуры не может:
При переносе данных по правилу НачальнаяШтатнаяРасстановка, алгоритм собирает показатели начислений сотрудников (такие как «Оклад», «Надбавка», «Стаж») и помещает их в структуру для последующей передачи в ЗКГУ. В качестве ключа часто используется Идентификатор показателя из справочника Показатели схем мотивации. Если в ЗКБУ 1.0 идентификатор заполнен некорректно или не заполнен вовсе, выгрузка завершится аварией.
Если в базе сотни или тысячи сотрудников, искать ошибку в справочниках «вслепую» неэффективно. Рассмотрим методику «сужения круга подозреваемых», предложенную опытными коллегами. Нам необходимо определить, на каком именно сотруднике спотыкается выгрузка.
Алгоритм действий:
Увольнение из организации).Логика проста: уволенные сотрудники не попадают в объект НачальнаяШтатнаяРасстановка. Если после «увольнения» половины штата ошибка исчезла, значит, проблемный объект находился в этой половине. Разделяя список пополам (метод дихотомии), мы довольно быстро найдем те несколько записей, которые блокируют весь процесс.
После того как список сотрудников определен (в практике коллег это часто группа из 5-10 человек), проанализируем их плановые начисления. Выясним причину, по которой код формирования структуры дает сбой.
Рассмотрим пример того, как может выглядеть некорректный код в обработчике (условно):
// Пример логики, приводящей к ошибке
Для Каждого СтрокаНачисления Из ПлановыеНачисления Цикл
КлючСтр = СтрокаНачисления.Показатель.Идентификатор;
СтруктураПоказателей.Вставить(КлючСтр, СтрокаНачисления.Значение);
// Если КлючСтр = "1_Ставка" или пустой - будет ошибка!
КонецЦикла;
На что обратить внимание в ЗКБУ 1.0:
Показатели схем мотивации. Проверим поле Идентификатор для формул. Убедимся, что там нет кириллицы с пробелами или названий, начинающихся с цифр.Плановые начисления работников организаций. Если у сотрудника на одну и ту же дату назначено два одинаковых вида расчета с идентичными показателями, алгоритм выгрузки может попытаться дважды добавить один и тот же ключ в структуру, что в определенных условиях вызывает сбой формирования имени ключа.Часто помощник перехода использует встроенные в конфигурацию правила, которые могут быть не самыми актуальными. Проанализируем возможность выгрузки через универсальный обмен данными.
Попробуем найти файл правил конвертации (обычно он идет в комплекте поставки ЗКГУ в каталоге шаблонов tmplts). Загрузим эти правила в обработку УниверсальныйОбменДаннымиXML в исходной базе ЗКБУ 1.0. При выгрузке через эту обработку ошибка может отобразиться более детально, указав конкретный объект или ссылку, на которой произошел останов.
Когда «виновники» найдены, у нас есть два пути решения проблемы:
Если мы обнаружили дубли начислений или некорректные идентификаторы, их следует исправить непосредственно в ЗКБУ 1.0. Удалим лишние записи в плановых начислениях, приведем идентификаторы к стандартному виду (только латиница и подчеркивания, начинается с буквы). После этого запустим рекомендованный способ переноса заново.
Если сотрудников мало (например, 7 человек из 1000), а сроки поджимают, можно временно «исключить» их из переноса (например, пометив на удаление их кадровые документы или используя метод с временным увольнением в копии). После успешного переноса основной массы данных, информацию по этим сотрудникам в ЗКГУ 3.1 можно внести вручную документом Данные на начало эксплуатации или Начальная штатная расстановка.
Важное замечание: При ручном вводе данных в 3.1 обратите внимание на настройку начислений. Если в новой базе у вида расчета не стоит флаг Разрешить несколько начислений в одном месяце, то попытка перенести два одинаковых начисления (которые и вызвали ошибку) все равно не увенчается успехом.
Подводя итог, отметим, что ошибка Задано неправильное имя атрибута структуры — это всегда сигнал о нечистоте данных в исходной базе. Тщательная проверка справочников показателей и регистров плановых начислений позволяет решить эту проблему программно, сохранив целостность переносимой информации.