Работа с механизмом расширений в 1С:Предприятие часто преподносит сюрпризы, особенно когда разработка ведется в серверном режиме. Типичная ситуация: программист добавляет новые реквизиты, флажки или таблицы на форму документа через расширение, проверяет под своими правами — все работает идеально. Однако рядовые пользователи при открытии той же формы видят старый интерфейс или лишь часть изменений. Рассмотрим подробно, почему так происходит, и разберем по шагам алгоритм решения этой проблемы.
Прежде чем погружаться в дебри программного кода или чистить серверные кэши, проанализируем самый простой и часто встречающийся фактор — индивидуальные настройки формы пользователями. Система 1С сохраняет состояние формы (расположение элементов, их видимость, ширину колонок) в специальном хранилище SystemSettingsStorage, для работы с которым можно использовать инструменты просмотра и очистки хранилища настроек. Если пользователь ранее изменял форму вручную, эти настройки «накладываются» поверх изменений из расширения.
Выясним причину, выполнив следующие действия:
Если после сброса элементы появились, значит, проблема была в сохраненных настройках. Однако, как отмечают участники обсуждения, иногда это помогает лишь до закрытия формы. В таком случае проблема глубже и связана с кэшированием или логикой объединения метаданных.
Рассмотрим ситуацию, когда в расширении создаются новые группы или элементы. Одной из неочевидных причин «исчезновения» элементов является совпадение имен с объектами основной конфигурации. Платформа может некорректно обрабатывать ситуацию, когда в расширении добавлена группа с именем ГруппаОсновное, и такое же имя уже существует (обнаружить такие связи поможет инструмент для анализа зависимостей конфигурации) или появляется в основной конфигурации после обновления.
Проанализируем наши действия по именованию объектов:
ит_ФлажокОплачено, ит_ГруппаДополнительно).Элементы.ГруппаШапка.Видимость = Ложь, то все элементы расширения внутри этой группы также будут скрыты.Важно помнить, что наличие полных прав в основной конфигурации не всегда гарантирует доступ к объектам, созданным исключительно в расширении. Если вы добавили в расширение новый реквизит или справочник, для них необходимо создать роль внутри этого же расширения.
Разберем, как правильно настроить права:
Использовать основные роли конфигурации.Один из самых действенных методов, упомянутых опытными разработчиками, заключается в принудительном обновлении структуры базы данных. Иногда сервер 1С «залипает» на старой версии метаданных и не видит изменений в расширении, пока не произойдет реструктуризация или обновление основной конфигурации.
Посмотрим на алгоритм этого «шаманства»:
Такая манипуляция заставляет платформу пересчитать контрольные суммы форм и корректно объединить их с расширением. Во многих случаях именно это действие является решающим для серверных баз.
Если локальная копия базы работает корректно, а на сервере наблюдаются «приколы», значит, дело в серверном кэше. Обычная очистка папок в %AppData% на компьютере пользователя здесь не поможет.
Рассмотрим порядок полной очистки кэша на сервере:
C:\Program Files\1cv8\srvinfo).snccntx — именно здесь хранятся сеансовые данные и кэш расширений.Иногда визуальный редактор расширения бессилен, если в основной конфигурации форма динамически перестраивается кодом. В таком случае нам поможет использование обработчиков событий &После или &Вместо для процедуры ПриСозданииНаСервере.
Посмотрим на пример кода, который гарантированно выведет наш элемент:
&После("ПриСозданииНаСервере")
Процедура ит_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
// Явно управляем видимостью и доступностью
Элементы.ит_МойФлажок.Видимость = Истина;
Элементы.ит_МойФлажок.Доступность = Истина;
// Если элемент должен быть в определенной группе, проверим её
Если Элементы.Найти("ГруппаДополнительно") <> Неопределено Тогда
Элементы.ит_МойФлажок.Родитель = Элементы.ГруппаДополнительно;
КонецЕсли;
КонецПроцедуры
Использование кода позволяет обойти странности механизма объединения форм (мерджа), так как программная установка свойств выполняется в самую последнюю очередь перед отрисовкой интерфейса у пользователя.
Проанализируем еще один технический момент. Если основная конфигурация имеет режим совместимости, например, 8.3.12, а ваше расширение создано в более поздней версии или использует «Не использовать», могут возникнуть конфликты в отрисовке управляемых форм. Платформа 8.3.13 и выше существенно меняла алгоритмы работы с расширениями. Рекомендуется устанавливать режим совместимости в расширении точно таким же, как в основной конфигурации.
Подведем итог: если элементы формы «пропадают», действуйте по цепочке: сброс настроек формы у пользователя -> проверка уникальности имен -> проверка прав в расширении -> «фиктивное» обновление основной конфигурации -> программная установка видимости в ПриСозданииНаСервере.