Администрирование · 10 мин
Записи с одинаковыми измерениями в 1С: причины и способы исправления
Ошибка «записи с одинаковыми измерениями» в регистрах 1С: причины появления, поиск дублей, исправление через обработку и код, профилактика повторения.
Ошибка «записи с одинаковыми измерениями» возникает при проведении документа или записи регистра, когда в наборе записей оказываются две или более строк с идентичным набором значений измерений и периода. Для платформы такие строки неразличимы: регистр хранит по одной записи на уникальную комбинацию измерений, поэтому попытка записать дубль прерывает транзакцию. Пользователь видит сообщение об ошибке, документ не проводится, а учётные данные не обновляются.
Проблема характерна для регистров сведений и регистров накопления любых конфигураций — «Управление торговлей», «Бухгалтерия предприятия», «Зарплата и управление персоналом» и других. Причины разные: программные ошибки в обработчиках проведения, некорректные обмены данными, ручное добавление записей, обрывы транзакций при обновлении. Метод исправления зависит от того, где именно возник дубль — в уже сохранённых данных регистра или в наборе записей, который формируется при проведении.
Ниже разобраны способы диагностики, конкретные приёмы поиска и удаления дублей, а также меры профилактики. Все операции с данными выполняйте только после создания резервной копии информационной базы — удаление записей регистра необратимо.
Как понять, где именно возникли одинаковые записи
Первый шаг — определить, в каком регистре и в каком режиме возникает ошибка. Текст сообщения платформы обычно содержит имя регистра и значения измерений проблемной записи. Если ошибка появляется при проведении конкретного документа, дубль может находиться как в уже записанных данных регистра, так и в наборе движений, который документ формирует «на лету».
Полезно различить две ситуации. Первая — в регистре уже физически хранятся записи с одинаковыми измерениями (например, после сбойного обмена), и любое перепроведение документа-регистратора упирается в них. Вторая — регистр чист, но процедура проведения дважды добавляет строку с теми же измерениями в набор записей. Во втором случае чистка данных не поможет: нужно исправлять логику проведения или входные данные документа.
Проверьте движения документа и табличные части на повторяющиеся строки
Ищите повторяющиеся комбинации измерений запросом по всему регистру
Проверьте обработчики и подписки на события, дублирующие движения
Поиск дублей в регистре запросом
Надёжный способ найти повторяющиеся записи — запрос с группировкой по всем измерениям и подсчётом количества строк. Для регистра сведений, не подчинённого регистратору, группируйте по измерениям и периоду; для регистра, подчинённого регистратору, добавьте в группировку регистратора, иначе сгруппируются записи разных документов, что не является ошибкой.
Пример запроса для независимого регистра сведений: выберите измерения, поле КОЛИЧЕСТВО() с группировкой по измерениям и отбором ИМЕЮЩИЕ КОЛИЧЕСТВО() > 1. Результат покажет конкретные комбинации измерений, по которым хранится больше одной записи. В файловой базе такой запрос выполняется в консоли запросов, в клиент-серверной — дополнительно можно проанализировать таблицы средствами СУБД, но изменять данные напрямую в СУБД нельзя.
Обратите внимание на периодичность регистра. Для периодического регистра сведений уникальность определяется комбинацией «измерения + период», поэтому в группировку обязательно включайте поле периода. Для регистра с режимом «в пределах секунды» дубли часто возникают при загрузке данных, когда несколько записей получают одинаковую дату.
ВЫБРАТЬ Измерение1, Измерение2, Период, КОЛИЧЕСТВО(<em>) КАК КоличествоЗаписей ИЗ РегистрСведений.ИмяРегистра СГРУППИРОВАТЬ ПО Измерение1, Измерение2, Период ИМЕЮЩИЕ КОЛИЧЕСТВО(</em>) > 1Удаление дублей вручную и программно
Если дублей немного, их проще удалить вручную. Откройте регистр через «Все функции» → «Регистры сведений» (или «Регистры накопления»), установите отбор по значениям измерений из сообщения об ошибке и удалите лишнюю запись. Перед удалением сравните ресурсы записей: оставляйте ту, у которой корректные значения, а не первую попавшуюся.
При массовых дублях используйте программную обработку. Логика типовая: запросом получить комбинации измерений с дублями, для каждой комбинации прочитать набор записей с отбором, оставить одну запись (например, с корректными ресурсами или с максимальной датой изменения), очистить остальные и записать набор. Набор записей с отбором по измерениям при записи с замещением полностью заменит строки по этой комбинации.
Для регистров, подчинённых регистратору, корректный путь другой: не удалять строки напрямую, а перепровести документ-регистратор после устранения причины. Ручное вмешательство в подчинённый регистр разрывает связь движений с документом и создаёт расхождения в отчётах, которые сложно отловить позже.
- 1Сделайте резервную копию информационной базы
- 2Найдите дубли запросом с группировкой по измерениям
- 3Сравните ресурсы дублирующихся записей и определите корректную
- 4Удалите лишние записи вручную или набором записей с отбором
- 5Перепроведите проблемный документ и проверьте отчёты по регистру
Исправление дублей, возникающих при проведении
Когда регистр чист, а ошибка возникает в момент проведения, причина — в формируемом наборе движений. Частый источник — табличная часть документа с повторяющимися строками: две строки с одним товаром и складом дают две записи с одинаковыми измерениями в регистре остатков. Решение — свернуть табличную часть перед формированием движений (метод Свернуть() с указанием измерений и суммируемых ресурсов) или объединить строки в документе.
Вторая типовая причина — подписки на события и доработанные обработчики проведения, которые добавляют движения поверх типовых. Если после обновления конфигурации или установки расширения документы перестали проводиться, отключайте расширения и подписки по очереди, чтобы локализовать источник. Проверяйте, не выполняется ли запись в один и тот же регистр из двух мест: из обработчика проведения документа и из подписки «ПриЗаписи».
Третья причина — обмены данными. При загрузке из другой базы документ может прийти с движениями, а затем типовой механизм попытается сформировать их повторно, или две копии документа запишут движения с одинаковыми измерениями. В планах обмена проверьте настройки регистрации изменений и правила конвертации, особенно для самописных правил.
Проверка результата после исправления
После удаления дублей повторите операцию, которая вызывала ошибку: перепроведите документ или выполните обмен. Затем выполните контрольный запрос с группировкой по измерениям — он должен вернуть пустой результат. Для регистров накопления дополнительно сверьте итоги: сформируйте отчёт по регистру до и после исправления и убедитесь, что обороты изменились ровно на сумму удалённых дублей.
Если база файловая и дубли появлялись после аварийного завершения, имеет смысл выполнить тестирование и исправление информационной базы с проверкой логической и ссылочной целостности. Эта процедура выявляет повреждения таблиц, которые могли стать первопричиной дублирования.
Как проверить результат
Результат пустой — дублей нет
Остались комбинации с количеством больше одной
Документ проводится без сообщений об ошибке
Ошибка повторяется — причина в логике проведения
Итоги соответствуют ожиданиям после удаления лишних строк
Итоги расходятся с первичными документами
Типичные ошибки при устранении дублей
Самая распространённая ошибка — удаление записей без анализа ресурсов. Две строки с одинаковыми измерениями могут содержать разные значения ресурсов, и удаление «не той» записи исказит учёт. Всегда сравнивайте содержимое дублей и выясняйте, какая запись появилась последней и почему.
Вторая ошибка — чистка симптомов вместо причины. Если дубли порождает обмен или обработчик проведения, после ручного удаления они появятся снова при ближайшей загрузке или перепроведении. Фиксируйте, при каких условиях возник дубль, и устраняйте источник: корректируйте правила обмена, код проведения или регламентные задания.
Профилактика повторного появления дублей
На уровне кода перед записью набора проверяйте его на повторяющиеся комбинации измерений, особенно в самописных документах. Сворачивайте таблицы движений по измерениям с суммированием ресурсов — это устраняет дубли, порождаемые повторяющимися строками табличных частей.
На уровне обменов контролируйте состав передаваемых данных: не передавайте движения документов, если приёмник формирует их самостоятельно при проведении. После обновлений конфигурации и установки расширений проверяйте проведение ключевых документов на копии базы. Регулярное регламентное тестирование целостности базы снижает риск накопления скрытых повреждений, которые проявляются именно дублями записей.
Что важно запомнить
Дубли по измерениям находят запросом с группировкой, удаляют через набор записей с отбором или вручную, а после чистки обязательно устраняют источник: логику проведения, табличные части или настройки обмена. Все действия — только после резервной копии.
Частые вопросы
Можно ли исправить дубли без программирования?
Да, если дублей немного. Откройте регистр через «Все функции», установите отбор по значениям измерений из текста ошибки и удалите лишнюю запись вручную. Для массовых дублей потребуется обработка с запросом — без неё поиск займёт неоправданно много времени.
Почему запрос показывает «дубли», хотя записи принадлежат разным документам?
В регистрах, подчинённых регистратору, уникальность записи включает регистратора. Если вы группируете только по измерениям, строки разных документов с одинаковыми измерениями ошибочно выглядят дублями. Добавьте регистратор в группировку — и картина станет корректной.
Документ не проводится, но дублей в регистре нет. Что делать?
Значит, дубль формируется в наборе движений при проведении. Проверьте табличную часть документа на повторяющиеся строки, отключите расширения и подписки на события, а также проверьте, не записывает ли в регистр два разных обработчика одновременно.
Опасно ли удалять записи регистра сведений вручную?
Для независимого регистра сведений ручное удаление относительно безопасно, если вы точно определили лишнюю запись и сделали копию базы. Для регистров, подчинённых регистратору, ручное удаление нежелательно: правильнее перепровести документ, чтобы движения остались согласованы с учётными данными.
Дубли появляются после каждого обмена. Как найти причину?
Сравните состав данных, передаваемых планом обмена: если вместе с документом передаются его движения, а база-приёмник при проведении формирует движения повторно, возникает конфликт. Проверьте правила конвертации и отключите передачу движений либо проведение на стороне приёмника — одно из двух.
Поможет ли тестирование и исправление базы?
Оно устраняет физические повреждения таблиц и нарушения целостности, которые могут быть первопричиной дублей после аварийных завершений. Но если дубли порождает логика проведения или обмен, тестирование их не исправит — понадобится анализ кода и настроек обмена.