Разработка и Конфигурация · 9 мин
Как добавить запись в непериодический независимый регистр сведений в 1С 8
Пошаговая инструкция: как добавить запись в непериодический независимый регистр сведений 1С 8 через форму и программно. Примеры кода, проверка результата, типичные ошибки.
Непериодический независимый регистр сведений — самый простой тип регистра в 1С 8: записи в нём не привязаны к дате и не зависят от документов-регистраторов. Каждая запись идентифицируется только набором измерений, поэтому добавление сводится к заполнению измерений, ресурсов и реквизитов с последующей записью набора или менеджера записи.
Добавить запись можно двумя способами: вручную через форму списка регистра в режиме 1С:Предприятие или программно на встроенном языке. Ручной способ подходит для разового ввода данных, программный — для загрузки данных, обработок заполнения и интеграций. Ниже разобраны оба варианта с примерами кода и проверкой результата.
Ключевая особенность, которую нужно понимать перед началом работы: если запись с таким же набором значений измерений уже существует, повторное добавление не создаст дубликат — оно перезапишет существующую запись. Это одновременно и удобство, и источник ошибок при пакетной загрузке.
Что важно знать о структуре регистра перед добавлением записи
Прежде чем добавлять запись, откройте регистр в конфигураторе и посмотрите его состав: измерения, ресурсы и реквизиты. Измерения образуют уникальный ключ записи — именно по их комбинации платформа определяет, новая это запись или обновление существующей. Ресурсы хранят основные значения, реквизиты — дополнительные пояснения, не участвующие в отборах.
Если у регистра нет ни одного измерения, в нём может существовать только одна запись — фактически это хранилище единственного значения. Если измерений несколько, все они должны быть заполнены: пустое значение измерения — тоже значение, и запись с пустым измерением будет отдельной строкой регистра, что часто приводит к «мусорным» данным.
Как добавить запись вручную через форму списка
В режиме 1С:Предприятие откройте регистр через главное меню: «Все функции» → «Регистры сведений» → нужный регистр. Если регистр включён в подсистемы, он также доступен через стандартную навигацию интерфейса. Нажмите кнопку «Создать» (или клавишу Insert), заполните поля формы записи и нажмите «Записать и закрыть».
Если запись с такими измерениями уже существует, платформа при записи выдаст сообщение о конфликте уникальности или молча перезапишет данные — поведение зависит от того, как открыта форма. Чтобы изменить существующую запись, просто откройте её из списка двойным щелчком, отредактируйте и сохраните.
Ручной способ не подходит для массового ввода: сотни записей через форму вносить долго и чревато ошибками. Для таких задач используйте программное добавление или обработки загрузки данных из табличных документов.
Программное добавление одной записи через МенеджерЗаписи
Для добавления одиночной записи используется объект РегистрыСведенийМенеджерЗаписи. Последовательность: создать менеджер записи, заполнить измерения и ресурсы, вызвать метод Записать(). Это самый короткий и читаемый способ для разовых операций.
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Валюта = СсылкаНаВалюту;
МенеджерЗаписи.Курс = 92.50;
МенеджерЗаписи.Записать();
Метод Записать() по умолчанию работает в режиме замещения: если запись с такими измерениями есть, она будет перезаписана. Если нужно запретить замещение и получить исключение при совпадении ключа, используйте Записать(Ложь) — тогда при дубликате платформа выдаст ошибку, которую можно обработать через Попытка...Исключение.
МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура = ТекущаяНоменклатура;
МенеджерЗаписи.Штрихкод = "4607025392110";
МенеджерЗаписи.Записать(Истина); // Истина — замещение существующей записиДобавление группы записей через НаборЗаписей
Когда нужно добавить несколько записей одним действием, эффективнее использовать НаборЗаписей. Набор создаётся, заполняется строками через Добавить() и записывается целиком. Все строки набора сохраняются в одной транзакции, что быстрее и надёжнее, чем запись по одной через менеджер записи.
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Номенклатура = СтрокаТовара.Номенклатура;
НоваяЗапись.ВидЦены = ВидЦеныПродажи;
НоваяЗапись.Цена = СтрокаТовара.Цена;
КонецЦикла;
НаборЗаписей.Записать();
Критически важный момент: если перед записью установить отбор по измерениям (НаборЗаписей.Отбор.Номенклатура.Установить(...)), то метод Записать() сначала удалит все существующие записи по этому отбору, а затем запишет новые. Если отбор не установлен вовсе, запись набора без строк очистит весь регистр. Всегда контролируйте состав отбора перед вызовом Записать().
Как выбрать способ добавления
Выбор между менеджером записи и набором записей зависит от количества строк и логики замещения. Для одной записи и простого обновления достаточно менеджера записи. Для пакетной загрузки, где нужно полностью заменить данные по конкретному измерению (например, перезаписать все цены по одному виду цен), правильнее набор записей с отбором.
Сравнение вариантов
Одна запись, простой код, замещение по ключу измерений. Не подходит для массовой загрузки — медленно при тысячах строк.
Группа записей в одной транзакции, полное замещение по отбору. Требует аккуратности с отбором, иначе можно удалить лишнее.
Разовое добавление без программирования. Не масштабируется и не контролирует дубликаты автоматически.
Проверка результата и типичные ошибки
После программной записи проверьте результат: откройте форму списка регистра или выполните запрос с отбором по измерениям. Убедитесь, что количество записей соответствует ожиданию и ресурсы заполнены корректными значениями, а не значениями по умолчанию.
Как проверить результат
Запрос по ключу измерений возвращает одну строку с нужными ресурсами
Запрос пустой — запись не создана или измерения заполнены иначе
Совпадает с числом строк в источнике с учётом замещённых дублей
Записей меньше — часть строк перезаписала друг друга из-за одинаковых измерений
Заполнены фактическими данными
Нули и пустые ссылки — поля не были присвоены перед Записать()
Ограничения и нюансы прав доступа
Для добавления записей у пользователя должны быть права на добавление и изменение регистра сведений. Если регистр участвует в механизме RLS (ограничение доступа на уровне записей), программная запись может завершиться ошибкой нарушения прав, даже если код синтаксически верен. В таком случае проверяйте роли пользователя или выполняйте запись в привилегированном модуле.
Ещё одно ограничение: если для регистра включён режим «Подчинение регистратору» — это уже не независимый регистр, и добавить запись напрямую нельзя, только движениями документа. Проверьте свойство регистра «Режим записи» в конфигураторе: для рассматриваемого случая оно должно быть «Независимый».
Что важно запомнить
Одна запись добавляется через СоздатьМенеджерЗаписи() с методом Записать(), группа — через СоздатьНаборЗаписей() с обязательным контролем отбора. Ключ записи — комбинация измерений; совпадение ключа означает замещение, а не дубликат. Перед записью набора всегда проверяйте отбор, чтобы не очистить регистр.
Частые вопросы
Можно ли добавить несколько записей с одинаковыми измерениями?
Нет. Комбинация значений измерений — уникальный ключ записи в независимом регистре. Повторная запись с тем же ключом замещает существующую. Если нужно хранить несколько значений по одному объекту, добавьте в регистр ещё одно измерение (например, вид значения) или используйте периодический регистр.
Почему после Записать() данные не появились в регистре?
Чаще всего измерения заполнены другими значениями, чем вы ищете (например, пустая ссылка вместо нужной), либо запись выполнялась в транзакции, которая была отменена. Также проверьте права доступа и не сработало ли RLS-ограничение.
Чем отличается Записать(Истина) от Записать(Ложь) у менеджера записи?
Параметр управляет замещением: Истина (по умолчанию) — существующая запись с тем же ключом перезаписывается; Ложь — при совпадении ключа возникает исключение, и старая запись остаётся нетронутой.
Как удалить добавленную запись программно?
Создайте набор записей, установите отбор по значениям измерений нужной записи и вызовите Записать() без добавления строк — пустой набор с отбором удалит записи по этому отбору. Альтернатива для одной записи: заполнить менеджер записи ключом и вызвать Удалить().
Можно ли добавить запись из внешней обработки или расширения?
Да, код работает одинаково в конфигурации, внешней обработке и расширении — доступ к регистру осуществляется через менеджер РегистрыСведений.ИмяРегистра. Ограничение: в безопасном режиме внешней обработки часть операций может быть недоступна по настройкам профиля безопасности.
Что быстрее при загрузке тысяч записей — менеджер записи или набор?
Набор записей существенно быстрее: вся пачка строк сохраняется одной операцией. Запись по одной строке через менеджер в цикле выполняет отдельное обращение к базе на каждую запись и на больших объёмах работает заметно медленнее.