Top.Mail.Ru
Меню
Каталог Программы 1С Опыт и отзывы Услуги Компания Интересное Контакты

Как в существующей записи регистра сведений 1С внести изменения в измерения

Основатель и генеральный директор компании MoscowSoft, Сорокин Сергей
Сорокин Сергей, Генеральный директор MoscowSoft  23.03.2026 Актуальность проверена: 23.03.2026   5 мин.
Подобрать перенос данных 1С

Специализируемся на переносах данных 1С с 2015г.

Подобрать перенос данных 1С >>

Интеграция 1С с маркетплейсами

Специализируемся на интеграциях 1С с маркетплейсами с 2021г.

Изучить продукты >>

Содержание

Зачем вообще трогать измерения

Иногда запись в регистре сведений завели «как‑нибудь, лишь бы работало», а потом бизнес‑логика меняется, и нужно поправить именно измерения, а не просто реквизиты. Кажется мелочью. Но от комбинации измерений зависит уникальность записи и то, как потом отрабатывают запросы и отчёты. Если просто создать новую запись и забыть про старую — можно получить дубль, а можно и сломать аналитику.

Менеджер записи: точечный доступ к строке

Для независимых регистров сведений в конфигураторе у нас есть удобный инструмент — менеджер записи регистра сведений. Это объект, у которого свойства — те же измерения, ресурсы и реквизиты, что и у строки регистра. Через него можно считать существующую запись, изменить и записать обратно, в том числе с новыми значениями измерений. Работает он именно с одной конкретной записью, а отбор и набор записей нужны только чтобы эту строку сначала найти.

Разберём пример кода

Возьмём ваш фрагмент с ПланОтправкиЭлектронныхПисем. Здесь как раз хороший шаблон изменения существующей записи по измерениям:

ТекЗапись = РегистрыСведений.ПланОтправкиЭлектронныхПисем.СоздатьМенеджерЗаписи();
ТекЗапись.Период                = Выборка.Период;
ТекЗапись.Лид                   = Выборка.Лид;
ТекЗапись.Шаблон                = Выборка.Шаблон;
ТекЗапись.Контрагент            = Выборка.Контрагент;
ТекЗапись.Реализация            = Выборка.Реализация;
ТекЗапись.АдресЭлектроннойПочты = Выборка.АдресЭлектроннойПочты;
ТекЗапись.Прочитать();

ТекЗапись.Лид = Лид;
ТекЗапись.Контрагент = Лид.Контрагент;
ТекЗапись.АдресЭлектроннойПочты = Лид.АдресаЭлектроннойПочты.Получить(0).АдресЭлектроннойПочты;
ТекЗапись.Комментарий = СтрШаблон("%1; %2: заменили дубль лида с кодом %3 на %4", 
			ТекЗапись.Комментарий, ТекущаяДатаСеанса(),
			СтрЗаменить(ЛидДубль.Код, Символы.НПП, ""),
			СтрЗаменить(Лид.Код, Символы.НПП, ""));

ТекЗапись.Записать();

Сначала по ключевым полям (обычно это все измерения + период) мы заполняем свойства Период, Лид, Шаблон и т.д., а потом вызываем Прочитать(). Если такая комбинация найдена — объект менеджера «привязывается» к конкретной строке регистра, и дальше мы уже меняем нужные поля и вызываем Записать(). Просто и честно.

Нюанс: измерения как ключевые поля

Главный вопрос: можно ли в существующей записи тупо изменить измерения и всё будет красиво? Платформа разрешает менять значения ключевых полей при модификации через менеджер записи, но делает это аккуратно: фактически старая строка удаляется, а новая создаётся с обновлённой комбинацией ключа. То есть логически это одна запись эволюционировала, но технически — уже другая строка. Для запросов это не страшно, зато могут всплыть:

  1. нарушения уникальности (если вы попали в уже существующую комбинацию измерений);
  2. ломка внешних ссылок, если кто‑то где‑то хранит ссылку на запись регистра (да, так тоже делают, хоть и не надо бы).

Вот почему многие разработчики предпочитают явно создавать новую запись, а старую помечать как «закрытую» реквизитом‑флагом. Да, чуть больше кода, зато прозрачнее.

Как правильно менять измерения через менеджер записи

Алгоритм для практики обычно такой, особенно в независимом регистре:

  1. Находим запись через запрос (по старым измерениям и, если надо, реквизитам).
  2. Создаём менеджер записи, выставляем в нём старые значения измерений.
  3. Вызываем Прочитать() и проверяем, что запись реально считалась.
  4. Меняем измерения на новые значения, аккуратно проверяем, что такой комбинации ещё нет.
  5. Вызываем Записать(), ловим возможную ошибку уникальности.

По сути, ваш код уже делает первые четыре шага, только вы сейчас больше правите реквизиты (Контрагент, АдресЭлектроннойПочты) и комментарий, а не сами измерения. Но паттерн тот же, тот же самый.

Альтернатива: набор записей и массовые правки

Если менять нужно не одну строку, а пачку, удобнее сначала вычитать набор записей с нужным отбором, а потом по каждой строке использовать менеджер записи. Типичный шаблон:

Набор = РегистрыСведений.ПланОтправкиЭлектронныхПисем.СоздатьНаборЗаписей();
Набор.Отбор.Лид.Установить(СтарыйЛид);
Набор.Прочитать();

Менеджер = РегистрыСведений.ПланОтправкиЭлектронныхПисем.СоздатьМенеджерЗаписи();

Для Каждого СтрокаИзНабора Из Набор Цикл
	ЗаполнитьЗначенияСвойств(Менеджер, СтрокаИзНабора);
	Менеджер.Прочитать();
	Менеджер.Лид = НовыйЛид;
	Менеджер.Контрагент = НовыйЛид.Контрагент;
	Менеджер.Записать();
КонецЦикла;

Набор здесь используется как «список кандидатов», а реальное изменение делаем уже через менеджер записи, чтобы не ругался отбор по измерениям. Такое разделение часто спасает нервы в боевых базах.

Немного житейщины из практики

Чуть в сторону. Многие начинающие ‑ники пытаются сделать массовые изменения измерений прямо в наборе записей, без захода в менеджер. Оно вроде бы и работает, пока не встретишь отбор или периодический регистр, где период входит в ключ. Потом в один прекрасный день набор перестаёт записываться, пишет что‑то невнятное про несоответствие отборам, и на поиски решения улетает вечер. Я обычно предлагаю простой тест: если меняете ключевые поля — почти всегда разумнее перейти на менеджер записи и работать с каждой строкой отдельно. Чуть длиннее код, зато куда предсказуемее поведение.

Итог: изменить можно, но стоит ли

Формально изменить измерения в существующей записи можно: менеджер записи это поддерживает, платформа с этим живёт и в документации это подтверждено. Важно лишь помнить, что вы фактически перекраиваете уникальный ключ строки и можете попасть в дубликаты или логические несостыковки. Поэтому в прикладном коде я всегда задаю простой вопрос: вы действительно хотите переписать прошлое, или лучше аккуратно создать новую запись и корректно закрыть старую?

А вы как сами чаще делаете в своих задачах: честно переносите измерения у старой записи или уже пришли к схеме «новая запись, старая — в архив»?

MoscowSoft логотип

Подпишитесь на телеграм-канал MoscowSoft!
QR-код (ссылка приглашение) в канал MoscowSoft

https://t.me/MoscowSoft

Публикуем:
- инструкции и советы по разработке на 1С;
- рекомендации по интеграции 1С;
- бесплатно делимся своими обработками;
- публикуем секретные спецпредложения только для подписчиков.

Возврат к списку