К статье
Практический материал

Разработка и Конфигурация · 12 мин

Как перезаписать регистр в 1С: пошаговая инструкция

Как перезаписать регистр в 1С: способы для регистров сведений, накопления и расчета, работа с наборами записей, типичные ошибки и проверка результата.

Перезапись регистра в 1С — типовая задача при исправлении ошибок учета, переносе данных, изменении периодических сведений или корректировке движений документа. В зависимости от вида регистра (сведений, накопления, бухгалтерии, расчета) и режима подчинения (независимый или подчиненный регистратору) применяются разные механизмы: ручное редактирование, документ-корректировка, обработка с набором записей или запрос с последующей записью.

Главный риск при перезаписи — потеря существующих данных: метод «Записать» у набора записей по умолчанию замещает все строки, попадающие под установленный отбор. Поэтому перед любыми изменениями нужно сделать резервную копию базы и четко понимать, какой отбор действует в наборе записей. Ниже разобраны все основные сценарии с примерами кода на встроенном языке 1С.

Как устроены регистры и почему это важно перед перезаписью

В 1С существует четыре вида регистров: сведений, накопления, бухгалтерии и расчета. Регистры сведений хранят информацию в разрезе измерений (например, цены номенклатуры, курсы валют), регистры накопления — количественные и суммовые остатки и обороты, регистры бухгалтерии — проводки по плану счетов, регистры расчета — начисления и удержания с периодом действия.

Ключевое различие для перезаписи — режим подчинения. Регистр, подчиненный регистратору, изменяется только движениями документов: напрямую добавить строку в него нельзя, записи принадлежат конкретному документу. Независимый регистр (так бывает только у регистров сведений) можно редактировать напрямую — вручную или программно, без какого-либо документа.

Способ 1. Ручная перезапись через форму регистра

Самый простой вариант подходит для независимых регистров сведений. Откройте регистр через главное меню: «Все функции» → «Регистры сведений» → нужный регистр. Если пункт «Все функции» не отображается, включите его: «Сервис» → «Параметры» → флажок «Отображать команду "Все функции"».

В форме списка можно отредактировать существующую строку двойным щелчком, добавить новую кнопкой «Создать» или удалить лишнюю. Для периодических регистров сведений обратите внимание на колонку «Период» — две записи с одинаковыми измерениями, но разными датами, являются разными строками, и перезаписать «прошлое» значение нужно именно на его дату.

Ручной способ оправдан при единичных исправлениях. Если требуется изменить сотни или тысячи строк, ручное редактирование неэффективно и чревато пропусками — переходите к программной обработке.

Способ 2. Перезапись движений через документ-регистратор

Для регистров, подчиненных регистратору, корректный путь — перепроведение документа. Откройте документ, при необходимости исправьте данные в нем и нажмите «Провести». При проведении платформа сначала удаляет старые движения документа, затем записывает новые — фактически выполняется перезапись набора записей этого регистратора.

Если нужно перезаписать движения без изменения самого документа, используйте обработку «Проведение документов» (в типовых конфигурациях: раздел «Администрирование» → «Обслуживание» → «Корректировка данных», либо через «Все функции» → «Обработки»). Она массово перепроводит документы за выбранный период, что восстанавливает движения после сбоев или отключенных итогов.

Для исправления прошлых периодов в типовых конфигурациях предусмотрены специальные документы-корректировки: «Операция» (ручные проводки), «Корректировка регистров», «Перенос данных». Они создают собственные движения, не трогая исходные документы, — это предпочтительный способ для закрытых периодов.

Перезапись движений документа
  1. 1
    Сделайте резервную копию базы
  2. 2
    Найдите документ-регистратор, чьи движения нужно исправить
  3. 3
    Исправьте данные в документе или оставьте как есть
  4. 4
    Нажмите «Провести» — старые движения будут замещены новыми
  5. 5
    Проверьте результат через отчет по регистру или кнопку «Движения документа»

Способ 3. Программная перезапись набором записей

Универсальный механизм для разработчика — объект «НаборЗаписей». Типовой алгоритм: создать набор, установить отбор, прочитать текущие данные, изменить их и записать обратно. Пример для независимого регистра сведений:

Набор = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();

Набор.Отбор.Номенклатура.Установить(ВыбраннаяНоменклатура);

Набор.Прочитать();

Для Каждого Запись Из Набор Цикл

Запись.Цена = Запись.Цена * 1.1;

КонецЦикла;

Набор.Записать(); // замещает записи в рамках отбора

Чтобы полностью перезаписать данные (не читая старые), набор можно не читать, а сразу заполнить: добавить строки методом Добавить() и вызвать Записать(). Старые записи, попадающие под отбор, будут удалены, новые — записаны. Если нужно добавить строки, не трогая существующие, используйте Набор.Записать(Ложь) — параметр Ложь отключает замещение.

Для регистра, подчиненного регистратору, отбор устанавливается по регистратору, а записывать набор нужно с флагом замещения в транзакции с документом — либо поручить это обработке проведения самого документа:

Набор = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();

Набор.Отбор.Регистратор.Установить(СсылкаНаДокумент);

НоваяСтрока = Набор.Добавить();

НоваяСтрока.ВидДвижения = ВидДвиженияНакопления.Приход;

НоваяСтрока.Период = СсылкаНаДокумент.Дата;

НоваяСтрока.Номенклатура = Товар;

НоваяСтрока.Количество = 10;

Набор.Записать();

bsl
Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей();
Набор.Отбор.Валюта.Установить(ВалютаСсылка);
Набор.Прочитать();
Для Каждого Запись Из Набор Цикл
    Запись.Курс = НовыйКурс;
КонецЦикла;
Набор.Записать(Истина); // Истина — заместить старые записи

Способ 4. Менеджер записи для одиночной строки

Если нужно перезаписать одну конкретную строку независимого регистра сведений, удобнее менеджер записи — он работает без чтения всего набора. Объект создается методом СоздатьМенеджерЗаписи(), заполняется значениями ключа (измерения и период для периодического регистра) и записывается:

МенеджерЗаписи = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Период = ТекущаяДатаСеанса();

МенеджерЗаписи.Валюта = ВалютаСсылка;

МенеджерЗаписи.Курс = 92.5;

МенеджерЗаписи.Записать();

Запись менеджера с уже существующим ключом замещает старую строку целиком — это и есть перезапись одной записи. Удалить строку можно тем же объектом: заполнить ключ и вызвать Удалить(). Ограничение: менеджер записи недоступен для регистров, подчиненных регистратору.

Выбор способа под разные ситуации

Правильный инструмент зависит от вида регистра, объема данных и того, кто выполняет работу — пользователь или разработчик. Ориентируйтесь на сопоставление ниже.

Сравнение способов перезаписи

Ручное редактирование

Подходит для единичных исправлений в независимых регистрах сведений. Не работает с регистрами, подчиненными регистратору.

Перепроведение документа

Стандартный путь для подчиненных регистров. Требует, чтобы обработка проведения формировала корректные движения; при массовом объеме используется групповое перепроведение.

Документ «Корректировка регистров» / «Операция»

Для исправления закрытых периодов без изменения исходных документов. Требует понимания структуры регистра.

Набор записей (код)

Гибкий массовый способ для разработчика. Требует контроля отбора и резервной копии — ошибка в отборе затирает лишние данные.

Менеджер записи

Точечная перезапись одной строки независимого регистра сведений. Не подходит для подчиненных регистров и массовых операций.

Маршрут решения

Как выбрать действие

Нужно исправить одну-две строки в независимом регистре сведенийОтредактируйте вручную через форму списка регистра
Неверны движения конкретного документаПерепроведите документ или используйте его корректировку
Период закрыт и документы менять нельзяСоздайте документ «Корректировка регистров» или «Операция»
Требуется массовое изменение тысяч строкНапишите обработку с набором записей и отбором, предварительно сделав копию базы

Проверка результата и типичные ошибки

После перезаписи убедитесь, что данные изменились именно так, как задумано. Для программной записи выведите количество строк набора до и после, сформируйте отчет по регистру или выполните контрольный запрос. Для регистров накопления сверьте остатки до и после операции — они должны измениться ровно на величину вашей корректировки.

Контрольные точки

Как проверить результат

Количество записей в отборе до и после
Норма

Совпадает с ожидаемым числом измененных строк

Тревожный признак

Изменилось больше строк, чем планировалось — отбор был шире нужного

Остатки по регистру накопления
Норма

Остатки изменились ровно на сумму корректировки

Тревожный признак

Остатки «уехали» непредсказуемо или появились отрицательные значения

Движения документа после перепроведения
Норма

Набор движений соответствует данным документа

Тревожный признак

Движения пустые или дублируются

Значение по ключу в регистре сведений
Норма

На нужную дату и измерения возвращается новое значение

Тревожный признак

Возвращается старое значение — запись сделана на другой период

Типичные ошибки
01
Вызов Записать() без установленного отбора — очищается весь регистр, данные теряются безвозвратно
02
Забытый Прочитать() перед изменением — старые записи набора замещаются пустым набором
03
Запись с Замещение = Ложь при изменении существующих строк — получаются дубли вместо перезаписи
04
Перезапись подчиненного регистра напрямую без регистратора — набор не запишется или нарушится связь с документом
05
Попытка изменить периодический регистр без указания периода — запись попадает не на ту дату
06
Работа в рабочей базе без резервной копии — любая ошибка отбора становится необратимой

Отдельного внимания заслуживает параметр Замещение. По умолчанию он равен Истина: запись набора полностью замещает все строки регистра, попадающие под отбор. Если вы прочитали набор, изменили его и записали — это корректная перезапись. Если же вы создали пустой набор и записали его с замещением — старые данные удалены. Контролируйте этот параметр осознанно.

Ограничения и когда привлекать специалиста

Самостоятельная перезапись безопасна для независимых регистров сведений в тестовой копии базы и для перепроведения документов штатными средствами. К специалисту по 1С стоит обратиться, если требуется править регистры бухгалтерии или расчета в закрытых периодах, если движения формируются сложной обработкой проведения типовой конфигурации, а также при рассогласовании итогов, причина которого неясна.

Прямая программная правка подчиненных регистров в обход документов нарушает логику учета: при следующем перепроведении документов ваши изменения будут перезатерты. Поэтому устойчивое решение — всегда исправлять источник движений (документ или его обработку проведения), а не сами строки регистра.

Итог

Что важно запомнить

Перезапись регистра выполняется вручную (независимые регистры сведений), перепроведением документа (подчиненные регистры) или набором записей в коде. Контролируйте отбор и параметр Замещение, работайте на копии базы и проверяйте результат отчетом или запросом.

Частые вопросы

Как очистить регистр сведений полностью?

Создайте набор записей без отбора, не читая и не заполняя его, и вызовите Записать() — пустой набор с замещением удалит все строки. Перед этим обязательно сделайте резервную копию: операция необратима.

Почему после Записать(Ложь) появились дубли строк?

Параметр Ложь отключает замещение: новые строки добавляются к существующим. Если запись с таким ключом уже есть, а режим записи позволяет дубли (например, разный регистратор или период), строки задваиваются. Для перезаписи существующих данных используйте замещение или менеджер записи с тем же ключом.

Можно ли перезаписать регистр накопления без документа?

Технически набор записей можно записать с отбором по существующему регистратору, но создать движения «из ниоткуда» без документа нельзя — у подчиненного регистра всегда должен быть регистратор. Для ручных корректировок в типовых конфигурациях используйте документ «Корректировка регистров».

Чем перезапись отличается от перепроведения документов?

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

Как перезаписать периодический регистр сведений на конкретную дату?

Установите в отборе набора или в менеджере записи нужный период вместе со значениями измерений — ключ записи периодического регистра включает дату. Запись с тем же периодом и измерениями заместит старое значение, не затрагивая другие даты.

Что делать, если после перезаписи отчеты показывают неверные итоги?

Проверьте, не нарушены ли итоги регистра накопления: выполните пересчет итогов через «Тестирование и исправление» или перепроведение документов за период. Если ошиблись с отбором и задели лишние данные — восстановите базу из резервной копии и повторите операцию с корректным отбором.