Разработка и Конфигурация · 11 мин
Что такое алгоритм в 1С и как с ним работать
Что такое алгоритм в 1С: где хранятся алгоритмы, как их создавать и вызывать, типичные примеры кода, ошибки и проверка результата. Практическое руководство.
Термин «алгоритм» в контексте 1С употребляется в нескольких значениях, и это часто путает начинающих пользователей и разработчиков. В самом широком смысле алгоритм — это последовательность действий, записанная на встроенном языке 1С, которая выполняет конкретную задачу: рассчитывает цену, проверяет заполнение документа, формирует проводки. Но в ряде типовых решений, например в «1С:Конвертация данных» или в механизмах обмена, «алгоритм» — это отдельный объект настройки, который хранится в базе как текст и вызывается по имени.
Понимание того, о каком именно алгоритме идёт речь, критично для практической работы. От этого зависит, где искать код, как его изменять и какие риски несёт правка. Ошибка в алгоритме обмена может привести к порче данных в обеих базах, а ошибка в алгоритме расчёта — к неверным суммам в документах и отчётах.
Материал ниже разбирает основные виды алгоритмов в 1С, способы их создания и вызова, типичные сценарии использования и границы безопасной самостоятельной доработки.
Что скрывается за словом «алгоритм» в экосистеме 1С
В классическом программировании алгоритм — это абстрактная последовательность шагов. В 1С этот термин приобрёл прикладное значение. Практически любой обработчик события, процедура расчёта или функция преобразования данных в обиходе называются алгоритмом. Когда пользователь говорит «поправьте алгоритм расчёта скидки», он имеет в виду конкретный фрагмент кода в модуле документа или общем модуле.
Отдельная категория — алгоритмы как объекты метаданных или данные. В «1С:Конвертация данных» алгоритмы — это именованные фрагменты кода, которые хранятся в правилах обмена и выполняются при выгрузке и загрузке. В некоторых отраслевых решениях существуют справочники «Алгоритмы» или «Произвольные выражения», где текст хранится прямо в базе и исполняется через встроенный механизм выполнения кода. Такой подход позволяет менять логику без обновления конфигурации, но требует особой осторожности.
Где хранятся и как вызываются алгоритмы
Основное место хранения алгоритмической логики — модули конфигурации. Код в модуле объекта, модулях форм, общих модулях и модулях менеджеров исполняется при наступлении событий: записи документа, проведении, открытии формы, нажатии кнопки. Такие алгоритмы изменяются только в конфигураторе и требуют обновления конфигурации базы данных.
Второй вариант — алгоритмы, хранящиеся в данных. Типичный пример — правила конвертации: текст алгоритма «Перед выгрузкой» или «После загрузки» находится в файле правил или в справочнике настроек обмена. Исполнение происходит через функции Выполнить() и Вычислить() встроенного языка. То же относится к произвольным выражениям в настройках ценообразования, сегментов или шаблонов сообщений в некоторых конфигурациях.
Третий вариант — внешние обработки и отчёты. Это файлы с расширением .epf и .erf, содержащие самостоятельные алгоритмы. Их запускает пользователь вручную или планировщик заданий. Такой формат удобен для разовых операций: массовой обработки данных, загрузки из файлов, служебных проверок.
Сравнение вариантов хранения
Максимальная надёжность и контроль версий, но любое изменение требует обновления конфигурации и остановки работы при динамическом обновлении
Меняются без обновления конфигурации, но сложнее отлаживать и легко сломать логику без контроля
Подходят для разовых и сервисных задач, не влияют на конфигурацию, но запускаются вручную или по расписанию
Как создать алгоритм в модуле конфигурации
Базовый сценарий — добавление процедуры или функции в общий модуль. Откройте конфигуратор, найдите подходящий общий модуль (или создайте новый в ветке «Общие модули» дерева конфигурации) и опишите алгоритм с явными параметрами и возвращаемым значением. Хорошая практика — делать алгоритм функцией, которая получает данные на вход и возвращает результат, не меняя состояние базы без необходимости.
Пример простого алгоритма расчёта суммы со скидкой:
Функция РассчитатьСуммуСоСкидкой(Сумма, ПроцентСкидки) Экспорт
Если ПроцентСкидки < 0 Или ПроцентСкидки > 100 Тогда
ВызватьИсключение "Недопустимый процент скидки";
КонецЕсли;
Возврат Сумма * (100 - ПроцентСкидки) / 100;
КонецФункции
После написания кода обязательно проверьте синтаксис (меню «Конфигурация — Проверка конфигурации»), затем выполните обновление конфигурации базы данных в тестовой копии. Вызов алгоритма из другого модуля выглядит так: ИтоговаяСумма = ОбщегоНазначенияРасчеты.РассчитатьСуммуСоСкидкой(СуммаДокумента, 10);.
Алгоритмы в правилах обмена и конвертации данных
В обменах между базами 1С алгоритмы — основной инструмент тонкой настройки. Они выполняются на определённых этапах: перед выгрузкой объекта, при выгрузке, после загрузки, при конвертации свойств. Текст пишется на встроенном языке, но с ограничениями: часть объектов и методов недоступна, а контекст исполнения отличается от обычного модуля.
Типичная задача — при загрузке документа подставить склад по умолчанию, если в источнике он не заполнен, или преобразовать значение реквизита по таблице соответствий. Такие алгоритмы редактируются в конфигурации «Конвертация данных» либо непосредственно в настройках обмена, если типовое решение это позволяет.
Главный риск — алгоритм обмена исполняется без диалогов с пользователем и может массово изменить данные. Любую правку правил сначала тестируйте на копиях обеих баз, участвующих в обмене, и проверяйте результат выборочно по нескольким объектам.
Как проверить, что алгоритм работает правильно
Проверка алгоритма строится на трёх уровнях. Первый — синтаксический: конфигуратор или встроенная проверка выражения должны подтвердить отсутствие ошибок компиляции. Второй — функциональный: алгоритм запускается на контрольных примерах с заранее известным результатом. Для расчётных алгоритмов подготовьте 3–5 тестовых случаев, включая граничные значения: ноль, максимальная скидка, пустые реквизиты.
Третий уровень — регрессионный: убедитесь, что изменение не сломало смежные механизмы. Если правили алгоритм расчёта цены, проверьте не только документ продажи, но и отчёты по продажам, печатные формы и обмены, где эта цена используется. Для отладки используйте конфигуратор с точкой отладки в клиентском приложении — это позволяет пошагово пройти код и посмотреть значения переменных.
Как проверить результат
Проверка конфигурации завершается без ошибок
Ошибки компиляции модуля, недоступные переменные
Результат совпадает с рассчитанным вручную
Расхождения на граничных значениях, округлениях
Отчёты, печать и обмены показывают корректные данные
В отчётах старые или искажённые значения
Алгоритм выдаёт понятное сообщение и не изменяет данные
Молчаливое падение или запись некорректных значений
Типичные ошибки при работе с алгоритмами
Самая распространённая ошибка — правка алгоритма без понимания, откуда он вызывается. Один и тот же общий модуль может использоваться десятком документов и регламентных заданий, и «безобидное» изменение ломает неожиданные участки. Перед правкой найдите все места вызова через поиск по конфигурации.
Вторая группа ошибок — работа с алгоритмами в данных. Текст, исполняемый через Выполнить(), не проверяется при сохранении конфигурации, поэтому синтаксическая ошибка обнаруживается только в момент выполнения — часто ночью, при регламентном обмене. Всегда тестируйте такой текст принудительным запуском после редактирования.
Третья типичная проблема — отсутствие обработки исключительных ситуаций. Алгоритм, который падает на пустом значении или делении на ноль, в пакетном режиме может прервать обработку тысяч объектов. Используйте конструкцию Попытка ... Исключение ... КонецПопытки с записью ошибки в журнал регистрации, чтобы проблема была видна и локализована.
Когда стоит привлекать специалиста
Самостоятельная работа оправдана для простых вычислительных алгоритмов, внешних обработок разового действия и правок, не затрагивающих учётные регистры. Если алгоритм влияет на проведение документов, расчёт себестоимости, налоги, зарплату или обмен с другими системами, цена ошибки резко возрастает — вплоть до искажения отчётности.
Признак того, что задача выходит за границы безопасной самостоятельной доработки: алгоритм изменяет движения по регистрам, участвует в закрытии периода или исполняется на стороне другой базы при обмене. В таких случаях минимум — тестирование на копии с участием человека, который понимает учётную логику, а не только синтаксис языка.
Как выбрать действие
Частые вопросы об алгоритмах в 1С
Чем алгоритм отличается от обработчика события?
Обработчик события — это процедура, привязанная к событию платформы (например, «ПриЗаписи» документа). Алгоритм — это сама логика, которая может находиться внутри обработчика или вызываться из него как отдельная функция. Один обработчик может вызывать несколько алгоритмов, а один алгоритм — использоваться в разных обработчиках.
Можно ли изменить алгоритм без снятия конфигурации с поддержки?
Да, для типовых конфигураций основной инструмент — расширения. Они позволяют переопределить или дополнить процедуры и функции без изменения основной конфигурации. Дополнительно в ряде типовых решений есть встроенные механизмы настраиваемых алгоритмов и произвольных выражений.
Как посмотреть, какой алгоритм выполняется при обмене?
Откройте настройки обмена или файл правил конвертации и найдите разделы алгоритмов и обработчиков: «Перед выгрузкой», «После загрузки», «При конвертации свойств». Также полезно включить подробный протокол обмена — в нём видно, на каком объекте и этапе возникает ошибка.
Почему алгоритм работает в отладчике, но не работает в регламентном задании?
Чаще всего причина в контексте исполнения: регламентное задание выполняется на сервере без пользовательского интерфейса, поэтому недоступны модальные вызовы, интерактивные функции и часть клиентских объектов. Также проверьте права пользователя, от имени которого выполняется задание.
Опасно ли использовать Выполнить() и Вычислить() для алгоритмов в данных?
Эти методы исполняют произвольный код, поэтому текст алгоритма должен быть доступен для редактирования только доверенным администраторам. Дополнительный риск — синтаксические ошибки обнаруживаются только при выполнении, поэтому каждый такой алгоритм нужно принудительно тестировать после правки.
Что важно запомнить
Алгоритм в 1С — это код на встроенном языке, решающий конкретную задачу: в модулях конфигурации, правилах обмена или внешних обработках. Перед правкой определите, где алгоритм хранится и кто его вызывает, работайте на копии, тестируйте на контрольных примерах и граничных значениях. Изменения, затрагивающие регистры, налоги или обмены, безопаснее доверить специалисту.