Справочники и Данные · 11 мин
Как перезаписать справочник в 1С
Как перезаписать справочник в 1С: групповая обработка, обработка табличных частей, загрузка из Excel и программный способ. Пошаговые инструкции и типичные ошибки.
Перезаписать справочник в 1С требуется в нескольких ситуациях: после изменения прав доступа, при массовом обновлении реквизитов, для исправления ошибок обмена данными или для заполнения новых полей у всех элементов. В зависимости от задачи подходят разные инструменты — от встроенной групповой обработки до программного кода.
Под перезаписью понимают повторное сохранение элементов справочника в базе данных. При этом срабатывают все обработчики событий «ПриЗаписи» и «ПередЗаписью», обновляются индексы, регистры и связанные данные. Именно поэтому перезапись часто решает проблемы с «зависшими» данными после обменов и обновлений конфигурации.
Выбор способа зависит от объёма данных и цели. Для нескольких десятков элементов достаточно ручной перезаписи или группового изменения реквизитов. Для тысяч позиций разумнее использовать обработку «Групповая перезапись справочников» или небольшой программный код через консоль.
Когда нужна перезапись справочника
Типовой сценарий — после обновления конфигурации появился новый реквизит, который должен заполняться автоматически при записи элемента. Пока элемент не перезаписан, реквизит остаётся пустым, и отчёты показывают неполные данные.
Вторая частая причина — некорректный обмен данными между базами. Если при синхронизации часть элементов записалась с ошибками или не сработали подписки на события, перезапись принудительно запускает все обработчики и приводит данные в актуальное состояние.
Также перезапись применяют после изменения прав доступа на уровне записей (RLS), при исправлении дублей через поиск и замену значений и при заполнении служебных регистров сведений, связанных с элементами справочника.
Проверьте, заполняется ли реквизит при ручной записи одного элемента
Сравните количество элементов в базе-источнике и приёмнике
Используйте обработку или программный код
Подготовка перед перезаписью
Любая массовая операция с данными начинается с резервной копии. Для файловой базы достаточно скопировать файл 1Cv8.1CD при остановленной работе пользователей или выполнить выгрузку через конфигуратор («Администрирование» — «Выгрузить информационную базу»). Для клиент-серверной базы используйте средства СУБД или выгрузку в dt.
Определите объём работ: откройте список справочника и оцените количество элементов. Если их несколько тысяч, планируйте операцию на нерабочее время — групповая перезапись блокирует таблицы и замедляет работу пользователей.
Проверьте права: для групповых операций нужны права на изменение справочника и, как правило, доступ к разделу «Администрирование». Некоторые обработки требуют включённого режима «Полноправный пользователь» или роли администратора.
Способ 1: групповое изменение реквизитов
В типовых конфигурациях на БСП (1С:Бухгалтерия, Управление торговлей, ERP) есть встроенный инструмент «Групповое изменение реквизитов». Он находится в разделе «Администрирование» — «Обслуживание» — «Корректировка данных». Если раздел не виден, проверьте права или включите его через функциональность.
Порядок работы: выберите вид справочника, при необходимости задайте отбор (например, только непомеченные на удаление элементы или конкретная группа). Затем укажите реквизит и новое значение либо оставьте значения без изменений, если цель — просто перезаписать элементы для срабатывания обработчиков.
После запуска обработка последовательно записывает каждый элемент и показывает протокол: сколько объектов обработано, сколько пропущено с ошибками. Ошибки обычно связаны с контролем заполнения — новый обязательный реквизит не заполнен, и запись отклоняется. В протоколе видно, какие именно элементы не записались.
- 1Сделайте резервную копию базы
- 2Откройте «Администрирование» — «Обслуживание» — «Групповое изменение реквизитов»
- 3Выберите справочник и задайте отбор элементов
- 4Укажите изменяемые реквизиты или оставьте без изменений для простой перезаписи
- 5Запустите обработку и дождитесь завершения
- 6Изучите протокол: проверьте количество обработанных и список ошибок
Способ 2: обработка «Групповая перезапись справочников»
Для конфигураций без БСП или когда нужна именно перезапись без изменения данных используют внешние обработки типа «Групповая перезапись объектов». Они открываются через «Файл» — «Открыть» и работают в режиме предприятия.
Такая обработка выбирает все элементы указанного справочника и вызывает для каждого метод Записать(). Обычно в ней можно задать отбор, режим записи (с обменом данными или без) и ограничение по количеству элементов для тестового запуска.
Удобная возможность подобных обработок — флаг «Загрузка = Истина» при записи. В этом режиме не срабатывают большинство проверок и подписок на события, что ускоряет операцию. Но использовать его стоит только тогда, когда цель — техническая перезапись без бизнес-логики, иначе нужные обработчики не выполнятся.
Сравнение вариантов
Встроено в типовые конфигурации, безопасно, есть протокол. Не подходит, если нужен тонкий контроль режима записи
Гибкие настройки, режим загрузки. Требует файла обработки и осторожности с флагами
Полный контроль, можно обработать исключения. Требует навыков программирования и прав разработчика
Способ 3: программная перезапись через консоль кода
Разработчику или продвинутому администратору удобнее выполнить перезапись кодом — через консоль кода (например, из подсистемы «Инструменты разработчика») или внешнюю обработку. Код выбирает элементы и записывает их в цикле.
Типовой фрагмент выглядит так: запросом выбираются ссылки на элементы справочника, затем для каждой ссылки получается объект методом ПолучитьОбъект() и вызывается Записать(). Обязательно оберните запись в попытку-исключение, чтобы одна проблемная запись не прервала весь цикл, и собирайте ошибки в список для последующего разбора.
Запрос = Новый Запрос("ВЫБРАТЬ Ссылка ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Попытка
Объект = Выборка.Ссылка.ПолучитьОбъект();
Объект.Записать();
Исключение
Сообщить("Ошибка записи: " + Выборка.Ссылка + " — " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;Для очень больших справочников добавьте обработку порциями: выбирайте, например, по 1000 элементов с отбором по условию «уже обработанные пропускаем», чтобы при сбое не начинать сначала. Признак обработки можно хранить во временном списке значений или отмечать служебным реквизитом.
Способ 4: перезапись через загрузку данных из табличного документа
Иногда перезапись совмещают с актуализацией данных из внешнего источника — прайса поставщика или выгрузки из другой системы. В типовых конфигурациях для этого есть обработка «Загрузка данных из файла» (обычно в карточке списка справочника — «Ещё» — «Загрузить данные из файла»).
Механика: выгружаете текущие данные в Excel, корректируете нужные колонки, загружаете обратно с сопоставлением по ключевому полю (код, артикул, наименование). Система находит существующие элементы и перезаписывает их с новыми значениями.
Этот способ удобен, когда перезапись — не самоцель, а следствие массового обновления реквизитов: цен, единиц измерения, ставок НДС. Ограничение — обработка работает не со всеми справочниками и не переносит табличные части сложной структуры.
Проверка результата и типичные ошибки
После завершения операции убедитесь, что цель достигнута. Откройте несколько элементов и проверьте, что нужные реквизиты заполнены, обработчики отработали (например, обновились связанные регистры), а отчёты показывают корректные данные.
Сопоставьте количество элементов до и после: оно не должно измениться, если вы не создавали новые. Убедитесь, что не появились нежелательные регистрации в планах обмена — если база участвует в синхронизации, массовая перезапись отправит все элементы в узлы обмена, что может вызвать большой объём передаваемых данных.
Как проверить результат
Все элементы обработаны, ошибок нет или они объяснимы
Массовые ошибки записи — проверьте обязательные реквизиты и права
Совпадает с количеством до операции
Появились дубли или пропали элементы
Регистрация изменений ожидаема и контролируется
Все элементы зарегистрированы к выгрузке — готовьтесь к большому пакету обмена
Ограничения и когда привлекать специалиста
Самостоятельная перезапись безопасна, если речь идёт о типовой конфигурации, штатных обработках и понятной цели. Риски возрастают в доработанных конфигурациях, где на событие «ПриЗаписи» могут быть навешаны неочевидные механизмы: отправка уведомлений, создание документов, интеграционные вызовы.
Привлеките программиста 1С, если справочник содержит десятки тысяч элементов, если при записи срабатывают интеграции с внешними системами или если после обновления конфигурации требуется выполнить отложенные обработчики обновления — они имеют собственный механизм запуска через «Результаты обновления программы».
Что важно запомнить
Перед перезаписью сделайте копию базы и проверьте операцию на малом объёме. В типовых конфигурациях используйте «Групповое изменение реквизитов», для тонкого контроля — программный код. После операции сверьте количество элементов и изучите протокол ошибок.
Частые вопросы
Чем перезапись отличается от перепроведения?
Перезапись применяется к справочникам и просто повторно сохраняет элемент. Перепроведение относится к документам и заново формирует движения по регистрам. Это разные операции с разными последствиями.
Изменится ли дата модификации элементов при перезаписи?
Да, если в конфигурации ведётся история данных или есть реквизиты, обновляемые при записи, — они получат новые значения. Сам факт записи также фиксируется в журнале регистрации, если настроено протоколирование.
Можно ли перезаписать только помеченные на удаление элементы?
Да. В групповом изменении реквизитов задайте отбор «Пометка удаления = Истина», а в программном коде добавьте соответствующее условие в запрос. Учтите, что при записи помеченного элемента могут срабатывать те же обработчики.
Почему при групповой перезаписи часть элементов не записалась?
Чаще всего причина — контроль заполнения: в конфигурации появился обязательный реквизит, который пуст у старых элементов. Вторая причина — нехватка прав на отдельные объекты (например, RLS). Список таких элементов смотрите в протоколе обработки.
Безопасно ли перезаписывать справочник в базе с настроенным обменом?
Технически да, но каждый перезаписанный элемент будет зарегистрирован к отправке в узлы обмена. При массовой операции это создаст большой пакет синхронизации. Если перезапись служебная и изменений фактически нет, обсудите с администратором возможность снятия регистрации после операции.
Как перезаписать справочник, если нет прав администратора?
Без прав на групповые обработки доступен только ручной вариант: открыть каждый элемент и записать его кнопкой «Записать и закрыть». Для массовой операции запросите у администратора временные права или попросите выполнить обработку под его учётной записью.