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

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

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

Причины возникновения ошибки

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

Способ 1: Настройка связей через «Движения»

Самый правильный архитектурный подход — указать платформе, что документ является регистратором конкретного регистра. Без этого расширение просто не «видит» метаданные регистратора в нужном контексте.

  1. Откройте ваше расширение в Конфигураторе.
  2. Найдите нужный документ в дереве метаданных расширения.
  3. Перейдите в свойства документа (ПКМ — Свойства).
  4. Найдите поле Движения и нажмите на него.
  5. В открывшемся окне установите галочку напротив того Регистра накопления, который вы используете в запросе.

Это действие говорит платформе: «Этот документ делает движения по этому регистру», что позволяет конструктору запросов корректно распознавать поле Регистратор.

Способ 2: Заимствование реквизитов и документов

Если после настройки движений ошибка сохраняется, убедитесь, что все объекты заимствованы в расширение:

Способ 3: Использование оператора ВЫРАЗИТЬ

Поле Регистратор имеет составной тип данных. Когда вы обращаетесь к реквизиту напрямую, 1С пытается найти его у всех типов документов, входящих в состав регистратора. Если хотя бы у одного документа реквизит отсутствует, возникнет ошибка. Чтобы этого избежать, используйте конструкцию ВЫРАЗИТЬ.

Вместо прямого обращения используйте следующий подход:


ВЫБРАТЬ
    ВЫРАЗИТЬ(Обороты.Регистратор КАК Документ.ЗаказКлиента).ДокументОснование КАК Основание
ИЗ
    РегистрНакопления.РасчетыСКлиентами.Обороты КАК Обороты

Это принудительно указывает системе, какой тип данных мы ожидаем, и исключает ошибку при проверке метаданных.

Способ 4: Программное формирование запроса

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

В модуле формы в процедуре ПриСозданииНаСервере выполните:


Запрос = Новый Запрос;
Запрос.Текст = "...ваш текст запроса...";
Результат = Запрос.Выполнить();
Список.ТекстЗапроса = Запрос.Текст;

Рекомендация по архитектуре запросов

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

Попробуйте переписать запрос так, чтобы Регистр накопления был основной таблицей, а данные из документов подтягивались через ЛЕВОЕ СОЕДИНЕНИЕ по полю Регистратор.

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

← На главную