Работа с расширениями в среде 1С:Предприятие 8.3 — это стандарт де-факто для современной разработки. Однако часто программисты сталкиваются с ситуацией, когда изменения, внесенные в конфигураторе (например, добавление колонки в список документов), упорно не желают отображаться в пользовательском режиме. Рассмотрим подробнее, почему так происходит, и разберем по шагам алгоритм диагностики и решения этой проблемы.
Прежде чем погружаться в глубокую отладку кода, нам необходимо исключить самый простой фактор — пользовательские настройки. Платформа 1С сохраняет состояние формы (видимость колонок, их порядок, ширину) для каждого пользователя индивидуально. Если вы добавили колонку в расширении, она может быть скрыта в текущем пользовательском представлении.
Для решения этой задачи выполним следующие действия:
Это действие сбросит кэш настроек формы в базе данных и заставит платформу отрисовать форму в соответствии с актуальными метаданными расширения.
Проанализируем ситуацию, когда расширение может формально быть в списке, но фактически не применяться к конкретному объекту. Выясним причину через мониторинг состояния:
Если расширение активно, но изменений нет, попробуем очистить локальный кэш конфигурации. Для этого можно перезапустить базу с параметром /ClearCache или вручную удалить содержимое папок в каталоге %LOCALAPPDATA%\1C\1Cv8.
Это одна из самых неочевидных причин. В типовых конфигурациях (ERP, УТ 11, КА) практически каждый реквизит связан с какой-либо Функциональной опцией (ФО). Если вы добавили поле, которое в основной конфигурации завязано на выключенную опцию, платформа автоматически скроет колонку, даже если вы принудительно вывели ее на форму в расширении.
Проверим настройки:
Часто в типовых решениях динамический список (DynamicList) — это не просто статичный запрос, прописанный в свойствах. Платформа или логика конфигурации может полностью переопределять свойство Список.ТекстЗапроса в момент создания формы. Если программа программно назначает новый текст запроса, все ваши визуальные правки в расширении будут проигнорированы.
Разберем, как это найти. Нам нужно поставить точку останова в модуле формы в процедуре ПриСозданииНаСервере в самом конце. В табло (Shift+F9) вычислим выражение:
Сообщить(Список.ТекстЗапроса);
Если в выведенном тексте отсутствует ваше добавленное поле, значит, запрос перетирается. Ищите вызовы в общих модулях, таких как СпискиВызовСервера.УстановитьТекстЗапроса или ОбщегоНазначенияУТ.ПриСозданииНаСервере. В этом случае вам придется также через расширение перехватывать процедуру формирования запроса (используя &После или &Вместо) и внедрять свое поле в текст запроса программно.
Платформа 1С выполняет оптимизацию запросов к базе данных. Если поле добавлено в запрос динамического списка, но не отображается визуально (например, вы добавили его только в Данные, но не в Элементы), или если алгоритм отрисовки считает его лишним, поле не будет выбрано из БД.
Чтобы гарантировать наличие данных в колонке, выполним следующие шаги:
Это заставит платформу включать поле в SELECT-часть запроса независимо от настроек видимости элементов формы.
Выясним, не блокируется ли доступ к данным на уровне прав. Даже если у пользователя «Полные права», расширение имеет собственный контур безопасности. Если вы добавили новый реквизит в расширение, на него должны быть назначены права в рамках этого же расширения. Если поле заимствовано, убедитесь, что в расширении не переопределены роли, которые могут ограничивать чтение этого конкретного поля.
Если в базе установлено несколько расширений, они накладываются друг на друга в порядке их приоритета (номера в списке расширений). Рассмотрим ситуацию:
В некоторых случаях (особенно при использовании &Вместо для формы целиком, что крайне не рекомендуется) одно расширение может полностью «затереть» изменения другого. Попробуйте временно отключить другие расширения, чтобы убедиться, что конфликт отсутствует.
Проанализируем код формы на предмет строк, управляющих свойством Видимость или ПользовательскаяВидимость. Часто в типовых конфигурациях существует «управленческая» логика, которая скрывает колонки в зависимости от прав или настроек параметров учета.
Используйте глобальный поиск по конфигурации (Ctrl+Shift+F) по имени элемента формы (например, Элементы.МояНоваяКолонка). Если вы найдете код вида:
Элементы.МояНоваяКолонка.Видимость = Ложь;
То станет понятно, почему колонка пропадает после открытия. Вам потребуется внести изменения в эту логику через расширение.
Появление колонки в динамическом списке — это результат совпадения трех факторов: корректных метаданных в расширении, отсутствия программного «затирания» запроса и включенных функциональных опций. Последовательно проверяя каждый из этих пунктов, вы обязательно найдете причину, по которой колонка не отображается на форме.