Как составить запрос к регистру бухгалтерии для анализа задолженности покупателей по срокам долга в 1С?

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

Разработка отчетов по анализу дебиторской задолженности и срокам ее возникновения — одна из классических и в то же время непростых задач в среде 1С. Начинающие разработчики часто сталкиваются с трудностями при работе с регистром бухгалтерии, особенно когда дело доходит до сопоставления результатов запроса с Оборотно-сальдовой ведомостью (ОСВ) по счету 62. В рамках этой статьи мы подробно разберем, как устроен механизм учета задолженности, почему возникают расхождения с ОСВ, как правильно спроектировать запрос по методу ФИФО и как доработать механизмы под свои требования.

Ключевые причины расхождений между отчетами по задолженности и ОСВ по счету 62

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

  1. Влияние счета 63 «Резервы по сомнительным долгам»: По умолчанию многие алгоритмы 1С при расчете чистой дебиторской задолженности уменьшают сумму долга на величину созданных резервов по счету 63. В результате итоговая сумма долга в отчете получается меньше, чем сальдо дебета счета 62. Чтобы цифры сошлись с привычной ОСВ, этот нюанс нужно обязательно учитывать в условиях запроса или настройках отчета.
  2. Развернутое и свернутое сальдо: В ОСВ пользователи часто смотрят на общее (свернутое) сальдо по контрагенту. Однако взаиморасчеты ведутся в разрезе договоров и документов расчетов. Если у контрагента по одному договору висит предоплата (кредит 62.02), а по другому — долг за отгрузку (дебет 62.01), то свернутое сальдо покажет разницу. Профессиональный аналитический отчет всегда должен работать по развернутому сальдо, детально анализируя остатки по субсчетам, договорам и документам.
  3. Неактуальность проведения документов: Корректный зачет авансов (счета 62.01 и 62.02) происходит непосредственно в момент проведения документов («Поступление на расчетный счет», «Реализация товаров и услуг»). Если документы были введены задним числом и последовательность проведения нарушена, то зачет авансов не отработает должным образом. ОСВ может «схлопнуть» эти суммы на уровне субконто, но детальный отчет по документам возникновения покажет некорректные «хвосты».

Иерархия определения даты платежа (Срок оплаты)

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

  1. Приоритет документа расчетов: В самом документе РеализацияТоваровУслуг (или ином документе отгрузки) по гиперссылке «Расчеты» пользователь может вручную указать конкретную дату оплаты. Это значение имеет наивысший приоритет.
  2. Приоритет договора: Если в документе дата оплаты не заполнена, система обращается к свойствам договора контрагента. В карточке договора может быть установлен флаг «Установлен срок оплаты по договору» и указано количество дней отсрочки.
  3. Общие параметры учета (константа): Если ни в документе, ни в договоре правила оплаты не заданы, система берет дефолтное значение из настроек параметров учета информационной базы (например, «Срок оплаты покупателей», который по умолчанию часто равен 10 дням).

При написании запроса нам потребуется реализовать эту логику с помощью конструкции ВЫБОР КОГДА, последовательно проверяя заполненность полей.

Проектирование запроса: Алгоритм распределения долга по методу ФИФО

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

Разберем по шагам, как построить такой алгоритм в запросе:

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

Шаг 2. Получение оборотов (документов возникновения долга). Мы выбираем все документы, которые увеличивали дебетовый оборот по счету 62.01 (наша первичная отгрузка) за интересующий нас период.

Шаг 3. Соединение таблиц и расчет нарастающего итога. Чтобы понять, какие документы остались неоплаченными, мы соединяем таблицу оборотов саму с собой по условию: ТаблицаСвязи.Период >= ТаблицаОригинал.Период. Это позволяет нам для каждой накладной рассчитать сумму всех последующих отгрузок.

Посмотрим на пример построения такого запроса:


ВЫБРАТЬ
    ВзаиморасчетыОстатки.Организация КАК Организация,
    ВзаиморасчетыОстатки.Субконто1 КАК Контрагент,
    ВзаиморасчетыОстатки.Субконто2 КАК Договор,
    ВзаиморасчетыОстатки.Субконто3 КАК ДокументРасчетов,
    ВзаиморасчетыОстатки.СуммаОстатокДт КАК ОстатокДолга
ПОМЕСТИТЬ ВТ_Остатки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Остатки(&ПериодГраница, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели), , ) КАК ВзаиморасчетыОстатки
ГДЕ
    ВзаиморасчетыОстатки.СуммаОстатокДт > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Обороты.Организация КАК Организация,
    Обороты.Субконто1 КАК Контрагент,
    Обороты.Субконто2 КАК Договор,
    Обороты.Субконто3 КАК ДокументРасчетов,
    Обороты.Период КАК Период,
    Обороты.СуммаОборотДт КАК СуммаОтгрузки
ПОМЕСТИТЬ ВТ_Отгрузки
ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(&НачалоПериода, &ПериодГраница, Период, Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.Покупатели), , , , ) КАК Обороты
ГДЕ
    Обороты.СуммаОборотДт > 0
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Т1.Организация КАК Организация,
    Т1.Контрагент КАК Контрагент,
    Т1.Договор КАК Договор,
    Т1.ДокументРасчетов КАК ДокументРасчетов,
    Т1.Период КАК Период,
    Т1.СуммаОтгрузки КАК СуммаОтгрузки,
    СУММА(ЕСТЬNULL(Т2.СуммаОтгрузки, 0)) КАК НарастающийИтог
ПОМЕСТИТЬ ВТ_НарастающиеИтоги
ИЗ
    ВТ_Отгрузки КАК Т1
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Отгрузки КАК Т2
        ПО Т1.Организация = Т2.Организация
        И Т1.Контрагент = Т2.Контрагент
        И Т1.Договор = Т2.Договор
        И Т1.Период <= Т2.Период
ГРУППИРОВАТЬ ПО
    Т1.Организация,
    Т1.Контрагент,
    Т1.Договор,
    Т1.ДокументРасчетов,
    Т1.Период,
    Т1.СуммаОтгрузки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ_Остатки.Организация КАК Организация,
    ВТ_Остатки.Контрагент КАК Контрагент,
    ВТ_Остатки.Договор КАК Договор,
    ВТ_НарастающиеИтоги.ДокументРасчетов КАК ДокументВозникновения,
    ВТ_НарастающиеИтоги.Период КАК ДатаВозникновения,
    ВЫБОР
        КОГДА ВТ_Остатки.ОстатокДолга >= ВТ_НарастающиеИтоги.НарастающийИтог
            ТОГДА ВТ_НарастающиеИтоги.СуммаОтгрузки
        ИНАЧЕ ВЫБОР
            КОГДА ВТ_Остатки.ОстатокДолга > ВТ_НарастающиеИтоги.НарастающийИтог - ВТ_НарастающиеИтоги.СуммаОтгрузки
                ТОГДА ВТ_Остатки.ОстатокДолга - (ВТ_НарастающиеИтоги.НарастающийИтог - ВТ_НарастающиеИтоги.СуммаОтгрузки)
            ИНАЧЕ 0
        КОНЕЦ
    КОНЕЦ КАК СуммаОстаткаПоДокументу
ИЗ
    ВТ_Остатки КАК ВТ_Остатки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_НарастающиеИтоги КАК ВТ_НарастающиеИтоги
        ПО ВТ_Остатки.Организация = ВТ_НарастающиеИтоги.Организация
        И ВТ_Остатки.Контрагент = ВТ_НарастающиеИтоги.Контрагент
        И ВТ_Остатки.Договор = ВТ_НарастающиеИтоги.Договор
ГДЕ
    (ВТ_Остатки.ОстатокДолга >= ВТ_НарастающиеИтоги.НарастающийИтог - ВТ_НарастающиеИтоги.СуммаОтгрузки)

Разбор работы алгоритма ФИФО в запросе

Рассмотрим подробнее, как работает приведенный выше запрос:

Практический совет: Использование типового отчета как готового шаблона

Если перед вами стоит задача быстро разработать отчет, содержащий дополнительные реквизиты, не торопитесь писать всю логику с нуля. Наиболее эффективный подход — это использование типового отчета «Задолженность покупателей по срокам долга» в качестве базы. Рассмотрим по шагам, как это сделать:

  1. Откройте конфигуратор вашей информационной базы.
  2. Найдите в ветке «Отчеты» типовой отчет ЗадолженностьПокупателейПоСрокамДолга.
  3. Сохраните его как внешний отчет (меню «Файл» — «Сохранить как...»).
  4. Откройте сохраненный внешний отчет. Теперь вы можете свободно редактировать его схему компоновки данных (СКД), добавлять нужные вам поля, менять группировки или накладывать свои условия на выборку данных из регистра бухгалтерии.

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

← На главную