Почему реквизиты расширения не видны в конструкторе запросов и как это исправить

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

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

Анализ причины: ограничения платформы и версии

Разберем ситуацию, описанную пользователем. В конфигурации УТ 11.5.12.80 добавлены новые поля в документ РеализацияТоваровУслуг через механизм расширений. При попытке составить запрос в Конфигураторе эти поля отсутствуют в списке доступных. Проблема заключается в том, что долгое время в платформе 8.3 существовало технологическое ограничение: Конструктор запроса в Конфигураторе работал только с метаданными основной конфигурации, игнорируя состав расширений.

Проанализируем программный код, который вызывает ошибку:


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

В данном примере поля ТранспортнаяНакладнаяНомер, ТранспортнаяНакладнаяДата и НачальныйНомерМеста добавлены в расширении. При открытии конструктора система выдаст ошибку: "Поле не найдено". Однако, если запустить этот код в режиме "Предприятие", он успешно сработает. Выясним, как эффективно работать в таких условиях.

Решение 1: Использование консоли запросов в режиме «Предприятие»

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

Рассмотрим алгоритм действий:

  1. Запустите информационную базу в режиме 1С:Предприятие.
  2. Откройте Консоль запросов (желательно из состава БСП или расширенную версию с порталов для разработчиков).
  3. В окне ввода текста запроса нажмите правую кнопку мыши (ПКМ) и выберите пункт «Конструктор запроса».
  4. В этом конструкторе вы увидите все реквизиты расширения. Сформируйте нужный запрос.
  5. Скопируйте полученный текст запроса и перенесите его в код модуля в Конфигураторе.

Важный момент: если в консоли запросов вы не видите кнопку конструктора на панели инструментов, попробуйте именно контекстное меню в области текста. Большинство типовых консолей (например, из состава БСП) поддерживают вызов конструктора именно так.

Решение 2: Обновление платформы до 8.3.23 и выше

Хорошие новости для разработчиков: компания «1С» устранила этот недостаток. Начиная с версий платформы 8.3.23.1681 и выше, конструктор запроса в Конфигураторе научился работать с объектами расширений. Если ваша версия платформы ниже (например, как в обсуждаемой теме 8.3.22.2106), рекомендуем рассмотреть возможность обновления.

После обновления проверьте следующие условия:

Решение 3: Программное формирование и ручная правка

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

  1. Создайте «заготовку» запроса в конструкторе, выбрав только стандартные поля.
  2. Закройте конструктор, сохранив текст.
  3. Допишите названия полей из расширения вручную, соблюдая синтаксис (например, ИмяТаблицы.ИмяПоля).
  4. Ни в коем случае не открывайте конструктор запроса повторно для этого текста, иначе он «выбросит» неизвестные ему поля из текста запроса.

Вопрос сохранности данных и реструктуризации

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

В современных версиях платформы (8.3.15+) данные расширений хранятся в физических таблицах СУБД рядом с основными таблицами (обычно с суффиксами вида _X1). При обычном обновлении или реструктуризации данные сохраняются. Однако существуют критические сценарии, когда данные могут быть потеряны:

Важность использования префиксов

Рассмотрим ситуацию: вы добавили в расширение реквизит ТранспортнаяНакладнаяНомер. Спустя полгода фирма «1С» выпускает официальное обновление УТ, где в документе появляется реквизит с точно таким же именем. При попытке обновиться возникнет конфликт имен, который может привести к невозможности подключения расширения и потере доступа к вашим данным.

Золотое правило разработки в расширениях: всегда используйте уникальные префиксы для своих объектов и реквизитов. Вместо ТранспортнаяНакладнаяНомер используйте, например, ит_ТранспортнаяНакладнаяНомер (где «ит» — префикс вашей компании). Это гарантирует, что ваше поле никогда не пересечется с типовыми полями 1С.

Выводы и рекомендации

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

Соблюдение этих правил позволит вам избежать «геморроя», о котором упоминают участники форума, и сделает процесс перехода с устаревших систем (типа УТ 10.3) более стабильным и предсказуемым.

← На главную