Как получить задолженность контрагентов по срокам оплаты в 1С:Бухгалтерия 3.0

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

При разработке отчетов по взаиморасчетам в конфигурации «1С:Бухгалтерия предприятием 8» (редакция 3.0) разработчики часто сталкиваются с тем, что в регистре бухгалтерии Хозрасчетный отсутствует реквизит, указывающий на плановую дату оплаты. В отличие от версии 7.7, где дата оплаты могла храниться непосредственно в документах или их реквизитах, в современной версии 1С архитектура хранения этих данных сложнее и требует обращения к нескольким источникам данных одновременно.

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

Где хранятся данные о сроках оплаты

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

Этот регистр является связующим звеном. Рассмотрим его ключевые поля:

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

Таким образом, чтобы получить данные о просрочке, нам необходимо соединить остатки по счетам расчетов (62, 60) с этим регистром по полю Документ.

Особенности построения запроса к остаткам

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

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


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

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

Логика определения даты оплаты в системе

Выясним, как система заполняет регистр СрокиОплатыДокументов. Если вы обнаружили, что в вашем запросе поле срока оплаты пустое, значит, запись в регистре не была создана. Система 1С:Бухгалтерия 3.0 использует следующую иерархию для вычисления даты:

  1. Настройки в договоре: В карточке договора в разделе «Расчеты» можно указать срок оплаты в днях.
  2. Общие параметры учета: Если в договоре срок не задан, используются значения из раздела «Администрирование» — «Параметры учета» — «Настройки оплаты».
  3. Ручная корректировка: В самом документе реализации через гиперссылку «Цены и валюта» пользователь может вручную установить дату оплаты, отличную от расчетной.

Программное управление сроками оплаты

Рассмотрим ситуацию, когда нам необходимо программно изменить срок оплаты или запретить системе его перезаписывать. В типовых формах документов за это отвечает специальный флаг (реквизит формы) АвторасчетСрокаОплаты.

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


// В обработчике перед записью или в процедуре заполнения на сервере
Объект.АвторасчетСрокаОплаты = Ложь; 
// Теперь система не будет автоматически менять дату в регистре СрокиОплатыДокументов
// на основании настроек договора при изменении даты документа.

Нужно учитывать, что при установке АвторасчетСрокаОплаты = Ложь ответственность за актуальность данных в регистре ложится на программный код или пользователя. Если вы меняете дату оплаты программно, убедитесь, что вы также обновляете запись в регистре сведений СрокиОплатыДокументов, так как именно оттуда отчеты (включая стандартный «Задолженность покупателей по срокам долга») черпают информацию.

Почему стандартный отчет может отличаться от вашего запроса?

Проанализируем работу штатного отчета 1С. Многие разработчики замечают, что простой запрос к остаткам не всегда совпадает с цифрами в типовом отчете. Это происходит по следующим причинам:

  1. Зачет авансов: Стандартный отчет выполняет «виртуальный» зачет авансов. Даже если в базе аванс не распределен по документам отгрузки, отчет может уменьшать сумму старой задолженности на сумму имеющихся авансов по методу FIFO.
  2. Интервалы: Отчет классифицирует долги по корзинам (0-30 дней, 31-60 и т.д.). Для этого в запросе используется сложная конструкция ВЫБОР КОГДА на основе разности дат.
  3. Валютный учет: При наличии валютных расчетов отчет выполняет пересчет в рубли по актуальному курсу, что также требует внимательности при построении связей в запросе.

Для создания максимально точного решения, рекомендуется использовать типовой механизм УчетСроковОплаты. Если вам нужно просто вывести список документов с их сроками, предложенного выше метода с ЛЕВОЕ СОЕДИНЕНИЕ будет вполне достаточно для большинства задач управленческого и оперативного учета.

Подведем итог: Чтобы получить задолженность по срокам, не ищите реквизит в плане счетов или регистрах бухгалтерии. Обращайтесь к регистру сведений СрокиОплатыДокументов, соединяя его с остатками по документам-основаниям. Для тонкой настройки используйте флаг АвторасчетСрокаОплаты в коде форм.

← На главную