При сопровождении и доработке типовых конфигураций (например, 1С:ERP Управление предприятием) разработчики нередко сталкиваются с ситуацией, когда стандартные реквизиты документов неожиданно исчезают из пользовательского интерфейса. В режиме конфигуратора реквизит присутствует в метаданных и выведен на форму, однако в режиме предприятия поле отсутствует на форме, а также полностью пропадает из структуры данных формы Объект. При этом реквизит не связан с функциональными опциями и не отображается даже через стандартную команду настройки интерфейса Изменить форму.
Проанализируем природу этой неполадки, разберем внутренние механизмы платформы «1С:Предприятие 8.3» и рассмотрим пошаговые способы диагностики и устранения ошибки.
Для понимания причин такого поведения необходимо изучить алгоритм построения управляемой формы. В платформе 1С действует механизм защитной инициализации элементов интерфейса:
Когда сервер формирует структуру управляемой формы, он проверяет валидность всех связанных реквизитов. Если тип реквизита поврежден, ссылается на недоступный объект метаданных или конфликтует с определением типа, платформа намеренно не выбрасывает критическую ошибку с аварийным завершением работы сеанса. Вместо этого срабатывает механизм отсечения: проблемный элемент исключается из дерева элементов формы, а соответствующий реквизит удаляется из контекста данных Объект.
Аналогичное поведение наблюдается в случаях, когда реквизит имеет составной тип или ссылается на определяемый тип (например, ОпределяемыйТип.GLN), который в подключенном расширении конфигурации переопределен с другим составом типов или ссылается на метаданные, к которым у пользователя нет прав на чтение.
Выясним причину, которая чаще всего приводит к исчезновению полей с типом GLN (например, «GLN организации», «GLN контрагента») и других подобных реквизитов. Главным источником проблемы является некорректное заимствование определяемого типа в расширение конфигурации:
Строка вместо ссылки, либо урезан состав составного типа).Рассмотрим важные платформенные нюансы, связанные с расширениями и определяемыми типами:
Версия режима совместимости: Полноценная поддержка переопределения и изменения состава определяемых типов через механизм расширений была реализована только начиная с версии платформы 8.3.20. Если конфигурация работает в режиме совместимости ниже 8.3.20, попытка модифицировать определяемый тип в расширении неизбежно приводит к труднодиагностируемым сбоям интерфейса и структуры данных.
Права доступа: Если определяемый тип расширяется ссылочными типами данных, отсутствие у текущей роли пользователя прав Чтение или Просмотр на добавленный объект метаданных приведет к тому, что платформа скроет весь реквизит целиком.
Разберем по шагам порядок действий для восстановления нормального отображения реквизитов.
Проверим все подключенные к информационной базе расширения:
GLN).В зависимости от архитектурных задач выберем один из вариантов:
Вариант А (если определяемый тип попал в расширение случайно): Удалим объект GLN из расширения конфигурации. Это наиболее частое и простое решение, полностью восстанавливающее типовое поведение реквизитов.
Вариант Б (если переопределение типа действительно необходимо): Приведем типы в расширении в полное соответствие с логикой конфигурации:
После внесения изменений в расширение необходимо сбросить кэшированную структуру данных платформы. На практике метаданные расширений могут застревать в локальном кэше клиента и сервера 1С, продолжая скрывать элементы даже после корректного исправления метаданных. Перезапустим сеанс «1С:Предприятия» с очисткой временных файлов пользователя или запуском с ключом /ClearCache.
Если в рамках доработки требуется хранить данные иного формата, но изменять типовой определяемый тип нежелательно из-за риска конфликтов при обновлениях, применим следующие проектные решения: