При работе в конфигурации 1С:Зарплата и управление персоналом 3.1 многие специалисты сталкиваются с неприятной ситуацией: во время подбора сотрудников для формирования отчета СЗВ-ТД (или других кадровых форм) система выдает критическую ошибку «Обнаружено дублирование ключевых значений в колонках: "Ссылка". Отображение данных в списке невозможно». В результате форма подбора блокируется, и продолжить работу становится невозможно.
Давайте подробно разберем, почему возникает эта ошибка, где скрываются "невидимые" дубли и как мы можем быстро их обнаружить и устранить.
Проанализируем механику работы формы подбора. Список сотрудников, который мы видим на экране, строится на базе механизма динамических списков платформы 1С. «Под капотом» этого списка работает сложный запрос, который собирает данные по сотруднику из нескольких регистров (кадровые данные, начисления, состояния и т.д.).
Ошибка означает, что этот сложный запрос возвращает несколько строк, у которых абсолютно одинаковое поле Ссылка (то есть они ссылаются на одного и того же сотрудника). Поскольку динамический список не понимает, какую именно из одинаковых строк выводить пользователю на экран, он в целях безопасности блокирует отображение всего списка.
Важно понимать: типовая обработка Поиск и удаление дублей здесь не поможет. Проблема заключается не в том, что в справочнике заведено два одинаковых физических лица, а в том, что образовались «осиротевшие» или накладывающиеся друг на друга записи в регистрах сведений.
Чтобы выявить причину, проанализируем регистры, которые участвуют в запросе динамического списка. Чаще всего проблема возникает, если сотрудник увольнялся и принимался заново, либо переводился по должностям, и старые записи не были корректно закрыты. Нам нужно проверить следующие регистры на наличие наложения периодов или "зависших" записей:
ДанныеДляПодбораСотрудниковТекущиеКадровыеДанныеСотрудников (частая причина: есть запись о кадровом состоянии, но физически документ-основание был удален)РолиСотрудниковСостоянияСотрудниковДанныеОбОплатеТрудаДляПодбораСотрудниковВидыЗанятостиСотрудниковИнтервальныйОсновныеСотрудникиФизическихЛиц (проверим отсутствие физлиц с незаполненной информацией)ТекущаяТарифнаяСтавкаСотрудниковРассмотрим самый простой, но требующий внимательности метод. Если ошибка появляется не сразу при открытии формы, а при попытке пролистать список, мы можем локализовать проблему вручную.
СЗВ-ТД.Если визуальный поиск не дает результатов (ошибка выскакивает хаотично или сразу при открытии), применим профессиональный подход. Выясним причину с помощью инструмента КонсольЗапросов.
Разберем по шагам, как это сделать:
КонсольЗапросов.СЗВ-ТД. Сделать это можно через Конфигуратор, открыв соответствующую форму документа и скопировав текст запроса из свойств динамического списка.Посмотрим на пример того, как модифицировать запрос для поиска дублей:
ВЫБРАТЬ
ВложенныйЗапрос.Ссылка КАК Ссылка,
КОЛИЧЕСТВО(ВложенныйЗапрос.Ссылка) КАК КоличествоДублей
ИЗ
(
// === СЮДА ВСТАВЛЯЕМ ИСХОДНЫЙ ТЕКСТ ЗАПРОСА ДИНАМИЧЕСКОГО СПИСКА ===
ВЫБРАТЬ
СправочникСотрудники.Ссылка КАК Ссылка,
// ... остальные поля ...
ИЗ ...
// ====================================================================
) КАК ВложенныйЗапрос
СГРУППИРОВАТЬ ПО
ВложенныйЗапрос.Ссылка
ИМЕЮЩИЕ
КОЛИЧЕСТВО(ВложенныйЗапрос.Ссылка) > 1
Выполним данный запрос. В результате мы получим компактную таблицу, в которой будут указаны конкретные сотрудники и количество строк, которые по ним возвращаются (2 и более). Это и есть наши проблемные данные!
Теперь нам остается только зайти в карточки этих конкретных сотрудников, проверить движения по проблемным кадровым регистрам (например, через кнопку "Перейти" на панели навигации) и вычистить некорректные или дублирующиеся записи, оставив только актуальные.
Иногда все проверки показывают, что данные в базе идеальны, нет наложений и нет удаленных документов. В таких случаях нужно учитывать, что подобное поведение ранее официально признавалось разработчиками 1С как баг в некоторых релизах ветки 3.1 (например, в релизах 3.1.17).
Если пересчет итогов, тестирование и исправление утилитой chdbfl, а также принудительное обновление состояния сотрудников не помогают — настоятельно рекомендуем обновить платформу и конфигурацию 1С:ЗУП до актуального стабильного релиза. Зачастую разработчики оперативно вносят исправления в сложные запросы динамических списков, решая проблему на программном уровне.