Перейти до основного вмісту

Умовні оператори в шаблоні

Умовний оператор — це позначка в шаблоні, яка вирішує, чи потрапить частина форми в друк. Якщо умова виконується, частина друкується, а сама позначка зникає. Якщо не виконується — частина прибирається з документа разом із позначкою.

Завдяки умовним операторам один шаблон обслуговує різні ситуації: рахунок із ПДВ і без, накладну зі знижкою і без, договір з авансом і з повною оплатою.

Три оператори​

У лівій панелі редактора, у розділі Маркери, є три кнопки:

  • Показати рядок таблиці, якщо — вставляє SKYNUM_ROW_IF{ };
  • Показати колонку таблиці, якщо — вставляє SKYNUM_COLUMN_IF{ };
  • Показати блок, якщо — вставляє пару SKYNUM_IF{ } SKYNUM_END_IF.

Умову пишуть у фігурних дужках. Змінні всередині дужок вставляйте з тієї самої панелі, як і в звичайному тексті шаблону.

Рядок таблиці​

Поставте SKYNUM_ROW_IF{умова} в будь-яку клітинку рядка. Якщо умова не виконується, рядок зникає з таблиці.

У рядку товарів умова перевіряється для кожного товару окремо. Приклад: показати в таблиці лише товари зі знижкою.

SKYNUM_ROW_IF{$DOC_ITEM_DISCOUNT > 0}

Приклад для підсумкової таблиці: рядок «Знижка додаткова» потрібен лише тоді, коли знижка є.

SKYNUM_ROW_IF{$DOC_AMOUNT_DISCOUNT > 0}

Колонка таблиці​

Поставте SKYNUM_COLUMN_IF{умова} в клітинку колонки, зазвичай у заголовок. Якщо умова не виконується, колонка зникає з усієї таблиці, а решта колонок займає її місце.

Приклад: колонка «ПДВ, сума» потрібна лише в документах із ПДВ.

SKYNUM_COLUMN_IF{$DOC_AMOUNT_VAT > 0}

Об'єднана клітинка, яка займає кілька колонок, звужується на прибрану колонку. Якщо в одній колонці стоїть кілька умов, колонка лишається лише тоді, коли виконуються всі.

Блок тексту​

Поставте SKYNUM_IF{умова} на початку блоку і SKYNUM_END_IF в його кінці. Якщо умова не виконується, зникає все між позначками: частина речення, абзац, кілька абзаців або ціла таблиця.

Приклад: пункт про доставку друкується лише тоді, коли в документі є вартість доставки.

SKYNUM_IF{$DELIVERY_COST > 0}
Доставка: $DELIVERY_COST грн, одержувач $DELIVERY_RECIPIENT_NAME.
SKYNUM_END_IF

Приклад: напис про прострочення на рахунку.

SKYNUM_IF{$DOC_PAYMENT_DUE_DATE != "" AND $DOC_PAYMENT_DUE_DATE < $TODAY} ПРОСТРОЧЕНО SKYNUM_END_IF

Правила для пари позначок:

  • Обидві позначки стоять в одній клітинці таблиці або обидві поза таблицями.
  • Блоки можна вкладати один в один.
  • Абзац, у якому після прибирання блоку нічого не лишилося, зникає разом із блоком.

Що можна писати в умові​

Умова — це порівняння, результат якого «так» або «ні».

Порівняння чисел і сум: >, <, >=, <=, =, !=.

SKYNUM_IF{$DOC_PAID_AMOUNT < $DOC_AMOUNT} Залишок до сплати SKYNUM_END_IF

Порівняння тексту — значення в лапках:

SKYNUM_IF{$DOC_STATUS = "Відвантажено"} Товар передано перевізнику SKYNUM_END_IF

Перевірка, що поле заповнене — порівняння з порожнім текстом:

SKYNUM_IF{$CONTRAGENT_TAXNUMBER != ""} Податковий номер: $CONTRAGENT_TAXNUMBER SKYNUM_END_IF
SKYNUM_ROW_IF{$DOC_ITEM_SERIALS != ""}

Змінні зі значенням «Так» / «Ні» — наприклад Активність документа — пишуть без порівняння або з NOT:

SKYNUM_IF{$DOC_ACTIVE} … SKYNUM_END_IF
SKYNUM_IF{NOT($DOC_ACTIVE)} ЧЕРНЕТКА SKYNUM_END_IF

Кілька умов разом — AND, OR, дужки:

SKYNUM_IF{$DOC_AMOUNT_VAT > 0 AND $CONTRAGENT_TAXNUMBER != ""} … SKYNUM_END_IF

Дати порівнюються між собою, з сьогоднішньою датою і з датою, записаною через DATE:

SKYNUM_ROW_IF{$DOC_ITEM_DATEVALID != "" AND $DOC_ITEM_DATEVALID >= DATE("01.01.2027")}
SKYNUM_IF{$DOC_DATE + 14 < $TODAY} Рахунок виставлено понад два тижні тому SKYNUM_END_IF

Якщо дата може бути не заповнена, спершу перевірте != "" через AND. Порожню дату не можна порівняти з датою: замість результату з'явиться червоне повідомлення.

Пошук у тексті та інші функції описані в статті Формули в шаблонах: усе, що працює у формулі, працює і в умові.

Важливо

Текстове поле саме по собі не є умовою. Запис SKYNUM_IF{$CONTRAGENT_TAXNUMBER} не означає «якщо номер заповнений» — пишіть порівняння != "".

Якщо умову не вдалося перевірити​

Замість позначки в документі з'являється червоне повідомлення, а вміст лишається на місці. Так буває, коли:

  • результат умови не «так» і не «ні» — наприклад, у дужках стоїть лише сума;
  • умову неможливо обчислити — порівняння тексту з числом, помилка в назві функції, незакрита дужка всередині умови;
  • SKYNUM_ROW_IF або SKYNUM_COLUMN_IF стоїть поза клітинкою таблиці;
  • у SKYNUM_IF немає свого SKYNUM_END_IF або навпаки;
  • початок і кінець блоку стоять у різних клітинках таблиці.

Позначка з помилкою в назві або без дужки не розпізнається і друкується як звичайний текст.

Умови працюють у шаблонах формату Друк.

Перевірка​

  1. Відкрийте документ, у якому умова має виконатися, і надрукуйте форму.
  2. Відкрийте документ, у якому умова не виконується, і надрукуйте форму ще раз.
  3. Переконайтеся, що в обох документах немає червоних повідомлень і таблиця не з'їхала.

Підсумок​

SKYNUM_ROW_IF прибирає рядок, SKYNUM_COLUMN_IF — колонку, SKYNUM_IF … SKYNUM_END_IF — будь-який блок. Умова — це порівняння з результатом «так» або «ні»; змінні в неї вставляються з панелі, текст береться в лапки, порожнє поле перевіряється через != "".