При обновлении нетиповых конфигураций 1С разработчики часто сталкиваются со следующей проблемой: выполняется сравнение и объединение конфигураций, устанавливаются все необходимые флажки напротив измененных форм справочников или документов, запускается процесс обновления, но после его завершения формы остаются прежними (нетиповыми). При этом платформа не выдает никаких ошибок, а в окне сравнения эти объекты по-прежнему отображаются как измененные.
В этой статье мы подробно разберем, почему возникает эта проблема, проанализируем неочевидные технические нюансы работы платформы 1С и рассмотрим пошаговые сценарии для приведения форм к типовому виду.
Выясним очень важную взаимосвязь между метаданными объекта и его визуальными формами. На практике часто случается, что в процессе доработки конфигурации увеличивают длину кода или длину наименования справочника (например, стандартная длина наименования была 25 символов, а ее увеличили до 150).
Если длина наименования в вашей конфигурации отличается от длины наименования в конфигурации поставщика, то при попытке заместить форму платформа автоматически пытается адаптировать элементы формы под текущую структуру данных вашей конфигурации. В результате форма программно перегенерируется под измененную длину реквизита и снова помечается системой как «нестандартная». Чтобы решить эту проблему, необходимо сначала привести все базовые свойства метаданных объекта (длину наименования, длину кода, типы стандартных реквизитов) в полное соответствие с типовой конфигурацией поставщика, и только после этого выполнять повторное объединение формы.
Рассмотрим, как работает механизм сравнения и объединения. По умолчанию для измененных объектов конфигуратор предлагает режим объединения «Объединить». В этом режиме платформа пытается сопоставить структуру старой формы и новой формы, «сливая» их элементы воедино. Из-за этого старые нетиповые реквизиты и элементы формы никуда не исчезают.
Для того чтобы полностью затереть старую форму и сделать её идентичной типовой, выполним следующие шаги:
Проанализируем ситуацию, когда форму в процессе прошлых обновлений или доработок удаляли, а затем создавали заново вручную или копировали из другой базы. В этом случае, даже если визуально и по структуре форма кажется абсолютно идентичной типовой, её внутренний уникальный идентификатор (UUID) изменился. Платформа при автоматическом сравнении не может сопоставить объекты с разными идентификаторами.
Чтобы восстановить связь и успешно обновить форму, выполним ручное сопоставление:
Управляемая форма физически состоит из двух основных частей: декларативного дерева элементов (визуальный интерфейс) и модуля формы (программный код на встроенном языке). В окне сравнения-объединения эти составляющие можно настраивать отдельно.
Если вы установили общую галочку на форму, но при этом в детальных настройках сравнения модуля (которые вызываются нажатием на кнопку с изображением шестеренки напротив формы) установлен приоритет основной конфигурации или сняты флаги с измененных процедур и функций, то визуальная часть формы обновится, а её программный код останется старым. Разберем по шагам, как это исправить:
Иногда замещение самой формы в конфигураторе проходит успешно, но при запуске сеанса в режиме «1С:Предприятие» пользователи по-прежнему видят старый интерфейс. Это может происходить из-за того, что в свойствах самого справочника в качестве основной формы указана совсем другая (например, альтернативная или ранее созданная разработчиком форма).
Проверим свойства объекта метаданных:
ОсновнаяФормаСписка, ОсновнаяФормаОбъекта и ОсновнаяФормаВыбора. Современные базы 1С активно используют механизм расширений. Если обновляемая форма была ранее заимствована в какое-либо активное расширение конфигурации, то любые изменения, вносимые в основную конфигурацию при обновлении, не отобразятся в режиме «1С:Предприятие». Расширение всегда имеет наивысший приоритет при компиляции интерфейса платформой.
Для устранения этой проблемы выполним следующие действия:
Если в новой типовой форме поставщика были полностью удалены какие-то элементы, реквизиты или обработчики событий, которые присутствовали в вашей старой форме, то при обычном объединении они могут остаться «висеть» в структуре формы. Это происходит в том случае, если в глобальных настройках сравнения выключена опция удаления.
Перед запуском объединения обязательно проверим этот флаг:
Если в конфигураторе форма гарантированно обновилась и выглядит как типовая, но конкретный пользователь продолжает видеть старое расположение полей, проблема заключается в кэшировании индивидуальных настроек окон в информационной базе. Платформа 1С сохраняет персональные настройки формы (видимость колонок, ширину полей, положение панелей) для каждого пользователя.
Чтобы сбросить эти настройки и вернуть форму к стандартному системному виду, выполним одно из следующих действий:
Рассмотрим специфический баг платформы 1С, из-за которого формы могут постоянно определяться как измененные при каждом сравнении, даже если они полностью идентичны типовым.
Дело в том, что к форме может быть привязана встроенная справка (раздел Help), которая хранится внутри метаданных в формате HTML. При открытии и сравнении конфигуратор задействует компоненты встроенного браузера операционной системы (например, Internet Explorer или WebKit). Разные версии операционных систем или обновления браузеров могут автоматически генерировать различные служебные мета-теги в шапке HTML-документа справки (например, тег <meta name="GENERATOR" content="...">).
Платформа видит различие в этих невидимых тегах и считает, что вся форма изменена. На работу кода и интерфейса это никак не влияет. В этом случае можно просто игнорировать постоянное предложение обновить справку формы или полностью очистить раздел справки у данной формы, если он не используется.
Если ни один из способов автоматического объединения не помогает решить проблему (например, из-за сильного повреждения структуры метаданных конкретной формы в процессе прошлых некорректных обновлений), мы можем прибегнуть к надежному ручному методу: