При подготовке и выгрузке отчетности по форме СЗВ-ТД в программных продуктах на платформе 1С:Предприятие 7.7 пользователи часто сталкивались с критической ошибкой: «Уникальный идентификатор мероприятия (UUID) не должен повторяться в пределах документа». Из-за этого файл выгрузки не проходил проверку в контролирующих органах (код ошибки 30).
В рамках этой статьи мы подробно разберем, почему возникает эта ошибка, проанализируем неверные способы ее обхода, которые могут навредить учету в будущем, и внедрим правильное техническое решение непосредственно в программный код отчета.
Для формирования и выгрузки сведений о трудовой деятельности используется регламентированный отчет ETK_SZVTD01.ERT. Давайте проанализируем, как программа генерирует уникальный идентификатор мероприятия (UUID). В исходном коде отчета разработчики допустили логическую неточность при обработке многострочных кадровых частей.
Рассмотрим строку 5492 в модуле отчета:
МеропрУУИД = ?( ПустаяСтрока(МеропрУУИД) = 1, Нрег(Инфо.СоздатьGUID), МеропрУУИД);
Проанализируем эту конструкцию. Программа проверяет на пустоту общую переменную МеропрУУИД, а не конкретное значение в списке сохраненных идентификаторов для текущей строки таблицы. В результате, как только для первой строки кадрового мероприятия генерируется UUID, переменная МеропрУУИД перестает быть пустой. При обработке последующих строк проверка ПустаяСтрока(МеропрУУИД) = 1 всегда возвращает ложь, и программа просто дублирует первый созданный UUID для всех остальных мероприятий в документе.
Чтобы исправить эту ошибку раз и навсегда, нам необходимо научить программу проверять уникальный идентификатор для каждой конкретной строки кадрового мероприятия отдельно. Хранение UUID в отчете реализовано через специальный список значений СпМеропрУУИД, где индекс строки определяется переменной НомСтрСп.
Выполним исправление по шагам:
ETK_SZVTD01.ERT и откройте его форму.
МеропрУУИД = ?( ПустаяСтрока(СпМеропрУУИД.ПолучитьЗначение(НомСтрСп)) = 1, Нрег(Инфо.СоздатьGUID()), СпМеропрУУИД.ПолучитьЗначение(НомСтрСп));
Разберем подробнее, как работает этот код. Теперь при обходе строк программа обращается к объекту СпМеропрУУИД по индексу НомСтрСп. Если для текущей строки идентификатор еще не был сгенерирован (строка пустая), система вызывает метод Инфо.СоздатьGUID(), переводя его в нижний регистр функцией Нрег. Если же UUID уже существует, программа оставляет его без изменений, гарантируя стабильность данных при повторных выгрузках.
Рассмотрим ситуацию, описанную некоторыми пользователями на форумах: ручная корректировка выгруженного XML-файла. Пользователи открывают готовый файл в текстовом редакторе и меняют последние символы в дублирующихся строках (например, прописывают на конце 001, 002, 003).
Да, формальную проверку такой файл пройдет, и пенсионный орган его примет. Однако давайте разберем, к каким серьезным последствиям это приведет:
Вывод: никогда не редактируйте UUID вручную в файле XML. Правка должна выполняться исключительно на уровне алгоритмов самой программы 1С.
Еще одна сопутствующая проблема в СЗВ-ТД на платформе 7.7 — это невозможность корректно удалить ошибочные строки мероприятий из формы отчета. Пользователь визуально удаляет строку из таблицы, но при повторном формировании или выгрузке данные снова появляются в файле.
Это связано с рассинхронизацией экранной таблицы и внутренних списков значений (таких как СпМеропрУУИД, СпМероприятие), в которых хранятся данные строк. При удалении строки из визуального интерфейса скрытые списки значений не очищаются должным образом. Для надежного обхода этой проблемы рекомендуется полностью очистить табличную часть отчета (или обнулить документ) и заполнить сведения заново, избегая ручного удаления отдельных строк в нестабильных формах.
Описанные ошибки генерации UUID и рассинхронизации списков значений были признаны разработчиками фирмы «1С». В выпуске отчетности за 1 квартал 2020 года (в релизе 20q1003) данные проблемы еще сохранялись, но были окончательно устранены в последующих обновлениях комплектов регламентированной отчетности — начиная с релизов 20q1004 и 20q1005. Если вы не имеете возможности вносить изменения в код вручную, настоятельно рекомендуем обновить комплект регламентированной отчетности до актуальной версии.