Как в УНФ 3.0 получить остатки задолженности по месяцам с развернутым сальдо через СКД?

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

В конфигурации «1С:Управление нашей фирмой 3.0» (УНФ) задача получения корректных остатков задолженности по месяцам осложняется тем, что система хранит и долги, и авансы в одних и тех же регистрах накопления: РасчетыСПокупателями и РасчетыСПоставщиками. Если просто просуммировать остатки, авансы «схлопнутся» с долгами, и мы получим свернутое сальдо, которое не отражает реальную картину активов и пассивов предприятия. Разберем, как правильно спроектировать запрос и настроить Систему компоновки данных (СКД), чтобы получить корректный отчет «нарезанный» по месяцам.

Понимание структуры данных в УНФ

Прежде чем приступать к написанию запроса, проанализируем, как УНФ определяет тип задолженности. В регистрах расчетов знак ресурса Сумма является определяющим фактором. Рассмотрим логику разделения на Дебиторскую задолженность (нам должны) и Кредиторскую задолженность (мы должны):

  1. Дебиторская задолженность (Активы):
    • Регистр РасчетыСПокупателями: положительный остаток (клиент должен нам за отгруженный товар).
    • Регистр РасчетыСПоставщиками: отрицательный остаток (наш аванс поставщику, за который он еще не отчитался).
  2. Кредиторская задолженность (Пассивы):
    • Регистр РасчетыСПокупателями: отрицательный остаток (аванс от покупателя, под который мы еще не сделали отгрузку).
    • Регистр РасчетыСПоставщиками: положительный остаток (наш долг поставщику за полученные услуги или товары).

Важно помнить, что измерение ТипРасчетов (Долг/Аванс) в УНФ носит вспомогательный характер. Для получения точного финансового результата необходимо ориентироваться именно на знак конечного остатка в разрезе всей аналитики (Контрагент, Договор, Заказ, Документ).

Шаг 1: Проектирование запроса к виртуальным таблицам

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

Рассмотрим пример запроса, который объединяет данные по покупателям и поставщикам:


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

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Расчеты.Период,
    Расчеты.Контрагент,
    Расчеты.Договор,
    Расчеты.Заказ,
    Расчеты.Документ,
    -Расчеты.СуммаНачальныйОстаток,
    -Расчеты.СуммаКонечныйОстаток
ИЗ
    РегистрНакопления.РасчетыСПоставщиками.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Месяц, , ) КАК Расчеты
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.Месяц,
    ВТ.Контрагент,
    ВТ.Договор,
    ВТ.Заказ,
    ВТ.Документ,
    ВЫБОР КОГДА ВТ.СуммаНачОст > 0 ТОГДА ВТ.СуммаНачОст ИНАЧЕ 0 КОНЕЦ КАК ДебетНачОст,
    ВЫБОР КОГДА ВТ.СуммаНачОст < 0 ТОГДА -ВТ.СуммаНачОст ИНАЧЕ 0 КОНЕЦ КАК КредитНачОст,
    ВЫБОР КОГДА ВТ.СуммаКонОст > 0 ТОГДА ВТ.СуммаКонОст ИНАЧЕ 0 КОНЕЦ КАК ДебетКонОст,
    ВЫБОР КОГДА ВТ.СуммаКонОст < 0 ТОГДА -ВТ.СуммаКонОст ИНАЧЕ 0 КОНЕЦ КАК КредитКонОст
ИЗ
    ВТ_Данные КАК ВТ

Обратите внимание: при работе с поставщиками мы инвертируем знак суммы (умножаем на -1). Это делается для того, чтобы привести данные к единой логике "Дебет - Кредит", где положительное число всегда означает актив (нам должны), а отрицательное — пассив (мы должны).

Шаг 2: Настройка ролей полей в СКД

Это самый ответственный этап. Чтобы отчет выводил правильные итоги "одной строкой", не схлопывая развернутое сальдо, мы должны объяснить СКД, как работать с остатками. Если не настроить роли, СКД просто просуммирует все значения в группировке, и развернутость пропадет.

Перейдем на вкладку Наборы данных и для полей остатков настроим следующие свойства в колонке Роль:

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

Шаг 3: Работа с ресурсами и группировками

Чтобы получить итог одной строкой, проанализируем вкладку Ресурсы. Добавим все четыре поля (Дебет/Кредит Нач/Кон) и назначим им функцию Сумма(). Благодаря правильно настроенным ролям на предыдущем шаге, СКД сначала вычислит остатки на самом детальном уровне (где знаки определены однозначно), а затем просуммирует их для итоговой строки.

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

  1. В поле Месяц в роли укажем, что это период с типом Дополнительный.
  2. В настройках группировки на вкладке "Дополнительные настройки" установим Тип дополнения — Месяц.
  3. Укажем Начало периода и Конец периода из параметров отчета.

Шаг 4: Исключение ошибок фильтрации по "Типу расчетов"

Разберем типичную ошибку начинающих разработчиков: попытку наложить фильтр ГДЕ ТипРасчетов = ЗНАЧЕНИЕ(Перечисление.ТипыРасчетов.Долг). В УНФ при проведении документов зачета аванса или корректировок долга суммы могут временно "зависать" на типе Аванс, хотя по факту это уже долг, или наоборот. Проанализировав ситуацию, мы приходим к выводу, что единственно верный способ — это анализ итогового знака суммы по всей совокупности аналитик. Именно поэтому в нашем запросе мы не используем фильтрацию по измерениям регистра, а полагаемся на конструкцию ВЫБОР КОГДА Сумма > 0.

Итоги и рекомендации

Мы рассмотрели методику создания сложного отчета по дебиторской и кредиторской задолженности в УНФ 3.0. Подытожим ключевые правила успеха:

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

← На главную