Uploaded by aisylu1620

Расширения

advertisement
РАСШИРЕНИЯ 1С
Расширения представляют собой что-то вроде параллельных
конфигураций, которые автоматически объединяются с основной
конфигурацией поставщика.
Причем в расширениях можно добавлять как свои объекты, так и
заимствовать объекты основной конфигурации
1
РАСШИРЕНИЯ 1С
Часто заказчик хочет что-то добавить или что-то изменить в типовой
конфигурации «под себя». Стратегия, предлагаемая расширениями,
заключается в том, что изменять типовую конфигурацию не нужно. Все
изменения выполняются в расширении. После этого, в режиме
1С:Предприятие, расширение просто подключается к типовой
конфигурации. Платформа автоматически, в режиме 1С:Предприятие,
объединяет расширение с типовой конфигурацией. В результате
заказчик работает с изменённым, по его желаниям, типовым решением.
1С:Предприятие
Типовая
Изменённая
1С:Предприятие
Типовая
типовая
Изменённая
типовая
Изменённая
типовая
Расширения
Расширения
(Изменения)
(Изменения)
2
НАЗНАЧЕНИЯ РАСШИРЕНИЙ
Каждое расширение имеет свое назначение. Это:

Адаптация

Дополнение

Исправление
Назначение расширения конфигурации описывает, для какой цели
создается это расширение
3
НАЗНАЧЕНИЯ РАСШИРЕНИЙ



Исправление — этот вариант означает, что расширение вносит
исправления в конфигурацию.
Адаптация — этот вариант означает, что расширение
настраивает существующее решение (конфигурацию) с учетом
специфики отдельного предприятия.
Дополнение — расширение вносит новый функционал.
Выбор назначения влияет на порядок применения расширения
конфигурации при запуске 1С:Предприятие — в первую очередь
применяются расширения с назначением Исправление, после
этого Адаптация и самыми последними — Дополнение.
В списке расширений конфигурации порядок отображения
расширений соответствует порядку их применения.
4
НАЗНАЧЕНИЯ РАСШИРЕНИЙ
(ПРИМЕР)
Добавляем 2 расширения с назначением «Адаптация»:
Теперь если изменить назначение расширения Расширение2 на «Исправление» — это
расширение изменит свой порядок и будет первым в списке:
Рассмотрим особенности взаимодействия
расширений
конфигурации,
которые
изменяют
один
и
тот
же
объект
конфигурации.
5
ОТЛИЧИЯ ОТ ВНЕШНЕЙ ОБРАБОТКИ




Расширения позволяют непосредственно менять процессы
записи, проведения документов и типовую логику работы
программы;
Разработка расширений удобнее и проще, чем написание
внешних отчетов и обработок, поскольку изменения делаются
в самой конфигурации;
Использование расширения только в 1С ПРОФ;
Функционал расширения может перестать работать при
переходе на более новые платформы в связи с изменением
разработчиками режима Свойства основной конфигурации.
6
ОСОБЕННОСТИ И ОГРАНИЧЕНИЯ
Собственный объект - самодостаточный
объект конфигурации, который может
находиться
как
в
расширяемой
конфигурации, так и в расширении
В расширении конфигурации на текущем
релизе платформы 8.3.22 не
поддерживается создание следующих
собственных объектов:

Общие реквизиты, являющиеся
разделителями.

Регламентные задания.

Хранилища настроек.

Языки.

Журналы документов.

Бизнес-процессы и задачи.

Внешние источники данных.
Не поддерживается расширение
следующих объектов:



Нельзя создавать подчиненные
подсистемы.
Если объект не может быть
собственным объектом
расширения - его расширение также не
поддерживается.
Не поддерживается добавление
реквизитов и табличных частей для:
- плана видов характеристик;
- плана счетов;
- плана видов расчетов.
Не поддерживается изменение структуры
регистров всех видов.
Поддерживается только расширение
состава регистраторов.
7
УПРАВЛЕНИЕ РАСШИРЕНИЯМИ
В конфигураторе предназначен диалог «Расширения конфигурации».
Доступ к этому диалогу осуществляется через «Конфигурация - Расширения конфигурации».
С помощью данного диалога можно создать новое расширение, удалить существующее, открыть
конфигурацию расширения, сохранить расширение в файл, а также выполнять другие операции.
Для добавления (подключения) расширения, сохраненного в файл, в прикладное решение конкретного
клиента нет необходимости использовать конфигуратор. Подключить расширение можно с помощью
специальной стандартной функции (Функции для технического специалиста - Стандартные - Управление
расширениями конфигурации)
8
СОЗДАНИЕ ЗАИМСТВОВАННОГО
ОБЪЕКТА
Заимствованный объект - собственный
объект,
добавленный
в
расширение
конфигурации
Для того, чтобы выполнить заимствование
объекта,
необходимо
воспользоваться
командой
Добавить
в
расширение контекстного меню объекта
конфигурации. После выполнения данной
команды
в
расширении
создается
заимствованный объект. При создании
заимствованного объекта заимствуются
также все родительские объекты, если они
еще
не
заимствованы
в
данном
расширении. Подчиненные объекты не
заимствуются.
9
РАБОТА С ЗАИМСТВОВАННЫМ
ОБЪЕКТОМ
У заимствованного объекта присутствуют только те свойства,
которые
могут
быть
установлены
контролируемыми,
проверяемыми или модифицируемыми



Цифрой 1 обозначен признак контролируемого свойства.
Несовпадение таких свойств между расширением и
расширяемой конфигурации приведет к невозможности
применения расширения. Видно, что для справочника
«Товары» указаны следующие контролируемые
свойства: Иерархический и Допустимая длина кода.
Цифрой 2 на рисунке обозначено проверяемое свойство.
Несовпадение таких свойств между расширением и
расширяемой конфигурацией вызовет формирование
предупреждений о несовпадении свойств, но не будет
препятствовать применению расширения. На рисунке
указаны следующие проверяемые свойства для
справочника «Товары»: Длина кода, Длина
наименования, Тип кода.
Цифра 3 на рисунке обозначает модифицируемое свойство.
На рисунке видно, что свойство Основная форма отмечено
как модифицируемое. Модифицируемое свойство получит
значение из расширения, указанного последним в списке
расширений
10
РАБОТА С ЗАИМСТВОВАННЫМ
ОБЪЕКТОМ (Пример)
Мы создали расширение, в него заимствован реквизит справочника Номенклатура, который
называется ВидНоменклатуры. Чтобы наше расширение функционировало корректно,
нужно, чтобы реквизит обязательно имел тип ПеречислениеСсылка.ВидыНоменклатуры, на
это завязана логика нашего расширения. Поэтому отмечаем свойство Тип этого реквизита
как контролируемое. Если в основной конфигурации тип этого реквизита изменится (а это
может случиться после обновления), то наше расширение не сможет работать корректно.
Значит, и подключать его нет смысла. В таком случае при попытке подключить расширение
будет выполняться проверка – если тип этого реквизита из расширения не совпадет с типом
из основной конфигурации, расширение не будет подключено, система выдаст сообщение об
ошибке:
Следует помнить, что свойство объекта конфигурации Имя всегда является контролируемым
реквизитом. Если в расширяемой конфигурации, на момент создания расширения,
справочник имел имя Товары, а потом был переименован в Номенклатура, то расширение
перестанет работать до тех пор, пока для заимствованного справочника в расширении также
не будет установлено имя Номенклатура. То же самое верно для значений других
контролируемых свойств.
11
Проверка применения расширения
и варианты решения
В конфигураторе можно запустить проверку применимости расширения. В результатах проверки будет
указана проблема отсутствия объекта с прежним наименованием и система предлагает несколько
вариантов решения (которые можно применить для нескольких выделенных строк в окне
применимости). В зависимости от ситуации, предлагаются различные комбинации из следующих
вариантов решения проблемы:







Переименовать, сохранив соответствие - объекту присваивается имя объекта из расширяемой
конфигурации с внутренним идентификатором типа, ранее записанным в свойстве Объект
расширяемой конфигурации, если такой существует и типы метаданных совпадают.
Сохранить имя, изменив соответствие - свойству Объект расширяемой
конфигурации устанавливается внутренний идентификатор объекта расширяемой конфигурации с
тем же именем, что и у заимствованного объекта.
Выбрать соответствие - в свойство Объект расширяемой конфигурации устанавливается
внутренний идентификатор типа объекта конфигурации, выбранный вручную.
Отключить проверку - отключается свойство Объект расширяемой конфигурации.
Очистить соответствие - объекту задаётся служебное значение свойства Объект расширяемой
конфигурации. Свойство с таким значением не обновляется при сохранении расширения.
Установить значение из объекта конфигурации - свойству присваивается значение свойства
расширяемого объекта.
Удалить объект - объект удаляется из расширения.
12
СОЗДАНИЕ СОБСТВЕННОГО
ОБЪЕКТА
В расширении можно не только создавать заимствованные объекты, но и собственные.
Создание и редактирование собственных объектов расширения ничем не отличается от
аналогичных действий в расширяемой конфигурации. Контроль уникальности имен
собственных объектов выполняется:


При подключении расширения - среди имен расширяемой конфигурации и всех
расширений;
При разработке расширения - среди имен расширяемой конфигурации и того
расширения, в котором создается собственный объект.
Если в расширяемой конфигурации, например, существует обработка ПоискВДанных, то ни
в одном расширении не может существовать одноименной обработки. При создании
собственного объекта, этот объект получает префикс, который задается при создании
расширения
Если в Конфигураторе открыто окно с расширением, то его невозможно удалить из списка расширений в
режиме «1С:Предприятия». Расширение, во время записи в информационную базу в режиме
«1С:Предприятия», в конфигураторе является недоступным для любых операций с ним
13
СВОЙСТВА РАСШИРЕНИЯ
 Возможность заменить картинку основного
раздела, логотип и заставку. При этом надо
помнить о следующих особенностях такой
замены:
- Картинки из конфигурации полностью
замещаются картинками из расширения.
- Если несколько расширений замещают картинки,
то будет использована одна картинка для каждого
свойства. Такой картинкой будет картинка из
последнего примененного расширения.
 Возможность расширить свойство Основной
стиль. При этом реализована возможность как
расширять существующие стили и элементы
стиля, так и создавать собственные стили и
элементы стиля в расширении. При расширении
элементов стиля поддерживается только
изменение значение цвета, но не вида элемента
стиля.
14
Способы расширения программных
модулей
Система позволяет расширить практически любой программный модуль, относящийся к управляемому
приложению. Невозможно расширять глобальные серверные модули.
В расширяющем модуле имеется возможность:



Создавать собственные методы и переменные (если это допускает расширяемый модуль).
Назначать собственные обработчики на события, которые не обрабатываются в расширяемой
конфигурации.
Перехватывать любой метод расширяемого модуля (в том числе и методы обработчиков событий),
при этом имеется возможность:

полностью заменить оригинальный метод собственным;

создать методы, которые будут вызваны перед или после расширяемого метода.
Создание собственного метода или переменной в расширяющем модуле ничем не отличается от
создания метода или переменной в расширяемой конфигурации, при работе без расширений. Однако
при создании собственных методов или переменных рекомендуется предварять их имена префиксом,
который позволит однозначно идентифицировать принадлежность метода или переменной тому или
иному расширению, а также избежать конфликта имен с расширяемой конфигурацией.
&Аннотация("ИмяМетода") Процедура
Префикс_Имя() // текст метода
КонецПроцедуры
15
&ПЕРЕД


Аннотация с таким именем означает, что ваш перехватчик будет
выполнен до того, как начнётся выполнение типового метода.
На схеме типовой и расширяющий модули показаны
прямоугольниками, а стрелка показывает последовательность
исполнения встроенного языка.
16
&ПОСЛЕ

Эта аннотация означает, что ваш перехватчик будет выполнен
после того, как выполнится типовой метод.
17
&ВМЕСТО
Эта аннотация как раз и реализует возможность полного
перекрытия типового метода. То есть типовой метод вообще не
будет выполнен. Вместо него выполнится только ваш перехватчик.
18
&ВМЕСТО
Если же вы перехватываете типовую функцию, а не процедуру, то
вы можете использовать только перехватчик &Вместо. Для
функции недоступны аннотации Перед и После, то есть вызвать
комбинацию &Перед и &После
Чтобы
избавиться
от
этой
несправедливости,
реализовали
метод – ПродолжитьВызов(). Если
вы вызовете этот метод внутри
своей функции-перехватчика, то
исполнится та функция, которую вы
перекрыли, после чего исполнение
кода вернётся в ваш перехватчик:
19
&ИзменениеИКонтроль

При заимствовании метод полностью копируется в расширение, но помечается
аннотацией. Затем необходимо отметить код, который удаляется из расширения,
директивами препроцессора #Удаление … #КонецУдаления (нельзя просто удалить
«неправильный» код из модуля в расширении). Это позволит системе контролировать
эквивалентность расширяемого метода и метода в расширении. Тот код, который
необходимо вставить в расширяемый метод, необходимо помещать внутрь директив
препроцессора #Вставка … #КонецВставки (не достаточно просто вставить
«правильный» код в нужные места метода).
20
&ПОЛЕЗНЫЕ СОВЕТЫ


Для того, чтобы показать только измененные объекты есть
кнопка “Измененные и добавленные в расширении”. При
нажатии отображаются только добавленные вручную и
измененные объекты расширения.
Расширение видит и работает только с теми объектами,
которые заимствованы из основной конфигурации.
Объекты, которые не заимствованы, в расширении не видны и
при попытке обращения к ним, например, в тексте запроса, в
режиме “Конфигуратор” вызывают ошибку. Хотя в
пользовательском режиме код выполняется без проблем.
Для того чтобы писать или редактировать запросы с большим
количеством метаданных лучше воспользоваться любой
внешней обработкой. В ней доступны все метаданные из
основной конфигурации
21
&ПОЛЕЗНЫЕ СОВЕТЫ


Любые изменения, связанные с элементами формы
делайте программно, вообще старайтесь не трогать редактор
форм, как бы соблазнительно это не было. Либо
альтернативный вариант решения: к каждому расширению
прикладывать подробное описание: что и с каким элементом
Вы сделали, какое свойство поменяли, какой элемент добавили
и т.п.
Можно ли из одного расширения вызвать функцию в другом
расширении? Можно. НО есть риск "зависимости"
22
23
Download