Крос-таблиця з табличній частині або запиту

Дане завдання зустрічалася мені кілька разів. Кожен раз в новій інтерпретації, але суть приблизно однакова: "Хочу, щоб по рядках були товари, по колонках склади, а на перетині - кількість". Замість товари-склади, може бути що завгодно: дата-контрагент, номенклатура + колір - розмір і т.д.

Крос-таблиця з табличній частині або запиту

Для прикладу візьмемо деякий документ з табличній частиною Залишки на кінець зміни. Структура полів табличній частині представлена ​​на малюнку справа.

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

Основна складність в зіставленні колонок крос-таблиці з відповідними рядками табличній частині. Нижче представлені три процедури, які вирішують це завдання за кілька рядків коду. Ось приклад їх використання:

Невеликі пояснення:
1. Додаткова інформація для зв'язку між вихідної та кінцевої таблицями зберігається у службовій таблиці. Її необхідно зберігати впродовж всієї роботи з крос-таблицею. Її структура проста: Ім'я, Тема і Тип колонок, а також імена полів табличній частині, по поєднанню яких будуть створюватися колонки. У моєму прикладі це одне поле "Стелаж", але їх може бути і декілька, наприклад "Номенклатура, Характеристика". Для розглянутого прикладу структура службової таблиці з даними представлена ​​на малюнку

Крос-таблиця з табличній частині або запиту

Крос-таблиця з табличній частині або запиту

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

Зазначу також, що дані методи можна використовувати не тільки для розгортання табличній частині, а й таблиці із запиту (наприклад, в АРМе)

Процедури тестувалися на платформі 8.3 в режимі сумісності з 8.2. Проте швидше за все будуть працювати і на платформі 8.1

Прикладаю працюючий приклад для звичайних і керованих форм. Зазначу, що для звичайних форм завдання навмисно кілька ускладнена - в крос-таблицю додана службова колонка з сумою по рядку, а також виводяться всі стелажі, які пов'язані зі складом, в тому числі і ті, які не мають в табличній частині.

Крос-таблиця з табличній частині або запиту