1с дополнительные реквизиты или расширения

Реквизит расширения или дополнительный реквизит

Я
   MistaEr

14.01.20 — 11:16

Доброго дня!

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

2. Реквизит расширения можно использовать только в расширении

  

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

   vicof

1 — 14.01.20 — 11:16

да

   pechkin

2 — 14.01.20 — 11:16

(0) можно и в запросах, только чуточку сложнее

   MistaEr

3 — 14.01.20 — 11:16

Вопрос: Что вы чаще используете?

   pechkin

4 — 14.01.20 — 11:17

лучше реквизит в основной конфе

   MistaEr

5 — 14.01.20 — 11:17

(2) Подскажете как?

   pechkin

6 — 14.01.20 — 11:17

через левое соединение

   MistaEr

7 — 14.01.20 — 11:18

(4) лучше но замочки нужно снимать

   MistaEr

8 — 14.01.20 — 11:18

(6) свойство искать по наименованию

   vicof

9 — 14.01.20 — 11:23

(7) Все когда-то проходят через этот волнительный этап.

   pechkin

10 — 14.01.20 — 11:25

(8) в последних версиях есть реквизит Имя

   hhhh

11 — 14.01.20 — 11:25

(7) только один замочек

   MistaEr

12 — 14.01.20 — 12:41

(11) Реквизиты то захотят добавить не только в одном объекте, так и поснимаются галочки

   MistaEr

13 — 14.01.20 — 12:42

(12) вернее замочки)

   Dmitrii

14 — 14.01.20 — 14:26

Замочки поснимаются. Ааааааааа…

Что за замочковый фетиш? Свихнулись все на этих замочках что ли?

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

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

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

   MistaEr

15 — 14.01.20 — 14:26

(10) Это уже полезно, проверю

   MistaEr

16 — 14.01.20 — 14:30

(14) + есть желание попрактиковаться с расширениями

   Dmitrii

17 — 14.01.20 — 15:40

(16) Не тот случай.

Расширения хороши только в нескольких сценариях:

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

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

3. Дополнительные отчеты, обработки и печатные формы. То, что раньше делалось через БСП-шный механизм дополнительных отчетов и обработок (справочник Дополнительные отчеты и обработки). Начиная с версии БСП 2.5 1С рекомендует делать подобные вещи через расширения и подсистему ПодключаемыеОтчетыИОбработки.

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

   Сияющий в темноте

18 — 15.01.20 — 00:52

доп.реквизит прекрасно и в коде и в запросе работает.

добавление реквизита к обьекту при обновлении методом переименования в Удалить и копированием значений через обработчик приводит к потере и реквизита и его значений.

в расширении же потерять значения еще проще.

   MistaEr

19 — 15.01.20 — 09:03

(14) Предполагается обновления будут без участия программиста

   hhhh

20 — 15.01.20 — 09:50

(19) ну, если без участия программиста, тогда про расширения вообще пока забудьте.

   Dmitrii

21 — 15.01.20 — 09:52

(19) Как добавление реквизита в конфигурации мешает обновлению без участия программиста?

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

А вот потеря данных, созданных через расширение — вполне себе реальный сценарий.

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

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

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

   DexterMorgan

22 — 15.01.20 — 10:15

(14) Плюсую стопицоттыщ раз, все поехали уже с этими расширениями, не понимая вообще для чего они

   DexterMorgan

23 — 15.01.20 — 10:17

(19) И что? Без программиста нельзя нажать далее, далее, далее? Что за херь? добавленный реквизит никак не повлияет на обновление от слова совсем

   pechkin

24 — 15.01.20 — 10:19

(19) тогда лучше доп реквизит

   DexterMorgan

25 — 15.01.20 — 10:19

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

Так зато «на замочке» же епт

   MistaEr

26 — 15.01.20 — 10:24

Всем большое спасибо, особенно Dmitrii, почти уговорили, буду снимать замочки)

   Бовка

27 — 20.01.20 — 11:42

Чтобы не создавать новую ветку, подскажите, пжл, на практике кто-нибудь использует расширение на КРУПНЫХ проектах для создания НОВЫХ объектов МД?

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

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

1. Технические ограничения на уровне платформы.

Для самой последней версии платформы 1С 8.3.16 (и даже 17) сохраняются технические ограничения создания некоторых собственных объектов платформы.

Например,  

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

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

Перспектива решения платформенных ограничения не ясна.  

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

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

Сам сталкивался с подобными проблемами только с заимствованными объектами, поэтому пересоздал без проблем.

В данном пункте интересует именно опыт коллег по цеху.

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

   Бовка

28 — 20.01.20 — 11:46

(21) «А вот потеря данных, созданных через расширение — вполне себе реальный сценарий.»

Это реально случилось на бою? Пришлось пересоздавать объект и переносить данные с подменой ссылок?

   MistaEr

29 — 23.01.20 — 10:29

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

  

MistaEr

30 — 23.01.20 — 10:30

(28) Так же можно потерять данные и всей базы тоже, просто вовремя нужно делать архивные копии

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С:Управление торговлей 10.х».

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

Задание свойств и категорий доступно не для всех объектов. Разработчиками прикладного решения предусмотрен ограниченный набор объектов, которым можно задавать дополнительные свойства и категории. К ним относятся все документы и некоторые справочники, список которых хранится в плане видов характеристик «Назначения свойств и категорий объектов».

меню Сервис

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

Состав дополнительных свойств для конкретного объекта настраивается в его форме (элемента или документа).

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

меню Сервис

Чтобы добавить новое свойство, необходимо нажать кнопку «Создать» (белый плюс в зеленом круге).

меню Сервис

Откроется окно редактирования, которое содержит следующие поля:

  1. Наименование – имя свойства, по которому пользователь может его идентифицировать.
  2. Код – служебное поле для идентификации свойства.
  3. Назначение – тип объектов, для которых будет доступно свойство.
  4. Тип значений – определяет тип значений, которые может принимать свойство.

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

меню Сервис

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

меню Сервис

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

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

меню Сервис

Если задан список назначений, свойства будут отображаться только у объектов, входящих в иерархию списка.

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

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

меню Сервис

Чтобы добавить новую категорию, необходимо нажать кнопку «Создать» (белый плюс в зеленом круге).

меню Сервис

Окно редактирования категории содержит только ее наименование и назначения. Как мы помним, категории принимают только значения «Да» и «Нет».

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

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

меню Сервис

Редактирование дополнительных свойств и категорий документов осуществляется аналогично справочникам.

Добавленные свойства и категории можно использовать не только в карточках объектов, но и в стандартных отчетах. Рассмотрим для примера отчет «Продажи» из типового прикладного решения «Управление торговлей 10.х». Для использования свойств и категорий в отчете необходимо в настройках установить галочку «Использовать свойства и категории».

меню Сервис

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

меню Сервис

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

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

Пара полезных процедур для работы с дополнительными реквизитами на форме. Далее в статье: 1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме? 2. Как проверить до записи корректность заполнения пользователем дополнительного реквизита? 3. Как заполнить значение дополнительного реквизита по другому событию и обновить данные на форме? 4. Как расположить дополнительный реквизит в указанном месте на форме?

Вот пара задач на размышление:

  1. Как называются дополнительные реквизиты на форме и в какой момент они появляются на форме?
  2. Как проверить корректность заполнения пользователем дополнительного реквизита, если значение некорректно – уведомить и отказать в записи объекта? Напоминаю, что до записи объекта в ТЧ Дополнительные реквизиты – данных еще нет, а на форме – уже есть.
  3. Как заполнить значение дополнительного реквизита при записи (или по другому событию) и обновить данные на форме?
  4. Как расположить дополнительный реквизит в указанном месте на форме?

Далее привожу решение этих задач — поковыряться с отладчиком пришлось изрядно…

Итак, вот решение:

  1. Для начала смотрим с отладчиком, появились ли Допреквизиты на форме после ПриСозданииНаСервере? Нет. А после ПриОткрытии? Тоже нет. А вот после активизации закладки «Дополнительно»  — появились со страшными именами как на скриншоте. Это было создано типовой процедурой  УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект), которая создала реквизиты на форме
ОписаниеСвойства.ИмяУникальнаяЧасть = 			СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x") + "_" + СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x");				ОписаниеСвойства.ИмяРеквизитаЗначение =			"ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;

 После чего Система располагает реквизиты на форме

Добавление /изменение реквизитов на форме возможно благодаря следующей интересной конструкции.

Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
            ДобавляемыеРеквизиты.Добавить(Реквизит);

  Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

Но это нам сейчас все не нужно, так, для любопытства.
 

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

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

Функция ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт 
	
	Список = Форма.Свойства_ОписаниеДополнительныхРеквизитов;
	
	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита);
	
	Если ЗначениеЗаполнено(Свойство) Тогда
	    НайденныеСтроки = Список.НайтиСтроки(Новый Структура("Свойство", Свойство));
		Если НайденныеСтроки.Количество() > 0 Тогда
			Возврат НайденныеСтроки[0];		
		КонецЕсли; 		
	КонецЕсли;
	
КонецФункции
  1. Используя функцию из п1 — нужно проверить значение поля дополнительного реквизита на форме     
Функция ПолучитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита) Экспорт
	Перем ЗначениеРеквизита;
	
	ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
	
	Если не ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
		Возврат Форма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение];
	КонецЕсли;
	
КонецФункции

 3. Используя функцию из п1 — нужно установить значение поля дополнительного реквизита на форме

Процедура УстановитьЗначениеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита, ЗначениеРеквизита) Экспорт
	
	ПолеДополнительногоРеквизитаНаФорме = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
	
	Если не ПолеДополнительногоРеквизитаНаФорме = Неопределено Тогда
		Форма[ПолеДополнительногоРеквизитаНаФорме.ИмяРеквизитаЗначение] = ЗначениеРеквизита;
	КонецЕсли;
	
КонецПроцедуры

4. Используя функцию из п1 – нужно выполнить волшебную процедуру «Переместить» для коллекции Элементов формы                      

Процедура ПереместитьДополнительныйРеквизит(Форма, ИмяРеквизита, ИмяГруппы, Доступность = Истина) Экспорт
	Попытка
		Поле = ПолучитьПолеДополнительногоРеквизитаНаФорме(Форма, ИмяРеквизита);
		Группа = Форма.Элементы.Найти(ИмяГруппы); 
		ПолеФормы = Форма.Элементы[Поле.ИмяРеквизитаЗначение];
		Если не ПолеФормы = Неопределено Тогда
			Форма.Элементы.Переместить(ПолеФормы, Группа); 
			ПолеФормы.Доступность = Доступность;
		КонецЕсли; 
	
	Исключение
	
	КонецПопытки;
	
КонецПроцедуры

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

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

Проверено на КА 2.4.2.132, но вполне универсально для всех БСП неустановленной версии 

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

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

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

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

Какие преимущества это дает?

  • К примеру, когда не хватает типовой длины строкового поля, ее можно можно увеличить с помощью расширения – то есть, не снимая конфигурацию с поддержки.
  • Можно увеличить длину числового реквизита в документе, когда разработчики типовой задали недостаточную длину для хранения данных конкретного предприятия.
  • Также можно в реквизит составного типа добавить еще один тип данных при помощи расширения. Например, разработчик типовой предполагает, что в реквизите можно указывать только документы «Заказ клиента» и «Реализация». А на проекте для реализации требований заказчика нужно добавить в этот реквизит еще «Заказ поставщику». Это можно теперь сделать при помощи расширения, что очень удобно.

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

Кроме того, разобраны и другие полезные возможности расширений:

  • Объединение расширений с cfe-файлом из командной строки
  • Работа платформы при отключенных расширениях — когда при старте сеанса были подключены не все расширения, изменяющие структуру хранения данных
  • Новая логика проверки применимости расширения, использующего аннотацию ИзменениеИКонтроль
  • И другие полезные «фишки»…

Общая длительность видео – полтора часа. Приятного просмотра! :)

Видео 1 – Вступление

Ключевые моменты видео:

00:00 – Узнаем, какие темы разбираются в занятии.

Видео 2 – Объединение расширений

Ключевые моменты видео:

00:00 – При помощи какой команды пакетного режима запуска конфигуратора можно выполнять сравнение расширения с файлом на диске?
00:45 – Где на сайте ИТС найти описание параметров командной строки
04:05 – Как вручную в конфигураторе выполнить объединение расширения с файлом на диске
05:10 – Какие параметры нужно указывать в командной строке
06:40 – Почему при объединении расширения из командной строки возникает ошибка “Каталог не обнаружен”
07:50 – Как работает сохранение настроек объединения в файл
12:50 – В каких случаях на практике можно применять объединение расширения с файлом на диске

Видео 3 – Расширение типов реквизитов

Ключевые моменты видео:

00:00 – Как убедиться, что в платформе 8.3.17 и ранее нельзя изменить тип реквизита при помощи расширения
01:20 – Как установить признак контролируемого или проверяемого свойства в расширении

Видео 4 – Расширение строковых реквизитов

Ключевые моменты видео:

00:00 – Как в платформе 8.3.18 увеличить длину строкового реквизита при помощи расширения
01:20 – Какие изменения произошли в панели свойств объекта расширения
03:20 – Можно ли уменьшить длину строкового реквизита при помощи расширения
04:20 – Происходит ли потеря данных при уменьшении длины строкового реквизита с помощью расширения

Видео 5 – Расширение числовых реквизитов

Ключевые моменты видео:

00:00 – Как в платформе 8.3.18 изменить длину и точность числового реквизита при помощи расширения
01:50 – Можно ли уменьшить длину и точность числового реквизита при помощи расширения

Видео 6 – Изменение длины кода

Ключевые моменты видео:

00:00 – Можно ли изменить длину кода и наименования справочника при помощи расширения
01:20 – Как в расширении установить признак контролируемого или проверяемого свойства для длины кода и наименования справочника
02:20 – Можно ли изменить длину номера документа при помощи расширения

Видео 7 – Формирование результирующего типа

Ключевые моменты видео:

00:00 – Почему нельзя уменьшить длину строкового реквизита при помощи расширения
00:50 – Каким образом при расширении типа реквизитов получается составной тип данных
03:20 – Как при помощи расширения добавить дополнительные типы в тип данных реквизита из основной конфигурации
04:20 – Как платформа обеспечивает сохранность данных при расширении типов реквизитов

Видео 8 – Примеры расширения типа

Ключевые моменты видео:

00:00 – Какой тип данных в результате будет иметь реквизит, если его тип изменяет одновременно несколько расширений
02:15 – Как ведет себя платформа при отключении расширения, изменяющего тип данных реквизита основной конфигурации
04:30 – Как при помощи консоли запросов проверить результирующую длину строки реквизита
06:00 – Как воспроизвести пример потери данных при изменении типа данных в расширении

Видео 9 – Свойство Тип

Ключевые моменты видео:

00:00 – Как сделать в расширении свойство Тип одновременно и контролируемым, и модифицируемым
01:30 – Что означает признак контролируемости свойства при расширении типа данных реквизита
02:50 – Каким образом формируется всплывающая подсказка для свойства Тип

Видео 10 – Ограничения составного типа

Ключевые моменты видео:

00:00 – Какие типы данных нельзя включать в составной тип
02:00 – Почему при помощи расширения нельзя изменить тип строкового реквизита на ХранилищеЗначения

Видео 11 – Ограничения расширений

Ключевые моменты видео:

00:00 – Можно ли расширить тип данных для общего реквизита
00:50 – Можно ли при помощи расширения изменить тип реквизита, ссылающегося на внешний источник данных
02:50 – Можно ли расширить тип данных определяемого типа
04:30 – Какие ограничения существуют при работе с планом видов характеристик

Видео 12 – Типовые конфигурации

Ключевые моменты видео:

00:00 – Можно ли в типовой конфигурации УТ 11 воспользоваться расширением типов данных
01:20 – Какой режим совместимости необходим для расширения типов данных
02:20 – Как использование определяемых типов усложняет использование расширения типов

Видео 13 – Отключенные расширения

Ключевые моменты видео:

00:00 – Как ведет себя система, когда при старте сеанса подключены не все расширения, изменяющие структуру хранения данных
01:00 – Как работают предыдущие версии платформы в таком случае
03:40 – Какие изменения произошли в платформе 8.3.18
04:10 – Какие особенности существуют при работе со справочниками, документами, планами обмена
10:40 – Какие особенности существуют при работе с табличными частями
15:50 – Какие особенности существуют при работе с регистрами

Видео 14 – Изменение и контроль

Ключевые моменты видео:

00:00 – Какие изменения произошли в механизме проверки применимости расширения, когда в нем используется аннотация ИзменениеИКонтроль
00:40 – Как платформа 8.3.18 трактует добавленные (удаленные) пустые строки и строки, состоящие только из пробелов и символов табуляции
02:40 – Как восстановить соответствие метода расширения с методом основной конфигурации
03:50 – Как работает проверка применимости расширения на платформе 8.3.18
04:30 – Как исправить синтаксическую ошибку, возникшую в расширении

 

Содержание:

  1. Добавляем реквизит
  2. Добавление кнопки
  3. Добавление группы
  4. Добавляем табличную часть 1С

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

В этой статье я постараюсь собрать все основные методы создания реквизитов на форме. 

1.     Добавляем реквизит

Начнем с самого простого. Мы добавили реквизит «МоеРасширение_НаименованиеНаАнглийском» в справочник контрагентов.

                Для того, чтобы вывести его на форму програмно, пишем код процедуры «МоеРасширение_ПриСозданииНаСервереПосле» (Отказ, Стандартная Обработка).

                НовыйЭлемент = Элементы.Добавить («МоеРасширение_НаименованиеНаАнглийском», Тип(«ПолеФормы»));

                НовыйЭлемент.ПутьКДанным                = «Объект. МоеРасширение_НаименованиеНаАнглийском»;

                НовыйЭлемент.Вид                                     = ВидПоляФормы.ПолеВвода;

                НовыйЭлемент.ТолькоПросмотр         = Ложь;

                НовыйЭлемент.Видимость                      = Истина;

                НовыйЭлемент.Доступность                  = Истина.

Теперь мы добавим на форму реквизит, которого нет в конфигурации. Например, выведем на форму текущую задолженность: реквизит «МоеРасширение_ТекущаяЗадолженность».

Сначала создадим реквизит:

                ДобавляемыеРеквизиты           = Новый Массив;

                НовыйРеквизит = Новый РеквизитФормы(«МоеРасширение_ТекущаяЗадолженность»),      Новый ОписаниеТипов («Число», «Текущая задолженность»);

                ДобавляемыеРеквизиты.Добавить(НовыйРеквизит);

                ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты).

Затем выведем его на форму таким же образом, как и добавленный в конфигурацию реквизит, разница только в поле «ПутьКДанным» – здесь мы пишем наименование только что созданного реквизита:

                НовыйЭлемент = Элементы.Добавить(«МоеРасширение_НаименованиеНаАнглийском», Тип(«ПолеФормы»));

                НовыйЭлемент.ПутьКДанным                = «МоеРасширение_ТекущаяЗадолженность»;

                НовыйЭлемент.Вид                                     = ВидПоляФормы.ПолеВвода;

                НовыйЭлемент.ТолькоПросмотр         = Истина;

                НовыйЭлемент.Видимость                      = Истина;

                НовыйЭлемент.Доступность                  = Истина.

Теперь переместим наши реквизиты под поле «Полное наименование». Для этого надо определить на форме место добавления, в нашем случаем – над группой «ГруппаКолонки»:

Элементы.Переместить(Элементы.МоеРасширение_НаименованиеНаАнглийском,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки);

Элементы.Переместить(Элементы.МоеРасширение_ТекущаяЗадолженность,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки).

Получаем результат:

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

                Элементы. МоеРасширение_ТекущаяЗадолженность.УстановитьДействие(«ПриИзменении», «МоеРасширение_РасшифроватьЗадолженность»). 

2.     Добавление кнопки

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

                НоваяКоманда = Команды.Добавить(«МоеРасширение_ПоказатьОСВ»);

                НоваяКоманда.Действие = «МоеРасширение_ПоказатьОСВ»;

                НоваяКоманда.Заголовок = «Показать ОСВ».

ВАЖНО!! В поле действие пишется имя процедуры.

Теперь добавляем саму кнопку:

                НоваяКнопка = Элементы.Добавить(«МоеРасширение_Кнопка_ПоказатьОСВ», Тип(«КнопкаФормы»));

                НоваяКнопка.ИмяКоманды = «МоеРасширение_ПоказатьОСВ». 

3.     Добавление группы

Для добавления группы переместим кнопку к полю «Текущая задолженность». На этом этапе нам надо создать группу и переместить в нее уже созданные наши элементы.

Создаем группу и помещаем ее под наименованием. Затем переносим в нее реквизит «Текущая задолженность» и кнопку «Показать ОСВ»:

                НоваяГруппа =Элементы.Добавить(«МоеРасширение_ГруппаЗадолженность», Тип(«ГруппаФормы»));

                НоваяГруппа.Вид = ВидГруппыФормы.ОбычнаяГруппа;

                НоваяГруппа.Заголовок = «»;

                НоваяГруппа.ОтображатьЗаголовок = Ложь;

                НоваяГруппа.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;

                Элементы.Переместить(НоваяГруппа,Элементы.ГруппаКолонки.Родитель,Элементы.ГруппаКолонки);

                Элементы.Переместить(Элементы.МоеРасширение_ТекущаяЗадолженность,НоваяГруппа);

                Элементы.Переместить(Элементы.МоеРасширение_Кнопка_ПоказатьОСВ,НоваяГруппа). 

4.     Добавляем табличную часть 1С

Добавим к контрагенту табличную часть 1С «МоеРасширение_Номенклатура» с реквизитом «Номенклатура» и выведем ее на форму.

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

ВАЖНО! При создании реквизитов таблицы родителем указывается реквизит формы «Табличная часть».

                НоваяТабличнаяЧасть = Элементы.Добавить(«МоеРасширение_ТаблицаНоменклатура», Тип(«ТаблицаФормы»));

                НоваяТабличнаяЧасть.ПутьКДанным = «Объект.МоеРасширение_Номенклатура»;

                НовыйРеквизитТабличнойЧасти = Элементы.Добавить(«МоеРасширение_Номенклатура», Тип(«ПолеФормы»),НоваяТабличнаяЧасть);

                НовыйРеквизитТабличнойЧасти.Заголовок = «Номенклатура»;

                НовыйРеквизитТабличнойЧасти.Вид = ВидПоляФормы.ПолеВвода;

                НовыйРеквизитТабличнойЧасти.ПутьКДанным = «Объект.МоеРасширение_Номенклатура.Номенклатура».

 

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

Специалист компании «Кодерлайн» 

Максим Федоров

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