При разработке в среде 1С часто возникает ситуация: программист добавляет новый реквизит в объект метаданных и выносит его на форму в конфигураторе, однако при запуске клиентского приложения поле остается невидимым. Эта проблема становится особенно актуальной в комплексных решениях, таких как связка 1С:Управление торговлей (УТ 11) и 1С:CRM. Разберем пошагово, почему это происходит и как найти "пропавшее" поле.
Проанализируем наиболее вероятную причину, с которой столкнулся автор темы. В сложных конфигурациях один и тот же справочник (например, Партнеры) может иметь несколько форм элемента. Модули расширения или сторонние компоненты (в данном случае модуль CRM от "Рарус") могут программно подменять стандартную форму ФормаЭлемента на свою собственную.
Рассмотрим, как это проверить. В пользовательском режиме, открыв карточку партнера, перейдем в меню "Сервис и настройки" -> "Функции для технического специалиста" (или через "О программе"), чтобы понять контекст. Однако самый надежный способ — это использование отладки. Разберем алгоритм действий:
Партнеры в процедуре ОбработкаПолученияФормы.ИмяФормы.CRM_Модуль_ФормаЭлементаРеквизитыКонтрагента.Если мы вносили изменения в ФормаЭлемента, а система использует форму из другого модуля, наши изменения ожидаемо не будут видны. Решением в данном случае будет перенос реквизита на ту форму, которую фактически использует система.
Если форма выбрана верно, проанализируем программный код. В типовых решениях 1С видимость элементов часто управляется динамически. Выясним, не скрывается ли наш реквизит в процедуре ПриСозданииНаСервере или сопутствующих ей методах.
Часто в конфигурациях встречается цикл, который обходит все элементы определенной группы и выставляет им видимость на основании прав доступа или функциональных опций. Посмотрим на пример кода, который может скрывать элементы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Пройдемся по элементам группы "ГруппаДополнительно"
Для Каждого ЭлементФормы Из Элементы.ГруппаДополнительно.ПодчиненныеЭлементы Цикл
// Если реквизит не входит в список разрешенных, скрываем его
ЭлементФормы.Видимость = ПроверитьДоступностьРеквизита(ЭлементФормы.Имя);
КонецЦикла;
КонецПроцедуры
Если ваш новый реквизит попал в такую группу, он может быть скрыт алгоритмом, который "не знает" о существовании нового поля. Проверьте, в какую именно группу (родительский элемент) вы поместили реквизит в конфигураторе.
В современных версиях платформы 8.3.12 и выше активно используются расширения. Рассмотрим ситуацию: если форма справочника Партнеры заимствована в расширение и там она модифицирована, то приоритет будет иметь именно форма из расширения.
Выясним, есть ли в вашей базе активные расширения. Если форма в расширении установлена как основная, то любые изменения в основной конфигурации будут игнорироваться платформой. В этом случае необходимо добавить реквизит в расширение и разместить его на форме именно там. Помните о свойстве "Заимствование": реквизит должен быть правильно сопоставлен с объектом основной конфигурации.
Иногда причина кроется не в коде, а в сохраненных настройках конкретного пользователя. Платформа 1С сохраняет состояние формы (расположение полей, их видимость) для каждого сотрудника. Если пользователь ранее нажимал "Изменить форму" и сохранял настройки, новый реквизит может по умолчанию попасть в список скрытых.
Выполним следующие действия для проверки:
Если после сброса настроек реквизит появился, значит, проблема была в кэше пользовательских настроек интерфейса.
Проанализируем свойства самого реквизита на форме в конфигураторе. В палитре свойств обратите внимание на два важных пункта:
Стоит учитывать, что в связке УТ + CRM сущности Партнер и Контрагент тесно взаимосвязаны, но являются разными справочниками. Рассмотрим типичную ошибку: разработчик добавляет реквизит в справочник Партнеры, но пытается вывести его на форму, которая в данный момент отображает данные Контрагента (или наоборот).
В CRM-системах от "Рарус" часто используется механизм динамического построения интерфейса. Некоторые поля добавляются на форму не в конфигураторе, а программно из специальных регистров настроек CRM. Проверьте раздел "Настройки CRM", возможно, там требуется зарегистрировать новый реквизит для его корректного отображения в интерфейсе.
Если все вышеперечисленные методы не помогли, проанализируем техническую сторону работы сервера. Бывают редкие случаи, когда сервер приложений 1С "зависает" на старой версии метаданных. В такой ситуации помогает перезапуск службы 1C:Enterprise 8.3 Server Agent или полная очистка серверного кэша (папка snccntx в каталоге сервера). Это заставит систему заново перечитать структуру форм и объектов из базы данных.
Подводя итог, можно сказать, что в 90% случаев проблема отсутствия реквизита в УТ + CRM связана с подменой форм или использованием расширений. Всегда начинайте диагностику с определения реального имени открываемой формы в режиме отладки.