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

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

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

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

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

Прежде чем добавлять запись, важно понять структуру конкретного регистра: какие у него измерения (ключевые поля, по которым хранится уникальность), какие ресурсы (собственно значения) и реквизиты (дополнительные атрибуты). Также имеет значение режим записи: регистр может быть независимым или подчинённым регистратору, периодическим или непериодическим. От этих свойств напрямую зависит, каким способом и с какими полями вы будете добавлять данные.

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

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

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

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

Регистр, подчинённый регистратору, нельзя редактировать напрямую вручную: записи в него создаются и изменяются только через документ-регистратор при его проведении. Это частая причина, почему пользователь не находит кнопку «Создать» в списке регистра.

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

Ручной способ подходит для разового ввода данных: добавить курс валюты, задать цену, указать настройку. В режиме 1С:Предприятие найдите регистр сведений через меню «Все функции» (если он не выведен в интерфейс подсистем) или через соответствующий раздел прикладного решения. В типовых конфигурациях регистры часто доступны из карточек связанных объектов — например, цены открываются из карточки номенклатуры.

Откроется список записей регистра. Нажмите кнопку «Создать» (или клавишу Insert), заполните поля формы: измерения, ресурсы, реквизиты, а для периодического регистра — дату (период) записи. Затем нажмите «Записать» или «Записать и закрыть». Новая строка появится в списке.

Если кнопки «Создать» нет, проверьте два момента: не подчинён ли регистр регистратору (тогда запись создаётся только документом) и есть ли у вашей роли права на добавление записей в этот регистр. Вопрос прав решается с администратором или через настройку ролей в конфигураторе.

Ручное добавление записи
  1. 1
    Откройте список регистра сведений через «Все функции» или раздел прикладного решения
  2. 2
    Нажмите «Создать» или клавишу Insert
  3. 3
    Заполните измерения, ресурсы и период (если регистр периодический)
  4. 4
    Нажмите «Записать и закрыть»
  5. 5
    Убедитесь, что новая строка появилась в списке

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

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

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

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

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

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

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

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

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

bsl
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Валюта = ВалютаСсылка;
МенеджерЗаписи.Курс = 90.5;
МенеджерЗаписи.Записать(Истина); // Истина — перезаписать существующую

Добавление нескольких записей через НаборЗаписей

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

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

Для Каждого СтрокаДанных Из ДанныеЗагрузки Цикл

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

НоваяЗапись.Период = СтрокаДанных.Дата;

НоваяЗапись.Валюта = СтрокаДанных.Валюта;

НоваяЗапись.Курс = СтрокаДанных.Курс;

КонецЦикла;

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

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

Для подчинённого регистра набор записей — единственный программный способ: отбор устанавливается по регистратору, записи добавляются в набор, затем набор записывается. Обычно это делается в модуле документа-регистратора в обработке проведения.

Сравнение способов добавления значений

Выбор способа зависит от объёма данных, частоты операции и типа регистра. Ручной ввод оправдан для единичных корректировок, менеджер записи — для точечных программных изменений, набор записей — для пакетной загрузки и работы с подчинёнными регистрами.

СпособКогда применятьОграничения
Ручной ввод через формуРазовое добавление, корректировка данных пользователемНедоступен для регистров, подчинённых регистратору; требует прав
Менеджер записиДобавление или изменение одной записи кодомНе работает с регистрами, подчинёнными регистратору
Набор записейМассовая загрузка, проведение документов, подчинённые регистрыРиск замещения существующих данных при неправильном отборе
Документ-регистраторЛюбые изменения в подчинённом регистреТребует наличия документа и его проведения
Маршрут решения

Как выбрать способ

Нужно добавить одну-две записи вручнуюОткройте список регистра и используйте кнопку «Создать»
Нужно программно изменить одну запись независимого регистраИспользуйте СоздатьМенеджерЗаписи() и метод Записать()
Загружаете много записей из файла или обработкиИспользуйте набор записей и контролируйте отбор перед Записать()
Регистр подчинён регистраторуСоздавайте записи только через проведение документа-регистратора

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

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

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

Отдельная группа проблем — права доступа и блокировки. Если при записи возникает ошибка о нарушении прав, проверьте роли пользователя. Если сообщение о конфликте блокировок — запись в этот момент изменяется другим сеансом; повторите операцию или пересмотрите логику транзакции.

Типичные ошибки
01
Запись набора без отбора — замещается вся таблица регистра, данные теряются
02
Использование менеджера записи для подчинённого регистра — ошибка, нужен набор записей с регистратором
03
Не указан период в периодическом регистре — запись сохраняется с пустой или текущей датой неожиданно для пользователя
04
Добавление дубля без проверки существующей записи — старое значение молча перезаписывается
05
Игнорирование прав доступа — пользователь не видит кнопку «Создать» и считает это ошибкой программы
Контрольные точки

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

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

Строка видна при отборе по измерениям

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

Строки нет или она с другим периодом

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

Ресурсы соответствуют введённым данным

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

Поля пустые или содержат старые значения

Уникальность ключа
Норма

Одна запись на комбинацию измерений и периода

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

Ожидалась новая запись, но перезаписалась существующая

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

Ответы на частые вопросы

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

Напрямую — никак. Записи создаются документом-регистратором при проведении. Программно это делается через набор записей с отбором по регистратору, обычно в обработке проведения документа. Ручное редактирование такого регистра в интерфейсе недоступно.

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

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

Почему запись добавилась, но не видна в списке?

Чаще всего причина в установленном отборе списка или в неверном периоде записи: для периодического регистра строка могла сохраниться с другой датой. Снимите отборы и проверьте поле «Период». Также проверьте, не работаете ли вы в другой информационной базе.

Можно ли добавить значение в регистр сведений через запрос?

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

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

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

Что делать при ошибке «Конфликт блокировок при выполнении транзакции»?

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

Итог

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

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