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