1с расширения конфигурации модуль объекта обработки. Расширения конфигурации. Полезные советы для разработки. Внесение изменений в модуль объекта

Начиная с редакции 8.3.6 платформы 1С:Предприятия в ней появился механизм расширения конфигураций .

Он позволяет вносить новый и переопределять существующий функционал без изменения основной (расширяемой) конфигурации. Таким образом у нас появляется масса новых возможностей, недоступных ранее.

Новые возможности

Ограничения

Конечно есть и ограничения:

  • В расширения можно добавлять только ограниченный набор новых метаданных. Это подсистемы, роли, отчеты, обработки и некоторые другие.
  • В некоторых ситуациях возможны проблемы с отладкой.

Пример использования

Давайте рассмотрим на примере как можно переопределить процедуру общего модуля с использованием расширения конфигурации. То есть это тот случай, когда нам надо оперативно исправить какую-то ошибку без выпуска релиза и обновления основной конфигурации. Итак пусть у нас есть общий модуль professia1c_ry_Расширения .

И в нем простейшая процедура, которая выводит сообщение:

Процедура ВывестиСообщение() Экспорт Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Это основная конфигурация" ; Сообщение. Сообщить() ; КонецПроцедуры

А теперь давайте выведем другое сообщение с помощью расширения. В первую очередь нам конечно же надо создать само расширение. В меню конфигуратора выбираем Конфигурация — Расширение конфигурации


В открывшемся окне жмем кнопку Добавить и заполняем поля со свойствами расширения. Поля Имя и Синоним комментариев не требуют. Префикс будет использоваться имени расширяющей процедуры, которая будет замещать исходную. А в списке Назначение из трех возможных вариантов (Исправление, Адаптация, Дополнение) выберем Исправление :

Далее в списке расширений убираем флажки «Безопасный режим, имя профиля безопасности» и «Защита от опасных действий» :


Таким образом мы создали расширение. Но если мы откроем его двойным щелчком, то увидим, что дерево метаданных у него пустое. И теперь нам надо добавить в расширение общий модуль.

Для этого в дереве метаданных основной конфигурации щелкаем правой кнопкой по нужному общему модулю и выбираем пункт «Добавить в расширение» :


И теперь наше расширение будет выглядеть следующим образом:

Но если мы посмотрим на код общего модуля расширения, то увидим, что он пустой. И следующим шагом надо добавить в него процедуру. Снова идем в основную конфигурацию, открываем код общего модуля, щелкаем правой кнопкой по процедуре, снова выбираем пункт «Добавить в расширение» и в открывшемся окне выбираем тип вызова Вызывать вместо :

В итоге в общий модуль расширения будет добавлена процедура со следующим кодом:

&Вместо("ВывестиСообщение") Процедура Сообщения_ВывестиСообщение() // Вставить содержимое метода. ПродолжитьВызов() ; КонецПроцедуры

Как видим в имени процедуры присутствует префикс, который был указан при создании расширения. Теперь остается только доработать код процедуры так как нам нужно:

&Вместо("ВывестиСообщение") Процедура Сообщения_ВывестиСообщение_() Сообщение = Новый СообщениеПользователю; Сообщение. Текст = "Это расширение" ; Сообщение. Сообщить() ; КонецПроцедуры

И теперь можно легко убедиться, что у нас будет выполняться код расширения вместо кода основной конфигурации, если выполнить следующий код:

Professia1c_ry_Расширения. ВывестиСообщение() ;

В данной статье предлагаю рассмотреть, что такое «расширение конфигурации», как добавить расширение или же отключить его. Начиная с версии 1C 8.3.6.1977 в платформе введен новый механизм – расширения конфигурации. Сначала немного теории.

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

Для чего нужны расширения?

В первую очередь расширения созданы для облегчения внесения изменений в программу. То есть, если пользователи просят добавить какой-либо функционал, то до появления расширений программистам приходилось снимать конфигурацию с полной поддержки и менять типовую конфигурацию.

Снятие с полной поддержки влечет за собой ряд неудобств:

  • пропадает возможность автоматического обновления, что приводит как минимум к увеличению времени на то, чтобы ;
  • требуется высокая квалификация специалиста, обслуживающего программу;
  • если изменения вносились в стандартные объекты типовой конфигурации, то при обновлении они могут пропасть, то есть замениться опять на типовые, от поставщика.

При использовании расширений при внесении изменений программист не будет трогать типовую конфигурацию. Все изменения будут делаться при помощи расширений, которые (как я писал выше) тоже являются конфигурациями. Таким образом, основная конфигурация останется на полной поддержке.

После обновления основной конфигурации, если произошли в новом релизе какие-то изменения с объектом, который ранее был изменен расширением, то изменения все равно возьмутся из расширения. То есть расширения имеют больший приоритет, чем основная конфигурация.

Видео — расширения в 1С за 45 минут

Получите 267 видеоуроков по 1С бесплатно:

Пример добавления расширения в 1С

Чтобы показать, что такое расширение, лучше привести пример его создания в конфигураторе 1С.

В конфигураторе зайдем в меню «Конфигурация» и выберем пункт «Расширения конфигурации». Откроется окно со списком расширений (если они есть). Нажмем кнопку «Добавить» и добавим новое расширение. Теперь можно открыть конфигурацию расширения:

Как видно, конфигурация расширения имеет точно такую же структуру, как и основная. Только она изначально совершенно чистая, без объектов.

Недавно я писал статью о том, как самим сделать . На её примере я хочу сделать ее встроенной при помощи расширения.

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

Поэтому справочник мы позаимствуем из основной конфигурации:

Теперь нажмем правой кнопкой мышки на «Обработки» и выберем «Вставить внешнюю обработку, отчет…» Таким образом, добавим новую обработку в конфигурацию расширения. Если Вы используете мою обработку, то сразу переименуйте ее, так как в основной конфигурации уже есть обработка с таким именем.

Ну и последний штрих. Я хочу, чтобы моя обработка отражалась в меню «Администрирование». Для этого позаимствуем одноименную подсистему основной конфигурации. Не забудьте указать в обработке, что она относится к этой подсистеме.

Вот такая структура у меня получилась:

Посмотрим, что у нас получилось. Обновляем конфигурацию базы данных и запускаем программу в режиме 1C: Предприятие, и идем в меню «Администрирование». Да, чуть не забыл, конфигурацию расширения необходимо закрыть, иначе программа не запустится:

Реализовано в версии 8.3.6.1977.

Мы реализовали принципиально новый механизм адаптации прикладных решений под конкретного потребителя - механизм расширений.

Чем хороши расширения?

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

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

Но часто заказчик хочет что-то добавить или что-то изменить в типовой конфигурации «под себя». Для этого режим поддержки изменяется, конфигурация снимается с полной поддержки. Партнёр, выполняющий внедрение, или собственные IT специалисты заказчика, вносят в неё необходимые изменения. С этого момента полностью автоматическое обновление типовой конфигурации на новую версию, выпущенную поставщиком, становится невозможным.

Теперь для обновления конфигурации требуется участие специалиста. Причём, если изменения, внесенные по воле заказчика, были значительными, то и от специалиста, выполняющего обновление конфигурации, могут потребоваться значительные затраты времени. И зачастую может потребоваться очень хорошее знание как самой типовой конфигурации, так и внесённых доработок.

Стратегия, предлагаемая расширениями, заключается в следующем. Если вы хотите изменить типовую конфигурацию, вы не трогаете саму конфигурацию. Все изменения вы выполняете в расширении, которое, по сути, тоже является конфигурацией.

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

Когда поставщик выпускает новую версию типовой конфигурации, выполняется автоматическое обновление, поскольку режим поддержки типовой конфигурации не менялся. Она осталась на полной поддержке поставщика. А при запуске обновлённого прикладного решения платформа снова автоматически объединит изменённую типовую конфигурацию с вашим расширением. И заказчик продолжит работать с изменённым, по его желаниям, типовым решением.

Когда нужно использовать расширения?

Механизм расширений заманчив своей универсальностью. Поэтому важно иметь правильное представление о том, для решения каких задач он предназначен.

Во-первых, расширения незаменимы тогда, когда прикладное решение работает в режиме разделения данных. Например, в модели сервиса. Один из абонентов хочет иметь пару дополнительных отчётов. В то время как остальные абоненты хотят работать с неизмененной типовой конфигурацией.

Тогда именно для этого абонента вы можете разработать расширение, в котором и реализовать все его пожелания. Абонент подключит себе это расширение и будет работать с изменённой конфигурацией. В то время как для остальных абонентов никаких изменений не произойдет. Потому что все расширения подключаются и запускаются в разрезе текущих значений разделителей.

Другая ситуация - это доработки типовой конфигурации под конкретного заказчика у него на внедрении. Или же доработки типовой конфигурации, которые выполняют для себя IT специалисты заказчика собственными силами. Если все эти доработки выполнить в расширении, то типовая конфигурация останется на полной поддержке, что значительно упростит её дальнейшее сопровождение.

Есть соблазн использовать расширения для создания тиражных прикладных решений, однако делать этого не стоит. Во-первых, потому, что расширения не проектировались под такие задачи. А во-вторых, потому, что другие механизмы платформы, например механизмы поставки и поддержки, ничего не знают о расширениях.

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

Именно для этой задачи мы и создали механизм расширений. Конечно, в нём можно заметить разные черты и других перечисленных направлений разработки. Но они не являются его основным назначением и не должны сбивать вас с толка.

Что можно изменять уже сейчас с помощью расширений?

Пока сделано не очень много из того, что планируется сделать. Механизм, конечно, будет развиваться. Но то, что уже сделано, может быть полезно во многих случаях на внедрениях. Сейчас:

  • Можно изменять управляемые формы , существующие в типовой конфигурации;
  • Можно добавлять новые подсистемы . Можно изменять состав подсистем, имеющихся в типовой конфигурации;
  • Можно изменять роли типовой конфигурации, добавляя в них объекты, созданные в расширении;
  • Можно изменять командный интерфейс типовой конфигурации (основного раздела, подсистем);
  • Можно добавлять новые отчёты и обработки .

В дальнейшем мы планируем постепенно наращивать функциональность расширений и будем рады получить ваше мнение о том, какая функциональность наиболее востребована на внедрениях с небольшими доработками.

Как устроено расширение?

Расширение очень похоже на обычную конфигурацию. Оно также представляется в виде дерева объектов. Для работы с расширением используются те же приёмы работы, что и с обычной конфигурацией.

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

Заимствованные объекты нужны не всегда. Лучше всего это объяснить на «бытовом» примере, если провести аналогию с обедом в ресторане.

Ситуация первая, когда заимствованные объекты нужны.

Вы привыкли обедать в одном и том же ресторане. Вы всегда заказываете бифштекс и чай. Например, потому что они очень хороши в этом ресторане. Или по другой причине. Это не важно. Важно лишь то, что кушать вы собираетесь именно их, и ничто другое.

Тогда ресторан - это типовая информационная база. Вы - расширение. Меню ресторана - это расширяемая типовая конфигурация. Бифштекс и чай - это заимствованные объекты. Вы их позаимствовали (запомнили, что они есть в меню).

Как расширение подключается к конфигурации и работает? Вы приходите в ресторан и просите меню. В меню вы видите, что есть бифштекс и чай. То есть устанавливаете соответствие между заимствованными объектами и объектами типовой конфигурации. Естественно, соответствие вы устанавливаете по именам:). Вам приносят бифштекс и чай, вы их съедаете. То есть расширение подключается и работает.

Через неделю вы приходите, но меню ресторана изменилось (типовую конфигурацию обновили). Однако в меню по-прежнему есть бифштекс и чай. Именно они вам и нужны. Вам их приносят, вы их съедаете. То есть расширение продолжает работать с обновлённой типовой конфигурацией.

Ещё через неделю вы приходите в ресторан, и видите, что бифштекс и чай исчезли из меню. Вы встаёте и уходите (сообщение об ошибке подключения расширения). Потому что вы хотели именно их. А о других блюдах (объектах) вы понятия не имеете. Разработчик не обучил вас, как правильно кушать улиток или омаров.

Другая ситуация, когда можно обойтись без заимствованных объектов.

Вы идёте в ресторан, но наличие конкретных блюд вас не интересует. Потому что вы всё равно не собираетесь их есть. Вы хотите их только сфотографировать. А фотографировать вы умеете какое угодно блюдо. Тогда вы просто подключаетесь к конфигурации и говорите: несите все закуски, которые есть у вас в меню (получаете коллекцию документов из метаданных). Я их перепроводить буду (фотографировать).

Если описать это сухим языком разработчиков то получится, что заимствовать объекты нужно:

  • Когда они необходимы для визуального конструирования. Например, вы расширяете форму и добавляете реквизит формы типа СправочникВалюты.Ссылка . Тогда конечно вы должны заимствовать справочник Валюты , чтобы при подключении к типовой конфигурации быть уверенными в том, что в ней такой справочник всё ещё есть.
  • Когда они необходимы для работы кода. Например, в коде расширения вы обращаетесь к реквизиту справочника Номенклатура - Импортер . Тогда этот реквизит также надо заимствовать, чтобы при подключении быть уверенным, что в типовой конфигурации всё ещё существует такой реквизит у справочника Номенклатура .

Подключение расширения

Вы создаёте расширение в конфигураторе. После того, как оно отлажено и проверено, вы можете его отторгнуть, сохранив расширение в файл *.cfe.

Этот файл вы можете передать заказчику. Заказчик самостоятельно загрузит его в свою информационную базу в режиме 1С:Предприятие с помощью стандартной функции Управление расширениями конфигурации .

Работа с расширениями доступна из встроенного языка, поэтому в прикладном решении вы можете создать собственную обработку, которая будет загружать расширения. Чтобы расширениями «не баловались» все подряд, мы добавили новое право - Администрирование расширений конфигурации .

При загрузке расширения из файла оно сохраняется в информационной базе. Причём сохраняется оно в разрезе текущих значений разделителей, используемых в данном сеансе.

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

В результате, при работе в режиме разделения данных расширение будет применено только для пользователей этого конкретного абонента. А если разделение данных не используется, то расширение будет работать для всех пользователей информационной базы.

При подключении расширения, как мы уже говорили, контролируется, что в типовой конфигурации существуют заимствованные объекты. Сопоставление объектов происходит по именам.

Кроме этого возможен и более тонкий контроль. Вы можете контролировать не только сам факт наличия объектов, но и состояние их отдельных свойств. То есть, если вспомнить о ресторане и бифштексе, для вас может быть важно не просто наличие как-то приготовленного бифштекса, а именно то, что здесь его готовят непрожаренным, «с кровью».

Возвращаясь к расширению, стандартно оно не контролирует свойства заимствованных объектов. Но если в этом есть необходимость, вы можете некоторые свойства сделать контролируемыми. Например, для вашего алгоритма важно, чтобы не только существовал справочник Номенклатура , но и то, что его код имеет тип Строка .

Тогда если в типовой конфигурации поставщик изменит тип кода этого справочника на Число , ваше расширение определит это в момент подключения и сообщит об ошибке.

Интересный момент связан с переименованием объектов типовой конфигурации. Например, вы пришли в ресторан, а в меню вместо Бифштекс написано Стейк . То есть подключаясь к конфигурации расширение не находит в ней справочник Номенклатура , потому, что поставщик переименовал его в Товары .

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

Работа расширения

Можно довольно долго рассказывать об особенностях расширения разных объектов, об особенностях работы самих расширений. Но мы ограничены рамками обзорной статьи, поэтому затронем только ключевые и наиболее показательные моменты.

Основная «прелесть» расширений заключается, конечно, не в том, что можно добавить к типовой конфигурации что-то, чего в ней нет. А в том, что в расширении можно изменить то, что в типовой конфигурации уже есть. То есть свойства заимствованных объектов вы можете изменять.

Основную концепцию, используемую при совместной работе конфигурации и расширения, можно описать следующим образом. В тех местах, где они «не пересекаются», расширение дополняет конфигурацию. В тех местах, где они «пересекаются» - применяется расширение.

Подробнее это можно увидеть на примере управляемых форм. Вы можете заимствовать форму из основной конфигурации и редактировать её в расширении без ограничений. Для визуальной части формы и для её модуля используются две разные стратегии объединения.

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

Если изменений не было, или они были только в типовой конфигурации - применяется значение из типовой конфигурации. В остальных случаях применяется значение из расширения.

Таким образом, если в расширении вы добавили в форму новую команду - вы её увидите вместе с остальными командами формы. А если изменили заголовок существующей группы, то вы будете видеть свой заголовок даже в том случае, если заголовок этой группы в типовой конфигурации поменяет поставщик.

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

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

Что касается остальных объектов, которые вы можете использовать в расширении, то для них всё выглядит гораздо проще.

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

Расширять роли вы можете только добавляя в них объекты, созданные в расширении. Удалить что-нибудь из существующей роли вы тоже не можете. Это же относится и к командному интерфейсу.

Расширение - это почти конфигурация

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

У расширения (как и у обычной конфигурации) есть основная конфигурация и конфигурация базы данных. Механизм сравнения и объединения конфигураций работает с расширениями так же, как и с обычными конфигурациями.

Вы можете выгрузить расширение в файл (правда, с другим расширением *.cfe), и загрузить из файла. Расширения можно выгружать / загружать в XML.

Механизмы глобального поиска, замены, редактирования текстов интерфейсов также работают и с расширениями.

Появились новые параметры командной строки для работы с расширениями, а также новые события в журнале регистрации.

Во встроенном языке основной объект для работы с расширениями это МенеджерРасширенийКонфигурации .

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

1. Зачем нужны расширения конфигурации

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

2. Возможности расширений конфигурации

С помощью расширений конфигураций вы можете:

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

Многие из этих задач реализовать с помощью дополнительных отчетов и обработок затруднительно или вовсе невозможно.

3. Сравнение с дополнительными отчетами и обработками

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

  • они позволяют сделать все, что возможно с помощью дополнительных отчетов и обработок, и много того, что с помощью дополнительных отчетов и обработок сделать нельзя;
  • их проще и удобнее разрабатывать: в сервис загружается то же расширение конфигурации, которое используется для «коробочной» версии приложения. Для загружаемых в сервис расширений не нужно добавлять специальный программный интерфейс и не требуется подготавливать «комплект поставки». Нужно лишь обеспечить выполнение требований сервиса .

4. Порядок разработки и использования

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

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

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

    • использовать расширение в своих приложениях;
    • предоставить доступ к расширению своим клиентам (обслуживаемым абонентам) - одному, некоторым по своему выбору или всем (см. статью по ссылке).

    Если правообладателем расширения конфигурации является клиент (абонент), по заявке которого разработано расширение, то:

    • клиент получает доступ к этому расширению конфигурации автоматически;
    • расширение конфигурации может использоваться только в приложениях этого клиента.
  6. Установка в приложения. Владельцы абонентов , имеющих доступ к расширению конфигурации, могут установить его в свои приложения (см. статью по ссылке).

Условия разработки, предоставления клиентам и сопровождения расширений конфигурации каждая обслуживающая организация определяет самостоятельно.

5. Сопровождение и обновление

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

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

6. Примеры расширений конфигурации

6.1. Пример 1: вывод сведений о погоде

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

Расширение отображает в начальной странице приложения сведения о погоде, полученные через публичный API с погодного сайта http://api.wunderground.com .

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

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

  • http://api.wunderground.com - определение местоположения и получение сведений о погоде;
  • http://icons.wxug.com - получение картинки погоды.

Расширение совместимо с любой конфигурацией, так как не заимствует объектов из расширяемой конфигурации.

6.2. Пример 2: предоставление ленты новостей

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

Приложение создает внешний программный интерфейс для получения информации в формате RSS, используемом лентами новостей, о последних десяти поступлениях в кассу для конфигурации «Бухгалтерия предприятия, редакция 3.0». В составе расширения реализован XDTO-пакет (URI пространства имен http://www.w3.org/2005/Atom):

а также HTTP-сервис, возвращающий информацию о последних десяти поступлениях в кассу, полученную по данным документов «Приходный кассовый ордер».

Для удобства подключения к RSS-ленте расширение выводит в начальной странице приложения:

  • гиперссылку с адресом ленты новостей;
  • QR-код с адресом ленты новостей - для чтения с помощью камеры мобильного устройства.

При отображении на мобильном устройстве полученной ленты новостей пользователь получит сведения о последних поступлениях в кассу:

Для генерации QR-кода расширение конфигурации обращается к внешнему ресурсу http://api.qrserver.com , поэтому это расширение также должно подключаться в небезопасном режиме.

Изучив опыт использования предыдущих версий программы, и учтя тот факт, что каким бы универсальным и всеобъемлющим не было конкретное решение, в конечном итоге в 90% случаев требуется его доработка под конечного пользователя. Разработчики 8 версии программы 1С реализовали несколько принципиально новых решений для минимизации необходимости изменения стандартных механизмов конфигураций:

  • Буквально с первых версий программы у элементов многих справочников появилась возможность создания дополнительных свойств и категорий с использованием соответствующего плана видов характеристики и регистра сведений;
  • Дополнительные печатные формы и формы заполнения табличных частей, равно как и дополнительные отчеты и обработки теперь могут вызываться из соответствующего справочника;
  • Обработка стандартных процедур объектов осуществляется не внесением изменений в модуль, а путем подписок на события;
  • И, наконец, с версии платформы 8.3.6 появились в 1С расширения конфигурации.

Что такое расширения конфигурации 1С, как с ними работать, ограничения в использовании – вот тот спектр вопросов, которые мы попытаемся раскрыть в нашей статье.

Немного теории

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

  1. Сравнивать типовую и имеющуюся структуру метаданных;
  2. В случае существенного отличия типовых элементов следить за корректным обновлением;
  3. Вносить соответствующие изменения после обновления.

Все это сильно усложняло процесс обновления, увеличивая время отработки и, зачастую, лишало организацию возможности обновления типовых модулей дорогостоящего программного обеспечения.

Механизм расширений позволяет без снятия типовой конфигурации с поддержки дорабатывать многие ее элементы. Фактически, разработчик, на основе типового решения создает свою собственную конфигурацию, которая является оболочкой для типового решения. В этом случае процесс обновления типовой части происходит автоматически, при запуске же конечным пользователем платформа объединяет оба решения для пользователя.

Ситуации, в которых можно использовать расширения

Как и у любого другого инструмента, у механизма расширений существует ряд характеристик, и ограничений которые определяют область их использования:

  • Расширения могут работать с управляемыми формами;
  • Механизм поддерживает изменение и добавление существующих подсистем;
  • До выхода платформы 8.3.8 в расширении можно было только изменять существующие роли, после обновления они позволили добавлять новые, ограничивая доступ даже к объектам основной базы;
  • Существующий механизм позволяет по собственному желанию изменять командный интерфейс подсистем и основного раздела конфигурации;
  • Также этот инструментарий позволяет добавлять обработки и отчеты без внесения изменений в структуру базы;
  • В версии платформы 8.3.9.718 значительно переработан механизм диагностирования совместимости расширения и основной конфигурации.

Из вышесказанного становится понятно, что:

  1. При работе с обычными формами функционал расширений значительно ограничен;
  2. Хотя и облегчился процесс обновления основной конфигурации, однако возможность использования конкретного расширения (в том числе и в качестве тиражных решений) может быть серьезно ограничена как изменениями исходной структуры, так и несколькими параллельно используемыми расширениями;
  3. Использовать этот механизм целесообразно в тех случаях, когда есть необходимость дифференциации внешнего вида и функционала, используемыми различными пользователями, либо когда собственными силами производится доработка типовой конфигурации, находящейся на поддержке.

Перейдем к практике. В качестве исходной базы мы будем использовать конфигурацию «Зарплата и управление персоналом» версии 3.1.3.223, работы будут осуществляться на платформе 8.3.10.2561, режим работы – файловый.

Создание расширения

В конфигураторе войдем в меню Конфигурация->Расширения конфигурации, откроется форма (Рис.1).

Именно здесь и можно создать новое расширение. Нажмем кнопку «Добавить». Вот и окно нового расширения (Рис.2)

Рис.2

Рассмотрим его элементы:

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

Список поля «Назначение» состоит из трех значений, опишем их в порядке исполнения:

  1. Исправление – расширения этого назначения создаются для корректировки незначительных неточностей и ошибок в заимствованных объектах;
  2. Адаптация – значение по умолчанию, расширения этого типа предназначены для подстройки типовых объектов под требования конкретного пользователя, (если расширение создавалось в версии программы ниже 8.3.9, после обновления платформы оно будет иметь именно это назначение);
  3. Дополнение – вносят совершенно новый функционал в типовое решение.

Запуск расширения

Двойной щелчок на имени расширения в окне из Рис.1, открывает окно расширения (Рис.3)


Как видим, оно представляет собой дерево, подобное дереву основной конфигурации. И здесь возникает один вопрос, в каких случаях следует заимствовать объект?

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

То есть, если для нашей разработки потребуется реквизит «ИНН» справочника «Физические лица», если он будет использован в модуле формы, мы должны его заимствовать из основной базы. В этом случае каждый раз при запуске расширения будет производиться проверка на наличие этого реквизита в справочнике основной конфигурации и на соответствие типа данных в исходной базе и в расширении.

Если после обновления или в ходе разработки нового функционала возникнет несогласованность между типами данных расширения и конфигурации или еще какие-то ошибки система проинформирует об этом пользователя (Рис.4)

Окно в правом нижнем углу указывает на нестандартную ситуации при подключении расширения, двойной клик на нем открывает подробную информацию. В данном случае мы просто поменяли тип значения у реквизита ИНН со значения «Строка» на значение «Булево» у заимствованного объекта, однако гораздо чаще бывает обратная ситуация – когда обновление типового продукта приводит к изменению или ликвидации реквизита основной базы.

Отработав и протестировав расширение на копии базы, его можно выгрузить в отдельный файл, для этого в окне (Рис.5) необходимо нажать кнопку «Конфигурация», выбрать пункт «Сохранить в файл». В отличие от обычных файлов конфигурации, имеющих расширение cf, файл дополнения к конфигурации будет иметь маску *.cfe.

Как видно из вышеприведенного рисунка загрузить новый функционал можно из того же окна, а можно из основного окна программы.

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

Путь для подключения доработки выглядит следующим образом: Все функции->Стандартные->Управление расширениями конфигурации. Открывающееся окно представлено на Рис.6

Рис.6

Нажатие на кнопку «Добавить», открывает диалоговое окно выбора файла, в котором необходимо выбрать нашу выгрузку. Если у обработки установлена галочка (Рис.7) и расширение содержит ошибку, подключение функционала будет отменено, и программа сообщит о возникновении исключительной ситуации.

Рис.7

Чтобы после успешного добавления наш функционал заработал, программу надо перезапустить.

Заимствование объектов и порядок срабатывания модулей

Для того, чтобы проследить последовательность выполнения обработчиков, мы включим возможность изменения нашей конфигурации и добавим в нее новую обработку, функционал которой будет заключаться только в одном – она будет сообщать, что её запустили из основной конфигурации, код на Рис.8.

Рис.8

Добавим эту обработку в расширение.

Для этого:

  • Правой кнопкой мышки активизируем контекстное меню формы обработки (Рис.9);

Рис.9

  • Выберем пункт «Добавить в расширение»;
  • В дереве дополнительной конфигурации появится и сама обработка и дубликат её формы;
  • Открыв форму, мы обнаруживаем, что команда, вызывающая сообщение тоже есть, только ей не присвоен обработчик;
  • Добавление действия команды вызывает диалоговое окно (Рис.10) в котором помимо основных директив места исполнения команды, присутствуют еще группа «Тип вызова».

Рис.10

Мы имеем три типа вызова для имеющейся процедуры;

  • Вызывать перед – исполнение кода расширения будет запущено прежде, чем отработает основная конфигурация;
  • Вызывать после – доработанная процедура пойдет вторым номером;
  • Вызывать вместо – процедура из основной конфигурации вообще не будет выполнена.

Оставим тип вызова в положении «Вызывать после» и добавим процедуру «Расш1_СообщитьПосле(Команда)» (Рис.11).

Рис.11

Результатом запуска нашей обработки будет последовательно сообщенные две фразы (Рис.12), то есть сообщение дополнительной конфигурации отобразиться после сообщения основной. В случае если бы мы выбрали «Вместо», первой строки мы бы вообще не увидели.

Рис.12

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

Механизм аннотаций

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

Рис.13

При добавлении каждого нового расширения система самостоятельно выстраивает порядок их исполнения.

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

Кроме этого последовательность выполнения процедур добавляемых модулей можно регулировать с помощью аннотаций:

  • &Перед(«ИмяПроцедуры»);
  • &После(«ИмяПроцедуры»);
  • &Вместо(«ИмяПроцедуры»).

Как видно, их набор схож с тем, что был продемонстрирован в предыдущем разделе, сходен и функционал.

Так как заимствованный модуль и модуль-донор находятся в одном пространстве имен, никаких дополнительных определений для типовых переменных и методов в этом случае не нужно.

Несколько иначе, нежели с процедурами обстоит дело с функциями. Дело в том что, выполнение типовой процедуры может быть как бы окантовано кодом расширения, то есть можно вставить какие-то действия до кода процедуры, некоторые алгоритмы после, а вот для функций это не прокатит. Если основная функция будет выполняться после кода расширения, возвратное значение замещающей функции не будет получено, если же перед измененным алгоритмом, то не будет получено значение основной функции и аннотация &После отработает как &Вместо.

Для ликвидации такой «несправедливости» был создан метод ПродолжитьВызов().

Вообще говоря, использовать аннотацию «Вместо» немного не корректно, хотя порой и необходимо. Используя её, мы в значительной мере ограничиваем тот функционал, который может быть существенно изменен и доработан в типовых конфигурациях.

Внесение изменений в модуль объекта

Механизм подписок на события очень сильно облегчил работу разработчикам, но было одно серьезное НО.

Но для его использования, зачастую приходилось создавать собственный общий модуль, в котором бы хранились процедуры обработки тех или иных действий с данными. В настоящее время использование расширений позволило в значительной мере пересмотреть данный функционал.

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

  • Выберем в конфигураторе «ПриемНаРаботу» и из его контекстного меню добавим его в наше расширение (кстати этот механизм имеет комбинацию горячих клавиш Альт+Шифт+Ф2);
  • После выбора соответствующего дополнения мы получим картинку, как на Рис.14;

Рис.14

  • Нас будет интересовать выделенный желтым цветом элемент «Модуль объекта», откроем его, активировав предварительно соответствующей галочкой (Рис.15);

Рис.15

  • Мы получим чистый лист программного модуля, обратим внимание на верхнюю панель, а точнее, на элемент, представленный на Рис.16, в ниспадающем списке здесь представлены события, которые можно обработать для данного объекта;

Рис.16

  • Попробуем в сообщении вывести номер документа при его записи, выбрав соответствующее событие;
  • Мы получим форму выбора типа вызова (Рис.17), определим, когда будет выводиться номер;

Рис.17

  • Код процедуры показан на Рис.18;

Рис.18

В некоторых случаях из-за установленной галочки «Безопасный режим», подключение расширения происходит с ошибкой.

Небольшой анонс

В ближайшее время фирма 1С планирует выпуск платформы 8.3.11, в которой они анонсировали возможность добавления собственных:

  • Документов;
  • Справочников;
  • Планов обмена;
  • Регистров сведений.

Так же должна быть реализована возможность добавления реквизитов и табличных частей. При этом разработчики учли возможность изменения типовых решений, которое может повлечь за собой сбой в работе расширения.

Данные, внесенные в расширение никуда не пропадут, а до того момента, как не будет решена проблема совместимости, изменяемый дополнением справочник основной конфигурации будет недоступен для записи.