DON — типизированная нотация для адресации объектов метаданных 1С в технической документации. Аналитик пишет ФТ с токенами {doc:...}, программист получает однозначное ТЗ и генерирует код.
DON — связующее звено между описанием бизнес-логики и реализацией. Каждый участник работает на своём языке, но ссылается на одни и те же объекты.
Полный A1sCode-пайплайн для сценария загрузки:
11 базовых префиксов покрывают всю иерархию метаданных 1С:Предприятие. Расширяемо через профиль проекта.
Правило: 2–6 строчных ASCII-символов · двоеточие без пробелов · Имя без пробелов (Unicode OK)
Полный сценарий: автоподстановка цены в документ при выборе номенклатуры.
%version: 2.17 %profile: domain @schema: УПП · 1С:Предприятие 8.3 SPEC: ФТ-101 · Подстановка цены = контекст * документ {doc:ОтчетПроизводства} * ТЧ {tab:Продукция} * регистр {reg:ЦеныНоменклатуры} = что сделать . при выборе {attr:Номенклатура} в строке {tab:Продукция} → подставить цену из {reg:ЦеныНоменклатуры} на дату документа → пересчитать {attr:Сумма} = Цена × Количество ! только при интерактивном вводе !! ! без блокировки интерфейса !!
Программист читает ФТ и немедленно знает:
→ {doc:ОтчетПроизводства} — это документ, не справочник
→ {reg:ЦеныНоменклатуры} — регистр сведений, нужен срез
→ событие — только ПриИзменении, не при загрузке
Без DON: «заполнить цену из регистра цен» — какого регистра? какого среза?
С DON: каждый объект однозначен. Линтер проверит что {reg:ЦеныНоменклатуры} существует в конфигурации.
SPEC: ТЗ-101 · Подстановка цены = таблица трансляции
| DON (ФТ) | A1sCode / BSL |
|---|---|
| {doc:ОтчетПроизводства} | ЭтотОбъект |
| {tab:Продукция} | ЭтотОбъект.Продукция |
| {reg:ЦеныНоменклатуры} | A1sReg.CutOffLast("ЦеныНоменклатуры",...) |
| {attr:Номенклатура} | СтрокаТЧ.Номенклатура |
| {attr:Сумма} | СтрокаТЧ.Сумма |
= метаданные . проверить: {tab:Продукция} в {doc:ОтчетПроизводства} . добавить если нет: * {attr:Цена} — Число(15,2) * {attr:Сумма} — Число(15,2) = форма . добавить колонки в {form:ФормаДокумента} . обработчик ПриИзменении на {attr:Номенклатура} = тест . выбрать номенклатуру → цена . загрузка через обработку → подстановка НЕ срабатывает
// {attr:Номенклатура} → {reg:ЦеныНоменклатуры} // ФТ-101 · Подстановка цены &НаКлиенте Процедура ПродукцияНоменклатураПриИзменении(Элемент) ПодставитьЦену(Элемент.ТекущиеДанные); КонецПроцедуры &НаСервере Процедура ПодставитьЦену(СтрТЧ) // {attr:Номенклатура} → СтрТЧ.Номенклатура Если СтрТЧ.Номенклатура.Пустая() Тогда Возврат; КонецЕсли; // {reg:ЦеныНоменклатуры} срез на дату {doc} Цена = A1sReg.CutOffLast( "ЦеныНоменклатуры", ЭтотОбъект.Дата, A1sDS.Of("Номенклатура", СтрТЧ.Номенклатура)).Цена; Если Цена <> Неопределено Тогда СтрТЧ.Цена = Цена; // {attr:Сумма} = Цена × Количество СтрТЧ.Сумма = СтрТЧ.Количество * Цена; КонецЕсли; КонецПроцедуры
// A1sCode-версия — меньше шаблонного кода
&НаСервере
Процедура ПодставитьЦенуA1s(СтрТЧ)
Если СтрТЧ.Номенклатура.Пустая() Тогда
Возврат;
КонецЕсли;
Цена = A1sReg.CutOffLast(
"ЦеныНоменклатуры",
ЭтотОбъект.Дата,
A1sDS.Of(
"Номенклатура",
СтрТЧ.Номенклатура)).Цена;
Если Цена <> Неопределено Тогда
СтрТЧ.Цена = Цена;
СтрТЧ.Сумма =
СтрТЧ.Количество * Цена;
КонецЕсли;
КонецПроцедуры
DON-комментарии в коде создают трассировку ФТ → код. Линтер может проверить что каждый токен ФТ присутствует хотя бы в одном комментарии.
При включённом %profile: domain валидатор проверяет все DON-токены в документе.
{xyz:...} не найден в реестре. Проверьте опечатку или добавьте через %profile: domain +prefix:xyz.
{prefix:Name} — пробел в имени, двойные скобки или отсутствует двоеточие.
= смешаны DON-токены (ФТ-слой) и имена API/функций (ТЗ-слой). Разделите на два отдельных блока.
//) или trailing slash. Путь должен читаться слева направо без пропусков.
alias := {doc:...} определён, но не используется нигде в документе. Удалите или начните использовать.
:= и ссылайтесь по символу./ — от внешнего к внутреннему. Без пробелов вокруг слеша.Добавьте в начало любого CLN-документа с требованиями — и DON-валидация включится автоматически.