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

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

  • Расширяемая конфигурация – основная конфигурация информационной базы, для которой применяется расширение или для которой расширение разрабатывается.
  • Расширение конфигурации – набор объектов конфигурации, подключаемых к расширяемой конфигурации и содержащий набор объектов, добавляемых к расширяемой конфигурации. Расширение может включать в себя как объекты расширяемой конфигурации, так и объекты, которые отсутствуют в расширяемой конфигурации.
  • Собственный объект – самодостаточный объект конфигурации, который может находиться как в расширяемой конфигурации, так и в расширении (отчет, обработка или подсистема).
  • Заимствованный объект – собственный объект, добавленный в расширение конфигурации.
  • Расширяемый объект – собственный объект, для которого в заимствованном объекте изменены какие-либо параметры (свойства, формы и т. д.).
  • Расширяющий объект – это заимствованный объект, в который внесены изменения относительно расширяемого объекта. Наличие в заимствованном объекте только контролируемых свойств не делает заимствованный объект расширяющим.
  • Результирующий объект – это собственный объект плюс объединение всех расширяющих объектов (если расширений несколько). Если для собственного объекта нет расширяющих объектов – он становится результирующим «без изменений». Т.е. в конфигурации, с которой работает пользователь – все объекты являются результирующими, вне зависимости от наличия и количества установленных расширений.
  • Расширяющее свойство – свойство заимствованного объекта, которое изменяет одноименное свойство расширяемого объекта.
  • Контролируемое свойство – свойство заимствованного объекта, значение которого проверяется при подключении расширения к расширяемой конфигурации. Если при подключении расширения (в режиме 1С:Предприятие) значение контролируемого свойства в расширении не совпадет со значением этого же свойства в расширяемой конфигурации, расширение не будет подключено.
  • Модифицируемое свойство – свойство заимствованного объекта, значение которого в результирующем объекте будет получаться из расширения.

Свойство заимствованного объекта не может быть одновременно контролируемым и модифицируемым.

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

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

В качестве расширяемых объектов могут выступать:

  • Управляемые формы;
  • Роли;
  • Подсистемы;
  • Настройки начальной страницы (рабочего стола) прикладного решения;
  • Общие модули;
  • Модули объектов для всех типов объектов;
  • Модули менеджеров для всех типов объектов;
  • Модуль сеанса;
  • Модуль управляемого приложения;
  • Модуль внешнего соединения;
  • Модули команд.

В качестве собственных объектов расширения могут выступать:

  • Подсистемы;
  • Обработки;
  • Отчеты;
  • Реквизиты, табличные части и реквизиты табличных частей в заимствованных обработках и отчетах;
  • Роли;
  • XDTO-пакеты;
  • Web-сервисы;
  • HTTP-сервисы;
  • WS-ссылки;
  • Общие макеты;
  • Общие команды;
  • Общие модули (кроме глобальных серверных и привилегированных общих модулей);
  • Группы команд;
  • Общие картинки;
  • Формы, макеты и команды заимствованных объектов:
  • Планов обмена;
  • Критерев отбора;
  • Хранилищ настроек;
  • Справочников;
  • Документов;
  • Журналов документов;
  • Перечислений;
  • Отчетов;
  • Обработок;
  • Регистров сведений;
  • Регистров накопления;
  • Регистров бухгалтерии;
  • Регистров расчета;
  • Планов видов характеристик;
  • Планов счетов;
  • Планов видов расчета;
  • Бизнес-процессов;
  • Задач;
  • Таблиц внешних источников данных;
  • Кубов внешних источников данных;
  • Таблиц измерений внешних источников данных.

Среди контролируемых свойств следует особо выделить:

  • Состав плана обмена;
  • Предопределенные элементы для справочников, планов видов характеристик, планов счетов и планов видов расчетов.

В базовых версиях прикладных решений работа с расширениями не поддерживается.

Изучив опыт использования предыдущих версий программы, и учтя тот факт, что каким бы универсальным и всеобъемлющим не было конкретное решение, в конечном итоге в 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, в которой они анонсировали возможность добавления собственных:

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

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

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

Предлагаем вашему вниманию новый механизм кастомизации приложений в облачном сервисе «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 , поэтому это расширение также должно подключаться в небезопасном режиме.

0. Введение

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

Согласно документации:

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

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

Более подробно о расширениях можно почитать и посмотреть здесь:

Заметки в зазеркалье
Курсы Гилёва и Насипова
Расширения в 8.3.9

Ниже я приведу полезные советы для работы с расширениями.

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

Итак, поехали!

1. Показать/скрыть неизмененные объекты

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

2. Последовательность выполнения обработчиков

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

а) Выполнить сначала типовой код, затем код из расширения:

&НаСервере Процедура Учеб_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Сообщение", "ПослеТиповогоОбработчика!"); УстановитьВыполнениеПослеОбработчиковСобытия("ВыполнитьПослеТиповогоОбработчика", ДополнительныеПараметры); КонецПроцедуры &НаСервере Процедура ВыполнитьПослеТиповогоОбработчика(Отказ, СтандартнаяОбработка, ДополнительныеПараметры) Сообщить(ДополнительныеПараметры.Сообщение); КонецПроцедуры

б) Выполнить сначала код из расширения, затем типовой код, затем опять код из расширения

&НаСервере Процедура Учеб_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Процедуры до типовых обработчиков Сообщить("До типового обработчика!"); // Устанавливаем обработчик после типового обработчика событий УстановитьВыполнениеПослеОбработчиковСобытия("ВыполнитьПослеТиповогоОбработчика"); // Дальше будет выполнен код из типового обработчика КонецПроцедуры &НаСервере Процедура ВыполнитьПослеТиповогоОбработчика(Отказ, СтандартнаяОбработка, ДополнительныеПараметры) // Код после типового обработчика из расширения Сообщить("После типового обработчика!"); КонецПроцедуры

в) Выполнить сначала типовой код, затем код из расширения, затем снова типовой код

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

&НаСервере Процедура Учеб_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Процедуры до типовых обработчиков Сообщить("ДоТиповогоОбработчика!"); // Процедуры из типового обработчика Если НЕ ЗначениеЗаполнено(БанковскийСчет.ВалютаДенежныхСредств) Тогда БанковскийСчет.ВалютаДенежныхСредств = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьВалютуРегламентированногоУчета(); КонецЕсли; РазместитьКонтактнуюИнформацию(); Если Параметры.Ключ.Пустая() Тогда ПодготовитьФормуНаСервере(); КонецЕсли; УправлениеФормой(ЭтаФорма); // Процедуры после типовых обработчиков Сообщить("ПослеТиповогоОбработчика!"); // Остановим выполнение типовых обработчиков УстановитьВыполнениеОбработчиковСобытия(Ложь); КонецПроцедуры

г) Отменить типовые обработчики

&НаСервере Процедура Учеб_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Остановим выполнение типовых обработчиков УстановитьВыполнениеОбработчиковСобытия(Ложь); КонецПроцедуры

3. Создание и использование общего модуля, модуля менеджера или модуля объекта

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

&НаСервере Процедура СообщитьДиректораНаСервере() Должность = "Директор"; ФИОРуководителя = "Иванов И.И."; Обработки.Учеб_Обработка.СообщитьДиректора(Должность, ФИОРуководителя); КонецПроцедуры

Модуль менеджера обработки:

Процедура СообщитьДиректора(Знач Должность, Знач ФиоРуководителя) Экспорт ТекстСообщения = СтрШаблон(НСтр("ru="%1 %2""), Должность, ФиоРуководителя); Сообщить(ТекстСообщения); КонецПроцедуры

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

4. Как подключить отладку

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


Оно возникает если в конфигураторе открыто наше расширение и лечится только закрытием окна расширения.

Для того, чтобы подключить отладку в расширении следует и спользовать ключ командной строки - “РежимОтладки”

Это упрощает отладку кода. В частности:

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

Для того чтобы его установить:

  • Запустить предприятия с ключом командной строки - " /C РежимОтладки "
  • В режиме конфигуратора установить параметр запуска:
    Сервис -> Параметры -> Запуск 1С:Предприятия -> Параметр запуска: ввести строку < РежимОтладки >

При первом подключении расширения или при изменении в версии расширения или поставщика, отладка может не подключится с таким же сообщением.

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

1. В конфигураторе закрыть это расширение
2. Запустить конфигурацию в режиме предприятие и открыть форму, связанную с расширением
3. Открыть расширение в конфигураторе
4. Перезапустить отладку.

5. Как писать запросы

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


6. Как сохранять данные

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

а) Сохранение данных формы

В редактируемой форме можно установить свойство - “АвтоматическоеСохранениеДанныхВНастройках” в "Использовать" и поставить флаг "Сохранение" над нужными реквизитами. Это позволит сохранять значения реквизитов типовым механизмом платформы:


Такое сохранение данных .

б) Хранилище общих настроек

В этом хранилище можно хранить любые данные. Подробнее можно .
Рассмотрим пример хранения произвольных данных.

Сохранение данных:

&НаСервере Процедура ПередЗакрытиемНаСервере() // Подготовим структуру хранения данных СтруктураНастроек = Новый Структура; СтруктураНастроек.Вставить("Всем", Всем); СтруктураНастроек.Вставить("Близким", Близким); СтруктураНастроек.Вставить("Друзьям", Друзьям); // Сохраним данные в хранилище общих настроек ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("Учеб_СделатьВсёХорошо", "Настройки", СтруктураНастроек); КонецПроцедуры

Восстановление данных:

&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // Инициализируем структуру СтруктураНастроек = Новый Структура; // Восстановим сохраненные данные СтруктураНастроек = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("Учеб_СделатьВсёХорошо", "Настройки", СтруктураНастроек); // Заполним значения реквизитов формы ЗаполнитьЗначенияСвойств(ЭтаФорма, СтруктураНастроек); КонецПроцедуры

7. Как добавить свой макет

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

8. Как подменить кнопку заполнения табличной части

Иногда может потребоваться и добавить свою кнопку заполнения и оставить типовую кнопку.
Для того, чтобы убрать типовую кнопку подальше, но не удалять её совсем можно установить свойство - “Только во всех действиях” - "Да":

В этом случае кнопка будет доступна из подменю “Еще”. Это позволит в случае непредвиденных ситуаций продолжить работу с типовой функциональностью.

9. Расширение как багфикс

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

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

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

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

10. Как вывести свою обработку в интерфейс

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

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

11. Как перевести расширение на 8.3.8

Чтобы перевести расширение на 8.3.8 следует выполнить следующие действия:

1. Снять режим совместимости в расширении.
Установить свойства совместимости такими же как и у основной конфигурации.

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

3. Обновить формы в расширении.
Следует обновить формы расширений из основной конфигурации. Чтобы и в расширении и в конфигурации формы были одинаковыми.

4. Привести компоновку формы к новым правилам движка.
С рекомендациями по адаптации форм к новой платформе можно ознакомиться по этой ссылке .

5. Проверить, что расширение выглядит и работает правильно.

Более подробно по каждому пункту описано в . Там же приведены полезные материалы по теме.

12. Как подключить расширение

1. Администрирование - "Печатные формы и обработки"

3. Кнопка "Добавить" - Выбираем файл

4. Кнопка "Перезапустить"

5. Готово!


13. Как обновить расширение

1. Администрирование - "Печатные формы и обработки"

3. Встаем на нужное расширение

4. "Еще" - Команда "Обновить из файла на диске"

5. Кнопка "Перезапустить"

6. Готово!

Пока на этом всё!

Благодарность можно выразить денежно, а то кризис, сами понимаете!

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

Изменение исходного кода

Есть разные стратегии кастомизаций. Если приложение поставляется в исходных кодах, то самый очевидный подход – переписать исходный код под свои нужды. И самая очевидная в этом случае проблема – переход на новую версию приложения, т.к. он влечет слияние (merge) исходных кодов измененной на стороне клиента версии и новой версии от поставщика. А это может быть нетривиальной задачей, особенно если код на стороне клиента сильно кастомизирован.

Плагины

Более безопасная в этом плане стратегия – плагины. Исходное приложение предоставляет плагину фиксированный набор интерфейсов, а также возможность зарегистрировать себя в приложении. При выходе новой версии приложения плагины, написанные для предыдущей версии, продолжат работать и в новой версии (при условии неизменности интерфейсов). Поведение плагинов в новой версии может отличаться от поведения в предыдущей, если поставщик ПО изменил поведение приложения. Концепция плагинов используется в самых разнообразных классах ПО – офисном и бизнес-софте, средах разработки (Visual Studio, Eclipse, …), графических и звуковых редакторах и т.п.

Подписки

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

Одна из разновидностей такого подхода – встраивание в основную программу возможности выполнять пользовательские скрипты на языках типа Visual Basic for Application (VBA). Кастомный код может, в частности, выполняться в ответ на события приложения. Тот же VBA показал себя очень мощным и гибким средством кастомизации; он встроен в Microsoft Office, AutoCAD, SolidWorks, CorelDRAW, WordPerfect, ESRI ArcGIS и другие продукты.

Кастомизации в решениях «1С»: начало

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

Изменение исходного кода приложений 1С

Когда клиент меняет исходный код решения 1С под свои нужды, ему надо помнить, что поставщик приложения тоже не бездействует и выпускает новые версии, добавляя функциональность и исправляя ошибки. Чтобы при установке новой версии приложения не потерялись изменения, сделанные под потребности клиента, нужно каким-то образом произвести слияние (merge) измененной предыдущей версии приложения и новой версии.

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

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

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

Настройка поставки на стороне поставщика

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

Настройка поддержки на стороне клиента

Когда клиент начинает что-то менять в типовой конфигурации, в инфобазе создаются две конфигурации:

  1. Оригинальная конфигурация поставщика.
  2. Текущая конфигурация, измененная на стороне клиента.
И вот поставщик выпускает новую версию. Она может поставляться в виде полного приложения, а может - в виде пакета обновления с измененными объектами. При переходе на новую версию у нас на стороне клиента имеется 3 конфигурации, на основании которых осуществляется так называемое трехстороннее слияние конфигураций:
  1. Старая конфигурация от поставщика.
  2. Текущая конфигурация клиента (старая конфигурация от поставщика плюс изменения, сделанные в ней клиентом).
  3. Новая конфигурация от поставщика.
Понятно, что в ряде случаев объекты, измененные поставщиком, можно обновлять автоматически:
  • Объекты, не измененные клиентом.
  • Простые изменения объектов на стороне клиента (например, добавление дополнительных реквизитов к объекту).
В случае же, когда объект был изменен и на стороне клиента, и в новой версии от поставщика, необходимо ручное вмешательство. У нас есть мощный механизм сравнения и объединения не только для модулей кода, но и для моделей (метаданных, форм, отчетов…), но даже с этим механизмом объединение конфигураций может быть нетривиальной задачей.

Внешние отчеты и обработки

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

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

Кастомизации в облаках

С появлением облачной технологии 1cFresh задача кастомизации вышла на новый уровень. Дело в том, что в «облаке» пользователи прикладного решения из разных организаций могут физически работать с одной информационной базой (т.е. с одним экземпляром приложения), но, в то же время, благодаря механизму разделения данных , видят только данные своей организации. Кастомизация через изменение исходного кода здесь становятся неприемлемой – каждой организации нужны свои кастомизации, и совершенно не нужны кастомизации «соседей» по инфобазе.

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

Расширения конфигурации

Итак, нам нужно было придумать механизм кастомизации, который бы удовлетворял следующим требованиям:
  1. Позволял бы легко обновлять кастомизированное решение на новую версию, избегая ручной работы по объединению конфигураций.
  2. Позволял включать кастомизацию при определенных условиях (например, если мы работаем в контексте определенной организации).
  3. Снижал вероятность потери работоспособности кастомизации при переходе на новую версию исходной конфигурации.
  4. Имел возможность отключения кастомизации в случае проблем для сохранения работоспособности приложения.
Такой механизм, помимо применения в облачных решениях, сильно облегчил бы жизнь при переходе на новую версию на внедрениях типовых конфигураций, где необходимы кастомизации.
Мы придумали такой механизм и назвали его расширения . Этот механизм в каком-то смысле совмещает в себе два подхода к кастомизации – идеологию плагинов и механизм подписок.

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

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

Основная конфигурация и расширение с заимствованным документом СчетФактураВыданный

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

Мы можем перед стандартной процедурой записи документа вызвать наш код, который, например, проверит, заполнено ли поле ответственного за документ сотрудника, и если нет – запишет в это поле текущего пользователя:

&После("ПередЗаписью") Процедура РасшАндромеда_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если (ЭтотОбъект.Ответственный = Справочники.Пользователи.ПустаяСсылка()) Тогда ЭтотОбъект.Ответственный = МодульПользователи.ПолучитьТекущегоПользователя(); КонецЕсли; КонецПроцедуры
В новой версии конфигурации реализация записи документа может измениться, но наш код в расширении будет по-прежнему выполняться перед стандартным кодом записи документа и делать свою работу.

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

Порядок выполнения расширений

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

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

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

Кастомизация форм в расширениях

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

На форму можно добавить новую кнопку (или даже несколько). В случае если несколько расширений добавляют на одну и ту же форму свои кнопки – все они будут присутствовать на итоговой форме во время исполнения.

А вот удалять стандартные элементы с формы не рекомендуется – это может сломать существующий в оригинальной конфигурации код (если он обращается к элементам формы). Если уж есть такая нужда – лучше делать элементы невидимыми через свойство «Видимость».

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

Преимущества расширений

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

Простота перехода на новую версию конфигурации

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

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

Изменения лежат отдельно

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

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

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

Раннее оповещение об ошибках

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

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

Что дальше?

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

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

Эта статья также доступна на следующих языках: Тайский

  • Next

    Огромное Вам СПАСИБО за очень полезную информацию в статье. Очень понятно все изложено. Чувствуется, что проделана большая работа по анализу работы магазина eBay

    • Спасибо вам и другим постоянным читателям моего блога. Без вас у меня не было бы достаточной мотивации, чтобы посвящать много времени ведению этого сайта. У меня мозги так устроены: люблю копнуть вглубь, систематизировать разрозненные данные, пробовать то, что раньше до меня никто не делал, либо не смотрел под таким углом зрения. Жаль, что только нашим соотечественникам из-за кризиса в России отнюдь не до шоппинга на eBay. Покупают на Алиэкспрессе из Китая, так как там в разы дешевле товары (часто в ущерб качеству). Но онлайн-аукционы eBay, Amazon, ETSY легко дадут китайцам фору по ассортименту брендовых вещей, винтажных вещей, ручной работы и разных этнических товаров.

      • Next

        В ваших статьях ценно именно ваше личное отношение и анализ темы. Вы этот блог не бросайте, я сюда часто заглядываю. Нас таких много должно быть. Мне на эл. почту пришло недавно предложение о том, что научат торговать на Амазоне и eBay. И я вспомнила про ваши подробные статьи об этих торг. площ. Перечитала все заново и сделала вывод, что курсы- это лохотрон. Сама на eBay еще ничего не покупала. Я не из России , а из Казахстана (г. Алматы). Но нам тоже лишних трат пока не надо. Желаю вам удачи и берегите себя в азиатских краях.

  • Еще приятно, что попытки eBay по руссификации интерфейса для пользователей из России и стран СНГ, начали приносить плоды. Ведь подавляющая часть граждан стран бывшего СССР не сильна познаниями иностранных языков. Английский язык знают не более 5% населения. Среди молодежи — побольше. Поэтому хотя бы интерфейс на русском языке — это большая помощь для онлайн-шоппинга на этой торговой площадке. Ебей не пошел по пути китайского собрата Алиэкспресс, где совершается машинный (очень корявый и непонятный, местами вызывающий смех) перевод описания товаров. Надеюсь, что на более продвинутом этапе развития искусственного интеллекта станет реальностью качественный машинный перевод с любого языка на любой за считанные доли секунды. Пока имеем вот что (профиль одного из продавцов на ебей с русским интерфейсом, но англоязычным описанием):
    https://uploads.disquscdn.com/images/7a52c9a89108b922159a4fad35de0ab0bee0c8804b9731f56d8a1dc659655d60.png