1. Главная страница » Компьютеры » 1С добавление документа в расширение

1С добавление документа в расширение

Автор: | 16.12.2019

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

Что такое расширения?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Geforce gtx 660 цена в рублях

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Читайте также:  Amd catalyst control center как открыть

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

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

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

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

Что мы сделали

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

Вы можете добавлять собственные:

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

Кроме этого к справочникам и документам прикладного решения вы можете добавить собственные:

  • Реквизиты;
  • Табличные части;
  • Реквизиты табличных частей.

Как это устроено физически

Чтобы не усложнять, рассмотрим основные принципы работы этого механизма на примере справочника.

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

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

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

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

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

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

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

Читайте также:  Mystery mmp 71dt2 не включается

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

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

Изменение расширяемой конфигурации

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

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

Невозможность применения расширения

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

Самое главное – данные никуда не исчезнут, они останутся в таблицах. А вот способы работы с этими таблицами могут быть разными.

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

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

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

Удаление расширения

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

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

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

Загрузка, применение и реструктуризация

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

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

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

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

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

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

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

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

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

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

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

Ограничения и планы

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

На текущий момент существенные, на наш взгляд, ограничения выглядят так:

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

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

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

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

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *