Как получить данные по бухгалтерскому счету с остатками после каждой операции и корреспондирующими счетами

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет
← На главную

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

Выбор базовой виртуальной таблицы

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

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

Рассмотрим пример настройки параметров такой таблицы в тексте запроса:


РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Запись, , Счет = &ВыбранныйСчет, , ) КАК ХозрасчетныйОстаткиИОбороты

Проблема получения корреспондирующего счета

Выясним причину, по которой таблица ОстаткиИОбороты не подходит для полноценного анализа корреспонденций в чистом виде. Данная таблица является «односторонней»: она суммирует данные по выбранному счету, но не хранит в той же строке информацию о том, какой счет был «вторым» в проводке. Это связано с архитектурой регистра бухгалтерии, где одна запись может содержать СчетДт и СчетКт, но виртуальная таблица остатков разворачивает их в отдельные потоки данных.

Чтобы получить «второй» счет (корреспонденцию), нам необходимо выполнить соединение данных. Рассмотрим два основных способа решения этой задачи:

  1. Соединение с физической таблицей регистра. Это наиболее надежный метод. Мы берем за основу таблицу ОстаткиИОбороты (с периодичностью Запись) и соединяем ее с физической таблицей РегистрБухгалтерии.Хозрасчетный по полям Регистратор и НомерСтроки.
  2. Использование таблицы ДвиженияССубконто. Эта таблица также содержит информацию о проводках в развернутом виде и позволяет получить счета дебета и кредита одновременно.

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


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

Особенности работы в Системе компоновки данных (СКД)

Если ваша задача — создать отчет, а не просто получить таблицу в коде, то возможности СКД позволяют значительно упростить расчет остатков. В СКД можно не использовать сложную периодичность Запись в самом запросе, а доверить расчет накопленного итога механизму ресурсов.

Разберем шаги настройки отчета в СКД:

  1. В наборе данных выберите детальные записи из таблицы ДвиженияССубконто.
  2. На закладке Наборы данных для поля остатка настройте роль Остаток. Укажите имя поля счета, тип остатка (начальный/конечный) и соответствующие поля периода.
  3. В настройках ресурсов используйте стандартное суммирование, но при выводе в отчет СКД сама вычислит остаток на каждой строке, основываясь на хронологии Период + Регистратор + НомерСтроки.

Важный момент: Для корректного расчета остатков в СКД крайне важно правильно указать роли полей, иначе при наличии нескольких документов в одну секунду система может «схлопнуть» остатки или вывести их в неверной последовательности.

Учет активно-пассивных счетов и субконто

Посмотрим на ситуацию со стороны аналитики. Если мы анализируем счета расчетов (например, 60, 62 или 76), простой остаток по счету в целом может быть неинформативен или даже ошибочен (так называемое «свернутое сальдо»).

Чтобы получить корректный остаток «после операции» по конкретному контрагенту или договору, необходимо:

Оптимизация производительности

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

1. Всегда ограничивайте период. Запрос к остаткам и оборотам без указания дат может привести к сканированию всей истории базы данных.

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

3. Фильтр в параметрах, а не в ГДЕ. Условие по счету или субконто нужно передавать именно в параметры виртуальной таблицы (&Счет), а не писать его в секции ГДЕ после выбора данных. Это позволяет серверу БД отсечь лишние записи на самом раннем этапе формирования выборки.

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

← На главную