Работа с формулами в 1С:Предприятие — одна из самых востребованных задач как для бухгалтеров, так и для программистов. Без правильно составленных выражений невозможно автоматизировать расчеты в отчетах, документах или обработках. Однако многие пользователи сталкиваются с трудностями: где именно вводить формулу, как правильно составить синтаксис, и почему система выдает ошибку вместо ожидаемого результата.
В этой статье мы разберем 7 практических способов добавления формул в 1С — от элементарных арифметических операций в табличных документах до сложных выражений в языке запросов. Вы узнаете, как вставлять формулы в отчеты, документы, обработки и даже в динамические списки, а также получите готовые шаблоны для типовых задач. Особое внимание уделим распространенным ошибкам при работе с датами, ссылками и агрегатными функциями, которые ломают даже опытным пользователям.
Материал будет полезен как начинающим, так и продвинутым пользователям 1С, поскольку охватывает все актуальные версии платформы (8.3.20+). Если вы ищете конкретный способ — воспользуйтесь оглавлением ниже.
1. Формулы в табличных документах 1С
Начнем с самого простого — добавления формул в табличные документы (например, в печатные формы или отчеты с табличной структурой). Этот метод не требует знания программирования и доступен даже пользователям без прав редактирования конфигурации.
Чтобы вставить формулу в ячейку табличного документа:
- Откройте табличный документ (например, через
Отчеты → Печатная форма). - Выделите ячейку, куда нужно добавить формулу.
- Нажмите правой кнопкой мыши и выберите
Свойства ячейки(или используйте горячие клавишиCtrl+Shift+P). - В поле
Формулавведите выражение, например:=СУММ(B2:B10) - Нажмите
ОК— формула будет рассчитана автоматически.
Однако есть и ограничения — например, нельзя ссылаться на данные из базы напрямую (только на другие ячейки таблицы).
- 📌 Пример 1:
=ЕСЛИ(C2>1000; "Большая сумма"; "Малая сумма")— условное форматирование. - 📌 Пример 2:
=СУММЕСЛИ(A2:A10; ">5000"; B2:B10)— сумма с условием. - 📌 Пример 3:
=ДАТА(2026; 12; 31)-СЕГОДНЯ()— количество дней до конца года.
Если формула не считается, проверьте формат ячеек: текстовые значения (например, "1000 руб") не будут восприняты как числа. Используйте функцию ЗНАЧЕН() для преобразования: =СУММ(ЗНАЧЕН(B2:B10))
2. Формулы в отчетах (СКД и обычные)
Отчеты в 1С — это основной инструмент анализа данных, и формулы здесь используются повсеместно. Рассмотрим два варианта: обычные отчеты (на основе системы компоновки данных, СКД) и произвольные отчеты (с ручным программированием).
Для СКД-отчетов (наиболее распространенный случай):
- Откройте отчет в режиме
Конфигуратор(или черезВсе функции → Отчеты). - Перейдите на вкладку
Настройки→Вычисляемые поля. - Добавьте новое поле, укажите имя (например,
ПроцентВыполнения) и введите формулу:Выполнено / План * 100 - Сохраните настройки и обновите отчет.
В произвольных отчетах формулы прописываются непосредственно в коде модуля отчета. Например, чтобы рассчитать среднюю цену продажи:
Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, СтандартнаяОбработка)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(Цена) КАК ОбщаяСумма,
| КОЛИЧЕСТВО(Цена) КАК КоличествоСтрок,
| СУММА(Цена) / КОЛИЧЕСТВО(Цена) КАК СредняяЦена
|ИЗ
| Документ.РеализацияТоваровУслуг КАК Реализация";
Результат = Запрос.Выполнить();
КонецПроцедуры
| Тип отчета | Где вводится формула | Пример синтаксиса |
|---|---|---|
| СКД (система компоновки данных) | Настройки → Вычисляемые поля | ОстатокНаСкладе / 1000 |
| Произвольный отчет | Модуль отчета (в коде) | СУММА(Количество) * СредняяЦена |
| Табличный документ | Свойства ячейки → Формула | =СУММ(B2:B10) |
| Динамический список | Настройки списка → Поля | Выручка - Себестоимость |
Что делать, если формула в СКД не обновляется?
Если вы изменили формулу в вычисляемом поле, но отчет показывает старые данные, попробуйте:
1. Очистить кэш отчета (кнопка "Очистить кэш" в настройках).
2. Перезапустить 1С в режиме предприятия.
3. Проверить, не стоит ли галочка "Использовать кэш" в параметрах отчета.
3. Формулы в документах (расчет сумм, скидок, налогов)
Документы в 1С часто требуют автоматического расчета полей на основе других данных. Например, сумма документа может рассчитываться как Количество * Цена, а скидка — как процент от общей суммы. Рассмотрим, как это реализовать.
Для добавления формулы в документ:
- Откройте документ в режиме
Конфигуратор(например,РеализацияТоваровУслуг). - Перейдите на вкладку
Формы→ откройте форму документа. - Найдите поле, которое нужно рассчитать (например,
СуммаДокумента). - В свойствах поля укажите событие
ПриИзменениии напишите код:Процедура СуммаДокументаПриИзменении(Элемент)СуммаДокумента = Количество Цена (1 - Скидка/100);
КонецПроцедуры
Для типовых конфигураций (например, 1С:Бухгалтерия 3.0 или 1С:УТ 11) многие формулы уже прописаны в модулях. Однако их можно модифицировать. Например, чтобы добавить дополнительную скидку для постоянных клиентов:
Процедура РассчитатьСкидку()
Если Клиент.ЭтоГруппа("Постоянные клиенты") Тогда
Скидка = Скидка + 5; // Дополнительные 5%
КонецЕсли;
КонецПроцедуры
- ⚠️ Типичная ошибка: Забывают обновить форму документа после изменения кода. Всегда нажимайте
F5или кнопкуОбновить. - 🔄 Совет: Для сложных расчетов выносите логику в отдельные функции (например,
РассчитатьИтоговуюСумму()). - 📅 Работа с датами: Используйте
ТекущаяДата()для динамических расчетов (например, скидки по сезону).
Убедитесь, что все поля заполнены корректно|Проверьте приоритет расчетов (скобки в формулах)|Тестируйте на крайних значениях (0, отрицательные числа)|Сохраните документ перед проверкой результата
-->
4. Формулы в языке запросов 1С
Язык запросов 1С — это мощный инструмент для работы с данными, и формулы здесь играют ключевую роль. Они позволяют рассчитывать агрегатные значения, фильтровать данные и создавать произвольные выражения прямо в SQL-подобном синтаксисе.
Основные правила составления формул в запросах:
- 🔢 Арифметика:
СуммаНДС = Сумма * 0.2. - 📊 Агрегатные функции:
СУММА(Количество), СРЕДНЕЕ(Цена). - 🔍 Условные выражения:
ВЫБОР КОГДА Сумма > 10000 ТОГДА "Крупный" ИНАЧЕ "Мелкий" КОНЕЦ. - 🗓️ Работа с датами:
РАЗНОСТЬДАТ(ДатаОплаты, ДатаДокумента, ДЕНЬ).
Пример запроса с формулой для расчета средней прибыли по группам товаров:
ВЫБРАТЬ
Товар.Группа КАК ГруппаТоваров,
СУММА(Реализация.Количество * Реализация.Цена) КАК Выручка,
СУММА(Реализация.Количество * Реализация.Себестоимость) КАК Себестоимость,
(СУММА(Реализация.Количество * Реализация.Цена) -
СУММА(Реализация.Количество * Реализация.Себестоимость)) /
СУММА(Реализация.Количество Реализация.Цена) 100 КАК РентабельностьПроцент
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товар
ПО Реализация.Номенклатура = Товар.Ссылка
СГРУППИРОВАТЬ ПО
Товар.Группа
В запросах 1С нельзя использовать функции из встроенного языка (например, НДС18()). Все вычисления должны быть написаны в SQL-стиле.
Если формула в запросе возвращает ошибку, проверьте:
⚠️ Внимание: В запросах 1С нельзя использовать псевдонимы (алиасы) полей в формулах до их объявления. Например, этот код вызовет ошибку:ВЫБРАТЬСумма * 1.2 КАК СуммаСНДС, // Ошибка: Сумма еще не определена
Сумма
Сначала объявите поле, а потом используйте его в выражениях.
5. Формулы в динамических списках
Динамические списки в 1С позволяют отображать данные из базы с возможностью фильтрации и сортировки. Добавление формул здесь полезно для создания вычисляемых колонок, которые не хранятся в базе, но рассчитываются на лету.
Чтобы добавить формулу в динамический список:
- Откройте форму со списком (например,
Справочник.Номенклатура.ФормаСписка). - Перейдите в режим редактирования формы (
Конфигуратор → Формы). - Найдите элемент
ДинамическийСписоки откройте его настройки. - В разделе
Колонкидобавьте новую колонку, укажите заголовок (например,ПрибыльНаЕдиницу) и в полеВыражениевведите формулу:(ЦенаПродажи - Себестоимость) / Себестоимость * 100
Особенности работы с формулами в динамических списках:
- 🔄 Формулы пересчитываются при каждом обновлении списка (например, при фильтрации).
- ⚡ Для ускорения работы используйте индексированные поля в формулах.
- 🛠️ Если формула тормозит список, вынесите расчет в отдельное поле справочника и обновляйте его по расписанию.
Пример формулы для отображения статуса товара:
ВЫБОР
КОГДА Остаток <= 0 ТОГДА "Нет в наличии"
КОГДА Остаток < 10 ТОГДА "Мало"
ИНАЧЕ "В наличии"
КОНЕЦ
Как ускорить работу динамического списка с формулами?
Если список подвисает при прокрутке, попробуйте:
1. Ограничить количество строк (параметр ПредельноеКоличествоСтрок).
2. Отключить автоматический пересчет формул (событие ПриАктивизацииСтроки).
3. Перенести сложные расчеты в фоновое задание.
6. Формулы в обработках и внешних отчетах
Обработки и внешние отчеты — это гибкие инструменты для расширенной аналитики. Здесь формулы могут быть как простыми (для отображения данных), так и сложными (с использованием встроенного языка).
Рассмотрим пример создания обработки для расчета премий сотрудников на основе продаж:
- Создайте новую обработку (
Файл → Новый → Обработка). - Добавьте таблицу с колонками:
Сотрудник,СуммаПродаж,Премия. - В модуле обработки напишите функцию для расчета премии:
Функция РассчитатьПремию(СуммаПродаж)Если СуммаПродаж > 100000 Тогда
Возврат СуммаПродаж * 0.05; // 5% от суммы
ИначеЕсли СуммаПродаж > 50000 Тогда
Возврат СуммаПродаж * 0.03;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции
- В событии
ПриОткрытиизагрузите данные и примените формулу:Процедура ПриОткрытии()Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Сотрудник, СУММА(Сумма) КАК СуммаПродаж ИЗ Документ.РеализацияТоваровУслуг СГРУППИРОВАТЬ ПО Сотрудник";
Результат = Запрос.Выполнить();
Пока Результат.Следующий() Цикл
НоваяСтрока = ЭлементыФормы.Таблица.Добавить();
НоваяСтрока.Сотрудник = Результат.Сотрудник;
НоваяСтрока.СуммаПродаж = Результат.СуммаПродаж;
НоваяСтрока.Премия = РассчитатьПремию(Результат.СуммаПродаж);
КонецЦикла;
КонецПроцедуры
Преимущества такого подхода:
- 🔧 Гибкость: можно использовать любые функции встроенного языка.
- 📈 Масштабируемость: обработку легко модифицировать под новые требования.
- 🖥️ Переносимость: внешние обработки работают в любой базе 1С.
⚠️ Внимание: При работе с большими объемами данных в обработках используйтеПакетныеЗапросыилиВременныеТаблицы, чтобы избежать зависаний. Пример:Запрос.ПакетныйРежим = Истина;
7. Распространенные ошибки и их исправление
Даже опытные пользователи 1С иногда сталкиваются с ошибками при работе с формулами. Разберем самые частые из них и способы их решения.
| Ошибка | Причина | Решение |
|---|---|---|
Ошибка в выражении: неопределенный идентификатор |
Поле или переменная не объявлены | Проверьте название поля в базе (регистр важен!) |
Тип не совпадает с ожидаемым |
Пытаетесь сложить число и строку | Используйте Число() или Строка() для преобразования |
Некорректный аргумент функции |
Передана неверная дата или число | Проверьте формат данных (например, Дата(2026,12,31)) |
| Формула не обновляется | Кэширование данных | Очистите кэш (Сервис → Очистить кэш) |
Переполнение при вычислении |
Слишком большое число | Используйте тип Число(15,2) вместо стандартного |
Отдельное внимание заслуживают ошибки с датами. Например, если вы пытаетесь вычесть из даты число, не обернув его в День():
// Ошибка:
ДатаОкончания = ДатаНачала + 30;
// Правильно:
ДатаОкончания = ДатаНачала + День(30);
Еще одна типичная проблема — неверное округление. В 1С функция Окр() работает не так, как в 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.Прочитать(Ответ.ПолучитьТекст());
⚠️ Внимание: Для обмена данными между базами требуются права администратора и настройка правил доступа.
Почему формула в отчете считает неверно?
Чаще всего это связано с:
- Неправильной группировкой — проверьте раздел
Группировкав настройках отчета. - Фильтрами — формула может применять только к отфильтрованным данным.
- Типами данных — например, суммирование строк вместо чисел.
Используйте Построитель отчета в режиме отладки (Сервис → Отладка → Пошаговое выполнение), чтобы увидеть промежуточные результаты.
Как сделать формулу с условием (аналог ЕСЛИ в Excel)?
В 1С для этого используется конструкция ВЫБОР.. КОГДА.. ТОГДА.. ИНАЧЕ.. КОНЕЦ. Примеры:
- В табличном документе:
=ЕСЛИ(A1>100; "Большое"; "Малое") - В коде 1С:
Результат = ?(Условие, Значение1, Значение2); // Краткая форма// или
Если Условие Тогда
Результат = Значение1;
Иначе
Результат = Значение2;
КонецЕсли;
- В запросе:
ВЫБОР КОГДА Сумма > 1000 ТОГДА "Крупный" ИНАЧЕ "Мелкий" КОНЕЦ КАК Категория
Где хранится история изменений формул в 1С?
1С не ведет автоматическую историю изменений формул, но вы можете:
- Использовать систему версий (если подключена).
- Включить журнал регистрации (
Администрирование → Журнал регистрации) для отслеживания изменений конфигурации. - Создать внешнюю обработку для резервного копирования формул перед изменением.
Для типовых конфигураций (например, 1С:Бухгалтерия) некоторые формулы хранятся в объектах метаданных — их можно сравнить через Конфигуратор → Сравнить конфигурации.