Почему не добавляется колонка в форму списка из расширения в 1С?

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

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

1. Ошибки конкретных релизов платформы (в частности 8.3.22)

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

Решение: Если обновить платформу до стабильного релиза нет возможности, применим обходной путь — программное создание элементов формы. Рассмотрим, как это сделать в обработчике ПриСозданииНаСервере:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    НовыйЭлемент = Элементы.Добавить("Расш1_Статус", Тип("ПолеФормы"), Элементы.Список);
    НовыйЭлемент.Вид = ВидПоляФормы.ПолеВвода;
    НовыйЭлемент.ПутьКДанным = "Список.Расш1_Статус";
    НовыйЭлемент.Заголовок = "Статус (Расш)";
КонецПроцедуры

2. Программное переопределение запроса в типовой конфигурации

Во многих современных конфигурациях, таких как ERP, УТ 11 или Комплексная автоматизация, текст запроса динамического списка может программно переопределяться в модуле формы. Это происходит после того, как отрабатывают базовые механизмы применения вашего расширения. В итоге платформа выполняет оригинальный или сгенерированный типовым кодом запрос, затирая добавленный вами реквизит.

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

3. Особенности работы со «Схемой запроса» в расширении

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

Решение: Рекомендуется модифицировать запрос программно через объект СхемаЗапроса. Посмотрим на пример, как можно аккуратно добавить нужное поле в динамический список:


&НаСервере
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Схема = Новый СхемаЗапроса;
    Схема.УстановитьТекстЗапроса(Список.ПроизвольныйЗапрос ? Список.ТекстЗапроса : ПолучитьТекстЗапросаСписка(Список));
    // Добавляем нужное поле в выборку
    Схема.ПакетЗапросов[0].Колонки.Добавить("Документ.Расш1_Статус", "Статус");
    Список.ТекстЗапроса = Схема.ПолучитьТекстЗапроса();
КонецПроцедуры

4. Перенос реквизитов Динамического списка в расширение

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

Решение: В дереве реквизитов формы (в конфигураторе расширения) развернем ветку динамического списка. Найдем новые поля/реквизиты. Если они отображаются серым цветом, кликнем по ним правой кнопкой мыши и выберем пункт «Добавить в расширение». Только после этого платформа начнет полноценно с ними работать.

5. Пользовательские настройки формы и кэширование

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

  1. Зайдем в пользовательском режиме в нужный список документов.
  2. Перейдем в меню «Еще» -> «Изменить форму» и проверим, есть ли там новая колонка (возможно, для нее просто не стоит галочка видимости).
  3. Если колонки нет или она ведет себя странно, нажмем «Еще» -> «Стандартные настройки». Это сбросит форму к изначальному виду, заложенному в конфигурации и расширении.
  4. В крайнем случае, выполним очистку кэша 1С на локальном компьютере пользователя.

6. Настройки безопасного режима и права доступа (RLS)

Даже если у вас отключены свойства БезопасныйРежим и Защита в самом расширении, могут сработать ограничения прав на уровне ролей. Если пользователю не назначены права на чтение и просмотр нового реквизита документа, добавленного в расширении, платформа молча скроет колонку из формы списка, не выдавая никаких сообщений об ошибке.

Решение: Обязательно проверим роли, добавленные в расширение. Выясним, установлены ли права на просмотр и чтение реквизита Статус для тех ролей, под которыми работает конечный пользователь.

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

← На главную