Почему в конструкторе запросов пропадают виртуальные таблицы регистра бухгалтерии и как их вернуть?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При разработке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда при создании запроса в конфигураторе или расширении в списке доступных таблиц отсутствуют виртуальные таблицы регистров бухгалтерии, такие как ОборотыДтКт, Остатки или Обороты. При этом в пользовательском режиме, используя консоль запросов, те же самые таблицы видны и успешно выбираются. Давайте детально разберем причины возникновения этой проблемы, проанализируем механизмы работы платформы с виртуальными таблицами и выясним, как восстановить их отображение.

Различие между физическими и виртуальными таблицами

Для начала разберем важный терминологический нюанс. В 1С не существует «виртуальных регистров», существуют виртуальные таблицы, которые платформа формирует «на лету» на основании данных физических таблиц регистров. В дереве метаданных конфигуратора (слева) вы никогда не увидите объект с названием ОборотыДтКт, так как это динамическое представление, а не статический объект метаданных.

Виртуальные таблицы доступны только в контексте языка запросов. Рассмотрим, почему они могут пропадать из визуального помощника — конструктора запросов:

  1. Отсутствие необходимых настроек в метаданных: Некоторые таблицы (например, ОборотыДтКт) требуют включения специфических опций в свойствах регистра.
  2. Особенности работы расширений: Механизм заимствования объектов в расширение имеет свои строгие правила. Если объект заимствован не полностью или без учета зависимостей, виртуальные таблицы не будут сформированы конструктором.
  3. Контекст конструктора: В зависимости от того, откуда вызван конструктор запроса (из кода модуля основной конфигурации, из модуля расширения или из внешней обработки), состав доступных таблиц может меняться.

Проблема таблицы ОборотыДтКт и свойство «Корреспонденция»

Рассмотрим ситуацию, когда нам нужна конкретно таблица ОборотыДтКт. Проанализируем механику регистра бухгалтерии. Эта таблица предназначена для получения оборотов между счетами дебета и кредита (двойная запись). Однако она существует в системе только в том случае, если у регистра бухгалтерии в свойствах установлен флаг Корреспонденция.

Если этот флаг снят, платформа хранит записи регистра без жесткой связи «один дебет — один кредит» в одной строке (что характерно для некоторых видов управленческого учета), и сформировать таблицу ОборотыДтКт физически невозможно. В этом случае будут доступны только:

Если вы не видите нужную таблицу, первым делом проверим свойство Корреспонденция у регистра в основной конфигурации.

Особенности работы с регистрами в расширениях

Чаще всего виртуальные таблицы «пропадают» именно при работе в расширениях конфигурации. Выясним причину этого поведения. Для того чтобы конструктор запроса внутри расширения «увидел» виртуальную таблицу ОборотыДтКт, недостаточно просто добавить регистр бухгалтерии в расширение. Необходимо соблюсти несколько условий:

  1. Заимствование свойства «Корреспонденция»: При добавлении регистра в расширение убедимся, что свойство Корреспонденция также заимствовано и его значение совпадает с основной конфигурацией (установлено в «Истина»).
  2. Связь с Планом счетов: Регистр бухгалтерии неразрывно связан с планом счетов. Если в расширение заимствован регистр, но не добавлен соответствующий План счетов, платформа не сможет корректно инициализировать структуру виртуальных таблиц в контексте расширения. Обязательно добавим используемый план счетов в состав объектов расширения.
  3. Заимствование измерений и ресурсов: Виртуальные таблицы строятся на основании измерений (например, Подразделение, Субконто, Валюта). Если эти объекты не заимствованы, конструктор запроса может скрыть таблицы, которые не может собрать из-за неполноты метаданных.

Как проверить наличие таблиц через код

Важно понимать, что отсутствие таблицы в визуальном конструкторе запросов не всегда означает невозможность обращения к ней в коде. Проанализируем пример ручного написания запроса. Если мы напишем текст запроса вручную, он может успешно выполниться, даже если конструктор «капризничает».

Посмотрим на пример кода, который обращается к виртуальной таблице СрезПоследних регистра сведений (аналогично это работает и для регистров бухгалтерии):


// Пример ручного обращения к виртуальной таблице без использования конструктора
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   ХозрасчетныйОборотыДтКт.СчетДт,
    |   ХозрасчетныйОборотыДтКт.СчетКт,
    |   ХозрасчетныйОборотыДтКт.СуммаОборот
    |ИЗ
    |   РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&НачалоПериода, &КонецПериода) КАК ХозрасчетныйОборотыДтКт";

РезультатЗапроса = Запрос.Выполнить();

Если такой запрос выполняется без ошибок, значит, проблема носит исключительно визуальный характер в самом интерфейсе конфигуратора или конкретной версии платформы.

Практические шаги по исправлению ситуации

Если вы столкнулись с отсутствием виртуальных таблиц, выполним следующие шаги для исправления:

Шаг 1. Проверка основной конфигурации. Убедимся, что регистр бухгалтерии исправен, конфигурация базы данных обновлена и свойство Корреспонденция включено.

Шаг 2. Обновление расширения. Если работа идет в расширении, попробуем удалить регистр из расширения и заимствовать его заново. При этом важно выбирать не только сам объект, но и связанные с ним типы данных.

Шаг 3. Очистка кэша конфигуратора. Иногда метаданные в кэше «залипают». Закроем конфигуратор, удалим файлы кэша (папки Local\1C\1cv8 и Roaming\1C\1cv8 для соответствующего идентификатора базы) и запустим снова.

Шаг 4. Проверка прав доступа (RLS). Выясним, под каким пользователем запущен конфигуратор (в случае отладки) или под какими правами работает текущий сеанс. Если у пользователя нет прав на чтение измерений или самого плана счетов, виртуальные таблицы могут скрываться платформой в целях безопасности.

Шаг 5. Режим совместимости. Проверим версию платформы и режим совместимости конфигурации. В старых режимах совместимости (ниже 8.3.15) работа с регистрами в расширениях имела ряд ограничений. Если есть возможность, проверим поведение на более актуальной версии платформы.

Заключение

Мы выяснили, что «пропадание» виртуальных таблиц — это чаще всего вопрос настройки метаданных или контекста расширения. Помните, что платформа 1С строит виртуальные таблицы на основе физических данных и настроек регистра. Обеспечив корректное заимствование регистра вместе с его планом счетов и включенным свойством Корреспонденция, вы вернете доступ к таблице ОборотыДтКт в конструкторе запросов.

← На главную