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