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

· 10 мин

Содержание

Чтобы обновить таблицы базы 1С после изменения конфигурации, откройте Конфигуратор и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Если таблицы повреждены или «застряли» в старой структуре — запустите Администрирование → Тестирование и исправление с флажком «Реструктуризация таблиц информационной базы».

Но «обновить таблицу» в 1С 8.3 часто значит другое: перенести данные из одной базы в другую, поменять сотни строк в документах или пересчитать итоги. Под каждую задачу есть свой инструмент, и прямой SQL среди них почти никогда не лучший.

Какую таблицу нужно обновить: выбираем способ

Сначала определите, что именно устарело: структура (поля и индексы), сами данные или служебные итоги. От этого зависит инструмент и риск.

ЗадачаИнструментНужен монопольный режимРиск
Новые реквизиты не появились в базеОбновление конфигурации БД (F7)Да, если нужна реструктуризацияСредний
Таблицы повреждены, ошибки индексовТестирование и исправлениеДаСредний
Перенести справочники и документы между базамиОбработка «Выгрузка и загрузка данных XML»НетВысокий
Заменить значение в сотнях документовГрупповое изменение реквизитов или обработкаНетСредний
Найти строки с ошибкойКонсоль запросовНетНет
Ускорить работу больших таблицОбслуживание индексов и статистики в СУБДНетНизкий
Данные не пересчитались после обновления релизаОтложенная обработка, регламентные заданияНетНизкий
Что у вас не так с таблицей?

Обновление конфигурации и структуры таблиц базы данных

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

Обычное обновление (F7)

  1. Откройте базу в Конфигураторе.
  2. Внесите изменения или загрузите обновление поставщика: Конфигурация → Поддержка → Обновить конфигурацию с файлом .cfu.
  3. Выполните Конфигурация → Обновить конфигурацию базы данных (F7).
  4. Платформа покажет список изменений структуры. Прочитайте его: строки об удалении реквизитов означают потерю данных в этих полях.
  5. Нажмите «Принять» и дождитесь окончания реструктуризации.
  6. Запустите базу в режиме «1С:Предприятие». Типовая конфигурация сама выполнит обработчики обновления.

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

Динамическое обновление

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

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

Перестроить таблицы, когда структура «сломалась»

Бывает, что конфигурация обновлена, а таблицы ведут себя странно: ошибки индекса, дубли, сбои при записи. Тогда нужен режим Администрирование → Тестирование и исправление в Конфигураторе.

Отметьте нужные пункты:

  • 🔧 Реиндексация таблиц информационной базы — пересоздаёт индексы;
  • 🧱 Реструктуризация таблиц информационной базы — перестраивает таблицы заново;
  • 🔗 Проверка логической и ссылочной целостности — ищет битые ссылки и предлагает, что с ними делать;
  • ➕ Пересчёт итогов — заново считает итоговые таблицы регистров;
  • 🗜 Сжатие таблиц — актуально для файловой базы.

Режим требует монопольного доступа. Перед запуском сделайте выгрузку .dt или копию файла 1Cv8.1CD — исправление ссылок может удалить или заменить объекты.

Для файловой базы есть отдельная утилита chdbfl.exe в папке bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD, когда базу не открывает даже Конфигуратор. Все пользователи перед запуском должны выйти из базы.

Перенос данных обработкой «Выгрузка и загрузка данных XML»

Если нужно обновить справочники или документы данными из другой базы той же конфигурации, используют универсальную обработку ВыгрузкаЗагрузкаДанныхXML83.epf. Её распространяют на диске ИТС; открывается она через Файл → Открыть в режиме «1С:Предприятие».

Как выгрузить

  1. Откройте обработку в базе-источнике.
  2. На вкладке выгрузки задайте период и отметьте нужные объекты: справочники, документы, регистры.
  3. Укажите имя файла и выгрузите.

Как загрузить

  1. Сделайте копию базы -приёмника.
  2. Откройте ту же обработку в приёмнике, перейдите на вкладку загрузки.
  3. Выберите файл и запустите загрузку.

Обработка сопоставляет объекты по внутреннему идентификатору ссылки. Если в приёмнике уже есть объект с тем же идентификатором, он будет перезаписан данными из файла. Так удобно «обновить» справочник из эталонной базы, но так же легко затереть свежие правки.

Что учесть до загрузки:

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

Массовая правка табличных частей документов

Типичная задача: в 300 реализациях за квартал в табличной части «Товары» указана не та номенклатура или пустой реквизит. Вручную это неделя работы.

Групповое изменение реквизитов

В БП 3.0 обработка находится в Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов. В других конфигурациях на БСП она тоже есть: ищите её в разделе «Администрирование».

  1. Выберите тип объектов, например «Реализация (акт, накладная, УПД)».
  2. Задайте отбор: период, организация, контрагент.
  3. Укажите реквизит и новое значение. В актуальных версиях обработка показывает и реквизиты табличных частей.
  4. Отметьте, нужно ли перепроводить документы, и запустите.

Перед изменением обработка покажет, сколько объектов попадает под отбор. Если число неожиданное — остановитесь и уточните фильтр.

Внешняя обработка с записью через объект

Когда условие сложное (менять строку, только если в соседней колонке определённое значение), пишут свою обработку. Главное правило: данные меняют через объект, а не в обход платформы. Тогда отработают проверки, права и запрет изменения закрытого периода.

Пример: заменить одну позицию номенклатуры на другую во всех реализациях за период.

&НаСервере
Процедура ЗаменитьНоменклатуруНаСервере(СтараяПозиция, НоваяПозиция, НачалоПериода, КонецПериода)

	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Товары.Ссылка КАК Ссылка
	|ИЗ
	|	Документ.РеализацияТоваровУслуг.Товары КАК Товары
	|ГДЕ
	|	Товары.Номенклатура = &Старая
	|	И Товары.Ссылка.Дата МЕЖДУ &Начало И &Конец";
	Запрос.УстановитьПараметр("Старая", СтараяПозиция);
	Запрос.УстановитьПараметр("Начало", НачалоПериода);
	Запрос.УстановитьПараметр("Конец", КонецПериода);

	Выборка = Запрос.Выполнить().Выбрать();
	Пока Выборка.Следующий() Цикл
		ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
		Для Каждого СтрокаТЧ Из ДокОбъект.Товары Цикл
			Если СтрокаТЧ.Номенклатура = СтараяПозиция Тогда
				СтрокаТЧ.Номенклатура = НоваяПозиция;
			КонецЕсли;
		КонецЦикла;
		Попытка
			Если ДокОбъект.Проведен Тогда
				ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
			Иначе
				ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
			КонецЕсли;
		Исключение
			Сообщить("Не записан " + Строка(Выборка.Ссылка) + ": "
				+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		КонецПопытки;
	КонецЦикла;

КонецПроцедуры

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

Перепроведение пересчитывает движения по текущим настройкам учёта. Если с момента создания документа настройки менялись, суммы в регистрах могут сдвинуться. Сначала прогоните обработку на копии и сверьте оборотно-сальдовую ведомость до и после.

Свойство ДокОбъект.ОбменДанными.Загрузка = Истина отключает обработчики записи и проверки. Его используют при загрузке, но для правки рабочих документов оно опасно: документ запишется без заполнения служебных реквизитов, а провести его в этом режиме нельзя.

SQL-запросы к таблицам 1С: что допустимо

Соблазн написать UPDATE прямо в Microsoft SQL Server или PostgreSQL понятен: одна команда вместо обработки. Но платформа не узнает о таких изменениях.

Чем грозит прямая правка данных:

  • ❌ не пересчитаются итоги регистров и остатки разойдутся с движениями;
  • ❌ не сработают проверки, права и история изменений;
  • ❌ сервер 1С держит кэш данных, и пользователи какое-то время видят старые значения;
  • ❌ поля ссылок хранятся в двоичном виде, ошибиться в формате легко;

Поэтому данные правят только через 1С. SQL на уровне СУБД нужен для обслуживания: индексы, статистика, место на диске.

Как узнать, какая таблица СУБД хранит объект

Имена таблиц в СУБД служебные: _Document123, _Reference45. Соответствие выдаёт функция платформы:

&НаСервере
Процедура ПоказатьТаблицыОбъектаНаСервере()
	СписокОбъектов = Новый Массив;
	СписокОбъектов.Добавить("Документ.РеализацияТоваровУслуг");
	Структура = ПолучитьСтруктуруХраненияБазыДанных(СписокОбъектов, Истина);
	Для Каждого Описание Из Структура Цикл
		Сообщить(Описание.ИмяТаблицыХранения + " — " + Описание.ИмяТаблицы);
	КонецЦикла;
КонецПроцедуры

Табличная часть «Товары» окажется отдельной таблицей вида _Document123_VT456. Это пригодится, чтобы найти тяжёлую таблицу в отчётах СУБД.

Обслуживание таблиц в СУБД

Обновление статистики и перестроение индексов ускоряют запросы и не меняют данные. Для Microsoft SQL Server:

-- обновить статистику по всем таблицам базы
EXEC sp_updatestats;

-- перестроить индексы одной таблицы
ALTER INDEX ALL ON dbo._Document123_VT456 REBUILD;

Для PostgreSQL:

VACUUM ANALYZE;

Перестроение индексов нагружает диск и может блокировать таблицу. Запускайте его вне рабочего времени. Регулярное обслуживание удобнее настроить планом обслуживания в самой СУБД, а не вручную.

Консоль запросов: найти строки, которые нужно исправить

Язык запросов 1С умеет только читать: UPDATE и DELETE в нём нет. Поэтому консоль запросов — инструмент диагностики, а не правки. Но без неё массовое исправление вслепую.

Консоль запросов — внешняя обработка, её берут с диска ИТС или используют встроенную в некоторые конфигурации. Открывается так же, через Файл → Открыть.

Пример: найти реализации, где в строках товаров не заполнен счёт учёта.

ВЫБРАТЬ
	Товары.Ссылка КАК Документ,
	Товары.НомерСтроки КАК Строка,
	Товары.Номенклатура КАК Номенклатура
ИЗ
	Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
	Товары.СчетУчета = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ПустаяСсылка)
	И Товары.Ссылка.Проведен

Порядок работы такой:

  1. Запросом получите точный список документов и строк.
  2. Сохраните результат в файл — это ваш контрольный список.
  3. Исправьте данные групповым изменением или обработкой.
  4. Повторите запрос: результат должен быть пустым.

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

Регламентные задания и фоновая обработка данных

Часть таблиц 1С обновляет сама, по расписанию: курсы валют, полнотекстовый индекс, загрузка классификаторов, обмены. Если данные в таблице «застыли», первым делом проверьте задания.

Где смотреть задания

В БП 3.0: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. В списке видно расписание, время последнего запуска и статус. Двойной щелчок открывает задание; командой «Выполнить сейчас» его можно запустить вручную.

Почему задание не выполняется:

  • 🕒 файловая база — задания выполняются, только пока в базе открыт хотя бы один сеанс клиента;
  • 🔒 клиент-серверная база — в свойствах информационной базы в консоли кластера включена блокировка регламентных заданий. Так часто бывает в копиях, развёрнутых для тестов;
  • ⚙️ задание выключено флажком «Включено» в карточке;
  • ❗ задание падает с ошибкой — подробности в журнале регистрации с отбором по событию регламентного задания.

Снимать блокировку регламентных заданий в тестовой копии базы опасно: она начнёт выполнять обмены и отправлять данные от имени рабочей. Сначала отключите обмены и интеграции.

Отложенная обработка после обновления релиза

После перехода на новый релиз типовая конфигурация на БСП обновляет часть таблиц в фоне. Это отложенные обработчики: они переписывают данные регистров и справочников под новую структуру, не задерживая вход пользователей.

Пока они не закончились, отдельные отчёты и формы могут показывать неполные данные. Ход процесса смотрят в разделе Администрирование → Обслуживание, пункт «Результаты обновления и дополнительная обработка данных». Там видно, какие обработчики завершены, а какие упали с ошибкой и требуют повторного запуска.

Перед обновлением таблиц в рабочей базе
Выполнено: 0 / 6

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

Почему новый реквизит виден в Конфигураторе, но пользователи его не видят?
Конфигурация сохранена, но база не обновлена. Выполните F7. Если обновление прошло динамически, пользователям нужно перезапустить 1С.
Можно ли обновить конфигурацию базы, не выгоняя пользователей?
Только если изменения не требуют реструктуризации таблиц. Добавление реквизита к объекту обычно требует, и тогда нужен монопольный режим.
Как обновить список на экране, если данные в форме не изменились?
Используйте команду «Обновить» в меню «Ещё» формы списка или закройте и откройте форму. Если данные не появились и после этого — проблема не в отображении, а в записи.
Сколько длится «Тестирование и исправление»?
От минут на небольшой файловой базе до нескольких часов на серверной базе в десятки гигабайт. Реструктуризация всех таблиц — самая долгая опция.
Обновится ли табличная часть документа при перезаполнении?
Команда «Заполнить» в форме документа обычно очищает табличную часть и строит её заново. Ручные правки строк при этом пропадут.