Меню

Параметры виртуальной таблицы 1с для чего



Профессия — 1С

Обзор виртуальных таблиц

рубрики: Виртуальные таблицы | Дата: 2 февраля, 2017

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

Регистры сведений

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

  • СрезПервых
  • СрезПоследних

Регистры накопления

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

Регистр накопления остатков

Доступны следующие виртуальные таблицы

  • Остатки
  • Обороты
  • ОстаткиИОбороты

Регистр накопления оборотов

Доступна только одна виртуальная таблица

  • Обороты

Регистры расчета

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

  • ДанныеГрафика
  • ФактическийПериодДействия
  • База
    Здесь на самом деле может быть несколько виртуальных таблиц в зависимости от настроек планов видов расчета и количества регистров расчета входящих в тот или иной план видов расчета.
    Допустим, что у нас есть два плана видов расчета: Начисления и Удержания. И для Удержаний в качестве базового плана видов расчета указан ПВР Начисления

В свою очередь есть три регистра расчета: Начисления, НачисленияДополнительные и Удержания. И регистры Начисления и НачисленияДополнительные включены в план видов расчета Начисления, а регистр Удержания соответственно в план видов расчета Удержания.

Так вот, для регистра расчета Удержания у нас тогда будут доступны две виртуальные таблицы с базой
БазаНачисления
БазаНачисленияДополнительные

Регистры бухгалтерии

Самым большим набором виртуальных таблиц обладают регистры бухгалтерии

  • Остатки
  • Обороты
  • ОборотыДтКт
  • ОстаткиИОбороты
  • Субконто
  • ДвиженияССубконто

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

Источник

Параметры виртуальных таблиц

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

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

Язык запросов позволяет наложить условие на выборку из виртуальных таблиц двумя способами: в предложении ГДЕ и с помощью параметров виртуальных таблиц. Оба способа приведут к одному результату (за исключением некоторых специфических случаев), но, тем не менее, они далеко не эквиваленты.

Мы уже знаем, что виртуальные таблицы потому и называются виртуальными, что в базе их на самом деле нет. Формируются они только в тот момент, когда к ним обращается запрос. Несмотря на это, нам (то есть, тем, кто составляет запрос) удобно рассматривать виртуальные таблицы именно как реально существующие. Что же произойдёт в системе 1С Предприятие 8, когда составленный нами запрос всё-таки обратится к виртуальной таблице?

На первом шаге, система построит виртуальную таблицу. На втором шаге из полученной таблицы будут выбраны записи, удовлетворяющие условию, заданному в предложении ГДЕ:
title
Хорошо видно, что в итоговую выборку попадут не все записи из виртуальной таблицы (а, следовательно, и из базы данных), а только те, которые удовлетворяют заданному условию. А остальные записи просто будут исключены из результата.

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

Нельзя ли сразу, на этапе построения виртуальной таблицы, отказаться от использования ненужных данных? Оказывается, можно. Именно для этого и предназначены параметры виртуальных таблиц:
title
Параметризируя виртуальную таблицу, мы сразу ограничиваем объём данных, который будет обрабатываться запросом.

В чем заключается различие значений параметра виртуальной таблицы «МетодДополнения»?
Когда МетодДополнения установлен в «движения», то будут выданы только те периоды в которых были движения. Когда установлен «ДвиженияИГраницыПериода», тогда к вышеуказанным движениям добавятся 2 записи: движения на начало и конец заданного в параметрах ВТ периода. Поле «Регистратор» при этом для этих 2-х записей будет пустым.

Источник

Конструктор запросов 1С — обучение на примерах

Урок 6. Виртуальные таблицы и их использование в конструкторе запросов

Задача 1: Получить остатки номенклатуры на указанном складе на конец месяца.

Задача 2: Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

Новые механизмы: заполнение параметров виртуальных таблиц.

Теоретическая часть урока №6

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

Рассмотрим основные виды виртуальных таблиц 1с для различных объектов метаданных:

  • СрезПоследних. Метаданные: периодические регистры сведений. Данная таблица позволяет получить последние актуальные данные на указанную дату, такие данные называются срезом последних. Возможно получить срез как в целом по регистру, так и по одному, либо нескольким измерениям;
  • СрезПервых. Метаданные: периодические регистры сведений. Данная таблицы позволяет получить первые актуальные данные появившееся в регистре в указанную дату, либо после нее, такие данные называются срезом первых. Возможно получить срез как в целом по регистру, так и по одному, либо нескольким измерениям;
  • Остатки. Метаданные: регистры бухгалтерии, регистры накопления с видом регистра остатки. Данная таблица позволяет получить остатки по ресурсам регистра на указанную дату. Возможно получать остатки как в целом по регистру, так и в разрезе определенных измерений, для регистров бухгалтерии в измерения также включаются счет и субконто относящиеся к данному счету;
  • Обороты. Метаданные: регистры бухгалтерии, регистры накопления. Данная таблица позволяет получить обороты по ресурсам регистра за указанный период. Возможно получать обороты как в целом по регистру, так и в разрезе определенных измерений, для регистров бухгалтерии в измерения также включаются счет, субконто, кор. счет, кор. субконто;
  • ОстаткиИОбороты. Метаданные: регистры бухгалтерии, регистры накопления с видом регистра остатки. Данная таблица позволяет получать остатки по ресурсам на начало и конец указанного периода и обороты по ресурсам за указанный период. Возможно получать остатки и обороты как в целом по регистру, так и в разрезе определенных измерений, для регистров бухгалтерии в измерения также включаются счет и субконто относящиеся к данному счету;
  • ОборотыДтКт. Метаданные: регистры бухгалтерии. Данная таблица позволяет получить обороты по ресурсам регистра за указанный период. Возможно получать обороты как в целом по регистру, так и в разрезе определенных измерений, в измерения также включаются дебетовая и кредитовая части проводки: счет дебета, счет кредита, субконто дебета, субконто кредита и т.д.;
  • ДвиженияССубконто. Метаданные: регистры бухгалтерии. Данная таблица позволяет получить записи регистра бухгалтерии вместе со значениями субконто.

Конструктор запросов позволяет работать с виртуальными таблицами регистров. Если у регистра есть виртуальные таблицы, то они будут находится в разделе База данных на вкладке Таблицы и поля после основной таблицы регистра.

Виртуальные таблицы в конструкторе запросов 1с

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

Открыть параметры виртуальной таблицы

СрезПоследних и СрезПервых

Параметры виртуальной таблицы Срез последних

Условие в параметрах виртуальной таблицы 1с

  • Период. В данном поле необходимо задать параметр, в который будет передана дата, на которую будет осуществляться срез первых, либо срез последних;
  • Условие. Данное поле присутствует практически у всех виртуальных таблиц, в нем задается условие на поля виртуальной таблицы. Данное условие необходимо прописать вручную, либо воспользоваться редактором произвольных выражений, который можно запустить нажав кнопку с тремя точками.

    ПРИМЕЧЕНИЕ! Если вам необходимо задать условия на поля виртуальной таблицы, делать это необходимо именно в параметрах таблицы, а не на вкладке Условия. Все дело в том, что запрос сначала выбирает данные, учитывая указанные параметры, а уже потом накладывает на него отбор из вкладки Условия. Поэтому условия наложенные в параметрах таблицы отработают быстрее, чем те которые указаны на вкладке Условия. Однако это правило не следует использовать для установки условий на ресурсы регистров, так как в данном случае они не будут отрабатывать также, как условия наложенные на измерения и реквизиты (т.е. если вам необходим отбор по ресурсам регистра, делать это нужно на вкладке Условия).

Остатки в регистре накопления

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

Остатки в регистре бухгалтерии

Параметры виртуальной таблицы остатки регистр бухгалтерии

  • УсловиеСчета. В данном поле задается условие на поле Счет виртуальной таблицы. В отличии поля Условия, для создания условий доступно только измерение Счет;
  • Субконто. В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться в данной виртуальной таблице. Например, если вы хотите получить остатки по 41 счету бухгалтерского учета, но вам не нужен разрез по складам, то в данный параметр можно передать массив состоящий из одного элемента: Номенклатура из плана видов характеристик ВидыСубконтоХозрасчетные.

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

Обороты в регистре накопления

Параметры виртуальной таблицы Обороты

  • НачалоПериода. Параметр в котором хранится дата начала периода, за который будут браться обороты;
  • КонецПериода. Параметр в котором хранится дата окончания периода, за который будут браться обороты;
  • Периодичность. Определяет группировку по периоду в виртуальной таблице. Если, например, указана периодичность Месяц, то данные в таблице будут сгруппированы по всем измерениям и месяцу, в полях таблицы появится поле Период, в котором будет хранится первый день месяца, в котором было сделано движение регистра. Если оставить поле Периодичность пустым, то периода в полях виртуальной таблицы не будет. Помимо периодичности связанной с временными промежутками есть еще несколько ее типов:
    • Запись. Данные будут выбираться по отдельным записям регистра, точно также как в полной таблице. В полях появляются Период и Регистратор (документ который сделал данное движение);
    • Регистратор. Данные будут сгруппированы по документу сделавшему движения в регистре. Данная группировка удобна как раз тогда, когда вам необходимо иметь разрез по документам. В полях появляются Период и Регистратор;
    • Период. Данные группируются по измерениям регистра за весь период оборота;
    • Авто. Данные группируются до секунды, в полях появляются Регистратор, ПериодСекунда, …. ПериодГод.
Обороты в регистре бухгалтерии

  • УсловиеКорСчета. В данном поле задается условие на поле корреспондирующий счет проводки. В отличии поля Условия, для создания условий доступно только измерение КорСчет;
  • КорСубконто. В данном поле задается параметр, содержащий массив видов субконто корреспондирующего счета, работает аналогично параметру Субконто, см. раздел «Остатки в регистре бухгалтерии».
Остатки и обороты в регистре накопления

  • МетодДополнения. Метод дополнения периодов, данный параметр определяет за какие периоды будут получены движения регистра. Если указано значение Движения, то будут получены периоды, в которых были движения (обороты не равны нулю), если ДвиженияИГраницыПериода, то за периоды, по которым были движения, плюс начальный и конечный периоды, если на их начало был остаток. Данный параметр имеет смысл только, если Периодичность не равна Период. ДвиженияИГраницыПериода является значением по умолчанию, поэтому если нужен данный метод дополнения, поле можно оставить пустым.
Остатки и обороты в регистре бухгалтерии

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

Обороты Дебет Кредит

  • УсловиеСчетаДт. В данном поле задается условие на поле СчетДт виртуальной таблицы, это счет левой части бухгалтерской проводки;
  • УсловиеСчетаКт. В данном поле задается условие на поле СчетКт виртуальной таблицы, это счет правой части бухгалтерской проводки;
  • СубконтоДт. В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться для левой (дебетовой) части проводки;
  • СубконтоКт. В данном поле задается параметр, содержащий массив видов субконто, которые должны анализироваться для правой (кредитовой) части проводки;
Движения с субконто

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

Практическая часть урока №6

В данном разделе нам предстоит решить две задачи по пройденной теме.

Задача 1

Получить остатки номенклатуры на указанном складе на конец месяца.

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

  • Создадим новый запрос;
  • Запустим конструктор запросов;
  • В раздел Таблицы перетащим таблицу Хозрасчетный.Остатки из ветки РегистрыБухгалтерии;
  • Выделим данную таблицу и нажмем кнопку Параметры виртуальной таблицы;
  • В поле Период впишем параметр, в который будет передаваться дата на которую будут браться остатки. Так как мы используем таблицу Остатки, в параметр передадим не дату а границу, с видом Включая;
  • В поле УсловиеСчета вручную или используя редактор произвольных выражений вписываем условие на счет, используя оператор В ИЕРАРХИИ, для того чтобы в запрос попали остатки по всем субсчетам счета 41;
  • В поле Субконто зададим параметр, в который передадим массив субконто. В нашей задаче нам нужны только склады и номенклатура, первым элементом массива зададим вид субконто Склады, а вторым Номенклатура;
  • В поле Условие вручную или используя редактор произвольных выражений наложим отбор на склад, который в нашем случае хранится в поле Субконто1.
  • На этом заполнение параметров виртуальной таблицы завершено, нажимаем кнопку ОК;
  • В раздел Поля перетащим Субконто1, Субконто2 и КоличествоОстаток;
  • Перейдем на вкладку Объединения / Псевдонимы;
  • Зададим псевдонимы для полей Субконто1 и Субконто2, назначим для них Склад и Номенклатура соответственно;
  • Запрос готов, нажимаем кнопку «ОК» в нижней части окна конструктора.

В итоге у нас получится запрос со следующим текстом:

Задача 2

Получить актуальную цену на конец месяца по указанной номенклатуре и типу цен.

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

В итоге у нас получится запрос со следующим текстом:

Источник

Оптимизация запросов в 1С 8.3

Одним из важнейших пунктов в повышении производительности работы 1С 8.3 является оптимизация запросов. Этот пункт также очень важен при сдаче аттестации 1С Эксперт по технологическим вопросам. Ниже пойдет речь о типичных причинах неоптимальной работы запросов и способах их оптимизации.

Большой запрос

Отборы в виртуальной таблице с помощью конструкции ГДЕ

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

ПРАВИЛЬНО:

ВЫБРАТЬ
ВзаиморасчетыСДепонентамиОрганизацийОстатки.СуммаОстаток
ИЗ
РегистрНакопления.ВзаиморасчетыСДепонентамиОрганизаций.Остатки(
,
Организация = &Организация
И Физлицо = &Физлицо) КАК ВзаиморасчетыСДепонентамиОрганизацийОстатки

НЕПРАВИЛЬНО:

ВЫБРАТЬ
ВзаиморасчетыСДепонентамиОрганизацийОстатки.СуммаОстаток
ИЗ
РегистрНакопления.ВзаиморасчетыСДепонентамиОрганизаций.Остатки(, ) КАК ВзаиморасчетыСДепонентамиОрганизацийОстатки
ГДЕ
ВзаиморасчетыСДепонентамиОрганизацийОстатки.Организация = &Организация
И ВзаиморасчетыСДепонентамиОрганизацийОстатки.Физлицо = &Физлицо

Получение значения поля составного типа через точку

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

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

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

НЕПРАВИЛЬНО:

ВЫБРАТЬ
НаборЗаписей.Регистратор.Дата,
НаборЗаписей.Количество
ИЗ
РегистрНакопления.ТоварыOрганизаций КАК НаборЗаписей

Т.е. по факту вот такой запрос будет обращаться не к одной таблице, а к 22 таблицам базы данных ( у этого регистра 21 тип регистратора).

1С рекомендует экспертам в таком случае для оптимизации пожертвовать размером хранимых данных в пользу производительности или универсальностью кода ради производительности:

ПРАВИЛЬНО:

ВЫБРАТЬ
ВЫБОР
КОГДА ТоварыОрг.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыОрг.Регистратор КАК Документ.РеализацияТоваровУслуг).Дата
КОГДА ТоварыОрг.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
ТОГДА ВЫРАЗИТЬ(ТоварыОрг.Регистратор КАК Документ.ПоступлениеТоваровУслуг).Дата
КОНЕЦ КАК Дата,
ТоварыОрг.Количество
ИЗ
РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрг

Либо второй вариант — добавление такой информации в реквизит, например, в нашем случае — добавление даты.

ПРАВИЛЬНО:

ВЫБРАТЬ
ТоварыОрганизаций.Дата,
ТоварыОрганизаций.Количество
ИЗ
РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций

Подзапросы в условии соединения

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

НЕПРАВИЛЬНО:

ВЫБРАТЬ …
ИЗ Документ.РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ (
ВЫБРАТЬ ИЗ РегистрСведений.Лимиты
ГДЕ …
СГРУППИРОВАТЬ ПО …
) ПО …

ПРАВИЛЬНО:

ВЫБРАТЬ …
ПОМЕСТИТЬ Лимиты
ИЗ РегистрСведений.Лимиты
ГДЕ …
СГРУППИРОВАТЬ ПО …
ИНДЕКСИРОВАТЬ ПО …;

ВЫБРАТЬ …
ИЗ Документ.РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Лимиты
ПО …;

Соединение записей с виртуальными таблицами

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

Использование отборов по неиндексируемым полям

Одна из самых распространенных ошибок при составления запросов — использование условий по неиндексируемым полям, это противоречит правилам оптимизации запросов. СУБД не может выполнить запрос оптимально, если в запросе накладывается отбор по неиндексируемым полям. Если же берется временная таблица, также необходимо индексировать поля соединения.

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

  1. Индекс содержит все поля, перечисленные в условии.
  2. Эти поля находятся в самом начале индекса.
  3. Эти отборы идут подряд, то есть между ними не «вклиниваются» значения, не участвующие в условии запроса.

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

Использование логического ИЛИ в условиях

Настоятельно не рекомендуется злоупотреблять в условиях запросов конструкцией «ИЛИ».

Вот и всё, в данной статье были освещены основные аспекты оптимизации запросов, которые должен знать каждый эксперт 1С.

Отличное видео по разработке и оптимизации запросов 1С 8.3

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

Источник

Читайте также:  Границы таблицы и данные форм
Adblock
detector