Вопрос взаимодействия типовых конфигураций с механизмами расширений является одним из самых актуальных для разработчиков. Часто возникает опасение: не «затрет» ли обновление все те доработки, которые были вынесены в отдельный слой? Рассмотрим детально, как ведет себя платформа 1С:Предприятие 8.3 в процессе обновления, почему могут пропадать данные и как правильно проектировать расширения, чтобы избежать их потери.
Начнем с главного вопроса: нужно ли заново добавлять расширение после того, как типовая конфигурация обновилась на новый релиз? Нет, расширение добавлять заново не нужно.
При выполнении автоматического обновления (через поиск доступных обновлений или загрузку файла .cfu) основная конфигурация изменяется, но список подключенных расширений остается нетронутым. Платформа воспринимает расширение как независимый программный слой, который «накладывается» поверх основной конфигурации в момент запуска сеанса. Однако здесь есть важный технический нюанс — процесс валидации.
После обновления основной конфигурации платформа при первом запуске проверяет расширение на соответствие новой структуре метаданных. Рассмотрим возможные ситуации:
В обсуждении на форуме автор столкнулся с ситуацией: расширение на месте, форма изменена, но данные, введенные пользователем, исчезли. Проанализируем причину этой проблемы. Разберем по шагам, как работают данные в 1С.
Реквизиты формы — это временные данные, которые существуют только в памяти в момент работы пользователя с конкретным окном. Если вы добавили поле непосредственно на форму через расширение, но не привязали его к реквизиту объекта в базе данных, то после закрытия формы или обновления конфигурации эти данные не сохранятся, так как им некуда записываться в физической таблице базы данных (SQL).
Реквизиты объекта — это реальные поля в таблицах базы данных. Чтобы данные сохранялись «навсегда», они должны быть частью структуры метаданных документа или справочника.
Если нам необходимо добавить новые данные (например, два дополнительных реквизита в справочник ФизическиеЛица), мы должны использовать один из следующих подходов, в зависимости от версии платформы и режима совместимости.
Если режим совместимости вашей конфигурации установлен в значение 8.3.12 или выше, вы можете добавлять собственные реквизиты к заимствованным объектам прямо в расширении. Рассмотрим, как это сделать:
ФизическиеЛица) в расширение.В этом случае платформа создаст в базе данных отдельную таблицу для хранения этих полей. Важно: Никогда не удаляйте расширение, в котором созданы такие реквизиты! Если вы удалите расширение из списка, платформа физически удалит (drop) соответствующие таблицы из базы данных, и данные будут потеряны безвозвратно. Если нужно временно отключить доработку, просто снимите флаг «Активно».
Если режим совместимости не позволяет добавлять реквизиты в расширение или вы не хотите менять структуру таблиц, воспользуемся механизмом Библиотеки Стандартных Подсистем (БСП). Рассмотрим алгоритм работы:
Пример кода для программного получения дополнительного сведения:
Функция ПолучитьЗначениеДопСведения(СсылкаНаОбъект, ИмяСведения) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &Объект
| И ДополнительныеСведения.Свойство.Наименование = &ИмяСведения";
Запрос.УстановитьПараметр("Объект", СсылкаНаОбъект);
Запрос.УстановитьПараметр("ИмяСведения", ИмяСведения);
РезультатЗапроса = Запрос.Выполнить();
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
Возврат Выборка.Значение;
КонецЕсли;
Возврат Неопределено;
КонецФункции
Если данные сложные или их много, проанализируем ситуацию с созданием собственного регистра сведений в расширении. Это отличный способ хранить данные, не снимая основную конфигурацию с поддержки.
Вы создаете в расширении новый РегистрСведений (например, ДопДанныеФизЛиц) с измерениями ФизЛицо (тип — ссылка на справочник из основной конфигурации) и нужными ресурсами. Теперь в расширении формы справочника вы можете прописать логику записи и чтения из этого регистра. Данные будут надежно храниться в базе и не пропадут при обновлении конфигурации.
Многие начинающие разработчики путают эти действия. Выясним причину, почему это опасно:
Проанализируем оптимальный регламент действий при обновлении:
Таким образом, использование расширений — это безопасный и эффективный метод доработки типовых конфигураций, если понимать механизмы хранения данных. Главное — помнить, что данные должны храниться в объектах метаданных (реквизиты, регистры), а не просто отображаться на форме в виде добавленных элементов.