К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как добавить запись в непериодический независимый регистр сведений в 1С 8

Пошаговая инструкция: как добавить запись в непериодический независимый регистр сведений 1С 8 через форму и программно. Примеры кода, проверка результата, типичные ошибки.

Непериодический независимый регистр сведений — самый простой тип регистра в 1С 8: записи в нём не привязаны к дате и не зависят от документов-регистраторов. Каждая запись идентифицируется только набором измерений, поэтому добавление сводится к заполнению измерений, ресурсов и реквизитов с последующей записью набора или менеджера записи.

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

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

Что важно знать о структуре регистра перед добавлением записи

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

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

Как добавить запись вручную через форму списка

В режиме 1С:Предприятие откройте регистр через главное меню: «Все функции» → «Регистры сведений» → нужный регистр. Если регистр включён в подсистемы, он также доступен через стандартную навигацию интерфейса. Нажмите кнопку «Создать» (или клавишу Insert), заполните поля формы записи и нажмите «Записать и закрыть».

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

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

Программное добавление одной записи через МенеджерЗаписи

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

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

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

МенеджерЗаписи.Курс = 92.50;

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

Метод Записать() по умолчанию работает в режиме замещения: если запись с такими измерениями есть, она будет перезаписана. Если нужно запретить замещение и получить исключение при совпадении ключа, используйте Записать(Ложь) — тогда при дубликате платформа выдаст ошибку, которую можно обработать через Попытка...Исключение.

bsl
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура = ТекущаяНоменклатура;
МенеджерЗаписи.Штрихкод = "4607025392110";
МенеджерЗаписи.Записать(Истина); // Истина — замещение существующей записи

Добавление группы записей через НаборЗаписей

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

НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();

Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл

НоваяЗапись = НаборЗаписей.Добавить();

НоваяЗапись.Номенклатура = СтрокаТовара.Номенклатура;

НоваяЗапись.ВидЦены = ВидЦеныПродажи;

НоваяЗапись.Цена = СтрокаТовара.Цена;

КонецЦикла;

НаборЗаписей.Записать();

Критически важный момент: если перед записью установить отбор по измерениям (НаборЗаписей.Отбор.Номенклатура.Установить(...)), то метод Записать() сначала удалит все существующие записи по этому отбору, а затем запишет новые. Если отбор не установлен вовсе, запись набора без строк очистит весь регистр. Всегда контролируйте состав отбора перед вызовом Записать().

Как выбрать способ добавления

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

Сравнение вариантов

МенеджерЗаписи

Одна запись, простой код, замещение по ключу измерений. Не подходит для массовой загрузки — медленно при тысячах строк.

НаборЗаписей с отбором

Группа записей в одной транзакции, полное замещение по отбору. Требует аккуратности с отбором, иначе можно удалить лишнее.

Ручной ввод через форму

Разовое добавление без программирования. Не масштабируется и не контролирует дубликаты автоматически.

Проверка результата и типичные ошибки

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

Контрольные точки

Как проверить результат

Наличие записи
Норма

Запрос по ключу измерений возвращает одну строку с нужными ресурсами

Тревожный признак

Запрос пустой — запись не создана или измерения заполнены иначе

Количество записей после загрузки
Норма

Совпадает с числом строк в источнике с учётом замещённых дублей

Тревожный признак

Записей меньше — часть строк перезаписала друг друга из-за одинаковых измерений

Значения ресурсов
Норма

Заполнены фактическими данными

Тревожный признак

Нули и пустые ссылки — поля не были присвоены перед Записать()

Типичные ошибки
01
Запись набора без отбора — полное замещение или очистка всего регистра
02
Пустые измерения — создаются «мусорные» записи с пустым ключом, которые потом мешают отборам
03
Ожидание дубликатов — повторная запись с теми же измерениями молча перезаписывает старую, а не добавляет новую строку
04
Запись в цикле по одной строке через менеджер записи при большом объёме — существенная потеря производительности вместо пакетной записи набором

Ограничения и нюансы прав доступа

Для добавления записей у пользователя должны быть права на добавление и изменение регистра сведений. Если регистр участвует в механизме RLS (ограничение доступа на уровне записей), программная запись может завершиться ошибкой нарушения прав, даже если код синтаксически верен. В таком случае проверяйте роли пользователя или выполняйте запись в привилегированном модуле.

Ещё одно ограничение: если для регистра включён режим «Подчинение регистратору» — это уже не независимый регистр, и добавить запись напрямую нельзя, только движениями документа. Проверьте свойство регистра «Режим записи» в конфигураторе: для рассматриваемого случая оно должно быть «Независимый».

Итог

Что важно запомнить

Одна запись добавляется через СоздатьМенеджерЗаписи() с методом Записать(), группа — через СоздатьНаборЗаписей() с обязательным контролем отбора. Ключ записи — комбинация измерений; совпадение ключа означает замещение, а не дубликат. Перед записью набора всегда проверяйте отбор, чтобы не очистить регистр.

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

Можно ли добавить несколько записей с одинаковыми измерениями?

Нет. Комбинация значений измерений — уникальный ключ записи в независимом регистре. Повторная запись с тем же ключом замещает существующую. Если нужно хранить несколько значений по одному объекту, добавьте в регистр ещё одно измерение (например, вид значения) или используйте периодический регистр.

Почему после Записать() данные не появились в регистре?

Чаще всего измерения заполнены другими значениями, чем вы ищете (например, пустая ссылка вместо нужной), либо запись выполнялась в транзакции, которая была отменена. Также проверьте права доступа и не сработало ли RLS-ограничение.

Чем отличается Записать(Истина) от Записать(Ложь) у менеджера записи?

Параметр управляет замещением: Истина (по умолчанию) — существующая запись с тем же ключом перезаписывается; Ложь — при совпадении ключа возникает исключение, и старая запись остаётся нетронутой.

Как удалить добавленную запись программно?

Создайте набор записей, установите отбор по значениям измерений нужной записи и вызовите Записать() без добавления строк — пустой набор с отбором удалит записи по этому отбору. Альтернатива для одной записи: заполнить менеджер записи ключом и вызвать Удалить().

Можно ли добавить запись из внешней обработки или расширения?

Да, код работает одинаково в конфигурации, внешней обработке и расширении — доступ к регистру осуществляется через менеджер РегистрыСведений.ИмяРегистра. Ограничение: в безопасном режиме внешней обработки часть операций может быть недоступна по настройкам профиля безопасности.

Что быстрее при загрузке тысяч записей — менеджер записи или набор?

Набор записей существенно быстрее: вся пачка строк сохраняется одной операцией. Запись по одной строке через менеджер в цикле выполняет отдельное обращение к базе на каждую запись и на больших объёмах работает заметно медленнее.