Блоки
Блоки - второй строительные компонент шаблонов после полей. С помощью них вы можете переиспользовать одну и ту же часть шаблона документа множество раз в любом количестве других шаблонов документов и блоков.
В общем блоки очень похожи на шаблоны документов, только в них нет колонтитулов и настроек, специфичных именно для шаблонов документов: шаблона пути сохранения, шаблона названия и тп.
По аналогии с полями, у блоков есть общие настройки, которые применимы к блоку в целом, и настройки их отображения, которые применяются к конкретной вставке блока в шаблон документа или другой блок.
Настройки блоков
Блоки создаются на странице шаблонов в разделе "блоки" вот здесь: <скриншот>
При создании блока вам будет предложено дать ему название и описание. Они помогут потом быстро находить блок для его вставки в документ. После сохранения вы попадёте на страницу вновь созданного блока, который по-умолчанию будет представлен пустым редактором.
В блоке вы можете использовать всё доступное форматирование. Подробнее про него вы можете прочитать в разделе, описывающем работу с редактором.
Так же вы можете вставлять в блок поля и другие блоки.
Настройка отображения
При вставке блока в редактор, будет открыто такое окно настроек отображения блока: <скриншот>
В зависимости от того, есть ли в блоке поля привязанные к формам, правая часть этого окна может быть показана или скрыта.
Строчные блоки
Эта настройка позволяет выводить блок как часть строки, если её включить. По-умолчанию все блоки выводятся как параграфы, занимая всю ширину редактора. Это выглядит следующим образом: <скриншот>
Если же выбрано строчное отображение блока, то блок будет помещён в строку, которую он вставлен, то есть до него и после может идти текст и другие блоки. Выглядит это так: <скриншот>
Условия отображения блоков
Условия отображения блоков почти идентичны [условиям для замены значений полей](/docs/temlates/fields#замена-значения по условию). Отличие заключается только в том, что при вставке блоков вы можете выбрать произвольные поля, в то время как условие поля работает только по значению самого этого поля.
Условия отображения влияют на то, будет ли отрисован блок в итоговом шаблоне или нет. Если хоть одно условие выполнено или если ни одного условия не задано, то блок будет отображаться, иначе - он будет скрыт. При этом если блок не является строчным, то он будет скрыт вместе с параграфом, в который он вставлен. Если же блок является строчным, то будет скрыт только он сам.
С помощью условий отображения блоков можно строить довольно сложные вложенные конструкции документов, если привязывать блоки к полям-вопросам. Если вложить зависимые блоки друг в друга и каждый из них привязать к полю-вопросу, то пользователю будут показываться эти вопросы по мере ответов на предыдущие - поскольку с каждым ответом (заполнением значения поля) будет показываться всё новые, вложенные блоки, поля из которых будут предлагаться пользователю для заполнения. Подробный пример такого паттерна можно найти в наших примерах.
Изменение данных
Чтобы дать больше возможностей переиспользовать блоки и позволить делать их более абстрактными, мы предусмотрели возможность переопределения данных в них. Работает это для тех блоков, в которых есть хоть одно поле, привязанное к форме.
Лучше всего объяснить чем это может быть полезно и как работает на примере. Допустим вы делаете блок "реквизиты сторон". Предположим у каждой стороны одинаковый формат реквизитов и в этом случае было бы уместным поместить реквизиты одной стороны в отдельный блок, а затем поставить его в общий блок - "реквизиты сторон".
В таком случае в блоке "реквизиты стороны" будут поля, которые необходимо заполнить о каждой отдельной стороне, например, о заказчике и исполнителе. Но каждое поле можно привязать только к одной форме, либо это будет "заказчик", либо "исполнитель". Но благодаря замене данных, мы можем привязать поля этого блока к более абстрактной форме. Назовём её "юридическое лицо", так как обычно и заказчик и исполнитель - это юридические лица и их поля будут одними и теми же. Тогда последовательно дважды вставляя блок "реквизиты стороны" в блок "реквизиты сторон", мы сможем перепривязать его данные с "юридического лица" на другие формы - "заказчика" и "исполнителя". Перепривязка в настройках вставки блока выглядит вот так: <скриншот>
А итоговая форма будет такой: <скриншот>
Соответственно при генерации документа, в котором присутствует этот блок, мы получим две отдельные формы, как того и требовала задача: <скриншот>
Точно так же теперь можно переиспользовать блок реквизиты сторон в других блоках и шаблонах документов, даже если в них идёт речь не об исполнителе и заказчике, а, например, об арендаторе и арендодателе.
Повторение блоков
Ещё один чрезвычайно полезный инструмент, значительно увеличивающий способы применения блоков и возможности шаблонов, это повторение блоков по набору данных. Представьте, что вам нужно вывести последовательно несколько юрлиц в одну строчку через запятую в виде "ООО Ромашка ИНН 1234567890, ООО Лютик ИНН 9876543210". Данные юридических лиц у вас при этом уже хранятся в объектах справочника или проекта. Разумеется, вводить вручную данные, которые уже хранятся в структурированном виде в программе было бы непродуктивно. Но этого делать не придётся, так как ту же конструкцию можно сделать с помощью блоков.
Для этого необходимо сделать блок, описывающий одно юрлицо, с содержимым такого вида: <скриншот>
Как видно на изображении, в блоке присутствует два поля: "ИНН" и "Название организации". Их можно связать с формой "юридическое лицо". Теперь, чтобы подставить этот блок в шаблон документа и сделать его повторяющимся, нам нужна множественная форма. Назовём её "юридические лица". Теперь всё, что нам нужно, при вставке поля в замене данных выбрать эту форму напротив формы "юридическое лицо". Это будет выглядеть так: <скриншот>
Как можно видеть, когда мы заменили одинарную форму "юридическое лицо" вставленного в документ блока на множественную - "юридические лица", на экране появилась дополнительная настройка - настройка повторения блока. Такая настройка доступна только в том случае, если при вставке блока вы заменяете его одинарную форму на множественную.
В настройках повторения блока вы можете какой разделитель ставить между блоками, и какое окончание ставить в конце повторения, если они нужны. В нашем примере с юридическими лицами мы поставим разделителем запятую с пробелом ", ", а окончанием - точку. Так же вы можете выводить повторяющиеся блоки как нумерованный или ненумерованный список, с переносом строки или, если блок вставлен в уже созданный список, то как элемент этого списка.
Повторение настроено. Теперь всё, что надо будет сделать пользователю при генерации этого документа, это выбрать в форме "юридические лица" уже сохранённые в системе объекты и они встанут в документ в нужном вам виде.
Табличное представление повторяющихся блоков
Очень частым способом работы с повторяющимися данными являются таблицы. В Cursiver вы можете создавать динамические таблицы, в которые можно выводить данные как сохранённых в системе объектов, так и любые произвольные пользовательские данные, так и загружать их из CSV. Делается это с помощью повторяющихся блоков.
Всё, что вам нужно, чтобы создать такую таблицу, это блок, в котором будет шаблон одной строки этой таблицы, и непосредственно сама таблица в шаблоне документа, в которую этот блок надо добавить.
Возьмём для примера таблицу с данными о выполненных работах. В ней каждая строка содержит данные о названии работы и её стоимости. Перечень работ с их стоимостями может хранится у вас для удобства в справочнике. Тогда, чтобы вывести работы в табличном виде, нам потребуется блок, в котором единственным содержимым будет таблица, состоящая из одной строки и двух колонок, в которые надо поместить поля "название работы" и "стоимость". Каждое поле необходимо связать с формой "работа". Получим блок такого вида: <скриншот>
Этот блок теперь подставим в шаблон документа с таблицей, состоящей из шапки в первой строке и двумя объединёнными ячейками на второй строке. В объединённые ячейки мы и подставим наш только что созданный блок. При вставке блока свяжите форму "работа" блока с множественной формой "работы". Больше никаких настроек указывать не надо. Полученный результат будет выглядеть так: <скриншот>
Теперь при генерации документа, всё, что нужно будет сделать пользователю, это выбрать работы из справочника - они автоматически подставятся в таблицу: <скриншот>
Папки блоков
Как и поля, блоки хранятся в своих папках. Вы можете вкладывать их в друг друга, организуя блоки любым удобным вам образом.