+7 (499)  Доб.Москва и область +7 (812)  Доб.Санкт-Петербург и область

1с составной тип данных

1с составной тип данных

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

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

Если вы хотите узнать, как решить именно Вашу проблему - обращайтесь в форму онлайн-консультанта справа или звоните по телефонам, представленным на сайте. Это быстро и бесплатно!

Содержание:

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

Составной тип данных (доукменты)

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

Прежде всего, необходимо отметить полную поддержку работы с полями составных типов "движка" базы данных и языка запросов. Для этих полей поддерживается весь набор стандартных операций сравнение, агрегирование и т. Please look for potentially complex expressions in your query, and try to simplify them. Это сообщение выводилось при попытке сформировать некоторый отчет, "сердцем" которого был пакет запросов. При помощи технологического журнала и периодически упоминаемой матери автора отчета, виновный запрос был достаточно быстро определен.

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

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

Ну ладно, пусть на диске база занимает не 30 ГиБ, а 35 ГиБ — кто ж эти копейки считает и заметит? Максимальная длина индекса 16 полей или 900 байт. Эти границы чаще всего нарушаются именно на регистрах сведений с составными полями в измерениях. Кстати, об индексах, а что вообще будет, если мы индексируем составное поле? В самом простом случае, если, например, мы индексируем составное поле справочника без доп. К счастью, в самом частом случае, когда в составном типе возможно несколько ссылочных полей, и нет других типов, индекс всего один.

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

Следствие 2: Для составных полей может создаваться много индексов. Кто-то скажет: "Да и ладно! Пусть занимают, зато выборки ускоряют! Так ли это? Для операций поиска по одному значению — да. Во многих других случаях — никак нет. Пусть у нас есть Справочник1 с составным полем СоставноеПоле может содержать число или ссылку на Документ1 и Справочник2 с таким же составным полем СоставноеПоле может содержать число или ссылку на Документ1. СоставноеПоле индексировано в обоих справочниках.

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

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

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

Индексы с включенными полями доступны с MS SQL Server 2005 позволили бы избежать лишних обращений к кластеризованным индексам. В некоторых случаях составное поле лучше было бы "нормализовать" его выделив его типы значений в отдельные таблицы, связав их с базовой таблицей по суррогатному ключу. Причем многие из этих возможностей не влияют или не сильно влияют на текст запросов и имеют аналоги в других СУБД.

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

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

Из перечисленных ресурсов для 32-битных серверов 1С:Предприятия самым критичным может оказаться память, особенно, если в коде вместо обхода выборки часто используется Запрос. У вас в базе нет ни одного составного типа кроме регистраторов, субконто и подобных неизбежностей? Не расслабляйтесь.

Простые радости жизни программиста 1С: выбор типа значения

Рейтинг: 987. Это позволяет хранить в одном поле данные различных типов. С одной стороны, это является достаточно удобной возможностью, но, с другой стороны, использование составных типов оказывает существенное влияние на работу системы. Поэтому к использованию этой возможности следует подходить весьма внимательно.

Составной тип данных для реквизита

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

ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: Локальные переменные в 1С

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

Некоторые данные могут иметь составной тип. Для этого в окне редактирования типа данных нужно установить флажок Составной тип данных и указать те типы, которые могут принимать данные.

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

Составной тип данных

.

.

Запрос. Связь таблиц по полям составного типа данных

.

Оператор ВЫРАЗИТЬ в запросах

.

Язык запросов 1С для начинающих программистов: функции и операторы Вот какие возможности открывает перед нами составной тип данных!

.

.

.

.

.

ВИДЕО ПО ТЕМЕ: Глобальные переменные и модуль формы в 1С 8.3
Комментарии 5
Спасибо! Ваш комментарий появится после проверки.
Добавить комментарий

  1. culapa

    На Вашем месте я бы попытался сам решить эту проблему.

  2. etsigo

    Классно написано! Интересный материал, видно что автор старался.

  3. thesenheu

    Пожалуйста, поподробнее

  4. Радим

    Елки-палки, уникальная заметка

  5. Федосья

    Этот топик просто бесподобен :), мне очень нравится .