§ 0.6. Декларативность платформы: не написать действие, а задать правило

У справочника «Товары» ветка «Формы» пуста — мы замечали это дважды. А карточка товара открывается, и в ней есть всё нужное: поля, кнопки, заголовок. Кто-то ведь решил, что показать и в каком порядке. Ответ неожиданный: иногда не человек. Чертёж окна может написать сама платформа. Из чего?

1. Не действие, а правило

Держать в комнате тепло можно двумя способами. Можно сидеть у градусника и включать обогреватель, когда стало двадцать, а выключать, когда стало двадцать три. А можно поставить на термостате «22» и забыть: как этого добиться, решает сам термостат.

действиямиправилом
что вы задаётечто делать и когдакаким должен быть результат
кто следитвытермостат
если условия поменялисьпереписываете свою инструкциюправило работает; при нужде меняют само правило, а не сценарий

Платформа 1С устроена по второму способу. Разработчик не пишет «когда откроют товар, нарисуй поле с артикулом, а когда нажмут кнопку, сохрани». Он задаёт, каким всё должно быть: у товара есть артикул, у поступления есть поставщик из справочника контрагентов, поступления относятся к закупкам. А как из этого получить окна, кнопки и разделы, решает платформа.

Мы не пишем «когда нажмут кнопку — сделай то-то». Мы задаём правила, по которым платформа сама строит и оживляет интерфейс.

Строгая пара с адресом:

образ    не «сделай», а «пусть будет»
строго   описание свойствами: что есть
         и как связано, а как этого
         достичь, решает платформа
где      палитра свойств: тип — у
         реквизита, автонумерация —
         у документа, состав раздела —
         у подсистемы

Такой способ описания называют декларативным — от латинского «объявлять»: разработчик объявляет, каким должен быть результат. Противоположный — «включи свет», а не «пусть будет светло» — называют императивным: на нём пишут код, и книга дойдёт до него только в самом конце, как до своей границы.

2. Правила, которые уже сработали у нас на глазах

Вспомним, что за пять параграфов произошло «само», и назовём правило за каждым случаем.

что произошло самокакое правило сработалогде оно задано
карточка товара построилась, хотя формы в дереве нетнет своей формы — платформа строит её из реквизитовсправочник «Товары»
у поля «Контрагент» есть кнопка «…» и окно выборареквизит — ссылка на справочниктип реквизита «Контрагент»
у поступления номер «0000000012», его никто не набиралномер присваивается автоматическисвойство документа «Автонумерация»
список поступлений оказался в разделеобъект включён в подсистемусостав подсистемы
раздел «Главное» на месте, хотя его не заводилипервый раздел платформа показывает всегдавстроенное поведение; состав — свойство конфигурации «Командный интерфейс основного раздела»

Ни одна из этих вещей не написана как действие. Каждая — следствие того, что в дереве конфигурации что-то объявлено.

Если форма ведёт себя сама — значит, где-то в дереве задано правило.

3. Одно правило — много последствий

Самое сильное в правилах — их отдача. Возьмём одно-единственное свойство: реквизит «Контрагент» у поступления имеет тип «ссылка на справочник „Контрагенты“». Ссылка — это не текст с именем, а указание на конкретного контрагента в справочнике. Вот что следует из одного этого свойства, без единого слова сверх него.

следствие одного свойствачто видит пользователь
поле показывает контрагента по имени«Канцелярия Плюс», а не внутренний код
рядом с полем кнопка выбора«…» справа от поля
выбор идёт из справочникаокно со списком контрагентов
и в других формах — имя, а не кодколонка «Контрагент» в списке поступлений

В поле можно и просто начать набирать имя — «Канц», — и платформа предложит «Канцелярия Плюс». Но это уже не одно свойство: так работает ввод по строке, у которого свои настройки у справочника и у поля.

Верно и обратное: поменяйте правило — и форма поменяется сама. В «Дереве метаданных» склад у поступления сначала был простой строкой, а потом стал ссылкой на справочник «Склады». Форму поступления при этом никто не открывал, а поле «Склад» из строки для ввода превратилось в поле с кнопкой выбора и окном со списком складов.

4. Где искать правило

Отсюда рабочая привычка, которая пригодится в каждой главе: увидев, что форма ведёт себя сама, спросить «какое правило?» — и знать, где его искать. По ней быстрее всего находят, почему форма ведёт себя так, а не иначе, и где это поменять, не трогая кода.

что происходит самогде искать правило
окно есть, а формы в дереве нетветка «Формы» объекта пуста — окно строит платформа
поле ведёт себя по-особомусвойства реквизита: тип, проверка заполнения
команда появилась в разделесостав подсистемы
номер проставился самсвойства документа, нумерация
элементы разложились по окнугруппы формы и их свойства — об этом отдельная глава

Про проверку заполнения стоит сказать отдельно, это частый случай. Если у реквизита объекта «Контрагент» свойство «Проверка заполнения» стоит в значении «Выдавать ошибку», платформа не даст записать поступление без поставщика, сообщит об этом и подсветит пустое поле. Ни строки кода — одно значение в палитре свойств.

5. Где правил не хватает

Правила покрывают многое, но не всё. Когда в строке поступления меняют количество, хочется, чтобы сумма пересчиталась сама: количество на цену. Такого свойства у реквизита нет — это уже поведение, и его разработчик дописывает кодом, в обработчике события «при изменении количества». В типовых программах таких обработчиков тысячи.

поведениечем задано
кнопка выбора у поля «Контрагент»правилом: тип реквизита
номер нового документаправилом: автонумерация
отказ записать документ без поставщикаправилом: проверка заполнения
пересчёт суммы при изменении количествакодом: обработчик события

В «Канцтоварах» такого обработчика нет, и если поменять количество в строке поступления, сумма останется прежней. Код в конфигурации всё же есть — проведение документа записано в модуле объекта, — но это другое место и другая работа. Это не поломка, а честная граница: книга учит читать то, что задано правилами, а код — следующий уровень, к которому она подведёт в самом конце.

Сначала ищите правило. Код — там, где правила кончились.

6. В Предприятии и в Конфигураторе

Проверим на «Канцтоварах», что за «самим собой» стоят свойства. В Конфигураторе мы только смотрим и ничего не меняем.

  1. В Предприятии откройте поступление № 12 и нажмите «…» у поля «Контрагент». Откроется окно выбора. Закройте его, ничего не выбирая, и закройте карточку.

  2. В Конфигураторе раскройте в дереве «Документы» → «ПоступлениеТоваров» → «Реквизиты» и откройте свойства реквизита «Контрагент». Найдите его тип: «СправочникСсылка.Контрагенты». Вот правило, из которого выросли кнопка и окно выбора.

  3. Там же найдите у реквизита свойство «Проверка заполнения» и посмотрите, какое значение в нём стоит.

  4. Откройте окно документа «ПоступлениеТоваров» и найдите на вкладке нумерации флажок «Автонумерация». Закройте окна, ничего не сохраняя.

Здесь будет снимок экранапалитра свойств реквизита «Контрагент» с типом и проверкой заполнения

Главное в одном абзаце

Платформа 1С декларативна: разработчик не пишет последовательность действий «когда нажмут кнопку, сделай то-то», а задаёт свойства — каким должен быть результат, что с чем связано, — и платформа сама строит и оживляет по ним интерфейс, как термостат сам держит заданную температуру. Всё, что до сих пор происходило «само», — карточка без формы в дереве, кнопка выбора у поля, номер документа, команды в разделе — было сработавшим правилом, заданным в дереве или в свойствах. Одно правило даёт много следствий, и, поменяв его, меняешь форму, не трогая её. Отсюда привычка: увидев, что форма ведёт себя сама, искать правило в палитре свойств. Правила кончаются там, где нужно поведение, — например, пересчёт суммы; его дописывают кодом, и эта книга такой код не пишет.


Правила, окно, которое платформа раскладывает сама, формы, построенные без рисовальщика, — всё это черты управляемых форм. Но в 1С были и другие формы, нарисованные по координатам. Куда они делись и почему книга о них почти молчит?

Контрольные вопросы

  1. Чем задание правилом отличается от задания действием? Приведите бытовой пример.
  2. Что значит «декларативное описание» и где в Конфигураторе живут правила?
  3. Назовите три вещи в «Канцтоварах», которые произошли «сами», и правило за каждой.
  4. Что изменится в карточке поступления, если поменять тип реквизита «Склад» со строки на ссылку на справочник, и почему форму при этом трогать не нужно?
  5. Где искать правило, если поле формы ведёт себя по-особому?
  6. Почему пересчёт суммы при изменении количества — не правило, а код?

Упражнения

Найдите правило. Для каждого случая назовите правило и где оно задано: у нового поступления сам появился номер; в карточке товара есть поле «Артикул», хотя формы товара в дереве нет; у поля «Склад» в поступлении есть кнопка выбора.

Своё: правила вокруг. Найдите в быту три устройства, которые работают по правилу, а не по командам, — вроде термостата. Для каждого запишите, что вы задаёте и что устройство решает само.

Ловушка: где спрятан код? Новичок говорит: «Кнопку „…“ у поля „Контрагент“ кто-то запрограммировал — найду обработчик и посмотрю, как она работает». Найдёт ли он обработчик? Что он найдёт вместо него?

Правило или код. Для каждого поведения скажите, чем оно, скорее всего, задано — правилом или кодом: поле «Контрагент» подсвечивается, если пустое; при выборе товара в строке сама подставляется его цена; поступление попадает в раздел «Закупки»; документ не записывается без склада.

Ответы — в конце части.