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

Как перенести объект из конфигурации в расширение полностью?

Я
   Novichok VX

01.04.21 — 15:27

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

  

Партнерская программа EFSOL Oblako

   RomanYS

1 — 01.04.21 — 15:31

Ты кажется расширение с чем-то путаешь

   Garykom

2 — 01.04.21 — 15:32

(0) CTRL+C -> CTRL+V

   Фрэнки

3 — 01.04.21 — 15:34

а о каких, например, объектах речь?

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

   Novichok VX

4 — 01.04.21 — 15:36

Самописные документы и обработки

   Novichok VX

5 — 01.04.21 — 15:38

(2)

да это работает, спс

   Фрэнки

6 — 01.04.21 — 15:40

:-)

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

   VladZ

7 — 01.04.21 — 15:44

(0) Какова конечная цель?

   Novichok VX

8 — 01.04.21 — 15:45

(7)

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

   VladZ

9 — 01.04.21 — 15:47

(8) Данные по этим объектам уже есть?

   Novichok VX

10 — 01.04.21 — 15:48

(9)

Которые до меня были в расширении есть, которые я создал пока нет.

   Chameleon1980

11 — 01.04.21 — 15:55

создавай лучше свои в основной конфигурации

1. ты знаешь, что делаешь

2 данных всё равно нет

3. дальнейших проблем меньше

   Chameleon1980

12 — 01.04.21 — 15:56

аааа стоп

ты и создал в основной

оставь так

   Garykom

13 — 01.04.21 — 15:57

Если конфа уже снята с поддержки (и там нахреначено своих объектов) то не советую в расширении допиливать

Это имеет смысл если хотим все допилки из конфы в расширение перекинуть, оставив типовую

   Novichok VX

14 — 01.04.21 — 15:58

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

   Garykom

15 — 01.04.21 — 16:01

(14) Дык см (13)

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

   Garykom

16 — 01.04.21 — 16:01

(15)+ Или откажись от расширения

   Asmody

17 — 01.04.21 — 16:05

   Dmitrii

18 — 01.04.21 — 16:42

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

Использовать для этого (новых объектов и новых реквизитов типовых объектов) расширение — просто глупость и бессмысленная блажь, не имеющая под собой никакой логической основы и реальной потребности. Просто массовое умопомрачение какое-то. Типа мода такая — лепить без разбора любые доработки только через расширение! А зачем? — А никто не знает…

   Kassern

19 — 01.04.21 — 16:44

(18) чтобы потом хобана хобана и обновили малой кровью перешли на новую версию конфы)

   Chameleon1980

20 — 01.04.21 — 16:58

(19)бля а тут че хобана отпадает?

куда у него денутся новые объекты со своим префиксом из основной

конфы при обновлении?

   Kassern

21 — 01.04.21 — 17:00

(20) а куда думаешь денутся его доработки в типовых формах и модулях?

   lucbak

22 — 01.04.21 — 17:46

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

   Dmitrii

23 — 01.04.21 — 18:04

(22) Чтобы понять все недостатки расширений надо попробовать делать это (сопровождать клиентов на поддерживаемой конфе) достаточно длительное время и с хоть сколько-нибудь серьёзными доработками.

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

А автор (19) вообще видимо не понимает какую дичь пишет. Ибо добавление своих объектов и реквизитов в основной конфигурации на процесс обновления на новую версию никак не влияет.

Расширения — крутая и полезная штука. Но не для этих целей.

   lucbak

24 — 01.04.21 — 18:47

(23) >> Чтобы понять все недостатки расширений надо попробовать делать это (сопровождать клиентов на поддерживаемой конфе) достаточно длительное время и с хоть сколько-нибудь серьёзными доработками.

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

   Chameleon1980

25 — 01.04.21 — 19:44

(24)видимо мелковат опыт в этом

(21)для доработки форм давно выбран наиболее оптимальный

вариант — программно

все для этого есть в нормальных типовых

и

никуда твои процедуры из форм не денутся

   lucbak

26 — 01.04.21 — 19:55

(25) что-то мне подсказывает, что мой опыт будет чуть побольше.

   Фрэнки

27 — 01.04.21 — 20:11

писькометр ищите

   Chameleon1980

28 — 01.04.21 — 20:23

(26)да ради бога.

   Dmitrii

29 — 01.04.21 — 20:28

(24) >> у меня есть такой опыт … А снимать конфу с поддержки это последнее дело.

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

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

   Kassern

30 — 02.04.21 — 09:16

(25) Вот представь у тебя кусок года воткнут в типовую функцию/процедуру, а в след релизе эта процедура изменилась(и таких вставок 100500 в некоторых конфах), то что по твоему перенесется при обновлении? Просто из сообщений читаешь, мол все так легко и просто, тыкнул обновить и все заработало…А теперь представь, что эти куски кода вставлены в расширение, а конфа с поддержки не снята, то тут останется лишь проверить, что обращения к типовым функциям действуют. Либо другой вариант, у тебя на поддержке штук 20 бухгалтерий и столько же Зуп, они типовые, но в них нужно каую нить херню в добавить в конфиг и сразу обновление такой конфы становится раза 2-3 дольше из-за сравнений, расширение в таких случаях выручает.

   Kassern

31 — 02.04.21 — 09:18

(30) Особенно «доставляет» переносить конфу с лохматых времен на новую версию… как раз подобная задача меня ждет в этом месяце(чертова маркировка и СРМ). А конфа запилена перепилена, извращались на ней жестоко.

   АннаО

32 — 07.04.21 — 17:36

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

   Kassern

33 — 07.04.21 — 17:44

(32) про новые объекты вообще вопросов нет, а вот с модифицированными типовыми процедурами могут быть проблемы, в этом случае расширения выручают

   Cthulhu

34 — 07.04.21 — 18:28

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

ЗЫ: интересно — ситуация двигается в сторону реализации именно pure модульности в виде конфигурации-карткаса с модулями-расширениями?..

   Dmitrii

35 — 07.04.21 — 20:18

(33) >> с модифицированными типовыми процедурами могут быть проблемы, в этом случае расширения выручают.

Всё ровным счетом наоборот. Типовой код следует в большинстве случае дорабатывать внутри самой конфигурации.

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

Если же процедура доработана внутри самой конфы, то при трёхстороннем сравнении/объединении ты сразу видишь в одном окне все изменения поставщика и может адекватно сравнить и сопоставить их с тем изменениями, которые сделал сам. Оценить их комплементарность и при необходимости внести сразу правки.

   Dmitrii

36 — 07.04.21 — 20:18

(34) >> ситуация двигается в сторону реализации именно pure модульности в виде конфигурации-карткаса с модулями-расширениями?

Нет. Расширения не для этого.

   FIXXXL

37 — 07.04.21 — 20:20

(35) +1

   Cthulhu

38 — 07.04.21 — 20:25

(25): нуралиев?

расширения для этого пригодны — и становятся все более пригодными. поэтому и вопрос такой.

   Lama12

39 — 07.04.21 — 21:21

(5) А теперь попробуй через метаданные из конфигурации к нему обратиться.

   lucbak

40 — 07.04.21 — 22:39

(34) >>ЗЫ: интересно — ситуация двигается в сторону реализации именно pure модульности в виде конфигурации-карткаса с модулями-расширениями?..

Двигается, но не 1С, поищи в яндексе «Модульная конфигурация».

   Cthulhu

41 — 08.04.21 — 01:04

   Turku

42 — 08.04.21 — 01:14

Интересный теоретический вопрос: если создать объекты в расширение(справочники, документы и т.д.), набить по ним данных в базе, а потом бах и отключить расширение (или даже удалить), запустить базу, а потом включить расширение обратно. Что будет с данными по этим объектам?

   lucbak

43 — 08.04.21 — 06:18

(42) если удалить расширение то логично, что данные будут удалены…если просто отключить то с данными ничего не случится.

  

lucbak

44 — 08.04.21 — 06:18

(41) да

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

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

  • Изменять алгоритмы
  • Изменять формы и добавлять новые формы
  • Добавлять реквизиты к существующим объектов (кроме регистров)
  • Добавлять новые объекты

Демонстрационная задача

Имеется конфигурация, в которой реализован складской учёт товаров.

Необходимо реализовать:

  • Отчет по остаткам товаров
  • Учет взаиморасчетов с поставщиками
  • Расчет стоимости поставки с учётом скидок

Импорт существующей базы

1. Добавить новую базу данных

2. Создание новой информационной базы

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

4. Укажите наименование информационной базы и выберите тип расположения информационной базы «На данном компьютере или на компьютере в локальной сети»

5. Укажите параметры информационной базы

6. Добавление информационной базы/группы

Выбор созданной информационной базы

1. Выбираем базу и нажимаем кнопку «Конфигуратор»

Открываем дерево конфигурации

Конфигурация — Открыть конфигурацию

Загрузка информационной базы

Администрирование — Загрузить информационную базу

Файл базы данных имеет расширение .dt.

Просмотр древа исходных данных для выполнения задания

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

Настройка режима поддержки (когда необходимо доработать саму конфигурацию)

Конфигурация — Поддержка — Настройка поддержки
Включение возможности изменения

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

Конфигурация — Расширения конфигурации — Добавить

Заполняем поля данных нового расширения.

Для уникальности расширения дополнительно заполняется поле «Префикс».

Двойной щелчок на имени расширения — открытие его древа.

Создание отчета в расширении 

Отчеты — Добавить.

Для создания отчета по схеме компоновки данных выберите «Открыть схему компоновки данных».

Подтверждаем действия по созданию макета.

Данные для отчета будем получать из запроса с помощью конструктора запросов.

Для данного отчета будем заимствовать регистр конфигурации «Остатки товаров».

ПКМ по регистру в древе конфигурации — Добавить в расширение

Регистр будет отображен теперь и в древе расширения. 

Так же заимствуется каждый элемент регистра. В нашем случае это измерения и ресурсы.

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

Запрос будем создавать с помощью конструктора запроса.

Выберем нужные поля.

Укажем ресурс — КоличествоОстаток.

Установим выбранные поля в настройках.

Добавим новую группировку.

Оставим для нее настройки по умолчанию.

Просмотрим результат в режиме предприятия.

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

Выбираем Все функции…

(Если эта кнопка не доступна, включим ее Сервис-Параметры-Отображать команду «Все функции»)

Стандартные — Управление расширениями конфигурации.

Активно — расширение работает, доступно в предприятии.

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

Изменения этих настроек произойдут при перезапуске конфигуратора.

Из этого списка также можно экспортировать расширения конфигурации в формате .cfe, а также импортировать в него расширения с этим форматом.

Учет расчета с поставщиками

Для этого сначала заимствуем документ ПоступлениеТоваров в наше расширение.

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

Видно, что пока реализован только складской учет с регистром ОстаткиТоваров.

Заимствуем справочник Контрагенты из основной конфигурации.

А также документ ПоступлениеТоваров с процедурой из модуля объекта (щелчок на названии процедуры ОбработкаПроведения).

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

Этапы выполнения процедуры из расширения (Перед, После):

Вид процедуры ОбработкаПроведения в расширении.

Для документа ПоступлениеТоваров заимствуем реквизиты и табличную часть с реквизитом Сумма (реквизиты табличной части заимствуются каждый по отдельности).

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

Зададим название, синоним и выберем тип Остатки.

Добавим измерение регистра Поставщик с типом СправочникСслыка.Контрагенты.

А также ресурс — Сумма.

Установим документ ПоступлениеТоваров в качестве регистратора.

Опишем в модуле объекта этого документа в расширении алгоритм проведения.

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

В списке расширений конфигурации снимем галочку с «Безопасный режим».

Теперь можем посмотреть регистр в режиме предприятия после проведения одного из докуменов ПоступлениеТоваров: Все функции… — Регистры — Взаиморасчеты с поставщиками.

Расчет стоимости поставки с учетом скидки

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

Добавим в расширении к табличной части этого документа новый реквизит «Процент скидки».

Заимствуем из основной конфигурации форму документа в расширение.

Перенесем реквизит «Процент скидки» на форму, перетащив его из правой колонки в левую.

Установим его перед реквизитом ТоварыСумма с помощью стрелок.

Посмотрим, какие процедуры есть в основной конфигурации этой формы.

Перейдем к определению процедуры РассчитатьСуммы из общего модуля.

Нам необходимо дополнить данную процедуру. Для этого нажимаем на ее название ПКМ и добавляем в расширение .

Выберем тип вызова — Вызывать вместо.

Алгоритм работы «Вызывать вместо»:

Будет добавлен новый общий модуль в расширение со следующим содержанием.

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

Локальные переменные родительского модуля не доступны здесь.

Опишем перерасчет Суммы во вновь созданном модуле расширения.

Посмотрим результат работы в режиме предприятие.

Экспорт расширения из конфигуратора

Действия — Конфигурация — Сохранить конфигурацию в файл.

Инструкция создана на основе вебинара компании «1C-ГЭНДАЛЬФ» подготовки ко второму этапу конкурса IT-Планета «Программирование 1С: Предприятие 8».

Доброго времени суток, уважаемые коллеги! В этой статье приведен реальный пример реализации переноса изменений конфигурации Бит. Автотранспорт (3.0.80.36/3.0.4.55) в расширение конфигурации и установка конфигурации под «замок» с возможностью обновления. Также показано, как решить возникшие проблемы по ходу переноса. Давайте разберёмся!

  • Перечень основных шагов при переносе доработок конфигурации в расширение
  • Копирование целого объекта из конфигурации в расширение
  • Настройка связей параметров выбора для отбора по владельцу
  • Установка проверки заполнения реквизита в расширении
  • Перенос констант в расширение
  • Добавление команды для формирования документа на основании
  • Ввод на основании нескольких документов
  • Описание обработки переноса данных
  • Добавление дополнительных отчетов в расширение
  • Демонстрация добавления и удаления расширения 1С
  • Демонстрация доработок, перенесенных в расширение

Перечень основных шагов при переносе доработок конфигурации в расширение

  1. Сравнить основную конфигурацию с конфигурацией поставщика. Как это сделать посмотрите здесь.
  2. Посмотреть поддерживает ли режим совместимости возможность использования расширений? С версии платформы 8.3.11 появилась эта возможность. Нужно установить этот режим совместимости, если текущая версия ниже. 
  3. Создать новое расширение конфигурации и установить префикс для этого расширения. Назначение: Адаптация
  4. Добавить в расширение все структуры необходимые для хранения данных, которые отличаются от конфигурациии поставщика. Также для правильной работы расширения нужно будет заимствовать все необходимые объекты конфигурации. На этом шаге могут возникать разные ситуации, которые будут препятствовать переносу. Некоторые описаны начиная со следующего подзаголовка. На этом шаге расширение конфигурации уже должно быть готово. Как установить готовое расширение можно посмотреть на видео ниже.
  5. Создать обработку для переноса данных из старых структур, которые были в основной конфигурации, в новые структуры, которые были созданы при помощи расширений. Некоторое описание обработки можно посмотреть в подзаголовке, а скачать её можно по ссылке в конце статьи.
  6. Перенести данные. 
  7. Удалить старые данные из конфигурации в правильном порядке. Это значит, что нужно сначала удалить объекты, в которых есть ссылки на другие объекты. Например, в документе есть реквизит с типом справочник Номенклатура. Сначала удалить этот реквизит, а затем и сам справочник Номенклатура.
  8. Вернуть изменённые объекты конфигурации обратно на замок, установив для объектов правило поддержки Объект поставщика не редактируется.
  9. Конфигурация — Поддержка — Настройка поддержки.
  10. Снова выполнить сравнение с конфигурацией поставщика. Кнопка «Сравнить, обьединить».
  11. Выставить в поле «Фильтр» значение «Нет фильтра».
  12. Найти нужный объект в дереве, нажать в правом углу кнопку «Изменить» и выбрать правило «Объект поставщика не редактируется». И подобным образом для всех объектов, у которых раньше была снята поддержка. 

Копирование целого объекта из конфигурации в расширение

При копировании целого объекта из конфигурации в расширение может появится сообщение:

ОБНАРУЖЕНЫ НЕРАЗРЕШИМЫЕ ССЫЛКИ:

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

Если нужно добавить новые реквизиты на форму, то сначала нужно заимствовать эту форму и открыть её, затем перейти в правую панель с реквизитами. Основной реквизит формы (Объект) будет выделен серым. Чтобы заимствовать объект нужно в контекстном меню выбрать «Добавить в расширение», после этого основной реквизит формы (Объект) будет выделен черным.

Чтобы были видны реквизиты документа в модуле объекта расширения, например Контрагент или ВидОперации нужно эти реквизиты заимствовать в расширение. Иначе будет выдаваться такая ошибка:

{ЗаказНаТехнику Документ.СписаниеСРасчетногоСчета.МодульОбъекта(11,6)}: Переменная не определена (ВидОперации)

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

Настройка связей параметров выбора для отбора по владельцу

В существующем расширении реализована возможность отбора по владельцу для реквизита Заказ_ИсполнительДоговор документа бит_мат_ЗаказНаТехнику. Чтобы поле Владелец и другие стандартные реквизиты подчиненного справочника ДоговорыКонтрагентов (в данной конфигураци) отобразились в поле «Связи параметров выбора» нужно, заимствовать справочники Контрагенты и ДоговорыКонтрагентов в расширение. Потом отметить для справочника ДоговорыКонтрагентов свойство Владельцы как контролируемое. 

Заимствование справочников Контрагенты и ДоговорыКонтрагентов и установка свойства справочника ДоговорыКонтрагентов Владельцы как контролируемое

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

Теперь для свойства "Связи параметров выбора" из выпадающего списка в левой панели можно выбрать значение "Отбор.Владелец"

Установка проверки заполнения реквизита в расширении

В документе (бит_мат_ЗаказНаТехнику) в табличной части (ТребованияКТехнике) есть реквизит Техника со свойством “Проверка заполнения”, значение которого установлено как “Выдавать ошибку”, а нужно для него в расширении проставить значение “Не проверять”. Хотя этот реквизит перенесен в расширение, его свойства недоступны для редактирования. К сожалению, далеко не все свойства реквизитов документа являются расширяемыми. Но существует программное изменение значений свойств в расширении.

Хотя и невозможно поменять свойство “Проверка заполнения” в расширении у заимствованного реквизита, но можно изменить обработку ОбработкаПроверкиЗаполнения() в модуле объекта через расширение, так чтобы реквизит, даже не заимствованный, не проверялся. Вот, что можно написать:

&После("ОбработкаПроверкиЗаполнения")
Процедура Заказ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	ИндексПоляТехника = ПроверяемыеРеквизиты.Найти("ТребованияКТехнике.Техника");
	Если ИндексПоляТехника <> Неопределено Тогда
		ПроверяемыеРеквизиты.Удалить(ИндексПоляТехника);
	КонецЕсли;
КонецПроцедуры

Перенос констант в расширение

В конфигурации были добавлены две константы (бит_Номенклатура и НоменклатурнаяГруппа). Нужно было их перенести в расширение, но к сожалению, объекты Константы в расширении можно создавать только на платформе 8.3.16 и выше. Данная конфигурация не поддерживала режим совместимости 8.3.16. Поэтому было решено создать регистр сведений (Заказ_Константы) и хранить значение констант там, а для получения значений констант нужно использовать функцию общего модуля ЗаказНаТехнику. Эта функция возвращает структуру со всеми значениями констант, сохраненных в ресурсах регистра. Вот код этой функции:

Функция ПолучитьКонстанты() Экспорт
	Результат = Новый Структура();
	Результат.Вставить("бит_Номенклатура", Справочники.Номенклатура.ПустаяСсылка()) ;
	Результат.Вставить("НоменклатурнаяГруппа", Справочники.НоменклатурныеГруппы.ПустаяСсылка());
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|   Заказ_Константы.бит_Номенклатура КАК бит_Номенклатура,
	|   Заказ_Константы.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
	|ИЗ
	|   РегистрСведений.Заказ_Константы КАК Заказ_Константы";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ЗаполнитьЗначенияСвойств(Результат, Выборка);
	КонецЦикла;
	Возврат Результат;
КонецФункции // ПолучитьКонстанты()

Добавление команды для формирования документа на основании

В конфигурации для документа РеализацияТоваровУслуг добавили возможность его ввода на основании документа бит_мат_ЗаказНаТехнику, а это значит, что стандартный реквизит ВводитсяНаОсновании документа РеализацияТоваровУслуг изменился. Чтобы сохранить возможность ввода документа РеализацияТоваровУслуг нужно:

  • В расширении в разделе «Общие -> Общие команды«, создать новую команду. 
  • Дать название, например, «Заказ_РеализацияТоваровУслугСоздатьНаОсновании«. 
  • Группу у команды указать: «Командная панель формы.Создать на основании».
  • Тип параметра команды: Ссылки тех документов, в которых появится новая строка в подменю ВводаНаОсновании. В данном случае «ДокументСсылка.битматЗаказНаТехнику«.
  • Режим использования параметра: «Одиночный». Теперь в меню документа битматЗаказНаТехнику появится новая команда ввода на основании.

Теперь в меню документа битматЗаказНаТехнику появится новая команда ввода на основании. В модуле команды в процедуре ОбработкаКоманды написать код, который будет делать ввод нового документа на основании:

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

И еще, чтобы уже все работало в расширении после исполнения обработки заполнения Реализации добавить код с использованием аннотации ИзменениеИКонтроль (Вызвать вместо (с контролем)): 

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

Ввод на основании нескольких документов

Чтобы можно было передавать сразу несколько документов в списке и создавать на их основе одну реализацию можно сделать следующее. Создать команду формы СоздатьНаОснованииРеализацияТоваровУслуг и расположить кнопку этой команды на форме списка в группе ГруппаГлобальныеКоманды и скрыть видимость этой кнопки. В списке документа в обработчике события ПриСозданииНаСервере переопределить команду, чтобы она появилась в ранее сформированной группе «Командная панель формы. Создать на основании»: 

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

Для контекстного меню сделаем почти тоже самое. Создадим кнопку на форме списка СписокКонтекстноеМенюСоздатьНаОснованииРеализацияТоваровУслуг и присвоем ей, ранее созданную команду СоздатьНаОснованииРеализацияТоваровУслуг. Последняя процедура СоздатьНаОсновании является действием команды СоздатьНаОснованииРеализацияТоваровУслуг. Из нее передается массив документов, выделенных в форме списка, который нужно правильно обработать при заполнении документа РеализацияТоваровУслуг.

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

Описание обработки переноса данных

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

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

Записи регистра сведений стали не уникальными: ДвоичныеДанныеФайлов

ДвоичныеДанныеФайлов. Имеются записи с одинаковыми измерениями

Дело в том, что у этих двух регистров измерение Файл имеет определяемый тип ПрисоединенныйФайл. Когда происходит удаление одного из типов в определяемом типе ПрисоединенныйФайл, то некоторые записи в этих регистрах становятся дублирующими, так как раньше, до удаления типа, в измерении Файл присутствовали элементы справочника бит_мат_ЗаказНаТехникуПрисоединенныеФайлы, а теперь там появились значения Null. В обработке реализован механизм, который устраняет эту проблему.

К сожалению, на момент написания статьи, система 1С:Предприятие не поддерживает ОпределяемыйТип. Только начиная с версии «1С:Предприятие 8.3.20», расширения будут поддерживать изменение определяемых типов.

Кроме того, в документе бит_мат_ЗаказНаТехнику в реквизите ОтветственноеЛицо был изменён тип. Раньше был СправочникСсылка.ФизическиеЛица, а стал СправочникСсылка.Пользователи. Поэтому в расширение был добавлен новый реквизит Заказ_ОтветственноеЛицо. Чтобы перенести данные в новый реквизит в обработке был сформирован определенный механизм.

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

Добавление дополнительных отчетов в расширение

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

Демонстрация доработок, перенесенных в расширение

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

ПОДПИСКА

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Технологический блог фирмы 1С

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

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

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

    Мы продолжаем развивать Систему взаимодействия в соответствии с нашим видением перспектив продукта и с учетом замечаний пользователей.

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

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

    В версии 8.3.17 в функциональности демонстрации экрана в Системе взаимодействия (появилась в версии 8.3.16) произойдут изменения:

    В версии 8.3.16 в Chrome демонстрация экрана

    • Была доступна, начиная с версии Chrome 56
    • Требовала установленного браузерного расширения
    • Позволяла демонстрировать:
    • Весь экран
    • Вкладку Chrome

    В версии 8.3.17 в Chrome демонстрация экрана

    • Доступна, начиная с версии Chrome 72
    • Не требует установленного браузерного расширения
    • Позволяет демонстрировать:
    • Весь экран
    • Окна программ
    • Вкладку Chrome

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

    В версии 8.3.18 планируется следующее изменение: параметр командной строки /Out на ОС Windows будет выводить данные в файл в кодировке UTF-8 (поведение параметра будет унифицировано для всех поддерживаемых ОС).

    Команда «Искать везде» используется для глобального поиска выделенного текста в поле ввода, в текстовом и форматированном документе, а также используется для поиска значения текущей ячейки в таблице или табличном документе.
    Мы решили поменять сочетание клавиш для этой команды с Ctrl+Shift+C на Alt+L и скоро выпустим это изменение.
    Это вызвано тем, что в типовых конфигурациях сочетание клавиш Ctrl+Shift+C используется для копирования в буфер обмена выделенных строк в таблице.

    Нами принято решение, что изменение значений параметров:

    • Критический объем памяти процессов
    • Временно допустимый объем памяти процессов
    • Предел превышения (секунд) временно допустимого объема памяти процессов

    можно будет делать с лицензиями уровня ПРОФ.
    При этом поведение для опции «Временно допустимый объем памяти процессов» для ПРОФ и КОРП лицензий будет отличаться.
    С лицензиями ПРОФ изменение параметра будет действовать только на перезапуск процессов, а с лицензиями КОРП – и на перезапуск процессов, и на прерывание объёмных клиентских вызовов сервера.

    Сейчас в версии 8.3.15 эти опции доступны только с лицензиями уровня КОРП.

    Изменение попадет в следующую финальную версию 8.3.15 (после 8.3.15.1656).

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

    Contents

    • 1 Механизм расширения конфигурации 1C
    • 2 Как добавить расширение конфигурации 1С 8.3

    Механизм расширения конфигурации 1C

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

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

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

    При разработке расширений следует учитывать следующие факты:

    — в системе могут функционировать более одного расширения.

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

    Расширение может иметь одно из следующих назначений:

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

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

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

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

    Ограничения использования расширений:

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

    — Параметры сеанса.

    — Общие реквизиты.

    — Критерии отбора.

    — Подписки на события.

    — Регламентные задания.

    — Функциональные опции и параметры функциональных опций.

    — Определяемые типы.

    — Хранилища настроек.

    — Языки.

    — Константы.

    — Журналы документов.

    — Бизнес-процессы и задачи.

    — Внешние источники данных.

    Не поддерживается расширение следующих объектов:

    — Нельзя создавать подчиненные подсистемы.

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

    — Состав значений перечислений;

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

    — План видов характеристик;

    — План счетов;

    — План видов расчетов.

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

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

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

    Как добавить расширение конфигурации 1С 8.3

    Предлагаю рассмотреть задачу добавления нового Справочника «Категория должности по Классификатору Предприятия» с выводом его значения на Форму Справочника Должности, на базе Конфигурации ЗУП 3.1

    Для создания расширения необходимо запустить 1С в режиме конфигуратора.

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

    Стоит отдельно выделить поле Назначение – необходимо выбрать его значение в зависимости от решаемой задачи – т.к. мы выполняем добавление объектов по требованиям конкретного заказчика – нам подойдет вариант «Адаптация».

    После нажатия на кнопку «ОК» — двойным кликом по появившейся строке откроем Конфигурацию расширения. Мы увидим практически пустое дерево конфигурации.

    Добавим в расширение справочник Категория должности по Классификатору Предприятия. Стоит обратить внимание, что в название всех объектов процедур и функций созданных в расширении, добавляется его префикс (в нашем случае Расш1_);

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

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

    Далее добавим в расширение Справочник Должности и добавим для него новый реквизит КатегорияДолжности с типом СправочникСсылка.Расш1_КатегорияДолжностиПоКлассификаторуПредприятия

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

    — Интерактивно, добавив Форму «ФормаЭлемента» в расширение

    — Программно, не добавляя Форму Справочника в расширении, а добавив подходящую процедуру, вызываемую в обработчике Формы «ПриСозданииНаСервере» в расширение.

    Останавливаться на плюсах и минусах каждого решения не будем, а ниже рассмотрим оба варианта.

    Интерактивное изменение Формы в расширении.

    Для того чтобы вывести Реквизит на форму интерактивно: необходимо добавить саму Форму «ФормаЭлемента» в расширение. Обращу ваше внимание на следующий момент – для того чтобы появилась возможность Интерактивного добавления Реквизита объекта на форму необходимо сам Объект тоже добавить в расширение.

    Далее добавим  новый Реквизит в подходящую Группу на форме.

    Запустив 1С в режиме Предприятия убедимся, что новый Справочник появился в интерфейсе

    А открыв элемент справочника Должности, увидим, что добавляемый реквизит Категория должности также в нужном месте.

    Программное изменение Формы в расширении.

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

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

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

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

    После проделанных процедур увидим что в Расширение был добавлен общий модуль УправлениеСвойствами  и процедура Расш1_ПриСозданииНаСервере с аннотацией &После(«ПриСозданииНаСервере»)

    Далее в добавленную процедуру поместим следующий код:

    //Определим тип, чтобы ограничить добавление реквизитов только нужными нам Формами
    Если ТипЗнч(Форма.СсылкаНаобъект) = Тип("СправочникСсылка.Должности") Тогда
    
    // Добавим элемент формы "Категория должности"
    мИмя = "Расш1_КатегорияДолжности";
    
        Если Форма.Элементы.Найти(мИмя) = Неопределено Тогда
            Элемент = Форма.Элементы.Добавить(мИмя, Тип("ПолеФормы"), Форма.Элементы.ОплатаГруппа);
            Элемент.Вид = ВидПоляФормы.ПолеВвода;
            Элемент.ПутьКДанным = "Объект.КатегорияДолжности";
            Элемент.Заголовок = "КатегорияДолжности (пр.)";
        КонецЕсли;
    
    КонецЕсли;

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

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

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

    1С: Предприятие 8.3.13 . Документация
    Руководство администратора
    Глава 33. Расширение конфигурации

    33.3. Работа с расширением

    33.3.1. Создание заимствованного объекта

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

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

    Рис. 683. Структура справочника Товары

    Если добавить в расширение непосредственно сам справочник, то никакие подчиненные объекты добавлены не будут, что видно на рис. 684.

    Рис. 684. После добавления объекта

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

    Рис. 685. После добавления объекта с родителями

    На рис. 685 видно, что кроме добавляемой формы ФормаЭлемента были добавлены также:

    ● Все реквизиты, которые присутствуют на форме;

    ● Все объекты, которые образуют типы реквизитов, присутствующих на форме.

    При заимствовании составного типа поведение зависит от характеристик такого типа:

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

    ● Если в составной тип не может входить тип Произвольный, то такой составной тип будет заимствован по следующим правилам:

    ● Если составной тип включает в свой состав только примитивные типы, то будут заимствованы все типы, образующие составной тип.

    ● Если в составной тип входит хотя бы один ссылочный тип (СправочникСсылка, ДокументСсылка и т. д.), то такой тип будет заимствован как простой тип ЛюбаяСсылка.

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

    33.3.2. Работа с заимствованным объектом

    Работа с заимствованным объектом имеет некоторые особенности.

    Рис. 686. Свойства заимствованного объекта

    Во-первых, у заимствованного объекта присутствуют только те свойства, которые могут быть установлены контролируемыми или модифицируемыми. Эта возможность (установка контролируемых или модифицируемых свойств, подробнее см. здесь) является второй особенностью панели свойств заимствованного объекта. Для указания контролируемого свойства, следует установить флажок перед именем свойства. На рис. 686 видно, что для справочника Товары указаны следующие контролируемые свойства: Иерархический, Длина наименования,Тип кода и Допустимая длина кода. Модифицируемое свойство отмечается флажком другого вида в панели свойств. На рис. 686 видно, что свойство Основная форма отмечено как модифицируемое.

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

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

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

    33.3.3. Создание собственного объекта

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

    ● При подключении расширения ‑ среди имен расширяемой конфигурации и всех расширений;

    ● При разработке расширения ‑ среди имен расширяемой конфигурации и того расширения, в котором создается собственный объект.

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

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

    33.3.4. Блокировка расширений

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

    33.3.5. Совместная разработка расширения

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

    ● Хранение расширений в том же хранилище конфигурации, что и расширяемая конфигурация.

    ● Хранение в одном хранилище конфигурации нескольких расширений.

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

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

    Команды работы с расширением расположены в меню Конфигурация ‑ Хранилище конфигурации окна Расширения конфигурации.

    Рис. 687. Доступ к командам работы с хранилищем конфигурации для расширения

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

    Смотри также:

    ● Хранилище конфигурации (см. здесь).

    09.06.2017

    Расширение данных

    Данная статья является анонсом новой функциональности.

    Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.


    Полное описание новой функциональности будет приведено в документации к соответствующей версии.


    Полный список изменений в новой версии приводится в файле v8Update.htm.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    01.png

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

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

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

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

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

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

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

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

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

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

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

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

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

    02.png

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

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

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

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

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

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

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

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

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

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

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

    05.png

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

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

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

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

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

    03.png

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

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

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

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

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

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

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

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

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

    Теги:
    расширения 
    8.3.11 

    Понравилась статья? Поделить с друзьями:
  • 1с документооборот дополнительные реквизиты программно
  • 1с документооборот дополнительные реквизиты справочник
  • 1с значение по умолчанию для реквизита табличной части
  • 1с как программно убрать проверку заполнения реквизита
  • 1с основное представление справочника в виде реквизита