Замена данных в 1С 8.3: дубли справочников, реквизиты документов, константы и обработки
Содержание
Заменить объект в 1С 8.3 проще всего штатными обработками. Дубль справочника меняют на правильный элемент через Администрирование → Обслуживание → Корректировка данных → Поиск и удаление дублей. Одно значение во многих документах меняют там же, обработкой «Групповое изменение реквизитов». Пути даны для типовых конфигураций на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11.
Если штатных средств не хватает, остаются три пути. Константу правят в форме настроек или через «Функции для технического специалиста». Ссылки по всей базе заменяет код с методом НайтиПоСсылкам(). Внешнюю обработку
меняют загрузкой нового файла в её карточку.
Что именно вы заменяете: выбор инструмента
Под словами «заменить в 1С» прячутся разные задачи. Сначала определите свою — от этого зависит и инструмент, и риск.
| Задача | Инструмент | Риск |
|---|---|---|
| Два одинаковых контрагента или номенклатуры, нужен один | «Поиск и удаление дублей» | Средний: меняются ссылки во всех документах |
| Сменить склад, статью затрат, ответственного в сотне документов | «Групповое изменение реквизитов» | Средний: нужно перепровести документы |
| Сменить значение общей настройки | Форма настроек или список констант | Низкий, если менять через форму |
| Заменить ссылку там, куда штатная обработка не достаёт | Код на НайтиПоСсылкам() | Высокий: нужна копия базы и тест |
| Подложить новую версию внешней обработки или отчёта | Карточка дополнительной обработки | Низкий |
Перед любой массовой заменой выгрузите копию базы
: Конфигуратор → Администрирование → Выгрузить информационную базу. Выгрузка .dt требует монопольного доступа, поэтому делайте её, когда пользователи вышли из программы. В файловом варианте достаточно скопировать каталог базы с файлом 1Cv8.1CD, тоже при закрытой программе.
Для замены нужны права администратора. Обычный пользователь не увидит ни раздела корректировки данных, ни списка констант.
Как заменить элемент справочника на другой
Типичный случай: менеджер завёл контрагента «Ромашка ООО», хотя в базе уже был «ООО Ромашка». Документы разнесены по обоим. Удалить лишний нельзя — на него ссылаются документы. Сначала все ссылки переводят на правильный элемент, потом лишний удаляют.
Через «Поиск и удаление дублей»
- Откройте
Администрирование → Обслуживание → Корректировка данных → Поиск и удаление дублей. - В поле «Искать в» выберите справочник, например
Контрагенты. - Задайте правило сравнения: по наименованию, по ИНН или по нескольким полям сразу. Для контрагентов надёжнее ИНН и КПП, для номенклатуры — артикул.
- Нажмите
Найти дубли. Программа покажет группы похожих элементов. - В каждой группе отметьте элемент, который останется. Остальные будут заменены на него.
- Запустите удаление дублей. Обработка переберёт документы, регистры и другие справочники, заменит ссылки и удалит лишние элементы или пометит их на удаление.
Если в группу попал элемент, который на самом деле не дубль, снимите с него флажок. Например, два «ИП Иванов» с разными ИНН — это разные люди.
Обработка показывает, сколько мест ссылается на каждый элемент. Оставляйте тот, у которого ссылок больше. Тогда меньше документов перезапишется, и замена пройдёт быстрее.
Как проверить, где используется объект
Перед заменой полезно посмотреть, что именно изменится. Для этого есть стандартная функция Поиск ссылок на объект:
- Откройте главное меню (кнопка с тремя полосками слева вверху) →
Функции для технического специалиста. - В ветке
СтандартныевыберитеПоиск ссылок на объект. - Укажите элемент — получите список документов, справочников и записей регистров, где он встречается.
Если команды «Функции для технического специалиста» нет, включите её: главное меню → Сервис → Параметры → флажок «Отображать команду «Функции для технического специалиста»». В платформах до 8.3.14 этот же пункт называется «Все функции».
Массовая замена значения в документах
Задача другая: элемент не дубль, но в документах указан не тот. Например, за квартал все реализации оформили со склада «Основной», а товар шёл со склада «Филиал». Здесь нужна групповая обработка.
Групповое изменение реквизитов
- Откройте
Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов. - В поле «Изменять» выберите вид объектов, например
Реализация (акты, накладные, УПД). - Задайте отбор: период, организация, текущее значение склада. Без отбора обработка затронет все документы этого вида.
- В таблице реквизитов найдите нужный (
Склад) и укажите новое значение. - Если реквизит в табличной части, переключитесь на её вкладку. Там свои реквизиты строк.
- Нажмите
Изменить реквизиты. Программа отчитается, сколько объектов обработано и где были ошибки.
Ту же обработку можно запустить прямо из списка. Выделите документы в журнале, откройте меню Ещё и выберите команду «Изменить выделенные». Откроется та же форма, но уже с отобранными документами.
Обработка меняет реквизиты, а движения документов остаются старыми. Остатки по складам, обороты и проводки обновятся только после перепроведения. В Бухгалтерии 3.0 для этого есть обработка «Групповое перепроведение документов» в разделе Операции.
Что делать с проведёнными документами
| Способ записи | Что будет с движениями | Когда подходит |
|---|---|---|
| Запись с перепроведением | Движения сразу пересчитаются | Немного документов, период открыт |
| Запись без проведения, затем групповое перепроведение | Движения пересчитаются после второго шага | Сотни документов, нужен контроль |
| Только запись реквизита | Движения останутся старыми | Реквизит не влияет на учёт (комментарий, ответственный) |
Ответственный, комментарий и подобные поля на движения не влияют. Их можно менять без перепроведения.
Замена констант и общих настроек
Константа в 1С хранит одно значение на всю базу: основная валюта, флажок «Вести учёт по складам», дата начала ведения учёта по какому-либо механизму. Меняют её двумя путями.
Через формы настроек. Почти все константы выведены в разделы Администрирование и Главное → Функциональность. Это правильный путь: форма проверяет, можно ли переключить флажок, и меняет связанные настройки. Например, отключить учёт по складам не получится, если остатки уже разнесены по складам.
Через список констант. Главное меню → Функции для технического специалиста → ветка Константы. Здесь видны все константы конфигурации, их можно открыть и поменять значение напрямую.
Список констант обходит проверки формы. Изменение напрямую может оставить базу в противоречивом состоянии: функциональность выключена, а данные по ней есть. Пользуйтесь этим путём, только если знаете, что константа ни от чего не зависит, или если так советует разработчик вашей конфигурации.
Учётная политика и сведения об организации — не константы. Это справочники и регистры сведений. Их меняют в карточке организации и в форме учётной политики, обычно новой записью с датой начала действия.
Программная замена: консоль запросов и код
Штатная обработка не всегда подходит. Нужно заменить ссылку только в части документов. Или конфигурация нетиповая и обработки «Поиск и удаление дублей» в ней нет. Тогда работают с запросом и кодом.
Шаг 1. Найти объекты консолью запросов
Консоль запросов только читает данные, менять она не умеет. Зато ей удобно собрать список того, что будете править. Пример для Бухгалтерии 3.0: все реализации по одному контрагенту.
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка,
РеализацияТоваровУслуг.Дата,
РеализацияТоваровУслуг.Проведен
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Контрагент = &Контрагент
И РеализацияТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Сохраните результат. После замены выполните тот же запрос с новым значением и сравните количество строк.
Шаг 2. Заменить ссылки кодом
Код ниже ищет все ссылки на старый элемент и меняет их на новый в реквизитах шапки и табличных частей документов и справочников. Запускают его на сервере из внешней обработки или консоли кода под пользователем с полными правами.
&НаСервере
Процедура ЗаменитьСсылкиНаСервере(Старая, Новая)
СписокСсылок = Новый Массив;
СписокСсылок.Добавить(Старая);
Найденные = НайтиПоСсылкам(СписокСсылок);
Для Каждого Строка Из Найденные Цикл
Если Не Метаданные.Документы.Содержит(Строка.Метаданные)
И Не Метаданные.Справочники.Содержит(Строка.Метаданные) Тогда
Продолжить; // регистры обновятся при перепроведении
КонецЕсли;
Объект = Строка.Данные.ПолучитьОбъект();
Изменен = Ложь;
Для Каждого Реквизит Из Строка.Метаданные.Реквизиты Цикл
Если Объект[Реквизит.Имя] = Старая Тогда
Объект[Реквизит.Имя] = Новая;
Изменен = Истина;
КонецЕсли;
КонецЦикла;
Для Каждого ТабЧасть Из Строка.Метаданные.ТабличныеЧасти Цикл
Для Каждого СтрокаТЧ Из Объект[ТабЧасть.Имя] Цикл
Для Каждого Реквизит Из ТабЧасть.Реквизиты Цикл
Если СтрокаТЧ[Реквизит.Имя] = Старая Тогда
СтрокаТЧ[Реквизит.Имя] = Новая;
Изменен = Истина;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Если Изменен Тогда
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Что важно знать про этот код:
- 🔹
ОбменДанными.Загрузка = Истинаотключает проверки и обработчики при записи. Документ запишется, но движения останутся старыми — после замены перепроведите документы за период. - 🔹 Стандартные реквизиты (
Владелец,Родитель) в коллекциюРеквизитыне входят. Если меняете группу или владельца, добавьте их проверку отдельно. - 🔹 Регистры сведений с измерением-ссылкой код пропускает. Записи в них придётся переписать отдельно или заменить штатной обработкой.
- 🔹 В типовых конфигурациях на БСП есть готовая функция
ОбщегоНазначения.ЗаменитьСсылки(). Она учитывает регистры и обмены, и для типовой базы надёжнее самописного кода.
Сначала прогоните код на копии базы. Выполните проверочный запрос из шага 1 и сравните остатки и обороты до и после.
Как заменить внешнюю обработку или отчёт
Разработчик прислал исправленный файл .epf или .erf. Регистрировать его заново не нужно — достаточно обновить уже подключённый.
- Откройте
Администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки. - Найдите в списке нужную обработку и откройте её карточку.
- В командной панели карточки выберите загрузку из файла и укажите новый файл.
- Программа сравнит сведения о внешней обработке в новом файле со старыми. Если вид совпадает, она заменит файл и обновит список команд.
- Проверьте вкладку «Размещение»: разделы, где видна обработка, и пользователей, которым она доступна. Обычно они сохраняются, но после смены команд их стоит проверить.
- Нажмите
Записать и закрыть.
Если раздела нет, включите его флажком «Дополнительные отчеты и обработки» в Администрирование → Печатные формы, отчеты и обработки.
Обработку, которая нужна один раз, регистрировать необязательно. Откройте её через главное меню → Файл → Открыть. Программа спросит подтверждение — такой запуск разрешается в настройках прав пользователя.
Перед заменой выгрузите старую версию из карточки в файл. Если новая окажется с ошибкой, вернёте прежнюю за минуту.
Внешняя обработка и конфигурация — разные вещи. Замена файла .cf целиком делается в Конфигураторе командой загрузки конфигурации из файла. После неё программа предложит обновить конфигурацию
базы данных — для этого нужен монопольный доступ.
Ошибки при замене данных и как их исправить
Ещё одна частая беда — замена элемента, который ещё нужен. Например, два договора с одним контрагентом склеили в один, хотя у них разные условия. Восстановить такое можно только из копии базы. Поэтому в «Поиске и удалении дублей» сравнивайте не только наименования, но и ключевые реквизиты.