SMART Data Template
Додаток SMART Data Template — це розширення для Microsoft Dynamics 365 Business Central, яке дозволяє гнучко налаштовувати маппінг і трансформацію даних. В додатку є можливість створювати шаблони з кількома таблицями, мапінгами та виразами для автоматизації інтеграції, звітності та експорту даних — без змін у коді.
Основні можливості:
- Визначення шаблонів даних з будь-якою кількістю таблиць (як змінних).
- Налаштування мапінг-кодів і виразів для обчислення значень.
- Підтримка як одиничних, так і повторюваних (рядкових) структур.
- Гнучке налаштування фільтрів і зв’язків між таблицями.
- Автоматизація експорту, інтеграції та звітності.
SMART Data Template дозволяє налаштовувати складну логіку вибірки та трансформації даних через інтерфейс. Ви визначаєте, які таблиці використовувати, як вони пов’язані, які дані витягувати та як їх обчислювати чи трансформувати — без написання коду.
- Шаблони групують усі налаштування для сценарію.
- Таблиці виступають змінними та контекстом для вибірки даних.
- Мапінги визначають, які дані виводити.
- Вирази описують, як обчислювати кожен мапінг.
- Фільтри контролюють, які записи включати та як таблиці пов’язані.
Цей підхід дозволяє бізнес-користувачам та консультантам автоматизувати потоки даних, звітність та інтеграції гнучко й ефективно.
Для використання шаблону даних необхідно виконати наступні налаштування.
Як це працює
Прочитайте цей розділ один раз — і п'ять сторінок налаштування перестануть бути п'ятьма не пов'язаними між собою списками.
Шаблон даних відповідає на одне питання застосунку, який його викликає: для одного запису, який він передає, якими є значення названих кодів зіставлення? Усе в налаштуванні служить цьому реченню.
Таблиці шаблону даних — це змінні. Кожен рядок сторінки Таблиці шаблону даних — це змінна типу Record: таблиця Business Central плюс правило, яке визначає, з яким саме її записом працює шаблон. Одна змінна є кореневою — це запис, який передає застосунок, тому її не фільтрують. Кожна інша змінна визначається від свого коду батьківських даних: рядок типу Пов'язане поле бере значення поля батьківського запису, тому дочірня змінна йде за батьківською, а не шукається окремо. Змінна може й не мати батька, а бути закріпленою постійним фільтром — так посилаються на фіксований запис (наприклад, на банківський рахунок компанії). Змінна з ознакою Повторення читається рядок за рядком, а не визначається в один запис. Панель Структура на сторінках Шаблони даних, Таблиці шаблону даних і Шаблон даних малює це дерево, тому ієрархію не потрібно вичитувати з колонки Код батьківських даних рядок за рядком.
Коди зіставлення — це те, що виходить назовні. Кожен рядок сторінки Зіставлення шаблону даних — це одне іменоване значення, яке застосунок запитує за кодом. Код зіставлення без повторення обчислюється один раз — для переданого запису. Код із повторенням обчислюється один раз на кожен рядок своєї повторюваної таблиці даних, і його змінні визначаються заново для цього рядка — тому код зіставлення на таблиці рядків дає одне значення на рядок, а код, який читає пов'язаний запис, дає пов'язаний запис саме цього рядка.
Вирази — це формула. Кожен рядок сторінки Вираз шаблону даних додає одне значення — константу,
поле змінної, значення іншого коду зіставлення або одне значення, згорнуте по цілому набору записів —
а його Операція каже, як це значення поєднується з результатом рядків вище. Рядки згортаються
строго згори вниз, без пріоритету операцій: 2 + 3 * 4 дає 20, а не 14.
Під час виконання, у такому порядку: неповторювані змінні визначаються від кореневої вниз, обчислюються неповторювані коди зіставлення, після чого кожна повторювана таблиця даних читається рядок за рядком з обчисленням своїх кодів зіставлення для кожного рядка. Змінна, яка не знайшла запис, залишає свої поля порожніми, показує помилку або використовує значення за замовчуванням — залежно від поля Якщо запис не знайдено. Наостанок кожне значення проходить другий етап форматування — Тип даних коду зіставлення — і застосунок отримує текст, який йому не потрібно тлумачити.
Як читати колонку «Формула»
Колонка Формула на сторінці Зіставлення шаблону даних (і поле Формула над рядками на сторінці Вираз шаблону даних) показує всі рядки виразів одного коду зіставлення як один рядок тексту, щоб формулу можна було прочитати, не відкриваючи її:
| У формулі | Означає |
|---|---|
"текст" |
константа (Тип = Константа) |
[TABLE.Поле] |
поле змінної TABLE (Тип = Поле) |
{CODE} |
значення коду зіставлення CODE (Тип = Дані) |
Сума([TABLE.Поле]) |
агрегація по набору записів TABLE (Тип = Агрегація) |
Кількість(TABLE) |
агрегація, яка рахує записи й не читає поле |
Об'єднання([TABLE.Поле], ", ") |
агрегація, яка об'єднує значення через розділювач |
Сума(TABLE.{CODE}) |
агрегація по обчислених значеннях повторюваного коду зіставлення |
RULE(...) |
правило перетворення, застосоване лише до цього рядка |
& |
рядок додається в кінець (Операція = З'єднання) |
+ - * / |
рядок додається, відмінусовується, множиться, ділиться |
?? |
рядок додається лише якщо результат вище порожній (Якщо порожній) — резервне значення |
?& |
рядок додається лише якщо результат вище не порожній (Якщо не порожній) |
( ... ) |
порядок згортання згори вниз: ([A] - [B]) - [C], і ніколи [A] - ([B] - [C]) |
-> Десяткове число(2) |
оголошений Тип даних коду зіставлення, якщо він змінює вигляд значення |
#index |
у коду зіставлення увімкнено Повторюваний індекс: значенням є номер рядка, а вирази ігноруються |
? |
щось ще не заповнено — відсутній код зіставлення, поле або тип агрегації |
Тобто [SALE_HEADER.Сума з ПДВ] - [SALE_HEADER.Сума] — це різниця двох полів заголовка, а
ЗАГЛАВНІ([CUSTOMER.Назва]) & ", " & [REGION.Код] — назва великими літерами, кома й поштовий індекс.
Назви типів агрегації та типів даних у формулі показуються так, як вони названі в інтерфейсі, тому в
українській сесії ви побачите Сума(...), а в англійській — Sum(...).
Як перейти з одного рівня на наступний
- Шаблони даних → виберіть шаблон, щоб відкрити сторінку Шаблон даних, яка показує заголовок, змінні та коди зіставлення одного шаблону в одному місці, разом із деревом структури.
- Таблиці шаблону даних → дія Фільтри відкриває рядки фільтрів і з'єднань вибраної змінної. (Колонка Відфільтрований так само відкриває цю сторінку, якщо вибрати її значення.)
- Зіставлення шаблону даних → дія Вирази відкриває рядки виразів вибраного коду зіставлення. (Вибір значення колонки Формула робить те саме.)
- Кожна сторінка налаштування відповідає на F1 розділом цієї статті, який її описує.
1. Створення шаблону даних
Сторінка: Шаблони даних
Необхідно створити новий шаблон даних, заповнивши наступні поля:
| Поле | Опис |
|---|---|
| Код | Унікальний ідентифікатор шаблону. |
| Опис | Опис шаблону. |
| Тип | Оберіть тип шаблону: Співставлення даних або Фільтр записів. Для вивантаження інформації згідно певного меппінгу даних необхідно обрати тип Співставлення даних. |
| ID таблиці-джерела | ID основної таблиці. |
| Назва таблиці-джерела | Назва основної таблиці (заповнюється автоматично). |
2. Додавання таблиць до шаблону
Для відповідного шаблону необхідно додати таблиці, які будуть використовуватись як змінні (контексти) у шаблоні даних.
Сторінка: Таблиці шаблонів даних (необхідно натиснути на кнопку Таблиці даних на сторінці Шаблони даних)
| Поле | Опис |
|---|---|
| Код | Унікальний код змінної таблиці. |
| Опис | Опис таблиці. |
| Ідентифікатор таблиці | ID таблиці у Business Central. |
| Назва таблиці | Назва таблиці (заповнюється автоматично). |
| Є корневою таблицею | Позначає основну таблицю (заповнюється автоматично). |
| Повторення | Якщо встановлено, таблиця є повторюваною (рядковою). |
| Код батьківських даних | Код батьківської таблиці, по полю якої буде відбуватися пошук необхідної інформації для конкретного запису. |
| Запитувати додаткові фільтри | Якщо при формуванні звіту необхідно виводити сторінку запиту для можливості встановлювати фільтри по полям необхідної таблиці, для такої таблиці необхідно встановити налаштування Так |
| Останній | Повертає останній запис у порядку сортування, описаному нижче, замість першого. Див. примітку в розділі Сортування записів таблиці. |
| Поле сортування | ID поля, за яким читаються записи цієї таблиці. Значення 0 залишає порядок первинного ключа. |
| Поле сортування 2 | ID другого поля, яке визначає порядок записів з однаковим значенням у полі Поле сортування. |
| Порядок сортування | За зростанням або За спаданням за полем сортування. |
| Максимальна кількість записів | Для повторюваної таблиці — максимальна кількість рядків. Значення 0 означає без обмежень. |
| Обов'язково | Позначає таблицю, яка обов'язково має знайти запис. Увімкнення встановлює Якщо запис не знайдено = Показати помилку. |
| Якщо запис не знайдено | Що відбувається, якщо жоден запис не відповідає фільтрам: Залишити порожнім, Показати помилку або Використати значення за замовчуванням. |
| Значення за замовчуванням | Значення, яке повертають усі вирази цієї таблиці, якщо запис не знайдено (лише для Використати значення за замовчуванням). |
Сортування записів таблиці
За замовчуванням таблиця читається в порядку первинного ключа. Заповніть Поле сортування (а за потреби і Поле сортування 2 для однакових значень), щоб читати її в порядку іншого поля, і скористайтесь полем Порядок сортування, щоб змінити напрямок. Для повторюваної таблиці це порядок рядків у результаті; для звичайної таблиці це визначає, який саме запис буде обрано.
- Не за кожним полем можна сортувати. Обчислювані поля (FlowField, наприклад сума, що розраховується з рядків), а також поля зображень і BLOB не можуть входити в порядок сортування. Якщо вказати таке поле, система відразу відмовить і перелічить поля, які можна використати замість нього. Найшвидший вибір — поля, з яких починається один із ключів таблиці.
- Налаштування
Останнійвраховує це сортування. Якщо поле сортування не заповнене, Останній означає останній запис у порядку первинного ключа, а не «найновіший за датою». Щоб отримати найновіший запис за датою, вкажіть у полі Поле сортування поле дати й увімкніть Останній. - Сортування також визначає порядок агрегацій Перший, Останній та Об'єднання (див. Агрегація набору записів).
Обмеження кількості рядків
Поле Максимальна кількість записів обмежує кількість рядків повторюваної таблиці. Система припиняє читання записів після досягнення обмеження, тому це водночас і запобіжник для дуже великих документів. Два важливих моменти:
- Агрегація за тією ж таблицею обмежується так само, тому підсумок завжди відповідає рядкам, які насправді сформовано.
- Застосунок-споживач може дізнатися, що частину записів не було включено, і відмовитися формувати неповний документ. Поєднуйте Максимальна кількість записів із Порядок сортування, щоб залишались саме потрібні рядки, а не довільна вибірка.
Що робити, якщо запис не знайдено
Таблиця, фільтрам якої не відповідає жоден запис, повертає порожні значення — це поведінка за замовчуванням, і вона не змінилася. Поле Якщо запис не знайдено дозволяє обрати інший варіант:
| Значення | Поведінка |
|---|---|
| Залишити порожнім | Усі вирази цієї таблиці повертають порожнє значення. Документ усе одно формується. Це значення за замовчуванням. |
| Показати помилку | Формування припиняється з помилкою, яка називає шаблон, таблицю та застосовані фільтри, тому видно, чому нічого не знайдено. |
| Використати значення за замовчуванням | Усі вирази цієї таблиці повертають Значення за замовчуванням. |
Значення за замовчуванням застосовується лише тоді, коли запис не знайдено. Якщо запис
знайдено, а поле просто порожнє, буде повернуто порожнє значення, а не значення за замовчуванням.
Вводьте значення в тому ж нейтральному форматі, який шаблон формує в інших місцях, наприклад
1234.56, 2026-08-17 або true.
Зверніть увагу: для шаблону типу Пошук записів поле Якщо запис не знайдено ігнорується. Такий тип шаблону відповідає на питання «чи існують усі потрібні записи?» і має мати можливість відповісти ні, не припиняючи створення документа.
3. Налаштування фільтрів таблиць
Визначте фільтри для кожної таблиці, щоб обмежити або зв’язати дані. Для встановлення фільтрів на сторінці Таблиці шаблонів даних для конкретної таблиці необхідно провалитись в поле Відфільтрований, і заповнити необхідні фільтри:
| Поле | Опис |
|---|---|
| ID поля | ID поля для фільтрації. |
| Мітка поля | Назва поля (заповнюється автоматично). |
| Тип | Тип фільтра: Фільтр або Пов'язане поле. Для того, щоб відфільтрувати записи в поточній таблиці - необхідно обрати тип Фільтр. Для того, щоб зв'язати дані з батьківською таблицею - необхідно обрати тип Пов'язане поле |
| Значення фільтра | Для записів з типом = Фільтр в цьому полі необхідно зазначити значення або вираз для фільтра. |
| Ідентифікатор пов’язаного поля | Для записів з типом = Пов'язане поле в цьому полі необхідно вказати поле, по якому буде відбуватись зв'язок записів в двох таблицях (поточної і батьківської) |
| Назва пов’язаного поля | Назва пов’язаного поля (заповнюється автоматично). |
Зверніть увагу: значення в полях Значення фільтра мають прописуватись тією мовою, з інтерфейсу якої буде запускатись звіт. Наприклад, якщо звіт буде запускатись з україномовного інтерфейсу - всі фільтри мають бути зазначені українською.
4. Додавання мапінг-кодів
Необхідно додати мапінг-коди, які будуть використовуватись при формуванні звітів або виконанні інтеграції.
Сторінка: Зіставлення шаблонів даних (необхідно натиснути на кнопку Відображення кодів даних на сторінці Шаблони даних)
| Поле | Опис |
|---|---|
| Код | Унікальний код співставленної змінної. |
| Опис | Опис співставлення. |
| Повторення | Якщо встановлено, то це співставлення для повторюваної таблиці. |
| Повторювана таблиця даних | Код повторюваної таблиці. |
| Тип даних | Чим є обчислене значення: Текст (за замовчуванням), Ціле число, Десяткове число, Дата, Дата й час, Час або Логічне значення. Див. Чим є значення нижче. |
Решта налаштувань мапінг-коду розташована на панелі Типізація результату праворуч на сторінці — вона завжди показує той мапінг-код, який обрано у списку:
| Поле | Опис |
|---|---|
| Тип даних | Те саме поле, що і в списку, продубльоване тут, бо від нього залежать поля нижче. |
| Кількість десяткових знаків | Лише для Тип даних = Десяткове число. Скільки цифр виводиться після десяткового розділювача, наприклад 2. Значення округлюється до цієї кількості знаків. |
| Вираз формату | Необов'язкове. Рядок формату Business Central, який використовується саме так, як його введено, і не перекладається, наприклад <Year4>-<Month,2>. Він замінює стандартний вигляд числа, дати, дати й часу або часу. |
| Обрізати пробіли | Видаляє пробіли на початку та в кінці значення, наприклад коли поле-джерело має фіксовану довжину. |
| Порожнє як нуль | Дозволяє вважати порожнє значення нулем в арифметиці цього мапінг-коду. Без цього порожній операнд припиняє обчислення з помилкою. |
Чим є значення — типи даних і форматування
Без цих налаштувань мапінг-код формує текст у незмінному, незалежному від мови вигляді: десяткове
число як 1234.56, дату як 2026-08-17, поле Так/Ні як його мітку. Далі кожна програма-споживач
мусить сама знати, чим насправді є цей текст, і більшість із них зберігає власну копію цієї
інформації. Поле Тип даних дозволяє зазначити це один раз — у шаблоні.
- Текст — значення за замовчуванням, і воно нічого не змінює. Мапінг-код, налаштований до появи цієї можливості, формує точно те саме, що й раніше.
- Порожнє значення залишається порожнім за будь-якого типу даних. Порожнє значення — це відсутні
дані, а не зламане число, тому воно ніколи не перетворюється на
0і ніколи не стає помилкою. - Десяткове число округлюється до Кількості десяткових знаків, а потім виводиться саме з цією
кількістю цифр:
1234.5з двома знаками стає1234.50, а з нулем знаків —1235. Округлення виконується до найближчого значення, а половина округлюється від нуля (1234.5→1235,-1234.5→-1235). - Ціле число очікує ціле значення і не приймає значення з десятковою частиною. Якщо потрібне округлення, оберіть Десяткове число з Кількістю десяткових знаків = 0 — тоді налаштування прямо про це говорить.
- Дата, Дата й час і Час виводяться в нейтральному форматі ISO (
2026-08-17) незалежно від мови сеансу, якщо Вираз формату не визначає інше. - Логічне значення виводиться як
trueабоfalse— ніколи як Так/Ні мовою сеансу. - Значення, яке не можна прочитати як зазначений тип даних, припиняє обчислення помилкою, що
називає шаблон і мапінг-код. Саме для цього тип і зазначається: раніше та сама помилка виникала
значно пізніше, вже в програмі-споживачі, яка не могла сказати, який мапінг-код налаштовано
неправильно. Якщо мапінг-код читає таблицю, для якої задано Значення за замовчуванням (див.
Що робити, якщо запис не знайдено), це значення теж має відповідати типу даних:
N/Aза Тип даних = Десяткове число є помилкою налаштування. - Обрізати пробіли застосовується до того, як застосовується тип даних, тому поле-джерело з пробілами все одно читається як число або дата.
- Порожнє як нуль стосується операндів операцій
+,-,*і/, а не результату. Без цього порожній операнд є помилкою налаштування — і це зроблено свідомо, бо непомітно відсутня сума гірша за припинене вивантаження. - Мапінг-код, який читає інший мапінг-код (Тип = Дані), бачить його відформатоване значення.
Тобто мапінг-код з типом Десяткове число і двома знаками віддає
1234.50усім, хто його читає.
5. Додавання виразів
Для кожного коду співставлення даних необхідно додати один або кілька виразів. Вирази будуть визначати дані, які мають вивантажитись в сформований звіт. Для вказання виразів на сторінці Зіставлення шаблонів даних для конкретного коду співставлення необхідно провалитись в поле Вираз, і прописати необхідні вирази:
| Поле | Опис |
|---|---|
| Операція | Вид операції (Concat, +, -, *, /, If empty тощо). Для визначення значення з певного поля необхідно обрати тип операції Concat. Для виконання арифметичних дій з значеннями необхідно обрати відповідний логічний оператор (наприклад: +). Для визначення логічного виразу, якщо знайдене значення в певній змінній пусто, то необхідно вивантажувати певне значення - треба встановити тип операції Якщо порожній. Для визначення логічного виразу, якщо знайдене значення в певній змінній НЕ пусто, то необхідно вивантажувати певне значення - треба встановити тип операції Якщо не порожній. |
| Тип | Тип виразу (Константа, Поле, Дані, Агрегація). Для визначення значення з певного поля треба обрати тип Поле; певної текстової константи - тип Константа; для згортання набору записів в одне значення - тип Агрегація (див. нижче). |
| Значення константи | Необхідно вказати значення текстової константи, якщо в полі Тип визначено Константа |
| Дані пов’язаної таблиці | Код пов’язаної таблиці, з якої необхідно витягнути дані |
| Назва таблиці | Назва пов’язаної таблиці, з якої необхідно витягнути дані |
| ID поля | ID поля пов’язаної таблиці, з якого необхідно витягнути дані |
| Мітка поля | Назва поля пов’язаної таблиці, з якого необхідно витягнути дані |
| Тип агрегації | Лише для Тип = Агрегація. Спосіб згортання записів: Сума, Середнє, Кількість, Мінімум, Максимум, Перший, Останній або Об'єднання. |
| Джерело агрегації | Лише для Тип = Агрегація. Поле агрегує значення поля, вказаного в ID поля; Зіставлення агрегує обчислені значення повторюваного коду зіставлення. |
| Код зіставлення для агрегації | Лише для Джерело агрегації = Зіставлення. Повторюваний код зіставлення, значення якого агрегуються. Він має використовувати ту саму повторювану таблицю, що й Дані пов'язаної таблиці. |
| Розділювач | Лише для Тип агрегації = Об'єднання. Текст, який вставляється між двома значеннями. Типово - кома і пробіл; залиште порожнім, щоб об'єднати значення без розділювача. |
| Правило перетворення | Використовуйте правило перетворення, якщо отримане в певному виразі значення має бути конвертовано в інший формат вивантаження в звіті. |
Агрегація набору записів
Вираз з Тип = Агрегація повертає одне значення, обчислене за всіма записами таблиці, вказаної в полі Дані пов'язаної таблиці, а не значення одного запису. Саме так формується підсумок документа: без агрегації додати рядки може лише додаток-споживач, що неможливо для поля заголовка документа.
Набір, що агрегується, - це змінна таблиці, розв'язана в поточному контексті: її власні фільтри плюс зв'язок з батьківською таблицею. Нічого іншого налаштовувати не потрібно, і це єдине правило дає обидві форми:
- з коду зіставлення, який не є повторюваним, за повторюваною таблицею рядків - підсумок документа (усі рядки документа);
- з коду зіставлення, який є повторюваним, за таблицею, пов'язаною з таблицею рядків, - підсумок по рядку (лише записи, що належать рядку, який зараз обчислюється).
Правила, які варто знати перед налаштуванням:
- Сума і Середнє потребують поля типу Decimal або Integer. Поле іншого типу відхиляється помилкою, яка називає шаблон, код зіставлення і номер рядка виразу.
- За порожнім набором Сума і Кількість повертають
0, а всі інші типи агрегації - порожнє значення. Середнє ніколи не завершується помилкою ділення на нуль. - Порожні значення пропускаються типами Сума, Середнє, Мінімум, Максимум і Об'єднання. Перший і Останній є позиційними і повертають значення першого чи останнього запису, навіть якщо воно порожнє.
- Кількість рахує записи й ігнорує ID поля.
- Перший, Останній і порядок Об'єднання відповідають полям Поле сортування та Порядок сортування таблиці, а якщо поле сортування не заповнене - її первинному ключу (див. Сортування записів таблиці).
- Поле Максимальна кількість записів таблиці обмежує також і агрегацію, тому підсумок завжди відповідає рядкам, які насправді сформовано.
- Мінімум і Максимум порівнюють числа як числа, а решту - як текст. Дати, дата/час і час сортуються правильно, оскільки рушій форматує їх у форматі ISO.
- Правило перетворення рядка застосовується до результату агрегації, а не до кожного запису.
- Джерело агрегації = Зіставлення обчислює повторювану таблицю на вимогу, якщо рушій ще до неї не дійшов. Агрегація, яка врешті залежить сама від себе, відхиляється помилкою, що показує ланцюжок кодів зіставлення.
- Продуктивність: агрегація читає записи набору один раз. Якщо в таблиці вже є поле типу FlowField, яке підсумовує потрібне (наприклад, Загальна сума в заголовку документа), вираз з Тип = Поле за цим полем буде швидшим, бо базa даних відповідає на нього з індексу.
6. Перевірка шаблону
Дія Перевірити шаблон у списку Шаблони даних і на картці Шаблон даних перевіряє всю конфігурацію вибраного шаблону та перелічує все, що в ній не так, — за один раз, щоб ви виправляли список, а не знаходили по одній помилці на кожен документ.
Що ця перевірка робить і чого не робить:
- Вона читає лише конфігурацію та метадані таблиць. Вона ніколи не читає бізнес-запис, тому її безпечно виконувати будь-коли й у будь-якій компанії — і вона не може сказати, чи ваші дані відповідають фільтрам, а лише чи самі фільтри правильні.
- Вона нічого не змінює. Жоден рядок налаштування не створюється, не змінюється й не видаляється під час перевірки, і ніщо не виправляється автоматично.
- Ніщо не запускає її за вас. Шаблон, який ніколи не перевіряли, і далі вперше «падає» у застосунку, що його викликає.
- Одного вона не може перевірити ніколи: які застосунки використовують цей шаблон. Це розширення не залежить від застосунків, які його викликають, і не може прочитати їхні налаштування, тому жодне правило не скаже, хто посилається на код шаблону чи на код зіставлення. Перейменовувати або видаляти їх безпечно лише після того, як ви подивилися налаштування застосунку, що викликає шаблон.
Кожен рядок результату — це одне зауваження:
| Колонка | Що це |
|---|---|
| Серйозність | Наскільки важливе зауваження — див. нижче. |
| Код правила | Стабільний код правила, яке його створило; перелік — у розділі Довідник правил. |
| Повідомлення | Що саме не так і що потрібно змінити. |
| Код таблиці, Код зіставлення, Номер рядка виразу | Якого рядка налаштування стосується зауваження. |
Виберіть Показати рядок, щоб відкрити цей рядок налаштування та виправити його. Дія недоступна для зауваження, що стосується шаблону в цілому.
Серйозність
- Помилка — шаблон не може дати правильний результат. Більшість помилок зупиняють увесь розрахунок, а не лише одне значення, тому застосунок не отримує нічого.
- Попередження — конфігурація приймається, але, найімовірніше, робить не те, на що вона схожа. Прочитайте й вирішіть; ніщо вас не блокує.
- Інформація — те, про що варто знати. Нічого не зламано.
Довідник правил
Шаблон
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
TPL-MISSING |
Помилка | Коду шаблону більше не існує. | Оновіть список: шаблон видалили, коли сторінка була відкрита. |
TPL-EMPTY |
Помилка | Шаблон не має ні таблиць, ні кодів зіставлення, тому не створює нічого. | Додайте змінну, яка читає запис вихідної таблиці, а потім коди зіставлення. |
TPL-NO-SOURCE |
Помилка | Поле Ідентифікатор вихідної таблиці порожнє, тому шаблон не вказує, що передає застосунок. | Введіть номер цієї таблиці, наприклад 112 для Заголовка рахунку продажу. |
TPL-BAD-SOURCE |
Помилка | Ідентифікатор вихідної таблиці не є таблицею в цій базі даних. | Виберіть наявну таблицю. Застосунок, якому належала попередня, може бути видалений. |
TPL-NO-ROOT |
Помилка | Жодна таблиця шаблону не позначена як коренева, тому нічого не визначається із переданого запису. | Введіть номер вихідної таблиці в Ідентифікатор таблиці тієї таблиці, що відповідає цьому запису; ознаку Корінь установить перевірка цього поля. |
TPL-ROOT-MISMATCH |
Помилка | Таблиця позначена як коренева, але читає іншу таблицю, ніж Ідентифікатор вихідної таблиці. Ознака Корінь зберігається в базі, а вихідна таблиця її не перевизначає, тому саме так виглядає шаблон після зміни вихідної таблиці. | Виправте Ідентифікатор таблиці цієї таблиці або зробіть кореневою іншу. |
TPL-ROOT-NOT-SET |
Помилка | Таблиця читає саме вихідну таблицю, але не позначена як коренева, тому запис, який передає застосунок, ніколи не використовується. | Введіть її Ідентифікатор таблиці заново — перевірка цього поля встановить ознаку Корінь. |
TPL-MULTI-ROOT |
Помилка | Кореневою позначено більше однієї таблиці. | Залиште один корінь, а в інших змініть ідентифікатор таблиці. |
TPL-NO-MAPPINGS |
Помилка | Тип — Зіставлення, але кодів зіставлення немає, тому розрахунок не повертає нічого. | Додайте коди зіставлення, які запитує застосунок, або змініть тип. |
TPL-FILTER-MAPPINGS |
Попередження | Тип — Пошук записів, тому коди зіставлення ніколи не розраховуються. | Видаліть їх або змініть тип на Зіставлення. |
TPL-FILTER-REPEAT |
Інформація | Шаблон типу Пошук записів містить повторювану таблицю, яку перевірка «так/ні» ігнорує. | Змінювати нічого не потрібно. Вимкніть Повторювана, якщо цю таблицю мали перевіряти. |
Таблиці
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
TAB-NO-TABLE |
Помилка | У змінній не вказано, яку таблицю вона читає. Це зупиняє весь шаблон, зокрема відповідь «так/ні» шаблону Пошук записів. | Введіть Ідентифікатор таблиці або видаліть змінну. |
TAB-BAD-TABLE |
Помилка | Ідентифікатор таблиці не є таблицею в цій базі даних. | Виберіть наявну таблицю. |
TAB-NO-PARENT |
Попередження | Змінна не є кореневою, не має Батьківського коду даних і фільтрів, тому визначається як перший запис усієї таблиці. | Додайте батьківський код даних із фільтром за пов’язаним полем або постійний фільтр. Залиште як є лише для таблиці з одним записом, наприклад Інформація про організацію. |
TAB-PARENT-MISSING |
Помилка | Батьківський код даних указує на змінну, якої не існує. | Виберіть наявну змінну або очистіть поле. |
TAB-PARENT-CYCLE |
Помилка | Ланцюг батьківських кодів даних замкнений у коло. Повідомлення показує цей ланцюг. | Розірвіть ланцюг на одній зі змінних, які він називає. |
TAB-REPEAT-NO-LINK |
Помилка | Повторювана змінна вказує батьківську, але не має фільтра за пов’язаним полем, тому для кожного документа читаються всі записи таблиці. | Додайте фільтр із Типом = Пов’язане поле, який з’єднує її з батьківським записом. |
TAB-LATEST-REPEAT |
Помилка | Увімкнено і Повторювана, і Останній, а вони суперечать одне одному. | Вимкніть одне: Останній бере останній запис, Повторювана бере всі. |
TAB-SORT-FIELD |
Помилка | Поле сортування або Поле сортування 2 не існує, відключене або є полем, за яким база даних не може впорядкувати записи (FlowField, FlowFilter, BLOB або медіа-поле). | Виберіть інше поле сортування або введіть 0 для порядку первинного ключа. |
TAB-MAX-RECORDS |
Помилка | Максимальна кількість записів задана для змінної, яка не є повторюваною, тому обмеження не застосовується. | Увімкніть Повторювана або задайте 0. |
TAB-NO-DEFAULT |
Помилка | Якщо запис не знайдено — Використати значення за замовчуванням, але саме значення порожнє. | Введіть значення за замовчуванням або виберіть Залишити порожнім. |
TAB-DEFAULT-TYPE |
Помилка | Значення за замовчуванням неможливо прочитати як тип даних коду зіставлення, який читає цю змінну. | Введіть його в інваріантному форматі цього типу (0, 1234.56, 2026-08-17, true) або змініть тип даних коду зіставлення. |
Фільтри
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
FLT-FIELD-MISSING |
Помилка | Поля, за яким фільтрують, не існує в таблиці, яку читає змінна, або воно відключене. | Видаліть рядок фільтра та введіть його заново. |
FLT-FIELD-OBSOLETE |
Попередження | Поле, за яким фільтрують, позначене в Business Central як застаріле, тому оновлення може його видалити. | Фільтруйте інше поле. |
FLT-ORPHAN |
Інформація | Рядки фільтра належать змінній, якої більше не існує. Вони ніколи не застосовуються, і сторінки налаштування взагалі не можуть до них дістатися, бо фільтри відкриваються з рядка змінної. | Виберіть Показати рядок на зауваженні — це єдиний шлях до них — і видаліть їх. Або створіть змінну заново. |
FLT-STALE-TABLE |
Помилка | Рядок фільтра все ще містить таблицю попередньої конфігурації. | Видаліть фільтр і введіть його заново. |
FLT-STALE-PARENT |
Помилка | З’єднання все ще очікує батьківську таблицю попередньої конфігурації. | Введіть Код таблиці змінної ще раз — це оновить збережену батьківську таблицю. |
FLT-LINK-NO-PARENT |
Помилка | Тип — Пов’язане поле, але змінна не має Батьківського коду даних, з якого брати значення. | Введіть батьківський код даних або змініть тип фільтра на Фільтр. |
FLT-LINK-NO-FIELD |
Помилка | Тип — Пов’язане поле, але Ідентифікатор пов’язаного поля порожній. | Введіть поле батьківського запису, значення якого використовує з’єднання. |
FLT-LINK-BAD-FIELD |
Помилка | Ідентифікатор пов’язаного поля не існує в батьківській таблиці або поле відключене. | Виберіть інше пов’язане поле. |
FLT-LINK-TYPE |
Помилка | Два з’єднані поля мають типи, які не можна порівнювати, наприклад поле коду та поле-варіант. | З’єднуйте поля одного типу. |
FLT-VALUE-SYNTAX |
Помилка | Значення фільтра не є виразом фільтра, який Business Central приймає для цього поля. Перевіряються обидва типи фільтра: у рядку Фільтр значення є цілим фільтром, а в рядку Пов’язане поле — шаблоном, у який підставляється значення батьківського запису. Перевірка передає значення платформі, не виконуючи фільтр, тому жодного запису не читається. | Виправте його, наприклад на 1000..2000, <>'' або A\|B. |
FLT-PATTERN-TOKEN |
Попередження | Рядок типу Пов’язане поле має Значення фільтра, яке тоді використовується як шаблон для значення батьківського запису, — але не містить %1, тому це значення відкидається і з’єднання просто пропускає все, що допускає шаблон. |
Поставте %1 там, де має бути значення батьківського запису (<>%1, %1..), або очистіть Значення фільтра, щоб з’єднувати за рівністю. |
FLT-VALUE-LANGUAGE |
Попередження | Значення фільтра поля-варіанта, логічного поля, дати, дати й часу або часу містить текст, що залежить від мови сеансу — мітку варіанта, Так/Ні або локалізовану дату. Тоді шаблон перестає знаходити записи іншою мовою. | Використайте значення, незалежне від мови: номер варіанта, 1/0 або дату в форматі ISO, наприклад 20260817. |
Коди зіставлення
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
MAP-NO-REPEAT-TABLE |
Помилка | Повторюваний увімкнено, але Повторювана таблиця даних порожня. | Введіть повторювану змінну, рядки якої створює цей код зіставлення. |
MAP-BAD-REPEAT-TABLE |
Помилка | Повторювана таблиця даних указує на змінну, якої не існує або яка не є повторюваною. | Виберіть змінну, у якій увімкнено Повторювана. |
MAP-INDEX-NOT-REPEAT |
Помилка | Індекс повторення увімкнено, а Повторюваний вимкнено, тому нічого не нумерується. | Увімкніть Повторюваний або вимкніть Індекс повторення. |
MAP-NO-EXPRESSIONS |
Помилка | Код зіставлення не має рядків виразу, тому його значення завжди порожнє. | Додайте хоча б один рядок виразу. Код зіставлення з Індексом повторення не потребує рядків і ніколи не повідомляється. |
MAP-UNREFERENCED |
Інформація | У шаблоні Пошук записів жоден вираз не читає цей код зіставлення, і жодне значення не потрапляє до застосунку. У шаблоні Зіставлення це ніколи не повідомляється: коди зіставлення й існують для того, щоб їх читав застосунок, якого це розширення не бачить, тому відсутність зауваження тут не означає, що код комусь потрібен. | Видаліть його або змініть тип шаблону. |
MAP-FORMAT-TYPE |
Помилка | Кількість десяткових знаків або Вираз формату задано для типу даних, який їх не використовує. | Очистіть їх або виберіть інший тип даних. Десяткові знаки належать типу Десяткове число; формат застосовується до Цілого числа, Десяткового числа, Дати, Дати й часу та Часу. |
MAP-FORMAT-INVALID |
Помилка | Вираз формату не є форматом, який Business Central може застосувати до вказаного типу даних. | Виправте його, наприклад на <Year4>-<Month,2>. |
Вирази
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
EXP-ORPHAN |
Інформація | Існують рядки виразу для коду зіставлення, якого вже немає. Вони ніколи не розраховуються — «мертва» конфігурація, безпечна під час виконання. | Видаліть їх або створіть код зіставлення. |
EXP-CONST-EMPTY |
Помилка | Тип — Константа, а Значення константи порожнє, тому рядок нічого не додає. | Введіть текст або видаліть рядок. |
EXP-NO-TABLE |
Помилка | Тип — Поле або Агрегація, а Пов’язані дані таблиці порожні. | Введіть код змінної, яку потрібно читати. |
EXP-TABLE-MISSING |
Помилка | Пов’язані дані таблиці вказують на змінну, якої немає в цьому шаблоні. | Виберіть наявну змінну. |
EXP-NO-TABLE-ID |
Помилка | Рядок узагалі не містить номера таблиці своєї змінної, тому розрахунок на ньому зупиняється. У такому стані рядок може з’явитися лише через імпорт: введення коду змінної заповнює цей номер. | Введіть код змінної заново. |
EXP-STALE-TABLE |
Помилка | Рядок усе ще читає поля таблиці, яку змінна читала раніше. | Введіть код змінної заново — це оновить номер таблиці, збережений у рядку. |
EXP-NO-FIELD |
Помилка | Рядок мусить називати поле, але не називає. Це зупиняє весь розрахунок. | Введіть ID поля. Агрегація типу Кількість поля не потребує. |
EXP-FIELD-MISSING |
Помилка | Поля не існує в таблиці, яку читає змінна, або воно відключене. | Виберіть інше поле. |
EXP-FIELD-OBSOLETE |
Попередження | Поле позначене в Business Central як застаріле, тому оновлення може його видалити. | Читайте інше поле. |
EXP-DATA-EMPTY |
Помилка | Тип — Дані, але код зіставлення не вказано. Це зупиняє весь розрахунок. | Введіть код зіставлення, значення якого читає рядок. Пам’ятайте: коли Тип — Дані, поле Пов’язані дані таблиці містить код зіставлення. |
EXP-DATA-MISSING |
Помилка | Тип — Дані, а вказаного коду зіставлення не існує. | Виберіть наявний код зіставлення. |
EXP-DATA-CYCLE |
Помилка | Два або більше кодів зіставлення читають одне одного по колу, тому жоден не можна розрахувати. | Розірвіть коло. |
EXP-REPEAT-READS |
Попередження | Повторюваний код зіставлення читає код зіставлення, який розраховується один раз для всього документа, тому те саме значення з’являється в кожному рядку. | У деяких шаблонах це задумано — номер документа в кожному рядку. Інакше читайте поле рядка. |
EXP-FIRST-OPERATION |
Попередження | Перший рядок коду зіставлення використовує +, -, * або /, якому нема над чим працювати; механізм просто додає рядок. |
Задайте Операцію Об’єднання в першому рядку або перемістіть рядок нижче. |
EXP-DIV-EMPTY |
Попередження | Рядок ділить на значення, яке може бути порожнім або нулем, і тоді розрахунок зупиняється з помилкою. | Переконайтеся, що дільник ніколи не буває порожнім і не дорівнює нулю, або діліть на константу. |
EXP-RULE-MISSING |
Помилка | Правило перетворення вказує на правило, якого не існує. | Виберіть наявне правило перетворення або очистіть поле. |
EXP-AGG-NO-TYPE |
Помилка | Тип — Агрегація, а Тип агрегації не заданий. | Виберіть, як згортати записи, наприклад Сума. |
EXP-AGG-NO-SOURCE |
Помилка | Тип — Агрегація, а Джерело агрегації не задане. | Виберіть Поле або Зіставлення. |
EXP-AGG-FIELD-TYPE |
Помилка | Сума або Середнє за полем, яке не є числом. | Агрегуйте числове поле або виберіть Кількість, Мінімум, Максимум, Перший, Останній чи Об’єднання. |
EXP-AGG-MAPPING |
Помилка | Код зіставлення для агрегації не існує, не є повторюваним або належить іншій повторюваній змінній, ніж та, яку агрегують. | Виберіть повторюваний код зіставлення тієї самої змінної, що й Пов’язані дані таблиці. |
EXP-AGG-SEPARATOR |
Інформація | Розділювач задано для агрегації, яка не є Об’єднанням, а всі інші типи його ігнорують. | Очистіть його або виберіть Об’єднання. |
Інше
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
INTERNAL |
Помилка | Одне правило самої перевірки не вдалося виконати — наприклад, тому що таблиця належить застосунку, який більше не встановлено. Усі інші правила виконано. | Зауваження говорить, що частина перевірки відсутня, а не що не так із шаблоном. Повідомте текст, який воно містить. |
7. Перенесення шаблону між компаніями
Шаблон даних — це велика конфігурація, яку зазвичай налаштовують один раз, а потім хочуть мати ще десь: в іншій компанії, в іншому тенанті, у тестовій базі. Для цього є три дії у списку Шаблони даних і на картці Шаблон даних: Експортувати шаблон, Імпортувати шаблон і Копіювати шаблон.
Що містить файл
Експортувати шаблон записує вибраний шаблон в один файл JSON: заголовок шаблону, кожну змінну з її фільтрами, кожен код зіставлення з рядками виразів. І більше нічого — у файлі лише конфігурація й жодного бізнес-запису, тому його безпечно надіслати колезі або прикріпити до звернення в підтримку.
Файл записано так, щоб його можна було читати й порівнювати:
| Властивість | Що це означає для вас |
|---|---|
| Усе в одному файлі | Один шаблон, повністю. Немає другого файлу й немає порядку, у якому потрібно імпортувати кілька файлів. |
| Номери таблиць і полів разом з їхніми назвами | Вирішує завжди номер. Назва записана для того, хто читає файл — людини або ШІ — щоб було видно, що таке таблиця 112 і поле 22, і під час імпорту вона повністю ігнорується. Назви — це неперекладені назви Business Central, тому той самий шаблон експортується в той самий файл будякою мовою. |
| Значення записані повністю | У файлі є кожне налаштування, зокрема порожні, нульові й вимкнені. Ви бачите весь словник конфігурації. |
| Немає дати, користувача й компанії | Два експорти того самого шаблону дають абсолютно однаковий файл, тому два файли можна порівняти будь-яким текстовим інструментом і побачити, що справді відрізняється. |
schemaVersion |
Версія схеми формату. Див. Що робить старіший або новіший файл нижче. |
Файл — це звичайний текст. Його можна редагувати, але безпечний спосіб змінити шаблон — імпортувати його та змінювати в Business Central: імпорт перевіряє те, що ви йому даєте, а текстовий редактор ні.
Імпорт
Імпортувати шаблон запитує файл, і шаблон імпортується під тим кодом, який містить файл. Якщо в цій компанії вже є шаблон даних із таким кодом, вас один раз запитають, чи замінити його: відповісте «Ні» — не відбувається анічого; відповісте «Так» — наявний шаблон видаляється, а файл записується на його місце за один крок. Перед відповіддю «Так» прочитайте Перш ніж замінювати шаблон нижче.
Щоб той самий шаблон був у компанії двічі, імпортуйте його, а потім скористайтеся дією Копіювати шаблон, щоб зробити дублікат під другим кодом.
Нічого не записується, доки все не пройде перевірку. Імпорт спочатку читає весь файл, потім перевіряє, що кожна таблиця й поле з нього існують у цій базі даних, потім записує шаблон, а потім виконує ту саму перевірку, що й Перевірити шаблон, — і якщо вона знаходить помилку, увесь імпорт скасовується. Напівімпортованого шаблону не буває: або шаблон є й він повний, або компанія рівно така, якою була.
У відповідь ви отримуєте список зауважень на тій самій сторінці й з тими самими серйозностями, що й у Перевірити шаблон (§6): Помилка означає, що нічого не імпортовано, Попередження — шаблон імпортовано, але є те, що вам варто знати, Інформація — варто прочитати один раз.
Імпорт ніколи нічого в шаблоні не перейменовує: код шаблону береться з файлу, а коди змінних, коди зіставлення й усі посилання між ними — рівно такі, як у файлі.
Перш ніж замінювати шаблон
Застосунки, які використовують шаблон даних, посилаються на нього за його кодом, а їхні налаштування живуть у розширеннях, від яких це розширення не залежить і яких не бачить. Жодна перевірка тут не скаже вам, хто використовує шаблон, — саме тому питання взагалі ставиться, а заміна не відбувається сама собою. Перш ніж відповісти «Так», подивіться налаштування застосунку, який викликає шаблон: код зіставлення, якого немає у файлі, — це значення, яке той застосунок перестане отримувати.
Що робить старіший або новіший файл
Формат має версію у вигляді major.minor.
- Новіший minor (
1.1там, де ця версія читає1.0) імпортується як завжди. Налаштування, яких ця версія не знає, ігноруються. - Старіший файл так само імпортується як завжди. Налаштування, якого в ньому немає, отримує своє значення за замовчуванням.
- Інший major (
2.0) відхиляється з повідомленням, яке називає версію, що її читає ця версія. Експортуйте файл ще раз із Business Central відповідної версії.
Копіювання шаблону в межах однієї компанії
Копіювати шаблон створює повний дублікат під новим кодом: кожну змінну, фільтр, код зіставлення та рядок виразу. Всередині шаблону не змінюється нічого — коди змінних і коди зіставлення лишаються такими, як були, бо вони означають те саме під будь-яким кодом шаблону.
Два моменти, які варто знати:
- Копію не перевірено. Це зроблено навмисно: шаблон часто копіюють саме тому, що він зламаний і потрібне місце, де його полагодити. Виберіть Перевірити шаблон на копії, коли завершите зміни.
- Новий код має бути вільним. Зайнятий код відхиляється, і наявний шаблон при цьому не змінюється.
Довідник правил імпорту
Кожне зауваження імпорту має один із цих кодів. Тут можуть з’явитися й коди Перевірити шаблон (§6): імпорт виконує ту перевірку на записаному шаблоні, і будь-яка її помилка скасовує імпорт.
| Код правила | Серйозність | Що це означає | Як виправити |
|---|---|---|---|
IMP-VERSION |
Помилка | Файл не вказує версію схеми формату, версія не читається, або її major ця версія не знає. | Експортуйте файл ще раз із Business Central тієї версії, яку названо в повідомленні. |
IMP-JSON |
Помилка | Щось у файлі відсутнє або має не той вид — число там, де має бути текст, список там, де має бути налаштування. Повідомлення називає місце у файлі. | Виправте файл у цьому місці або експортуйте його заново замість редагування. |
IMP-CODE |
Помилка | Код шаблону порожній, або значення у файлі довше за поле, яке його вміщує. Нічого не скорочується, бо скорочений код — це вже інший шаблон. | Виправте значення у файлі або у вихідному шаблоні й експортуйте його заново. |
IMP-EXISTS |
Помилка | Код уже існує, а заміну не підтверджено. Нічого не змінено. Це ж відповідає завжди й запланований або програмний імпорт, щоб він ніколи не перезаписав шаблон мовчки. | Імпортуйте файл ще раз і підтвердьте заміну або спершу перейменуйте наявний шаблон. |
IMP-ENUM |
Помилка | Значення вибору у файлі невідоме цій версії — файл походить із бази, де встановлено розширення, якого тут немає, або значення набрано з помилкою. | Установіть відсутнє розширення або виправте це значення у файлі. |
IMP-TABLE |
Помилка | Файл називає таблицю, якої немає в цій базі даних. Нічого не вигадується й нічого не імпортується. | Установіть розширення, якому належить ця таблиця, або спрямуйте шаблон на таблицю, що існує тут. |
IMP-FIELD |
Помилка | Файл називає поле, якого немає в цій таблиці тут. | Так само: установіть те, чому воно належить, або виправте поле у вихідному шаблоні й експортуйте його заново. |
8. Сценарії використання
Сценарій 1: Експорт даних документа
- Створіть шаблон для документа (наприклад, Рахунок на продаж).
- Додайте основну таблицю документа та таблицю рядків як повторювану.
- Налаштуйте фільтри для зв’язку рядків із заголовком.
- Визначте мапінг-коди для полів заголовка та рядків.
- Додайте вирази для обчислення значень (наприклад, конкатенація полів, умови).
Сценарій 2: Інтеграція даних
- Створіть шаблон для інтеграції.
- Додайте всі необхідні таблиці (наприклад, Клієнт, Заголовок продажу, Рядок продажу).
- Використовуйте фільтри для вибору потрібних записів.
- Визначте мапінг-коди для полів інтеграції.
- Використовуйте вирази для трансформації даних.
Сценарій 3: Кастомна звітність
- Створіть шаблон для звіту.
- Додайте таблиці та налаштуйте зв’язки.
- Визначте мапінг-коди для колонок звіту.
- Використовуйте вирази для обчислюваних колонок (наприклад, підсумки, умовні значення).