Меню

Для чего параметр виртуальной таблицы субконто

Особенности выборки результата из виртуальных таблиц регистра бухгалтерии с отбором по субконто

Статья предназначена для технических специалистов – разработчиков 1С.

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

· Если по виртуальной таблице (в частности «Остатки») регистра бухгалтерии делать выборку без разворота по субконто, то можно получить неверный результат

Обычный активно/пассивный счет «60.4» с двумя субконто: «Организация» и «Контрагенты».

Требуется получить остаток по нему с отбором по списку контрагентов.

Казалось бы, простейший запрос нам поможет:

его результат Сумма = 12 221 544,65 . Конкретное значение суммы значения не имеет, но сразу скажу, что она неверная.

Достаточно добавить поле выборки по Субконто1 и я получаю другой результат с итоговой суммой 51 765 945,85 . И это уже правильный результат.

Но как быть, если разворот по субконто счета в 1С нам не нужен, а нужна одна итоговая сумма? Простое применение агрегатной функции не помогает:

Получаю те же неправильные: Сумма = 12 221 544,65

Чтобы получить правильный результат, пришлось в запрос добавить конструкцию, которая никак не изменяет структуру выборки, но обращается к субконто:

В результате получил искомый результат 51 765 945,85, который можно было использовать в следующих запросах пакета.

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

Источник



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

Параметр запроса

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

В данном примере в качестве значения первого параметра виртуальной таблицы будет использовано значение параметра &Начало.

Параметр компоновки данных

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

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

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

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

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

Параметры при автоматическом заполнении полей набора данных

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

Таким образом, запись:

И значение параметра &Начало используется только в случае если в настройках не установлено значение параметра &НачалоПериода.

Источник

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Задача 1

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

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

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

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

Задача 2

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

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

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

Источник

Бухгалтерская подсистема: расходные документы и переоценка валютных остатков

В нашей версии консоли запросов параметр & Субконто , который мы собираемся загрузить массивом субконто , не инициализирован – система считает этот параметр пустым (что допускается) и генерирует следующие данные, рис. 3.3.

Запрос по виртуальной таблице регистра бухгалтерии Остатки

Мы выбрали в консоли запросов получение результатов запросов и временных таблиц. Запрос пакета 2 – это результат нашего запроса, мы видим, что в этом запросе представлены сведения из документа и из регистра остатков.

Таблица ДокМТч – это временная таблица , построенная на основе табличной части проводимого документа. Она содержит, в сгруппированном виде (это сделано для правильной обработки тех случаев, когда одна и та же номенклатурная позиция повторяется в табличной части много раз) сведения о номенклатуре и запрашиваемом количестве номенклатуры.

Добавим текст построенного запроса в процедуру ОбработкаПроведенияПоБухучету() в модуле объекта документа ОтпускМатериаловМастеру. Удобнее всего это сделать, вызвав конструктор запроса с обработкой результатов и вставив текст запроса в конструктор . Конструктор подготовит текст для использования в программном коде и выполнит некоторые дополнительные действия, в частности, создаст заготовки команд передачи параметров в запрос , цикл обхода результатов запроса.

В итоге работы над процедурой проведения документа по бухгалтерскому учету мы получили такой код:

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

Далее мы используем полученную временную таблицу в запросе, где, обращаясь сначала к этой таблице, получаем из нее поля Номенклатура и Количество, после чего левым соединением присоединяем к результатам запроса данные из таблицы регистра бухгалтерии Остатки, ориентируясь на поле Номенклатура (в таблице регистра ссылка на соответствующий элемент справочника Номенклатура может находится в первом субконто ). При получении данных из виртуальной таблицы Хозрасчетный.Остатки мы, кроме прочего, отбираем их по значениям Субконто1, которое должно входить в набор значений субконто из нашего документа (здесь мы так же пользуемся созданной выше временной таблицей в выражении Субконто1 В (ВЫБРАТЬ …)) , и Субконто2 , которое мы можем однозначно отобрать по реквизиту документа ОтветственныйСотрудник.

На тот случай, если запрос в полях количественных и суммовых остатков по регистру возвратит значение NULL (а это возможно в том случае, если нет остатков по запрошенной в документе номенклатурной позиции за ответственным лицом, с которого списываются материалы в документе), мы используем выражение ЕСТЬNULL() для того, чтобы привести NULL к нулю.

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

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

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

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

Источник

Виртуальные таблицы регистра накопления в 1С 8.3

  1. Выборка из регистра накопления
  2. Виртуальные таблицы регистра накопления
  3. Виртуальная таблица остатков
  4. Алгоритм построения таблицы остатков
  5. Граница
  6. Метод Остатки
  7. Виртуальная таблица оборотов
  8. Поля и параметры таблицы оборотов
  9. Алгоритм построения таблицы оборотов для оборотного регистра накопления:
  10. Алгоритм построения таблицы оборотов для остаточного регистра накопления:
  11. Параметры НачалоПериода и КонецПериода
  12. Метод Обороты
  13. Виртуальная таблица остатков и оборотов
  14. Состав полей и параметры
  15. Алгоритм построения таблицы остатков и оборотов
  16. Метод дополнения
  17. Расчет итогов для полей остатков
  18. Параметры НачалоПериода и КонецПериода
  19. Активность

Выборка из регистра накопления

Перебрать все записи регистра накопления можно с помощью метода Выбрать. Данный метод вернет выборку, которую можно перебрать в цикле. Через выборку будут доступны все поля регистра накопления (измерения, ресурсы, реквизиты, служебные поля):

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

Если измерение Товар не проиндексировано, то будет выброшено исключение «Недопустимое значение параметра (параметр номер ‘3’)».

Если нужно выбрать записи только одного регистратора, то можно воспользоваться методом ВыбратьПоРегистратору, передав параметром ссылку на нужный документ:

Чаще всего для выборки используется запрос к таблице движений регистра:

Виртуальные таблицы регистра накопления

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

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

Все их можно увидеть через конструктор запроса:

Виртуальные таблицы регистра накопления

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

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

Виртуальная таблица остатков

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

Виртуальная таблица остатков содержит в себе все измерения и остатки по всем ресурсам:

Виртуальная таблица остатков

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

  • Период — остатки будут получены на эту дату.
  • Условие — фильтрация по измерениям регистра накопления. Можно объединять несколько условий, можно использовать реквизиты измерений.

В запросе параметры указываются в скобках после имени таблицы:

Алгоритм построения таблицы остатков:

  1. Определяется момент времени, который больше или равен параметру период и на который в таблице итогов есть рассчитанные остатки.
  2. Из таблицы итогов получаются остатки на этот момент времени.
  3. Если параметр период не равен моменту времени, полученному на первом шаге, то из таблицы движений получаются записи, находящиеся между параметром период и полученным моментом времени из первого шага. При этом для движений с типом Приход знак меняется на минус, а для движений с типом Расход знак меняется на плюс. Полученные записи таблицы движений объединяются с таблицей итогов из второго шага.
  4. Полученная таблица группируется по полям, которые были выбраны в запросе. Из таблицы удаляются те записи, где остаток по всем ресурсам равен нулю.

Например, таблица движений имеет следующий вид:

Регистратор Вид движения Период Склад Товар Количество
Приход №1 Приход 01.01.2021 09:00:00 Основной Стол 10
Приход №1 Приход 01.01.2021 09:00:00 Основной Шкаф 1
Приход №2 Приход 10.01.2021 11:00:00 Розничный Шкаф 1
Приход №3 Приход 31.01.2021 23:59:59 Основной Стол 7
Приход №4 Приход 31.01.2021 23:59:59 Основной Стол 3
Приход №5 Приход 05.02.2021 12:30:00 Основной Шкаф 5
Расход №1 Расход 10.02.2021 10:00:00 Основной Стол 2
Расход №2 Расход 15.02.2021 10:00:00 Основной Шкаф 7
Расход №3 Расход 20.02.2021 10:00:00 Основной Стол 1
Приход №6 Приход 25.02.2021 10:00:00 Основной Стол 1

Итоги рассчитаны за все периоды, соответственно таблица итогов выглядит так:

Период Склад Товар Количество
01.02.2021 Основной Стол 20
01.02.2021 Основной Шкаф 1
01.02.2021 Розничный Шкаф 1
01.03.2021 Основной Стол 18
01.03.2021 Основной Шкаф -1
01.03.2021 Розничный Шкаф 1
01.11.3999 Основной Стол 18
01.11.3999 Основной Шкаф -1
01.11.3999 Розничный Шкаф 1

Получим остатки на 1 февраля (параметр Период = 01.02.2021):

  1. В таблице итогов есть остатки на 01.02.2021, поэтому в дальнейшем будет использоваться этот момент времени.
  1. Из таблица итогов получены следующие остатки:
Период Склад Товар Количество
01.02.2021 Основной Стол 20
01.02.2021 Основной Шкаф 1
01.02.2021 Розничный Шкаф 1
  1. Параметр Период и момент времени из первого шага совпадают, поэтому таблица движений не используется.
  1. Так как в запросе выбрано только поле Товар, то поле Склад исключается из запроса, выполняется группировка по полю Товар. Итоговый результат:
Товар Количество
Стол 20
Шкаф 2

Теперь выполним тот же самый запрос, но параметр период установим равным 12.02.2021.

  1. На 12.02.2021 в таблице итогов нет остатков, ближайшая большая дата = 01.03.2021.
  1. Получаем остатки на 01.03.2021 из таблицы итогов
Период Склад Товар Количество
01.03.2021 Основной Стол 18
01.03.2021 Основной Шкаф -1
01.03.2021 Розничный Шкаф 1
  1. Параметр Период и момент времени из первого шага не совпадают, поэтому дополнительно выбираются записи из таблицы движений в промежутке между 12.02.2021 и 01.03.2021. Расходные движения со знаком плюс, приходные со знаком минус. Полученная таблица будет объединена с таблицей остатков из второго шага:
Период Склад Товар Количество
15.02.2021 10:00:00 Основной Шкаф 7
20.02.2021 10:00:00 Основной Стол 1
25.02.2021 10:00:00 Основной Стол -1
  1. Так как в запросе выбрано только поле Товар, поэтому отбрасываются все лишние поля и выполняется группировка по полю Товар. Итоговый результат:
Товар Количество
Стол 18
Шкаф 7

Теперь вообще не будем указывать параметр Период в запросе:

В этом случае будет использоваться только таблица итогов, из нее будут сразу получены текущие итоги:

Период Склад Товар Количество
01.11.3999 Основной Стол 18
01.11.3999 Основной Шкаф -1
01.11.3999 Розничный Шкаф 1

Так как в запросе нет поля склад, то оно будет отброшено. Поле Количество будет просуммировано и для товара Шкаф станет равным нулю. Такие записи будут отброшены. В итоге в таблице остатков будет только одна строка:

Товар Количество
Стол 18

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

Если бы в нашем примере не было рассчитанных остатков за февраль 2021, то при получении остатков на втором шаге на 12.02.2021 были бы получены текущие итоги на 01.11.3999. Если нет текущих итогов (отключены для регистра), то был бы взят остаток на 01.02.2021, а на третьем шаге при получении записей из таблицы движений для прихода бы использовался знак плюс, для расхода — минус.

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

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

Граница

В качестве параметра Период можно передать:

  • дату
  • момент времени
  • границу
  • пустую дату, Неопределено или вообще не заполнять параметр

Если передать пустую дату, Неопределено или не заполнять параметр, то будут получены текущие итоги.

Если передать дату, то будут получены остатки с учетом времени, но без учета движений за эту дату. То есть если параметром указать дату 31.01.2021 23:59:59, то будут получены следующие остатки:

Склад Товар Количество
Основной Стол 10
Основной Шкаф 1
Розничный Шкаф 1

Если параметром передать момент времени, то будут получены остатки на указанный момент времени, но исключая движения ссылки из момента времени. Например, если передавать параметром момент времени 31.01.2021 23:59:59 + Приход №4, то остатки будут выглядеть так:

Склад Товар Количество
Основной Стол 17
Основной Шкаф 1
Розничный Шкаф 1

Если нужно получить остатки с учетом движений ссылки, то нужно передать параметром границу. Граница — это программный объект, который включает в себя дату и вид границы: включать граничное значение в интервал или нет:

Источник

Читайте также:  Таблица менделеева огэ 2021 и таблица растворимости
Adblock
detector