При разработке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда при создании запроса в конфигураторе или расширении в списке доступных таблиц отсутствуют виртуальные таблицы регистров бухгалтерии, такие как ОборотыДтКт, Остатки или Обороты. При этом в пользовательском режиме, используя консоль запросов, те же самые таблицы видны и успешно выбираются. Давайте детально разберем причины возникновения этой проблемы, проанализируем механизмы работы платформы с виртуальными таблицами и выясним, как восстановить их отображение.
Для начала разберем важный терминологический нюанс. В 1С не существует «виртуальных регистров», существуют виртуальные таблицы, которые платформа формирует «на лету» на основании данных физических таблиц регистров. В дереве метаданных конфигуратора (слева) вы никогда не увидите объект с названием ОборотыДтКт, так как это динамическое представление, а не статический объект метаданных.
Виртуальные таблицы доступны только в контексте языка запросов. Рассмотрим, почему они могут пропадать из визуального помощника — конструктора запросов:
ОборотыДтКт) требуют включения специфических опций в свойствах регистра.Рассмотрим ситуацию, когда нам нужна конкретно таблица ОборотыДтКт. Проанализируем механику регистра бухгалтерии. Эта таблица предназначена для получения оборотов между счетами дебета и кредита (двойная запись). Однако она существует в системе только в том случае, если у регистра бухгалтерии в свойствах установлен флаг Корреспонденция.
Если этот флаг снят, платформа хранит записи регистра без жесткой связи «один дебет — один кредит» в одной строке (что характерно для некоторых видов управленческого учета), и сформировать таблицу ОборотыДтКт физически невозможно. В этом случае будут доступны только:
ОстаткиОборотыОстаткиИОборотыЕсли вы не видите нужную таблицу, первым делом проверим свойство Корреспонденция у регистра в основной конфигурации.
Чаще всего виртуальные таблицы «пропадают» именно при работе в расширениях конфигурации. Выясним причину этого поведения. Для того чтобы конструктор запроса внутри расширения «увидел» виртуальную таблицу ОборотыДтКт, недостаточно просто добавить регистр бухгалтерии в расширение. Необходимо соблюсти несколько условий:
Корреспонденция также заимствовано и его значение совпадает с основной конфигурацией (установлено в «Истина»).Подразделение, Субконто, Валюта). Если эти объекты не заимствованы, конструктор запроса может скрыть таблицы, которые не может собрать из-за неполноты метаданных.Важно понимать, что отсутствие таблицы в визуальном конструкторе запросов не всегда означает невозможность обращения к ней в коде. Проанализируем пример ручного написания запроса. Если мы напишем текст запроса вручную, он может успешно выполниться, даже если конструктор «капризничает».
Посмотрим на пример кода, который обращается к виртуальной таблице СрезПоследних регистра сведений (аналогично это работает и для регистров бухгалтерии):
// Пример ручного обращения к виртуальной таблице без использования конструктора
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ХозрасчетныйОборотыДтКт.СчетДт,
| ХозрасчетныйОборотыДтКт.СчетКт,
| ХозрасчетныйОборотыДтКт.СуммаОборот
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода) КАК ХозрасчетныйОборотыДтКт";
РезультатЗапроса = Запрос.Выполнить();
Если такой запрос выполняется без ошибок, значит, проблема носит исключительно визуальный характер в самом интерфейсе конфигуратора или конкретной версии платформы.
Если вы столкнулись с отсутствием виртуальных таблиц, выполним следующие шаги для исправления:
Шаг 1. Проверка основной конфигурации. Убедимся, что регистр бухгалтерии исправен, конфигурация базы данных обновлена и свойство Корреспонденция включено.
Шаг 2. Обновление расширения. Если работа идет в расширении, попробуем удалить регистр из расширения и заимствовать его заново. При этом важно выбирать не только сам объект, но и связанные с ним типы данных.
Шаг 3. Очистка кэша конфигуратора. Иногда метаданные в кэше «залипают». Закроем конфигуратор, удалим файлы кэша (папки Local\1C\1cv8 и Roaming\1C\1cv8 для соответствующего идентификатора базы) и запустим снова.
Шаг 4. Проверка прав доступа (RLS). Выясним, под каким пользователем запущен конфигуратор (в случае отладки) или под какими правами работает текущий сеанс. Если у пользователя нет прав на чтение измерений или самого плана счетов, виртуальные таблицы могут скрываться платформой в целях безопасности.
Шаг 5. Режим совместимости. Проверим версию платформы и режим совместимости конфигурации. В старых режимах совместимости (ниже 8.3.15) работа с регистрами в расширениях имела ряд ограничений. Если есть возможность, проверим поведение на более актуальной версии платформы.
Мы выяснили, что «пропадание» виртуальных таблиц — это чаще всего вопрос настройки метаданных или контекста расширения. Помните, что платформа 1С строит виртуальные таблицы на основе физических данных и настроек регистра. Обеспечив корректное заимствование регистра вместе с его планом счетов и включенным свойством Корреспонденция, вы вернете доступ к таблице ОборотыДтКт в конструкторе запросов.