Расширения конфигураций в 1С: основные понятия и методы

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

Рис.1

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

Рис.2

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

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

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

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

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

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

Рис.3

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

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

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

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

Рис.4

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

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

Рис.5

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

Для подключения расширения в режиме 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С:Зарплата и управление персоналом 8 (Ред. 3.1)  - 10 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "1С:Зарплата и управление персоналом 8 (Ред. 3.1)". Пройди тест! Всего 10 вопросов:Если флажок Используются ...
Тест 1С:Управление производственным предприятием 8  - 7 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "1С:Управление производственным предприятием 8". Пройди тест! Всего 7 вопросов:Какие из перечисленных причин могут привести ...
Тест 1С:Бухгалтерия 8.3  - 5 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "1С:Бухгалтерия 8.3". Пройди тест! Всего 5 вопросов:В программе 1С:Бухгалтерия 8 документ Поступление доп. расходов ...
Тест Платформа 1С:Предприятия 8  - 7 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "Платформа 1С:Предприятия 8". Пройди тест! Всего 7 вопросов:При объединении с приоритетом основной конфигурации значение ...
Тест 1С:Управление нашей фирмой 8  - 5 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "1С:Управление нашей фирмой 8". Пройди тест! Всего 5 вопросов:Можно ли использовать отчет Заказы поставщикам ...
Тест 1С:Управление торговлей 8 (ред. 11.2)  - 7 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "1С:Управление торговлей 8 (ред. 11.2)". Пройди тест! Всего 7 вопросов:Перемещение ДС между кассами предприятия ...
Тест 1С:Документооборот 8 (Ред. 2.0)  - 5 вопросов от 15.12.2017
Проверь свои профессиональные навыки по программе "1С:Документооборот 8 (Ред. 2.0)". Пройди тест! Всего 5 вопросов:В списке штрихкодов в разделе Настройка ...
Форма статистического наблюдения № П (услуги) для 2018 года (2)
Внесены изменения в форму статистического наблюдения № П (услуги) "Сведения об объеме платных услуг населению по видам", утвержденную приказом Росстата ...
Форма статистического наблюдения № 1-услуги за 2017 год (2)
Внесены изменения в форму статистического наблюдения № 1-услуги "Сведения об объеме платных услуг населению", утвержденную приказом Росстата от 31.08.2017 № ...
Бонусная система для УТ 10.3
Данная подсистема призвана упростить и автоматизировать процесс расчета и начисления бонусов покупателей ...
ФНС изменит порядок подачи электронных заявлений
Федеральная налоговая служба РФ внесет поправки в порядок предоставления заявлений, уведомлений и запросов в налоговые органы в электронном виде ...
Microsoft выпустила набор инструментов для квантового программирования
Компания Microsoft представила бесплатную предварительную версию пакета инструментов для квантовой разработки, предназначенную для тех, кто хочет освоить разработку приложений для ...
Это Спарта!
Как 1Сник помогает злу. И как прекратить это делать ...