Одного разу, коли робив новий документ, зіткнувся з необхідністю зробити до документа кілька друкованих форм. Причому користувачі не могли точно сказати як дані повинні бути згруповані в друкованій формі. Була суперечлива інформація. Частина користувачів хотіла групувати за одними реквізитами, частина з іншим. Тобто в перспективі вимальовувалася необхідність створення близько шести різних макетів для виведення на друк, що не влаштовувало мене. В результаті рішення було знайдено - висновок на друк документа з використанням схеми компонування даних. У документ був доданий макет з типом «Схема компонування даних», а також форма з настройками СКД. Власне в настройках було тільки поле, де відображалося дерево з угрупуваннями СКД (КомпоновщікНастроек.Настройкі). Тобто після натискання на кнопку «Друк» у користувача автоматом розкривалося віконце з попередньо встановленими (найбільш часто використовуваними) настройками угруповання. І при необхідності він сам міг задати угруповання в розрізі потрібних йому реквізитів. Ну і далі відбувалася безпосередньо друк з урахуванням налаштувань заданих користувачем. В технічні деталі вдаватися не буду. Головне, що хотілося донести - це сама ідея.

2 коментарі на «" Використання СКД для друку документів "»

    Мої користувачі справлялися. Правда це були не бухгалтера, а керуючі підрозділами компанії. Ну плюс інструкція була написана. А розуміння «хто-такі» документи, довідники, регістри і т.д. від них не було потрібно, тому що друк викликалася безпосередньо з діалогового вікна документа після натискання на стандартну кнопку «Друк»

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

Розглянемо властивості і методи табличного документа, що відносяться до налаштувань друку (в наведених прикладах «ТабДок» це об'єкт типу «Табличний документ»).

властивість «ІмяПрінтера» дозволяє задати для друку принтер, відмінний від встановленого за замовчуванням. Ім'я повинно збігатися з ім'ям принтера, заданим в системі:

ТабДок.ІмяПрінтера \u003d "Canon iR1133";

При друку пакету документів можна заощадити час, встановивши ознаку розбору по копіях:

ТабДок.РазборПоКопіям \u003d Істина;

Число копій можна вказати так:

ТабДок.КолічествоЕкземпляров \u003d 5;

Зрозуміло, можна задати поля:

ТабДок.ПолеСлева \u003d 20; // Поле зліва 20мм, інші поля 10мм (за замовчуванням)

Ще кілька властивостей сторінки:

ТабДок.ОріентаціяСтраніци \u003d ОріентаціяСтраніци.Ландшафт; ТабДок.ЕкземпляровНаСтраніце \u003d 2; // на аркуші буде розміщено 2 сторінки ТабДок.Автомасштаб \u003d істина; // аналогічно налаштувань масштабу «по ширині сторінки»

При необхідності можна вказати конкретне значення масштабу у відсотках (властивість «МасштабПечаті» ).

властивість «РазмерСтраніци» дозволяє задати стандартні формати сторінки - "A3", "A4", "A5" (повний список варіантів доступний в довідці 1С).

ТабДок.РазмерСтраніци \u003d "A3"; // буква А має бути англійською

Для нестандартного розміру паперу (Custom) можна вказати значення висоти і ширини сторінки (в мм):

ТабДок.РазмерСтраніци \u003d "Custom"; // нестандартний розмір ТабДок.ВисотаСтраніци \u003d 350; ТабДок.ШірінаСтраніци \u003d 350;

Також в табличному документі є управління висновком колонтитулів і їх вмістом. Для цього служать властивості "Верхній колонтитул" і "Нижній колонтитул". наприклад:

ТабДок.ВерхнійКолонтітул.Виводіть \u003d істина; // буде надрукований заголовок ТабДок.РазмерКолонтітулаСверху \u003d 7; // розмір колонтитула 7мм (за замовчуванням 10мм) ТабДок.ВерхнійКолонтітул.ВертікальноеПоложеніе \u003d ВертікальноеПоложеніе.Верх; ТабДок.ВерхнійКолонтітул.НачальнаяСтраніца \u003d 2; // колонтитул виводиться з другої сторінки ШріфтКолонтітула \u003d Новий Шрифт ( "Courier New", 8, Істина); ТабДок.ВерхнійКолонтітул.Шріфт \u003d ШріфтКолонтітула; // похилий шрифт ТабДок.ВерхнійКолонтітул.ТекстВЦентре \u003d "Верхній колонтитул"; ТабДок.ВерхнійКолонтітул.ТекстСправа \u003d "Стор. [& НомерСтраніци] з [& СтраніцВсего]"; // нумерація сторінок ТабДок.ВерхнійКолонтітул.ТекстСлева \u003d "[& Дата]"; // поточна дата

Сформований документ відправляється на друк за допомогою методу «Надрукувати ()». Можливо два варіанти виклику.

1) Безпосередньо на принтер:

ТабДок.Напечатать (РежімІспользованіяДіалогаПечаті.НеІспользовать); ТабДок.Напечатать (істина);

2) Перед друком буде виведений діалог друку:

ТабДок.Напечатать (РежімІспользованіяДіалогаПечаті.Іспользовать); ТабДок.Напечатать (брехня);

Крім того можна керувати і розбиттям документа на сторінки. Оцінити кількість сторінок в документі з налагодження поточного принтера можна так:

ТабДок.КолічествоСтраніц ();

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

Треба мати на увазі, що робота останніх трьох методів залежить від встановленого принтера. Якщо методом не вдається його знайти, викликається виняток.

Примусово вставити розриви сторінок дозволяють методи «ВивестіВертікальнийРазделітельСтраніц ()» і «ВивестіГорізонтальнийРазделітельСтраніц ()» .

Таким чином, можна управляти посторінковим друком і контролювати заповнення сторінки:

Якщо Чи не ТабДок.ПроверітьВивод (МассівВиводімихОбластей) Тоді ТабДок.ВивестіГорізонтальнийРазделітельСтраніц (); КонецЕсли

Важливою характеристикою платформи «1С: Підприємство 8.2» є суворе поділ властивостей і методів по контексту виконання. Якщо всі наведені вище властивості доступні в будь-якому контексті, то перелічені методи недоступні на тонкому клієнті. Винятком є \u200b\u200bметод «Надрукувати ()», доступність якого зі зрозумілих причин обмежена клієнтською частиною. Це означає, що формування табличного документа повинно відбуватися на сервері, а відправляти його на друк слід в клієнтської процедурі.

Створимо зовнішній звіт, який буде виводити звітну інформацію про залишки номенклатури і її обороті. Необхідна інформація запитується запитом за допомогою набір даних типу "Запит", який містить текст запиту:
ВИБРАТИ
_ДемоНоменклатура.Ссилка ЯК Номенклатура
помістити АктуальнаяНоменклатура
З
Справочнік._ДемоНоменклатура ЯК _ДемоНоменклатура
ДЕ
НЕ _ДемоНоменклатура.ПометкаУдаленія
І НЕ _ДемоНоменклатура.ЕтоГруппа
;

////////////////////////////////////////////////////////////////////////////////
ВИБРАТИ
АктуальнаяНоменклатура.Номенклатура,
_ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.МестоХраненія,
_ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.КолічествоНачальнийОстаток,
_ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.КолічествоКонечнийОстаток,
_ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.КолічествоПріход,
_ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.КолічествоРасход,
_ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.КолічествоОборот
З
АктуальнаяНоменклатура ЯК АктуальнаяНоменклатура
ЛІВЕ З'ЄДНАННЯ РегістрНакопленія._ДемоОстаткіТоваровВМестахХраненія.ОстаткіІОбороти ЯК _ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти
ПО АктуальнаяНоменклатура.Номенклатура \u003d _ДемоОстаткіТоваровВМестахХраненіяОстаткіІОбороти.Номенклатура

У підсумку звіт містить наступні поля (див. Малюнок 1):

Так як інформація береться з віртуальної таблиці "ОстаткіІОбороти", то СКД автоматично створює два параметра даних НачалоПеріода і КонецПеріода, які необхідні для завдання меж періоду вибірки даних. Я віддаю перевагу з такими параметрами не працювати безпосередньо, а ставити їх значення через інший параметр, який буде доступний користувачеві для редагування (див. Рисунок 2).
Звіт зі своїм завданням справляється, але шапка звіту досить суха. За час роботи, я знайшов кілька способів оформлення шапки звіту:

  1. Налаштування заголовків полів на вкладці СКД "Набори даних";
  2. Налаштування заголовків полів на вкладці СКД "Налаштування";
  3. Програмна установка заголовків полів;
  4. Завдання шапки звіту за допомогою макета;
  5. Доопрацювання результату (табличного документа);
Розглянемо їх детальніше.

1. Налаштування заголовків на вкладці СКД "Набори даних"

Тут все просто, ставимо галочку навпроти властивості поля "Тема" (тобто скасовуємо автозаголовок) і вводимо необхідний текст заголовка (див. Малюнок 4).
Якщо потрібно задати оформлення для всього поля, а не тільки для його заголовка, то існує властивість поля "Оформлення", за допомогою якого можна задати якесь оформлення поля, наприклад, змінити шрифт або задати колір фону (див. Рисунок 5).
На цьому мої знання про вкладку "Набори даних" закінчуються.

2. Налаштування заголовків полів на вкладці СКД "Налаштування"

Для завдання заголовка поля, необхідно виділити потрібне поле, правою кнопкою миші викликати контекстне меню і вибрати пункт "Встановити заголовок" (див. Рисунок 6)
Що б згрупувати поля (наприклад, по типу інформації), потрібно додати группіровочних поле і помістити в нього необхідні поля (див. Малюнок 7), вкладеність необмежена.
Так само можна погратися з властивістю группировочного поля "Розташування", від якого залежить вид угруповання полів.

Дані дії можна робити і в режимі 1С: Підприємства, відкривши налаштування звіту, АЛЕ, до складу налаштувань звіту повинен бути включений пункт "Вибрані поля" (див. Малюнок 8).
На цьому легка частина з налаштування шапки звіту закінчена. З плюсів вище перерахованих дій: вся настройка виконується стандартними засобами. З мінусів: відсутність можливості завдання многострочного заголовка поля.

3. Програмна установка заголовків полів

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

Для цього в модулі звіту визначимо процедуру ПріКомпоновкеРезультата. У цій процедурі напишемо код за завданням заголовка полів.

// 1. Отримуємо призначені для користувача настройки.
НастройкіКД \u003d ЕтотОб'ект.КомпоновщікНастроек.ПолучітьНастройкі ();

// 2. Отримуємо значення параметра "Період" з якого визначаємо дату початку і закінчення періоду.
ПараметрПеріод \u003d Новий ПараметрКомпоновкіДанних ( "Період");
Період \u003d НастройкіКД.ПараметриДанних.НайтіЗначеніеПараметра (ПараметрПеріод) .Значеніе;
НачалоПеріода \u003d Період.ДатаНачала;
КонецПеріода \u003d Період.ДатаОкончанія;

// 3. Підготуємо інформацію про перевизначення заголовка полів. Для цього, створимо
// масив, який буде містити інформацію: ІмяПоля - значення властивості "Шлях" в
// наборі даних (див. Малюнок 1), Тема - текст заголовка.
СпісокПолей \u003d Новий Масив;
стрНачалоПеріода \u003d Формат (НачалоПеріода, "ДФ \u003d dd.MM.yyyy; ДП \u003d" Порожня дата "");
ПолеНачальнийОстаток \u003d Новий Структура ( "ІмяПоля, Тема", "КолічествоНачальнийОстаток", "Залишок на" + Сімволи.ПС + стрНачалоПеріода);
СпісокПолей.Добавіть (ПолеНачальнийОстаток);
стрКонецПеріода \u003d Формат (КонецПеріода, "ДФ \u003d dd.MM.yyyy; ДП \u003d" Порожня дата "");
ПолеКонечнийОстаток \u003d Новий Структура ( "ІмяПоля, Тема", "КолічествоКонечнийОстаток", "Залишок на" + Сімволи.ПС + стрКонецПеріода);
СпісокПолей.Добавіть (ПолеКонечнийОстаток);

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

// 5. Завантажимо змінений призначені для користувача настройки назад.
ЕтотОб'ект.КомпоновщікНастроек.ЗагрузітьНастройкі (НастройкіКД);

Результат звіту (див. Малюнок 10):
Спосіб важче, ніж всі вище перераховані, але мені подобається.

4. Завдання шапки звіту за допомогою макета

Для більш гнучкого налаштування зовнішнього вигляду звіту в СКД передбачено створення макетів. В налаштуваннях звіту створимо ще одну угруповання "детальні записи" і встановимо ім'я "СтрокаДЗ" для цього угруповання (див. Малюнок 11).
На вкладці "Макети" додамо макет заголовка угруповання. Для макета в табличному документі створимо шапку звіту (шапка звіту повинна містити стільки заголовків полів, скільки виводить полів детальна запис) і вкажемо область табличного документа для макета (див. Малюнок 12).
У підсумку звіт має такого вигляду шапку (див. Малюнок 13):

Малюнок 13. Макет СКД як шапки звіту
На мою думку, макети мають один великий мінус, це неможливість перебудовуватися під задану призначену для користувача угруповання, тому їх слід використовувати в тому випадку, якщо звітна форма регламентована і не може бути змінена. Спробуйте змінити угруповання для угруповання "СтрокаДЗ" і побачите, що макет збився.

На сайті інформаційно-технологічного супроводу наведена стаття Використання зумовлених макетів, яка детально описує прийоми використання макетів в СКД.

5. Доопрацювання результату (табличного документа)

У цьому способі використовується чудовий метод табличного документа НайтіТекст (), Але для застосування даного способу потрібно відключення стандартної обробки формування результату звіту.

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

Скомпонований результат виводиться в табличний документ - це змінна ДокументРезультат. Далі, після формування результату і виведення його в табличний документ пишемо код для заміни одного тексту осередку на інший. Наприклад, змінимо в шапці звіту назва угруповання "Залишки" на "Залишки номенклатури" (див. Малюнок 14):
Осередок \u003d ДокументРезультат.НайтіТекст ( "Залишки");
якщо Осередок<> Не визначено Тоді
Ячейка.Текст \u003d "Залишки номенклатури";
КонецЕсли;

Так само для знайденої осередку можна задати форматування, див. Властивості осередку табличного документа в синтаксис-помічника.

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

P.S. може бути у вас в арсеналі є ще спосіб оформлення заголовків полів?

При створенні звітів за допомогою системи компоновки даних (СКД) зручно виводити параметри звіту (хоча б найбільш часто використовувані) на форму, щоб не змушувати користувача копатися в стандартному вікні налаштувань СКД.

Розглянемо як це можна зробити на звичайних формах 1С. Відразу обмовимося, що в цій статті буде розглядатися саме висновок параметрів на форму, тобто самі параметри в СКД вже повинні бути створені.

Існує два способи виведення параметрів СКД на звичайну форму:

  • висновок таблиці налаштувань параметрів цілком
  • висновок окремих параметрів у вигляді полів введення.

Таблиця настройки параметрів, що виводиться на форму, аналогічна таблиці настройки параметрів, що генерується засобами СКД. Для її виведення на форму потрібно створити елемент управління ТаблічноеПоле, У якого у властивості данівказати КомпоновщікНастроек.Настройкі.ПараметриДанних

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

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

  1. Створимо реквізити звіту, відповідні параметрам. У нашому прикладі це будуть реквізити ДатаНачала, ДатаОкончанія, Організація. Встановимо у них відповідні типи даних.
  2. Створимо на формі поля введення для кожного з параметрів і зв'яжемо їх через властивість дані з реквізитами звіту. Для кожного поля введення добре б поруч створити напис з назвою параметра, щоб користувач розумів, який параметр він редагує.
  3. Для кожного поля введення потрібно створити процедуру для обробника подій При зміні, Яка буде встановлювати за вибором користувача значення в параметри СКД. Я в прикладі створив одну процедуру і призначив її на події зміни всіх трьох полів введення. Тобто при зміні одного параметра відбувається перевстановлення всіх трьох. З точки зору швидкодії це, швидше за все, не ефективно, але, тому що параметрів не багато, різниця не помітна. При великій кількості параметрів варто виводити установку кожного в окрему процедуру. Отже, код процедури для обробника При зміні буде виглядати наступним чином:

    Процедура ПараметриПріІзмененіі (Елемент)

    ПараметрДатаНач \u003d КомпоновщікНастроек. Налаштування. ПараметриДанних. Елементи. Знайти ( "НачалоПеріода"); // Пошук проводиться по імені параметра СКД
    ПараметрДатаНач. Використання \u003d Істина; // Параметр буде використовуватися при відборі
    ПараметрДатаНач. Значення \u003d ДатаНачала; // Параметру присвоюється значення реквізиту звіту

    ПараметрДатаКон \u003d КомпоновщікНастроек. Налаштування. ПараметриДанних. Елементи. Знайти ( "КонецПеріода");
    ПараметрДатаКон. Використання \u003d Істина;
    ПараметрДатаКон. Значення \u003d КонецДня (ДатаОкончанія);

    ПараметрОрг \u003d КомпоновщікНастроек. Налаштування. ПараметриДанних. Елементи. Знайти ( "Організація");
    ПараметрОрг. Використання \u003d Істина;
    ПараметрОрг. Значення \u003d Організація;

    КонецПроцедури

Особливості створення звітів в 1С v8 в режимі товстого клієнта

Як зробити вибір варіанта?

  • На панель звіту поміщаємо кнопку "ВибратьВаріант"
  • На форму поміщаємо поле "НаДату"

Приклад коду: Процедура ДействіяФормиВиборВаріанта (Кнопка) макет \u003d ПолучітьМакет ( "ОсновнаяСхемаКомпоновкіДанних"); спВаріанти \u003d Новий СпісокЗначеній; Для кожного варіант з макет.ВаріантиНастроек Цикл спВаріанти.Добавіть (варіант.Настройкі, варіант.Представленіе); КонецЦікла;

вибір \u003d спВаріанти.ВибратьЕлемент (); Якщо вибір \u003d Не визначено Тоді Повернення; КонецЕсли;

КомпоновщікНастроек.ЗагрузітьНастройкі (вибор.Значеніе);

Сформувати (); КонецПроцедури

Процедура НаДатуПріІзмененіі (Елемент) Сформувати (); КонецПроцедури

Процедура Сформувати () ЕлементиФорми.Результат.Очістіть (); КомпоновщікНастроек.Настройкі.ПараметриДанних.УстановітьЗначеніеПараметра ( "Період", НаДату); СкомпоноватьРезультат (ЕлементиФорми.Результат); КонецПроцедури

Процедура відкриття () НаДату \u003d ТекущаяДата (); Сформувати (); КонецПроцедури

Особливості створення звітів через СКД

Поетапне створення звіту

  1. Створити Звіт в вузлі Звітів
  2. Створити Макет в звіті, тип якого - Схема компонування даних
  3. У властивостях звіту встановити: Основна схема компонування даних \u003d Створений Макет
  4. У властивостях звіту встановіть підсистему, якою він належить (звіт в Підприємстві буде виведений в верхній навігаційній панелі)
  5. Створити запит в макеті (пункт: Додати набір даних - Запит)
  6. У закладці Параметри у Макета необхідно прибрати галочки у всіх рядків в колонці ОграніченіеДоступності - тобто всі параметри будуть доступні для редагування користувачеві
  7. У закладці Налаштування у Макета необхідно у вікні, де виводиться вузол Звіт, створити нову угруповання без вказівки поля угруповання - буде створена детальна рядок
  8. У закладці Налаштування у Макета, в вікні де виводиться додатковий набір закладок, вибрати доп. 'ятати Параметри - позначити всі параметри галочкою і на кожному параметрі натиснути кнопку Властивості елемента налаштувань, відкриється вікно налаштування параметра, де необхідно поставити галочку - Включати параметр в призначені для користувача настройки
  9. У закладці Налаштування у Макета, в вікні де виводиться додатковий набір закладок, вибрати доп. 'ятати ВибранниеПоля - там необхідно додати колонки які будуть виводитися в звіті
  10. Запускайте Підприємство, відкривайте звіт, встановлюйте значення параметрів, Сформувати (перевірте що обраний Основний варіант формування звіту)

Як додати Нередагована користувачем параметр?

Наприклад, нам потрібно встановити параметр запиту "Інформаційна база"

  • У формі макета компонування на закладці Параметри у потрібного параметра зняти прапори "Включати в доступні поля" і "Обмеження доступності"
  • У формі макета компонування на закладці Налаштування на подзакладке (внизу) Параметри у потрібного параметра зняти прапор, відкрити властивості (кнопка з гайковим ключем), на цій формі:
    • Зняти прапор "Включати в призначені для користувача настройки"
    • Режим редагування встановити "Недоступний"


  • У модулі форми звіту в обробнику події "ПріЗагрузкеВаріантаНаСервере" (можна і прочинені, але НЕ ПріСозданііНаСервере, тому що вона виконується ДО завантаження налаштувань звіту і налаштування будуть перезаписані) програмно встановити параметр:

& НаСервере Процедура ПріЗагрузкеВаріантаНаСервере (Настройки)

// Установка параметра Налаштування \u003d Отчет.КомпоновщікНастроек.Настройкі; Настройкі.ПараметриДанних.УстановітьЗначеніеПараметра ( "ІнформаціоннаяБаза", Отчет.ІнформаціоннаяБаза); КонецПроцедури

Як задати варіанти звіту?

  • У формі макета компонування на закладці Налаштування в поле зліва можна створити необхідні варіанти звіту

Як задати угруповання?

  • У формі макета компонування на закладці Налаштування в поле справа вгорі можна створити необхідні угруповання

Як програмно вивести звіт?

У модулі форми:

& НаКліенте Процедура СформіроватьОтчетВиполніть ()

ЕтаФорма.СкомпоноватьРезультат ();

КонецПроцедури

Як тестувати звіт?

Потрібно виконати:

  • Сформувати ситуацію в клієнтському тесті - найзручніше через таблицю ситуації
  • отримати форму звіту - форма \u003d ПолучітьФорму ( "Отчет.ДвіженіеПроцесов.Форма.ФормаОтчета");
  • завантажити потрібний варіант звіту - встановити параметр розширення форми звіту "КлючВаріанта" (ім'я настройки в макеті компонування даних)
  • завантажити потрібні налаштування звіту -? заповнити параметр розширення форми звіту "ПользовательскіеНастройкі" (тип "ПользовательскіеНастройкіКомпоновкіДанних") так не вийшло, все складно, див. нижче.
  • відкрити форму - форма.Открить ()
  • виконати формування - форма.СкомпоноватьРезультат ();
  • перевірити вміст табличного документа форма.Результат - добре б мати функції порівняння з еталонною mxl
  • закрити форму - форма.Закрить (); - а може бути, можна і не відкривати, треба перевірити

див. також

  • опис: меню Довідка / Синтакс-помічник / закладка Зміст / Інтерфейсні об'єкти керованого застосування / Розширення керованої форми / Розширення керованої форми для звіту / Параметри форми

Як завантажити потрібні налаштування звіту?

У документації описано, що є такий параметр розширення форми звіту "ПользовательскіеНастройкі" типу "ПользовательскіеНастройкіКомпоновкіДанних", але там дуже складна об'єктна структура, не вдалося її використовувати.

Реально працює схема:

1. Створюємо в звіті параметри

  • Період типу СтандартнийПеріод
  • Відбір типу СпісокЗначеній (краще було б Структура, але її немає в списку типів параметрів, як і довільного типу)

2. У процедуру ПолучітьФорму передаємо потрібні параметри:

період \u003d Новий СтандартнийПеріод; період.Варіант \u003d ВаріантСтандартногоПеріода.ПроізвольнийПеріод; період.ДатаНачала \u003d текущаяДата; період.ДатаОкончанія \u003d завтрашняяДата;

відбір \u003d Новий СпісокЗначеній; отбор.Добавіть (Тестірованіе.ПолучітьОб'ект (стСітуація, "БП1"), "бізнес-процесів");

стПараметри \u003d Новий Структура ( "КлючВаріанта, Період, Відбір", "Основний", період, відбір); // ОткритьФормуМодально ( "Отчет.ДвіженіеПроцессов.Форма.ФормаОтчета", стПараметри); форма \u003d ПолучітьФорму ( "Отчет.ДвіженіеПроцессов.Форма.ФормаОтчета", стПараметри);

3. У обробниках подій форми встановлюємо параметри

& НаСервере Функція спПолучіть (спСпісок, уявлення) Експорт Для Кожного елемент З спСпісок Цикл Якщо елемент.Представленіе \u003d уявлення Тоді Повернення елемент.Значеніе; КонецЕсли; КонецЦікла; Повернення Не визначено; КонецФункціі

& НаСервере Процедура УстановітьЗначеніеПользовательскойНастройкі (Настройки, Ім'я, Значення) Для Кожного елемент З Настройкі.Елементи Цикл Якщо ТіпЗнч (елемент) \u003d Тип ( "ЗначеніеПараметраНастроекКомпоновкіДанних") Тоді Якщо Рядок (елемент.Параметр) \u003d Ім'я Тоді елемент.Значеніе \u003d Значення; елемент.Іспользованіе \u003d Істина; КонецЕсли; КонецЕсли; КонецЦікла; КонецПроцедури

& НаСервере Процедура УстановітьЗначеніеПользовательскогоОтбора (Настройки, Ім'я, Значення) Для Кожного елемент З Настройкі.Елементи Цикл Якщо ТіпЗнч (елемент) \u003d Тип ( "ОтборКомпоновкіДанних") Тоді Для Кожного відбір З елемент.Елементи Цикл Якщо Рядок (отбор.ЛевоеЗначеніе) \u003d Ім'я Тоді відбір .ПравоеЗначеніе \u003d значення; отбор.Іспользованіе \u003d Істина; КонецЕсли; КонецЦікла; КонецЕсли; КонецЦікла; КонецПроцедури

& НаСервере Процедура ПріЗагрузкеВаріантаНаСервере (Настройки)

НаіменованіеТекущегоВаріанта \u003d ПредставленіеТекущегоВаріанта;

Налаштування \u003d Отчет.КомпоновщікНастроек.Настройкі; Настройкі.ПараметриДанних.УстановітьЗначеніеПараметра ( "ІнформаціоннаяБаза", Отчет.ІнформаціоннаяБаза);

КонецПроцедури

& НаСервере Процедура ПріЗагрузкеПользовательскіхНастроекНаСервере (Налаштування) Налаштування \u003d Отчет.КомпоновщікНастроек.ПользовательскіеНастройкі;

<> "00010101" Тоді Налаштування \u003d Отчет.КомпоновщікНастроек.ПользовательскіеНастройкі; УстановітьЗначеніеПользовательскойНастройкі (Настройки, "Період", Параметри.Період); КонецЕсли;

ссБізнесПроцесс \u003d спПолучіть (Параметри.Отбор, "бізнес-процесів"); якщо ссБізнесПроцесс<> Не визначено Тоді УстановітьЗначеніеПользовательскогоОтбора (Настройки, "бізнес-процесів", ссБізнесПроцесс); КонецЕсли;

КонецПроцедури

зауваження:

  • Є ПараметриДанних, тобто те що встановлюється в параметри запиту СКД
  • Деякі з них призначаються в налаштуванні варіанту в ПользовательскіеНастройкі (в свойтсва параметра є прапор "Включити в призначені для користувача настройки"
  • Навіть якщо при завантаженні на сервері в параметри даних завантажити потрібні значення, потім відкривається форма, в яку автоматично завантажуються збережені в минулий раз настройки. Ці настнокі при формуванні звіту "перебивають" настройки даних
  • У обробнику ПріЗагрузкеПользовательскіхНастроекНаСервере об'єкт, який потрібно Налаштування є копією реальних налаштувань, тому щоб змінити налаштування, які з'являться на формі, треба заповнювати об'єкт Отчет.КомпоновщікНастроек.ПользовательскіеНастройкі

Як зробити множинні (списком) параметри запиту в СКД?

У запиті потрібно використовувати вираз "В (& ІмяПараметра)" (Див. Логічні вирази в мові запитів 1Cv8)

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

Як зробити відключаються параметри запиту в СКД?

У запиті СКД треба використовувати конструкції, оточені фігурними дужками "{}" .

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

Детальніше див. Розширення мови запитів для системи компоновки даних (1Cv8)

Як зробити звіт з розворотом по колонках?

Для цього в налаштуванні варіанту звіту (редагування макета компонування даних, закладка "Налаштування", поле справа вгорі), потрібно в якості першого угруповання додати "Таблиця".

Після цього в вузлі "Таблиця" з'являються гілки "Рядки" та "Колонки", куди і додаються потрібні угруповання.

Як налаштувати формат виведення полів?

У редакторі макета компонування даних на закладці "Набори даних" в правій верхній області є список полів звіту.

Є дві можливості:

  1. Налаштувати значення колонки "Вираз вистави"
    • тут можна ввести вираз мови, котре видає потрібний рядок
    • з полями ресурсів це не працює
  2. Налаштувати значення колонки "Оформлення"
    • в оформленні є властивість "Формат" - це значення, аналогічне параметру функції мови "Формат", можна задати потрібний вид
    • перетворення типів тут не зробити

Для полів ресурсів можна задавати вираження обчислення (закладка "Ресурси") - наприклад,

Сума (Час) /3600.0

для перекладу з секунд у години.

Потрібну точність можна задати через "Оформлення" поля на закладці "Набори даних".

Особливості установки параметрів системи компоновки даних

Існують і вимагають різної обробки принаймні ТРИ виду параметрів:

ПараметриДанних

ПараметриДанних визначаються в запиті (джерелі даних) СКД.

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

В об'єкта КомпоновщікНастроек є спеціальне властивість для роботи з параметрами даних КомпоновщікНастроек.Настройкі.ПараметриДанних

Можна встановити викликом вигляду

Налаштування \u003d Отчет.КомпоновщікНастроек.Настройкі; Настройкі.ПараметриДанних.УстановітьЗначеніеПараметра ( "ІнформаціоннаяБаза", Отчет.ІнформаціоннаяБаза);

відбір

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

В об'єкта КомпоновщікНастроек є спеціальне властивість для роботи з відборами КомпоновщікНастроек.Настройкі.Отбор.

наприклад: Налаштування \u003d Отчет.КомпоновщікНастроек.Настройкі; Настройкі.ПараметриДанних.УстановітьЗначеніеПараметра ( "ІнформаціоннаяБаза", Отчет.ІнформаціоннаяБаза);

Для кожного елемент З Параметри.Отбор Цикл ЕлементОтбора \u003d Настройкі.Отбор.Елементи.Добавіть (Тип ( "ЕлементОтбораКомпоновкіДанних")); ЕлементОтбора.ВідСравненія \u003d ВідСравненіяКомпоновкіДанних.Равно; ЕлементОтбора.ЛевоеЗначеніе \u003d Новий ПолеКомпоновкіДанних (елемент.Представленіе); ЕлементОтбора.ПравоеЗначеніе \u003d елемент.Значеніе; КонецЦікла;

ПользовательскіеНастройкі

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

Призначені для користувача настройки можуть відображаються на формі в спеціальній таблиці і можуть бути викликані по кнопці "Налаштування" і з меню "Всі дії".

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

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

Крім того, якщо якийсь параметр даних оголошений призначеним для користувача, то програмної установки параметра даних (див.вище) недостатньо, відновлюване значення для користувача настройки перебиває встановлено значення даних. Тому для таких параметрів немає сенсу встановлювати параметр даних, Потрібно відразу встановлювати призначену для користувача налаштування.

Зручне місце для установки потрібних значень - обробник події "ПріЗагрузкеПользовательскіхНастроекНаСервере" розширення форми звіту.

& НаСервере Процедура ПріЗагрузкеПользовательскіхНастроекНаСервере (Настройки)

якщо Параметри.Період.ДатаОкончанія<> "00010101" Тоді Налаштування \u003d Отчет.КомпоновщікНастроек.ПользовательскіеНастройкі; Настройкі.Елементи.Значеніе \u003d Параметри.Період; КонецЕсли;

КонецПроцедури

Використання джерела даних у вигляді об'єкта

Для використання набору даних типу об'єкт потрібно передати зовнішнє джерело даних методу Ініціалізувати об'єкта "Процесор компонування даних".

ДанниеРасшіфровкі \u003d Не визначено;

КомпоновщікМакета \u003d Новий КомпоновщікМакетаКомпоновкіДанних; МакетКомпоновкі \u003d КомпоновщікМакета.Виполніть (СхемаКомпоновкіДанних, КомпоновщікНастроек.Настройкі, ДанниеРасшіфровкі);

ПроцессорКомпоновкі \u003d Новий ПроцессорКомпоновкіДанних; ПроцессорКомпоновкі.Ініціалізіровать (МакетКомпоновкі, Новий Структура ( "Дані", ПолучітьДанниеВнешнегоІсточніка ()), ДанниеРасшіфровкі);

Простий приклад прикладений (для роботи прикладу необхідно наявність довідників "Контрагенти" і "Договори контрагентів").