1с нельзя задавать параметры для таблицы
При организации выборок в реальных задачах в подавляющем большинстве случаев организуется отбор данных в соответствии с некоторыми критериями.
В случае, когда выборка делается из реальной таблицы, никаких сложностей не возникает. Данные обрабатываются абсолютно тривиально:
В том случае, когда источником в запросе выступает виртуальная таблица, ситуация становится несколько сложнее.
Язык запросов позволяет наложить условие на выборку из виртуальных таблиц двумя способами: в предложении ГДЕ и с помощью параметров виртуальных таблиц. Оба способа приведут к одному результату (за исключением некоторых специфических случаев), но, тем не менее, они далеко не эквиваленты.
Мы уже знаем, что виртуальные таблицы потому и называются виртуальными, что в базе их на самом деле нет. Формируются они только в тот момент, когда к ним обращается запрос. Несмотря на это, нам (то есть, тем, кто составляет запрос) удобно рассматривать виртуальные таблицы именно как реально существующие. Что же произойдёт в системе 1С Предприятие 8, когда составленный нами запрос всё-таки обратится к виртуальной таблице?
На первом шаге, система построит виртуальную таблицу. На втором шаге из полученной таблицы будут выбраны записи, удовлетворяющие условию, заданному в предложении ГДЕ:
Хорошо видно, что в итоговую выборку попадут не все записи из виртуальной таблицы (а, следовательно, и из базы данных), а только те, которые удовлетворяют заданному условию. А остальные записи просто будут исключены из результата.
Таким образом, система проделает не просто бесполезную, а двойную бесполезную работу! Сначала будут затрачены ресурсы на построение виртуальной таблицы на основе лишних данных (на рисунке они помечены как «области данных А и Б»), а потом ещё будет проделана работа по фильтрации этих данных из окончательного результата.
Нельзя ли сразу, на этапе построения виртуальной таблицы, отказаться от использования ненужных данных? Оказывается, можно. Именно для этого и предназначены параметры виртуальных таблиц:
Параметризируя виртуальную таблицу, мы сразу ограничиваем объём данных, который будет обрабатываться запросом.
В чем заключается различие значений параметра виртуальной таблицы "МетодДополнения"?
Когда МетодДополнения установлен в "движения", то будут выданы только те периоды в которых были движения. Когда установлен "ДвиженияИГраницыПериода", тогда к вышеуказанным движениям добавятся 2 записи: движения на начало и конец заданного в параметрах ВТ периода. Поле "Регистратор" при этом для этих 2-х записей будет пустым.
Выборка из регистра бухгалтерии и работа с виртуальными таблицами мало чем отличается от выборки из регистра накопления. Поэтому перед чтением данной статьи рекомендую ознакомиться со статьей про работу с виртуальными таблица регистра накопления. В данной статье подробно будет рассмотрена только та функциональность, которая есть только у регистра бухгалтерии.
Выборка из регистра бухгалтерии
Помимо выборки из основной таблицы регистра бухгалтерии в запросе можно выбрать данные из таблицы субконто.
РегистрБухгалтерии.РегистрБухгалтерии1 КАК РегистрБухгалтерии1
Выборка значений субконто:
РегистрБухгалтерии1Субконто.Регистратор КАК Регистратор , РегистрБухгалтерии1Субконто.МоментВремени КАК МоментВремени , РегистрБухгалтерии1Субконто.НомерСтроки КАК НомерСтроки , РегистрБухгалтерии1Субконто.ВидДвижения КАК ВидДвижения , РегистрБухгалтерии.РегистрБухгалтерии1.Субконто КАК РегистрБухгалтерии1Субконто
Виртуальные таблицы регистра бухгалтерии
У регистра бухгалтерии немного больше виртуальных таблиц, чем у регистра накопления:
При этом у регистра бухгалтерии без поддержки корреспонденции не будет виртуальной таблицы ОборотыДтКт.
ДвиженияССубконто
Виртуальная таблица ДвиженияССубконто содержит в себе поля как основной таблицы регистра бухгалтерии, так и таблицы значений субконто:
Данная таблица получается соединением основной таблицы и таблицы значений субконто. Из всех виртуальных таблиц только данная таблица может содержать неактивные записи (поле Активность = Ложь), но при этом в самой таблице есть поле Активность, поэтому неактивные записи можно будет исключить в запросе.
Таблица ДвиженияССубконто имеет следующие параметры:
- С помощью параметров НачалоПериода и КонецПериода можно ограничить выборку записей по периоду. Тип может быть Дата, МоментВремени, Граница.
- Параметр Условие позволяет наложить отбор на любые поля таблицы.
- Параметр Упорядочивание позволяет задать поле по которому нужно отсортировать таблицу. После имени поля можно указать ВОЗР или УБЫВ для определения порядка сортировки (по возрастанию или по убыванию).
- Параметр Первые позволяет ограничить количество выбираемых записей.
Данный запрос выберет первые 10 записей за период между &НачДата и &КонДата, с отбором по счету дебета = &СчетДт, выборка будет отсортирована по полю Организация.
Все отборы, сортировку и ограничение количества записей можно указать не в параметрах виртуальной таблицы, а в тексте запроса. Преимущество использования параметров в том, что они будут использованы в процессе формирования виртуальной таблицы, что положительно скажется на производительности запроса.
Как правило данную таблицу используют для получения проводок вместе с субконто.
Виртуальная таблица остатки
Отличия от виртуальной таблицы регистра накопления
Виртуальная таблица остатков регистра бухгалтерии очень сильно похожа на виртуальную таблицу остатков регистра накопления, поэтому рассмотрим только основные отличия.
Во-первых помимо измерений регистра бухгалтерии в таблице остатков присутствуют поля Счет и субконто. Количество субконто равно максимальному количеству субконто в плане счетов.
В нашем примере в настройках плана счетов было указано максимум два субконто, поэтому в таблице есть два поля для субконто: Субконто1 и Субконто2. Если на каком-то счете присутствует только одно субконто, то в поле Субконто2 будет NULL.
Во-вторых, для каждого ресурса создается по пять полей:
- Остаток
- ОстатокДт
- ОстатокКт
- РазвернутыйОстатокДт
- РазвернутыйОстатокКт
В поле Остаток будет остаток, как он хранится в таблице итогов. Дебетовый остаток будет больше нуля, кредитовый меньше.
Поля ОстатокДт и ОстатокКт рассчитываются по разному, в зависимости от вида счета:
- Для активного счета ОстатокКт всегда равен нулю, а ОстатокДт = Остаток.
- Для пассивного счета ОстатокДт всегда равен нулю, а ОстатокКт = -Остаток.
- Для активно-пассивного счета, если Остаток > 0, то ОстатокДт = Остаток, а ОстатокКт = 0. Если Остаток < 0, то ОстатокДт = 0, а ОстатокКт = -Остаток.
Даже если у активного счета остаток будет меньше нуля, то он будет отображаться как дебетовый остаток, но с минусом. Аналогично с пассивным счетом: если остаток больше нуля, то он будет по кредиту, но с минусом:
Признак Балансовый у измерений и ресурсов никак не влияет на количество полей.
В-четвертых, есть два новых параметра: УсловиеСчета и Субконто:
УсловиеСчета позволяет задать отбор по счетам учета, можно указать несколько счетов.
В параметре Условие можно задать отбор по измерениям и субконто, данный параметр аналогичен параметру для виртуальной таблицы регистра накопления.
Читайте также: