CLN Section 35 · Domain Object Notation

Язык
объектов
для всей команды

DON — типизированная нотация для адресации объектов метаданных 1С в технической документации. Аналитик пишет ФТ с токенами {doc:...}, программист получает однозначное ТЗ и генерирует код.

ФТ-031.cln
%version: 2.17 %profile: domain @schema: УПП 1С:Предприятие 8.3
SPEC: ФТ-031 · Загрузка отчёта производства
    = цель         . создать {doc:ОтчетПроизводства}         @ модуль: {sub:Производство}
    = заполнить {tab:Продукция}         . {attr:Номенклатура} ← item         . {attr:Количество} ← qty         . выполнить {cmd:Провести}
    ! {attr:Номенклатура} пустая         → пропустить строку !!
11 prefix
Нормативный реестр 1С-объектов
1 regex
Парсит все токены: \{[a-z]{2,6}:[^\s{}]+\}
2 слоя
ФТ (аналитик) → ТЗ (программист)
0 конфликтов
Не пересекается с операторами CLN
Процесс

От задачи до кода

DON — связующее звено между описанием бизнес-логики и реализацией. Каждый участник работает на своём языке, но ссылается на одни и те же объекты.

01
Бизнес-требование
Заказчик / BA
Словами описывает что нужно сделать
02
ФТ с DON-токенами
Аналитик
CLN-документ с типизированными объектами
03
ТЗ (трансляция)
Программист
Таблица маппинга DON → A1sCode API
04
Код 1С
Программист
BSL с комментариями-токенами для трассировки
05
Проверка
QA / Заказчик
Каждый DON-токен → конкретный тест

Полный A1sCode-пайплайн для сценария загрузки:

источник
JSON / Excel
МассивСтруктур
DON
RenameFields
маппинг из TOON-макета
A1sDS · A1sToon
валидация
A1sVal
режим Skip/Strict
A1sVal
загрузка
Pipeline
IntoDoc → LoadTab
A1sPipeline
результат
DocRef
провести / вернуть
A1sDocs
Реестр

Префиксы 1С

11 базовых префиксов покрывают всю иерархию метаданных 1С:Предприятие. Расширяемо через профиль проекта.

cfg
Конфигурация
{cfg:БухгалтерияПредприятия}
sub
Подсистема
{sub:Банк}
doc
Документ
{doc:ОтчетПроизводства}
cat
Справочник
{cat:Номенклатура}
reg
Регистр (любой)
{reg:ЦеныНоменклатуры}
enum
Перечисление
{enum:ВидыОпераций}
tab
Табличная часть
{tab:Продукция}
attr
Реквизит
{attr:Номенклатура}
cmd
Команда / действие
{cmd:Провести}
form
Форма
{form:ФормаДокумента}
proc
Бизнес-процесс
{proc:СогласованиеСчёта}
custom
Проектный префикс
%profile: domain +prefix:xyz

Правило: 2–6 строчных ASCII-символов · двоеточие без пробелов · Имя без пробелов (Unicode OK)

Пример

ФТ → ТЗ → Код

Полный сценарий: автоподстановка цены в документ при выборе номенклатуры.

ФТ-101 · Автоподстановка цены FT Layer · DON
%version: 2.17
%profile: domain
@schema: УПП · 1С:Предприятие 8.3

SPEC: ФТ-101 · Подстановка цены

    =  контекст
        *  документ {doc:ОтчетПроизводства}
        *  ТЧ {tab:Продукция}
        *  регистр {reg:ЦеныНоменклатуры}

    =  что сделать
        .  при выборе {attr:Номенклатура}
           в строке {tab:Продукция}
              подставить цену из
                 {reg:ЦеныНоменклатуры}
                 на дату документа
              пересчитать
                 {attr:Сумма} = Цена × Количество

    !  только при интерактивном вводе  !!
    !  без блокировки интерфейса  !!
Что этот ФТ даёт аналитик пишет

Программист читает ФТ и немедленно знает:


{doc:ОтчетПроизводства} — это документ, не справочник

{reg:ЦеныНоменклатуры} — регистр сведений, нужен срез

→ событие — только ПриИзменении, не при загрузке


Без DON: «заполнить цену из регистра цен» — какого регистра? какого среза?


С DON: каждый объект однозначен. Линтер проверит что {reg:ЦеныНоменклатуры} существует в конфигурации.

ТЗ-101 · Реализация TZ Layer
SPEC: ТЗ-101 · Подстановка цены

    =  таблица трансляции
DON (ФТ) A1sCode / BSL
{doc:ОтчетПроизводства} ЭтотОбъект
{tab:Продукция} ЭтотОбъект.Продукция
{reg:ЦеныНоменклатуры} A1sReg.CutOffLast("ЦеныНоменклатуры",...)
{attr:Номенклатура} СтрокаТЧ.Номенклатура
{attr:Сумма} СтрокаТЧ.Сумма
Метаданные и форма конфигуратор
=  метаданные
    .  проверить: {tab:Продукция}
       в {doc:ОтчетПроизводства}
    .  добавить если нет:
        *  {attr:Цена} — Число(15,2)
        *  {attr:Сумма} — Число(15,2)

=  форма
    .  добавить колонки в
         {form:ФормаДокумента}
    .  обработчик ПриИзменении
         на {attr:Номенклатура}

=  тест
    .  выбрать номенклатуру → цена
    .  загрузка через обработку
         → подстановка НЕ срабатывает
Модуль формы — стандартный BSL BSL
// {attr:Номенклатура} → {reg:ЦеныНоменклатуры}
// ФТ-101 · Подстановка цены

&НаКлиенте
Процедура ПродукцияНоменклатураПриИзменении(Элемент)
    ПодставитьЦену(Элемент.ТекущиеДанные);
КонецПроцедуры

&НаСервере
Процедура ПодставитьЦену(СтрТЧ)
    // {attr:Номенклатура} → СтрТЧ.Номенклатура
    Если СтрТЧ.Номенклатура.Пустая() Тогда
        Возврат;
    КонецЕсли;

    // {reg:ЦеныНоменклатуры} срез на дату {doc}
    Цена = A1sReg.CutOffLast(
        "ЦеныНоменклатуры",
        ЭтотОбъект.Дата,
        A1sDS.Of("Номенклатура",
                 СтрТЧ.Номенклатура)).Цена;

    Если Цена <> Неопределено Тогда
        СтрТЧ.Цена  = Цена;
        // {attr:Сумма} = Цена × Количество
        СтрТЧ.Сумма = СтрТЧ.Количество * Цена;
    КонецЕсли;
КонецПроцедуры
С A1sCode (компактно) A1sCode
// A1sCode-версия — меньше шаблонного кода

&НаСервере
Процедура ПодставитьЦенуA1s(СтрТЧ)
    Если СтрТЧ.Номенклатура.Пустая() Тогда
        Возврат;
    КонецЕсли;

    Цена = A1sReg.CutOffLast(
        "ЦеныНоменклатуры",
        ЭтотОбъект.Дата,
        A1sDS.Of(
            "Номенклатура",
            СтрТЧ.Номенклатура)).Цена;

    Если Цена <> Неопределено Тогда
        СтрТЧ.Цена  = Цена;
        СтрТЧ.Сумма =
            СтрТЧ.Количество * Цена;
    КонецЕсли;
КонецПроцедуры

DON-комментарии в коде создают трассировку ФТ → код. Линтер может проверить что каждый токен ФТ присутствует хотя бы в одном комментарии.

Валидация

Что проверяет линтер

При включённом %profile: domain валидатор проверяет все DON-токены в документе.

WARN [DON:UNKNOWN-PREFIX xyz] Префикс {xyz:...} не найден в реестре. Проверьте опечатку или добавьте через %profile: domain +prefix:xyz.
WARN [DON:MALFORMED-TOKEN] Токен не соответствует формату {prefix:Name} — пробел в имени, двойные скобки или отсутствует двоеточие.
WARN [DON:FT-TZ-MIX] В одном блоке = смешаны DON-токены (ФТ-слой) и имена API/функций (ТЗ-слой). Разделите на два отдельных блока.
WARN [DON:MALFORMED-PATH] Path-нотация нарушена: пустой сегмент (//) или trailing slash. Путь должен читаться слева направо без пропусков.
WARN [TE-1:UNUSED-ALIAS alias] Алиас alias := {doc:...} определён, но не используется нигде в документе. Удалите или начните использовать.
OK
Токен в Content-слоте
DON-токены живут только в Content-части строки CLN — никогда в позиции оператора.
= создать {doc:ОтчетПроизводства} ✓
!
FT/TZ разделение
ФТ-блок содержит только DON-токены. ТЗ-блок содержит только имена API. Смешивать — линтер выдаёт предупреждение.
✗ {tab:Продукция} + A1sDocs.LoadRows в одном =
:=
Алиасы для длинных путей
Часто используемые пути определяйте один раз через := и ссылайтесь по символу.
ТЧП := {doc:ОтчетПроизводства}/{tab:Продукция}
/
Path-нотация
Вложенность объектов выражается через / — от внешнего к внутреннему. Без пробелов вокруг слеша.
{doc:X}/{tab:Y}/{attr:Z} ✓
Начать

Три строки для активации

Добавьте в начало любого CLN-документа с требованиями — и DON-валидация включится автоматически.

ФТ-001.cln скопировать и вставить
%version: 2.17
%profile: domain
@schema: ВашаКонфигурация · 1С:Предприятие 8.3

SPEC: ФТ-001 · Название задачи

    =  цель
        .  создать {doc:ВашДокумент}
        .  заполнить {tab:ВашаТЧ}
        .  выполнить {cmd:Провести}
Полная документация Спека CLN v2.17 Библиотека A1sCode →