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