При разработке в среде 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда добавленные через расширение реквизиты объектов (справочников, документов) наотрез отказываются появляться в дереве выбора Конструктора запросов. Рассмотрим, почему это происходит, как обойти это ограничение на разных версиях платформы и как обеспечить сохранность данных в таких реквизитах.
Разберем ситуацию, описанную пользователем. В конфигурации УТ 11.5.12.80 добавлены новые поля в документ РеализацияТоваровУслуг через механизм расширений. При попытке составить запрос в Конфигураторе эти поля отсутствуют в списке доступных. Проблема заключается в том, что долгое время в платформе 8.3 существовало технологическое ограничение: Конструктор запроса в Конфигураторе работал только с метаданными основной конфигурации, игнорируя состав расширений.
Проанализируем программный код, который вызывает ошибку:
Функция ТекстЗапросаПоШапке()
Запрос = Новый Запрос;
Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Организация,
| РеализацияТоваровУслуг.ТранспортнаяНакладнаяНомер,
| РеализацияТоваровУслуг.ТранспортнаяНакладнаяДата,
| РеализацияТоваровУслуг.НачальныйНомерМеста
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Ссылка = &ДокументОснование";
Возврат Текст;
КонецФункции
В данном примере поля ТранспортнаяНакладнаяНомер, ТранспортнаяНакладнаяДата и НачальныйНомерМеста добавлены в расширении. При открытии конструктора система выдаст ошибку: "Поле не найдено". Однако, если запустить этот код в режиме "Предприятие", он успешно сработает. Выясним, как эффективно работать в таких условиях.
Посмотрим на ситуацию со стороны режима пользователя. В отличие от Конфигуратора, запущенное приложение работает с компилированной моделью метаданных, в которой основная конфигурация и все подключенные расширения уже объединены в единое целое. Поэтому в режиме «Предприятие» любая современная консоль запросов «увидит» ваши реквизиты.
Рассмотрим алгоритм действий:
Важный момент: если в консоли запросов вы не видите кнопку конструктора на панели инструментов, попробуйте именно контекстное меню в области текста. Большинство типовых консолей (например, из состава БСП) поддерживают вызов конструктора именно так.
Хорошие новости для разработчиков: компания «1С» устранила этот недостаток. Начиная с версий платформы 8.3.23.1681 и выше, конструктор запроса в Конфигураторе научился работать с объектами расширений. Если ваша версия платформы ниже (например, как в обсуждаемой теме 8.3.22.2106), рекомендуем рассмотреть возможность обновления.
После обновления проверьте следующие условия:
Если обновление невозможно, а консоль недоступна, используйте ручную правку. Помните, что платформа 1С позволяет обращаться к полям расширения в тексте запроса, просто Конфигуратор подсвечивает их как ошибку. Чтобы минимизировать риск опечаток, придерживайтесь следующей методики:
ИмяТаблицы.ИмяПоля).Проанализируем опасения по поводу потери данных при реструктуризации таблиц расширения. Многие разработчики старой закалки опасаются хранить данные в расширениях, предпочитая снимать основную конфигурацию с замка. Выясним, обоснован ли этот страх сегодня.
В современных версиях платформы (8.3.15+) данные расширений хранятся в физических таблицах СУБД рядом с основными таблицами (обычно с суффиксами вида _X1). При обычном обновлении или реструктуризации данные сохраняются. Однако существуют критические сценарии, когда данные могут быть потеряны:
Рассмотрим ситуацию: вы добавили в расширение реквизит ТранспортнаяНакладнаяНомер. Спустя полгода фирма «1С» выпускает официальное обновление УТ, где в документе появляется реквизит с точно таким же именем. При попытке обновиться возникнет конфликт имен, который может привести к невозможности подключения расширения и потере доступа к вашим данным.
Золотое правило разработки в расширениях: всегда используйте уникальные префиксы для своих объектов и реквизитов. Вместо ТранспортнаяНакладнаяНомер используйте, например, ит_ТранспортнаяНакладнаяНомер (где «ит» — префикс вашей компании). Это гарантирует, что ваше поле никогда не пересечется с типовыми полями 1С.
Подводя итог, можно сказать, что работа с реквизитами в расширениях — это современный и правильный путь, позволяющий оставить основную конфигурацию на поддержке. Для комфортной работы:
Соблюдение этих правил позволит вам избежать «геморроя», о котором упоминают участники форума, и сделает процесс перехода с устаревших систем (типа УТ 10.3) более стабильным и предсказуемым.