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