При обновлении конфигурации 1С, особенно если база была существенно доработана или имеет большой объем данных, разработчики часто сталкиваются с критическими ошибками на этапе «Принятия изменений в информационной базе». Одна из самых коварных ошибок — «Таблица или поле FldXXXXX не содержится в разделе FROM». Традиционные методы лечения, такие как «Тестирование и исправление» или очистка кэша, в этой ситуации часто оказываются бессильны. В данной статье мы разберем, как преодолеть эту проблему с помощью современного механизма реструктуризации версии 2 (UpdateDBCfg=v2), проанализируем его внутреннее устройство, преимущества и потенциальные риски.
Прежде чем переходить к решению, давайте выясним причину. Ошибка вида «Таблица не содержится в разделе FROM» обычно возникает не из-за физического отсутствия данных, а из-за некорректной генерации SQL-запроса платформой 1С при использовании стандартного механизма реструктуризации. Старый механизм (версия 1) формирует сложные запросы к СУБД для копирования данных из старых структур в новые в рамках одной транзакции. Если структура метаданных запутана (например, много расширений или сложных реквизитов), внутренний генератор SQL платформы может допустить логическую ошибку, ссылаясь на алиас таблицы, который не был определен в секции FROM.
Механизм реструктуризации версии 2 — это оптимизированный технологический процесс изменения структуры базы данных, представленный фирмой «1С» начиная с платформы 8.3.11. В отличие от классического метода, который перекладывает основную нагрузку по переносу данных на средства самой СУБД (Microsoft SQL Server, PostgreSQL и др.), версия 2 переносит значительную часть логики на сторону сервера приложений «1С».
Рассмотрим ключевые отличия этого процесса:
TempDB.FROM.Для активации нового механизма нам потребуется внести изменения в файлы конфигурации или параметры запуска. Проанализируем самые надежные способы включения.
Способ 1: Использование файла conf.cfg
Этот способ считается наиболее стабильным для серверных баз. Нам необходимо найти файл conf.cfg (обычно он располагается в папке C:\Program Files\1cv8\conf на сервере приложений) и добавить в него специальный параметр.
Рассмотрим пример содержимого файла:
ConfLocation=C:\Program Files\1cv8\conf
UpdateDBCfg=v2
После внесения изменений необходимо перезапустить службу сервера приложений 1С, чтобы настройки вступили в силу. Теперь любая операция обновления конфигурации базы данных (F7 в Конфигураторе) будет использовать второй механизм.
Способ 2: Параметры командной строки
Если нам нужно выполнить разовое обновление, мы можем запустить Конфигуратор с дополнительным ключом. Рассмотрим пример строки запуска:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" DESIGNER /S "Server\Base" /UpdateDBCfg -v2
В этом случае изменения коснутся только текущего сеанса обновления.
Посмотрим, какие выгоды мы получаем, помимо исправления конкретной ошибки метаданных:
Несмотря на технологическое совершенство, использование версии 2 сопряжено с определенными нюансами. Проанализируем их, чтобы не потерять данные:
После того как обновление через UpdateDBCfg=v2 завершилось успешно, нам необходимо убедиться, что данные не пострадали. Выполним следующие шаги по шагам:
Шаг 1: Тестирование и исправление (ТиИ)
Запустим стандартную процедуру «Тестирование и исправление» из меню «Администрирование» в Конфигураторе. Нам обязательно нужно выбрать пункты:
Шаг 2: Выборочный контроль данных
Выясним, в каких объектах метаданных содержалось поле Fld13738 (или другое поле из текста ошибки). Для этого можно воспользоваться обработками по просмотру структуры БД. Откроем эти объекты в режиме «1С:Предприятие» и убедимся, что данные в этих полях отображаются корректно и соответствуют своим типам.
Шаг 3: Обслуживание на уровне СУБД
Поскольку механизм v2 активно работает с индексами и временными структурами, рекомендуется после завершения всех процедур в 1С выполнить обслуживание средствами СУБД: UPDATE STATISTICS и REORGANIZE/REBUILD INDEX для Microsoft SQL Server или ANALYZE/VACUUM для PostgreSQL.
Использование механизма реструктуризации версии 2 является мощным инструментом в арсенале программиста 1С. Он позволяет не только обходить специфические ошибки платформы, связанные с генерацией SQL-запросов, но и значительно ускоряет обслуживание крупных баз данных. Однако помните: всегда делайте резервную копию перед использованием новых технологических режимов на боевых системах.