1С: Обчислювані поля в СКД
- Що таке обчислюване поле
- Масив значень в одній комірці
- Звернення до експортних функцій загального модуля
- Вирази мови компонування
Грамотне використання схеми компонування даних (СКД) дозволяє:
- значно знизити час, необхідний на розробку звіту;
- позбутися від необхідності створення керованої форми обробника;
- отримати на виході гарний результат з можливістю додаткової настройки користувачем.
Але далеко не всі розробники по максимуму використовують можливості схеми, так як не всі її налаштування очевидні і інтуїтивно зрозумілі. Зокрема багато хто знає, що в 1С в СКД є обчислювані поля, однак, не до кінця уявляють область їх використання і методи роботи з ними.
Що таке обчислюване поле
У більшості випадків в якості джерела даних в схемі компоновки виступає запит. В принципі, всередині самого запиту вже можна використовувати різні формули, конструкції і вирази. Виникає закономірне питання, навіщо ж потрібен дублюючий функціонал?
Справа в тому, що СКД - це щось більше, ніж просто відображення результату виконання запиту і це прекрасно видно з форми створення схеми (Рис.1).
рис.1
Обчислювані поля дозволяють виконувати певні дії зі сформованим набором даних:
- Виводити в певну комірку масив даних, отриманих запитом, з'єднавши кілька рядків в одну;
- Звертатися до експортних функцій загального модуля;
- Виконувати різні вирази, доступні для мови компонування і використання спеціальних функцій ВичіслітьВираженіе.
Давайте з цього списку і підемо.
Масив значень в одній комірці
Змоделюємо ситуацію, коли необхідно отримати в окрему клітинку всі номери документів надходження по контрагенту:
таким чином, ми в нашій схемі створили додаткове розрахункове поле;
Як видно з наведеного прикладу, ніяких складнощів в додаванні і обробці обчислюваних полів немає. Ми використовували дві функції: Масив () і СоедінітьСтрокі ().
Кілька слів про останню. Крім першого параметра, що вказує на ідентифікатор масиву, таблиці значень або значення, в ній можуть бути встановлені ще два:
- РазделітельЕлементов - вказує, який символ буде відокремлювати один елемент масиву або один рядок таблиці значень від іншого (в нашому випадку ми опустили цей параметр і за замовчуванням був призначений перенесення рядка);
- РазделітельКолонок - символ, який використовується для поділу колонок таблиці значень (за замовчуванням використовується крапка з комою).
Звернення до експортних функцій загального модуля
Як джерело даних для заповнення обчислюваного поля можуть виступати функції загального модуля.
Кілька важливих моментів:
- Функція обов'язково повинна бути експортної;
- Якщо функція розташована в загальному модулі з встановленим ознакою «Глобальний», її виклик здійснюється безпосередньо на ім'я, в іншому випадку виклик функції має відбуватися за схемою «Ім'я загального модуля». «Ім'я викликається функції».
Як приклад використання ми візьмемо той же самий запит до документів надходження і виведемо «Суму документа» прописом в окрему колонку. Сам запит ми описувати не будемо, перейдемо безпосередньо до обчислюваним полях:
- Створимо нове поле «СуммаПропісь»;
- Визначимо його вираз, як на Рис.6; рис.6
- Загалом модулі створимо експортну функцію (Рис.7); рис.7
- Етап настройки звіту пропустимо і відразу подивимося на результат (Рис.8). Мал. 8
Таким чином, ми бачимо, що практично будь-який обробник даних може бути инициализирован з СКД, що значно розширює можливості використання схеми.
Вирази мови компонування
Досить часто в роботі розробника виникає ситуація, коли в поле СКД необхідно вивести результат ділення:
- Розрахувати середню вартість номенклатури;
- Всілякі відсотки;
- Розрахунки середнього заробітку і т.д.
Щоб уникнути проблем, в цих випадках бажано в обчислюване поле ввести перевірку на розподіл на 0.
Зробити це можна за допомогою конструкції «Вибір Коли ... .Тоді ... Інакше ... Кінець».
В кінці кілька слів про досить нової функції ВичіслітьВираженіе (). З її допомогою, зокрема можна обчислювати відхилення у вартості між поточною і попередньої рядком, накопичувальний залишок і т.д.
Припустимо, отримати СуммуДокумента з попереднього рядка нашого запиту можна вказавши в полі «Вираз» значення ВичіслітьВираженіе ( «СуммаДокумента» ,,, «ПредидущаяСумма»).
Виникає закономірне питання, навіщо ж потрібен дублюючий функціонал?