Почему не замещаются формы при обновлении нетиповой конфигурации 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При обновлении нетиповых конфигураций 1С разработчики часто сталкиваются со следующей проблемой: выполняется сравнение и объединение конфигураций, устанавливаются все необходимые флажки напротив измененных форм справочников или документов, запускается процесс обновления, но после его завершения формы остаются прежними (нетиповыми). При этом платформа не выдает никаких ошибок, а в окне сравнения эти объекты по-прежнему отображаются как измененные.

В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем неочевидные технические нюансы работы платформы 1С и рассмотрим пошаговые сценарии для приведения форм к типовому виду.

Причина 1. Изменение длины стандартных реквизитов (длины наименования или кода)

Выясним очень важную взаимосвязь между метаданными объекта и его визуальными формами. На практике часто случается, что в процессе доработки конфигурации увеличивают длину кода или длину наименования справочника (например, стандартная длина наименования была 25 символов, а ее увеличили до 150).

Если длина наименования в вашей конфигурации отличается от длины наименования в конфигурации поставщика, то при попытке заместить форму платформа автоматически пытается адаптировать элементы формы под текущую структуру данных вашей конфигурации. В результате форма программно перегенерируется под измененную длину реквизита и снова помечается системой как «нестандартная». Чтобы решить эту проблему, необходимо сначала привести все базовые свойства метаданных объекта (длину наименования, длину кода, типы стандартных реквизитов) в полное соответствие с типовой конфигурацией поставщика, и только после этого выполнять повторное объединение формы.

Причина 2. Использование режима «Объединить» вместо «Взять из файла»

Рассмотрим, как работает механизм сравнения и объединения. По умолчанию для измененных объектов конфигуратор предлагает режим объединения «Объединить». В этом режиме платформа пытается сопоставить структуру старой формы и новой формы, «сливая» их элементы воедино. Из-за этого старые нетиповые реквизиты и элементы формы никуда не исчезают.

Для того чтобы полностью затереть старую форму и сделать её идентичной типовой, выполним следующие шаги:

  1. В окне сравнения и объединения найдем нужную форму справочника или документа.
  2. Кликнем по колонке «Режим объединения» напротив этой формы.
  3. Изменим значение по умолчанию с «Объединить» на «Взять из файла» (или «Заместить», в зависимости от версии платформы). При таком режиме старая форма будет полностью удалена, а на её место запишется чистая типовая форма из конфигурации поставщика.

Причина 3. Рассогласование уникальных идентификаторов (UUID)

Проанализируем ситуацию, когда форму в процессе прошлых обновлений или доработок удаляли, а затем создавали заново вручную или копировали из другой базы. В этом случае, даже если визуально и по структуре форма кажется абсолютно идентичной типовой, её внутренний уникальный идентификатор (UUID) изменился. Платформа при автоматическом сравнении не может сопоставить объекты с разными идентификаторами.

Чтобы восстановить связь и успешно обновить форму, выполним ручное сопоставление:

  1. В окне сравнения и объединения найдем нашу форму в дереве основной конфигурации и аналогичную форму в конфигурации поставщика.
  2. Нажмем правой кнопкой мыши по форме в левой части окна.
  3. В контекстном меню выберем пункт «Установить соответствие объектов вручную».
  4. Укажем соответствующую форму из правой части (конфигурации поставщика) и подтвердим операцию. После этого галочки обновления отработают корректно.

Причина 4. Раздельное сравнение дерева элементов и модуля управляемой формы

Управляемая форма физически состоит из двух основных частей: декларативного дерева элементов (визуальный интерфейс) и модуля формы (программный код на встроенном языке). В окне сравнения-объединения эти составляющие можно настраивать отдельно.

Если вы установили общую галочку на форму, но при этом в детальных настройках сравнения модуля (которые вызываются нажатием на кнопку с изображением шестеренки напротив формы) установлен приоритет основной конфигурации или сняты флаги с измененных процедур и функций, то визуальная часть формы обновится, а её программный код останется старым. Разберем по шагам, как это исправить:

  1. В окне сравнения дважды кликнем по строке с формой, чтобы открыть детальное окно сравнения модулей.
  2. Убедимся, что все галочки на перенос процедур из конфигурации поставщика активны.
  3. При необходимости установим режим «Взять полностью из конфигурации поставщика» для текста модуля формы.

Причина 5. Не установлена основная форма в свойствах объекта

Иногда замещение самой формы в конфигураторе проходит успешно, но при запуске сеанса в режиме «1С:Предприятие» пользователи по-прежнему видят старый интерфейс. Это может происходить из-за того, что в свойствах самого справочника в качестве основной формы указана совсем другая (например, альтернативная или ранее созданная разработчиком форма).

Проверим свойства объекта метаданных:

  1. Откроем свойства справочника (клик правой кнопкой мыши по справочнику — Свойства).
  2. Перейдем на вкладку «Формы».
  3. Посмотрим на поля ОсновнаяФормаСписка, ОсновнаяФормаОбъекта и ОсновнаяФормаВыбора.
  4. Убедимся, что в этих полях выбраны именно те типовые формы, которые мы обновляли, а не сторонние нетиповые объекты.

Причина 6. Влияние расширений конфигурации

Современные базы 1С активно используют механизм расширений. Если обновляемая форма была ранее заимствована в какое-либо активное расширение конфигурации, то любые изменения, вносимые в основную конфигурацию при обновлении, не отобразятся в режиме «1С:Предприятие». Расширение всегда имеет наивысший приоритет при компиляции интерфейса платформой.

Для устранения этой проблемы выполним следующие действия:

  1. Перейдем в меню Конфигурация — Расширения конфигурации.
  2. Проанализируем состав каждого расширения на предмет заимствованной формы.
  3. Если форма там присутствует, ее необходимо либо удалить из расширения (если доработки больше не актуальны), либо вручную перенести изменения из обновленной основной конфигурации в форму внутри расширения.

Причина 7. Отсутствие флага разрешения удаления объектов

Если в новой типовой форме поставщика были полностью удалены какие-то элементы, реквизиты или обработчики событий, которые присутствовали в вашей старой форме, то при обычном объединении они могут остаться «висеть» в структуре формы. Это происходит в том случае, если в глобальных настройках сравнения выключена опция удаления.

Перед запуском объединения обязательно проверим этот флаг:

  1. В окне сравнения и объединения нажмем на кнопку «Параметры» (или «Настройки»).
  2. Убедимся, что установлена галочка «Разрешить удаление объектов основной конфигурации». Без этого флага конфигуратор не сможет удалить устаревшие элементы формы, и она не примет чистый типовой вид.

Причина 8. Кэширование настроек внешнего вида у пользователей

Если в конфигураторе форма гарантированно обновилась и выглядит как типовая, но конкретный пользователь продолжает видеть старое расположение полей, проблема заключается в кэшировании индивидуальных настроек окон в информационной базе. Платформа 1С сохраняет персональные настройки формы (видимость колонок, ширину полей, положение панелей) для каждого пользователя.

Чтобы сбросить эти настройки и вернуть форму к стандартному системному виду, выполним одно из следующих действий:

Причина 9. Известный баг платформы 1С со справочной информацией (HTML-теги)

Рассмотрим специфический баг платформы 1С, из-за которого формы могут постоянно определяться как измененные при каждом сравнении, даже если они полностью идентичны типовым.

Дело в том, что к форме может быть привязана встроенная справка (раздел Help), которая хранится внутри метаданных в формате HTML. При открытии и сравнении конфигуратор задействует компоненты встроенного браузера операционной системы (например, Internet Explorer или WebKit). Разные версии операционных систем или обновления браузеров могут автоматически генерировать различные служебные мета-теги в шапке HTML-документа справки (например, тег <meta name="GENERATOR" content="...">).

Платформа видит различие в этих невидимых тегах и считает, что вся форма изменена. На работу кода и интерфейса это никак не влияет. В этом случае можно просто игнорировать постоянное предложение обновить справку формы или полностью очистить раздел справки у данной формы, если он не используется.

Рекомендация по кардинальному решению проблемы

Если ни один из способов автоматического объединения не помогает решить проблему (например, из-за сильного повреждения структуры метаданных конкретной формы в процессе прошлых некорректных обновлений), мы можем прибегнуть к надежному ручному методу:

  1. Откроем основную конфигурацию, найдем сбойную форму справочника и полностью удалим ее.
  2. Откроем окно сравнения и объединения с конфигурацией поставщика.
  3. Поставим галочку напротив удаленной формы. Теперь платформа воспримет ее как абсолютно новый объект и без труда перенесет чистую типовую форму из файла поставщика.
  4. После переноса формы зайдем в свойства справочника и заново укажем ее в качестве основной формы объекта или списка.
← На главную