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

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

Материал будет полезен как начинающим, так и продвинутым пользователям , поскольку охватывает все актуальные версии платформы (8.3.20+). Если вы ищете конкретный способ — воспользуйтесь оглавлением ниже.

📊 Как часто вы используете формулы в 1С?
Ежедневно
Несколько раз в неделю
Редко, только для отчетов
Никогда не пробовал

1. Формулы в табличных документах 1С

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

Чтобы вставить формулу в ячейку табличного документа:

  1. Откройте табличный документ (например, через Отчеты → Печатная форма).
  2. Выделите ячейку, куда нужно добавить формулу.
  3. Нажмите правой кнопкой мыши и выберите Свойства ячейки (или используйте горячие клавиши Ctrl+Shift+P).
  4. В поле Формула введите выражение, например:
    =СУММ(B2:B10)
  5. Нажмите ОК — формула будет рассчитана автоматически.

Однако есть и ограничения — например, нельзя ссылаться на данные из базы напрямую (только на другие ячейки таблицы).

  • 📌 Пример 1: =ЕСЛИ(C2>1000; "Большая сумма"; "Малая сумма") — условное форматирование.
  • 📌 Пример 2: =СУММЕСЛИ(A2:A10; ">5000"; B2:B10) — сумма с условием.
  • 📌 Пример 3: =ДАТА(2026; 12; 31)-СЕГОДНЯ() — количество дней до конца года.
💡

Если формула не считается, проверьте формат ячеек: текстовые значения (например, "1000 руб") не будут восприняты как числа. Используйте функцию ЗНАЧЕН() для преобразования: =СУММ(ЗНАЧЕН(B2:B10))

2. Формулы в отчетах (СКД и обычные)

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

Для СКД-отчетов (наиболее распространенный случай):

  1. Откройте отчет в режиме Конфигуратор (или через Все функции → Отчеты).
  2. Перейдите на вкладку НастройкиВычисляемые поля.
  3. Добавьте новое поле, укажите имя (например, ПроцентВыполнения) и введите формулу:
    Выполнено / План * 100
  4. Сохраните настройки и обновите отчет.

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

Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)

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

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

"ВЫБРАТЬ

| СУММА(Цена) КАК ОбщаяСумма,

| КОЛИЧЕСТВО(Цена) КАК КоличествоСтрок,

| СУММА(Цена) / КОЛИЧЕСТВО(Цена) КАК СредняяЦена

|ИЗ

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

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

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

Тип отчета Где вводится формула Пример синтаксиса
СКД (система компоновки данных) Настройки → Вычисляемые поля ОстатокНаСкладе / 1000
Произвольный отчет Модуль отчета (в коде) СУММА(Количество) * СредняяЦена
Табличный документ Свойства ячейки → Формула =СУММ(B2:B10)
Динамический список Настройки списка → Поля Выручка - Себестоимость
Что делать, если формула в СКД не обновляется?

Если вы изменили формулу в вычисляемом поле, но отчет показывает старые данные, попробуйте:

1. Очистить кэш отчета (кнопка "Очистить кэш" в настройках).

2. Перезапустить 1С в режиме предприятия.

3. Проверить, не стоит ли галочка "Использовать кэш" в параметрах отчета.

3. Формулы в документах (расчет сумм, скидок, налогов)

Документы в часто требуют автоматического расчета полей на основе других данных. Например, сумма документа может рассчитываться как Количество * Цена, а скидка — как процент от общей суммы. Рассмотрим, как это реализовать.

Для добавления формулы в документ:

  1. Откройте документ в режиме Конфигуратор (например, РеализацияТоваровУслуг).
  2. Перейдите на вкладку Формы → откройте форму документа.
  3. Найдите поле, которое нужно рассчитать (например, СуммаДокумента).
  4. В свойствах поля укажите событие ПриИзменении и напишите код:
    Процедура СуммаДокументаПриИзменении(Элемент)
    

    СуммаДокумента = Количество Цена (1 - Скидка/100);

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

Для типовых конфигураций (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11) многие формулы уже прописаны в модулях. Однако их можно модифицировать. Например, чтобы добавить дополнительную скидку для постоянных клиентов:

Процедура РассчитатьСкидку()

Если Клиент.ЭтоГруппа("Постоянные клиенты") Тогда

Скидка = Скидка + 5; // Дополнительные 5%

КонецЕсли;

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

  • ⚠️ Типичная ошибка: Забывают обновить форму документа после изменения кода. Всегда нажимайте F5 или кнопку Обновить.
  • 🔄 Совет: Для сложных расчетов выносите логику в отдельные функции (например, РассчитатьИтоговуюСумму()).
  • 📅 Работа с датами: Используйте ТекущаяДата() для динамических расчетов (например, скидки по сезону).

Убедитесь, что все поля заполнены корректно|Проверьте приоритет расчетов (скобки в формулах)|Тестируйте на крайних значениях (0, отрицательные числа)|Сохраните документ перед проверкой результата

-->

4. Формулы в языке запросов 1С

Язык запросов — это мощный инструмент для работы с данными, и формулы здесь играют ключевую роль. Они позволяют рассчитывать агрегатные значения, фильтровать данные и создавать произвольные выражения прямо в SQL-подобном синтаксисе.

Основные правила составления формул в запросах:

  • 🔢 Арифметика: СуммаНДС = Сумма * 0.2.
  • 📊 Агрегатные функции: СУММА(Количество), СРЕДНЕЕ(Цена).
  • 🔍 Условные выражения: ВЫБОР КОГДА Сумма > 10000 ТОГДА "Крупный" ИНАЧЕ "Мелкий" КОНЕЦ.
  • 🗓️ Работа с датами: РАЗНОСТЬДАТ(ДатаОплаты, ДатаДокумента, ДЕНЬ).

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

ВЫБРАТЬ

Товар.Группа КАК ГруппаТоваров,

СУММА(Реализация.Количество * Реализация.Цена) КАК Выручка,

СУММА(Реализация.Количество * Реализация.Себестоимость) КАК Себестоимость,

(СУММА(Реализация.Количество * Реализация.Цена) -

СУММА(Реализация.Количество * Реализация.Себестоимость)) /

СУММА(Реализация.Количество Реализация.Цена) 100 КАК РентабельностьПроцент

ИЗ

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

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товар

ПО Реализация.Номенклатура = Товар.Ссылка

СГРУППИРОВАТЬ ПО

Товар.Группа

💡

В запросах 1С нельзя использовать функции из встроенного языка (например, НДС18()). Все вычисления должны быть написаны в SQL-стиле.

Если формула в запросе возвращает ошибку, проверьте:

⚠️ Внимание: В запросах нельзя использовать псевдонимы (алиасы) полей в формулах до их объявления. Например, этот код вызовет ошибку:
ВЫБРАТЬ

Сумма * 1.2 КАК СуммаСНДС, // Ошибка: Сумма еще не определена

Сумма

Сначала объявите поле, а потом используйте его в выражениях.

5. Формулы в динамических списках

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

Чтобы добавить формулу в динамический список:

  1. Откройте форму со списком (например, Справочник.Номенклатура.ФормаСписка).
  2. Перейдите в режим редактирования формы (Конфигуратор → Формы).
  3. Найдите элемент ДинамическийСписок и откройте его настройки.
  4. В разделе Колонки добавьте новую колонку, укажите заголовок (например, ПрибыльНаЕдиницу) и в поле Выражение введите формулу:
    (ЦенаПродажи - Себестоимость) / Себестоимость * 100

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

  • 🔄 Формулы пересчитываются при каждом обновлении списка (например, при фильтрации).
  • ⚡ Для ускорения работы используйте индексированные поля в формулах.
  • 🛠️ Если формула тормозит список, вынесите расчет в отдельное поле справочника и обновляйте его по расписанию.

Пример формулы для отображения статуса товара:

ВЫБОР

КОГДА Остаток <= 0 ТОГДА "Нет в наличии"

КОГДА Остаток < 10 ТОГДА "Мало"

ИНАЧЕ "В наличии"

КОНЕЦ

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

Если список подвисает при прокрутке, попробуйте:

1. Ограничить количество строк (параметр ПредельноеКоличествоСтрок).

2. Отключить автоматический пересчет формул (событие ПриАктивизацииСтроки).

3. Перенести сложные расчеты в фоновое задание.

6. Формулы в обработках и внешних отчетах

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

Рассмотрим пример создания обработки для расчета премий сотрудников на основе продаж:

  1. Создайте новую обработку (Файл → Новый → Обработка).
  2. Добавьте таблицу с колонками: Сотрудник, СуммаПродаж, Премия.
  3. В модуле обработки напишите функцию для расчета премии:
    Функция РассчитатьПремию(СуммаПродаж)
    

    Если СуммаПродаж > 100000 Тогда

    Возврат СуммаПродаж * 0.05; // 5% от суммы

    ИначеЕсли СуммаПродаж > 50000 Тогда

    Возврат СуммаПродаж * 0.03;

    Иначе

    Возврат 0;

    КонецЕсли;

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

  4. В событии ПриОткрытии загрузите данные и примените формулу:
    Процедура ПриОткрытии()
    

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

    Запрос.Текст = "ВЫБРАТЬ Сотрудник, СУММА(Сумма) КАК СуммаПродаж ИЗ Документ.РеализацияТоваровУслуг СГРУППИРОВАТЬ ПО Сотрудник";

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

    Пока Результат.Следующий() Цикл

    НоваяСтрока = ЭлементыФормы.Таблица.Добавить();

    НоваяСтрока.Сотрудник = Результат.Сотрудник;

    НоваяСтрока.СуммаПродаж = Результат.СуммаПродаж;

    НоваяСтрока.Премия = РассчитатьПремию(Результат.СуммаПродаж);

    КонецЦикла;

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

Преимущества такого подхода:

  • 🔧 Гибкость: можно использовать любые функции встроенного языка.
  • 📈 Масштабируемость: обработку легко модифицировать под новые требования.
  • 🖥️ Переносимость: внешние обработки работают в любой базе .
⚠️ Внимание: При работе с большими объемами данных в обработках используйте ПакетныеЗапросы или ВременныеТаблицы, чтобы избежать зависаний. Пример:
Запрос.ПакетныйРежим = Истина;

7. Распространенные ошибки и их исправление

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

Ошибка Причина Решение
Ошибка в выражении: неопределенный идентификатор Поле или переменная не объявлены Проверьте название поля в базе (регистр важен!)
Тип не совпадает с ожидаемым Пытаетесь сложить число и строку Используйте Число() или Строка() для преобразования
Некорректный аргумент функции Передана неверная дата или число Проверьте формат данных (например, Дата(2026,12,31))
Формула не обновляется Кэширование данных Очистите кэш (Сервис → Очистить кэш)
Переполнение при вычислении Слишком большое число Используйте тип Число(15,2) вместо стандартного

Отдельное внимание заслуживают ошибки с датами. Например, если вы пытаетесь вычесть из даты число, не обернув его в День():

// Ошибка:

ДатаОкончания = ДатаНачала + 30;

// Правильно:

ДатаОкончания = ДатаНачала + День(30);

Еще одна типичная проблема — неверное округление. В функция Окр() работает не так, как в Excel. Например:

// В Excel: =ОКРУГЛ(1.555; 2) → 1.56

// В 1С:

Окр(1.555, 2, 1) // → 1.55 (округление вниз)

Окр(1.555, 2, 2) // → 1.56 (округление к ближайшему)

💡

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

FAQ: Частые вопросы по формулам в 1С

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

Откройте печатную форму в режиме редактирования (Конфигуратор → Печатные формы). Выделите ячейку, куда нужно добавить формулу, и в свойствах укажите выражение в поле Формула. Например:

=СУММ(ТабличнаяЧасть.Сумма)

Для динамических данных используйте параметры формы (например, =Параметры.ИтоговаяСумма).

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

Да, но для этого нужно настроить распределенную информационную базу (РИБ) или использовать HTTP-Сервисы/COM-соединение. Простой пример через HTTP:

Запрос = Новый HTTPЗапрос("http://другая_база/hs/exchange/get_data");

Ответ = Запрос.Выполнить();

Данные = JSON.Прочитать(Ответ.ПолучитьТекст());

⚠️ Внимание: Для обмена данными между базами требуются права администратора и настройка правил доступа.

Почему формула в отчете считает неверно?

Чаще всего это связано с:

  1. Неправильной группировкой — проверьте раздел Группировка в настройках отчета.
  2. Фильтрами — формула может применять только к отфильтрованным данным.
  3. Типами данных — например, суммирование строк вместо чисел.

Используйте Построитель отчета в режиме отладки (Сервис → Отладка → Пошаговое выполнение), чтобы увидеть промежуточные результаты.

Как сделать формулу с условием (аналог ЕСЛИ в Excel)?

В для этого используется конструкция ВЫБОР.. КОГДА.. ТОГДА.. ИНАЧЕ.. КОНЕЦ. Примеры:

  • В табличном документе:
    =ЕСЛИ(A1>100; "Большое"; "Малое")
  • В коде 1С:
    Результат = ?(Условие, Значение1, Значение2); // Краткая форма
    

    // или

    Если Условие Тогда

    Результат = Значение1;

    Иначе

    Результат = Значение2;

    КонецЕсли;

  • В запросе:
    ВЫБОР КОГДА Сумма > 1000 ТОГДА "Крупный" ИНАЧЕ "Мелкий" КОНЕЦ КАК Категория
Где хранится история изменений формул в 1С?

не ведет автоматическую историю изменений формул, но вы можете:

  1. Использовать систему версий (если подключена).
  2. Включить журнал регистрации (Администрирование → Журнал регистрации) для отслеживания изменений конфигурации.
  3. Создать внешнюю обработку для резервного копирования формул перед изменением.

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