Сокращение кассовых разрывов на 73%: кейс БДДС в 1С:ERP

Коротко: Производственная компания с оборотом 1,2 млрд руб./год сократила кассовые разрывы на 73% за 4 месяца, автоматизировав бюджет движения денежных средств (БДДС) и cashflow-прогнозирование в задачи по 1С:ERP. Ключевые инструменты: платёжный календарь, автоматические заявки на оплату, интеграция с договорами и производственными заказами. ROI проекта — 340% за первый год.
Почему производственные компании теряют деньги на кассовых разрывах?
Кассовый разрыв — это временной дефицит денежных средств, когда обязательные платежи (зарплата, налоги, поставщики) наступают раньше, чем приходят деньги от покупателей. Для производственных предприятий это особенно болезненная проблема: длинный производственный цикл, авансирование сырья, отсрочки покупателям — всё это создаёт хроническое несоответствие между входящими и исходящими потоками.
По данным опросов, которые мы проводили среди клиентов платформы, 67% производственных компаний сталкиваются с кассовыми разрывами не реже одного раза в квартал, а 23% — ежемесячно. При этом средняя стоимость «закрытия» одного разрыва через овердрафт или краткосрочный кредит составляет от 180 000 до 650 000 рублей в зависимости от суммы дефицита.
Главная причина — не отсутствие денег, а отсутствие видимости: финансовый директор не знает за 2–3 недели, какой будет остаток на счёте в конкретную дату. Планирование ведётся в Excel, данные из 1С выгружаются вручную раз в неделю, а к моменту сводки цифры уже устарели.
Портрет компании: с чем мы начали работу?
Наш клиент — производитель промышленного оборудования из Екатеринбурга. Для сохранения конфиденциальности назовём компанию «МашТех». Основные параметры на старте проекта:
- Оборот: 1,2 млрд руб./год
- Сотрудников: 340 человек
- Производственный цикл: 45–90 дней
- Среднее число активных договоров: 180–220
- Кассовых разрывов за предыдущие 12 месяцев: 11 случаев
- Суммарные потери на овердрафте и штрафах: 4,7 млн руб./год
- Учётная система: 1С:ERP 2.5 (установлена 2 года назад, БДДС не настроен)
Ситуация типичная: система куплена, внедрена базово, но блок управления денежными средствами не использовался. Планирование велось в трёх несвязанных таблицах Excel, которые финансовый отдел обновлял вручную каждый понедельник.
Как выглядела архитектура решения в 1С:ERP?
Прежде чем переходить к коду и настройкам, важно понять логику архитектуры. Мы построили трёхуровневую систему управления денежными потоками:
Уровень 1: Стратегический — БДДС на горизонт 12 месяцев
Годовой бюджет движения денежных средств с разбивкой по месяцам, статьям ДДС и ЦФО (центрам финансовой ответственности). Формируется раз в год, корректируется ежеквартально. В 1С:ERP это реализуется через подсистему Бюджетирование с видом бюджета «БДДС».
Уровень 2: Тактический — скользящий прогноз на 13 недель
Еженедельно обновляемый прогноз cashflow с горизонтом 13 недель. Источники данных: заявки на оплату, договоры с графиками платежей, производственные заказы, данные о дебиторской задолженности. Это «живой» документ, который финансовый директор видит каждое утро.
Уровень 3: Оперативный — платёжный календарь на 30 дней
Детализированный платёжный календарь с разбивкой по дням, банковским счетам и кассам. Именно здесь видны конкретные даты платежей и поступлений, и именно здесь система сигнализирует о потенциальных разрывах.
Пошаговая настройка БДДС в 1С:ERP: технические детали
Рассмотрим ключевые технические решения, которые мы реализовали. Начнём с настройки автоматического формирования плановых поступлений на основе договоров с покупателями.
Шаг 1: Настройка статей движения денежных средств
В 1С:ERP статьи ДДС настраиваются в справочнике СтатьиДвиженияДенежныхСредств. Для МашТех мы создали иерархическую структуру из 47 статей, сгруппированных в три раздела: операционная, инвестиционная и финансовая деятельность. Критически важно было правильно настроить правила автоматического определения статьи при проведении документов.
Шаг 2: Автоматическое формирование плановых поступлений
Ключевая доработка — обработка, которая ежедневно анализирует договоры с покупателями, открытые заказы и историческую статистику оплат, формируя плановые поступления в платёжный календарь.
// Процедура автоматического формирования плановых поступлений
// на основе договоров и заказов покупателей
Процедура СформироватьПлановыеПоступления(ДатаНачала, ДатаКонца) Экспорт
// Запрос для получения договоров с графиками платежей
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыПокупателей.Ссылка КАК Договор,
| ДоговорыПокупателей.Контрагент КАК Контрагент,
| ДоговорыПокупателей.СуммаДокумента КАК СуммаДоговора,
| ГрафикиПлатежей.ДатаПлатежа КАК ДатаПлатежа,
| ГрафикиПлатежей.СуммаПлатежа КАК СуммаПлатежа,
| ГрафикиПлатежей.ПроцентОплаты КАК ПроцентОплаты
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыПокупателей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиОплатыПокупателей КАК ГрафикиПлатежей
| ПО ДоговорыПокупателей.Ссылка = ГрафикиПлатежей.Договор
|ГДЕ
| ГрафикиПлатежей.ДатаПлатежа МЕЖДУ &ДатаНачала И &ДатаКонца
| И ДоговорыПокупателей.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)
| И НЕ ДоговорыПокупателей.ПометкаУдаления
|УПОРЯДОЧИТЬ ПО
| ГрафикиПлатежей.ДатаПлатежа";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
// Обрабатываем каждую строку графика
Для Каждого СтрокаВыборки Из Выборка Цикл
// Проверяем, не создан ли уже плановый документ для этой даты и договора
Если НЕ ПлановоеПоступлениеСуществует(СтрокаВыборки.Договор, СтрокаВыборки.ДатаПлатежа) Тогда
// Создаём новый плановый платёж
ПлановыйПлатёж = Документы.ПлановоеПоступлениеДенежныхСредств.СоздатьДокумент();
ПлановыйПлатёж.Дата = ТекущаяДата();
ПлановыйПлатёж.ДатаПоступления = СтрокаВыборки.ДатаПлатежа;
ПлановыйПлатёж.Контрагент = СтрокаВыборки.Контрагент;
ПлановыйПлатёж.Договор = СтрокаВыборки.Договор;
ПлановыйПлатёж.Сумма = СтрокаВыборки.СуммаПлатежа;
ПлановыйПлатёж.СтатьяДДС = ПолучитьСтатьюДДС("ПоступленияОтПокупателей");
ПлановыйПлатёж.ВидПоступления = Перечисления.ВидыПоступленийДенежныхСредств.ОтПокупателя;
// Рассчитываем вероятность поступления на основе истории
ПлановыйПлатёж.Вероятность = РассчитатьВероятностьОплаты(СтрокаВыборки.Контрагент);
ПлановыйПлатёж.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
// Функция расчёта вероятности оплаты на основе исторических данных
Функция РассчитатьВероятностьОплаты(Контрагент) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(ИсторияОплат.Регистратор) КАК ВсегоПлатежей,
| СУММА(ВЫБОР
| КОГДА ИсторияОплат.ФактическаяДата <= ИсторияОплат.ПлановаяДата
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК СвоевременныхПлатежей
|ИЗ
| РегистрСведений.ИсторияОплатКонтрагентов КАК ИсторияОплат
|ГДЕ
| ИсторияОплат.Контрагент = &Контрагент
| И ИсторияОплат.Период >= ДОБАВИТЬКДАТЕ(&ТекущаяДата, МЕСЯЦ, -12)";
Запрос.УстановитьПараметр("Контрагент", Контрагент);
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
Результат = Запрос.Выполнить().Выбрать();
Если Результат.Следующий() И Результат.ВсегоПлатежей > 0 Тогда
Возврат Результат.СвоевременныхПлатежей / Результат.ВсегоПлатежей * 100;
Иначе
// Если истории нет — базовая вероятность 75%
Возврат 75;
КонецЕсли;
КонецФункции
Шаг 3: Алгоритм выявления кассовых разрывов
Центральный алгоритм проекта — автоматическое выявление дат с прогнозируемым дефицитом денежных средств и формирование уведомлений для финансового директора.
// Процедура анализа платёжного календаря и выявления кассовых разрывов
Процедура ПроанализироватьКассовыеРазрывы(ГоризонтДней = 30) Экспорт
ДатаНачала = НачалоДня(ТекущаяДатаСеанса());
ДатаКонца = ДатаНачала + ГоризонтДней * 86400;
// Получаем текущие остатки по счетам
ЗапросОстатки = Новый Запрос;
ЗапросОстатки.Текст =
"ВЫБРАТЬ
| ОстаткиДС.СчётУчёта КАК СчётУчёта,
| ОстаткиДС.СуммаОстаток КАК ТекущийОстаток
|ИЗ
| РегистрБухгалтерии.Хозрасчетный.Остатки(
| &ДатаНачала,
| Счёт В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.ДенежныеСредства)),
| ,
| ) КАК ОстаткиДС";
ЗапросОстатки.УстановитьПараметр("ДатаНачала", ДатаНачала);
ТаблицаОстатков = ЗапросОстатки.Выполнить().Выгрузить();
ОбщийОстаток = ТаблицаОстатков.Итог("ТекущийОстаток");
// Получаем плановые движения по дням
ЗапросДвижения = Новый Запрос;
ЗапросДвижения.Текст =
"ВЫБРАТЬ
| НАЧАЛОПЕРИОДА(ПлановыеДвижения.ДатаОперации, ДЕНЬ) КАК Дата,
| СУММА(ВЫБОР
| КОГДА ПлановыеДвижения.ВидДвижения = ЗНАЧЕНИЕ(Перечисление.ВидыДвиженийДенежныхСредств.Поступление)
| ТОГДА ПлановыеДвижения.Сумма * ПлановыеДвижения.Вероятность / 100
| ИНАЧЕ 0
| КОНЕЦ) КАК ПлановыеПоступления,
| СУММА(ВЫБОР
| КОГДА ПлановыеДвижения.ВидДвижения = ЗНАЧЕНИЕ(Перечисление.ВидыДвиженийДенежныхСредств.Выбытие)
| ТОГДА ПлановыеДвижения.Сумма
| ИНАЧЕ 0
| КОНЕЦ) КАК ПлановыеВыплаты
|ИЗ
| РегистрСведений.ПлановыеДвиженияДенежныхСредств КАК ПлановыеДвижения
|ГДЕ
| ПлановыеДвижения.ДатаОперации МЕЖДУ &ДатаНачала И &ДатаКонца
|СГРУППИРОВАТЬ ПО
| НАЧАЛОПЕРИОДА(ПлановыеДвижения.ДатаОперации, ДЕНЬ)
|УПОРЯДОЧИТЬ ПО
| Дата";
ЗапросДвижения.УстановитьПараметр("ДатаНачала", ДатаНачала);
ЗапросДвижения.УстановитьПараметр("ДатаКонца", ДатаКонца);
ВыборкаДвижений = ЗапросДвижения.Выполнить().Выбрать();
// Рассчитываем накопленный остаток по каждому дню
НакопленныйОстаток = ОбщийОстаток;
СписокРазрывов = Новый СписокЗначений;
Для Каждого СтрокаДня Из ВыборкаДвижений Цикл
НакопленныйОстаток = НакопленныйОстаток
+ СтрокаДня.ПлановыеПоступления
- СтрокаДня.ПлановыеВыплаты;
// Если остаток уходит в минус — фиксируем разрыв
Если НакопленныйОстаток < 0 Тогда
СписокРазрывов.Добавить(
СтрокаДня.Дата,
Формат(НакопленныйОстаток, "ЧДЦ=2; ЧН=0; ЧГ=3") + " руб."
);
КонецЕсли;
КонецЦикла;
// Если найдены разрывы — отправляем уведомление
Если СписокРазрывов.Количество() > 0 Тогда
ОтправитьУведомлениеОРазрывах(СписокРазрывов);
КонецЕсли;
КонецПроцедуры
Как работает платёжный календарь после автоматизации?
Платёжный календарь — это «приборная панель» финансового директора. После настройки в 1С:ERP он стал обновляться автоматически из нескольких источников:
- Заявки на оплату от подразделений — попадают в календарь сразу после утверждения руководителем ЦФО
- Договоры с поставщиками — графики платежей из условий договоров автоматически создают плановые расходы
- Заказы покупателей — на основе условий оплаты и производственного плана система рассчитывает ожидаемые поступления
- Налоговый календарь — фиксированные даты НДС, налога на прибыль, страховых взносов
- Зарплатная ведомость — плановые даты выплат из задачи по 1С:ЗУП через интеграцию
Ключевое отличие от Excel: система не просто показывает план, но и рассчитывает вероятностный прогноз. Поступления от покупателей взвешиваются на коэффициент их платёжной дисциплины (от 0 до 100%), рассчитанный по истории за 12 месяцев. Это даёт реалистичный, а не оптимистичный прогноз.
Какие результаты получила компания за 4 месяца?
Проект стартовал в феврале и завершился в мае. Вот измеримые результаты по итогам первых 4 месяцев работы новой системы:
| Показатель | До автоматизации | После автоматизации | Изменение |
|---|---|---|---|
| Кассовых разрывов в год | 11 | 3 | −73% |
| Потери на овердрафте | 4,7 млн руб./год | 1,1 млн руб./год | −77% |
| Время подготовки БДДС-отчёта | 3–4 дня | 15 минут | −99% |
| Точность прогноза cashflow на 30 дней | ~55% | 88% | +60% |
| Срок согласования заявок на оплату | 3–5 дней | 4–6 часов | −85% |
| Свободные денежные средства (среднее) | 12 млн руб. | 28 млн руб. | +133% |
Три оставшихся разрыва были связаны с форс-мажорными обстоятельствами: один крупный покупатель задержал оплату на 45 дней из-за внутреннего аудита, что выходило за рамки любых статистических моделей. Система, впрочем, предупредила о риске за 12 дней, что позволило заблаговременно открыть кредитную линию на льготных условиях.
Найдите специалиста для решения этой задачи на koderion.ru
Автор: редакция Koderion. Обновлено: 20 мая 2026. Источники: Infostart, ИТС 1С, Документация платформы 1С:Предприятие.