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

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

Материал будет полезен как начинающим пользователям, которые только осваивают 1С:Предприятие 8.3, так и опытным специалистам, желающим систематизировать знания. Все примеры приведены с учетом актуальных версий платформы, но в формулах для отчетов и обработок могут использоваться уникальные функции, зависящие от конкретной конфигурации (например, 1С:Бухгалтерия или 1С:Зарплата и Управление Персоналом).

Где в 1С используются формулы?

Формулы в применяются в нескольких ключевых сценариях, каждый из которых требует своего подхода к написанию выражений. Основные области:

  • 📊 Отчеты и обработки: расчет показателей в табличных документах, группировках и диаграммах. Например, формула для вычисления доли продаж по регионам или динамики выручки.
  • 📝 Документы и регистры: автоматические расчеты сумм, количеств или процентов при проведении документов (например, скидки в 1С:Торговля).
  • 🔧 Константы и справочники: вычисляемые поля, которые зависят от других параметров (например, курс валюты с привязкой к дате).
  • 📈 Система компоновки данных (СКД): создание пользовательских полей и выражений в отчетах, построенных на СКД.

Важно понимать, что синтаксис формул может незначительно отличаться в зависимости от контекста. Например, в Табличном документе используются функции вида ВЫБРАТЬ() или ЕСЛИ(), тогда как в СКД применяется язык выражений с операторами CASE WHEN. Мы сосредоточимся на универсальных принципах, которые работают в большинстве случаев.

⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) для сложных расчетов могут использоваться внешние обработки на встроенном языке. Если стандартные формулы не покрывают ваши задачи, проверьте наличие таких инструментов в вашей версии программы.
📊 Где вы чаще всего используете формулы в 1С?
В отчетах
В документах (расчет сумм)
В справочниках
В обработках
Не использую

Базовый синтаксис формул в 1С

Формулы в пишутся на встроенном языке, который имеет свои особенности. Основные правила:

  • 🔢 Арифметические операторы: + (сложение), - (вычитание), * (умножение), / (деление). Для возведения в степень используется функция ПОКАЗАТЕЛЬ(основание, степень).
  • 🔄 Операторы сравнения: = (равно), <> (не равно), <, <=, >=. Логические операторы: И, ИЛИ, НЕ.
  • 📌 Скобки: обязательны для изменения порядка выполнения операций. Например, (Сумма + НДС) * Курс.
  • 💾 Ссылки на поля: в формулах используются имена реквизитов или колонок, заключенные в квадратные скобки: [Количество], [Цена].

Пример простой формулы для расчета суммы с НДС:

[Количество]  [Цена]  (1 + [СтавкаНДС] / 100)

Обратите внимание, что деление на 100 в ставке НДС — типичный прием для преобразования процентов в коэффициент. Также в формулах можно использовать встроенные функции, такие как ОКРУГЛ(), ЕСЛИ() или ВЫБОР().

💡

Чтобы проверить синтаксис формулы до её сохранения, используйте кнопку "Проверка" (если она доступна в вашем редакторе). Это поможет избежать ошибок при выполнении отчета или обработки.

Как прописать формулу в табличном документе

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

  1. Выделите ячейку, в которой должен отображаться результат.
  2. Нажмите правой кнопкой мыши и выберите Формула (или Свойства ячейки → Формула).
  3. В открывшемся окне введите выражение. Например, для суммирования столбца A с 1 по 10 строку: СУММ(A1:A10).
  4. Сохраните изменения и обновите документ (F9).

Особенности формул в табличных документах:

  • 🔢 Поддерживаются абсолютные и относительные ссылки. Например, $A$1 — абсолютная ссылка, не меняется при копировании формулы.
  • 📊 Можно использовать имена диапазонов, заданные через Имя → Присвоить.
  • 🔄 Формулы автоматически пересчитываются при изменении исходных данных (если включен режим Автопересчет).

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

ОКРУГЛ(СРЗНАЧ(B2:B20); 2)
⚠️ Внимание: В табличных документах нельзя использовать функции, которые требуют доступа к базе данных (например, ВЫБРАТЬ ИЗ Справочник.Номенклатура). Для таких задач нужны запросы или программный код.

☑️ Проверка формулы в табличном документе

Выполнено: 0 / 4

Сложные формулы с условиями (ЕСЛИ, ВЫБОР)

Для реализации логики "если-то-иначе" в используются функции ЕСЛИ() и ВЫБОР(). Они позволяют создавать разветвленные выражения без написания программного кода.

Функция ЕСЛИ() имеет следующий синтаксис:

ЕСЛИ(Условие; ЗначениеЕслиИстина; ЗначениеЕслиЛожь)

Пример: начисление бонуса при превышении плана продаж:

ЕСЛИ([Продажи] > [План]; [Продажи] * 0.1; 0)

Функция ВЫБОР() удобна для множественных условий:

ВЫБОР(

[КатегорияТовара] = "Электроника"; [Цена] * 1.2;

[КатегорияТовара] = "Одежда"; [Цена] * 1.1;

[Цена] * 1.05

)

Вложенные условия можно комбинировать, но не рекомендуется использовать более 3-4 уровней вложенности — это усложняет поддержку формулы. Для сложной логики лучше написать обработку на встроенном языке.

Функция Синтаксис Пример использования
ЕСЛИ() ЕСЛИ(условие; значение1; значение2) ЕСЛИ([Остаток] < 0; "Дефицит"; "В наличии")
ВЫБОР() ВЫБОР(условие1; значение1; условие2; значение2; ...) ВЫБОР([Стаж] > 5; 10%; [Стаж] > 2; 5%; 0%)
И() / ИЛИ() И(условие1; условие2) ЕСЛИ(И([Возраст] > 18; [Стаж] > 1); "Принят"; "Отклонен")
Что делать, если формула с условием не работает?

Проверьте регистр в текстовом сравнении (например, "Да" ≠ "да"). В 1С сравнение чувствительно к регистру, если не используется функция НРСТР().

Работа с датами и временем в формулах

Формулы в часто оперируют датами — например, для расчета сроков, возраста или периодов. Основные функции для работы с датами:

  • 📅 ТЕКУЩАЯДАТА() — возвращает текущую дату.
  • ДОБАВИТЬМЕСЯЦ(дата; количество) — сдвигает дату на заданное количество месяцев.
  • 🗓️ ДЕНЬ(дата), МЕСЯЦ(дата), ГОД(дата) — извлекают компоненты даты.
  • ⏱️ РАЗНОСТЬДАТ(дата1; дата2; единица) — вычисляет разницу между датами в днях, месяцах или годах.

Пример расчета возраста сотрудника на текущую дату:

РАЗНОСТЬДАТ(ТЕКУЩАЯДАТА(); [ДатаРождения]; "ГОД")

Для работы с временем используются функции ЧАС(), МИНУТА() и СЕКУНДА(). Например, чтобы проверить, попадает ли время документа в рабочий день (с 9:00 до 18:00):

ЕСЛИ(И(ЧАС([ВремяДокумента]) >= 9; ЧАС([ВремяДокумента]) < 18); "В рабочее время"; "Вне рабочего времени")
⚠️ Внимание: При сравнении дат учитывайте формат хранения. В дата без времени записывается как 00:00:00, поэтому сравнение [Дата1] = [Дата2] может давать неожиданные результаты, если одна из дат содержит время. Используйте НАЧАЛОДНЯ() для приведения к началу дня.

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

Даже опытные пользователи сталкиваются с ошибками при написании формул. Рассмотрим наиболее распространенные:

  • 🔴 Ошибка синтаксиса: пропущенные скобки, запятые или кавычки. Например, ЕСЛИ([Сумма] > 1000 "Большая") вместо ЕСЛИ([Сумма] > 1000; "Большая"; "").
  • 🔴 Неверные типы данных: попытка сложить текст и число (например, [Наименование] + [Количество]). Используйте функции преобразования: ЧИСЛО(), СТРОКА().
  • 🔴 Ошибки в ссылках на поля: опечатки в именах реквизитов или использование несуществующих колонок. Всегда проверяйте регистр!
  • 🔴 Деление на ноль: если в формуле есть деление, добавьте проверку: ЕСЛИ([Знаменатель] = 0; 0; [Числитель]/[Знаменатель]).

Для диагностики ошибок используйте:

  1. Режим отладки: в конфигураторе включите отладку (Сервис → Параметры → Отладка) и проверьте значения промежуточных выражений.
  2. Лог ошибок: в журнале регистрации (Администрирование → Журнал регистрации) ищите записи с уровнем "Ошибка".
  3. Тестовые данные: перед применением формулы на реальных данных протестируйте её на небольшом наборе записей.
💡

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

Продвинутые приемы: формулы в СКД и запросах

В Системе компоновки данных (СКД) формулы пишутся на языке выражений, который поддерживает более сложные конструкции, чем табличные документы. Здесь доступны:

  • 🔍 Агрегатные функции: СУММА(), МАКСИМУМ(), КОЛИЧЕСТВО().
  • 🔗 Ссылки на поля через точку: Выручка.Сумма.
  • 📌 Условные выражения с CASE WHEN:

Пример формулы для СКД, которая классифицирует клиентов по сумме покупок:

ВЫБОР

КОГДА СУММА(Продажи.Сумма) > 100000 ТОГДА "VIP"

КОГДА СУММА(Продажи.Сумма) > 50000 ТОГДА "Средний"

ИНАЧЕ "Стандартный"

КОНЕЦ

В запросах (язык 1С:Предприятие) формулы интегрируются через конструкцию ВЫБРАТЬ ... ПОМЕСТИТЬ или ВЫРАЗИТЬ. Например, расчет маржи в запросе:

ВЫБРАТЬ

Продажи.Номенклатура КАК Номенклатура,

(Продажи.Сумма - Продажи.Себестоимость) / Продажи.Сумма * 100 КАК Маржа

ИЗ

Документ.РеализацияТоваровУслуг КАК Продажи

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

FAQ: Ответы на частые вопросы

Как в формуле 1С округлить число до двух знаков после запятой?

Используйте функцию ОКРУГЛ() с указанием точности:

ОКРУГЛ([ВашеЧисло]; 2)

Если нужно округлить в большую или меньшую сторону, применяйте ОКРУГЛВВЕРХ() или ОКРУГЛВНИЗ().

Можно ли в формуле 1С использовать данные из другой таблицы?

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

Пример для СКД:

ВЫБРАТЬ

Товары.Наименование,

Товары.Цена * Курсы.Курс КАК ЦенаВВалюте

ИЗ

Справочник.Номенклатура КАК Товары

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Курсы

ПО Товары.Валюта = Курсы.Ссылка

Почему формула возвращает ошибку "Тип не совпадает"?

Эта ошибка возникает, когда вы пытаетесь выполнить операцию над несовместимыми типами данных. Например:

  • Сложить число и строку: [Цена] + [Наименование].
  • Сравнить дату с числом: ЕСЛИ([Дата] > 100; ...).

Решение: используйте функции преобразования типов:

ЧИСЛО([ТекстовоеПоле])  // Преобразует строку в число

СТРОКА([ЧисловоеПоле]) // Преобразует число в строку

Как в формуле проверить, что поле пустое?

Для проверки на пустое значение используйте функцию ЗНАЧЕНИЕЗАПОЛНЕНО() или сравнение с NULL:

ЕСЛИ(НЕ ЗНАЧЕНИЕЗАПОЛНЕНО([ВашеПоле]); "Пусто"; "Заполнено")

// или

ЕСЛИ([ВашеПоле] ЕСТЬ NULL; "Пусто"; "Заполнено")

Обратите внимание, что NULL и пустая строка ("") — разные вещи!

Где хранится список всех доступных функций для формул в 1С?

Полный перечень функций зависит от версии платформы и конфигурации. Основные источники:

  • Синтакс-помощник в конфигураторе (Текст → Синтакс-помощник или F1 в редакторе формул).
  • Документация 1С (раздел "Встроенный язык").
  • Справочник по СКД (для функций системы компоновки данных).

Для специфических конфигураций (например, 1С:ERP) могут быть доступны дополнительные функции — их описание ищите в документации к конкретной конфигурации.