Создание отчета «Платежный календарь» — это одна из самых серьезных задач при разработке финансового блока в любой конфигурации на платформе 1С. Важно понимать, что этот инструмент является не просто печатной формой, а сложным аналитическим механизмом, который должен предсказывать состояние ликвидности предприятия на будущие периоды. В рамках данной статьи мы разберем, как спроектировать архитектуру данных и реализовать визуализацию этого отчета с нуля.
Разберем типичную ошибку начинающих разработчиков: попытку построить календарь на основе обычных бухгалтерских проводок или только документов оплаты. Для корректной работы нам необходимо хранить плановые данные отдельно от фактических. Проанализируем, какие объекты нам понадобятся.
Основным «двигателем» отчета должен стать Регистр накопления (вид — «Остатки»). Назовем его ПланируемыеДенежныеСредства. Рассмотрим его структуру подробнее:
Организация (СправочникСсылка.Организации) — для ведения учета в разрезе юридических лиц.БанковскийСчетКасса (СправочникСсылка.БанковскиеСчета, СправочникСсылка.Кассы) — ключевое измерение, по которому будет строиться разрез «где лежат деньги».СтатьяДДС (СправочникСсылка.СтатьиДвиженияДенежныхСредств) — для аналитики приходов и расходов.Контрагент (СправочникСсылка.Контрагенты) — для понимания, от кого ждем или кому платим.Сумма (Число 15, 2) — основной финансовый показатель.Важно помнить: в отличие от регистров фактических остатков, записи в этот регистр должны делаться с датой планируемого события, а не с текущей датой документа. Это позволит нам строить прогноз на любую дату в будущем.
Выясним, какие документы будут поставлять данные в наш регистр. Чтобы календарь не был пустым, в системе должны быть зафиксированы намерения. Рассмотрим основные типы документов:
ДатаПлатежа и статус (например, «Согласовано»). Только согласованные заявки должны попадать в прогноз расхода.ЗаказаКлиента. Здесь также критически важна ДатаПоступления.Проанализируем механизм закрытия этих плановых записей. В момент проведения фактического платежного поручения или приходного кассового ордера, система должна делать «сторнирующую» запись (расход) по регистру планируемых средств и одновременно приход по регистру фактических остатков. Это обеспечит актуальность данных: как только план стал фактом, он исчезает из прогноза.
Рассмотрим математическую модель, по которой строится отчет. Платежный календарь работает по принципу нарастающего итога. Вычислим значения для каждого дня выбранного периода по следующей формуле:
Конечный остаток (День N) = Начальный остаток (День N) + Плановые приходы (День N) - Плановые расходы (День N)
При этом Начальный остаток (День N) всегда равен Конечному остатку (День N-1). Самая первая точка отчета (начало периода) берется из регистра фактических остатков денежных средств на расчетных счетах и в кассах.
Теперь перейдем к визуализации. Чтобы отчет выглядел как классическая таблица с датами в колонках, используем возможности СКД. Разберем по шагам настройку схемы:
ВЫБРАТЬ
ДенежныеСредстваОстатки.БанковскийСчетКасса КАК СчетКасса,
ДенежныеСредстваОстатки.СуммаОстаток КАК СуммаНачальныйОстаток,
0 КАК Приход,
0 КАК Расход,
ДенежныеСредстваОстатки.СуммаОстаток КАК КонечныйОстаток,
&НачалоПериода КАК Период
ИЗ
РегистрНакопления.ДенежныеСредства.Остатки(&НачалоПериода, ) КАК ДенежныеСредстваОстатки
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ПланируемыеДенежныеСредства.БанковскийСчетКасса,
0,
ВЫБОР КОГДА ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ,
ВЫБОР КОГДА ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход) ТОГДА Сумма ИНАЧЕ 0 КОНЕЦ,
0,
Период
ИЗ
РегистрНакопления.ПланируемыеДенежныеСредства КАК ПланируемыеДенежныеСредства
ГДЕ
Период МЕЖДУ &НачалоПериода И &КонецПериода
СчетКасса или СтатьяДДС.Период.Период в настройках группировки укажите «Тип дополнения» — «День». Это позволит отчету выводить колонки даже для тех дат, по которым не было движений.Главная цель платежного календаря — вовремя заметить кассовый разрыв (ситуацию, когда денег на счету не хватает для оплаты всех заявок). В 1С это реализуется через функционал «Условное оформление».
Разберем, как это настроить: в СКД на закладке «Условное оформление» добавим новое правило. Установим цвет текста или фона — Красный. В условии укажем: КонечныйОстаток < 0. Теперь любая дата, в которой прогнозируется отрицательный остаток, будет ярко подсвечена, сигнализируя финансисту о необходимости переноса платежей или привлечения кредитных средств.
Если мы хотим сделать не просто отчет, а полноценное рабочее место, следует рассмотреть использование динамических списков или табличного документа на форме обработки. Проанализируем ситуацию: бухгалтер видит кассовый разрыв и хочет перенести платеж на другую дату. В обычном отчете это сделать невозможно, но в форме можно реализовать механизм Drag-and-drop (перетаскивание).
При перетаскивании строки с платежом с одной даты на другую, система должна программно изменять реквизит ДатаПлатежа в соответствующем документе ЗаявкаНаРасходованиеДС и перепроводить его. После этого отчет должен автоматически обновляться.
Рассмотрим пример кода для обработки изменения даты платежа:
Процедура ПеренестиПлатеж(ДокументСсылка, НоваяДата)
ОбъектДокумента = ДокументСсылка.ПолучитьОбъект();
ОбъектДокумента.ДатаПлатежа = НоваяДата;
Попытка
ОбъектДокумента.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Сообщить("Не удалось перенести платеж: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Таким образом, мы превращаем статичную картинку в мощный инструмент оперативного управления финансами. Использование СхемыКомпоновкиДанных в сочетании с продуманной структурой РегистровНакопления позволяет создать надежный и гибкий платежный календарь, адаптированный под любые нужды бизнеса.