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