При работе с конфигурациями на обычных формах, такими как Управление торговлей 10.3 или Управление производственным предприятием 1.3, разработчики часто сталкиваются с неприятной ситуацией: после очередного обновления с формы элемента справочника Номенклатура исчезают привычные реквизиты, такие как СтавкаНДС, ЕдиницаХраненияОстатков и другие. При этом в метаданных самого справочника реквизиты присутствуют, а при попытке добавить их на форму вручную система выдает ошибку о неуникальности имени. Это говорит о том, что элементы на форме есть, но они стали невидимыми или «уехали» за пределы видимости.
В данной статье мы разберем причины возникновения этой проблемы, связанные с внедрением функционала маркировки (ИС МП), и пошагово рассмотрим способы восстановления интерфейса формы.
Проанализируем ситуацию: почему элементы управления «прячутся»? Основная причина кроется в механизме автоматического объединения форм при обновлении конфигурации. В последних релизах 1С активно внедряет поддержку системы «Честный знак» (маркировка товаров). Для этого на форму номенклатуры добавляются новые контейнеры — панели и страницы для настройки частичного выбытия и других специфических параметров маркируемой продукции.
Во время процесса «Сравнения и объединения» конфигураций, координаты существующих элементов (таких как СтавкаНДС) могут некорректно пересчитаться. В результате элементы оказываются «захвачены» новыми панелями-родителями. Если эти панели по умолчанию скрыты (например, программно выключаются в процедуре ПриОткрытии для товаров, не подлежащих маркировке), то и все вложенные в них реквизиты также исчезают из поля зрения пользователя.
Рассмотрим наиболее распространенный случай, когда реквизиты перемещаются в область новых настроек маркировки. Разберем этот процесс по шагам:
Номенклатура в конфигураторе.ПанельНастройкиЧастичногоВыбытия (она может быть наложена поверх других элементов).СтавкаНДС, НоменклатурнаяГруппа и другие.Если визуально на форме найти «пропажу» не удается, проанализируем структуру формы через специализированный инструмент. Посмотрим, как найти элемент по имени, если он скрыт глубоко в иерархии.
Для этого выполним следующие действия:
СтавкаНДС.СтавкаНДС1, значит, вы уже пытались добавить новый элемент. Нам же нужно найти оригинал без индекса «1».Лево и Верх. Если там указаны огромные значения (например, 2000) или отрицательные числа, элемент находится за границами видимости. Установим значения 0, чтобы он появился в левом верхнем углу родительского контейнера.Рассмотрим ситуацию, когда разработчик пытается «починить» форму, копируя реквизиты из конфигурации поставщика. Почему это плохая практика в данном случае? Когда вы вставляете объект, система проверяет коллекцию ЭлементыФормы. Поскольку «пропавший» реквизит физически присутствует в этой коллекции (хоть он и не виден), 1С автоматически добавляет единицу к имени нового элемента, чтобы избежать конфликта.
Проанализируем последствия: даже если вы переименуете СтавкаНДС1 обратно в СтавкаНДС, предварительно удалив старый элемент, вы можете нарушить программную логику. В модуле формы часто встречаются обращения к элементам напрямую:
ЭлементыФормы.СтавкаНДС.Доступность = Ложь;
ЭлементыФормы.СтавкаНДС.ТолькоПросмотр = Истина;
Если вы удаляете старый элемент и создаете новый, его внутренний идентификатор меняется, а также могут сброситься настройки привязок и событий (ПриИзменении, НачалоВыбора). Поэтому всегда лучше найти и переместить оригинальный элемент, чем создавать его дубликат.
В обычных формах существует понятие слоев (Layers). Рассмотрим вероятность того, что реквизиты были случайно перенесены на неактивный слой.
Слой.После того как вы нашли и вернули элементы на место, рекомендуем проверить привязки. В обычных формах это критически важно для корректного отображения при изменении размеров окна. Щелкните правой кнопкой мыши по возвращенному элементу, выберите «Установить привязки» и убедитесь, что он жестко закреплен за соответствующими границами формы или соседними элементами.
Также стоит заглянуть в модуль формы и найти процедуры ПриОткрытии или ОбновитьФорму. Проанализируем код на наличие конструкций, управляющих видимостью:
Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьМаркировку") Тогда
ЭлементыФормы.ПанельНастройкиЧастичногоВыбытия.Видимость = Ложь;
КонецЕсли;
Если ваши реквизиты остались внутри этой панели, они будут исчезать в режиме «Предприятие», даже если в конфигураторе вы их видите. Перенос элементов в основной корень формы (ЭтаФорма) решает эту проблему окончательно.