Работа с формулами в 1С:Предприятие — одна из ключевых задач при настройке отчетов, обработок и конфигураций. Без них невозможно автоматизировать расчеты, проверять условия или трансформировать данные. Однако синтаксис формул в 1С отличается от привычных математических записей или языков программирования, что часто вызывает затруднения у новичков.
В этой статье мы разберем, как создавать формулы разной сложности: от простых арифметических операций до вложенных условий с логическими операторами. Вы узнаете, где именно в 1С применяются формулы, как избежать типичных ошибок и какие инструменты помогут упростить их написание. Особое внимание уделим синтаксическим особенностям, которые часто становятся причиной сбоев при выполнении кода.
Материал будет полезен как начинающим пользователям, которые только осваивают 1С:Предприятие 8.3, так и опытным специалистам, желающим систематизировать знания. Все примеры приведены с учетом актуальных версий платформы, но в формулах для отчетов и обработок могут использоваться уникальные функции, зависящие от конкретной конфигурации (например, 1С:Бухгалтерия или 1С:Зарплата и Управление Персоналом).
Где в 1С используются формулы?
Формулы в 1С применяются в нескольких ключевых сценариях, каждый из которых требует своего подхода к написанию выражений. Основные области:
- 📊 Отчеты и обработки: расчет показателей в табличных документах, группировках и диаграммах. Например, формула для вычисления доли продаж по регионам или динамики выручки.
- 📝 Документы и регистры: автоматические расчеты сумм, количеств или процентов при проведении документов (например, скидки в 1С:Торговля).
- 🔧 Константы и справочники: вычисляемые поля, которые зависят от других параметров (например, курс валюты с привязкой к дате).
- 📈 Система компоновки данных (СКД): создание пользовательских полей и выражений в отчетах, построенных на СКД.
Важно понимать, что синтаксис формул может незначительно отличаться в зависимости от контекста. Например, в Табличном документе используются функции вида ВЫБРАТЬ() или ЕСЛИ(), тогда как в СКД применяется язык выражений с операторами CASE WHEN. Мы сосредоточимся на универсальных принципах, которые работают в большинстве случаев.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) для сложных расчетов могут использоваться внешние обработки на встроенном языке. Если стандартные формулы не покрывают ваши задачи, проверьте наличие таких инструментов в вашей версии программы.
Базовый синтаксис формул в 1С
Формулы в 1С пишутся на встроенном языке, который имеет свои особенности. Основные правила:
- 🔢 Арифметические операторы:
+(сложение),-(вычитание),*(умножение),/(деление). Для возведения в степень используется функцияПОКАЗАТЕЛЬ(основание, степень). - 🔄 Операторы сравнения:
=(равно),<>(не равно),<,<=,>=. Логические операторы:И,ИЛИ,НЕ. - 📌 Скобки: обязательны для изменения порядка выполнения операций. Например,
(Сумма + НДС) * Курс. - 💾 Ссылки на поля: в формулах используются имена реквизитов или колонок, заключенные в квадратные скобки:
[Количество],[Цена].
Пример простой формулы для расчета суммы с НДС:
[Количество] [Цена] (1 + [СтавкаНДС] / 100)
Обратите внимание, что деление на 100 в ставке НДС — типичный прием для преобразования процентов в коэффициент. Также в формулах можно использовать встроенные функции, такие как ОКРУГЛ(), ЕСЛИ() или ВЫБОР().
Чтобы проверить синтаксис формулы до её сохранения, используйте кнопку "Проверка" (если она доступна в вашем редакторе). Это поможет избежать ошибок при выполнении отчета или обработки.
Как прописать формулу в табличном документе
Табличные документы в 1С (например, в отчетах или печатных формах) поддерживают формулы для динамического расчета значений. Чтобы добавить формулу:
- Выделите ячейку, в которой должен отображаться результат.
- Нажмите правой кнопкой мыши и выберите
Формула(илиСвойства ячейки → Формула). - В открывшемся окне введите выражение. Например, для суммирования столбца
Aс 1 по 10 строку:СУММ(A1:A10). - Сохраните изменения и обновите документ (
F9).
Особенности формул в табличных документах:
- 🔢 Поддерживаются абсолютные и относительные ссылки. Например,
$A$1— абсолютная ссылка, не меняется при копировании формулы. - 📊 Можно использовать имена диапазонов, заданные через
Имя → Присвоить. - 🔄 Формулы автоматически пересчитываются при изменении исходных данных (если включен режим
Автопересчет).
Пример формулы для расчета среднего значения с округлением:
ОКРУГЛ(СРЗНАЧ(B2:B20); 2)
⚠️ Внимание: В табличных документах 1С нельзя использовать функции, которые требуют доступа к базе данных (например, ВЫБРАТЬ ИЗ Справочник.Номенклатура). Для таких задач нужны запросы или программный код.
☑️ Проверка формулы в табличном документе
Сложные формулы с условиями (ЕСЛИ, ВЫБОР)
Для реализации логики "если-то-иначе" в 1С используются функции ЕСЛИ() и ВЫБОР(). Они позволяют создавать разветвленные выражения без написания программного кода.
Функция ЕСЛИ() имеет следующий синтаксис:
ЕСЛИ(Условие; ЗначениеЕслиИстина; ЗначениеЕслиЛожь)
Пример: начисление бонуса при превышении плана продаж:
ЕСЛИ([Продажи] > [План]; [Продажи] * 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С часто оперируют датами — например, для расчета сроков, возраста или периодов. Основные функции для работы с датами:
- 📅
ТЕКУЩАЯДАТА()— возвращает текущую дату. - ⏳
ДОБАВИТЬМЕСЯЦ(дата; количество)— сдвигает дату на заданное количество месяцев. - 🗓️
ДЕНЬ(дата),МЕСЯЦ(дата),ГОД(дата)— извлекают компоненты даты. - ⏱️
РАЗНОСТЬДАТ(дата1; дата2; единица)— вычисляет разницу между датами в днях, месяцах или годах.
Пример расчета возраста сотрудника на текущую дату:
РАЗНОСТЬДАТ(ТЕКУЩАЯДАТА(); [ДатаРождения]; "ГОД")
Для работы с временем используются функции ЧАС(), МИНУТА() и СЕКУНДА(). Например, чтобы проверить, попадает ли время документа в рабочий день (с 9:00 до 18:00):
ЕСЛИ(И(ЧАС([ВремяДокумента]) >= 9; ЧАС([ВремяДокумента]) < 18); "В рабочее время"; "Вне рабочего времени")
⚠️ Внимание: При сравнении дат учитывайте формат хранения. В 1С дата без времени записывается как00:00:00, поэтому сравнение[Дата1] = [Дата2]может давать неожиданные результаты, если одна из дат содержит время. ИспользуйтеНАЧАЛОДНЯ()для приведения к началу дня.
Типичные ошибки и как их избежать
Даже опытные пользователи 1С сталкиваются с ошибками при написании формул. Рассмотрим наиболее распространенные:
- 🔴 Ошибка синтаксиса: пропущенные скобки, запятые или кавычки. Например,
ЕСЛИ([Сумма] > 1000 "Большая")вместоЕСЛИ([Сумма] > 1000; "Большая"; ""). - 🔴 Неверные типы данных: попытка сложить текст и число (например,
[Наименование] + [Количество]). Используйте функции преобразования:ЧИСЛО(),СТРОКА(). - 🔴 Ошибки в ссылках на поля: опечатки в именах реквизитов или использование несуществующих колонок. Всегда проверяйте регистр!
- 🔴 Деление на ноль: если в формуле есть деление, добавьте проверку:
ЕСЛИ([Знаменатель] = 0; 0; [Числитель]/[Знаменатель]).
Для диагностики ошибок используйте:
- Режим отладки: в конфигураторе включите отладку (
Сервис → Параметры → Отладка) и проверьте значения промежуточных выражений. - Лог ошибок: в журнале регистрации (
Администрирование → Журнал регистрации) ищите записи с уровнем "Ошибка". - Тестовые данные: перед применением формулы на реальных данных протестируйте её на небольшом наборе записей.
Всегда проверяйте формулы на крайних значениях (нулевые суммы, пустые поля, максимальные числа). Это поможет выявить скрытые ошибки.
Продвинутые приемы: формулы в СКД и запросах
В Системе компоновки данных (СКД) формулы пишутся на языке выражений, который поддерживает более сложные конструкции, чем табличные документы. Здесь доступны:
- 🔍 Агрегатные функции:
СУММА(),МАКСИМУМ(),КОЛИЧЕСТВО(). - 🔗 Ссылки на поля через точку:
Выручка.Сумма. - 📌 Условные выражения с
CASE WHEN:
Пример формулы для СКД, которая классифицирует клиентов по сумме покупок:
ВЫБОР
КОГДА СУММА(Продажи.Сумма) > 100000 ТОГДА "VIP"
КОГДА СУММА(Продажи.Сумма) > 50000 ТОГДА "Средний"
ИНАЧЕ "Стандартный"
КОНЕЦ
В запросах (язык 1С:Предприятие) формулы интегрируются через конструкцию ВЫБРАТЬ ... ПОМЕСТИТЬ или ВЫРАЗИТЬ. Например, расчет маржи в запросе:
ВЫБРАТЬ
Продажи.Номенклатура КАК Номенклатура,
(Продажи.Сумма - Продажи.Себестоимость) / Продажи.Сумма * 100 КАК Маржа
ИЗ
Документ.РеализацияТоваровУслуг КАК Продажи
Для сложных вычислений в запросах можно использовать временные таблицы или подзапросы, но это требует знания языка запросов 1С.
FAQ: Ответы на частые вопросы
Как в формуле 1С округлить число до двух знаков после запятой?
Используйте функцию ОКРУГЛ() с указанием точности:
ОКРУГЛ([ВашеЧисло]; 2)
Если нужно округлить в большую или меньшую сторону, применяйте ОКРУГЛВВЕРХ() или ОКРУГЛВНИЗ().
Можно ли в формуле 1С использовать данные из другой таблицы?
В простых формулах (например, в табличном документе) — нет. Для этого нужен запрос или программный код. В СКД можно использовать связи между наборами данных.
Пример для СКД:
ВЫБРАТЬ
Товары.Наименование,
Товары.Цена * Курсы.Курс КАК ЦенаВВалюте
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Валюты КАК Курсы
ПО Товары.Валюта = Курсы.Ссылка
Почему формула возвращает ошибку "Тип не совпадает"?
Эта ошибка возникает, когда вы пытаетесь выполнить операцию над несовместимыми типами данных. Например:
- Сложить число и строку:
[Цена] + [Наименование]. - Сравнить дату с числом:
ЕСЛИ([Дата] > 100; ...).
Решение: используйте функции преобразования типов:
ЧИСЛО([ТекстовоеПоле]) // Преобразует строку в число
СТРОКА([ЧисловоеПоле]) // Преобразует число в строку
Как в формуле проверить, что поле пустое?
Для проверки на пустое значение используйте функцию ЗНАЧЕНИЕЗАПОЛНЕНО() или сравнение с NULL:
ЕСЛИ(НЕ ЗНАЧЕНИЕЗАПОЛНЕНО([ВашеПоле]); "Пусто"; "Заполнено")
// или
ЕСЛИ([ВашеПоле] ЕСТЬ NULL; "Пусто"; "Заполнено")
Обратите внимание, что NULL и пустая строка ("") — разные вещи!
Где хранится список всех доступных функций для формул в 1С?
Полный перечень функций зависит от версии платформы и конфигурации. Основные источники:
- Синтакс-помощник в конфигураторе (
Текст → Синтакс-помощникилиF1в редакторе формул). - Документация 1С (раздел "Встроенный язык").
- Справочник по СКД (для функций системы компоновки данных).
Для специфических конфигураций (например, 1С:ERP) могут быть доступны дополнительные функции — их описание ищите в документации к конкретной конфигурации.