Разработчики 1С часто сталкиваются с ситуацией, когда при создании или доработке формы списка в расширении, динамический список (ДС) ведет себя некорректно. Основная проблема заключается в том, что после написания или изменения произвольного запроса список доступных полей в реквизитах формы остается пустым. Даже если все необходимые объекты (справочники, документы) заимствованы в расширение, платформа «отказывается» видеть структуру запроса. Рассмотрим детально, почему это происходит и как решить данную проблему, опираясь на опыт разработчиков и специфику последних версий платформы.
Прежде всего, проанализируем технический контекст. Как показывает практика, подобное поведение наиболее характерно для ветки платформы 8.3.27. В версиях этой ветки (в частности, в релизе 8.3.27.1688) был обнаружен платформенный баг, связанный с механизмом сопоставления метаданных расширения и основной конфигурации. Суть проблемы заключается в том, что конструктор динамического списка не может корректно десериализовать схему запроса, если в ней используются заимствованные объекты, из-за чего дерево полей в конфигураторе не обновляется.
Если вы столкнулись с такой проблемой, первым делом проверьте номер установленного релиза. В официальных списках исправленных ошибок для версии 8.3.27.1719 и выше это поведение было исправлено. Однако, если обновление в данный момент невозможно, разберем альтернативные шаги и методику отладки.
Поскольку проблема носит системный характер и признана разработчиками 1С как «некорректное отображение состава полей динамического списка в режиме проектирования», наиболее надежным решением является переход на стабильный релиз. Проанализируем порядок действий:
8.3.27.1719, выполним обновление до актуального релиза (например, 8.3.27.1936).Если обновление платформы не помогло или вы используете другую версию, выясним, правильно ли подготовлены объекты для работы в динамическом списке расширения. Разберем по шагам правила заимствования:
Свойство «Основная таблица». В новых версиях платформы 1С стала более требовательна к заполнению этого свойства. Если в динамическом списке используется Произвольный запрос, обязательно проверьте, указана ли Основная таблица. Если поле пустое, платформа может не понимать, на какие права и структуры ей ориентироваться при получении списка полей.
Полнота заимствования. Иногда поля не выводятся, потому что в расширение заимствован только сам объект (например, Справочник.Номенклатура), но не заимствованы его реквизиты, используемые в тексте запроса. Попробуем добавить все используемые в запросе реквизиты в расширение явным образом. Это часто «подталкивает» платформу к правильному отображению состава полей.
Рассмотрим ситуацию, когда баг вызван некорректным кэшированием метаданных. Конфигуратор 1С хранит локальные копии описаний объектов, и при работе с расширениями этот кэш может «залипать». Выполним следующие действия:
%AppData%\Local\1C\1cv8
%AppData%\Roaming\1C\1cv8
Если поля так и не появились, попробуем метод «принудительного изменения». Платформа пересчитывает состав полей динамического списка только тогда, когда считает текст запроса измененным. Проанализируем, как можно заставить её это сделать:
ВЫБРАТЬ
// Принудительное обновление полей
Таблица.Ссылка,
Таблица.Код,
Таблица.Наименование
ИЗ
Справочник.Товары КАК Таблица
Посмотрим на ситуацию, когда в запросе используются виртуальные таблицы, такие как СрезПоследних или Остатки. В ветке 8.3.27 наблюдается специфическое поведение: поля таких таблиц могут не отображаться, пока само расширение не будет проверено на целостность. Рекомендуется выполнить команду «Конфигурация» — «Расширения конфигурации» — «Проверить применимость всех расширений». Если проверка проходит успешно, но полей нет, попробуйте временно заменить виртуальную таблицу на физическую, сохранить запрос, а затем вернуть виртуальную таблицу обратно.
Подводя итог, можно сказать, что в 90% случаев проблема в расширениях на версии 8.3.27 решается именно обновлением платформы до релиза 8.3.27.1719 или старше, так как это признанная ошибка разработчика. Остальные методы (очистка кэша и пересохранение запроса) являются вспомогательными и помогают при локальных сбоях метаданных.