Разработка и Конфигурация · 11 мин
Как добавить значение в регистр сведений 1С
Как добавить запись в регистр сведений 1С: ручной ввод через интерфейс, программное создание записей на встроенном языке, типовые ошибки и проверка результата.
Регистр сведений в 1С — это объект конфигурации, предназначенный для хранения информации в разрезе измерений: курсов валют, цен номенклатуры, адресов контрагентов, настроек пользователей. Добавить значение в регистр можно двумя принципиально разными способами: вручную через пользовательский интерфейс или программно с помощью встроенного языка. Выбор зависит от того, разовая это операция или часть обработки данных.
Прежде чем добавлять запись, важно понять структуру конкретного регистра: какие у него измерения (ключевые поля, по которым хранится уникальность), какие ресурсы (собственно значения) и реквизиты (дополнительные атрибуты). Также имеет значение режим записи: регистр может быть независимым или подчинённым регистратору, периодическим или непериодическим. От этих свойств напрямую зависит, каким способом и с какими полями вы будете добавлять данные.
Ошибки при работе с регистрами сведений обычно связаны с нарушением уникальности измерений, неправильным указанием периода или попыткой записи в подчинённый регистр без регистратора. Ниже разобраны оба способа добавления значений, проверка результата и типичные проблемы.
Что нужно знать о регистре перед добавлением записи
Откройте регистр в конфигураторе или посмотрите его свойства в режиме предприятия. Ключевые характеристики, которые определяют порядок работы: вид регистра (независимый или подчинён регистратору), периодичность (непериодический, в пределах секунды, дня, месяца и т.д.), состав измерений и ресурсов.
Измерения формируют уникальный ключ записи. Если регистр независимый и непериодический, то комбинация значений измерений должна быть уникальной: попытка добавить вторую запись с тем же набором измерений приведёт либо к ошибке, либо к перезаписи существующей — в зависимости от способа добавления. В периодическом регистре в ключ дополнительно входит поле «Период».
Регистр, подчинённый регистратору, нельзя редактировать напрямую вручную: записи в него создаются и изменяются только через документ-регистратор при его проведении. Это частая причина, почему пользователь не находит кнопку «Создать» в списке регистра.
Как добавить запись вручную через интерфейс
Ручной способ подходит для разового ввода данных: добавить курс валюты, задать цену, указать настройку. В режиме 1С:Предприятие найдите регистр сведений через меню «Все функции» (если он не выведен в интерфейс подсистем) или через соответствующий раздел прикладного решения. В типовых конфигурациях регистры часто доступны из карточек связанных объектов — например, цены открываются из карточки номенклатуры.
Откроется список записей регистра. Нажмите кнопку «Создать» (или клавишу Insert), заполните поля формы: измерения, ресурсы, реквизиты, а для периодического регистра — дату (период) записи. Затем нажмите «Записать» или «Записать и закрыть». Новая строка появится в списке.
Если кнопки «Создать» нет, проверьте два момента: не подчинён ли регистр регистратору (тогда запись создаётся только документом) и есть ли у вашей роли права на добавление записей в этот регистр. Вопрос прав решается с администратором или через настройку ролей в конфигураторе.
- 1Откройте список регистра сведений через «Все функции» или раздел прикладного решения
- 2Нажмите «Создать» или клавишу Insert
- 3Заполните измерения, ресурсы и период (если регистр периодический)
- 4Нажмите «Записать и закрыть»
- 5Убедитесь, что новая строка появилась в списке
Программное добавление через МенеджерЗаписи
Для добавления одной записи кодом используется объект РегистрыСведенийМенеджерЗаписи. Это самый простой и наглядный способ: вы создаёте менеджер записи, заполняете его свойства и вызываете метод Записать().
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Валюта = ВалютаСсылка;
МенеджерЗаписи.Курс = 90.5;
МенеджерЗаписи.Записать();
Важная особенность: если запись с таким же набором значений измерений и периодом уже существует, метод Записать() без параметров перезапишет её новыми значениями ресурсов. Если нужно гарантированно отказаться от перезаписи, используйте Записать(Ложь) — тогда при наличии дубля будет вызвано исключение.
Для регистра, подчинённого регистратору, через менеджер записи записывать данные нельзя — потребуется набор записей с установленным отбором по регистратору и последующей записью набора.
МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Валюта = ВалютаСсылка;
МенеджерЗаписи.Курс = 90.5;
МенеджерЗаписи.Записать(Истина); // Истина — перезаписать существующуюДобавление нескольких записей через НаборЗаписей
Когда нужно добавить сразу много записей — например, загрузить курсы за месяц или перенести данные из файла, — эффективнее использовать набор записей. Он позволяет сформировать коллекцию строк в памяти и записать её одним обращением к базе данных, что существенно быстрее, чем запись каждой строки отдельным менеджером.
НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Для Каждого СтрокаДанных Из ДанныеЗагрузки Цикл
НоваяЗапись = НаборЗаписей.Добавить();
НоваяЗапись.Период = СтрокаДанных.Дата;
НоваяЗапись.Валюта = СтрокаДанных.Валюта;
НоваяЗапись.Курс = СтрокаДанных.Курс;
КонецЦикла;
НаборЗаписей.Записать();
Критически важный нюанс: если для набора установлен отбор (например, по валюте), то метод Записать() сначала удалит все существующие записи, попадающие под отбор, а затем запишет новые. Если отбор не установлен, набор при записи попытается заместить всю таблицу регистра. Поэтому при массовой загрузке либо не устанавливайте отбор и добавляйте записи в пустой набор с параметром Записать(Истина) осторожно, либо чётко контролируйте область замещения.
Для подчинённого регистра набор записей — единственный программный способ: отбор устанавливается по регистратору, записи добавляются в набор, затем набор записывается. Обычно это делается в модуле документа-регистратора в обработке проведения.
Сравнение способов добавления значений
Выбор способа зависит от объёма данных, частоты операции и типа регистра. Ручной ввод оправдан для единичных корректировок, менеджер записи — для точечных программных изменений, набор записей — для пакетной загрузки и работы с подчинёнными регистрами.
| Способ | Когда применять | Ограничения |
|---|---|---|
| Ручной ввод через форму | Разовое добавление, корректировка данных пользователем | Недоступен для регистров, подчинённых регистратору; требует прав |
| Менеджер записи | Добавление или изменение одной записи кодом | Не работает с регистрами, подчинёнными регистратору |
| Набор записей | Массовая загрузка, проведение документов, подчинённые регистры | Риск замещения существующих данных при неправильном отборе |
| Документ-регистратор | Любые изменения в подчинённом регистре | Требует наличия документа и его проведения |
Как выбрать способ
Проверка результата и типичные ошибки
После добавления записи убедитесь, что она действительно сохранилась и содержит корректные значения. Самый простой способ — открыть список регистра и найти новую строку, установив отбор по измерениям. Для программной проверки используйте запрос или метод Прочитать() менеджера записи с заполненными измерениями, после чего проверьте свойство Выбран().
Типичные ошибки при добавлении: незаполненное обязательное измерение (запись либо не сохранится, либо сохранится с пустым ключом), неверный период в периодическом регистре (запись «уходит» на другую дату и не видна в ожидаемом срезе), попытка записи в подчинённый регистр без регистратора, а также случайная перезапись существующего значения вместо создания новой строки.
Отдельная группа проблем — права доступа и блокировки. Если при записи возникает ошибка о нарушении прав, проверьте роли пользователя. Если сообщение о конфликте блокировок — запись в этот момент изменяется другим сеансом; повторите операцию или пересмотрите логику транзакции.
Как проверить результат
Строка видна при отборе по измерениям
Строки нет или она с другим периодом
Ресурсы соответствуют введённым данным
Поля пустые или содержат старые значения
Одна запись на комбинацию измерений и периода
Ожидалась новая запись, но перезаписалась существующая
Если добавление выполняется в рамках обмена данными или пакетной обработки, полезно логировать количество добавленных и пропущенных записей. Это позволит быстро найти расхождения при сверке с источником данных и не искать ошибку вслепую.
Ответы на частые вопросы
Как добавить запись, если регистр подчинён регистратору?
Напрямую — никак. Записи создаются документом-регистратором при проведении. Программно это делается через набор записей с отбором по регистратору, обычно в обработке проведения документа. Ручное редактирование такого регистра в интерфейсе недоступно.
Чем отличается Записать(Истина) от Записать(Ложь) у менеджера записи?
Параметр определяет режим замещения. Записать(Истина) перезапишет существующую запись с тем же ключом измерений и периода. Записать(Ложь) при наличии дубля вызовет исключение, что позволяет защититься от случайной перезаписи данных.
Почему запись добавилась, но не видна в списке?
Чаще всего причина в установленном отборе списка или в неверном периоде записи: для периодического регистра строка могла сохраниться с другой датой. Снимите отборы и проверьте поле «Период». Также проверьте, не работаете ли вы в другой информационной базе.
Можно ли добавить значение в регистр сведений через запрос?
Нет, язык запросов 1С предназначен только для чтения данных. Для добавления и изменения записей используются объектные средства: менеджер записи или набор записей. Запрос применяется лишь для проверки существования записи перед добавлением.
Как избежать дублей при массовой загрузке?
Перед добавлением проверяйте существование записи запросом по ключу измерений и периода, либо загружайте данные в набор записей с отбором по загружаемому диапазону — тогда старые записи в этом диапазоне будут замещены новыми без дублирования.
Что делать при ошибке «Конфликт блокировок при выполнении транзакции»?
Запись изменяется другим сеансом. Для разовой операции повторите попытку позже. В массовых обработках добавьте обработку исключений с повторными попытками и уменьшите объём данных в одной транзакции, чтобы сократить время удержания блокировок.
Что важно запомнить
Для разового ввода используйте ручное добавление через список регистра, для одиночной программной записи — менеджер записи, для массовой загрузки и подчинённых регистров — набор записей. Всегда контролируйте отбор набора и режим замещения, а перед массовыми операциями делайте резервную копию базы.