Структура, данные и табличные части: что и чем обновлять в базе 1С
Содержание
Чтобы обновить таблицы базы 1С после изменения конфигурации, откройте Конфигуратор и выполните Конфигурация → Обновить конфигурацию базы данных (F7). Если таблицы повреждены или «застряли» в старой структуре — запустите Администрирование → Тестирование и исправление с флажком «Реструктуризация таблиц информационной базы».
Но «обновить таблицу» в 1С 8.3 часто значит другое: перенести данные из одной базы в другую, поменять сотни строк в документах или пересчитать итоги. Под каждую задачу есть свой инструмент, и прямой SQL среди них почти никогда не лучший.
Какую таблицу нужно обновить: выбираем способ
Сначала определите, что именно устарело: структура (поля и индексы), сами данные или служебные итоги. От этого зависит инструмент и риск.
| Задача | Инструмент | Нужен монопольный режим | Риск |
|---|---|---|---|
| Новые реквизиты не появились в базе | Обновление конфигурации БД (F7) | Да, если нужна реструктуризация | Средний |
| Таблицы повреждены, ошибки индексов | Тестирование и исправление | Да | Средний |
| Перенести справочники и документы между базами | Обработка «Выгрузка и загрузка данных XML» | Нет | Высокий |
| Заменить значение в сотнях документов | Групповое изменение реквизитов или обработка | Нет | Средний |
| Найти строки с ошибкой | Консоль запросов | Нет | Нет |
| Ускорить работу больших таблиц | Обслуживание индексов и статистики в СУБД | Нет | Низкий |
| Данные не пересчитались после обновления релиза | Отложенная обработка, регламентные задания | Нет | Низкий |
Обновление конфигурации и структуры таблиц базы данных
Каждый объект конфигурации хранится в своих таблицах СУБД. Когда вы добавляете реквизит или табличную часть, меняется только конфигурация в Конфигураторе. Таблицы базы перестраиваются лишь после команды обновления.
Обычное обновление (F7)
- Откройте базу в Конфигураторе.
- Внесите изменения или загрузите обновление поставщика:
Конфигурация → Поддержка → Обновить конфигурациюс файлом.cfu. - Выполните
Конфигурация → Обновить конфигурацию базы данных(F7). - Платформа покажет список изменений структуры. Прочитайте его: строки об удалении реквизитов означают потерю данных в этих полях.
- Нажмите «Принять» и дождитесь окончания реструктуризации.
- Запустите базу в режиме «1С:Предприятие». Типовая конфигурация сама выполнит обработчики обновления.
На большой базе реструктуризация длинной таблицы регистра может идти часами. Планируйте её на вечер и предупредите пользователей: в монопольном режиме они работать не смогут.
Динамическое обновление
Если изменения не требуют перестройки таблиц, Конфигуратор предложит динамическое обновление — без выгона пользователей. Работающие сеансы увидят изменения только после перезапуска.
Для типовых баз на поддержке так обновлять релизы не стоит. Обработчики обновления запускаются при первом входе, и сеансы на старой версии могут записать данные в старом формате.
Перестроить таблицы, когда структура «сломалась»
Бывает, что конфигурация обновлена, а таблицы ведут себя странно: ошибки индекса, дубли, сбои при записи. Тогда нужен режим Администрирование → Тестирование и исправление в Конфигураторе.
Отметьте нужные пункты:
- 🔧 Реиндексация таблиц информационной базы — пересоздаёт индексы;
- 🧱 Реструктуризация таблиц информационной базы — перестраивает таблицы заново;
- 🔗 Проверка логической и ссылочной целостности — ищет битые ссылки и предлагает, что с ними делать;
- ➕ Пересчёт итогов — заново считает итоговые таблицы регистров;
- 🗜 Сжатие таблиц — актуально для файловой базы.
Режим требует монопольного доступа. Перед запуском сделайте выгрузку .dt или копию файла 1Cv8.1CD — исправление ссылок может удалить или заменить объекты.
Для файловой базы есть отдельная утилита chdbfl.exe в папке bin платформы. Она проверяет физическую целостность файла 1Cv8.1CD, когда базу не открывает даже Конфигуратор. Все пользователи перед запуском должны выйти из базы.
Перенос данных обработкой «Выгрузка и загрузка данных XML»
Если нужно обновить справочники
или документы данными из другой базы той же конфигурации, используют универсальную обработку ВыгрузкаЗагрузкаДанныхXML83.epf. Её распространяют на диске ИТС; открывается она через Файл → Открыть в режиме «1С:Предприятие».
Как выгрузить
- Откройте обработку в базе-источнике.
- На вкладке выгрузки задайте период и отметьте нужные объекты: справочники, документы, регистры.
- Укажите имя файла и выгрузите.
Как загрузить
- Сделайте копию базы -приёмника.
- Откройте ту же обработку в приёмнике, перейдите на вкладку загрузки.
- Выберите файл и запустите загрузку.
Обработка сопоставляет объекты по внутреннему идентификатору ссылки. Если в приёмнике уже есть объект с тем же идентификатором, он будет перезаписан данными из файла. Так удобно «обновить» справочник из эталонной базы, но так же легко затереть свежие правки.
Что учесть до загрузки:
- 📌 структура конфигураций должна совпадать: реквизит, которого нет в приёмнике, не загрузится;
- 📌 документы загружаются без перепроведения, их движения переносятся как есть, если вы выгрузили регистры;
- 📌 открывать внешние обработки может только пользователь с соответствующими правами;
- 📌 для регулярного обмена между разными конфигурациями эта обработка не подходит — там нужны правила конвертации.
Массовая правка табличных частей документов
Типичная задача: в 300 реализациях за квартал в табличной части «Товары» указана не та номенклатура или пустой реквизит. Вручную это неделя работы.
Групповое изменение реквизитов
В БП 3.0 обработка находится в Администрирование → Обслуживание → Корректировка данных → Групповое изменение реквизитов. В других конфигурациях на БСП она тоже есть: ищите её в разделе «Администрирование».
- Выберите тип объектов, например «Реализация (акт, накладная, УПД)».
- Задайте отбор: период, организация, контрагент.
- Укажите реквизит и новое значение. В актуальных версиях обработка показывает и реквизиты табличных частей.
- Отметьте, нужно ли перепроводить документы, и запустите.
Перед изменением обработка покажет, сколько объектов попадает под отбор. Если число неожиданное — остановитесь и уточните фильтр.
Внешняя обработка с записью через объект
Когда условие сложное (менять строку, только если в соседней колонке определённое значение), пишут свою обработку. Главное правило: данные меняют через объект, а не в обход платформы. Тогда отработают проверки, права и запрет изменения закрытого периода.
Пример: заменить одну позицию номенклатуры на другую во всех реализациях за период.
&НаСервере
Процедура ЗаменитьНоменклатуруНаСервере(СтараяПозиция, НоваяПозиция, НачалоПериода, КонецПериода)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Товары.Ссылка КАК Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг.Товары КАК Товары
|ГДЕ
| Товары.Номенклатура = &Старая
| И Товары.Ссылка.Дата МЕЖДУ &Начало И &Конец";
Запрос.УстановитьПараметр("Старая", СтараяПозиция);
Запрос.УстановитьПараметр("Начало", НачалоПериода);
Запрос.УстановитьПараметр("Конец", КонецПериода);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
Для Каждого СтрокаТЧ Из ДокОбъект.Товары Цикл
Если СтрокаТЧ.Номенклатура = СтараяПозиция Тогда
СтрокаТЧ.Номенклатура = НоваяПозиция;
КонецЕсли;
КонецЦикла;
Попытка
Если ДокОбъект.Проведен Тогда
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ДокОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
Исключение
Сообщить("Не записан " + Строка(Выборка.Ссылка) + ": "
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецЦикла;
КонецПроцедуры
Проведённый документ записывается с перепроведением, чтобы движения в регистрах совпали с новой табличной частью. Документы в закрытом периоде не запишутся — их список выведется в сообщениях.
Перепроведение пересчитывает движения по текущим настройкам учёта. Если с момента создания документа настройки менялись, суммы в регистрах могут сдвинуться. Сначала прогоните обработку на копии и сверьте оборотно-сальдовую ведомость до и после.
Свойство ДокОбъект.ОбменДанными.Загрузка = Истина отключает обработчики записи и проверки. Его используют при загрузке, но для правки рабочих документов оно опасно: документ запишется без заполнения служебных реквизитов, а провести его в этом режиме нельзя.
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С обновляет сама, по расписанию: курсы валют, полнотекстовый индекс, загрузка классификаторов, обмены. Если данные в таблице «застыли», первым делом проверьте задания.
Где смотреть задания
В БП 3.0: Администрирование → Обслуживание → Регламентные операции → Регламентные и фоновые задания. В списке видно расписание, время последнего запуска и статус. Двойной щелчок открывает задание; командой «Выполнить сейчас» его можно запустить вручную.
Почему задание не выполняется:
- 🕒 файловая база — задания выполняются, только пока в базе открыт хотя бы один сеанс клиента;
- 🔒 клиент-серверная база — в свойствах информационной базы в консоли кластера включена блокировка регламентных заданий. Так часто бывает в копиях, развёрнутых для тестов;
- ⚙️ задание выключено флажком «Включено» в карточке;
- ❗ задание падает с ошибкой — подробности в журнале регистрации с отбором по событию регламентного задания.
Снимать блокировку регламентных заданий в тестовой копии базы опасно: она начнёт выполнять обмены и отправлять данные от имени рабочей. Сначала отключите обмены и интеграции.
Отложенная обработка после обновления релиза
После перехода на новый релиз типовая конфигурация на БСП обновляет часть таблиц в фоне. Это отложенные обработчики: они переписывают данные регистров и справочников под новую структуру, не задерживая вход пользователей.
Пока они не закончились, отдельные отчёты и формы могут показывать неполные данные. Ход процесса смотрят в разделе Администрирование → Обслуживание, пункт «Результаты обновления и дополнительная обработка данных». Там видно, какие обработчики завершены, а какие упали с ошибкой и требуют повторного запуска.