Почему исчезают добавленные в расширении реквизиты после обновления платформы 1С на 8.3.22?

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

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

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

Суть проблемы: когда код есть, а поля нет

Рассмотрим типичный сценарий. Разработчик добавляет новый реквизит в табличную часть документа через расширение. Поскольку типовая форма документа может быть сложной, часто используется программное добавление элемента формы в процедуре ПриСозданииНаСервереПосле. Код выглядит примерно так:


&НаСервере
Процедура Расш1_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
    // Добавление новой колонки в таблицу формы
    ЭлементТаблицы = ЭтаФорма.Элементы.Товары;
    НоваяКолонка = ЭтаФорма.Элементы.Вставить("ТоварыМойНовыйРеквизит", Тип("ПолеФормы"), ЭлементТаблицы);
    НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
    НоваяКолонка.ПутьКДанным = "Объект.Товары.МойНовыйРеквизит";
КонецПроцедуры

После обновления платформы до версии 8.3.22.1704 (и выше) этот механизм перестает работать. В момент выполнения процедуры ПриСозданииНаСервереПосле элемент на форму добавляется, и отладчик видит его в коллекции ЭтаФорма.Элементы. Однако на событии ПриОткрытии или уже в самом интерфейсе пользователя колонки нет. Если попытаться программно прочитать значение реквизита в расширенной табличной части, система может выдать ошибку или показать статус «недоступно для чтения» в окне вычисления выражений.

Шаг 1: Анализ платформенных изменений в 8.3.22

Разберем причину такого поведения. Платформа 8.3.22 привнесла значительные изменения в механизмы контроля метаданных. Ранее 1С «прощала» многие несоответствия в настройках расширений. Теперь же механизмы отрисовки управляемой формы стали более жестко привязаны к состоянию базы данных и правам доступа.

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

Шаг 2: Проверка назначения расширения

Выясним, какую роль играет Назначение расширения. В 1С существует три основных типа:

  1. Исправление (Hotfix) — не может менять структуру БД.
  2. Адаптация — предназначено для изменения логики и интерфейса.
  3. Дополнение — предназначено для добавления новых объектов и реквизитов.

Хотя долгое время «Адаптация» позволяла добавлять реквизиты, в новых версиях платформы рекомендуется использовать «Дополнение», если вы расширяете состав данных. Если у вас расширение имеет тип «Адаптация» и оно уже изменило структуру таблиц (добавлены реквизиты), платформа 8.3.22 может игнорировать эти реквизиты при построении формы. Однако просто сменить тип «Адаптация» на «Дополнение» не всегда получится — система выдаст ошибку, так как структура БД уже изменена.

Шаг 3: Главный виновник — Режим совместимости

Как показывает практика и эксперименты разработчиков, ключевым фактором является Режим совместимости расширения. Рассмотрим, как это работает. При создании расширения в него автоматически прописывается режим совместимости, актуальный на тот момент (например, 8.3.12). Основная конфигурация (например, КА 2.5) после обновления может иметь режим 8.3.17 или выше.

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

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

Шаг 4: Проверка функциональных опций и прав доступа

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

Также важно убедиться, что права на новый реквизит добавлены в соответствующие Роли внутри расширения. В КА 2.5 права управляются через профили групп доступа. Даже если вы зашли под «Админом», убедитесь, что в расширении создана роль, дающая права на чтение и просмотр нового реквизита, и эта роль назначена пользователю или добавлена в профиль.

Шаг 5: Очистка серверного кэша

Платформа 8.3.22 активно кэширует структуру форм на стороне сервера. Иногда, даже после исправления всех настроек, форма продолжает отображаться некорректно. В этом случае поможет только радикальная мера — очистка серверного кэша. На сервере 1С:Предприятия необходимо:

  1. Остановить службу 1С.
  2. Удалить содержимое папки snccntx в каталоге данных кластера.
  3. Запустить службу заново.

Итоговые рекомендации

Подведем итог. Чтобы ваши реквизиты не исчезали с формы после перехода на 8.3.22, придерживайтесь следующих правил:

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

← На главную