При активном внедрении механизмов расширения конфигурации в 1С:Предприятие разработчики часто сталкиваются со следующей проблемой: в базу добавляется собственное расширение, внутри него создается новый объект метаданных (например, справочник или РегистрСведений._СчетаПодразделений), но при попытке обратиться к нему из внешней обработки (.epf) система выдает ошибку «Таблица не найдена». Более того, при редактировании текста запроса во внешней обработке через стандартный Конструктор запросов добавленный регистр просто отсутствует в списке доступных таблиц.
В этой статье мы подробно разберем, почему возникает такое поведение платформы, как обойти ограничения Конструктора запросов на старых релизах платформы (включая популярные версии 8.3.12–8.3.27) и как правильно настроить свойства расширения, чтобы внешние обработки стабильно работали с новыми объектами.
Когда мы работаем с расширениями в 1С, крайне важно понимать, как платформа разграничивает видимость объектов. Существует два ключевых фактора, из-за которых внешняя обработка может «не видеть» таблицу вашего нового регистра:
Дополнение, то все созданные в нем новые объекты метаданных будут аппаратно изолированы. Платформа не позволит внешней обработке или коду основной конфигурации обратиться к ним через запросы напрямую — результатом всегда будет ошибка обращения к таблице.Рассмотрим подробнее по шагам, как решить каждую из этих проблем.
Для того чтобы новые таблицы, созданные в расширении, были видны для внешних программных модулей, отчетов и обработок, необходимо изменить назначение расширения на правильный тип.
Выполним следующие действия:
Конфигурация — Расширения конфигурации.F4 или выбрав пункт свойства в контекстном меню).Дополнение, обязательно заменим его на Адаптация или Исправление. Назначение Адаптация является наиболее предпочтительным для расширений, добавляющих новую бизнес-логику и справочную информацию.Установка режима Адаптация снимает жесткую изоляцию данных, делая таблицы вашего регистра доступными для внешних запросов.
Если мы работаем на версиях платформы ниже 8.3.28 (например, на 8.3.12, как автор темы на форуме), то Конструктор запросов во внешней обработке все равно не покажет наш регистр _СчетаПодразделений в списке доступных таблиц. Как же составить правильный запрос, не допустив синтаксических ошибок?
Проанализируем три основных метода обхода этой проблемы:
Это самый простой и быстрый способ визуально спроектировать сложный запрос:
ВременныйОтчетДляЗапроса.Конструктор запросов.РегистрСведений._СчетаПодразделений.В режиме пользователя база данных работает с уже объединенными метаданными (основная конфигурация + все активные расширения). Мы можем воспользоваться этим:
Если запрос простой, мы можем написать его вручную в модуле внешней обработки, игнорируя предупреждения конфигуратора. Главное — строго соблюдать синтаксис имен объектов расширения. Например, код обращения к регистру сведений должен выглядеть следующим образом:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| _СчетаПодразделений.Подразделение КАК Подразделение,
| _СчетаПодразделений.Счет КАК Счет
|ИЗ
| РегистрСведений._СчетаПодразделений КАК _СчетаПодразделений";
// Установка параметров запроса выполняется стандартным методом
Запрос.УстановитьПараметр("Подразделение", ВыбранноеПодразделение);
РезультатЗапроса = Запрос.Выполнить();
Обратите внимание: имя таблицы пишется точно так же, как оно задано в расширении (с учетом вашего префикса, например, префикса нижнего подчеркивания _СчетаПодразделений). Несмотря на то, что Конфигуратор может подчеркивать этот текст красным цветом или не предлагать автозаполнение, в режиме предприятия этот код отработает корректно.
Часто разработчики сталкиваются с ситуацией: «Вчера не работало, сегодня пришел — всё работает само». Это связано с кэшированием метаданных платформой 1С. Когда вы добавляете новый объект в расширение конфигурации, запущенный сеанс внешней обработки может обращаться к устаревшей структуре БД.
Чтобы гарантированно применить изменения структуры данных, выполните следующие действия:
/ClearCache или вручную удалить папки кэша из каталогов %LocalAppData%\1C\1Cv8 и %AppData%\1C\1Cv8.Если внешняя обработка запускается через механизм «Дополнительные отчеты и обработки» библиотеки стандартных подсистем (БСП) и при этом для нее включен Безопасный режим, платформа может заблокировать доступ к таблицам расширения из соображений безопасности.
Для исправления этой ситуации администратор базы данных должен в карточке дополнительной обработки временно отключить безопасный режим либо настроить для нее соответствующий профиль безопасности, разрешающий доступ к запрашиваемому регистру сведений.
Если у вас есть возможность обновить версию технологической платформы, настоятельно рекомендуем перейти на версию 8.3.28 или выше. В этом релизе фирма «1С» полностью устранила данное неудобство для разработчиков.
Начиная с версии 8.3.28, реализован полноценный механизм «Доступность объектов расширения из внешних обработок и отчётов»:
.epf) и внешних отчетов (.erf).Конструктор запросов прямо из модуля внешней обработки, он будет видеть все таблицы подключенных расширений.Таким образом, своевременное обновление платформы до актуальных релизов позволяет полностью избавиться от рутинных обходных путей и сделать разработку на базе расширений максимально комфортной и быстрой.