Как разработать отчет «Платежный календарь» в собственной конфигурации 1С

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

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

Шаг 1. Проектирование архитектуры данных (Регистры)

Разберем типичную ошибку начинающих разработчиков: попытку построить календарь на основе обычных бухгалтерских проводок или только документов оплаты. Для корректной работы нам необходимо хранить плановые данные отдельно от фактических. Проанализируем, какие объекты нам понадобятся.

Основным «двигателем» отчета должен стать Регистр накопления (вид — «Остатки»). Назовем его ПланируемыеДенежныеСредства. Рассмотрим его структуру подробнее:

  1. Измерения:
    • Организация (СправочникСсылка.Организации) — для ведения учета в разрезе юридических лиц.
    • БанковскийСчетКасса (СправочникСсылка.БанковскиеСчета, СправочникСсылка.Кассы) — ключевое измерение, по которому будет строиться разрез «где лежат деньги».
    • СтатьяДДС (СправочникСсылка.СтатьиДвиженияДенежныхСредств) — для аналитики приходов и расходов.
    • Контрагент (СправочникСсылка.Контрагенты) — для понимания, от кого ждем или кому платим.
  2. Ресурсы:
    • Сумма (Число 15, 2) — основной финансовый показатель.

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

Шаг 2. Определение источников данных (Документы)

Выясним, какие документы будут поставлять данные в наш регистр. Чтобы календарь не был пустым, в системе должны быть зафиксированы намерения. Рассмотрим основные типы документов:

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

Шаг 3. Логика расчета непрерывного сальдо

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

Конечный остаток (День N) = Начальный остаток (День N) + Плановые приходы (День N) - Плановые расходы (День N)

При этом Начальный остаток (День N) всегда равен Конечному остатку (День N-1). Самая первая точка отчета (начало периода) берется из регистра фактических остатков денежных средств на расчетных счетах и в кассах.

Шаг 4. Настройка системы компоновки данных (СКД)

Теперь перейдем к визуализации. Чтобы отчет выглядел как классическая таблица с датами в колонках, используем возможности СКД. Разберем по шагам настройку схемы:

  1. Создание запроса: Нам нужно объединить данные из регистра фактических остатков (на начало периода) и обороты по регистру планируемых данных. Посмотрим на примерную структуру запроса:

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

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

ВЫБРАТЬ
    ПланируемыеДенежныеСредства.БанковскийСчетКасса,
    0,
    ВЫБОР КОГДА ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ,
    ВЫБОР КОГДА ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ,
    0,
    Период
ИЗ
    РегистрНакопления.ПланируемыеДенежныеСредства КАК ПланируемыеДенежныеСредства
ГДЕ
    Период МЕЖДУ &НачалоПериода И &КонецПериода
  1. Настройка структуры: В закладке «Настройки» СКД создаем тип отчета «Таблица».
    • В Строки добавляем группировку СчетКасса или СтатьяДДС.
    • В Колонки добавляем поле Период.
    • Важно: Для поля Период в настройках группировки укажите «Тип дополнения» — «День». Это позволит отчету выводить колонки даже для тех дат, по которым не было движений.

Шаг 5. Визуализация кассовых разрывов

Главная цель платежного календаря — вовремя заметить кассовый разрыв (ситуацию, когда денег на счету не хватает для оплаты всех заявок). В 1С это реализуется через функционал «Условное оформление».

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

Шаг 6. Интерактивность и расширенные возможности

Если мы хотим сделать не просто отчет, а полноценное рабочее место, следует рассмотреть использование динамических списков или табличного документа на форме обработки. Проанализируем ситуацию: бухгалтер видит кассовый разрыв и хочет перенести платеж на другую дату. В обычном отчете это сделать невозможно, но в форме можно реализовать механизм Drag-and-drop (перетаскивание).

При перетаскивании строки с платежом с одной даты на другую, система должна программно изменять реквизит ДатаПлатежа в соответствующем документе ЗаявкаНаРасходованиеДС и перепроводить его. После этого отчет должен автоматически обновляться.

Рассмотрим пример кода для обработки изменения даты платежа:


Процедура ПеренестиПлатеж(ДокументСсылка, НоваяДата)
    ОбъектДокумента = ДокументСсылка.ПолучитьОбъект();
    ОбъектДокумента.ДатаПлатежа = НоваяДата;
    Попытка
        ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);
    Исключение
        Сообщить("Не удалось перенести платеж: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

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

← На главную