Ошибка 1С «Набор записей, принадлежащий менеджеру записи, должен содержать ровно 1 запись»: причины и решение

Ошибка «Запись не верна! Набор записей, принадлежащий менеджеру записи, должен содержать ровно 1 запись» возникает в 1С:Предприятие в момент записи независимого регистра сведений, когда в набор записей добавлено либо ноль строк, либо больше одной. Платформа ожидает строго одну запись, потому что обращение идёт через менеджер записи — объект, моделирующий единственную строку регистра.

Чаще всего сбой проявляется при обмене данными, проведении документов, записи элемента справочника с подчинённым регистром сведений либо при выполнении пользовательского кода в расширении или обработке. Ниже разберём, почему платформа выдаёт это сообщение, как локализовать проблемный участок и какие способы исправления безопасны.

Что означает эта ошибка в платформе 1С

В 1С:Предприятии независимый регистр сведений можно изменять двумя способами: через набор записей (РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей()) и через менеджер записи (СоздатьМенеджерЗаписи()). Менеджер записи представляет ровно одну строку регистра, и при его записи платформа проверяет, что фактически изменяется единственная запись.

Сообщение появляется, когда это правило нарушено: набор, который внутри механизмов платформы или прикладного кода связан с менеджером записи, оказался пустым или содержит две и более строки. Типичный пример — код, который создаёт набор записей, не устанавливает отбор по измерениям и пытается записать его как одиночную запись.

⚠️ Внимание: текст ошибки звучит одинаково в разных ситуациях, но первопричина может лежать как в прикладном коде, так и в данных. Перед любыми исправлениями сделайте резервную копию информационной базы штатными средствами.

Типичные сценарии возникновения

Чтобы понять, откуда растёт проблема, важно зафиксировать момент её появления. Обратите внимание на контекст: какая операция выполнялась, какой объект записывался, использовались ли расширения конфигурации.

  • 🔧 Обмен данными — при загрузке объекта через планы обмена или универсальный обмен XML правила конвертации формируют набор записей регистра сведений некорректно.
  • 📄 Проведение документа — в обработчике проведения или подписке на событие код записывает регистр сведений через менеджер записи, но предварительно не заполнил обязательные измерения.
  • 🧩 Расширения и внешние обработки — доработанный код обращается к регистру иначе, чем типовой, и нарушает контракт «одна запись».
  • 🗃️ Подчинённый регистр сведений — запись регистра, подчинённого регистратору, выполняется вручную с ошибками в отборах.
  • 👥 Регистрация изменений для обмена — массовая регистрация объектов затрагивает записи с дублирующимися измерениями.
📊 В какой ситуации у вас возникла эта ошибка?
При обмене данными
При проведении документа
При записи справочника
В собственном коде или расширении

Диагностика: как найти источник проблемы

Первый шаг — воспроизвести ошибку под отладчиком. Включите в конфигураторе остановку по ошибке: Отладка → Остановка по ошибке. Когда выполнение прервётся, вы увидите конкретную строку кода, вызвавшую исключение, и сможете изучить содержимое набора записей или менеджера записи в момент сбоя.

Если отладчик недоступен (например, ошибка возникает только у пользователя в файловой базе), включите технологический журнал или изучите журнал регистрации: там фиксируется пользователь, сеанс и операция, во время которой произошёл отказ. Это сузит поиск до конкретного объекта метаданных.

Проверьте сам набор записей перед записью. Полезные контрольные точки:

  • 🔍 количество строк в наборе — должно быть ровно одно;
  • 📌 установлены ли отборы по всем измерениям регистра;
  • ✏️ заполнены ли значения измерений в добавленной строке — пустые значения могут «схлопывать» логику отбора;
  • 🔁 не вызывается ли запись повторно в цикле без очистки набора.

Исправление в прикладном коде

Когда источник — собственный код или расширение, исправление сводится к соблюдению контракта платформы. Для записи одиночной строки регистра сведений используйте менеджер записи с явным заполнением всех измерений:

МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Период = ТекущаяДатаСеанса();

МенеджерЗаписи.Валюта = ВалютаСсылка;

МенеджерЗаписи.Курс = НовыйКурс;

МенеджерЗаписи.Записать();

Если же требуется записать несколько строк, менеджер записи не подходит — используйте набор записей с отбором и добавляйте строки явно. Смешивать подходы в одной логике нельзя: именно такое смешение чаще всего и рождает нарушение требования «ровно 1 запись».

☑️ Проверка кода перед записью регистра сведений

Выполнено: 0 / 5

Отдельный частый дефект — запись в цикле без пересоздания или очистки объекта. Набор накапливает строки с предыдущих итераций, и на втором проходе цикла платформа видит уже две записи вместо одной. Лечится вызовом НаборЗаписей.Очистить() или созданием нового объекта на каждой итерации.

Проблемы при обмене данными и конвертации

При обмене через Конвертацию данных или типовые правила обмена ошибка обычно означает, что правило конвертации для регистра сведений формирует записи с незаполненными измерениями либо дублирует строки. В этом случае код конфигурации может быть полностью типовым и исправным.

Порядок действий здесь такой: найдите в протоколе обмена объект, на котором произошёл отказ, откройте его в базе-источнике и проверьте, какие данные регистра с ним связаны. Если используются самописные правила — проверьте обработчики ПередЗаписью и ПриЗагрузке для регистра сведений.

⚠️ Внимание: не исправляйте данные напрямую запросами к СУБД в обход платформы. Это нарушает логическую целостность базы и может привести к более тяжёлым повреждениям, чем исходная ошибка.

Если обмен типовой, а ошибка появилась после обновления

После обновления конфигурации правила обмена могли измениться, а в базе остались зарегистрированные к выгрузке данные старой структуры. Попробуйте выполнить повторную регистрацию изменений для проблемного узла обмена и перезапустить синхронизацию. Если ошибка сохраняется — сравните версии конфигураций в обеих базах-участницах обмена: рассинхронизация версий — частая причина подобных сбоев.

Ошибка в типовой конфигурации без доработок

Если конфигурация полностью типовая, на поддержке, а ошибка всё равно возникает — вероятны два сценария. Первый: известная ошибка конкретного релиза, исправленная в последующих обновлениях. Проверьте, актуальна ли ваша версия конфигурации и платформы; информацию об исправленных ошибках вендор публикует в описаниях релизов.

Второй сценарий — повреждённые или противоречивые данные в самом регистре сведений: например, записи с некорректными значениями измерений, появившиеся после прерванного обмена или аварийного завершения сеанса. Здесь помогает тестирование и исправление информационной базы (Конфигуратор → Администрирование → Тестирование и исправление), запускаемое строго на копии или после выгрузки базы.

СитуацияВероятная причинаПервичное действие
Ошибка в своём кодеНарушен контракт менеджера записиОтладка с остановкой по ошибке
Ошибка при обменеПравила конвертации или разные версииАнализ протокола обмена
Ошибка после обновленияИзвестный дефект релизаПроверка описаний новых релизов
Ошибка в типовой базеПовреждённые данные регистраТестирование и исправление на копии
Ошибка в расширенииКонфликт доработки с типовым кодомОтключение расширения для проверки

Профилактика повторного появления

Чтобы ошибка не возвращалась, вынесите запись регистров сведений в отдельные процедуры общих модулей с явной проверкой входных данных. Это дешевле, чем разбирать аварийные ситуации у пользователей.

Полезные практики: валидируйте заполненность измерений до вызова Записать(), не переиспользуйте наборы записей между вызовами без очистки, а при разработке правил обмена тестируйте загрузку на копии рабочей базы. При обновлениях конфигурации сверяйте изменения в структуре регистров сведений — добавление нового измерения ломает старый код записи именно описанным образом.

Частые вопросы

Можно ли исправить ошибку без программиста?

Если конфигурация типовая и ошибка связана с обменом — иногда да: помогает повторная регистрация данных для обмена или обновление на свежий релиз. Если причина в доработанном коде, потребуется специалист с доступом к конфигуратору и отладчику.

Почему ошибка возникает только у одного пользователя?

Возможные причины: пользователь работает с конкретными данными, которые содержат дефект; у него другой набор прав, из-за чего выполняется иная ветка кода; либо его сеанс обрабатывает другой объём записей. Журнал регистрации поможет сопоставить ошибку с конкретной операцией.

Опасно ли продолжать работу, игнорируя ошибку?

Да. Ошибка означает, что запись в регистр сведений не выполнена, а значит, связанные данные (курсы, цены, настройки, статусы) остаются неактуальными. Это может искажать отчёты и последующие расчёты.

Поможет ли тестирование и исправление базы?

Только если причина — физически повреждённые данные. Если ошибка воспроизводится из-за логики кода или правил обмена, тестирование и исправление её не устранит. Запускайте процедуру только на копии базы или после резервного копирования.

Ошибка появилась после добавления расширения — что делать?

Отключите расширение и проверьте, исчезла ли ошибка. Если да — проблема в коде расширения: оно либо перехватывает запись регистра, либо вызывает её некорректно. Передайте разработчику расширения текст ошибки и шаги воспроизведения.