Как сделать обороты за период в 1с
Видеоролик выполнен в программе «1С:Бухгалтерия 8» версия 3.0.87.22.
Требуемый отчет можно получить, сформировав отчет Оборотно-сальдовая ведомость (ОСВ) с отбором по счетам учета денежных средств и детализацией по статьям движения денежных средств.
Отчет Оборотно-сальдовая ведомость (раздел Отчеты – Стандартные отчеты) в общем случае предназначен для формирования ОСВ по всем счетам (субсчетам) за определенный период времени. Каждая строка отчета соответствует определенному счету или субсчету. Счета упорядочены в порядке возрастания. Для каждого счета показаны суммы остатков на начало и на конец периода по дебету и кредиту и суммы оборотов за период.
Чтобы вывести ОСВ только по счетам учета денежных средств следует перейти в настройки отчета (кнопка Показать настройки) и установить отбор на одноименной закладке:
- в графе Поле - указать значение Счет, выбрав его из предлагаемого списка значений;
- в графе Вид сравнения - выбрать условие сравнения В списке;
- через графу Значение перейти в форму списка значений, где добавить в список счета учета денежных средств, используемые в конкретной организации, например, 50.01 «Касса организации», 51 «Расчетные счета» и 52 «Валютные счета» (кнопка Добавить).
Чтобы детализировать ОСВ по статьям движения денежных средств в настройках отчета на закладке Группировка следует добавить счета учета денежных средств, указанные при отборе (кнопка Добавить). В графе По субконто автоматически подставляются доступные виды субконто:
- Статьи движения денежных средств – для счета 50.01;
- Банковские счета и Статьи движения денежных средств – для счетов 51 и 52.
На закладке Показатели можно установить флаг Валютная сумма – в этом случае для валютных счетов показатели в ОСВ будут выводиться одновременно в рублевой и валютной оценке.
Выполненные настройки можно сохранить по команде Сохранить настройки.
В предыдущей статье по регистрам бухгалтерии "Регистры бухгалтерии. Настройки, субконто и движения с субконто" мы подробным образом рассмотрели работу настроек этого регистра, а также внутренности виртуальных таблиц "Субконто" и "Движения с субконто". Коснулись некоторых особенностей настроек и их влияние на хранение данных регистра на стороне базы данных.
Сегодня мы продолжим анализ работы регистра, но на этот раз рассмотрим только одну виртуальную таблицу "Обороты". Такая маленькая, и такая интересная!
Все данные для публикации получены с помощью инструментов:
Начнем с простых запросов, которые генерирует платформа 1С, и закончим на особенностях и вопросах производительности.
Небольшое отступление
И так, начнем с простого. Все примеры продолжим делать на той же базе данных, что и в предыдущей статье.
Для чего нужна таблица оборотов? Правильно, для получения оборотов по счету (внезапно!). При этом можно получить оборот как общий по счету, так и в разрезе аналитики: измерений регистра (организация, валюта, подразделение и т.д.) или субконто счета. И, конечно же, можно получить обороты с учетом кор. счета и кор. аналитики по этому счету.
В общем, виртуальная таблица, часто используемая как в отчетах, так и в алгоритмах. Все, кто работает с учетными системами почти всегда сталкиваются с регистрами бухгалтерии и с таблицей оборотов, в частности. В самой знаменитой типовой конфигурации "Бухгалтерия предприятия" эта виртуальная таблица используется в таких отчетах как:
- Анализ состояния учета по налогу на прибыль
- Продажи
- Расшифровка платежей в бюджет
- И еще много-много всего.
Думаю, что необходимость использования этой виртуальной таблицы очевидна. Перейдем к первому примеру и рассмотрим, что именно делает платформа 1С с этой виртуальной таблицей.
Простой пример
Первый запрос имеет мало общего с практическими задачами (и я надеюсь Вы так не делаете на рабочем базе). Получим обороты для всех счетов по сумме и количеству.
Если Вы далаете такие запросы на рабочей базе, то стоит подумать над тем, чтобы от такого отказаться. Почему? Взгляните какой запрос мы имеем на стороне базы данных.
Как мы видим, платформа получает данные из основной таблицы регистра для получения оборотов по указанным ресурсам. Алгоритм такой:
- Получаем обороты из основной таблицы по дебету
- Получаем обороты из основной таблицы по кредиту
- Объединяем полученные данные в единую таблицу и группируем по счету
В принципе все работает логично. Но может появиться вопрос: почему платформа не использует данные итогов? Ведь оптимально было бы получить общие показатели из таблиц итогов, чем рассчитывать все заново по основной таблице. Ответ в этом случае прост - в запросе не установлен отбор по периоду. Чтобы платформа 1С начала использовать таблицы итогов нужно установить фильтр по периоду, как минимум по началу периода.
Например, если в базе установлен период рассчитанных итогов для регистра бухгалтерии с 01.01.2019 по 31.07.2020, то для начала использования итогов начало периода должно быть установлено больше или равным 01.01.2019. Есть нюанс: если поставить дату начала периода меньше даты рассчитанных итогов (но не более чем на 1 месяц), то платформа все равно будет использовать итоги, а для периода до минимальной даты рассчитанных итогов будет сделан запрос к основным таблицам регистра (точнее два запроса - для дебета и для кредита). Вот так стал выглядеть запрос с началом периода.
Чтобы пример был более полным, установим параметр "НачалоПериода" как 10.12.2018, т.е. меньше минимальной даты рассчитанных итогов, но не более чем на 1 месяц. Вот такой запрос будет сформирован к базе данных.
В чем-то этот запрос похож на предыдущий пример, но значительные отличия все же присутствуют:
- В первую очередь данные за тот период, в котором есть рассчитанные итоги, получаются именно из таблицы итогов. В нашем случаев используются итоги между счетами.
- Там, где итоги недоступны платформа 1С собирает данные из основных таблиц регистра (период до расчета итогов и после максимальной даты рассчитанных итогов).
Ранее в одной из статей мы говорили о том, почему рассчитывать итоги очень важно. И снова на примере выше было показано, что если итоги не обслуживаются, то запросы к регистру бухгалтерии будут работать менее эффективно. Давайте перейдем к более сложному примеру.
А если добавить субконто
Настало время усложнить пример и добавить в запрос субконто, отбор по счету и измерению "Организация".
Намешали сразу почти все, что можно в этой виртуальной таблице, кроме кор. счета и аналитики с ресурсами по нему, т.к. об этом позже. Вот какой запрос, а точнее серию запросов, в этом случае сформирует платформа 1С.
Запрос стал больше и сложнее, но на самом деле ничего сверхъестественного тут нет:
- Сначала платформа подготавливает информацию по счету, который используется в отборах и по виду субконто.
- Затем начинается основной запрос, в котором:
- Получаем данные оборотов из таблицы итогов по 2 субконто. Почему именно по этой таблице? Да потому что во всех отборах нашего примера устанавливался счет 51, у которого 2 субконто (банковский счет и статья ДДС). Для получаемых значений также устанавливается фильтр по счету и субконто, а также по организации. Отбор по периоду устанавливается в промежутке от 01.01.2019 (начала периода рассчитанных итогов) до 28.02.2020 включительно.
- Т.к. изначально отбор ставился с 10.12.2018, то платформа делает дополнительных два запроса (по дебету и кредиту) к основным таблицам регистра в период с 10.12.2018 по 31.12.2018, т.к. получить обороты из таблиц итогов за этот период нельзя.
- Дополнительно делаются аналогичные два запроса (по дебету и по кредиту) за 01.03.2020, т.к. именно эта дата установлена как конец периода отбора. Т.к. итоги рассчитываются в разрезе месяца, то получить данные оборотов за один день с их помощью не получится. Именно поэтому и был еще раз сгенерирован запрос к основным таблицам регистра.
- После все полученные данные группируются и возвращаются как результат.
В самом запросе дал исчерпывающие комментарии, внимательно посмотрите на него, чтобы лучше разобраться.
Данные кор. счета
Немного изменим пример, добавив кор. счет с аналитикой и обороты по количеству (т.к. это не балансовый ресурс) по нему.
Сгенерированный платформой 1С запрос очень похож на тот, что было в предыдущем примере, но логика получения данных значительно изменилась.
Т.к. у нас присутствует получение данных по корреспондентскому счету, то итоги в этом случае использовать уже невозможно. В таблице итогов просто нет заранее подготовленных данных для подобных запросов. Поэтому вся информация по оборотом "вытягивается" из основных таблиц регистров.
Будьте осторожны с получением данных оборотов по корреспондирующим счетам и их аналитике.
Особая периодичность
В качестве последнего примера рассмотрим тот же запрос, но с небольшой модификацией - установим параметр виртуальной таблицы "Периодичность" в "Неделя" и посмотрим что будет.
Сформированный SQL-запрос, который в этот раз я оставлю без комментариев, показывает, что и в этом случае таблицы итогов не были задействованы. Подобное поведение характерно и для регистра накопления, которое мы рассматривали в предыдущей статье. Заключается оно в том, что если периодичность установлена меньше месяца, то итоги никаким образом не помогут в получении данных, ведь они рассчитаны в разрезе месяца.
В примере выше уже была ситуация, когда для получения данных за один день платформа формировала SQL-запросы к основным таблицам регистра. Тут схожая ситуация.
Использовать периодичность нужно очень осторожно, т.к. некорректное ее указание может значительно снизить производительность информационной системы.
Производительность запросов
Мы рассмотрели несколько примеров работы виртуальной таблицы "Обороты" регистра бухгалтерии. В контексте производительности напрашиваются такие выводы:
- Для максимальной производительности запросов к виртуальной таблице оборотов необходимо использовать итоги регистра. То есть они должны быть рассчитаны и обслуживаться ежемесячно, сдвигая дату рассчитанных итогов. Об этом мы говорили ранее.
- Даже если итоги в базе рассчитаны и обслуживаются, необходимо придерживаться некоторых правил написания запросов к таблице оборотов, когда это возможно в контексте поставленной задачи:
- Периодичность не должна быть меньше месяца, иначе данные будут запрашиваться из основных таблиц регистра и итоги будут игнорироваться.
- Обязательно нужно указывать период, за который выполняется получение данных оборотов, иначе все данные будут получаться из основных таблиц регистра. Да, если не указать период в таблице оборотов - итоги не будут использоваться. Но Вы же так не делаете, верно?
- Использование корреспондирующих полей (кор. счет или измерения, а также ресурсы) также приводит к отключению использования итогов. Будьте осторожны.
- При работе с оборотами продумайте максимально возможные условия отборов, как минимум по периоду и основным измерениям регистра, счетам и субконто (виду и значениям). Это позволит избежать большинства проблем производительности при использовании этой виртуальной таблицы.
- Для максимальной производительности отборы должны быть максимально селективными. Если Вы получаете обороты за пару лет с указанием отбора только по счету, то потенциальный объем получаемых данных может быть очень большой. В этом случае СУБД может проигнорировать индексы, т.к. ей проще эти данные получить сканированием таблиц.
Таким образом, использовать виртуальную таблицу оборотов регистра бухгалтерии можно и нужно, но стоит учитывать ее особенности работы.
В случае же, когда производительность при получения данных оборотов критична, то необходимо рассмотреть вариант создания отдельного регистра накопления, как это часто можно увидеть в типовых конфигурациях. Регистры накопления работают значительно быстрее с оборотами, т.к. выполняют меньше функций, а структура регистра накопления значительно проще. Да и агрегаты этих регистров, если их использовать с умом, позволяют решать проблемы производительности при получении оборотов практически любого уровня.
Следующий раунд
Среди всех виртуальных таблиц регистров бухгалтерии именно таблица "Обороты" является самой "легкой" как в использовании в запросах, так и с точки зрения потребления ресурсов и производительности. Однако, даже она по производительности часто уступает таблице оборотов регистра накопления и это нормально. Ведь у этих регистров совершенно разные задачи.
Регистры бухгалтерии достаточно сложные и "тяжелые" как с точки зрения хранения данных, так и в части использования в разработке. Именно поэтому нужно использовать их для учетных задач, но никак не для оперативного учета. Представьте что было бы, если бы чеки ККМ формировали проводки при проведении :) Прощай розница! :)))
Все данные для публикации получены с помощью инструментов:
В следующих статьях мы подробнее рассмотрим остальные виртуальные таблицы регистров, а после поднимем тему неплатформенных индексов для них, влияния количества субконто на производительность, а также несколько конкретных кейсов запросов к регистру и их оптимизацию.
В нескольких статьях представлены основные сведения о внутреннем устройстве регистров накопления, о SQL-запросах платформы при работе с ними и их изменение в зависимости от настроек регистра. Подробно описана работа платформы с разными типами регистров (остатков и накопления), а также принцип действия агрегатов.
Материалы созданы во времена платформы 8.2, поэтому некоторые моменты могут быть уже не актуальными, но основные принципы работы остались неизменными.
Больше года назад сайт был закрыт. Некоторые из его материалов будут реанимированы на Инфостарт.
Конкретно в этой статье речь идет о виртуальных таблицах "Остатки" и "Остатки и обороты" регистров накопления в базе данных. Все примеры из публикации Вы можете найти на GitHub.
Предисловие
В предыдущих статьях мы говорили о структуре хранения регистров накопления в базе данных, а также о работе платформы с виртуальной таблицей "Обороты" этих регистров в зависимости от настроек хранения итогов. Все эксперименты проводились на тестовой конфигурации, содержащей два регистра накопления видов "Остатки" и "Обороты" (подробнее см. в предыдущих статьях).
Сегодня в статье рассмотрим действия платформы при работе с виртуальными таблицами "Остатки" и "Остатки и обороты" регистра накопления с видом "Остатки".
Общие сведения
Регистр накопления с видом "Остатки" позволяет разработчику использовать дополнительно к виртуальной таблице "Обороты" регистра еще и таблицу "Остатки".
Данная виртуальная таблица содержит меньше доступных параметров и предназначена для получения остатков по значениям измерений регистра на определенную дату.
Особенностью использования этой виртуальной таблицы является получение остатков на дату с использованием таблицы итоговых остатков (см. описание хранения регистров накопления вида "Остатки" в базе данных).
Поэтому, если использование итогов отключено для регистра, работа с этой таблицей станет невозможной.
Теперь рассмотрим формируемые платформой SQL-запросы к базе данных для получения остатков через названную виртуальную таблицу. Проанализируем изменение запроса для включенных/отключенных текущих итогов.
За кулисами
Выполним в нашей тестовой базе следующий запрос на языке платформы:
Для регистра "ОстаткиНоменклатуры" установим дату рассчитанных итогов на конец февраля (28.02.2013). Первый запрос выполним с включенными текущими итогами регистра накопления.
Первым делом платформа обратится к настройкам регистра накопления. Этот запрос был рассмотрен в предыдущей статье. Перейдем непосредственно к SQL-запросу платформы при использовании виртуальной таблицы "Остатки".
Получим следующий SQL-запрос платформы:
Обратите внимание на параметр "Период", переданный в виртуальную таблицу. Напомню, в нашем случае включены текущие итоги. Поскольку граница рассчитанных итогов регистра установлена на 28.02.2013, платформа не может получить итоги по остаткам на предыдущий месяц, а использовать последние рассчитанные итоги на конец февраля 2013 года и затем корректировать остаток в соответствии с движениями за последующие 3 месяца было бы не оптимально.
Поэтому программа получает текущие остатки (остатки на текущую дату, которые хранятся с периодом 01.11.5999 00:00:00) и корректирует их в соответствии с движениями в период с значения параметра "Период" вирт. таблицы и по дату текущий остатков. Если мы отключим текущие итоги, то тот же запрос на языке платформы будет преобразован в следующий SQL-запрос, имеющий незначительные изменения:
То есть, если параметр "Период" виртуальной таблицы больше периода последних рассчитанных итогов, то тогда платформа получает текущие остатки и корректирует их по движениям в диапазоне с [ПараметрПериодВиртуальнойТаблицы] по [ПериодТекущихИтогов]. В случае, если для регистра отключены текущие итоги, то платформа получает последние рассчитанные итоги и корректирует их по движениям с периода этих итогов по период, установленный в параметрах виртуальной таблицы.
Прежде чем перейти к выводам, отмечу, что во всех вариантах SQL-запроса при наложении условия на период получаемых движений, условие верхней границы диапазона всегда представляет собой:
т.е. условие всегда "МЕНЬШЕ". Если период движения равен дате, установленной в верхнем диапазоне, то эти движения не будут учитываться при получении остатков. Вот она та самая особенность виртуальной таблицы остатков, из-за которой не учитывается последняя секунда в параметрах виртуальной таблицы.
Делаем выводы
Подведем небольшой итог. На следующей схеме представлены действия платформы для получения остатков при различных настройках регистра накопления и параметра периода виртуальной таблицы "Остатки".
При любом случае использования виртуальной таблицы "Остатки", платформа 1С:Предприятие 8 получает данные по итогам остатков и корректирует их по записям движений.
Некоторые действия платформа могла бы выполнять более оптимально. Например, при использовании текущих остатков для регистра выбирать получать ли текущие остатки или последние рассчитанные итоги по периоду виртуальной таблицы. Выбор бы осуществлялся по принципу "что ближе".
В любом случае, механизм итогов для регистров вида "Остатки" позволяет выполнять запросы для получения остатков оптимальнее, нежели использовать только записи таблицы движений.
Все эксперименты проводил на платформе 1С:Предприятие 8.2.17.169.
Далее рассмотрим самую "тяжелую" виртуальную таблицу регистров накопления "ОстаткиИОбороты".
"Тяжелая" таблица
Среди всех виртуальных таблиц, таблица "Остатки и обороты" является самой "тяжелой" для формирования. Разработчики должны это хорошо понимать и использовать ее с осторожностью. Далее Вы увидите почему.
Выполним следующий запрос на языке запросов платформы:
Параметрам запроса присвоим следующие значения:
Такие параметры как "Периодичность" и "МетодДополнения" мы оставили без заполнения. Сначала платформа выполнить запрос для получения настроек регистра накопления. Его мы подробно рассмотрели в статье по виртуальной таблице "Обороты", поэтому сейчас останавливаться на нем не будем.
При таких настройках платформа сформирует следующий SQL-запрос для рассматриваемой виртуальной таблицы:
Прокомментировал основные моменты в запросе. Общая схема работы запроса такая:
- Получаем обороты регистра по таблице движений за установленный период.
- Получаем остатки на значение даты параметра "Начало периода".
- Объединяем предыдущие два результата, при этом поле "НачальныйОстаток" - это остаток по данным таблицы остатков, а "КонечныйОстаток" вычисляется как : "НачальныйОстаток" + "Оборот"
- Полученные данные группируются по выбранным в запросе измерениям и проверяются на наличие хотя бы одного заполненного ресурса (не равного 0).
Отсюда мы можем сделать вывод, что если с помощью этой виртуальной таблицы мы получаем данные за большой период, то запрос может получать достаточно большие порции записей движений. В результате формирование отчетов (или другие механизмы в конфигурации) будет работать очень медленно.
Сам SQL-запрос может изменяться в зависимости от значений параметров виртуальной таблицы. Например, если мы добавим периодичность, то в запрос будет добавлено дополнительное поле "Период", по которому результат будет группироваться. При установке параметра "МетодДополнения" в запрос будут попадать границы периода, если установлено значение "ДвиженияИГраницыПериода" (именно с таким значением параметра мы анализировали SQL-запрос), иначе в результате запроса будут только движения.
Что дальше
В этой и предыдущих статьях мы рассмотрели SQL-запросы платформы при работе с виртуальными таблицами регистров накопления. Представленная информация должна помочь в выборе виртуальных таблиц при разработке, а также в написании оптимальных запросов к базе данных на языке платформы.
В следующих статьях рассмотрим работу агрегатов, а также некоторые особенности работы индексов регистров накопления и многое другое.
Реализована ли в программе возможность сформировать отчет по оборотам номенклатуры в разрезе контрагентов за конкретный период?
Отчет по движению номенклатуры в разрезе контрагентов можно получить с помощью:
-
; ;
- типового бухгалтерского отчета Обороты между субконто .
Пошаговая инструкция настройки отчета Обороты между субконто для вывода оборотов номенклатуры по контрагентам.
Все необходимые настройки выполнены — осталось нажать кнопку Сформировать .
Достоинство нашего отчета Обороты между субконто Контрагенты и Номенклатура в том, что в нем показаны обороты номенклатуры сразу и по поставщикам, и по покупателям, а сама настройка намного проще, чем в Универсальном отчете .
Помогла статья?
Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно
Похожие публикации
-
..У вас нет доступа на просмотр Чтобы получить доступ:Оформите коммерческую.В данной статье мы расскажем о том, как получить информацию.
(3 оценок, среднее: 5,00 из 5)
Публикацию можно обсудить в комментариях ниже.
Обратите внимание!
В комментариях наши эксперты не отвечают на вопросы по программам 1С и законодательству.
Задать вопрос нашим специалистам можно в Личном кабинете
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Вы можете задать еще вопросов
Доступ к форме "Задать вопрос" возможен только при оформлении полной подписки на БухЭксперт8
Нажимая кнопку "Задать вопрос", я соглашаюсь с
регламентом БухЭксперт8.ру >>
Изменения в 2022 году, о которых нужно знать бухгалтеру
6-НДФЛ за 1 квартал 2022 в 1С
Санкции и контрмеры: как работать организации и ее бухгалтеру в новой реальности. Часть 2
Учет малоценных ОС и запасов (ОСН)
Переход на ФСБУ 6/2020 «Основные средства» в 1С по альтернативному алгоритму
Все как всегда супер! Очень полезная информация и много полезных тонкостей, на которые сразу и не обратишь внимание! Респект Марине Аркадьевне!
Самым привычным, удобным и нужным отчетом для бухгалтера является оборотно-сальдовая ведомость (ОСВ). Она формируется каждый рабочий день, особенно в периоды закрытия месяца и отчетности. Как повысить удобство работы с этим инструментом и настроить его под свои личные потребности? Давайте рассмотрим основные настройки ОСВ в программе 1С: Бухгалтерия предприятия 8 редакции 3.0.
Для того, чтобы сформировать ОСВ необходимо перейти на вкладку "Отчеты" и выбрать пункт "Оборотно-сальдовая ведомость".
Затем нажимаем на кнопку "Показать настройки". На первой закладке "Группировка" самой важной настройкой является галочка "По субсчетам".
В том случае, если эта галочка НЕ установлена, ОСВ менее информативна. Например, остатки и обороты по 90 счету будут показаны сводно, без разделения на счета 90.01 (выручка), 90.02 (себестоимость) и 90.03 (НДС).
А вот в том случае, если галочка установлена, ОСВ выглядит уже совсем по-другому.
Если же ОСВ, развернутая по всем субсчетам, кажется вам слишком объемной, то можно сделать индивидуальную настройку по каждому счету, добавив в таблицу на вкладке "Группировка" те счета, по которым нужна подробная информация. Остальные при этом будут выводиться сводно. Также в таблице можно указать, нужна ли детализация выбранного счета по субконто (если нет, поле нужно просто очистить).
На следующей вкладке "Отбор" находится очень нужная настройка, которая отвечает за вывод в отчет забалансовых счетов. Если вы хотите их видеть в ОСВ, но необходимо установить галочку "Выводить забалансовые счета".
После этого остатки и обороты по забалансовым счетам появятся в оборотно-сальдовой ведомости.
В том случае, если ваша организация работает на ОСН и ведет налоговый учет, я настоятельно рекомендую установить галочку "НУ" на следующей вкладке "Показатели". Необходимо это для того, чтобы оперативно контролировать ведение налогового учета в программе и при необходимости своевременно исправлять ошибки.
На вкладке "Развернутое сальдо" вы можете указать перечень счетов, по которым хотели бы видеть детализированное сальдо, а не только суммированный кредитовый или дебетовый остаток. Эта настройка бывает актуальна для счетов расчетов с контрагентами.
А вот в том случае, если вам удобно было бы видеть не только номера счетов, но и их названия в оборотно-сальдовой ведомости, необходимо перейти на вкладку "Дополнительно" и установить галочку "Выводить наименование счета".
ОСВ будет выглядеть следующим образом.
Последняя из вкладок - "Оформление" поможет вам внести небольшое разнообразие в рабочие будни и окрасить ОСВ в приятные вам цвета. Для этого необходимо выбрать вариант оформления.
Вы можете поэкспериментировать с настройками и выбрать наиболее понравившуюся.
Если у вас остались вопросы по формированию и настройке ОСВ, то вы можете задать их в комментариях к статье.
А если вам нужно больше информации о работе в 1С: Бухгалтерии предприятия 8, то вы можете бесплатно получить нашу книгу по ссылке .
Читайте также: