Создание гибкой системы тарификации в 1С:Предприятие — ключевая задача для компаний, работающих с абонентскими услугами, арендой, подписками или многоканальными продажами. Без правильной настройки тарифов бизнес теряет до 15-20% прибыли на ошибках расчетов, ручной работе бухгалтерии и конфликтах с клиентами. Эта статья поможет разобраться, как организовать тарификацию с учетом специфики вашего бизнеса — от простых фиксированных тарифов до сложных многоуровневых схем с бонусами и скидками.

Мы рассмотрим не только техническую сторону (какие объекты конфигурации задействовать и как их связать), но и практические кейсы: как тарифицировать интернет-провайдеру трафик, оператору связи — минуты разговоров, а фитнес-клубу — абонементы с заморозкой. Особое внимание уделим автоматизации пересчета тарифов при изменении условий договора — это избавит от ручного контроля и снизит нагрузку на сотрудников.

Статья актуальна для последних версий платформы 1С:Предприятие 8.3 (включая облачные решения) и адаптирована под типовые конфигурации: 1С:ERP, 1С:Управление торговлей, 1С:Бухгалтерия, а также отраслевые решения для телекома и ЖКХ. Если вы используете кастомизированную конфигурацию, принципы остаются теми же, но могут потребоваться доработки.

1. Что такое тарификация в 1С и зачем она нужна

Тарификация в — это механизм автоматизированного расчета стоимости услуг или товаров по заранее определенным правилам. В отличие от простого ценообразования, тарификация учитывает:

  • 📅 Временные параметры: почасовую оплату, дневные/ночные тарифы, сезонные коэффициенты.
  • 📊 Объемные показатели: трафик, минуты разговоров, количество посещений, вес груза.
  • 🔄 Динамические условия: скидки за лояльность, штрафы за просрочку, бонусы за предоплату.
  • 📝 Индивидуальные соглашения: персональные тарифы для VIP-клиентов или оптовиков.

Без системы тарификации компании приходится:

  • ⏳ Вручную просчитывать стоимость услуг для каждого клиента (риск ошибок до 30%).
  • 📉 Терять прибыль из-за неучтенных надбавок или неверных скидок.
  • 📋 Вести двойной учет — в и в Excel (что нарушает целостность данных).
⚠️ Внимание: Если ваш бизнес работает по абонентской модели (интернет, связь, фитнес, SaaS), отсутствие автоматизированной тарификации может привести к искажению финансовой отчетности и конфликтам с регуляторами (например, Роскомнадзором для операторов связи).

Примеры бизнес-задач, которые решает тарификация в :

Отрасль Задача Пример тарификации
Телеком Расчет стоимости звонков и SMS Потарифная оплата за минуту разговора с учетом направления (город/межгород/роуминг)
ЖКХ Начисление платы за коммунальные услуги Фиксированная абонплата + переменная часть по счетчикам (вода, свет, газ)
Логистика Оплата за хранение и перевозку грузов Посуточная аренда склада + плата за кубометр груза
Фитнес-клубы Продажа абонементов Разовые посещения, месячные абонементы с заморозкой, семейные тарифы
📊 Какой тип тарификации вам нужнее всего?
Фиксированные абонентские платежи
Почасовой/поминутный расчет
Многоуровневые скидки и бонусы
Индивидуальные тарифы для клиентов
Другой вариант

2. Подготовка системы: какие объекты конфигурации понадобятся

Прежде чем приступать к настройке, убедитесь, что в вашей конфигурации есть необходимые объекты. Если их нет — придется доработать конфигурацию или подключить отраслевое решение. Вот минимальный набор:

  • 📁 Справочники:
    • ТарифныеПланы — хранит шаблоны тарифов (например, "Базовый", "Премиум").
    • Услуги — перечень услуг, подлежащих тарификации (интернет, аренда, консультации).
    • Клиенты или Контрагенты — для привязки индивидуальных условий.
  • 📄 Документы:
    • НачислениеУслуг — фиксирует фактическое потребление (минуты, трафик, посещения).
    • АктВыполненныхРабот или СчетНаОплату — для выставления счетов клиентам.
  • ⚙️ Регистры:
    • ТарифыКлиентов (регистр сведений) — хранит актуальные тарифы для каждого клиента.
    • ПотреблениеУслуг (регистр накопления) — учитывает объемы потребленных услуг.

Если вы используете типовую конфигурацию (например, 1С:ERP), часть объектов уже может быть предусмотрена. Например, в 1С:Управление торговлей есть справочник ТипыЦен, который можно адаптировать под тарифы. Для телекома подойдет отраслевое решение 1С:Оператор связи, где тарификация реализована "из коробки".

⚠️ Внимание: Если в вашей конфигурации нет регистра ПотреблениеУслуг, его придется создать самостоятельно. Без этого регистра невозможно будет отслеживать фактическое потребление услуг клиентами и корректно формировать счета.

Для сложных схем (например, тарификация с учетом времени суток или геолокации) могут потребоваться дополнительные объекты:

  • 🕒 ВременныеИнтервалы — для хранения пиковых/непиковых часов.
  • 🌍 ЗоныТарификации — для географической привязки (например, роуминг).
  • 📈 Коэффициенты — для сезонных надбавок или скидок.

Создать справочник "ТарифныеПланы"|Настроить регистр сведений "ТарифыКлиентов"|Добавить регистр накопления "ПотреблениеУслуг"|Проверить наличие документа "НачислениеУслуг"|Связать объекты между собой (реквизиты и табличные части)-->

3. Создание тарифных планов: пошаговая инструкция

Рассмотрим процесс на примере простого тарифного плана для фитнес-клуба: абонемент на 8 посещений по фиксированной цене.Later we’ll complicate it with dynamic discounts.

Шаг 1. Заполнение справочника "ТарифныеПланы"

Откройте справочник ТарифныеПланы (если его нет — создайте через Конфигуратор → Объекты → Справочники) и добавьте новый элемент:

  1. Название: "Абонемент 8 посещений".
  2. Тип тарифа: выберите Фиксированный (если тариф не зависит от объема услуг) или Динамический (если цена зависит от количества посещений).
  3. Периодичность: укажите Разовый (для разовых абонементов) или Ежемесячный (для подписок).
  4. Цена: введите стоимость (например, 3 500 рублей).
  5. Количество услуг: укажите 8 (максимальное число посещений).

Шаг 2. Привязка тарифа к клиенту

Откройте карточку клиента в справочнике Контрагенты и в табличной части Тарифы добавьте:

  • Тарифный план: выберите созданный "Абонемент 8 посещений".
  • Дата начала действия: укажите дату активации абонемента.
  • Дата окончания: если абонемент ограничен по времени (например, действует 1 месяц).

Шаг 3. Настройка регистра "ТарифыКлиентов"

Регистр сведений ТарифыКлиентов должен автоматически обновляться при изменении тарифов клиента. Для этого:

  1. Откройте регистр в Конфигураторе.
  2. Добавьте ресурсы: ТарифныйПлан, ДатаНачала, ДатаОкончания.
  3. Настройте запись движений в модуле документа ИзменениеТарифа (если такого документа нет — создайте его).

Пример кода для записи в регистр (вставляйте в модуль документа):

Процедура ОбработкаПроведения(Отказ, Режим)

Движения.ТарифыКлиентов.Записать();

Движения.ТарифыКлиентов.ТарифныйПлан = Объект.ТарифныйПлан;

Движения.ТарифыКлиентов.Клиент = Объект.Клиент;

Движения.ТарифыКлиентов.ДатаНачала = Объект.ДатаНачала;

Движения.ТарифыКлиентов.ДатаОкончания = Объект.ДатаОкончания;

КонецПроцедуры

⚠️ Внимание: Если у клиента действует несколько тарифов одновременно (например, абонемент на тренажерный зал + бассейн), убедитесь, что в регистре ТарифыКлиентов настроена многомерность по виду услуги. Иначе система будет учитывать только последний добавленный тариф.
💡

Для удобства работы добавьте в справочник "ТарифныеПланы" реквизит "Цвет" и настройте условное оформление в списке. Например, премиум-тарифы отображайте золотым цветом, а базовые — серым. Это упростит визуальный поиск.

4. Начисление услуг и автоматический расчет

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

  1. Создать документ НачислениеУслуг (если его нет).
  2. Настроить логику расчета в его модуле.
  3. Связать документ с регистром ПотреблениеУслуг.

Пример: фиксация посещения фитнес-клуба

Когда клиент приходит на тренировку, администратор создает документ НачислениеУслуг с параметрами:

  • Клиент: выбирает из справочника.
  • Услуга: например, "Посещение тренажерного зала".
  • Количество: 1 (одно посещение).
  • Дата: текущая дата.

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

Процедура ОбработкаПроведения(Отказ, Режим)

// Проверяем, есть ли у клиента действующий тариф

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ ПЕРВЫЕ 1

| ТарифыКлиентов.ТарифныйПлан КАК ТарифныйПлан,

| ТарифыКлиентов.ДатаОкончания КАК ДатаОкончания

|ИЗ

| РегистрСведений.ТарифыКлиентов КАК ТарифыКлиентов

|ГДЕ

| ТарифыКлиентов.Клиент = &Клиент

| И ТарифыКлиентов.ДатаНачала <= &Дата

| И (ТарифыКлиентов.ДатаОкончания >= &Дата ИЛИ ТарифыКлиентов.ДатаОкончания = ДАТАВРЕМЯ(1,1,1))

|УПОРЯДОЧИТЬ ПО

| ДатаНачала УБЫВ";

Запрос.УстановитьПараметр("Клиент", Объект.Клиент);

Запрос.УстановитьПараметр("Дата", Объект.Дата);

Результат = Запрос.Выполнить();

Если НЕ Результат.Пустой() Тогда

// Получаем данные тарифного плана

ТарифныйПлан = Результат[0].ТарифныйПлан;

Тариф = ТарифныйПлан.ПолучитьОбъект();

// Проверяем лимит посещений

Если Тариф.КоличествоУслуг > 0 Тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ СУММА(ПотреблениеУслуг.Количество) КАК Потреблено

|ИЗ РегистрНакопления.ПотреблениеУслуг КАК ПотреблениеУслуг

|ГДЕ ПотреблениеУслуг.Клиент = &Клиент

| И ПотреблениеУслуг.ТарифныйПлан = &ТарифныйПлан";

Запрос.УстановитьПараметр("Клиент", Объект.Клиент);

Запрос.УстановитьПараметр("ТарифныйПлан", ТарифныйПлан);

Потреблено = Запрос.Выполнить().Выгрузить()[0].Потреблено;

Если Потреблено >= Тариф.КоличествоУслуг Тогда

Сообщить("Превышен лимит посещений по тарифу!");

Отказ = Истина;

Возврат;

КонецЕсли;

КонецЕсли;

// Записываем потребление в регистр

Движение = Движения.ПотреблениеУслуг.Добавить();

Движение.Клиент = Объект.Клиент;

Движение.ТарифныйПлан = ТарифныйПлан;

Движение.Услуга = Объект.Услуга;

Движение.Количество = Объект.Количество;

Движение.Дата = Объект.Дата;

// Рассчитываем сумму к оплате (если тариф не безлимитный)

Если Тариф.ТипТарифа = Перечисление.ТипыТарифов.Динамический Тогда

Сумма = Объект.Количество * Тариф.ЦенаЗаЕдиницу;

Иначе

Сумма = 0; // Для фиксированных тарифов оплата списывается заранее

КонецЕсли;

Объект.Сумма = Сумма;

Иначе

Сообщить("У клиента нет действующего тарифного плана!");

Отказ = Истина;

КонецЕсли;

КонецПроцедуры

Этот код:

  1. Проверяет, есть ли у клиента действующий тариф на дату посещения.
  2. Контролирует лимит посещений (если тариф ограничен).
  3. Фиксирует факт потребления услуги в регистре ПотреблениеУслуг.
  4. Рассчитывает сумму к доплате (если тариф динамический).
Как модифицировать код для телеком-оператора?

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

1. Длительность разговора (в минутах) — для этого в документе НачислениеУслуг добавьте реквизит Длительность.

2. Направление вызова (городской, междугородний, международный) — для этого создайте справочник НаправленияВызовов и свяжите его с тарифом.

3. Время суток (пиковое/непиковое) — добавьте в регистр ТарифыКлиентов ресурс ВременнойИнтервал и настройте разные цены для разного времени.

Пример модифицированного кода для расчета стоимости звонка:

// Определяем временной интервал (пиковый/непиковый)

ВремяЗвонка = Час(Объект.ДатаНачала);

Если ВремяЗвонка >= 8 И ВремяЗвонка < 20 Тогда

Коэффициент = 1.0; // Пиковое время

Иначе

Коэффициент = 0.5; // Непиковое время (скидка 50%)

КонецЕсли;

// Рассчитываем стоимость

Сумма = Объект.Длительность Тариф.ЦенаЗаМинуту Коэффициент;

5. Автоматизация: как избежать ручного ввода

Ручной ввод данных о потреблении услуг — это риск ошибок и потеря времени. Автоматизируйте процесс с помощью:

  • 🤖 Обмена данными: интеграция с оборудованием (например, турникеты в фитнес-клубе или ATC в телекоме) для автоматической фиксации посещений/звонков.
  • Регламентных заданий: ежемесячное автоматическое начисление абонентской платы.
  • 📊 Отчетов с контрольными точками: например, еженедельная проверка клиентов, у которых заканчивается тариф.

Пример 1: Интеграция с турникетом

Для фитнес-клуба:

  1. Настройте обмен данными между и системой контроля доступа (например, СКУД).
  2. Создайте обработку, которая будет принимать данные о проходах клиентов через турникет и автоматически создавать документы НачислениеУслуг.
  3. Добавьте проверку на "черный список" (клиенты с просроченной оплатой).

Пример 2: Регламентное задание для абонплаты

Для ежемесячного списания абонентской платы:

  1. Создайте регламентное задание (Администрирование → Регламентные задания).
  2. Напишите обработку, которая:
    • Выбирает всех клиентов с действующими тарифами.
    • Проверяет, не просрочена ли оплата.
    • Создает документы СчетНаОплату с суммой абонплаты.
    • Отправляет уведомления клиентам по email/SMS.

Пример кода для регламентного задания:

Процедура Выполнить() Экспорт

// Получаем клиентов с действующими тарифами

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| ТарифыКлиентов.Клиент КАК Клиент,

| ТарифыКлиентов.ТарифныйПлан КАК ТарифныйПлан

|ИЗ

| РегистрСведений.ТарифыКлиентов КАК ТарифыКлиентов

|ГДЕ

| ТарифыКлиентов.ДатаНачала <= &ТекущаяДата

| И (ТарифыКлиентов.ДатаОкончания >= &ТекущаяДата ИЛИ ТарифыКлиентов.ДатаОкончания = ДАТАВРЕМЯ(1,1,1))";

Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());

Результат = Запрос.Выполнить();

// Для каждого клиента создаем счет

Для Каждого Строка Из Результат Цикл

Клиент = Строка.Клиент;

ТарифныйПлан = Строка.ТарифныйПлан.ПолучитьОбъект();

// Проверяем, не оплачен ли тариф за текущий месяц

Если НЕ ТарифОплачен(Клиент, ТарифныйПлан, ТекущаяДата()) Тогда

Док = Документы.СчетНаОплату.СоздатьДокумент();

Док.Клиент = Клиент;

Док.СуммаДокумента = ТарифныйПлан.АбонентскаяПлата;

Док.Дата = ТекущаяДата();

Док.Комментарий = "Абонентская плата за " + Формат(ТекущаяДата(), "ММММ yyyy");

Док.Записать();

Док.Провести();

// Отправляем уведомление (пример для email)

ТекстПисьма = "Уважаемый клиент! Сформирован счет №" + Док.Номер + " на сумму " + Док.СуммаДокумента;

ОтправитьEmail(Клиент.Email, "Счет на оплату", ТекстПисьма);

КонецЕсли;

КонецЦикла;

КонецПроцедуры

Функция ТарифОплачен(Клиент, ТарифныйПлан, Дата)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| Счета.Номер КАК Номер

|ИЗ

| Документ.СчетНаОплату КАК Счета

|ГДЕ

| Счета.Клиент = &Клиент

| И Счета.ТарифныйПлан = &ТарифныйПлан

| И МЕСЯЦ(Счета.Дата) = МЕСЯЦ(&Дата)

| И ГОД(Счета.Дата) = ГОД(&Дата)

| И Счета.Статус = Перечисление.СтатусыСчетов.Оплачен";

Запрос.УстановитьПараметр("Клиент", Клиент);

Запрос.УстановитьПараметр("ТарифныйПлан", ТарифныйПлан);

Запрос.УстановитьПараметр("Дата", Дата);

Возврат НЕ Запрос.Выполнить().Пустой();

КонецФункции

⚠️ Внимание: При настройке регламентных заданий учитывайте пиковые нагрузки. Если у вас 10 000 клиентов, одновременное создание счетов может загрузить сервер. Разбейте процесс на пакеты (например, по 1 000 клиентов в час) или используйте фоновые задания.
💡

Автоматизация тарификации снижает затраты на администрирование до 70% и исключает ошибки ручного ввода. Начните с самых трудоемких процессов (например, ежемесячное начисление абонплаты), затем добавляйте интеграции с оборудованием.

6. Типичные ошибки и как их избежать

Даже в хорошо спроектированной системе тарификации могут возникать проблемы. Вот самые распространенные:

  • 🔄 Двойное начисление: когда одна и та же услуга учитывается дважды (например, при ручном и автоматическом вводе).
    Решение: добавьте в документ НачислениеУслуг проверку на дубли по клиенту, услуге и дате.
  • 💰 Неверный расчет скидок: когда скидка применяется к неправильной базе (например, к сумме с НДС вместо суммы без НДС).
    Решение: прописывайте в тарифном плане, к какой части суммы применяется скидка (до или после налогов).
  • Просроченные тарифы: когда клиенту продолжают начислять услуги по старому тарифу после истечения его действия.
    Решение: настройте регламентное задание, которое будет деактивировать просроченные тарифы.
  • 📉 Потеря данных при изменении тарифа: когда при смене тарифного плана "сбиваются" накопленные бонусы или лимиты.
    Решение: храните историю изменений тарифов в отдельном регистре сведений.

Чтобы минимизировать ошибки, используйте контрольные отчеты. Например:

Отчет Что проверяет Периодичность
Сверка тарифов и платежей Соответствие начисленных сумм оплаченным Еженедельно
Клиенты без действующих тарифов Клиентов, которым нечего начислять Ежемесячно
Аномальное потребление Внезапные скачки в потреблении услуг (возможная ошибка или мошенничество) Ежедневно

Пример запроса для отчета "Клиенты без действующих тарифов":

ВЫБРАТЬ

Контрагенты.Наименование КАК Клиент,

Контрагенты.КонтактноеЛицо КАК Контакт

ИЗ

Справочник.Контрагенты КАК Контрагенты

ГДЕ

НЕ Контрагенты.ПометкаУдаления

И НЕ ВЫБРАТЬ РАЗЛИЧНЫЕ Контрагенты.Ссылка

ИЗ РегистрСведений.ТарифыКлиентов КАК ТарифыКлиентов

ГДЕ ТарифыКлиентов.Клиент = Контрагенты.Ссылка

И ТарифыКлиентов.ДатаНачала <= &ТекущаяДата

И (ТарифыКлиентов.ДатаОкончания >= &ТекущаяДата ИЛИ ТарифыКлиентов.ДатаОкончания = ДАТАВРЕМЯ(1,1,1))

7. Оптимизация тарификации для крупных баз данных

Если в вашей базе больше 10 000 клиентов или 100 000 записей о потреблении услуг, стандартные механи