Ошибка «Запись не верна! Набор записей, принадлежащий менеджеру записи, должен содержать ровно 1 запись» возникает в 1С:Предприятие в момент записи независимого регистра сведений, когда в набор записей добавлено либо ноль строк, либо больше одной. Платформа ожидает строго одну запись, потому что обращение идёт через менеджер записи — объект, моделирующий единственную строку регистра.
Чаще всего сбой проявляется при обмене данными, проведении документов, записи элемента справочника с подчинённым регистром сведений либо при выполнении пользовательского кода в расширении или обработке. Ниже разберём, почему платформа выдаёт это сообщение, как локализовать проблемный участок и какие способы исправления безопасны.
Что означает эта ошибка в платформе 1С
В 1С:Предприятии независимый регистр сведений можно изменять двумя способами: через набор записей (РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей()) и через менеджер записи (СоздатьМенеджерЗаписи()). Менеджер записи представляет ровно одну строку регистра, и при его записи платформа проверяет, что фактически изменяется единственная запись.
Сообщение появляется, когда это правило нарушено: набор, который внутри механизмов платформы или прикладного кода связан с менеджером записи, оказался пустым или содержит две и более строки. Типичный пример — код, который создаёт набор записей, не устанавливает отбор по измерениям и пытается записать его как одиночную запись.
⚠️ Внимание: текст ошибки звучит одинаково в разных ситуациях, но первопричина может лежать как в прикладном коде, так и в данных. Перед любыми исправлениями сделайте резервную копию информационной базы штатными средствами.
Типичные сценарии возникновения
Чтобы понять, откуда растёт проблема, важно зафиксировать момент её появления. Обратите внимание на контекст: какая операция выполнялась, какой объект записывался, использовались ли расширения конфигурации.
- 🔧 Обмен данными — при загрузке объекта через планы обмена или универсальный обмен XML правила конвертации формируют набор записей регистра сведений некорректно.
- 📄 Проведение документа — в обработчике проведения или подписке на событие код записывает регистр сведений через менеджер записи, но предварительно не заполнил обязательные измерения.
- 🧩 Расширения и внешние обработки — доработанный код обращается к регистру иначе, чем типовой, и нарушает контракт «одна запись».
- 🗃️ Подчинённый регистр сведений — запись регистра, подчинённого регистратору, выполняется вручную с ошибками в отборах.
- 👥 Регистрация изменений для обмена — массовая регистрация объектов затрагивает записи с дублирующимися измерениями.
Диагностика: как найти источник проблемы
Первый шаг — воспроизвести ошибку под отладчиком. Включите в конфигураторе остановку по ошибке: Отладка → Остановка по ошибке. Когда выполнение прервётся, вы увидите конкретную строку кода, вызвавшую исключение, и сможете изучить содержимое набора записей или менеджера записи в момент сбоя.
Если отладчик недоступен (например, ошибка возникает только у пользователя в файловой базе), включите технологический журнал или изучите журнал регистрации: там фиксируется пользователь, сеанс и операция, во время которой произошёл отказ. Это сузит поиск до конкретного объекта метаданных.
Проверьте сам набор записей перед записью. Полезные контрольные точки:
- 🔍 количество строк в наборе — должно быть ровно одно;
- 📌 установлены ли отборы по всем измерениям регистра;
- ✏️ заполнены ли значения измерений в добавленной строке — пустые значения могут «схлопывать» логику отбора;
- 🔁 не вызывается ли запись повторно в цикле без очистки набора.
Исправление в прикладном коде
Когда источник — собственный код или расширение, исправление сводится к соблюдению контракта платформы. Для записи одиночной строки регистра сведений используйте менеджер записи с явным заполнением всех измерений:
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Валюта = ВалютаСсылка;
МенеджерЗаписи.Курс = НовыйКурс;
МенеджерЗаписи.Записать();
Если же требуется записать несколько строк, менеджер записи не подходит — используйте набор записей с отбором и добавляйте строки явно. Смешивать подходы в одной логике нельзя: именно такое смешение чаще всего и рождает нарушение требования «ровно 1 запись».
☑️ Проверка кода перед записью регистра сведений
Отдельный частый дефект — запись в цикле без пересоздания или очистки объекта. Набор накапливает строки с предыдущих итераций, и на втором проходе цикла платформа видит уже две записи вместо одной. Лечится вызовом НаборЗаписей.Очистить() или созданием нового объекта на каждой итерации.
Проблемы при обмене данными и конвертации
При обмене через Конвертацию данных или типовые правила обмена ошибка обычно означает, что правило конвертации для регистра сведений формирует записи с незаполненными измерениями либо дублирует строки. В этом случае код конфигурации может быть полностью типовым и исправным.
Порядок действий здесь такой: найдите в протоколе обмена объект, на котором произошёл отказ, откройте его в базе-источнике и проверьте, какие данные регистра с ним связаны. Если используются самописные правила — проверьте обработчики ПередЗаписью и ПриЗагрузке для регистра сведений.
⚠️ Внимание: не исправляйте данные напрямую запросами к СУБД в обход платформы. Это нарушает логическую целостность базы и может привести к более тяжёлым повреждениям, чем исходная ошибка.
Если обмен типовой, а ошибка появилась после обновления
После обновления конфигурации правила обмена могли измениться, а в базе остались зарегистрированные к выгрузке данные старой структуры. Попробуйте выполнить повторную регистрацию изменений для проблемного узла обмена и перезапустить синхронизацию. Если ошибка сохраняется — сравните версии конфигураций в обеих базах-участницах обмена: рассинхронизация версий — частая причина подобных сбоев.
Ошибка в типовой конфигурации без доработок
Если конфигурация полностью типовая, на поддержке, а ошибка всё равно возникает — вероятны два сценария. Первый: известная ошибка конкретного релиза, исправленная в последующих обновлениях. Проверьте, актуальна ли ваша версия конфигурации и платформы; информацию об исправленных ошибках вендор публикует в описаниях релизов.
Второй сценарий — повреждённые или противоречивые данные в самом регистре сведений: например, записи с некорректными значениями измерений, появившиеся после прерванного обмена или аварийного завершения сеанса. Здесь помогает тестирование и исправление информационной базы (Конфигуратор → Администрирование → Тестирование и исправление), запускаемое строго на копии или после выгрузки базы.
| Ситуация | Вероятная причина | Первичное действие |
|---|---|---|
| Ошибка в своём коде | Нарушен контракт менеджера записи | Отладка с остановкой по ошибке |
| Ошибка при обмене | Правила конвертации или разные версии | Анализ протокола обмена |
| Ошибка после обновления | Известный дефект релиза | Проверка описаний новых релизов |
| Ошибка в типовой базе | Повреждённые данные регистра | Тестирование и исправление на копии |
| Ошибка в расширении | Конфликт доработки с типовым кодом | Отключение расширения для проверки |
Профилактика повторного появления
Чтобы ошибка не возвращалась, вынесите запись регистров сведений в отдельные процедуры общих модулей с явной проверкой входных данных. Это дешевле, чем разбирать аварийные ситуации у пользователей.
Полезные практики: валидируйте заполненность измерений до вызова Записать(), не переиспользуйте наборы записей между вызовами без очистки, а при разработке правил обмена тестируйте загрузку на копии рабочей базы. При обновлениях конфигурации сверяйте изменения в структуре регистров сведений — добавление нового измерения ломает старый код записи именно описанным образом.
Частые вопросы
Можно ли исправить ошибку без программиста?
Если конфигурация типовая и ошибка связана с обменом — иногда да: помогает повторная регистрация данных для обмена или обновление на свежий релиз. Если причина в доработанном коде, потребуется специалист с доступом к конфигуратору и отладчику.
Почему ошибка возникает только у одного пользователя?
Возможные причины: пользователь работает с конкретными данными, которые содержат дефект; у него другой набор прав, из-за чего выполняется иная ветка кода; либо его сеанс обрабатывает другой объём записей. Журнал регистрации поможет сопоставить ошибку с конкретной операцией.
Опасно ли продолжать работу, игнорируя ошибку?
Да. Ошибка означает, что запись в регистр сведений не выполнена, а значит, связанные данные (курсы, цены, настройки, статусы) остаются неактуальными. Это может искажать отчёты и последующие расчёты.
Поможет ли тестирование и исправление базы?
Только если причина — физически повреждённые данные. Если ошибка воспроизводится из-за логики кода или правил обмена, тестирование и исправление её не устранит. Запускайте процедуру только на копии базы или после резервного копирования.
Ошибка появилась после добавления расширения — что делать?
Отключите расширение и проверьте, исчезла ли ошибка. Если да — проблема в коде расширения: оно либо перехватывает запись регистра, либо вызывает её некорректно. Передайте разработчику расширения текст ошибки и шаги воспроизведения.