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