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

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

Содержание статьи:

Таблицы и поля; Условия; Связи; Объединения / Псевдонимы; Группировка; Виртуальные таблицы; Вложенные запросы (в разработке).

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Пример 2

    Дата = ТекущаяДата();
    Граница = Новый Граница(Дата, ВидГраницы.Включая);
    
    Запрос.УстановитьПараметр("Период", Граница);
    
Остатки в регистре бухгалтерии

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задача 1

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

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

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

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

Запрос = Новый Запрос;

Ном = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Номенклатура;
Склады = ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Склады;

Субконто = Новый Массив;
Субконто.Добавить(Склады);
Субконто.Добавить(Ном);

Граница = Новый Граница(ТекущаяДата(),ВидГраницы.Включая);

Счет41 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41");

Запрос.УстановитьПараметр("Субконто"    , Субконто);
Запрос.УстановитьПараметр("ДатаОстатков", Граница);
Запрос.УстановитьПараметр("Склад"       , Склад);
Запрос.УстановитьПараметр("Счет41"      , Счет41);
Запрос.Текст = 
"ВЫБРАТЬ
|    ХозрасчетныйОстатки.Субконто1 КАК Склад,
|    ХозрасчетныйОстатки.Субконто2 КАК Номенклатура,
|    ХозрасчетныйОстатки.КоличествоОстаток
|ИЗ
|   РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, 
|       Счет В ИЕРАРХИИ (&Счет41), 
|       &Субконто, 
|       Субконто1 = &Склад) КАК ХозрасчетныйОстатки";
Задача 2

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

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

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

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("Дата", КонецМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("ТипЦен", ТипЦен);

Запрос.Текст = 
"ВЫБРАТЬ
|    ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
|    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
|        &Дата,
|        ТипЦен = &ТипЦен
|	 И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";

<< Пред. страница   |   След.Страница >>

5 комментариев

  1. хм…. запросы, «в итоге у нас получится запрос со следующим текстом» … я вот попыталась поучится по вашим текстам, всё как бы понятно, но вот как потом полученные запросы использовать?

Добавить комментарий

Ваш адрес email не будет опубликован.