Регистр сведений в 1С 8.3 программно: запись, изменение и удаление
Для одной записи независимого регистра используйте СоздатьМенеджерЗаписи(): заполните все поля ключа,
ресурсы и вызовите Записать(). Для нескольких строк или регистра, подчинённого регистратору,
удобнее СоздатьНаборЗаписей() с точным отбором.
Ключ независимого непериодического регистра состоит из измерений, периодического — из периода и измерений, а у подчинённого регистратору в ключ входит регистратор. Перед изменением запись нужно прочитать, а операции чтения и записи при конкурентном доступе выполнять в транзакции с блокировкой данных.
Менеджер записи или набор записей: что выбрать
Менеджер записи адресует одну строку по её полному ключу. Он проще для точечного добавления, изменения и удаления записи независимого регистра. Набор записей работает с группой строк: сначала задаётся отбор, затем записи читаются, добавляются или удаляются и весь набор записывается обратно.
- Менеджер записи — одна строка независимого регистра, ключ заранее известен.
- Набор записей — несколько строк, массовая замена по отбору или движения одного регистратора.
- Подчинённый регистратору регистр — обычно набор записей с отбором по регистратору.
МенеджерЗаписи = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
НаборЗаписей = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей();
Как добавить запись в регистр сведений 1С программно
Чтобы добавить запись в регистр сведений 1С программно, заполните все измерения, образующие ключ, и ресурсы.
В примере регистр независимый и непериодический, поэтому ключ — Пользователь и ИмяНастройки:
Запись = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
Запись.Пользователь = Пользователь;
Запись.ИмяНастройки = "ОсновнойСклад";
Запись.ЗначениеНастройки = ОсновнойСклад;
Запись.Записать();
Параметр Замещать не заменяет поиск записи перед изменением. Если важны проверки или обработчики должны
видеть прежнее состояние, сначала вызовите Прочитать(), проверьте Выбран и только затем меняйте ресурс.
Независимый, подчинённый регистратору и периодический регистр
У независимого регистра строки создаёт прикладной код напрямую. У регистра, подчинённого регистратору, записи
принадлежат документу или другому регистратору: для набора обязательно задают Отбор.Регистратор, а у каждой
строки должен быть согласованный регистратор.
В периодическом регистре в ключ входит Период. Две строки с одинаковыми измерениями, но разными периодами —
разные записи. Значение периода должно соответствовать требуемому срезу и периодичности регистра; не подменяйте его
произвольным текущим временем, если бизнес-ключом является начало дня или месяца.
Запись = РегистрыСведений.КурсыПоставщиков.СоздатьМенеджерЗаписи();
Запись.Период = НачалоДня(ДатаКурса);
Запись.Поставщик = Поставщик;
Запись.Валюта = Валюта;
Запись.Курс = Курс;
Запись.Записать();
Перед кодированием выпишите полный ключ: измерения плюс период для периодического регистра либо регистратор для подчинённого. Несовпадение хотя бы одного поля означает другую запись.
Как найти существующую запись и изменить регистр сведений программно
Надёжный сценарий «1С изменить регистр сведений программно» — установить полный ключ менеджера, вызвать
Прочитать() и проверить свойство Выбран. Если строка найдена, меняйте только ресурсы; изменение
измерения или периода фактически меняет ключ.
Запись = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
Запись.Пользователь = Пользователь;
Запись.ИмяНастройки = "ОсновнойСклад";
Запись.Прочитать();
Если Запись.Выбран Тогда
Запись.ЗначениеНастройки = ОсновнойСклад;
Запись.Записать();
Иначе
Запись.ЗначениеНастройки = ОсновнойСклад;
Запись.Записать();
КонецЕсли;
Для поиска по неполному ключу, диапазону дат или ресурсу используйте запрос. Получив ключевые поля, передайте их менеджеру записи либо сформируйте набор с точным отбором. Не обновляйте результат запроса напрямую: строки результата не являются объектами записи регистра.
Запись в регистр сведений 1С 8.3 программно через набор и отбор
Отбор набора ограничивает чтение и область замещения. Сначала установите его, затем вызовите Прочитать().
При Записать(Истина) платформа заменяет записи в области текущего отбора содержимым набора, поэтому слишком
широкий или пустой отбор способен удалить чужие строки.
Набор = РегистрыСведений.НастройкиПользователей.СоздатьНаборЗаписей();
Набор.Отбор.Пользователь.Установить(Пользователь);
Набор.Прочитать();
НоваяСтрока = Набор.Добавить();
НоваяСтрока.Пользователь = Пользователь;
НоваяСтрока.ИмяНастройки = "ОсновнойСклад";
НоваяСтрока.ЗначениеНастройки = ОсновнойСклад;
Набор.Записать(Истина);
Если цель — добавить строку без замещения существующих, используйте Записать(Ложь), но учитывайте
уникальность ключа. Для регистратора безопасный шаблон начинается с
Набор.Отбор.Регистратор.Установить(ДокументСсылка).
Как удалить регистр сведений программно
Для точечного сценария «1С удалить регистр сведений программно» менеджеру задают полный ключ, читают запись и вызывают
Удалить() только если она выбрана:
Запись = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
Запись.Пользователь = Пользователь;
Запись.ИмяНастройки = "ОсновнойСклад";
Запись.Прочитать();
Если Запись.Выбран Тогда
Запись.Удалить();
КонецЕсли;
Для группового удаления создайте пустой набор, задайте узкий отбор и запишите его в режиме замещения. Это физически удалит все строки области отбора, поэтому перед записью проверьте отбор и при необходимости прочитайте набор для контроля.
Транзакция и блокировки при конкурентной записи
Между чтением и записью другой сеанс может изменить ту же строку. Если операция зависит от прочитанного значения, объедините чтение, проверку и запись в транзакцию и установите управляемую блокировку по тем же полям ключа. Область блокировки должна быть минимальной: конкретные измерения, период или регистратор.
НачатьТранзакцию();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.НастройкиПользователей");
ЭлементБлокировки.УстановитьЗначение("Пользователь", Пользователь);
ЭлементБлокировки.УстановитьЗначение("ИмяНастройки", "ОсновнойСклад");
Блокировка.Заблокировать();
Запись = РегистрыСведений.НастройкиПользователей.СоздатьМенеджерЗаписи();
Запись.Пользователь = Пользователь;
Запись.ИмяНастройки = "ОсновнойСклад";
Запись.Прочитать();
Запись.ЗначениеНастройки = ОсновнойСклад;
Запись.Записать();
ЗафиксироватьТранзакцию();
В прикладном коде транзакцию нужно завершать в обработчике ошибки через ОтменитьТранзакцию() и повторно
вызывать исключение. Не держите транзакцию во время сетевых запросов, диалогов и долгих вычислений.
Частые ошибки при программной записи регистра сведений
- Заполнен не весь ключ. Пропущенное измерение, период или регистратор приводит к ошибке либо работе не с той строкой.
- Изменение без чтения. Код не различает новую и существующую запись и не учитывает прежнее состояние.
- Проверка через запрос без блокировки. Между поиском и записью другой сеанс успевает изменить данные.
- Пустой или широкий отбор набора.
Записать(Истина)замещает всю область отбора и может удалить лишние записи. - Добавление дубликата ключа. Ресурсы не входят в ключ; другая сумма или настройка не делает запись уникальной.
- Неверный период. Одинаковые измерения с разным временем создают разные строки периодического регистра.
- Долгая транзакция. Избыточная область блокировки увеличивает ожидания и вероятность взаимоблокировок.
Частые вопросы о регистре сведений в 1С 8.3
Как программно проверить, существует ли запись регистра сведений?
Заполните полный ключ менеджера записи, вызовите Прочитать() и проверьте свойство Выбран.
Для поиска по неполному ключу используйте запрос, а изменение выполняйте менеджером или набором.
Чем Записать(Истина) отличается от Записать(Ложь) у набора записей?
При значении Истина существующие строки в области отбора замещаются содержимым набора. При
Ложь строки добавляются; совпадение полного ключа может привести к конфликту записи.
Что входит в ключ записи регистра сведений?
У независимого непериодического регистра — измерения, у периодического к ним добавляется период. Для регистра, подчинённого регистратору, ключ также определяется регистратором и структурой регистра.
ИИ Консоль кода 1С
Лайт
Для ознакомления с возможностями
- Полный набор инструментов без урезаний
- Без ввода карты
Старт
Для индивидуального использования
- До 5 конфигураций
- Встроенный агент запросов 1С
-
≈ 100 задач Подробнее про лимиты
- Техническая поддержка
Продвинутый
Популярный выборДля интенсивного использования или команд
- До 15 конфигураций
- Встроенный агент запросов 1С
-
≈ 300 задач Подробнее про лимиты
-
Свои подписки Codex, Claude и любые OpenAI-совместимые
-
Внешние обработки без Конфигуратора
- Приоритетная техническая поддержка