При работе с платформой 1С:Предприятие 8.3 разработчики часто сталкиваются с необходимостью расширения функциональности типовых конфигураций без изменения их кода. Расширения предоставляют мощный механизм для таких задач. Однако иногда возникают ситуации, когда новые объекты, созданные в расширении, например, регистры сведений, не отображаются или не функционируют должным образом. Одна из таких проблем — это отсутствие физического создания таблицы нового регистра сведений в базе данных SQL, что приводит к ошибке SDBL при попытке к нему обратиться. В этой статье мы подробно рассмотрим причины такого поведения и предложим пошаговые решения.
Предположим, вы создали в расширении новый регистр сведений, успешно обновили конфигурацию базы данных через Конфигуратор, но при запуске тонкого клиента и обращении к этому регистру 1С выдает ошибку:
Ошибка при выполнении запроса POST к ресурсу /e1cib/logForm: по причине: Ошибка SDBL: В схеме базы данных нет таблицы с именем InfoRg32387
Это означает, что физической таблицы с именем, соответствующим вашему новому регистру сведений (в данном случае InfoRg32387 – это внутреннее имя таблицы для регистра сведений), нет в структуре базы данных SQL. Давайте разбираться, почему так происходит и как это исправить.
Когда мы добавляем новые объекты конфигурации (например, регистры сведений, справочники, документы) в расширение, 1С должна провести реструктуризацию базы данных. Этот процесс включает в себя физическое создание соответствующих таблиц в СУБД (SQL Server, PostgreSQL, Oracle и т.д.). В обычной конфигурации реструктуризация происходит автоматически при обновлении конфигурации базы данных через Конфигуратор. Однако с расширениями процесс может иметь свои нюансы.
Ключевой момент заключается в том, что изменения в расширениях применяются к информационной базе, но не всегда приводят к немедленной реструктуризации базовой конфигурации. 1С старается быть максимально гибкой и применять изменения от расширений без полного монопольного блокирования базы данных. Это может привести к тому, что новые объекты, добавленные в расширение, могут быть не сразу физически созданы в СУБД.
Прежде чем переходить к радикальным мерам, давайте убедимся, что базовые условия для работы расширения соблюдены:
Активность расширения: В первую очередь, мы должны проверить, активно ли наше расширение. Перейдите в раздел "Администрирование" - "Печатные формы, отчеты и обработки" - "Расширения". Убедитесь, что ваше расширение присутствует в списке и имеет статус "Активно". Если оно неактивно, установите флажок "Активно" и перезапустите 1С:Предприятие.
Режим совместимости платформы: Хотя современные версии платформы 1С:Предприятие (начиная с 8.3.11) поддерживают добавление собственных объектов метаданных (справочников, документов, регистров) в расширениях, стоит убедиться, что используемая версия платформы (в вашем случае 8.3.22.1923) и режим совместимости конфигурации (8.3.12) не конфликтуют. В данном случае, режим совместимости 8.3.12 поддерживает эту функциональность, поэтому причина не в этом, особенно если другие объекты в этом же расширении уже работают.
Проверка существующих объектов в расширении: Если у вас уже есть другие регистры сведений или документы, созданные в том же расширении, и они работают корректно, это указывает на то, что сама возможность добавления объектов в расширение функционирует, и проблема, скорее всего, специфична для данного нового регистра или процесса его интеграции.
Один из наиболее действенных способов принудить 1С выполнить полную реструктуризацию базы данных, включая изменения от расширений, — это запуск обновления информационной базы со специальным ключом. Этот метод аналогичен запуску обновления конфигурации базы данных из Конфигуратора, но выполняется в режиме "1С:Предприятие" и часто более эффективно обрабатывает изменения, привнесенные расширениями.
Обеспечьте монопольный режим: Это критически важно. Перед выполнением этих действий убедитесь, что все пользователи вышли из информационной базы. Обновление конфигурации базы данных, особенно с реструктуризацией, требует монопольного доступа, иначе оно может быть прервано или завершится с ошибками.
Запустите 1С:Предприятие с ключом: Откройте диалог запуска 1С:Предприятия. Выберите свою информационную базу и нажмите кнопку "Изменить".
На шаге "Настройка параметров запуска" в поле "Дополнительные параметры запуска" или "Параметры запуска" добавьте следующую строку:
/c ЗапуститьОбновлениеИнформационнойБазы
Убедитесь, что вы вводите ключ без ошибок, соблюдая регистр.
Нажмите "Готово", а затем "1С:Предприятие" для запуска. Система запустится, проведет необходимые проверки и обновления, включая реструктуризацию.
Проверьте результат: После завершения процесса запустите 1С:Предприятие в обычном режиме (без ключа) и проверьте доступность вашего нового регистра сведений. Ошибка SDBL: В схеме базы данных нет таблицы с именем InfoRg32387 должна исчезнуть.
Процедура "Тестирование и исправление" (ТиИ) — это мощный инструмент для диагностики и устранения проблем в информационной базе, включая дефекты структуры данных. Она может помочь принудительно создать отсутствующие таблицы или исправить их структуру.
Обеспечьте монопольный режим: Как и в предыдущем случае, для ТиИ требуется монопольный доступ к информационной базе. Убедитесь, что все пользователи вышли.
Запустите Конфигуратор: Откройте Конфигуратор для вашей информационной базы.
Перейдите в "Тестирование и исправление": В меню выберите "Администрирование" -> "Тестирование и исправление...".
Настройте параметры ТиИ: В открывшемся окне "Тестирование и исправление" установите следующие флажки:
"Проверка логической целостности расширений конфигурации": Этот флажок является ключевым для работы с проблемами расширений.
"Реструктуризация таблиц расширений конфигурации": Этот флажок станет доступен после включения предыдущего и позволит принудительно провести реструктуризацию таблиц, относящихся к расширениям.
Также рекомендуется установить флажки "Проверка логической целостности" и "Проверка ссылочной целостности" для общей проверки базы данных. Вы можете выбрать действия "Создавать объекты" для отсутствующих объектов.
Запустите тестирование: Нажмите кнопку "Выполнить". Процесс может занять продолжительное время в зависимости от размера базы данных.
Проверьте результат: После завершения ТиИ запустите 1С:Предприятие в обычном режиме и проверьте доступность вашего нового регистра сведений.
Если вышеуказанные методы не помогли, или вы хотите более глубоко разобраться в проблеме, рассмотрим дополнительные аспекты:
Очистка кэша: Иногда проблемы с видимостью объектов или их некорректной работой связаны с поврежденным кэшем 1С. Мы рекомендуем очистить кэш как на сервере 1С (если используется клиент-серверный вариант), так и на клиентских машинах. Для клиентского кэша это можно сделать, удалив папку кэша по пути %LocalAppData%\1C\1Cv8\ или %AppData%\1C\1Cv8\. Для серверного кэша потребуется перезапустить серверные службы 1С:Предприятия.
Назначение расширения: Свойство "Назначение расширения" играет важную роль. Если расширение содержит новые объекты конфигурации, которые должны быть доступны в основной конфигурации, как в нашем случае регистр сведений, необходимо убедиться, что для расширения установлено назначение "Адаптация". Расширения с назначением "Дополнение" могут иметь ограничения на прямое добавление новых объектов, доступных для основной конфигурации, хотя в большинстве случаев и это не мешает.
Принудительная реструктуризация через добавление реквизита: Иногда, если регистр упорно не создается, разработчики прибегают к хитрости: добавляют в проблемный регистр сведений временный, совершенно ненужный реквизит, сохраняют расширение, обновляют конфигурацию базы данных, а затем удаляют этот реквизит и снова обновляют. Это может принудить систему к реструктуризации таблицы регистра.
Проверка прав: Убедитесь, что у пользователя, под которым вы пытаетесь обратиться к регистру, есть достаточные права на работу с этим регистром. Даже если таблица физически создана, отсутствие прав приведет к ошибкам доступа, хотя обычно не к ошибке SDBL: В схеме базы данных нет таблицы.
Порядок применения расширений: Если у вас несколько расширений, учитывайте порядок их применения (Исправление -> Адаптация -> Дополнение). Если ваш новый регистр в расширении "Дополнение" пытается использовать или быть использованным в контексте, который мог бы быть изменен расширением "Адаптация", это может вызывать неявные конфликты.
Пересоздание расширения: В крайнем случае, если ничто не помогает, мы можем попробовать удалить проблемное расширение, сохранить его метаданные в файл, затем создать новое расширение и загрузить в него метаданные из файла. После этого выполните все шаги по обновлению конфигурации базы данных и проверьте результат.
Проблема отсутствия таблицы регистра сведений, созданного в расширении, в базе данных SQL, является достаточно распространенной и обычно связана с некорректным или незавершенным процессом реструктуризации базы данных. В большинстве случаев запуск обновления информационной базы с ключом /c ЗапуститьОбновлениеИнформационнойБазы или выполнение процедуры "Тестирование и исправление" с опциями реструктуризации таблиц расширений успешно решает эту задачу. Всегда помните о необходимости монопольного режима при выполнении таких операций для предотвращения повреждения данных и обеспечения их корректного завершения. Если вы столкнулись с такой проблемой, последовательно примените предложенные нами решения, и ваш новый регистр сведений обязательно появится в структуре базы данных.