вторник, 3 декабря 2019 г.

Разделы в текстовом документе LibreOffice Writer. Скрытие раздела по условию

О том, что такое разделы, как их создавать и редактировать, я коротко писал в этом посте.
У разделов есть чудесная возможность, которая может помочь автоматизировать всякие хитрые документы (у меня это договоры), в которых некоторый текст может меняться в зависимости от ключевых условий. Например, в договорах обычно прописывают порядок оплат. И аванс по договору может выплачиваться, а может и НЕ выплачиваться. Соответственно условия оплаты в этих двух случаях отличаются.
Что хотелось бы автоматизировать в данном случае: чтобы в шаблоне договора можно было в определённом месте написать ключевое слово "выплачивается"/"не выплачивается", в соответствии с чем определённый кусок текста в договоре становился бы таким, каким надо для каждого случая.
Давайте сделаем это в Writer! Система немного запутанная, но нужно просто понять логику и всё становится просто.
Завязан нужный нам функционал на такой штуке, как переменная, которая и будет управлять скрытием наших разделов с кусками нужного текста. Переменная - это термин из области программирования. Означает он (в нашем случае) - "имя, с которым может быть связано значение". Переменная эта создаётся внутри документа Writer и существует только и исключительно внутри конкретно этого документа Writer!
Чтобы создать переменную, установим курсор в тексте в нужное место и откроем диалог "Поля", используя пункт меню Вставка->Поле->Ещё поля или сочетание клавиш Ctrl+F2. На вкладке "Переменная" слева в списке "Тип" выделите "Задать переменную". В нижней части диалога в поле "Имя" задайте имя переменной (я задал слово аванс) и в поле "Значение" нужное первоначальное значение (я задал слово выплачивается). А теперь ВАЖНЫЙ нюанс! Если вы хотите работать со словами, то в правой части диалога в списке "Формат" вид переменной ДОЛЖЕН быть "Текст"!
Нажмите кнопку "Вставить". В тексте появится слово "выплачивается" подсвеченное, как и все поля, серым цветом.
Далее нам нужно настроить наши разделы так, чтобы они скрывались/отображались в зависимости от того, какое текущее слово-значение у нашей переменной "аванс".
Так как у нас два варианта текста, то и разделов с соответствующим текстом должно быть два. Тут однако есть нюанс! Когда раздел скрыт на его месте остается пустая строка-знак абзаца! Это неудобно: пустая строка в договорах не приветствуется, да и удалить эту псевдо-пустую строку можно легко. Причем эта пустая строка будет прыгать в зависимости от того, какой раздел скрыт.
Внимание! Скрытый раздел НИКАК в тексте не выделяется, вы должны помнить о том, что он существует!
Обойти это можно путем создания одного родительского раздела, внутри которого и разместить оба наших раздела с текстом.
Вставляем раздел, используя пункт меню Вставка->Раздел. Назовём его "основной". Жмём ОК.
Затем пишем текст, который относится к варианту "выплачивается" внутри раздела "основной". Вставляем две пустых строки после текста (нужно для удобства последующих манипуляций). Выделяем текст (без пустой строки после текста!) и опять выбираем пункт меню Вставка->Раздел. Задаём имя раздела "выплачивается". Жмём ОК. Вставится раздел внутри раздела.
Ставим курсор на вторую пустую строку после раздела "выплачивается" и пишем текст для варианта "не выплачивается". Опять вставляем две пустых строки после текста (нужно для удобства последующих манипуляций). Выделяем текст (без пустой строки после текста!) и опять выбираем пункт меню Вставка->Раздел. Задаём имя раздела "не выплачивается". Жмём ОК. Вставится второй раздел внутри раздела.
На скриншоте ниже красной рамкой показан раздел "основной", а цветами выделены разделы внутри раздела "основной". Как видно, в документе не очень-то очевидна структура этих разделов-внутри-раздела, ибо тоненькие серые линии сливаются по границам разделов.

Аккуратно удаляем все ненужные теперь пустые строки внутри раздела "основной".
Явно структуру разделов видно в диалоге "Редактирование разделов" из меню Формат->Разделы:
Следующий шаг - это настройка условия для отображения/скрытия наших внутренних разделов.
Вспоминаем, что у нас есть переменная с именем аванс. Далее в диалоге "Редактирование разделов" выбираем раздел "выплачивается", отмечаем флажком опцию "Скрыть" и в поле "При условии" пишем при каком собственно условии данный раздел будет скрыт: аванс!="выплачивается"
Выбираем второй раздел - "не выплачивается", аналогично отмечаем опцию "Скрыть", аналогично пишем условие для скрытия: аванс!="не выплачивается".
Обратите внимание на кавычки, которыми обрамляются наши ключевые слова - значения. Так как тип переменной у нас текст, то кавычки обязательны в данном случае. А сочетание != означает "НЕ РАВНО".
Жмём ОК. Смотрим на результат. Так как у нас переменная аванс при создании имела некое значение, а именно слово выплачивается, то раздел "не выплачивается у нас скрыт в соответствии с заданным ему условием! Дважды щёлкаем мышью на переменной в тексте, откроется диалог "Редактирование полей". В нём, в нижней части, в поле "Значение" пишем "не выплачивается". Жмём ОК и смотрим на результат. Виден стал раздел с именем "не выплачивается", а раздел "выплачивается" скрыт! Работает!
Что мне не нравится в этом варианте: я не могу создать вместо простой переменной список значений, от выбора значений в котором и менялось бы отображение/скрытие разделов. Вернее я могу создать список, вот только этот элемент документа не будет переменной, а условия можно задавать только переменным =(
Однако, это всё равно лучше, чем каждый раз руками переписывать шаблон или иметь кучу шаблонов на все варианты оплат. Можно иметь один универсальный шаблон, в котором задать столько вариантов тех же оплат, сколько нужно (а вариантов, к сожалению может быть вагон и тележка).

Комментариев нет:

Отправить комментарий

Внимание! Сообщения проходят премодерацию!