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