C/AL¶
C/AL (Client/server Application Language) — это язык программирования, разработанный компанией Microsoft для создания бизнес-логики в системах управления ресурсами предприятия (ERP) на платформе Microsoft Dynamics NAV (ранее Navision). C/AL является интерпретируемым языком высокого уровня, ориентированным на работу с базами данных и реализацию алгоритмов обработки финансовых, складских, производственных и других бизнес-процессов. С 2018 года, с выходом Dynamics 365 Business Central, язык C/AL постепенно вытесняется новым языком AL (Application Language), однако значительная часть существующих решений по-прежнему написана на C/AL.
¶История
¶Происхождение
Язык C/AL был создан в 1990-х годах датской компанией Navision Software A/S (основана в 1984 году). Изначально он назывался просто «C/AL» и использовался в ERP-системе Navision. После приобретения Navision корпорацией Microsoft в 2002 году система была переименована в Microsoft Dynamics NAV, а язык C/AL остался основным инструментом разработки.
¶Развитие
На протяжении 2000-х годов C/AL развивался параллельно с платформой Dynamics NAV. В версиях NAV 2009, 2013, 2015, 2016 и 2018 вносились изменения в синтаксис, добавлялись новые типы данных и функции. В 2018 году Microsoft выпустила Dynamics 365 Business Central — облачную версию системы, где основным языком стал AL. C/AL объявлен устаревшим, но поддержка существующих проектов на нём сохраняется.
¶Синтаксис и особенности
¶Типы данных
C/AL поддерживает следующие основные типы данных:
- Text — строка символов (до 250 символов в стандартной реализации, до 1024 в расширенной).
- Code — строка, содержащая только буквы и цифры.
- Integer — целое число (32-битное).
- Decimal — десятичное число с фиксированной точностью.
- Boolean — логическое значение (TRUE/FALSE).
- Date — дата.
- Time — время.
- DateTime — дата и время.
- Record — ссылка на запись в таблице базы данных.
- RecordID — идентификатор записи.
¶Операторы
Язык включает стандартные арифметические (+, -, *, /, MOD), логические (AND, OR, NOT) и операторы сравнения (=, <>, <, >, <=, >=). Также поддерживается конкатенация строк с помощью оператора +.
¶Управляющие конструкции
- IF ... THEN ... ELSE — условный оператор.
- CASE — оператор выбора.
- FOR ... TO ... DO — цикл с фиксированным числом итераций.
- WHILE ... DO — цикл с предусловием.
- REPEAT ... UNTIL — цикл с постусловием.
- EXIT — досрочный выход из цикла или функции.
¶Функции и процедуры
C/AL поддерживает создание пользовательских функций (процедур) с параметрами и возвращаемыми значениями. Функции могут быть локальными (внутри объекта) или глобальными (доступными из других объектов). Стандартная библиотека включает множество встроенных функций для работы с базами данных, строками, числами, датами и бизнес-логикой.
¶Работа с базой данных
Основная особенность C/AL — тесная интеграция с реляционной базой данных. Язык позволяет:
- Создавать, читать, обновлять и удалять записи (CRUD-операции).
- Использовать фильтры и сортировку.
- Выполнять транзакции (COMMIT, ROLLBACK).
- Работать с временными таблицами и представлениями.
¶Объекты в C/AL
¶Таблицы (Table)
Таблицы — это основные объекты для хранения данных. Каждая таблица содержит поля (колонки) и ключи (индексы). В C/AL код пишется непосредственно в триггерах таблицы (например, OnInsert, OnModify, OnDelete) для реализации бизнес-правил.
¶Страницы (Page)
Страницы — это пользовательский интерфейс для отображения и редактирования данных. В C/AL код может быть привязан к событиям страницы (OnOpenPage, OnClosePage, OnAction) для обработки действий пользователя.
¶Отчёты (Report)
Отчёты генерируют печатные формы или электронные документы. В C/AL реализуется логика выборки данных, расчётов и форматирования.
¶Codeunit
Codeunit — это модуль, содержащий только логику (без пользовательского интерфейса). Используется для реализации бизнес-процессов, вызовов API, интеграций.
¶XMLport
XMLport — объект для импорта и экспорта данных в формате XML.
¶Query
Query — объект для выполнения сложных SQL-запросов к базе данных.
¶Применение
¶Разработка ERP-систем
C/AL применяется для настройки и расширения функциональности Microsoft Dynamics NAV. С его помощью реализуются:
- Учёт товаров, материалов и готовой продукции.
- Финансовый учёт (бухгалтерия, налоги, бюджетирование).
- Управление закупками и продажами.
- Производственное планирование.
- Управление персоналом и заработной платой.
- Логистика и складские операции.
¶Интеграция с другими системами
C/AL позволяет подключать Dynamics NAV к внешним системам через веб-сервисы (SOAP, REST), обмен файлами (CSV, XML) и прямые вызовы COM-объектов.
¶Примеры кода
Пример простой функции на C/AL, вычисляющей сумму двух чисел: `` PROCEDURE AddNumbers(Number1 : Integer; Number2 : Integer) : Integer BEGIN EXIT(Number1 + Number2); END; ``
Пример обработки события вставки записи в таблицу: `` OnInsert() BEGIN IF "Total Amount" = 0 THEN "Total Amount" := "Unit Price" * "Quantity"; INSERT; END; ``
¶Преимущества и недостатки
¶Преимущества
- Простота — синтаксис близок к Pascal, легко изучается.
- Интеграция с базой данных — прямой доступ к данным без написания SQL-запросов.
- Богатая стандартная библиотека — множество готовых функций для бизнес-задач.
- Многолетняя поддержка — большое количество готовых решений и сообществ разработчиков.
¶Недостатки
- Устаревание — Microsoft прекратила развитие C/AL в пользу AL.
- Ограниченная производительность — интерпретируемый язык медленнее компилируемых.
- Отсутствие поддержки современных парадигм — нет объектно-ориентированного программирования, лямбда-выражений, асинхронности.
- Сложность отладки — отладка возможна только в среде разработки Dynamics NAV.
¶Переход на AL
С 2018 года Microsoft рекомендует использовать язык AL для разработки в Dynamics 365 Business Central. AL — это современный, компилируемый язык, основанный на C/AL, но с улучшенным синтаксисом, поддержкой модульности, расширений (extensions) и интеграцией с Visual Studio Code. Существующий код на C/AL может быть перенесён в AL с помощью инструментов конвертации, однако требуется ручная доработка.
¶Интересные факты
- Название C/AL расшифровывается как «Client/server Application Language», что подчёркивает его изначальную архитектуру — клиент-серверное взаимодействие.
- В версиях Dynamics NAV до 2009 года использовался классический клиент (WinForms), а начиная с NAV 2009 — веб-клиент и клиент для Windows.
- Язык C/AL не является объектно-ориентированным, но поддерживает наследование через триггеры и события.
- Крупнейшие российские компании, использующие Dynamics NAV с C/AL, включают розничные сети, производственные предприятия и логистические операторы.
¶Источники
- Microsoft Dynamics NAV 2018 Developer Guide (Microsoft Press, 2018).
- Документация Microsoft по языку C/AL (MSDN, 2009–2018).
- «Разработка в Microsoft Dynamics NAV» (А. В. Громов, 2015).
- Статьи на портале Dynamics User Group (DYNAMICSUSERGROUP.COM).
- Справочник по функциям C/AL (Microsoft Dynamics NAV Help).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →

