Передати таблицю значень в скд. набори даних

Часом трапляється, що дані в звіті не можна отримати за допомогою запиту або комбінації запитів. Доводиться користуватися якимись процедурами для збору даних, а дані містяться в таблицю значень. Виникає питання - чи можна ці дані використовувати в схемі компоновки даних? Адже СКД інструмент потужний і зручний. Виявляється, що використовувати дані з таблиці значень в якості джерела даних для звіту в СКД можна і зробити це зовсім не складно. У цій статті буде показано створення такого звіту для звичайних форм.
Отже, як створити звіт СКД з використанням даних з таблиці значень? Про все по порядку.
Насамперед відкриваємо конфигуратор і створюємо новий зовнішній звіт.

Відкриваємо модуль об'єкта і створюємо зумовлену процедуру ПріКомпоновкеРезультата (ДокументРезультат, ДанниеРасшіфровкі, СтандартнаяОбработка)

Всередині цієї процедури будемо збирати дані і формувати звіт.
У процедурі ПріКомпоновкеРезультата відключаємо стандартну обробку. СтандартнаяОбработка \u003d Брехня;
Потім формуємо таблицю значень довільним чином. Імена колонок таблиці значень повинні збігатися з майбутніми полями набору даних в СКД .:


Для прикладу додамо три рядки даних. Далі по кроках створюємо висновок звіту.

  • Зі схеми отримуємо налаштування за замовчуванням.

  • У відповідну змінну відправляємо дані про розшифровку.

  • Формуємо макет за допомогою компоновщика макета.

  • Передаємо в макет компонування схему, настройки і дані розшифровки.

  • Виконуємо компонування за допомогою процесора компонування. Для цього виконуємо метод процесора компонування даних Ініціалізувати (). Як параметри передаємо макет компонування даних, зовнішні набори даних (тип: Структура, ключ структури повинен збігатися з ім'ям об'єкта в схемі компоновки даних, значення - сформована таблиця значень), дані розшифровки.

  • Очищаємо поле табличного документа.

  • Виводимо результат в табличний документ.
У підсумку виходить наступний код:
СхемаКомпоновкіДанних \u003d ПолучітьМакет ( "ОсновнаяСхемаКомпоновкіДанних"); // Налаштування \u003d СхемаКомпоновкіДанних.НастройкіПоУмолчанію; // - Якщо зробити так, як показано вище (рекомендують на деяких ресурсах), то при зміні налаштувань в режимі клієнта // цих змін Ви не побачите, тому що настройки завжди будуть за замовчуванням. Як правильно - варіант нижче Налаштування \u003d КомпоновщікНастроек. ПолучітьНастройкі (); ДанниеРасшіфровкі \u003d Новий ДанниеРасшіфровкіКомпоновкіДанних; КомпоновщікМакета \u003d Новий КомпоновщікМакетаКомпоновкіДанних; МакетКомпоновкі \u003d КомпоновщікМакета. Виконати (СхемаКомпоновкіДанних, Налаштування, ДанниеРасшіфровкі); ВнешнійНаборДанних \u003d Новий Структура ( "ПрімерТабліциЗначеній", ТЗВивод); ПроцессорКомпоновкіДанних \u003d Новий ПроцессорКомпоновкіДанних; ПроцессорКомпоновкіДанних. Ініціалізувати (МакетКомпоновкі, ВнешнійНаборДанних, ДанниеРасшіфровкі); ДокументРезультат. Очистити (); ПроцессорВивода \u003d Новий ПроцессорВиводаРезультатаКомпоновкіДаннихВТаблічнийДокумент; ПроцессорВивода. УстановітьДокумент (ДокументРезультат); ПроцессорВивода. Вивести (ПроцессорКомпоновкіДанних); Додаємо макет схеми компонування. Назва можемо залишити за замовчуванням.

Створюємо набір даних. Для цього додаємо новий набір даних типу Об'єкт. В поле Ім'я об'єкта, що містить даних поміщаємо то назва, яке ми вказали в якості ключа при створенні структури ВнешійНаборДанних. Потім додаємо поля. Імена повинні точно збігатися з іменами колонок в таблиці значень. Далі можемо вказати допустимі значення, формати і т.д.

Додаємо ресурси, якщо це необхідно. За ним будуть вважатися підсумки. У нашому випадку це поля Кількість і Сума.

У закладці Налаштування за допомогою конструктора налаштувань формуємо варіант звіту за замовчуванням

Зберігаємо наш звіт. Запускаємо його в клієнті і формуємо. Приклад виконання звіту СКД з використанням даних з таблиці значень наведено на зображенні.


От і все. Досить просто, чи не так?

Одержаний звіт для прикладу можна скачати

Вітання!
Сьогодні хочу описати тему, з якої без «акваланга» не розберешся :);)

Акваланг до того, що занурення досить глибоке. В літературі зустрічається мало посилань на цю тему і поки не «закортить» в ній не розберешся. Чи не виникне навіть посилу до такої дії;) До речі, в документації про це сказано дуже погано і непослідовно, доводиться звертатися до сторонньої літературі.

Наприклад, дуже рекомендую «Розробка складних звітів в« 1С: Підприємстві 8.2 ". Система компоновки даних », (якщо конкретніше, то дивіться стор. 224, 267 і 473)

У СКД існує 2 види джерел даних: Запит, об'єкт і об'єднання (ця штука не береться до уваги, вона не джерело даних, а обробник наявних). Див рис 1:


Отже, якщо з джерелом (набором) даних типу «Запит» нам більш-менш зрозуміло, як працювати, то з приводу набору даних «Об'єкт» є труднощі.

Для початку опишу, що ми хочемо отримати на виході:

Звіт, користувач натиснув кнопку « сформувати»І відобразився список номенклатури (див. Рис. 2):

Так, я допустив одну неточність, а саме: на знімку немає кнопки « сформувати«, Але є кнопка« нове дійстві»(Трохи пізніше поясню, чому так вийшло;)

Так Так! Ще момент: весь цей список виводиться з набору даних «Об'єкт»:

Рішення:

  1. Створюємо зовнішній звіт;
  2. Додаємо макет СКД, назвемо його «ОсновнаяСхемаКомпановкіДанних»;
  3. Додаємо в нього набір даних «Об'єкт», призначаємо йому ім'я «СпісокНоменклатури» (має бути так само, як і в рис. 3);
  4. В налаштуваннях звіту особливо не експериментуємо, нехай буде все просто (див. Рис. 4)

Ок, половину справи зробили;)

Тепер сгенерируем основну форму звіту (так, ще момент! Моя конфігурація працює на звичайному інтерфейсі, але думаю, на керованих формах ви знайдете рішення;) Отже, форма:

Тут і виникає проблема! Якщо натиснути на кнопку «сформувати» (рис. 5.), то ми побачимо помилку!


Вирішення даної проблеми я і присвятив цю статтю!

Перехопити подія кнопки «Сформувати» не вийшло, тому, вирішив скористатися милицею. Запустив конфігурацію в режимі налагодження і постарався знайти ту саму кнопку «сформувати».

Вставляв в формі процедуру «Сформувати», але в неї немає заходів, довелося перевизначити дію кнопки «сформувати» перед відкриттям форми:


На рис. 8 крім зміни дії форми наведено приклад запиту, його обробки і передачі згенерованих даних в СКД. Вивчимо його біліше уважно:

  1. Генеруємо вхідні дані для СКД;
  2. Ініціалізіруем СКД;
  3. Виводимо результат НА ФОРМУ (зверніть на це так само увагу!).

Згадаймо схему взаємодії об'єктів системи компоновки даних:

Схема компонування даних у зовнішньому звіті дотупна як глобальний об'єкт в методі форми СхемаКомпоновкіДанних.До неї так само можна звернутися по імені, передавши його в метод ПолучітьМакет(Див. Рис. 8)

Основний шматок коду наведено нижче:

Запит \u003d Новий запит; Запрос.Текст \u003d "ВИБРАТИ | Номенклатура.Наіменованіе як Номенклатура | З | Справочнік.Номенклатура ЯК Номенклатура"; НоменклатураСпісок \u003d Запрос.Виполніть (). Вивантажити (); НабориДанних \u003d Новий Структура ( "СпісокНоменклатури", НоменклатураСпісок); // СКД \u003d ПолучітьМакет ( "ОсновнаяСхемаКомпоновкіДанних"); СКД \u003d СхемаКомпоновкіДанних; КомпМакета \u003d новий КомпоновщікМакетаКомпоновкіДанних; макетКомп \u003d КомпМакета.Виполніть (СКД, СКД.НастройкіПоУмолчанію); ПроцессорКомпДанних \u003d новий ПроцессорКомпоновкіДанних; ПроцессорКомпДанних.Ініціалізіровать (макетКомп, НабориДанних); висновок \u003d новий ПроцессорВиводаРезультатаКомпоновкіДаннихВТаблічнийДокумент; вивод.УстановітьДокумент (ЕлементиФорми.Результат); вивод.Вивесті (ПроцессорКомпДанних, істина);

Так! Ось ще приємний момент !!!

В даному прикладі, як бачите (див. Рис. 2), висновок здійснюється в форму, а не в табл. документ! І це дуже добре, адже ми можемо працювати з формою (програмно перехоплювати події елемента форми, робити всякі фішки з drag and drop та інше;)

У табличному документі ми можемо просто вивести оброблені дані на екран і передати управління документом користувачеві і ми не можемо ніяк впливати на подальший процес редагування даного контенту!

Див. Довідку « Поле табличного документа «, А я всього лише наведу цитату з вбудованою документації системи 1с Підприємство 8.2:

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

Гаразд, так би мовити, успіхів в бою;)

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

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

Розглянемо поетапне створення подібного звіту і за допомогою зовнішнього набору даних побудуємо його на системі компонування даних.

Читаємо журнал реєстрації

І так, звіт будемо будувати на СКД. Дані ж ми будемо отримувати не за допомогою запиту з бази даних, а з журналу реєстрації. Про спосіб зберігання журналу реєстрації платформою писав у попередній статті.

У відповідно до заданого періоду в звіті нам потрібно отримати всі дії користувача над даними інформаційної бази. Отриману таблицю згрупувати по користувачеві і вивести у вигляді діаграми (див. Скріншот вище).

Для отримання інформації з журналу реєстрації будемо використовувати метод глобального контексту "ВигрузітьЖурналРегістраціі ()". У події "ПріКомпоновкеРезультата" створеного звіту додамо наступний програмний код:

Процедура ПріКомпоновкеРезультата (ДокументРезультат, ДанниеРасшіфровкі, СтандартнаяОбработка) СтандартнаяОбработка \u003d Брехня; // відключаємо стандартний висновок звіту - будемо виводити програмно // Отримуємо настроках звіту, в т.ч. період Налаштування \u003d КомпоновщікНастроек. ПолучітьНастройкі (); // Отримуємо настройки звіту ПараметрПеріод \u003d КомпоновщікНастроек. ПолучітьНастройкі (). ПараметриДанних. Елементи. Знайти ( "Період"). значення; ЖурТаб \u003d Новий ТабліцаЗначеній; ОтборЖурнала \u003d Новий Структура; // Створимо структуру відбору журналу реєстрації // Заповнимо відбір по періоду ОтборЖурнала. Вставити ( "ДатаНачала", ПараметрПеріод. ДатаНачала); ОтборЖурнала. Вставити ( "ДатаОкончанія", ПараметрПеріод. ДатаОкончанія); // Встановимо відбір на події МассівСобитій \u003d Новий Масив; МассівСобитій. Додати ( "_ $ Data $ _ . Delete. New"); МассівСобитій. Додати (" _ $ Data $ _ . Post"); МассівСобитій. Додати (" _ $ Data $ _ . TotalsPeriodUpdate"); МассівСобитій. Додати (" _ $ Data $ _ . Unpost"); МассівСобитій. Додати (" _ $ Data $ _ . Update"); ОтборЖурнала. Вставити (" Подія ", МассівСобитій); // Вивантажуємо журнал реєстрації ВигрузітьЖурналРегістраціі (ЖурТаб, МассівСобитій); // Створюємо і заповнюємо дані для виведення в звіт ЖурТаб. Колонки. Додати ( "Час"); ЖурТаб. Колонки. Додати ( " КолічествоСобитій"); Для Кожного Стор З ЖурТаб Цикл Стор. Час \u003d Час (Стор. Дата); Стор. КолічествоСобитій \u003d 1; КонецЦікла; // Групуємо результат ЖурТаб. Згорнути ( " Ім'я користувача, Час" , " КолічествоСобитій" ) ; // ..............

Перший параметр методу "ВигрузітьЖурналРегістраціі" встановлює таблицю значень, в яку буде вивантажено результат вибірки з журналу реєстрації. Другий параметр встановлюємо фільтр на обрані записи. Филтр є структурою, ключі в якому - це поля, за якими встановлюється відбір. Ми використовуємо поля "ДатаНачала" і "ДатаОкончанія" для установки періоду аналізу журналу реєстрації, а також поле "Подія", в який передаємо масив рядків (найменувань подій). Додані в масив події відповідають діям на даними в базі.

Детальніше про використання методу "ВигрузітьЖурналРегістраціі" Ви можете прочитати в синтаксис-помічника.

Передаємо таблицю значень в СКД

Для того, щоб СКД змогла працювати з отриманою таблицею значень потрібно виконати наступний дії:

1) Створити набір даних в схемі компоновки і задати його поля.
2) В програмний код модуля "ПріКомпоновкеРезультата" прописати передачу таблиці значень в СКД.

// Групуємо результат ЖурТаб. Згорнути ( " Ім'я користувача, Час" , " КолічествоСобитій"); ДанниеРасшіфровкі \u003d Новий ДанниеРасшіфровкіКомпоновкіДанних; // Створюємо дані розшифровки КомпоновщікМакета \u003d Новий КомпоновщікМакетаКомпоновкіДанних; // Створюємо компоновщик макета // ініціалізувавши макет компонування використовуючи схему компоновки даних // і створені раніше настройки і дані розшифровки СхемаКомпоновкіДанних \u003d ПолучітьМакет ( " ОсновнаяСхемаКомпоновкіДанних"); МакетКомпоновкі \u003d КомпоновщікМакета. Виконати (СхемаКомпоновкіДанних, Налаштування, ДанниеРасшіфровкі); // скомпонуємо результат ПроцессорКомпоновкі \u003d Новий ПроцессорКомпоновкіДанних; ПроцессорКомпоновкі. Ініціалізувати (МакетКомпоновкі, // !!! Передаємо таблицю "ЖурТаб" в процесор компонування !!! Новий Структура ( " Журнал реєстрації", ЖурТаб), ДанниеРасшіфровкі); ДокументРезультат. Очистити (); // Виводимо результат в табличний документ ПроцессорВивода \u003d Новий ПроцессорВиводаРезультатаКомпоновкіДаннихВТаблічнийДокумент; ПроцессорВивода. УстановітьДокумент (ДокументРезультат); ПроцессорВивода. Вивести (ПроцессорКомпоновкі); КонецПроцедури

3) Налаштовуємо ресурси і структуру звіту (докладніше дивись в файлі звіту, посилання на який дана в кінці статті).

На цьому налаштування звіту завершені і ми можемо запустити його в режимі підприємства.

підсумок

Зовнішнє джерело даних в СКД позвляет використовувати в звітах дані практично з будь-яких джерел, влючая ті, дані яких ми не зможемо отримати запитами.

Використання СКД для таких джерел дозволяє створювати звіти з гнучкою системою налаштувань, а також дає можливість користувачеві змінювати висновок звіту, його структуру. Всі можливості системи компоновки даних будуть задіяні для таких джерел в повній мірі.

Завантажити звіт з прикладу Ви можете за наступним посиланням.

41
Робив недавно звіт з невизначеною кількістю колонок. Возитися з кодом було неохота, вирішив зробити на СКД. З цим проблема не виникла, необхідно було натягнути результат на довільний макет (свій заголовок + ... 27
Незважаючи на те, що вивчають СКД зустрічаються з цим на перший або другий день, це повинно бути в розділі FAQ. Простий приклад програмного виведення звіту на компонуванні, що використовує стандартні параметри. // Отримуємо схему з ... 18
При формуванні звітів на СКД за замовчуванням всі угруповання розгорнуті, але буває що необхідно відразу після формування показати звіт зі згорнутими угрупованнями! Даний код в модулі звіту дозволяє згорнути ... 10
На цій закладці можна вказати, які здійснюються зв'язки між двома і більше наборами даних, за якими параметрами і условіям..png 1. «Джерело зв'язку» - вказується перший набір даних, від ... 9
Що при розробці звітів потрібно щоб у користувача з обмеженими правами, звіт формувався повністю без перевірки прав! Особливо якщо налаштований RLS Є кілька способів як це зробити: 1. Встановити ...