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

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

Как создать запись в регистре 1С

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

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

Способ создания записи зависит от типа регистра. Регистры сведений бывают независимыми (записи добавляются сами по себе) и подчинёнными регистратору (записи появляются только при проведении документа). Регистры накопления всегда подчинены регистратору. Это ключевое различие определяет и интерфейсные возможности, и программный код.

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

Как определить, каким способом создавать запись

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

Независимый регистр сведений (например, «Курсы валют» или «Штрихкоды номенклатуры») заполняется напрямую. Подчинённый регистр (например, «Цены номенклатуры» в типовых конфигурациях) требует документа-регистратора — чаще всего это специализированный документ вроде «Установка цен номенклатуры». Регистры накопления («Товары на складах», «Взаиморасчёты») заполняются только движениями документов.

Маршрут решения

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

Регистр сведений независимыйДобавляйте запись вручную через форму списка или кодом через РегистрыСведений.<Имя>.СоздатьМенеджерЗаписи()
Регистр подчинён регистраторуСоздайте документ-регистратор и заполните его движения, либо сформируйте набор записей с установленным отбором по регистратору
Нужно ввести начальные остаткиИспользуйте штатный документ ввода остатков конфигурации, а не прямую запись в регистр
Нужно разово исправить данныеИспользуйте обработку «Редактирование движений документа» или корректировочный документ, а не ручное изменение таблиц

Ручное создание записи в независимом регистре сведений

Самый простой сценарий. В режиме «1С:Предприятие» откройте регистр через главное меню: «Все функции» → «Регистры сведений» → нужный регистр. Если пункт «Все функции» не отображается, включите его: «Сервис» → «Параметры» → флажок «Отображать команду "Все функции"».

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

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

Создание записи через документ-регистратор

Для подчинённых регистров правильный путь — документ. В типовых конфигурациях для этого предусмотрены специальные документы: «Установка цен номенклатуры» пишет в регистр цен, «Ввод начальных остатков» — в регистры накопления, «Кадровый перевод» — в кадровые регистры сведений.

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

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

Программное создание записи кодом

Для независимого регистра сведений используйте менеджер записи — он удобен, когда нужно добавить или изменить одну запись:

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

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

МенеджерЗаписи.Валюта = Справочники.Валюты.НайтиПоКоду("840");

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

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

Для массовой загрузки или для регистра, подчинённого регистратору, используйте набор записей. Набор обязательно требует установки отбора по регистратору, иначе метод Записать() завершится ошибкой:

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

НаборЗаписей.Отбор.Регистратор.Установить(ДокументСсылка);

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

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

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

НоваяЗапись.ВидДвижения = ВидДвиженияНакопления.Приход;

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

НоваяЗапись.Склад = СкладСсылка;

НоваяЗапись.Количество = 10;

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

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

Порядок действий при программной записи
  1. 1
    Определите тип регистра и режим записи в конфигураторе
  2. 2
    Для независимого регистра создайте менеджер записи или набор без регистратора
  3. 3
    Для подчинённого регистра установите отбор набора по документу-регистратору
  4. 4
    Заполните период, вид движения (для накопления), измерения и ресурсы
  5. 5
    Вызовите Записать() и проверьте результат через движения документа или запрос

Запись из обработчика проведения документа

В собственных конфигурациях записи обычно создаются в процедуре ОбработкаПроведения модуля объекта документа. Там набор записей доступен через коллекцию Движения:

Процедура ОбработкаПроведения(Отказ, РежимПроведения)

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

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

Движение = Движения.ТоварыНаСкладах.Добавить();

Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

Движение.Период = Дата;

Движение.Номенклатура = СтрокаТовара.Номенклатура;

Движение.Склад = Склад;

Движение.Количество = СтрокаТовара.Количество;

КонецЦикла;

КонецПроцедуры

Строка Движения.ТоварыНаСкладах.Записывать = Истина обязательна: без неё платформа не запишет набор при проведении. Альтернатива — установить свойство «Записывать» у набора через Движения.ТоварыНаСкладах.Записать() в конце процедуры.

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

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

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

Типичные ошибки
01
Запись набора без отбора по регистратору — платформа выдаёт ошибку, либо набор затирает чужие движения
02
Отсутствие строки Записывать = Истина в ОбработкеПроведения — документ проводится, но движения пустые
03
Незаполненный ВидДвижения в регистре накопления — запись не сохраняется или остатки уходят в минус
04
Дублирование периода и измерений в периодическом регистре сведений — ошибка уникальности при записи
05
Ручная правка таблиц регистра напрямую вместо корректировочного документа — рассинхронизация итогов и отчётов

Альтернативы: когда запись в регистр не нужна

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

Для разовой загрузки данных из Excel или другой системы не пишите запись «в лоб»: используйте типовую обработку загрузки данных из табличного документа или универсальный обмен, которые корректно заполняют регистры через документы. Это сохраняет целостность учёта и аудиторский след — всегда видно, каким документом появилась запись.

Итог

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

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

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

Почему в форме списка регистра нет кнопки «Создать»?

Регистр подчинён регистратору — платформа запрещает добавлять записи без документа. Создайте документ-регистратор соответствующего вида и проведите его. Узнать регистраторов можно в конфигураторе на закладке «Регистраторы» в свойствах регистра.

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

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

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

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

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

Штатно — нет: регистры накопления всегда подчинены регистратору. Для ввода остатков и разовых корректировок используйте специальные документы («Ввод начальных остатков», «Корректировка регистров», «Операция» — в зависимости от конфигурации). Это сохраняет прозрачность учёта.

Документ проводится, но записей в регистре нет. Что проверить?

Проверьте: есть ли строка Движения.<ИмяРегистра>.Записывать = Истина в ОбработкеПроведения; не прерывается ли процедура раньше добавления движений (например, по условию или из-за Отказ = Истина); заполнена ли табличная часть, по которой строится цикл; включён ли регистр в список движений документа в конфигураторе.

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

Для движений документа — распроведите или отмените проведение документа-регистратора, записи удалятся автоматически. Для независимого регистра сведений — удалите запись из формы списка или кодом через набор записей с отбором по измерениям и методом Записать() пустого набора. Не удаляйте записи напрямую из таблиц СУБД.