Основываясь на реальных данных бухгалтерского учета РФ (Федеральный закон № 402-ФЗ «О бухгалтерском учете» и Налоговый кодекс РФ), давайте разберем вашу логику без предположений.

### Ответ на ваш главный вопрос: «Правильно ли выставлять счет 01 числа (постоплатный тариф, можно уходить в минус), а акт 31 числом, после оказания услуг?»
С точки зрения закона — это 100% правильно.

- Счет на оплату — не является первичным бухгалтерским документом. Это просто "оферта" (приглашение заплатить). Вы имеете полное право выставить его 1-го числа текущего месяца. По сути, с точки зрения документооборота, это счет на предоплату/аванс , даже если вы разрешаете абоненту оплатить его до конца месяца.
- Акт (УПД) — является первичным документом. Согласно ч. 3 ст. 9 ФЗ № 402-ФЗ, первичный документ должен составляться при совершении факта хозяйственной жизни, а если это не представляется возможным — непосредственно после его окончания . Для длящихся услуг (интернет) Акт обязан выставляться последним днем месяца оказания услуг (28/30/31 числа).
То есть логика «Счет 1-го числа, Акт 31-го» юридически безупречна.


1. Предоплатные счета (Фиксированная сумма)
- Как работает: Периодик запускается 1-го мая. Тариф имеет month_fee (например, 1000 руб).
- Результат скрипта: Скрипт видит фиксированную сумму, игнорирует ежедневные списания. Выставляет Счет датой 01.05.2026 на 1000 руб, и формирует Акт датой 31.05.2026 на 1000 руб.
- Вердикт: Идеально. ✅ 2. Постоплатные счета (Фиксированная сумма)
- Как работает: Настройка компании = Постоплатный . Периодик запускается 1-го ИЮНЯ. Скрипт отнимает месяц (МАЙ). Тариф фиксированный (1000 руб).
- Результат скрипта: Выставляет Счет датой 01.06.2026 и Акт датой 31.05.2026.
- Вердикт: Идеально. ✅ 3. За активные дни постоплатные
- Как работает: Настройка = Постоплатный . Запуск 1-го ИЮНЯ за МАЙ. Тариф имеет только day_fee .
- Результат скрипта: Скрипт обращается в базу биллинга и считает реальные списания с 1 по 31 мая. Допустим, абонент пользовался 15 дней. Скрипт формирует Счет на 15 дней и Акт на 15 дней (от 31 мая).
- Вердикт: Идеально. ✅ 4. Распределённая абонплата
- Как работает: Сумма делится пропорционально дням, но итоговая за месяц фиксирована. В биллинге это обычно month_fee с галочкой "Распределять по дням".
- Результат скрипта: Поскольку базовое поле month_fee заполнено, скрипт сработает как в пункте 1 или 2 — выставит полную сумму за месяц, независимо от ежедневных микро-списаний.
- Вердикт: Идеально. ❌ 5. За активные дни предоплатные (КРИТИЧЕСКАЯ ОШИБКА ЛОГИКИ)
Здесь мы сталкиваемся с парадоксом пространства-времени, который не позволяет решить эту задачу текущим скриптом.

- Бухгалтерская реальность: Вы хотите 1-го мая выставить Счет на активные дни. Но вы не знаете , сколько дней в мае абонент будет пользоваться интернетом (вдруг он уйдет в паузу 10-го числа?). Выставить Акт 1-го мая будущим числом на неизвестную сумму — незаконно. Бухгалтерия в таких случаях выставляет Счет-Аванс (например, на 30 дней), а Акт в конце месяца выписывает по факту (на 15 дней). Остаток денег висит на балансе (сальдо).
- Что сделает наш скрипт сейчас: Если настройка = Предоплатный , периодик запустится 1-го мая. Он попытается найти фактические списания за май. Так как сегодня только 1-е мая, он найдет списание только за 1 день . Скрипт сформирует Счет на 1 день (условно 30 рублей) и Акт на 1 день. Абонент весь месяц будет сидеть в интернете, а в 1С улетит документ только на 1 день.
### Резюме:
Наш скрипт работает идеально и полностью по закону для 4 из 5 ваших бизнес-моделей.

Для тарифов «За активные дни» мы обязаны использовать только постоплатную генерацию (настройка компании DOC_TYPE = post ). То есть периодик должен запускаться 1-го числа следующего месяца, чтобы собрать честную статистику списаний за прошлый месяц.

Если вы попытаетесь натравить периодик на генерацию предоплатных счетов "в реальном времени" для тарифов с дневной абонплатой, он выставит счета-пустышки на 0 или 1 день.

Как это работает теперь:

1. Периодик запускается (например, 1 мая).
2. Он видит компанию, у которой стоит галочка "Авто-выставление".
3. Он смотрит её настройку DOC_TYPE (Тип документа). Допустим, там стоит "Предоплатный" (или ничего не стоит). По идее, он должен выставить счет за МАЙ.
4. НО! Скрипт делает быструю проверку всех тарифов абонентов этой компании.
5. Если он находит хотя бы одного абонента, у которого тариф с Дневным списанием ( month_fee <= 0 и day_fee > 0 ), скрипт мгновенно блокирует предоплатную генерацию.
6. Он принудительно переводит систему в режим Постоплаты , откатывает месяц назад (на АПРЕЛЬ) и пишет в лог: [Внимание] Компания настроена на Предоплату, но найден тариф с Дневным списанием. ПРИНУДИТЕЛЬНЫЙ откат на ПРОШЛЫЙ месяц (4/2026) для корректного подсчета активных дней.
И после этого он собирает честную, копейка в копейку, сумму по фактическим списаниям за прошлый месяц.



  • Нет меток