Расширения конфигурации 1С облегчают доработку и поддержку типовых решений на внедрениях. Для облачных вариантов это практически единственный способ доработки. Также на расширениях реализуются хотфиксы — быстрые исправления. В последних версиях платформы доступны функции, облегчающие создание «универсальных расширений», независимых от конфигурации. Например, интеграционный инструментарий, консоли, файловый менеджер.
Алексей, разработчик 1С в компании Neti, рассказывает о расширениях конфигурации и предупреждает о подводных камнях, с которыми может столкнуться каждый программист.
Краткая справка
Технология с довольно скудным функционалом появилась в 2015 году, в платформе 8.3.6.
Возможности расширений в типовых конфигурациях зависят от режима совместимости, который обычно ограничен версией БСП. На февраль 2021 года в основных линейках типовых конфигураций (ЕРП, БП, ЗУП) используется БСП версии 3.1.3 и режим совместимости 8.3.14.
В базовых версиях расширения не поддерживаются.
Как это выглядит при разработке. Есть основная конфигурация и ее расширение (отдельная мини-конфигурация). Объекты бывают собственными, созданными в самой конфигурации или в расширении, и заимствованными, захваченными из основной конфигурации в расширение. Для заимствованных объектов можно переопределять ряд свойств.
Свойства объектов бывают контролируемые и модифицируемые. Контролируемые свойства менять нельзя — они должны совпадать у основной конфигурации и расширения, иначе расширение не запустится. Модифицируемые свойства можно изменять в расширении.
Возможности технологии
В версии платформы 8.3.14, поддерживаемой современными типовыми решениями, широкий спектр возможностей для изменения. В частности, можно:
- менять большое количество свойств заимствованных объектов;
- создавать собственные справочники, документы и РС;
- создавать и переопределять подсистемы и роли, шаблоны доступа;
- переопределять практически все модули и формы;
- версионировать расширения в хранилище.
В последних версиях платформы появилось множество интересных возможностей. Отметим самые существенные:
- в версии 8.3.13 — поддержка создания своих РН, РБ, РР и связанных объектов, функционал планов обмена;
- в 8.3.14 — собственные параметры сеанса, что дает полноценное создание своих РЛС;
- в 8.3.15 — появилась возможность заимствовать процедуры и функции с контролем изменения кода в основной конфигурации и в расширении — аннотация &ИзменениеИКонтроль;
- в 8.3.16 — создание собственных констант, функциональных опций и критериев отбора, изменение состава заимствованных критериев отбора и функциональных опций;
- в 8.3.17 — создание своих подписок на события и заимствование существующих;
- в 8.3.18 — возможность расширения состава типов заимствованных объектов (с некоторыми исключениями, например, для определяемого типа).
Более подробно с описанием механизма расширений можно узнать в следующих материалах:
- документация к платформе → https://its.1c.ru/db/v8316doc#bookmark:dev:TI000001513
- книга «Расширения конфигураций. Адаптация прикладных решений с сохранением поддержки в облаках и на земле. Разработка в системе „1С:Предприятие 8.3“», Е. Ю. Хрусталева.
- статья об эволюции возможностей расширений на Инфостарте — https://infostart.ru/1c/articles/1190788/
Кейс: переход на ЗУП 3.1 КОРП в федеральной торгово-производственной компании
Основной источник кейсов для этой статьи — проект перехода на ЗУП 3.1 КОРП с ЗУП 2.5 в крупной торгово-производственной компании. Особенности проекта:
- холдинговая структура, состоящая из десятка юрлиц;
- пять тысяч сотрудников;
- существенная текучка кадров и большой объем документооборота;
- управленческий учет, аналогичный ЗУП 2.5.
Важное требование заказчика: доработки конфигурации необходимо выполнить только с помощью расширений. Удалось на 99%, 1% — ограничения технологии, о которых поговорим отдельно.
Проект выполнялся на версии платформы 8.3.13, 8.3.15, поэтому для некоторых кейсов сейчас доступны альтернативные решения.
Собственные структуры данных
Одна из первых задач любого внедрения — адаптация структуры хранимых данных к реалиям конкретного проекта, то есть расширение структуры данных.
С версии 8.3.11 платформа умеет через расширения создавать справочники, документы, регистры сведений. С 8.3.13 — РН, РБ, РР, полноценные планы обмена, ПВХ, ПС, ПР.
Эти возможности широко применялись на проекте для расширения структуры данных. Расширялся реквизитный состав заимствованных справочников и документов, добавлялись собственные документы, регистры сведений, регистры накопления. Более того, на смежном проекте внедрения решения 1С:ERP в той же компании проектная команда решила не использовать дополнительные реквизиты вообще. В итоге для описания всей специфики номенклатуры в едином расширении было создано более 100 новых реквизитов, десяток перечислений и справочников-классификаторов. Результат по производительности не ставит каких-либо значимых вопросов, все работает так же быстро, как и типовая ERP.
Работать с расширенной структурой данных удобно. Она поддерживается конструктором запросов и в пользовательском режиме, и в конфигураторе.
Однако стоит учитывать ряд особенностей:
1. Тип ЛюбаяСсылка не содержит ссылок на собственные типы расширения. Механизмы, использующие этот тип, с данными расширения работать не будут.
2. Если в заимствованный справочник/документ добавлен новый реквизит, необходимо захватить в расширение роль, дающую права на этот справочник/документ, иначе реквизит останется без прав и не будет показан на форме.
Хранение новых реквизитов
Рассмотрим способ реализации хранения данных в расширении. Под новые справочники и документы создаются новые таблицы. Они помечаются суффиксом Х и порядковым номером. Например, Reference789X1.
Когда в заимствованный объект расширения добавляется новый реквизит, табличная часть или реквизит табличной части, в базе данных копируется весь набор таблиц объекта с теми же суффиксами в названиях. Например, для таблицы справочника Reference34 будет создана Reference34X1, для новой табличной части может быть создана таблица Reference34_VN34437X1.
Таблицы нового набора дополняются созданными в расширении структурами, после чего данные переносятся в новые таблицы. Дальше вся работа идет с этими таблицами в рамках разделителей текущей области.
Если расширение после изменения основной конфигурации не может быть запущено, оно переводится в неактивный режим. Новые данные не удаляются и не теряются. Для отключения расширения необходимо выбрать соответствующий пункт меню и подтвердить свои намерения в диалоге. Случайно это сделать сложно, поэтому опасения, которые возникли, когда возможность только появилась, сейчас напрасны.
Есть особенность в работе глобального метода ПолучитьСтруктуруХраненияБазыДанных(): в именах таблиц не показываются суффиксы, поэтому определить этим методом наличие или отсутствие расширенной структуры невозможно.
На иллюстрации приведен пример, как выглядит расширенная структура данных для заимствованного справочника расширения, в которую добавлены новый реквизит и новая табличная часть. Видим, что созданы копия таблицы с суффиксом X1 и таблица для табличной части, в конце которой тоже суффикс. Все данные справочника перенесены в новую таблицу.
Во второй части статьи о расширениях поговорим о РН, изменении режима совместимости, доработке модулей и форм, отчетах и печатных формах.