Заметки по 1С:Предприятие 8.2, 8.3
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования (Linus Torvalds).
Страницы
- Главная
- Полезности
- Мои сертификаты
пятница, 3 января 2014 г.
Назначить конкретный тип элементу формы, который связан с реквизитом формы, имеющим составной тип
Для этого можно присвоить реквизиту формы значение пустой ссылки нужного типа. Одного из тех типов, которые входят в составной тип.
Например, для поля ввода, связанного с реквизитом, который может принимать значение ссылки на справочники физических и юридических лиц, назначение нужного типа может выглядеть следующим образом:
Если запретить выбор типа в поле ввода (свойство ВыбиратьТип), то реквизиту ОтветЛицо будет назначен тип ссылки на справочник ФизическиеЛица, и для выбора будут предлагаться значения только этого справочника.
Также можно использовать свойство поля ввода ОграничениеТипа, задающее возможные типы данных, которые могут быть введены в поле ввода, и приводить значение соответствующего реквизита к нужному типу:
Как назначить конкретный тип элементу управления, который связан с реквизитом формы, имеющим составной тип?
Для этого можно присвоить реквизиту формы значение пустой ссылки нужного типа. Например, для поля ввода, связанного с реквизитом, который может принимать значение ссылки на справочники физических и юридических лиц, назначение нужного типа может выглядеть следующим образом:
Однако если в этом случае в поле ввода нажать кнопку очистки, снова будет предложен выбор типа значения из двух возможных типов. Избежать этого можно двумя способами:
Во-первых, можно запретить выбор типа в поле ввода (свойство ВыбиратьТип ). В этом случае нажатие на кнопку очистки не будет приводить к сбросу типа в поле ввода.
Во-вторых, можно использовать свойство поля ввода ОграничениеТипа , задающее возможные типы данных, которые могут быть введены в поле ввода, и приводить значение соответствующего реквизита к нужному типу:
Тип справочника по умолчанию в составном типе данных
В документе есть табличная часть "Услуга" с реквизитом составного типа "Наименование услуги". При установке в настройках типов поля "Наименование услуги" — составной тип данных (Строка и Справочник ссылка) по умолчанию устанавливается тип строка. Как сделать так, чтобы при создание нового документа по умолчанию поле "Наименование услуги" в табличной часте было справочного типа, а не строкового.
Составные типы данных
Тип данных считается составным, если в Конфигураторе при выборе типа объекта метаданных (реквизита, измерения, ресурса и т.п.) в окне выбора типа данных:
- выбрано более одного типа данных
Выбор более одного типа объекта метаданных
- выбраны ссылки на объекты базы данных типов разного вида. Такие как: ДокументСсылка, ПеречислениеСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, ПланВидовРасчетаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцессаСсылка, ЗадачаСсылка, ПланОбменаСсылка, ЛюбаяСсылка.
Выбор ссылки на объекты базы данных типов разного вида
Как же создаются составные типы данных? Для этого нужно в конфигураторе открыть свойства объекта, тип данных которого вы хотите задать и установить флажок — «Составной тип данных»
Создание составного типа данных в 1С
2. Недостатки составного типа данных
Удобно, не правда ли? Всего несколько галочек и вот уже в реквизит, переменную, ресурс и т.д. можно поместить какую угодно информацию. Если, к примеру, вам нужно, чтобы в реквизите документа можно было выбрать не из одного вида документов, а из нескольких – составной тип незаменим.
К сожалению все далеко не так просто… Составной тип данных – он как айсберг. Помимо того, что он огромен, а видна только верхушка (реальное представление составного типа нужно искать в глубинах СУБД), так еще и может не затопить, но уж точно сильно затормозить ваш корабль (базу), если обращаться с ним неосторожно.
Самым очевидным недостатком составного типа, конечно же, является размер. Для каждого простого типа данных, выбранного в составном, база выделяет отдельное поле. Так что составной тип в 1С может занимать в два, три и так далее больше раз места, чем простой.
Также составные типы данных отрицательно сказываются на производительности (в особенности, когда дело касается запросов). Самый простой пример –запрос к составному типу данных (без метода «ВЫРАЗИТЬ») вернет все простые типы, входящие в составной.
ВЫБРАТЬ
ОбъектКонфигурации.СоставнойТип КАК СоставнойТип
ИЗ
ОбъектКонфигурации КАК ОбъектКонфигурации
это тоже самое, что и
Если говорить о влиянии составных типов на производительность — отдельного упоминания заслуживает индексирование таблиц базы данных. При индексировании составного типа данных программа создает индекс для каждого отдельного типа, а значит нагрузку, которую оказывает индексирование на систему можно помножить на количество простых типов в составном типе данных.
Составной тип данных совсем не сложен. Он полезен и весьма удобен при разработке, но таит в себе множество опасностей. И чем объемнее и сложнее база, с которой вы работаете, тем больше (в том числе и достаточно серьезных) проблем принесет необдуманное использование составного типа данных.
Ведь, по большому счету, составной тип – это такая запечатанная коробка, в которую положили много разных типов данных. Она опрятно заклеена и на ней есть этикетка, но, в конечном итоге, ее все равно придется вскрывать, доставать все типы и работать с каждым отдельно.
3. Использование составного типа данных
Но как же тогда работать с составными типами данных в 1С?
Самый простой и очевидный способ – не работать вовсе. Если задача требует использования составных типов, это повод проанализировать ее еще раз – может, есть другой способ?
В случае же, если составной тип в больших количествах используется в какой-нибудь подсистеме, следует использовать Определяемый тип (Объект метаданных, появившийся в платформе 8.3 и задающийся также как и обычный тип).
Объект метаданных Определяемый тип
Вместо того, чтобы прописывать состав типов для кучи элементов, можно будет использовать один универсальный Определяемый тип, что упростит как разработку, так и читаемость системы.
Так же стоит помнить, что не все составные типы одинаковы вредны . Так Составной тип, состоящий исключительно из ссылок не требует от СУБД так же много ресурсов, как Составной тип данных, в котором присутствуют основные типы и форматы данных (строка, число, дата и т.д.). С последним стоит быть особенно осторожным, т.к. он особенно сильно влияет на эффективность конфигурации.
И еще одно замечание относительно Составных типов данных. При проверке заполнения реквизитов, содержащие Составной тип, можно использовать только функцию ЗначениеЗаполнено(). Так как пока тип не выбран, такой реквизит содержит значение Неопределено, любая другой метод проверки заполнения реквизитов приведет к ошибке.
Теперь перейдем к Запросам – части 1С, которая больше всего страдает от Составных типов данных. Здесь тоже есть несколько методов, которые позволяют избежать просадок эффективности.
Во-первых, в Реквизиты Составных типов, участвующие в соединениях, отборах и упорядочивании, должны входить только Ссылочные типы данных. Использование любых других типов приведет к потере производительности. Причина этого кроется в особенностях их хранения в СУБД.
Если реквизиту, скажем, документа необходимо иметь как Ссылочный, так и нессылочный тип данных, то можно создать отдельный справочник для хранения нессылочного типа, а в Составной тип данных добавить ссылку на этот Справочник.
Кроме того, при всех отборах и соединениях Составных типов обязательно следует использовать метод ВЫРАЗИТЬ(). Если этого не сделать, реквизит соединится с Составным типом данных по всем таблицам, из которых этот тип состоит, после чего уже отсекаются ненужные. ВЫРАЗИТЬ() отсекает ненужные таблицы заранее, сильно влияя на эффективность Запроса.
Таким образом, даже с Составными типами данных в 1С можно работать. Только делать это нужно внимательно и осторожно.